Иногда
rm удаляет огромный лог, но df -h показывает, что диск всё ещё забит.Причина: процесс продолжает держать файл открытым.
В Linux файл окончательно освобождает место только когда:
- удалена ссылка на него;
- и ни один процесс больше не держит открытый file descriptor.
Найти такие файлы:
sudo lsof +L1
Или:
sudo lsof | grep deleted
Можно увидеть что-то вроде:
nginx 1842 root 5w REG 8,1 12G /var/log/nginx/access.log (deleted)
Файл уже удалён из файловой системы, но процесс
nginx всё ещё держит 12 ГБ.Самый безопасный вариант — перезапустить сервис:
sudo systemctl restart nginx
После закрытия file descriptor место освободится.
Проверить:
df -h
Иногда перезапускать процесс нельзя. Тогда можно обнулить содержимое через открытый descriptor:
sudo truncate -s 0 /proc/1842/fd/5
Где:
1842 — PID процесса
5 — номер file descriptor
Но с этим способом нужно быть осторожным: сначала убедитесь, что выбрали правильный PID и FD.
Полезная цепочка при загадочно заполненном диске:
df -h
sudo du -xhd1 /
sudo lsof +L1
Если
df показывает занятые 100 ГБ, а du находит только 70 ГБ — очень вероятно, что оставшееся место удерживают уже удалённые файлы.Это одна из тех Linux-проблем, где файл «не существует», но всё ещё занимает гигабайты.