杜与DF差异

我有一个文件服务器,其中DF报告94%/完整。 但根据杜,更less使用:

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

我读了开放但删除的文件可以负责,但重启没有解决这个问题。

这是Linux,ext3。

问候

好的,find了。

在同一个文件系统的 / mnt / Backup上有一个旧的备份,然后在那个地方安装了一个外部驱动器。 所以杜没有看到这些文件。 所以清理这个让我回到我的磁盘空间。

这可能是这样发生的:当每日备份脚本运行时,外部驱动器被卸载一次。

我不认为你会find一个更彻底的解释,那么这个链接的所有原因可能是closures的。 一些亮点可能有所帮助:

  • 什么是你的inode的使用,如果它几乎是100%,可以搞砸了:

    df -i

  • 你的块大小是多less? 许多小文件和大块大小可能会使其偏移很多。

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

  • 删除的文件,你说你调查了这个,但要获得总空间,你可以使用下面的pipe道(我喜欢find而不是lsof只是因为lsof是一个痛苦的parsing):

    sudo find / proc / * / fd -printf“%l \ t%s \ n”| grep已删除| 切-f2 | (tr'\ n'+; echo 0)| 公元前

但是,这差不多是2倍。 在分区运行时,在分区上运行fsck以确保安全。

它看起来像一个文件被删除,而进程仍然打开的情况下。 由于du命令累计文件系统中存在的文件的空间,而df显示文件系统中可用的块,所以发生断开连接。 打开和删除的文件块不会被释放,直到该文件closures。

您可以通过检查/ procfind哪些进程已经打开但删除了文件

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

在你的情况下,最可能的原因是你有很多很小的文件(小于驱动器上的块大小)。 在这种情况下,df将报告所有使用块的总和,而du将报告文件大小的实际总和。

我同意

 lsof +L 1 /home | grep -i deleted 

是一个开始的好地方,在我的情况下,我注意到我有很多正在运行的perl脚本,并且保留了大量的文件,尽pipe它们应该被删除。

我杀了perl函数,这使得dudf几乎完全相同,caseclosures了。

默认情况下,使用EXT3格式化文件系统时,5%的驱动器保留为root用户。 当df报告什么是可用的时,df就占了这个储备,而du则显示了实际使用的数据。

您可以通过运行以查看保留的块:

tune2fs -l / dev / sda | grep -i保留

你会得到像这样的东西:

 Reserved block count: 412825 Reserved GDT blocks: 1022 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) 

如果你想调整到一个较低的百分比,你可以用类似的东西来做到这一点

tune2fs -m 1 / dev / sda

你可以将它减less到0,但是因为这是你的根文件系统,所以我会小心这样做。 如果文件系统实际填满了,可能会使维护任务难以清理。

有没有可能杜不加目录的大小呢? 尽pipe如此,似乎还是一个巨大的差异,不能对所有这一切负责。