RAID 어레이에서 일치하지 않는 섹터 복구

RAID 어레이에서 일치하지 않는 섹터 복구

최근에 "경고: /dev/md3의 mismatch_cnt가 0이 아닙니다"라는 자동 이메일을 받았습니다.

CentOS 6.6에서 mdadm을 사용하여 소프트웨어 RAID5 어레이를 실행하고 있습니다.

이 메시지를 인터넷 검색하다가 다음을 발견했습니다.

검사 작업은 드라이브에 불량 섹터가 있는지 검사하고 자동으로 복구합니다. 좋은 섹터에 불량 데이터가 포함되어 있는 것으로 확인되면(한 섹터의 데이터가 다른 디스크의 데이터가 나타내는 것과 일치하지 않습니다. 예를 들어 패리티 블록 + 다른 데이터 블록으로 인해 이 데이터 블록이 잘못되었다고 생각하게 됩니다) t 아무 조치도 취하지 않고 이벤트가 기록됩니다. 이 "아무 작업도 수행하지 않음"을 통해 관리자는 중복 정보에서 섹터를 재구성하여 생성된 데이터뿐만 아니라 섹터의 데이터를 검사하고 유지할 올바른 데이터를 선택할 수 있습니다.

제 질문은 어떻게 데이터를 검사하고 보관할 올바른 데이터를 선택할 수 있느냐는 것입니다. 어디에서도 이 작업을 수행하는 방법에 대한 언급이 없는 것 같습니다. 이러한 섹터가 어떤 파일에 영향을 미치는지 모르겠습니다.

답변1

어리석고 시간이 많이 걸리는 방법:

각 디스크에 대해 해당 디스크가 없는 RAID를 조립한 다음 마운트합니다. 이러한 마운트에 대한 모든 파일을 비교하십시오. 파일에서 차이점을 발견하면 불일치입니다.

RAID가 실행되지 않는 복구 시스템에서 이 작업을 수행하십시오. RAID 구성원 자체에 변경 사항이 발생하지 않도록 하려면 해당 구성원에 대한 읽기 전용 루프 장치를 생성하십시오.

# losetup --find --show --read-only /dev/diska
/dev/loop0
# losetup --find --show --read-only /dev/diskb
/dev/loop1
# losetup --find --show --read-only /dev/diskc
/dev/loop2

하나의 디스크가 누락된 상태로 조립하려면:

# mdadm --assemble --run --readonly /dev/md42 /dev/loop0 /dev/loop1
mdadm: /dev/md42 has been started with 2 drives (out of 3).
# mount -o ro /dev/md42 loop/
# md5sum loop/file
95e3afde4229e266cb49f1d6e3fba705  file

분실된 다른 디스크를 조립합니다. (각 디스크에 대해 이 작업을 차례로 수행하므로 각 디스크는 한때 분실된 디스크였습니다.)

# mdadm --stop /dev/md42
# mdadm --assemble --run --readonly /dev/md42 /dev/loop0 /dev/loop2
mdadm: /dev/md42 has been started with 2 drives (out of 3).
# mount -o ro /dev/md42 loop/
# md5sum loop/file
679c261d076f268a880c0fe847739e64  file

그래서 다른 파일이 있습니다. 둘 중 하나가 맞는지는 스스로 결정해야 합니다.

md일치하지 않는 주소를 직접 타겟팅하는 것이 더 현명할 것입니다. 그러나 해당 주소를 강제로 제공할 수 있는지는 모르겠습니다 . 그런 다음 해당 주소가 관련될 수 있는 파일 시스템의 파일을 찾아야 합니다. 이 작업의 용이성은 파일 시스템에 따라 다릅니다.

답변2

raid5의 경우 백업 데이터가 없습니다. 이는 체크섬이 일치하지 않음을 의미합니다. 어레이를 스캔하고 일치하지 않는 체크섬을 다시 계산하도록 repair작성 합니다 ./sys/block/md0/md/sync_action

관련 정보