Почему ncdu сообщает данные, отличающиеся от данных df?

Почему ncdu сообщает данные, отличающиеся от данных df?

df -hотпечатки:

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        59G  6.6G   50G  12% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  9.0M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   54M  199M  22% /boot
tmpfs           391M     0  391M   0% /run/user/1000

в то время как ncdu /печатает:

Total disk usage:   1.8 GiB  Apparent size:   1.8 GiB  Items: 176500

Почему в одном отчете указано использование 6,6+ ГиБ, а в другом — только 1.8 GiB?

решение1

Вывод dfоснован на статистике уровня файловой системы, тогда как ncdu(и обычный du) генерирует свои результаты путем сканирования каталогов, считывания размеров отдельных файлов и суммирования этих данных.

Если duкоманды -style выполняются от имени пользователя, не являющегося пользователем root, у него не будет полного доступа ко всем каталогам, и поэтому он не сможет увидеть все (используйте sudo ncduв этом случае).

Попробуйте запустить du -hs /и сравнить его результаты с "общим использованием диска", о котором сообщает ncdu /. Вы можете обнаружить, что результаты похожи... и с du, вы также можете увидеть сообщения о куче каталогов, к которым команда не может получить доступ и поэтому не учитывает их. То же самое, вероятно, относится и к ncdu, но он просто скрывает сообщения об ошибках.

Также мне кажется, что, ncduвозможно, не были обновлены для понимания виртуальных файловых систем современных дистрибутивов Linux, и они могут сбить меня с толку. В моей системе Debian 10 ncdu /отчеты:

Total disk usage:  75.6 GiB  Apparent size: 128.1 TiB  Items: 469143

В моем случае "Видимый размер" явно бессмыслен и бесполезен. "Общее использование диска" примерно такое же, как то, что я получаю с du -hs /... но поскольку это включает в себя ряд виртуальных файловых систем на основе ОЗУ ( devtmpfs, tmpfs), это число также вряд ли будет очень полезным.

Но если я ограничу команду только одной файловой системой (например, ncdu -x /), то, похоже, я получу более разумные результаты, которые также du -shx /с точностью до ошибки округления соответствуют выводу , а также выводу , df -hесли вспомнить, что файловой системе может потребоваться некоторое пространство для внутренних метаданных.

Другим возможным источником ошибок может быть использование расширенных функций файловой системы, таких как моментальные снимки файловой системы BTRFS. Конечно, у вас может быть всего 1,8 ГиБ файлов в вашей корневой файловой системе, но если файловая система также содержит два моментальных снимка своих предыдущих состояний, общий объем используемого дискового пространства может быть в 3 раза больше, чем сумма размеров файлов, которую вы (и любая du-подобная команда) ожидаете.

Поскольку dfкоманда получает информацию, запрашивая драйвер файловой системы, большее «используемое» значение, сообщаемое ею, может включать моментальные снимки, которые в противном случае могли бы быть невидимы, пока к ним не будет получен доступ с помощью соответствующего метода.

Связанный контент