最近GlusterFS磁盘使用率超过警戒值,登录服务器df -h查看发现实际可用空间远远低于Prometheus上记录的可用空间,同时也会发现df -h获取到的已使用大小和可用空间大小之和是小于磁盘实际空间大小的。比如如下根分区
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 6.4G 32G 17% /
已使用了6.4GB,可用还有32GB,那么按照我们一般的认知磁盘大小应该是38.4GB,然而实际却是40GB;或者当前磁盘总共40GB,已使用了6.4GB,那么应该还有33.6GB才对呀。Prometheus监控获取到可用空间却是33.6GB(若阈值比较高,很容易导致磁盘实际满了,告警还没出来)。
原因
我们使用df -T / 查看下根分区的文件系统类型是什么?
$ df -T /
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/vda1 ext4 41152812 6645344 32603760 17% /
我们发现根分区是ext4文件系统,并且(Used+Available)/Size
(6644508+32604596)/41152812.0=0.9537405123129861
#无限接近95%
原来啊,Linux系统磁盘分区有保留区的概念,会给root或指定用户预留5%或更大的空间,ext文件系统(包括ext2、ext3、ext4)都会默认预留5%的磁盘空间,使用root用户维护系统或记录系统关键日志使用。
同时XFS文件系统没有类似情况。
$ df -Th /var/log
Filesystem Type Size Used Avail Use% Mounted on
/dev/vdb1 xfs 40G 1.1G 39G 3% /var/log
如何调整ext4文件系统保留空间大小
若我们磁盘空间不大,5%的设定浪费不了多少空间,尤其是根分区保护还是相当重要。若我们磁盘达到TB级别,那么每1TB空间我们就会实际损失50GB左右,我当前GlusterFS节点5TB却有256GB空间是浪费的,并且还是非系统分区,所以我们要根据实际情况调整百分比,那么如何调整呢?
我们需要使用工具tune2fs,tune2fs允许系统管理员在Linux ext2、ext3或ext4文件系统上调整各种可调的文件系统参数。
tune2fs -m 3 /dev/vdb1 #(保留3%,默认5%)
调整之后使用df查看,Available变多了。