du и df показывают разный размерОдна из классических загадок Linux:
df -h
Показывает:/dev/sda1 100%
Но если проверить содержимое файловой системы:du -sh /var
du -sh /home
du -sh /opt
Суммарный объём получается заметно меньше.Куда пропало место?
▪️Что считают du и df
du подсчитывает размер файлов, которые видны в файловой системе.df показывает занятые блоки на уровне самой файловой системы.Из-за этого их значения могут различаться.
▪️Самая частая причина
Удалённый файл всё ещё открыт процессом.
Например:
rm app.log
Файл исчез из каталога, поэтому du его больше не видит.Но если процесс продолжает писать в него, место останется занятым.
Найти такие файлы можно так:
lsof +L1
Пример вывода:java 1234 user 5w REG ... app.log (deleted)
Пока процесс не завершится или не закроет дескриптор, место не освободится.▪️Другие причины
Зарезервированные блоки ext4:
tune2fs -l /dev/sda1 | grep Reserved
Смонтированные файловые системы внутри каталогов:mount | column -t
Или bind-монтирования, из-за которых данные учитываются неожиданным образом.▪️Быстрая диагностика
Если диск внезапно заполнился:
df -h
lsof +L1
Во многих случаях проблема обнаруживается уже на втором шаге.▪️Почему это важно
На продакшн-серверах часто удаляют огромный лог в надежде освободить место. Но если процесс продолжает держать файл открытым, свободное пространство не появится, а приложение может вскоре упасть из-за нехватки диска.
BashTex 📱 #scripts #du