為什麼 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命令透過詢問檔案系統驅動程式來獲取其信息,因此它報告的較大「已使用」值可能包括快照,否則快照可能是不可見的,除非使用正確的方法進行存取。

相關內容