centos 7通过df -h与du -sh /*统计根目录大小相差巨大的解决方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos 7通过df -h与du -sh /*统计根目录大小相差巨大的解决方案相关的知识,希望对你有一定的参考价值。
参考技术A 实际情况:测试环境与生产环境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能解决的问题,就换角度想会不会是文件系统的问题,进而找到了解决的方案。这也是我要学习他的地方,我查了一天都没有查出来,他只查了一会,就能解决问题,也确实是厉害!
怎么样,我是不是众多解决方案中的一股清流!希望当各位朋友遇到跟我一样的情况下,可以看到我的这篇文章,并且通过上述方法真的能解决这个问题,也算是我没有白折腾,希望可以帮助到大家!!!
怎么远程登陆到虚拟机centos?centos要开机状态码?
一,你的虚拟机软件上centos的网络类型一般应该选择桥接模式。然后在centos中设置IP,和你的实体主机的IP保持在同一个网段(如果你的实体主机使用DHCP,那你的centos也为DHCP,但是你一般就只能在局域网中远程centos了),可以用setup工具完成。确保防火墙支持,或者清掉防火墙:iptables -F,然后用远程主机ping你的centos的IP,通了则进行下一步。二,开启centos远程连接功能,一般有ssh和VNC两种途径。ssh用于文本界面的远程连接,VNC用于图形化的远程登录。使用VNC的步骤如下
1、安装VNC服务端软件:yum install -y tigervnc tigervnc-server (没网的话……)
2、修改VNCserver的配置文件:vim /etc/sysconfig/vncservers 加入如下一行
VNCSERVERS="1:loginname" ——loginname是你的centos中的一个系统用户,最好不要用root用户,可能会有问题
3、设置VNC登录密码:vncpasswd loginname ,然后输入你的密码。VNC是用的系统用户,但是单独的密码。
4、启用VNC服务:service vncserver start 如果你不会防火墙设置最好再次 iptables -F
5、远程主机上安装vnc客户端,有很多,centos下面:yum -y install tigervnc
windows下面随便下一个,比如VNC viewer的Windows版本
6、在远程主机上打开客户端,按提示输入 ip:N ——比如 192.168.1.2:1(1是上面的配置文件中规定的),之后用户名密码。
三、使用SSH的话
1、在centos中开启ssh的服务器后台:service sshd start (默认都会有安装的)
2、远程主机中,在文本界面下:ssh user@ip user是centos的系统用户,不要用root用户
若远程主机是windows环境,还需下载secureCRT或其他软件。使用secureCRT的话,远程主机名里面就填你的centos的IP,如果你不会导密钥就把鉴权选项里只留密码就行。
ps:你的centos当然需要开机,以上步骤是在比较理想的情况下的简单操作,出现了错误很正常,网上很多教程,祝你顺利! 参考技术A centos不但要处于开机状态,而且还要开启SSH或者VNCSERVER之类的服务端软件.在这种状态下可以通过SSH客户端,或者VNC客户端登陆到CENTOS本回答被提问者和网友采纳
以上是关于centos 7通过df -h与du -sh /*统计根目录大小相差巨大的解决方案的主要内容,如果未能解决你的问题,请参考以下文章