我有一个文件服务器,其中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函数,这使得du
和df
几乎完全相同,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如此,似乎还是一个巨大的差异,不能对所有这一切负责。