首页 > 数据库 > 数据库开发技术 > 每日一探索问题-du和df文件大小不一致问题
du -sh * df -Th 显示大小不一样
了解下df与du的工作原理:
du
du命令会对待统计文件逐个调用fstat这个系统调用,获取文件大小。它的数据是基于文件获取的,所以有很大的灵活性,不一定非要针对一个分区,可以跨越多个分区操作。如果针对的目录中文件很多,du速度就会很慢了。
df
df命令使用的事statfs这个系统调用,直接读取分区的超级块信息获取分区使用情况。它的数据是基于分区元数据的,所以只能针对整个分区。由于df直接读取超级块,所以运行速度不受文件多少影响。
因为:通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink),du就不会再统计它了,然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。
查看方法:
lsof |grep delete 列出来的这些文件,表示已经删除,但实际上进程还在使用
如何释放磁盘空间:
kill掉相应的进程,或者停掉使用这个文件的应用,让os自动回收磁盘空间
可以把讨论与想法写在评论区,一起学习,一起进步,一起喝咖啡
原文作者:五分钟学SRE;如有侵权,请联系管理员删除。