原文:https://developer.jdcloud.com/article/1873

问题现象

之前在用Azure云的时候碰到过一次这个情况,就是一台虚拟机,CentOS7系统,文件系统是xfs,然后出现了磁盘占用率高的情况。

没有大文件占用,inode使用率也很低,没有未释放的文件句柄,甚至我还找我两个同事,Azure的伙伴帮我看了,也重启过机器,但是都不管用,最后还是让Azure的伙伴帮我扩容解决了。今天有幸看到这篇文章,又给我了新的排查思路:就是xfs文件系统碎片的问题。

系统内部看硬盘空间占用很大,但是实际根目录下并没有大文件目录占用,inode占用也很小,没有死句柄文件占用空间。

问题原因

这个是由于xfs文件系统中存在大量碎片占用导致,并不是真的存在大文件占用。

可以通过命令xfs_db -c frag -r /dev/vda1,查看系统盘xfs文件系统碎片情况。

解决办法

执行碎片整理命令:xfs_fsr /dev/vda1,对xfs文件系统整理碎片后,硬盘空间占用恢复正常。

在自己电脑测试

随便找了个虚拟机,首先查看当前系统盘xfs文件碎片情况:

[root@localhost ~]# xfs_db -c frag -r /dev/sda3
actual 48532, ideal 47570, fragmentation factor 1.98%
Note, this number is largely meaningless.
Files on this filesystem average 1.02 extents per file
[root@localhost ~]# df -h /dev/sda3
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3       198G   55G  144G   28% /

执行碎片整理:

#这个命令执行之后我发现我电脑磁盘读写很高,,我是nvme磁盘,磁盘使用率在50%到100%之前,于是我还是终止了,不在自己电脑测试了
[root@localhost ~]# xfs_fsr /dev/sda3