du vs df输出


3

为什么dfdu命令的输出之间存在差异?

为什么他们的输出不准确?

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 1012M 394M 567M 42% /
/dev/sda2 99M 47M 48M 50% /boot
/dev/sda8 9.9G 1.5G 7.9G 16% /home
none 1004M 0 1004M 0% /dev/shm
/dev/sda9 347G 93G 236G 29% /srv
/dev/sda11 2.0G 81M 1.8G 5% /tmp
/dev/sda10 4.0G 1.3G 2.6G 33% /usr
/dev/sda6 4.0G 2.1G 1.8G 55% /usr/local
/dev/sda5 20G 19G 0 100% /var

但是,如果我这样做,du -sh /var它报告只使用4.6G:

# du -sh /var
4.6G /var

Answers:


8

造成这种情况的标准原因是某些用户进程保持打开已删除的文件。发生这种情况时,通过'du'看不到空间,因为目录树中不再显示该文件。但是,文件仍然使用该空间,直到它被释放,并且只有在打开文件的最后一个进程将其文件描述符关闭到文件或进程退出时才会发生这种情况。您可以使用lsof程序尝试查找哪个进程保留打开的文件。通常它是一些日志文件,或者一些大型数据库文件被轮换出来,但是一些较旧的进程仍然保持日志文件打开。

来源'df'命令VS'du'命令


4

请测试:
http://www.cyberciti.biz/tips/freebsd-why-command-df-and-du-reports-different-output.html
如果文件在打开时被删除(通过rm命令)或由Linux程序/进程使用,出现了“打开文件描述符”问题的恶点,并且混淆了Linux文件系统报告可用磁盘空间或可用磁盘空间的实际数字。

为了解决虚假的“磁盘空间已满”问题,即回收“已用过的磁盘空间”,您需要终止或终止“已解散的进程” - 在这种情况下,rm命令会在文件中变为废弃进程正在使用。

一旦这些已解散的进程终止,将解决“打开文件描述符”问题,du和df命令将同意报告真实文件系统使用的磁盘空间或可用磁盘空间!

如何找出并终止或终止导致打开文件描述符问题的失效进程,以便解决du和df命令中已用磁盘空间的差异?

对于这种特殊情况,lsof命令(列表打开文件命令)非常适合显示:

#lsof | grep "deleted"

并在lsof命令输出的第二列中查找Linux进程ID。第七列是“删除”文件的大小(但不成功,结果证明是不存在的过程)。

现在,您只需要终止Linux进程ID以查看DU和DF的正确输出,使用以下命令来终止进程ID

#lsof | grep "deleted" | awk '{print $2}' | xargs kill -9

现在通过两个命令验证磁盘使用情况; 你不应该得到差异。


这是一个稍微不那么危险的列表命令:lsof | grep“删除”| awk'{print $ 2}'| uniq | 排序| xargs ps -p
Joe Casadonte 2014年

1

这不适用于您的情况,但一般来说记住-x标志是很重要的du。否则它可能会进入其他已挂载的文件系统,当然也不会匹配df输出,默认情况下是每个文件系统。


0

这当然是在问题之后的方式,因此更适合后人。

这个 - 安装目录可能有另一个(不太常见但很重要)的原因。

考虑一个场景(例如在使用FreeBSD jails时),其中directory(/multimedia)被挂载到不同的位置(/usr/something/media)。现在做一个du将包括目录下的/ multimedia目录的大小/usr/something/media,因此显示膨胀的大小/usr。但是df会显示真实的大小/usr- 不包括已安装/multimedia目录的内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.