标准GNU coreutils工具包含df
和du
用于查看磁盘的使用情况。通常情况下,两个工具显示的磁盘空间是基本相同的,但用户经常会遇到两者输出差异很大的情况。本文将介绍导致两者不一致的常见原因及解决方案。
df和du命令说明
df
和du
命令的统计逻辑本身存在较小的差异。
df
显示文件系统的磁盘空间使用情况。使用statfs()
系统调用来统计这些信息,而 statfs()
从文件系统的超级块superblock
中读取数据。默认情况下,df
输出为1 KB block
,您可以通过参数-B
或--block-size=SIZE
指定不同block
的输出大小。
特点:反映文件系统级别的空间使用情况,包括未被文件引用但尚未释放的空间(例如,已删除的文件仍被进程所占用)。
du
显示文件和目录的磁盘空间使用情况。du
命令通过深度优先遍历目标文件系统目录下的所有文件和目录,使用stat()
系统调用来统计,stat()
读取每个文件的大小,默认单位为KB。
特点:反映文件和目录的实际占用情况,未包含未被文件引用的空间。
综上可知,两个命令的统计逻辑本身存在差异,但一般情况下不会导致较大差异。
常见问题
Q1:存在已删除但未释放的文件
Q2:子目录被挂载到其他文件系统
该文章对您有帮助吗?