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 的虚拟文件系统(devtmpfs
,tmpfs
),所以这个数字也不太可能非常有用。
但是,如果我将命令限制为仅一个文件系统(例如ncdu -x /
),我似乎会得到更合理的结果,这也与舍入误差内的 to 的输出相匹配,并且还与记住文件系统可能需要一些空间来存储它时du -shx /
的输出相匹配。df -h
内部元数据。
另一个可能的错误来源是如果您使用高级文件系统功能(例如 BTRFS 文件系统快照)。当然,您的根文件系统上可能只有 1.8 GiB 的文件,但如果该文件系统还包含其先前状态的两个快照,则使用的磁盘空间总量可能高达文件大小总和的 3 倍你(和任何du
类似的命令)所期望的。
由于该df
命令通过询问文件系统驱动程序来获取其信息,因此它报告的较大“已使用”值可能包括快照,否则快照可能是不可见的,除非使用正确的方法进行访问。