由于object大小与oi size大小不一致导致pg inconsistent

1、问题现象:
ceph -s 集群出现pg inconsistent错误,ceph pg repair无法修复,查看日志,报错信息如下:

log [ERR] : 3.f80 repair 1 missing, 0 inconsistent objects
log [ERR] : 3.f80 repair 2 errors, 1 fixed
log [ERR] : deep-scrub 3.f80 3/b1cc8f80/rbd_data.216f087229a7b1.000000000fb3e7/head on disk size (4194304) does not match object info size (2932736)

2、问题分析:
由于object info size大小是2932736,和磁盘上的object文件4M(4194304)不匹配,所以使用pg repair无法修复。需要使用rados truncate把oi size调整到4M再repair。

3、问题处理:
a、执行 ceph health detail 命令,找出 pg 不一致的 pg id 。
b、使用ceph pg repair <PG_ID> 并观察日志,找出对应的报错日志,根据报错日志确认object文件。
c、收集3个object文件的md5值。
d、使用cp -a 备份3个object文件,使用md5sum校验备份的数据。
e、确认出问题的卷无数据写入,执行 rados -p sata-00 truncate rbd_data.216f087229a7b1.00000000000fb3e7 4194304
f、使用 md5sum比对md5值,确认truncate之后,与之前是保持一致的。
g、确认object info size大小,执行如下命令:

执行 attr -l 'rbd\udata.216f087229a7b1.00000000000fb3e7__head_B1CC8F80__3'  #找到所有包含ceph._的行,按以下方法追加到/tmp/0
执行 attr 'rbd\udata.216f087229a7b1.00000000000fb3e7__head_B1CC8F80__3' -g ceph._ -q > /tmp/0
执行 attr 'rbd\udata.216f087229a7b1.00000000000fb3e7__head_B1CC8F80__3' -g ceph._@1 -q >> /tmp/0  #如果没有@1就忽略这一步。
执行 ceph-dencoder type object_info_t import /tmp/0 decode dump_json  #确认size是4M

h、执行ceph pg repair <PG_ID>修复。
i、使用ceph -s确认集群状态恢复正常。

猜你喜欢

转载自blog.csdn.net/Linux_kiss/article/details/83510477