![실패한 ceph 클러스터에서 VM 이미지 복구](https://linux55.com/image/101397/%EC%8B%A4%ED%8C%A8%ED%95%9C%20ceph%20%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EC%97%90%EC%84%9C%20VM%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EB%B3%B5%EA%B5%AC.png)
며칠 전 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의 모든 가상 머신에서 이미지를 가져오려고 합니다. 이를 위해 OSD에서 데이터에 대한 정보를 수집하고 수집된 파일을 재구성하는 스크립트를 작성했습니다.
파일 이름은 다음과 같습니다.
current/1.382_head/DIR_2/DIR_8/DIR_3/rbd\udata.147082238e1f29.0000000000009238__head_CB25F382__1
여기서 147082238e1f29는 VM 이미지의 ID로 나타나고 0000000000009238은 "오프셋"으로 나타납니다. 그래서 동일한 ID를 가진 모든 파일을 나열하고 오프셋을 기준으로 정렬했습니다. 문제는 간격이 있다는 것입니다. OSD에 모든 오프셋이 나타나는 것은 아닙니다.
따라서 dd를 사용하여 이러한 파일을 모두 합치면 간격이 있기 때문에 이미지가 손상된 것처럼 보입니다.
누구든지 ceph를 시작할 때 시간 초과 문제를 해결하도록 도와주거나 최소한 VM 이미지를 가져오는 데 도움을 줄 수 있습니까?
답변1
더 기도한 후에 나는 실제로 다음과 같은 결과를 얻었습니다.
잘못된 블록 크기를 지정하고 "0-블록"을 삽입하는 대신 복사 시 오프셋을 사용하도록 변경했습니다.
OSD에서만 이미지 추출(아무것도 효과가 없었습니다):
https://gitlab.lbader.de/kryptur/ceph-recovery/tree/master
이제 OSD에서 VM을 추출하고 이미지를 새 클러스터에 복사할 수 있습니다.