👁 В Linux часто возникает странная ситуация: ты удалил большой лог или файл, но место на диске не освободилось. Обычно это происходит потому, что процесс всё ещё держит открытый файловый дескриптор. Файл уже удалён из файловой системы, но ядро продолжает хранить его, пока процесс не закроет дескриптор.
📝 Поиск процессов, удерживающих удалённые файлы
Чтобы найти такие процессы, можно использовать lsof. Ключ +L1 показывает файлы, у которых количество ссылок меньше 1, то есть они уже удалены, но всё ещё используются процессом. В выводе будет видно PID процесса, пользователя и размер файла. Очень часто так обнаруживаются висящие логи, которые продолжают занимать десятки гигабайт.
sudo lsof +L1
📝 Освобождение места без остановки сервиса
Если перезапуск сервиса нежелателен, можно очистить файл через файловый дескриптор процесса в /proc. Здесь 12345 — PID процесса, а 4 — номер дескриптора из вывода lsof. Это обнуляет файл, и место на диске сразу освобождается.
sudo truncate -s 0 /proc/12345/fd/4
❗️ Это часто спасает прод-серверы, когда диск внезапно заполняется логами, а перезапуск сервисов делать нельзя. Главное — сначала убедиться, что это действительно удалённый файл, а не активные данные.
tags: #linux #файлы #полезно



