为什么df和du显示不同的输出?

当我执行命令df -h /tmp它表示磁盘利用率为100% ,但是当它尝试使用du -sh /tmp它表示磁盘利用率为2%

我想知道为什么这些命令显示不同的输出,这两个命令如何工作以及这个问题的解决方案是什么。

上下文: /tmp安装在自己的文件系统上。 我在我的VPS帐户上使用Ubuntu 12.04服务器版。 由于这个问题利用/tmp 100%根据df一些程序抱怨/tmp可用空间。

du通过扫描可到达的inode并计算其大小来报告可用空间。

如果在文件仍处于打开状态时创建,打开并稍后删除该文件,则打开该文件的程序将继续可以访问该文件,并且可以对磁盘上的该内存位置执行写入和读取操作。 du不考虑这样的打开文件,而df却没有。

一个简单的重启应该刷新/ tmp并解决你的问题。

另一种方法是扫描打开的文件并重新启动或终止未释放已删除文件的进程。

根文件系统上的某些文件可以隐藏在挂载点后面。 当未安装相应的设备时,可以在安装点下创建文件,并且当再次安装设备时,du命令不会对文件进行计数。 非常可能的问题,当du和df结果之间存在很大差异时。

运行du时确保你sudo 。 例如,如果你运行du -hs /* ,除非添加sudo否则你不会看到真正的磁盘使用情况。