df -h говорит, что корень заполнен, du насчитывает на 40 ГБ меньше, логи уже почистили, а места не прибавилось. Типичная причина: файл удалили, но процесс всё ещё держит его открытым. Пока дескриптор открыт, место на диске не освобождается.🟢 Сравните цифры:
df -h /
sudo du -xsh / 2>/dev/null
Если
df показывает заметно больше, чем du, ищите удалённые, но открытые файлы.🟢 Найдите, кто их держит:
sudo lsof -nP +L1 | grep deletedВ выводе будут процесс, PID, номер дескриптора (FD) и размер. Чаще всего это лог, который удалили через
rm вместо ротации.🟢 Освободите место. Самый чистый путь — перезапустить сервис или попросить его переоткрыть логи:
sudo systemctl restart nginxЕсли перезапускать сейчас нельзя, обнулите файл через дескриптор процесса. PID и FD берите из вывода lsof, здесь для примера 1234 и 7:
sudo truncate -s 0 /proc/1234/fd/7🟢 Чтобы не повторилось, удаляйте логи через logrotate, а не
rm. Для сервисов, которые не умеют переоткрывать файл, в конфиге ротации есть опция copytruncate.Если
df и du сходятся, а места всё равно нет, проверьте inode: df -i. Миллион мелких файлов сессий или кеша съедает их раньше, чем гигабайты.Процессы, файловые дескрипторы, диски и systemd разбираем на практике в курсе Linux Basics. Первые задания открыты бесплатно — по кнопке под постом.