du 与 df 的区别

du 与 df 的区别

我有一个文件服务器,df 报告 / 已满 94%。但根据 du 的说法,使用量要少得多:

# df -h /
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             270G  240G   17G  94% /
# du -hxs /
124G    /

我读到打开但删除的文件可能是造成此问题的原因,但重新启动并不能解决这个问题。

这是 Linux,ext3。

问候

答案1

好的,找到了。

我在 /mnt/Backup 上有一个旧备份在同一个文件系统中然后在该位置安装了一个外部驱动器。所以 du 没有看到文件。清理这个让我恢复了磁盘空间。

事情可能是这样的:每日备份脚本运行时,外部驱动器曾经被卸载。

答案2

我认为你找不到比这更彻底的解释此链接出于各种原因,它可能不适用。以下重点内容可能对您有所帮助:

  • 你的 inode 使用率是多少,如果几乎达到 100%,那就可能会搞乱事情:

    DF-我

  • 您的块大小是多少?大量小文件和较大的块大小可能会造成很大偏差。

    sudo tune2fs -l /dev/sda1 | grep ‘块大小’

  • 已删除文件,您说您调查了这个问题,但要获取总空间,您可以使用以下管道(我喜欢 find 而不是 lsof 只是因为 lsof 很难解析):

    sudo find /proc/*/fd -printf "%l\t%s\n" | grep 已删除 | cut -f2 | (tr'\n'+; echo 0) | bc

但是,这几乎是 2 倍的降低。为了安全起见,请在卸载分区时对其进行 fsck。

答案3

这看起来像是文件被删除而进程仍将其打开的情况。发生这种断开连接的原因是 du 命令会总计文件系统中存在的文件的空间,而 df 会显示文件系统中可用的块。打开和删除的文件的块直到该文件关闭后才会被释放。

你可以通过检查 /proc 来找到哪些进程打开了但删除了文件

find /proc/*/fd -ls | grep deleted

答案4

我同意

lsof +L 1 /home | grep -i deleted

是一个很好的起点,就我而言,我注意到我有很多正在运行的 perl 脚本,并且保持很多文件处于活动状态,即使它们应该被删除。

我杀死了 perl 函数,这使得du案件df几乎完全相同。

相关内容