可用磁盘空间的差异 - ncdu 和 df

可用磁盘空间的差异 - ncdu 和 df

我注意到,对于我来说,使用“ncdu”或“df”时根目录的可用磁盘空间存在很大差异:

df-钍:

    dev              devtmpfs  7,8G       0  7,8G    0% /dev
    run              tmpfs     7,8G    1,4M  7,8G    1% /run
    /dev/nvme0n1p2   ext4       25G     19G  4,3G   82% /
    tmpfs            tmpfs     7,8G     77M  7,7G    1% /dev/shm
    tmpfs            tmpfs     7,8G       0  7,8G    0% /sys/fs/cgroup
    tmpfs            tmpfs     7,8G     50M  7,7G    1% /tmp
    /dev/loop1       squashfs  4,3M    4,3M     0  100% /var/lib/snapd/snap/ngrok/11
    /dev/loop0       squashfs   91M     91M     0  100% /var/lib/snapd/snap/core/6405
    /dev/nvme0n1p1   vfat      246M     56M  191M   23% /boot
    /dev/mapper/home ext4      428G     52G  354G   13% /home
    tmpfs            tmpfs     1,6G     20K  1,6G    1% /run/user/

北卡罗莱纳大学

10,5 GiB [##        ] /usr
 3,5 GiB [          ] /var
72,0 MiB [          ] /opt
55,1 MiB [          ] /boot
45,9 MiB [          ] /tmp

“ndcu” 显示根目录的可用空间比“df”多出约 5.5gb。我是否遗漏了什么,或者为什么会有这么大的差异?提前致谢!

答案1

可能的情况

有各种其他文件系统安装在各种安装点下,这些安装点(自然)位于 的更深层/。如果根文件系统在那些位置包含文件,df仍将“计算”它们(因为它查询文件系统本身)但du不会(因为它扫描可用树)。


例子

/挂载后,/home包含 4 GB 数据。然后另一个文件系统挂载在/home,它包含 52 GB 数据。在这种情况下:

  • 根文件系统仅报告它自己的使用量为df,其中包括那 4 GB。
  • ncdu扫描目录树。在/home其中可以看到 52 GB其他filesystem;ncdu -x完全跳过此步骤。在这两种情况下,您都会忽略/home它,因为您知道它是另一个文件系统。

结果,当你把所有相关的行加起来之后ncdu,你仍然会错过那 4 GB。


确认

在其他地方绑定挂载相同的文件系统(注意-B不挂载子挂载):

sudo mount -B / /mnt/elsewhere

分析ncdu /mnt/elsewhere结果。 中是否有数据/mnt/elsewhere/home/mnt/elsewhere/boot或者其他通常由子挂载覆盖的目录中是否有数据? 它能解释差异吗?

在删除任何内容之前,请确保您知道自己在做什么。最后运行sudo umount /mnt/elsewhere卸载。

答案2

df -Th显示“可用”磁盘空间。即使以 root 身份运行,这也是不含为 root 用户保留的磁盘空间(通常约为 5%)的可用空间。

ncdu以 root 身份运行时,将考虑磁盘上的所有实际可用空间,包括为 root 保留的空间。这就是为什么它报告的“可用”空间比df报告的“可用”空间更多。

有关该保留空间以及如何更改其大小的更多信息,请参阅我的问题的答案这里

相关内容