du -sh和df -h之间的不一致

我知道当du -sh的结果小于文件系统用df -h返回时,这是很常见的情况。 (因为有些文件在进程中仍然是打开的。)但是在我的情况下,我却恰恰相反。

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

df -h返回270G used而装入的文件夹的du -sh返回320G used

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

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

有谁知道这可能来自哪里? 磁盘上的正确数量应该是270G〜

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

du统计硬链接文件使用的块一次,而不是每个硬链接一次。 但是,这种重复数据删除有一些失败的方法:

  1. 表du用来取消硬链接的文件是一个固定的大小。 如果您的表格可以存储更多的硬连接文件,则重复数据删除可能不会成功。 (一些版本的du有一个dynamic大小的表,并没有这个问题。)

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

顺便一提…

du只计算文件数据。

df计数块用于文件数据加上所有元数据:目录,超级块,inode表,直接/间接/双重间接块等等。

因此, df应该返回比du更小的“used”大小。 如果情况正好相反,那么我认为这个重复数据删除是坏的,或者NAS服务器做了一些让df显示无效信息的东西。

感谢大家的最佳答案和build议。 我张贴回答我自己的具体问题。 只是在不合时宜的地方帮助某个人(这很可能不会给予这种情况)

如果我没有弄错的话,那么NAS就是从我的文件系统获取文件系统的信息 – 只要分区运行到一定水平的虚拟化(HP X9000)。 因此,如果一切顺利, df应该返回一个准确的“估计”。

但是,由于从那以后被固定的NAS的一个错误,虚拟分区的大小没有被更新,因此df将返回一个无效(过时的)值。 显示270Go而不是320Go的实际正确值(我在我的评论中犯了一个错误)

所有上述问题都源于此。 从那以后,当NAS一直在退化模式下工作时(无论什么原因)

再次感谢你们。