Disk-Usage

為什麼 ncdu 報告的數據與 df 不同?

  • December 8, 2021

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命令通過詢問文件系統驅動程序來獲取其資訊,因此它報告的較大的“已使用”值可能包括快照,否則在使用正確的方法訪問之前,這些快照可能是不可見的。

引用自:https://unix.stackexchange.com/questions/576764