1. 如何记忆这两个命令
du-Disk Usage
df-Disk Free
2. df 和du 的工作原理
2.1 du的工作原理
du命令会对待统计文件逐个调用fstat这个系统调用,获取文件大小。它的数据是基于文件获取的,所以有很大的灵活性,不一定非要针对一个分区,可以跨越多个分区操作。如果针对的目录中文件很多,du速度就会很慢了。
2.2 df的工作原理
df命令使用的事statfs这个系统调用,直接读取分区的超级块信息获取分区使用情况。它的数据是基于分区元数据的,所以只能针对整个分区。由于df直接读取超级块,所以运行速度不受文件多少影响。
3 du和df不一致情况模拟
常见的df和du不一致情况就是文件删除的问题。当一个文件被删除后,在文件系统 目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除, 分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。
kill掉这些持有已删除文件的文件句柄进程;磁盘会逐步回收;比如我有80G的磁盘空间以这种形式被占用,不断使用df命令查看 发现释放这些空间花了十几秒。
使用lsof命令查看那些进程持有这些已删除的文件 lsof|grep delete,然后停止相关进程即可.
本文深入解析了Linux系统中du和df两个磁盘空间管理命令的工作原理,对比了它们的数据获取方式,阐述了du基于文件统计,而df基于分区元数据读取的特点,并模拟了两者显示不一致的情况,如文件删除后的影响。
8441

被折叠的 条评论
为什么被折叠?



