问题描述
原因分析
数据的不一致性(inconsistent)指对象的大小不正确、恢复结束后某副本出现了对象丢失的情况。数据的不一致性会导致清理失败(scrub error)。
CEPH在存储的过程中,由于特殊原因,可能遇到对象信息大小和物理磁盘上实际大小数据不一致的情况,这也会导致清理失败。
不一致性校验失败解决方案
查看健康统计
ceph health detail
结果示例:
由上图可知pg编号8.39,8.22,8.14出现问题。
PG修复
ceph pg repair <pg_id>
repair无法直接修复的解决方案
如果是对象信息大小和物理磁盘上实际大小数据不一致的情况,则无法直接通过ceph pg repair来修复,此时可通过以下方法解决:
查看健康统计
ceph pg repair <pg_id>
结果示例:
由上图可知pg编号8.39,8.22,8.14出现问题。acting中是其对应存储的OSD的编号
定位清理失败的数据
先通过ceph pgrepair <pg_id>修复,然后打开ceph –w查看失败信息:提示如下:
其中形如rbd_data.xxxxxxxxxx即具体的对象数据名称。
截断数据
rados –p <poolname> truncate <object_name>length
例:
从上述LOG的描述中可知,rbd_data.1823a2ae8944a在磁盘中的大小为4194304,但是对象信息的大小为41738234,因此要将其截成4173824的长度,操作命令如下
rados –p compute truncate rbd_data.1823a2ae8944a 4173824
重新修复数据
ceph pg repair 8.39
此时即可修复成功!