Tag Archives: linux shell

关于du与df统计目录占用空间大小不同的解析

du -estimate file space usage
du命令会对统计文件逐个调用fstat这个指令(系统调用),获取文件大小。它的数据基于文件获取,可以跨多个分区操作。
df -report file system disk space usage
df命令使用statfs这个指令(系统调用),直接读取分区的超级块信息获取分区使用情况。它的数据基于分区元数据,只能针对整个分区。
导致这两个命令查看磁盘容量不一致的原因:用户删除了大量的文件后,在文件系统目录中已经不可见,所以du就不会再统计它,然而如果此时还有运行的进程持有这个已被删除的文件句柄,那这个文件并不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df仍会统计这个被删除的文件。
可通过lsof命令查下处于deleted状态的文件:
lsof | grep deleted