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

use*_*965 30 disk-usage

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

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

du -j --max-depth=1
23G  ./home
3.3G ./usr 
...... 
28G
Run Code Online (Sandbox Code Playgroud)

df -Th 
filesystem   Type   size    used   available   use%    mounted on 
/dev/sda5    ext4   68G     68G    0           100%    /
Run Code Online (Sandbox Code Playgroud)

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

Dmi*_*rov 57

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

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

您可以使用以下命令找到所有未链接但保持打开的文件:

# lsof | grep '(deleted)'
Run Code Online (Sandbox Code Playgroud)

  • 这只是救了我。不知道为什么我的磁盘已满,但杜说它是空的。8GB 文件的打开文件句柄 (11认同)
  • 如何删除链接? (6认同)
  • 有时您需要以 root 身份执行此操作,以查看其他用户的进程保持打开的已删除文件。 (2认同)

小智 17

如何删除链接?– 维卡斯·哈迪亚 14 年 8 月 22 日,5:46

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

# 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
Run Code Online (Sandbox Code Playgroud)

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


Bra*_*iam 12

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

df - 报告文件系统磁盘空间使用情况

du -估计文件空间使用情况

这两个工具用于不同的提议。whiledf是显示文件系统使用情况,du是报告文件空间使用情况。du从文件df工作,同时在文件系统级别工作,报告内核所说的可用内容。继续阅读手册du页支持这一点:

总结每个FILE 的磁盘使用情况,递归地用于目录。

它说du适用于文件。

df显示包含每个文件名参数的文件系统上的可用磁盘空间量。如果没有给出文件名,则显示所有当前安装的文件系统上的可用空间。

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


Mit*_*tch 1

df
Run Code Online (Sandbox Code Playgroud)

总结可用磁盘空间

它显示可用磁盘空间量。

du
Run Code Online (Sandbox Code Playgroud)

总结磁盘使用情况。

它显示已使用的磁盘空间量。


小智 1

简单地说:

您在没有 root 权限的情况下运行du。因此它无法检查 、 等文件夹中的可用/proc空间/mnt

df分别显示总已用空间和可用空间。

因此,当您检查 Linux 根文件系统时,请以du报告为准。