du -sh 和 df -h 不一致

du -sh 和 df -h 不一致

du -sh我知道当的结果小于文件系统返回的结果时,这种情况很常见df -h。(因为某些文件仍在进程中打开等。)但就我而言,情况恰恰相反。

我正在运行 Ubuntu 12.04,并尝试获取 NFS 挂载的使用大小

df -h当挂载文件夹返回270G used时返回。du -sh320G used

更新:我正在使用以下选项安装分区:

nas-server:/path/to/mount /mnt/mount/point  nfs proto=tcp,rsize=8192,wsize=8192,hard,intr,exec

有人知道这是从哪里来的吗?磁盘上的正确容量应该是 270G~

谢谢您的帮助。我会提供任何必要的额外信息。

答案1

du只对硬链接文件使用的块进行一次计数,而不是对每个硬链接进行一次计数。但是,这种重复数据删除可能会在某些方面失败:

  1. du 用于删除硬链接文件的重复数据的表是固定大小的。如果硬链接文件的数量超过该表可以存储的数量,则删除重复数据可能会失败。(某些版本的du表大小是动态的,因此不存在此问题。)

  2. 重复数据删除基于 inode 值。如果 NAS 服务器显示硬链接文件的不同 inode 编号,则无法进行重复数据删除。一些 NAS 服务器在呈现 inode 方面做得很好,因为它们使用具有 inode 的文件系统。其他 NAS 服务器必须“伪造”并且做得不好。

顺便一提...

du仅计算文件数据。

df计算文件数据使用的块数以及所有元数据:目录、超级块、inode 表、直接/间接/双间接块等等。

因此,df应返回比 更小的“已使用”大小du。如果发生相反的情况,我会假设此重复数据删除功能已损坏或 NAS 服务器执行了某些操作导致df显示无效信息。

答案2

感谢大家的精彩回答和建议。我发帖是为了回答我自己的具体问题。只是希望它能帮助到别人(考虑到具体情况,很可能不会)

如果我没记错的话,我从 NAS 获取文件系统信息时,其分区具有一定程度的虚拟化(HP X9000)。因此,df如果一切顺利,应该会返回准确的“估计值”。

但是由于 NAS 的一个错误(现已修复),虚拟分区的大小未更新,因此df将返回无效(过时)的值。显示 270Go,而不是实际正确值 320Go(我在评论中犯了一个错误)

所有上述问题都源于此。从那时起,当 NAS 一直处于降级模式时(无论出于何种原因),这种情况也偶尔发生

再次感谢大家。

相关内容