为什么 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+ GiB,而其他报告仅使用了 6.6+ GiB 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 /......但因为这包括许多基于 RAM 的虚拟文件系统(devtmpfstmpfs),所以这个数字也不太可能非常有用。

但是,如果我将命令限制为仅一个文件系统(例如ncdu -x /),我似乎会得到更合理的结果,这也与舍入误差内的 to 的输出相匹配,并且还与记住文件系统可能需要一些空间来存储它时du -shx /的输出相匹配。df -h内部元数据。

另一个可能的错误来源是如果您使用高级文件系统功能(例如 BTRFS 文件系统快照)。当然,您的根文件系统上可能只有 1.8 GiB 的文件,但如果该文件系统还包含其先前状态的两个快照,则使用的磁盘空间总量可能高达文件大小总和的 3 倍你(和任何du类似的命令)所期望的。

由于该df命令通过询问文件系统驱动程序来获取其信息,因此它报告的较大“已使用”值可能包括快照,否则快照可能是不可见的,除非使用正确的方法进行访问。

相关内容