centos 7通过df -h与du -sh /*统计根目录大小

2018-11-21  本文已影响0人  zhaojian821

实际情况:

测试环境与生产环境centos7服务器同时出现了该情况,即通过df -h与du -sh /*统计出的结果相差很大。

测试环境:

生产环境:

可以看到实际使用的磁盘量与df统计值都有很大的差异。直接导致的结果就是磁盘使用量会在未来的某一天达到100%,而实际已用的磁盘却很少,最终磁盘无法使用,必须重做系统才行······想想都可怕。

按照网上的绝大部分说法是,在日志文件正在被写入时,执行了删除文件操作,导致文件一直被占用,无法释放。可以通过lsof |grep deleted命令来查看是哪个进程占用的,然后kill掉该进程,文件所占用的资源就会被释放,磁盘空间也自然释放了。

如果像网上说的这么简单就好了,网上的都是人云亦云。我停掉了所有的应用,重启了服务器,通过lsof |grep deleted查看是没有任何内容的情况下,磁盘情况就是上面的那样。根本不像网上说的,还有应用占用着,释放了就可以了。啥也没有,就是统计结果不一样,咋整?都不知道从哪入手解决这个问题。

于是我开始寻求帮助,问牛逼的同事,问网课的老师,问技术群,结果都是无功而返。其实这个问题我已经遇到过几次了,一直都想排查出结果,但是每次都是花了很多时间,铩羽而归。这不,昨天又花了1天的时间,也还是没有解决这个问题,内心非常沮丧。

但是,一切都没有那么糟糕,昨晚我回家正是沮丧之时,我的一位开发同事联系我说原因找到了,是因为反复的删除文件导致的磁盘产生碎片,占用了磁盘空间所致,通过清理磁盘碎片的方式,就可以解决这个问题。听到这个好相信,我都兴奋的不行了。于是按他所说的,我上网找到了关于xfs文件系统碎片整理的文章,具体如下:

参考文章:

https://blog.csdn.net/scaleqiao/article/details/47122329

虽然这是2015年写的文章,但是真的解决了我本次遇到的问题。感谢本篇文章的作者!

大家在执行下面的命令之前,一定要确保备份了环境中的重要应用和数据,以防万一。确认无误后,再执行如下。

执行:

yum install xfsdump

yum install xfslibs-dev

yum install xfsprogs

查看/dev/sdc1的碎片情况:

xfs_db -c frag -r/dev/mapper/cl-root

返回结果:

[root@devhadoop228 /]# xfs_db -c frag -r

/dev/mapper/cl-root

actual 109661, ideal95641, fragmentation factor 12.78%

Note, this number islargely meaningless.

Files on this filesystemaverage 1.15 extents per file

 可以看到,碎片占用率是12.78%

整理碎片:

xfs_fsr /dev/mapper/cl-root

再次统计,df -h与du -sh /*就一致了。本次是在另外一台遇到相同情况的服务器上做的试验,可以看到,两种统计方式统计结果相同了:

问题也就完美解决了,原来是磁盘碎片占用造成的df统计结果大。这才是问题的根本原因!!!

另外,也要真心的感谢我的同事,能换角度思考问题,既然不是lsof能解决的问题,就换角度想会不会是文件系统的问题,进而找到了解决的方案。这也是我要学习他的地方,我查了一天都没有查出来,他只查了一会,就能解决问题,也确实是厉害!

怎么样,我是不是众多解决方案中的一股清流!希望当各位朋友遇到跟我一样的情况下,可以看到我的这篇文章,并且通过上述方法真的能解决这个问题,也算是我没有白折腾,希望可以帮助到大家!!!

上一篇 下一篇

猜你喜欢

热点阅读