為什麼 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 而另一個只報告
1.8 GiB
?
的輸出
df
基於文件系統級別的統計資訊,而ncdu
(和正常du
)通過掃描目錄、讀取單個文件的大小並對其進行總結來生成結果。如果
du
-style 命令以非 root 使用者身份執行,則它們不必具有對所有目錄的完全訪問權限,因此可能無法查看所有內容。嘗試執行
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 /
),我似乎得到了更合理的結果,這也與du -shx /
舍入誤差內的 to 的輸出相匹配,並且df -h
當記住文件系統可能需要一些空間時的輸出內部元數據。另一個可能的錯誤來源是,如果您使用的是高級文件系統功能,例如 BTRFS 文件系統快照。當然,您的根文件系統上可能只有 1.8 GiB 的文件,但如果文件系統還包含其先前狀態的兩個快照,則使用的磁碟空間總量可能高達文件大小總和的 3 倍你(和任何
du
類似的命令)期望。由於該
df
命令通過詢問文件系統驅動程序來獲取其資訊,因此它報告的較大的“已使用”值可能包括快照,否則在使用正確的方法訪問之前,這些快照可能是不可見的。