du 和 df 的不同输出

du 和 df 的不同输出

好吧,这是一个让我完全困惑的问题:

df -h
Dateisystem          Größe Benut  Verf Ben% Eingehängt auf
/dev/sda2             3,8G  1,5G  2,2G  41% /
/dev/sda1             122M   13M  103M  11% /boot
tmpfs                1014M     0 1014M   0% /dev/shm
/dev/sdb1            1016M  866M  150M  86% /srv

然而:

du -hs /srv
55M     /srv

仅供参考:

mount | grep srv
/dev/sdb1 on /srv type xfs (rw)

86% 的人给了我一封警告电子邮件(这是有意的),之后我删除了/srv.这是几个小时前的事了。

使用du,我得到了该分区上我认为正确的数据量。然而,df似乎并没有明白这一点。为什么? (这有点烦人,因为我仍然会定期收到基于该输出的警告电子邮件。)

不确定这是否重要,但我使用的是 CentOS 版本 5.11(最终版)的服务器。

答案1

df计算文件系统分配的块,du使用每个文件的大小信息。差异可能有多种原因:

1) 仍由应用程序打开的未链接(已删除)的文件。 lsof +aL1 <filesystem>将帮助您识别流程。

2) 挂载点下的文件隐藏到du.debugfs可以帮助你。

$ sudo debugfs 
debugfs 1.42.12 (29-Aug-2014)
debugfs:  open /dev/<the / file system  device>
debugfs:  cd /boot
debugfs:  ls -l 
 1966081   40755 (2)      0      0    4096 26-May-2016 16:28 .
      2   40555 (2)      0      0    4096 11-May-2016 10:43 ..
 1974291  100644 (1)      0      0       0 26-May-2016 16:28 bob   <---<<< /boot/bob is hidden by /boot fs

3)稀疏文件看起来比实际更大。未分配的块不计入文件大小,df但计入文件大小。

请注意,硬链接不会骗人du

答案2

如果应用程序仍打开文件,则在进程结束之前不会释放磁盘空间。找出正在使用的内容/srv并停止/重新启动它们

相关内容