Recovering from journal-related content

| 2016년 11월 26일 | 0 Comments

* 위험한 작업을 진행전 필이 저널을 카피해라.

# cephfs-journal-tool journal export backup.bin

– 해당 명령어 실행시 에러가 발생할 수 있다. RADOS 수준의 복사본을 만드어야 할 경우 작동하지 않을 수 있다.

만약 저널이 손상되어 복구 할 수 없을 경우 아래와 같이 메타데이터 복구를 시도해라.

DENTRY RECOVERY FROM JOURNA

# cephfs-journal-tool event recover_dentries summary

– 백업 저장소의 결과 상태는 자체 일관성이 보장되지 않으며 나중에 온라인 MDS 스크럽이 필요하다.
이 명령으로 저널 내용을 수정할 수 없으므로 가능한 복구 한 후에 저널을 별도로 잘라내라.

– 저널이 손상되었거나 MDS가 어떤 이유로 든 재생할 수 없는 경우 다음과 같이 잘라낼 수 있다.

== # cephfs-journal-tool journal reset

* 저널이 재설정 된 후에는 MDS 테이블의 내용 (InoTable, SessionMap, SnapServer)과 일관성이 없어 질 수 있다.

세션 맵을 재설정하려면 (모든 세션 지우기) 다음을 사용해라.

# cephfs-table-tool all reset session

-이 명령은 모든 ‘in’MDS 랭크의 테이블에서 작동한다. 해당 등급에서만 작동하려면 ‘all’을 MDS 등급으로 교체하라.

–> MDS 등급????

-세션 테이블은 재설정해야 할 가능성이 가장 높은 테이블이지만, 다른 테이블을 재설정해야하는 경우 ‘세션’을 ‘스냅’또는 ‘inode’로 바꿔야 한다.

파일 시스템의 RADOS 상태 (즉, 메타 데이터 풀의 내용)가 다소 회복되면 메타 데이터 풀의 내용을 반영하도록 MDS 맵을 업데이트해야 할 수도 있다.

다음 명령을 사용하여 MDS 맵을 단일 MDS로 재설정하라.

# ceph fs reset –yes-i-really-mean-it

-이 작업이 실행되면 0 이외의 MDS 등급에 대한 RADOS의 모든 상태가 무시되므로 결과적으로 데이터가 손실 될 수 있다.

-‘fs reset’과 ‘fs remove’의 차이는 무엇일까? fs new ‘. 주요 차이점은 remove / new를 수행하면 디스크의
기존 루트 inode를 덮어 쓰고 기존 파일을 고아가되도록 ‘Creating’상태에서 0 등급을 남겨 두게된다.
반대로 ‘재설정’명령은 순위가 0 인 상태에서 ‘활성’상태로 두어 다음 MDS 데몬이 순위를 요청하고 기존 RADOS 메타 데이터를 사용하게 된다.

##########################

RECOVERY FROM MISSING METADATA OBJECTS

-누락되거나 손상된 개체에 따라 다양한 명령을 실행하여 개체의 기본 버전을 다시 생성해야 할 수 있습니다.

1. Session table
# cephfs-table-tool 0 reset session

2. SnapServer
# cephfs-table-tool 0 reset snap

3. InoTable
# cephfs-table-tool 0 reset inode

4. Journal
# cephfs-journal-tool –rank=0 journal reset

5. Root inodes (“/” and MDS directory)
# cephfs-data-scan init

마지막으로 누락 된 파일 및 디렉토리에 대한 메타 데이터 오브젝트를 데이터 풀의 내용을 기반으로 재생성 할 수 있다.
이것은 2 단계 프로세스로 진행된다.
먼저 모든 객체를 스캔하여 inode의 크기 및 mtime 메타 데이터를 계산한다.
둘째, 모든 파일에서 첫 번째 개체를 검색하여 이 메타 데이터를 수집하고 이를 메타 데이터 풀에 삽입한다.

Object 스캔

cephfs-data-scan scan_extents
cephfs-data-scan scan_inodes

이 명령은 데이터 풀에 많은 파일이나 매우 큰 파일이있는 경우 매우 오랜 시간이 걸릴 수 있다.
프로세스를 가속화하려면 도구의 여러 인스턴스를 실행.
다수의 workers를 결정하고 각 workers에게 0-(N_workers – 1) 범위의 숫자를 전달하여라.

Worker 0
# cephfs-data-scan scan_extents 0 1

Worker 1
# cephfs-data-scan scan_extents 1 1

Worker 0
# cephfs-data-scan scan_inodes 0 1

Worker 1
# cephfs-data-scan scan_inodes 1 1

모든 workers가 scan_inodes 단계에 들어가기 전에 모든 workers가 scan_extents 단계를 완료했는지 확인하는 것이 중요하다.

Category: 솔루션/IT기타

유 혁

About the Author ()