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)都看不到它。元数据的示例包括 inode、磁盘映射、间接块和超级块。

命令是一个用户级程序,它不了解文件系统元数据,而 df 查看文件系统磁盘分配图并了解文件系统元数据。 自由度获得真实的文件系统统计信息,而 du 只能看到部分情况。

相关内容