为什么df命令可以快速返回磁盘使用率而不是du

时间:2015-01-13 06:46:36

标签: linux shell

为什么df命令可以快速返回有关每个分区的使用情况,而du将花费更长的时间来计算要返回的磁盘使用情况。

df是如何工作的?

4 个答案:

答案 0 :(得分:5)

根据手册df - report file system disk space usage

du - estimate file space usage

虽然df是显示文件系统使用情况,但du是报告文件空间使用情况。 du来自文件,而df在文件系统级别工作,报告内核所说的可用内容。从广义上讲,它的设计df并不关心文件,而是文件系统本身。

明智地工作,df直接在文件系统元数据中查看磁盘使用的块。因此,它返回的速度比du快得多,但只能显示有关整个磁盘/分区的信息。其中,du遍历目录树并计算其中所有文件的总和大小。由于可能存在不可读的文件,目录树中的硬链接等,它可能无法输出确切的信息。

编辑

既然您也问过df如何运作,那么说如果同时使用dfdu,您可能会看到可用空间量有所不同。现在你可能会惊讶地发现两个相似的命令(dfdu)为同一个硬盘返回不同的空闲空间有多大可能???

答案在于df的工作, 由于df与文件系统元数据直接相关,因此它也连接到打开文件描述符。假设情况发生,当删除文件时,某些其他进程可能正在保持文件打开,导致文件无法删除; (重新启动或终止该进程将释放文件)此外,如果您创建了硬链接,则多个文件名将指向相同的数据,并且数据(实际内容)将被标记为空闲/可用,直到所有对它的引用都被删除为止。在这种情况下,df会考虑这些文件/数据的大小,因此可用空间会更低。

答案 1 :(得分:2)

因为df可以使用statfs(2)系统调用。但du以递归方式遍历文件层次结构,即la nftw(3)

一般来说,请记住大多数Linux程序和命令都是free software,因此您可以研究它们的源代码。 df位于coreutils

你总是可以strace(1)命令来了解它正在运行的系统调用。

答案 2 :(得分:2)

df只是告诉你文件系统上的总可用空间。文件系统可以通过简单的簿记立即知道这一点。

另一方面,

du实际遍历目录并计算其内容的总大小。这个速度较慢,但​​它也更强大:例如,它可以计算单个目录的大小而不是整个文件系统的大小。

答案 3 :(得分:1)

dfdu是两个不同的实用程序。顾名思义du Man page of du会估算文件使用情况,而df Man page of df会报告磁盘使用情况。

df - report file system disk space usage

du - estimate file space usage

df所做的是解析/etc/mtab文件并使用statfs报告磁盘使用情况。而du将解析每个文件的目录存储大小中的所有文件,然后计算与df相比较繁琐的最终总和。

由于解析文件需要内存访问,因此在操作完成之前会占用CPU。因此,与du相比,df更快