ncdu 傳回的磁碟區空間和磁碟使用情況之間的差異

ncdu 傳回的磁碟區空間和磁碟使用情況之間的差異

我的伺服器附加了 130 GB 磁碟區。

為了檢查可用磁碟空間,我運行df -h -x tmpfs -x squashfs | grep -v /run/shared並獲得:

Filesystem      Size  Used Avail Use% Mounted on
udev            965M     0  965M   0% /dev
/dev/xvda1      128G  111G   13G  90% /

但是,當我想要磁碟使用情況的詳細資訊時,透過ncdu在根目錄上運行,我得到:

.  55,7 GiB [######### ] /home                                                                                                                           
.  24,0 GiB [####      ] /var
.   2,4 GiB [          ] /usr
    1,0 GiB [          ]  swapfile
  598,6 MiB [          ] /lib
   63,0 MiB [          ] /boot
    9,4 MiB [          ] /sbin
    9,1 MiB [          ] /bin
.   8,1 MiB [          ] /etc
.   4,3 MiB [          ] /tmp
.   2,7 MiB [          ] /run
!  24,0 KiB [          ] /root
!  16,0 KiB [          ] /lost+found
    4,0 KiB [          ] /lib64
e   4,0 KiB [          ] /opt
e   4,0 KiB [          ] /mnt
e   4,0 KiB [          ] /media
!   4,0 KiB [          ] /gandi
.   0,0   B [          ] /proc
.   0,0   B [          ] /sys
    0,0   B [          ] /dev
@   0,0   B [          ]  initrd.img.old
@   0,0   B [          ]  initrd.img
@   0,0   B [          ]  vmlinuz.old
@   0,0   B [          ]  vmlinuz
e   0,0   B [          ] /srv

與上一個指令傳回的可用磁碟空間 (111 GB) 相差約 27 GB。

這種差異從何而來?

謝謝。

答案1

這個問題經常出現。簡而言之,答案是du使用df不同的方法來獲取數據。

檔案系統在檔案系統中分配磁碟塊來記錄其資料。該數據被稱為元數據,對於大多數用戶級程式(例如 du)來說是不可見的。元資料的範例有索引節點、磁碟映射、間接區塊和超級區塊。

command 是一個使用者級程序,不知道檔案系統元數據,而 df 查看檔案系統磁碟分配映射並知道檔案系統元資料。 df獲得真實的文件系統統計信息,而 du 只能看到部分情況。

相關內容