df, du Сообщить о неправильном использовании диска

df и du оба неправильно сообщают, что мой корневой раздел, SSD на 100 ГБ, не имеет свободного места и использует 100G соответственно; 85G в /home/steven одиночку. Однако простое суммирование использования диска, предоставляемое du , сообщает менее 13G.

Как я могу это исправить?

В частности:

 ~ » du -sh ~ 85G /home/steven ~ » du -b ~ | wc -l 15041 ~ » du -h ~ | sort -h | tail -n 1 85G /home/steven # 91088489808 bytes if using -b for du ~ » du -b ~ | sort -n | head -n 15040 | cut -f 1 | perl -ne 'BEGIN{$i=0;}$i+=$_;END{print $i.qq|\n|;}' 12735983847 # 11-12G, roughly 

Очевидно, что существует огромное расхождение между 85G и 11G или 12G. Я запустил lsof +L1 и устранил все процессы с файлами, помеченными как deleted , но все равно не повезло.

У меня есть несколько мягких ссылок в $HOME указывающих на каталоги (например, repos ) на внешнем жестком диске, что может быть проблемой на некоторых постах Stack Exchange, которые я читаю, но я не могу понять.

Что я должен делать дальше?

2 Solutions collect form web for “df, du Сообщить о неправильном использовании диска”

du делает первый шаг по пересечению данного дерева. По умолчанию в нем показано использование каждого дерева каталогов, в котором показано использование каждого диска:

 $ du ~ 4 /home/bob/Videos 40 /home/bob/.cache/abrt 43284 /home/bob/.cache/mozilla/firefox 43288 /home/bob/.cache/mozilla 12 /home/bob/.cache/imsettings 48340 /home/bob/.cache 4 /home/bob/Documents 48348 /home/bob 

Если задан параметр -a , он будет дополнительно показывать размер каждого файла.

С параметром -s он покажет только общий размер каждого файла аргумента или дерева каталогов.

 $ du -s ~ 48348 /home/bob $ du -s ~/* 4 /home/bob/Videos 4 /home/bob/Documents 

Итак, когда вы побежали

 $ du -b ~ | wc -l 15041 $ du -b ~ | sort -n | head -n 15040 | cut -f 1 | \ perl -ne 'BEGIN{$i=0;$i+=$_;END{print $i.qq|\n|;}' 12735983847 

вы суммировали размер всего, что находится под вашим домашним каталогом, – много раз, к сожалению, потому что размер, указанный в каждой строке, включает все подкаталоги, но поскольку вы опустили окончательную строку вывода du, что будет линией для /home/steven , du не /home/steven размер любого из обычных файлов на верхнем уровне вашего домашнего каталога . Таким образом, сумма не включала ваш очень большой .xsession-errors .

И когда вы побежали

 du -sb ~ returns 91296460205, but the sum of du -sb ~/* is only 1690166532 

ваш du -sb ~/* не включал в себя файлы или каталоги в вашем домашнем каталоге . ,

Оба du ~ | tail -1 du ~ | tail -1 и du -s ~ должны делать разумную работу по отображению дискового пространства вашего домашнего каталога (конечно, не включая удаленные, но открытые файлы), но если вы хотите суммировать все размеры файлов, не полагаясь на du , вы можете сделать что-то подобное (предполагая современную find которая поддерживает формат printf %s , чтобы показать размер в байтах):

 find ~ -type f -printf '%s\n' | perl -ne 'BEGIN{$i=0;$i+=$_;END{print $i.qq|\n|;}' 

Вы суммируете байты, но размер блока файловой системы, вероятно, намного больше, чем 1 байт. Для точного подсчета вы должны округлить размер каждого файла, чтобы он был кратным размеру файловой системы.

С установленным GNU coreutils вы можете запустить stat --file-system $HOME чтобы найти размер блока файловой системы.

В среднем файлы будут тратить половину блока. Умножьте половину блока на количество файлов в $ HOME и посмотрите, близок ли результат к 70GiB. Если это так, тогда ваша тайна будет решена.

  • `du -sh` сообщает другой использованный размер, чем` df -h`
  • Непоследовательные результаты команды du
  • Как используются подсчитанные блоки `du`
  • DU: показывать только папки на глубине
  • Система сообщает, что почти нет свободного места, но итоговые значения не складываются
  • du показывает полностью разные размеры папки для * и имени папки
  • du дает ошибку и результат одновременно
  • / var переполняется, каково решение?
  • df vs. du: почему так много разницы?
  • использование пространства
  • Что означает столбец «1K-blocks» в выводе `df`?
  • Linux и Unix - лучшая ОС в мире.