1.1 環境檢查
  通過ceph -s等方(fang)式檢查集群狀態是否已穩定,不(bu)存在
osd服(fu)務反復up/down;
上報心跳超時;
有slow ops
有大量數據遷移中
等情況。
1.2 查詢unfound對象相應的信息
- 查看unfound對象所在的pg
#ceph health detail
- 查詢丟失對象
#ceph pg {pgid} list_unfound
- 對對應pg進行狀態查詢,記錄對應的active/up set及恢復狀態中是否有osd處于down狀態
#ceph pg {pgid} query
- 若后端存儲類型為filestore,先備份osd上的對象(若為bluestore則跳過)
查(cha)尋丟失(shi)對象(xiang)(xiang),將對象(xiang)(xiang)哈希(xi)轉(zhuan)(zhuan)化(hua)為16進制(zhi),如(ru)下圖轉(zhuan)(zhuan)換后為4E220181
對象(xiang)所(suo)在的目錄層級為哈希字符由(you)后至前,直(zhi)至沒有(you)子目錄,如(ru)圖中對象(xiang)所(suo)在目錄為
/var/lib/ceph/osd/ceph-{osdid}/{pgid}_head/DIR_1/DIR_8/DIR_1/DIR0/DIR2
將對(dui)應(ying)對(dui)象拷貝,并(bing)校驗文件完整性
#cp -a {object} {target dir}
#md5sum {object}
1.3 拉起down狀態osd服務
嘗試將down的osd恢復,一般恢復后就可以找到object
登錄osd所在機器
#systemctl restart ceph-osd@{osdid}
檢查osd啟動狀態
檢查啟動后對象(xiang)是(shi)否仍舊為unfound狀(zhuang)態
1.4 回退unfound對象(osd服務無法拉起/拉起后對象仍未unfound狀態)
執行前建議讓研發同學評估此操作是否存在數據丟失風險
集群僅為副本模式時可執行回退,EC模式無法回退
若osd無(wu)法(fa)拉起(qi),先將osd刪除
#ceph osd out osd.{osdid}
#.ceph osd rm osd.{osdid}
#ceph osd crush remove osd.{osdid}
#ceph auth del osd.{osdid}
將(jiang)丟(diu)失(shi)回退至存活osd中存放的(de)舊(jiu)版本
#ceph pg {pgid} mark_unfound_lost revert
觀察對象是否恢復
1.5 刪除unfound對象(若無法回退)
執行前建議讓研發同學評估此操作是否存在數據丟失風險
若osd無(wu)法拉起,先(xian)將osd刪除
#ceph osd out osd.{osdid}
#.ceph osd rm osd.{osdid}
#ceph osd crush remove osd.{osdid}
#ceph auth del osd.{osdid}
將丟失對象刪除
#ceph pg {pgid} mark_unfound_lost delete
觀察集群狀態是否恢復