Бывает, что файл уже удалили, а
df продолжает показывать занятое местоПричина в том, что процесс всё ещё держит файл открытым
Находим такие файлы
lsof +L1
Например:
java 4217 app 12w REG 8,1 21474836480 /var/log/app.log (deleted)
Файл больше не виден в каталоге, но его inode и блоки всё ещё принадлежат процессу java
Почему rm не освобождает место
При удалении файл сначала теряет имя в файловой системе
Но данные остаются доступны через уже открытый файловый дескриптор
Условно:
/var/log/app.log
↓ rm
inode ─────→ процесс
Пока процесс не закроет FD, ядро не сможет освободить занятые блоки
Можно увидеть сам дескриптор
ls -l /proc/4217/fd/12
Получим:
/var/log/app.log (deleted)
А иногда нужно срочно освободить место, но перезапускать процесс нельзя
Тогда содержимое открытого файла можно обнулить через
/proc: > /proc/4217/fd/12Размер файла станет нулевым, при этом процесс продолжит использовать тот же FD
df показывает занято, а du не находит часто объясняется именно deleted-open файламиdu уже не видит файл в каталоге, а ядро продолжает учитывать его блоки до закрытия последнего дескриптора

