为何CnosDB中DISK_FREE参数显示不准确?
CnosDB磁盘可用空间统计与系统实际值不符问题分析
问题现象
执行CnosDB命令show datanodes时,数据节点的DISK_FREE字段显示为83.32 GB:
❯ show datanodes; +---------+------------------------+-----------+---------+-----------+---------------------+ | NODE_ID | HOST | ATTRIBUTE | STATUS | DISK_FREE | LAST_UPDATED_TIME | +---------+------------------------+-----------+---------+-----------+---------------------+ | 4 | query_tskv1.cnosdb.com | HOT | HEALTHY | 83.32 GB | 2023-07-06 03:12:03 | | 5 | query_tskv2.cnosdb.com | COLD | HEALTHY | 83.32 GB | 2023-07-06 03:12:03 | +---------+------------------------+-----------+---------+-----------+---------------------+ Query took 0.004 seconds.
但通过系统命令df -h查看根分区可用空间仅为78G:
Filesystem Size Used Avail Use% Mounted on overlay 114G 31G 78G 29% /
环境信息
- CnosDB版本:
cnosdb 2.3.1, revision = edf68a3430992ea27e79c7477c625c7f0ed08da7 - Docker镜像:
cnosdb/cnosdb-enterprise:2.3
可能原因及解决思路
1. 系统磁盘预留空间导致的差异
Linux系统默认会为root用户预留约5%的磁盘空间(用于系统应急操作),df -h显示的Avail是普通用户可使用的空间,而CnosDB的DISK_FREE可能统计的是磁盘总可用空间(包含root预留部分)。按你的磁盘总大小114G计算,5%预留空间约为5.7G,83.32G减去该预留值后正好接近78G,符合此逻辑。
如果需要验证,可通过tune2fs -l /dev/xxx | grep Reserved查看具体预留空间大小,其中/dev/xxx是对应磁盘设备名。
2. 数据存储路径与当前查看分区不一致
检查CnosDB数据节点的实际存储路径是否为df -h查看的根分区。可通过查看CnosDB配置文件中的data_dir参数确认数据目录,再执行df -h <data_dir路径>查看该分区的实际可用空间。如果数据目录挂载在其他未查看的分区,就会出现两者数值不符。
3. 指标缓存或同步延迟
CnosDB的磁盘空间指标可能存在缓存机制,不会实时同步系统磁盘状态。可尝试重启CnosDB数据节点后,再次执行show datanodes命令,观察数值是否更新为系统实际可用空间。
内容的提问来源于stack exchange,提问作者george
相关产品推荐
相关产品推荐

