标准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:子目录被挂载到其他文件系统
该文章对您有帮助吗?