为什么 df 和 du 报告的磁盘使用情况存在差异?

gar*_*ncn 13 linux centos disk-usage

我有一台Linux CentOS服务器,使用的 OS+ 包大约5GB。然后,我将97GB 的数据从 Windows 服务器传输到这台 Linux 服务器上的两个文件夹,计算磁盘使用后,我看到两个文件夹的总大小大于磁盘使用大小。

du -sh在每个文件夹上运行,一个使用50GB,另一个使用47GB

但是运行起来df -h,使用的空间是96GB。( 50GB + 47GB + 5GB ) > 96GB

有什么问题吗?这两个文件夹包含大量文件(100 万+)。谢谢。

小智 12

页面提供了一些有关为什么它们具有不同值的见解,但是它似乎表明您的du尺寸应该是两者中较小的一个。

df使用总分配的块,而du只查看文件本身,不包括 inode 等元数据,这些元数据仍然需要磁盘上的块。此外,如果文件在应用程序打开时被删除,du则会将其报告为可用空间,但df直到应用程序退出时才会报告。

  • 你的评论不正确。如果 df 表示磁盘已满,则在那个时间点已满。已删除但仍由运行进程保留的文件确实会占用空间。该空间不能用于其他文件。 (2认同)
  • `df` _used_ 空间不包括 inode 表。它包括在任何目录中都没有名称的文件的数据,例如已删除的文件、ext4 日志等特殊文件或被另一个挂载的文件系统屏蔽的文件。 (2认同)

gee*_*aur 5

du大于 时df,通常的原因是“稀疏块”:如果程序实际上并没有写入磁盘块而是寻找它,它会在 inode 的块分配映射中获得一个零指针,并且没有保留实际的磁盘空间为了它。如果您稍后写入它,将分配一个实际的磁盘块,并且映射将更改为指向新块。

  • 我不认为稀疏块被计入`du`。 (2认同)