df и du расходятся: ищем удалённый открытый файл
Как найти удалённый файл, который процесс всё ещё держит открытым, и освободить место без случайной остановки сервиса.
- Файл удалёнИмени больше нет в дереве каталогов
- Процесс держит файлlsof показывает открытый удалённый файл
- Дескриптор закрытЗанятые блоки освобождаются
Большой журнал удалили, а df по-прежнему показывает занятый диск. Возможно, процесс продолжает держать файл открытым. Имя уже исчезло из каталога, но место освободится только после закрытия последнего дескриптора. Найдём такой файл через lsof и посмотрим, как попросить приложение переоткрыть журнал.
Сравниваем одну файловую систему
df -h /var
sudo du -x -h --max-depth=1 /var
sudo lsof +L1Путь в df должен относиться к тому же разделу, который обходит du. Без достаточных прав часть дерева будет недоступна, поэтому оценка du окажется неполной. Разные точки монтирования, снимки и особенности файловой системы тоже влияют на картину. Вывод lsof с отбором по числу ссылок помогает найти открытые файлы, у которых больше нет обычного имени.
Связываем файл с приложением
В примере приложение продолжает писать в удалённый access.log. В строке lsof найдите команду, PID, дескриптор и размер. Не складывайте все строки механически: один объект может быть открыт несколькими процессами. Убедитесь, что устройство и путь относятся к проблемному разделу. Наличие небольшой удалённой библиотеки не объясняет исчезновение десятков гигабайт.
Правильное действие зависит от программы. Некоторые службы умеют переоткрывать журналы по документированному сигналу или собственной административной команде. Для других нужен согласованный перезапуск с проверкой очередей и активных запросов. Универсального безопасного сигнала нет. Сначала выясните поддерживаемый механизм, затем выполните его в допустимое для сервиса время.
Проверяем освобождение места
Повторите df и lsof после переоткрытия. Проверьте, что новый журнал появился и в него поступают свежие записи. Если дескриптор остаётся открытым, определите, какой процесс его удерживает, вместо повторения удаления. Не обнуляйте случайные файлы через proc: это может уничтожить рабочие данные и не устранит причину неправильного обслуживания.
Запишите способ переоткрытия журнала — он пригодится для настройки ротации. Разница df и du сама по себе ещё не диагноз. Причину подтверждают найденный открытый файл и освобождение места после закрытия дескриптора. Если расхождение осталось, учитывайте особенности самой файловой системы.
