pg_inconsistent之三个本地文件一致修复方法

发布时间 2023-04-24 17:23:09作者: XU-NING

问题背景

ceph 集群出现 pg inconsistent,ceph pg repair 无法修复
osd 日志提示三个本地文件一致,但与 object info size 大小不一致

操作步骤

  1. 通过 ceph health detail,查看有问题的 pg
ceph health detail
  1. 找到错误的对象文件
ceph pg scrub [pg_id]
rados list-inconsistent-obj [pg_id]
# 输出中 rbd_data.xxxxxx.xxxx 为有问题的对象文件


3. 进入该 pg 所在的其中一个 osd 的对应 pg 目录,找到本地文件

cd /var/lib/ceph/osd/ceph-[osdid]/current/[pgid]_head
# 本地保存的文件不以rbd_ 开头,所以去掉 rbd_ 之后做模糊匹配
find ./ -name *data.xxxxxx.xxxx*


4. 将查到的拷贝到备份目录并重命名为对象文件

# cp 时使用 -a 连属性一起拷贝
# 此处注意,由于查询到的路径包含 \n 所以需要加反斜杠转移即修改 \n 为 \\n
cp -a [对象文件路径] /opt/[对象名]


5. 将备份的对象文件重新 put 到存储池

cd /opt/
# 存储池 id 为 pg id 的前缀 id,并通过 ceph osd pool ls detail 查询具体池名
rados put -p [存储池] [对象名] [对象名]


6. 再次对 pg 进行 repair

ceph pg repair [pg_id]