挂载后Ceph RBD实际空间占用远大于磁盘显示占用问题咨询
RBD
du结果与挂载后df -h结果差异的原因 - 统计逻辑的本质差异:
rbd du是Ceph集群层面的统计,计算的是该RBD卷实际在集群中分配的所有存储对象的总大小,只要某个块曾经被写入过数据,即使上层文件系统已经删除了对应文件、标记该块为空闲,只要没有主动通知Ceph回收,rbd du就会将这部分块计入已用空间。而df -h是上层文件系统层面的统计,只统计当前被文件系统标记为"已分配给文件使用"的空间,已经删除的文件占用的块不会被计入已用空间。 - 默认未开启块回收机制:Linux文件系统删除文件时,默认不会主动向底层块设备发送TRIM/DISCARD指令,因此Ceph RBD层感知不到上层已经释放了这些块,已经分配的存储对象不会被自动删除,就会出现
rbd du统计的已用空间远大于df -h结果的情况。你案例中70G左右的差值,几乎都是这部分已经被上层删除但Ceph尚未回收的废弃块占用的。 - 补充:你执行
rbd du时出现的fast-diff map not enabled警告只会影响查询速度,不会影响统计结果的准确性。
对Ceph集群空间统计的影响
该情况会直接影响Ceph集群空间统计的准确性:Ceph统计集群总已用空间、剩余可用空间时,是按实际分配的存储对象大小计算的,也就是和rbd du的统计口径一致。那些上层已经释放但未被回收的废弃块,会一直占用集群的物理存储空间,导致明明上层文件系统还有大量空闲,Ceph集群却先触发空间不足告警,甚至无法写入新数据的问题。
常用解决方法
- 挂载RBD块设备时添加
discard挂载参数,删除文件时会实时向RBD发送TRIM指令自动回收空间,适合写入删除不频繁的场景,会产生少量额外性能开销。 - 定期在RBD挂载点执行
fstrim <挂载路径>命令批量回收废弃块,比如每周执行一次,对性能影响更小,是生产环境更推荐的方案。 - 给RBD卷开启
fast-diff和object-map特性,可大幅提升rbd du等查询操作的速度,避免查询时的慢操作警告。
内容的提问来源于stack exchange,提问作者AndD
相关产品推荐
相关产品推荐

