linux服务器df和du命令不一致的原因和解决方案

问题描述:

    最近公司使用的服务器老是接到报警说磁盘使用率超过了80%,把大文件删除之后还是没有改善.通过df命令查看到磁盘的使用率确实在70%-80%之间徘徊,但是通过du -sh /* 命令分析却看不到那些大文件,并且总的磁盘容量比df查出来的要小的多.

问题分析:

    熟悉linux命令原理的同学都知道,df命令数据是直接从磁盘的superblock里面获取的,所以只有文件删除后并且真正的反馈给superblock才能把df查出的容量数据降下去.而du命令则是实实在在的计算每一个文件和文件夹占用的磁盘容量然后再反馈的.因此可能存在一种情况导致两个命令的结果数据是不一致的:我们使用rm命令删除的文件一直还被别的进程使用着,这时候superblock就不会重新计算该文件占用的磁盘大小,反而是一直认为这个文件还在使用中.所以我们的做法就是暂停进程对文件的占用,让superblock重新计算一次就好.

操作步骤:

    使用:lsof -n | grep deleted

  该命令会查出来那些占用着已经删除的文件的进程(如果查不到这个命令,需要安装一下lsof,具体方法另行百度),以下是我的服务查询结果:

   

linux服务器df和du命令不一致的原因和解决方案_第1张图片

由以上的结果可以很明确的看出:因为httpd进程一直占用着网站的访问日志文件(尽管已经被我删除).

接下来就是重启一下服务就好了:

service httpd restart

至此服务器磁盘报警问题解决.

你可能感兴趣的:(php,服务器)