問題描述
原因分析
數據的不一致性(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
此時即可修復成功!