当前位置: 首页>>技术教程>>正文


为什么 “df” 和 “du” 命令显示不同的磁盘使用情况?

问题描述

我无法在我的电脑上访问 ubuntu 系统,错误消息:“系统在低图形模式下运行”,我尝试了一些从互联网上搜索的命令。

我发现一个问题似乎没有可用的磁盘空间。我用”df”和”du”命令查看,结果如下:

du -j --max-depth=1
23G  ./home
3.3G ./usr 
...... 
28G

df -Th 
filesystem   Type   size    used   available   use%    mounted on 
/dev/sda5    ext4   68G     68G    0           100%    /

如何清理系统以获得更多磁盘空间?

最佳方案

您很可能知道您可以删除某些应用程序仍在使用的文件,并且对于该应用程序,它仍然可用。这是因为 /proc/文件系统中的文件描述符保持打开状态。

因此,如果对已删除的文件有这样的打开描述符,则它们占用的空间被认为是 df 使用的(并且 df 是正确的),但由于不再有与之关联的文件名,它们不能被 du 考虑在内。

您可以通过以下方式找到所有未链接但保持打开的文件:

# lsof | grep '(deleted)'

次佳方案

How can i delete the links? – Vikas Hardia Aug 22 ’14 at 5:46

您必须找到持有文件句柄的进程。使用 Dmitry Alexandrov 的命令,您可以看到进程和 pid。在我们的例子中,”old” 清漆日志文件是空间杀手。

# lsof | grep '(deleted)'
[...]
varnishlo 13978       varnishlog    3w      REG              252,1 318448027646    5926973 /var/log/varnish/varnish.log.1 (deleted)
apache2   16801         www-data    2w      REG              252,1        64550   13110120 /var/log/apache2/error.log.1 (deleted)
[...]
# service varnishlog stop
[or if there is no service script]
# kill -11 13978 (the second number of the lsof command is the pid)
[or may be] 
# kill -9 13978

如果它是您计算机上的恶魔或其他服务,请不要忘记再次启动服务或进程。如果可以,只需重新启动计算机;)

第三种方案

好的,让我们检查一下手册页:

df – report file system disk space usage

du – estimate file space usage

这两个工具是为不同的提议而设计的。 df 是显示文件系统使用情况,du 是报告文件空间使用情况。 du 从文件工作,而 df 在文件系统级别工作,报告内核说它可用的内容。继续阅读 du 联机帮助页支持这一点:

Summarize disk usage of each FILE, recursively for directories.

它说 du 适用于文件。

df displays the amount of disk space available on the file system containing each file name argument. If no file name is given, the space available on all currently mounted file systems is shown.

这里说 df 不关心文件而是文件系统本身。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12732.html,未经允许,请勿转载。