Data-Recovery
從死掉的 ceph 集群中恢復 VM 映像
幾天前,我們的 Ceph 集群死了——沒人知道為什麼,但似乎監視器剛剛被刪除。當嘗試將它們重新添加到 ceph.conf 時,我們會在啟動 ceph 時遇到超時並出現以下錯誤:
7f1b04382700 0 -- :/3908692206 >> 172.16.50.2:6789/0 pipe(0x7f1b0005a060 sd=3 :0 s=1 pgs=0 cs=0 l=1 c=0x7f1b0005e350).fault
(172.16.50.2 是應該執行 ceph 監視器的節點…)
由於我們無法重新啟動集群 (Proxmox),我們希望從 Ceph OSD 中的所有 VM 中提取圖像。為此,我編寫了一個腳本,從 OSD 收集有關數據的資訊並重新組合收集的文件。
這些文件的名稱如下
current/1.382_head/DIR_2/DIR_8/DIR_3/rbd\udata.147082238e1f29.0000000000009238__head_CB25F382__1
其中 147082238e1f29 似乎是 VM-Image 的 ID,而 0000000000009238 似乎是“偏移量”。所以我列出了所有具有相同 ID 的文件,並根據它們的偏移量對它們進行排序。問題是:有差距……並不是所有的偏移都出現在 OSD 上。
因此,當將所有這些文件與 dd 放在一起時,圖像似乎已損壞 - 因為存在間隙。
任何人都可以在啟動 ceph 時幫助我們解決超時問題,或者至少幫助我們提取 VM 映像嗎?
經過更多的祈禱,我實際上得到了它:
我指定了錯誤的塊大小,我改為使用偏移量複製而不是插入“0-blocks”。
僅從 OSD 中提取圖像(沒有其他工作):
https ://gitlab.lbader.de/kryptur/ceph-recovery/tree/master
現在我可以從 OSD 中提取虛擬機並將圖像複製到一個新的集群中。