Linux剩余空间显示不一致的问题

时间:2024-04-03 13:39:27

接到阿里云的监控报警,提示我有一台机器的占用空间已经超过了80%,登陆这个机器#df -h一看,情况如下:

Linux剩余空间显示不一致的问题


既然已经使用了82%的空间,就要找一下到底哪一个文件占了大头,然后进到该文件夹里把没用的文件干掉就可以释放空间了,于是我反馈根目录,使用#du -sh *查看根目录下所有文件夹的情况:

Linux剩余空间显示不一致的问题


奇怪了,这些根目录加起来也没有31个G啊(share是挂载盘,在最上面的图里已经有显示了),怎么会有这样大的统计差距?


原来df和du虽然都是统计空间的命令,但是两者之间是有区别的:

1)du可以跨分区,df不可以;

2)du执行速度慢,df执行速度更快;

3)df和du不一致情况就是文件删除的问题。当一个文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。


这个服务器里有一个大文件在被删除,但是删除的不彻底,有进程依旧在使用它,所以它还实际占用着磁盘空间,这样的话,我们使用#ls of|grep deleted查看是哪个文件没有被删除干净。

Linux剩余空间显示不一致的问题


这个没有删除干净的文件是catalina.out,占用他的进程pid是16682,那么找到16682这个java进程,重启一下之后,再一次#df -h看结果:

Linux剩余空间显示不一致的问题




 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1921224