如何在不影响OSD的情况下清除Ceph Quincy集群中的冗余数据?
如何在不影响OSD的情况下清除Ceph Quincy集群中的冗余数据?
嗨,Giuliano,我来帮你解决这个问题!从你的集群输出来看,那些冗余的47GiB主要是OSD上的残留元数据(从ceph osd df的TOTAL行能看到META占了42GiB),大概率是之前测试用的池删除后没彻底清理干净的痕迹。别担心,我们可以用安全的方法清理这些数据,完全不用动OSD本身——ceph-volume lvm zap确实不适合这个场景,它会直接清空整个OSD,风险太高了。
下面是具体的操作步骤,全程不会影响OSD的正常运行:
1. 先排查残留的PG或隐藏池
首先确认集群里有没有没清理干净的PG或者隐藏池:
- 列出所有池,检查是否有遗漏的测试池:
ceph osd pool ls detail - 查看所有PG的状态,重点找属于已删除池、状态为
down/stale的PG:ceph pg dump | grep -E '(pgid|state|pool)'
如果发现有残留的PG,记录下它们的PG ID,后续处理。
2. 清理残留的PG(如果存在)
如果找到了属于已删除池的PG,可以用以下命令标记它们为“已丢失”,让集群放弃这些数据的恢复(确认这些数据完全不需要再执行):
ceph pg <pg-id> mark_unfound_lost revert
执行后,集群会开始清理这些PG的残留数据。
3. 深度清理OSD元数据
针对占比最大的META数据,我们可以通过深度scrub来清理无效的元数据、旧PG日志等:
- 对单个OSD执行深度scrub:
建议分批执行,比如一次处理5-10个OSD,避免给集群带来过大压力。ceph osd deep-scrub <osd-id> - 也可以重启OSD服务,让OSD重新加载元数据,自动清理无效内容:
同样分批重启,保证集群可用性。systemctl restart ceph-osd@<osd-id>.service
4. 等待集群自动清理
如果是刚删除测试池不久,Ceph本身需要一些时间来完成数据清理(尤其是大池),可以先等待几个小时,再用ceph df和ceph osd df检查空间变化,说不定不用手动干预就自动清理了。
5. 验证清理效果
操作完成后,重新执行以下命令确认冗余数据是否减少:
ceph df ceph osd df
同时用ceph status确认集群状态为HEALTH_OK,所有OSD都处于up状态。
重要提醒
- 绝对不要在运行中的OSD上使用
ceph-volume lvm zap,这个命令是用来彻底销毁OSD的LVM设备,只有在你打算移除并重新加入OSD时才用。 - 操作前最好备份
/etc/ceph目录下的集群配置,以防意外。
备注:内容来源于stack exchange,提问作者gmaggi
相关产品推荐
相关产品推荐

