mdadm을 사용하여 두 개의 RAID1 디스크에서 누락된 슈퍼 블록을 복구하십시오.

mdadm을 사용하여 두 개의 RAID1 디스크에서 누락된 슈퍼 블록을 복구하십시오.

내 RAID1 어레이는 제대로 작동 /dev/md128하지만 재부팅 후에는 완전히 사라지고 mdadm두 디스크 모두에 슈퍼블록이 누락되었다고 보고합니다. 내 질문은 이 문제를 해결하는 방법입니다.

배경: CentOS 7을 실행하는 시스템. SSD 2개( sda, sdb)와 HDD 2개( sdc, ) 가 있습니다 sdd. RAID1 어레이 가 있어야 /dev/md128하지만 아무것도 표시되지 않습니다. 커널 업데이트를 위해 재부팅할 때까지 정상적으로 실행되었습니다.sdcsdd

목록에 없는 어레이 /etc/mdadm.conf:

# cat /etc/mdadm.conf
# mdadm.conf written out by anaconda
MAILADDR root
AUTO +imsm +1.x -all
ARRAY /dev/md/boot level=raid1 num-devices=2 UUID=a2f6b6fe:31c80062:67e7a858:a21502a9
ARRAY /dev/md/boot_efi level=raid1 num-devices=2 UUID=ffbc39c9:ff982933:b77aece5:b44bec5f
ARRAY /dev/md/root level=raid1 num-devices=2 UUID=b31f6af6:78305117:7ca807e7:7691d745
ARRAY /dev/md/swap level=raid0 num-devices=2 UUID=f31db9e8:e136e642:1ae8f2d0:7178c956

수동으로 어레이를 조립해 보십시오.

# mdadm --verbose --assemble /dev/md128 /dev/sdc1 /dev/sdd1
mdadm: looking for devices for /dev/md128
mdadm: no recogniseable superblock on /dev/sdc1
mdadm: /dev/sdc1 has no superblock - assembly aborted
# mdadm -E /dev/sdc1
mdadm: No md superblock detected on /dev/sdc1.
# mdadm -E /dev/sdd1
mdadm: No md superblock detected on /dev/sdd1.

확인해야 할 기타 사항: smartctl오류가 표시되지 않으며(두 드라이브 모두 약 3개월이 지났고 거의 사용되지 않음) mdadm -E /dev/sdc장치 수준에 슈퍼블록이 표시되지 않습니다. 변경 사항 없이 이전 커널로 되돌렸습니다. 다른 결과를 추가하게 되어 기쁩니다. 질문을 불필요하게 길게 만들지 마십시오.

어떤 아이디어라도 감사하겠습니다! 그 동안에는 dd두 하드 드라이브를 모두 사용 가능한 상태로 유지할 계획입니다.

답변1

나는 이 문제를 해결했고 다른 사람들의 이익을 위해 이것이 나에게 도움이 되었습니다. 저는 어레이 외부에 RAID1 디스크를 마운트하여 이를 수행했습니다. 주의해서 시작하기 전에 디스크 사본을 만드십시오. 제 경우에는 RAID1에 LVM 물리 볼륨이 포함되어 있습니다.

  1. 디스크 중 하나를 사용하여 새 어레이를 생성합니다.
mdadm --create /dev/md128 --raid-devices=2 --level=1 /dev/sdc1 missing
  1. LVM 구조를 다시 만듭니다. 이 작업을 수동으로 수행하거나 자동 백업에서 복원할 수 있습니다.
pvcreate vg00 /dev/md128
vgcfgrestore --list vg00
vgcfgrestore --force -f /etc/lvm/backup/vg00 vg00
  1. 볼륨 그룹 이름 바꾸기(임시):
vgrename yyyyyy-9OHC-OlB2-izuQ-dyPi-jw2S-zzzzzz vg00new
  1. 다른 디스크에서 파일 시스템의 시작 부분을 찾습니다. 그런 정보 가 없어서 /etc/mdadm.conf쉽게 알 수가 없네요. 그래서 저는 파일 시스템 서명을 찾습니다.
grep -a -b -o LABELONE /dev/sdd1

서명은 다음에 설명되어 있습니다.LVM 사양, 파일은 다음 위치에 저장되어 있음을 알려줍니다.두 번째 부서. 내 섹터는 512바이트이므로 위에서 반환된 숫자에서 512를 빼고 읽기 전용 루프 장치를 만듭니다.

losetup -f /dev/sdd1 --read-only -o 134217728
  1. 루프 장치에서 LVM 데이터를 스캔합니다:
vgscan
lvscan

lsblk이제 및 같은 명령은 및 의 볼륨을 lvdisplay표시해야 합니다 . 장치가 있는지 확인 하고 없으면 볼륨을 활성화하십시오 .vg00vg00new/dev/vg00lvchange -a y vg00/<volname>

  1. 데이터를 RAID1에 복사합니다. 이는 및 를 설치하여 수행할 수 있습니다 cp.
mkdir /data/old
mount -t <fstype> /dev/vg00/<volname> /data/old
cp -pr /data/old/* /data/current/

또는 데이터에 따라 dd각 논리 볼륨에 대해 다음을 사용할 수도 있습니다.

dd if=/dev/vg00/vol1 of=/dev/vg00new/vol1 bs=1M conv=sparse

이는 conv=sparse공간을 완전히 할당하지 않기 때문에 씬 프로비저닝된 LV에 중요합니다.

  1. 이제 순환 장치를 분리할 수 있습니다.
lvchange -a n vg00/<volname>
losetup -d loop0
  1. vg00new그러면 가 켜져 있어야 합니다 . /dev/md128로 확인하세요 lsblk. VG의 이름을 다시 원래 이름으로 바꿉니다.
vgrename yyyyyy-9OHC-OlB2-izuQ-dyPi-jw2S-zzzzzz vg00

마지막으로, 모든 것이 복사되어 제대로 작동한다고 100% 확신하고 fsck필요한 모든 작업을 완료한 후 이를 /dev/sdd1RAID1 어레이에 다시 추가하세요.

mdadm --manage /dev/md128 --add /dev/sdd1

솔루션의 본질은 @frostschutz에 귀속되며 다음에서 찾을 수 있습니다.https://unix.stackexchange.com/a/98803/384096

아직도 문제가 어떻게 발생했는지 알 수 없어서 조금 걱정스럽긴 하지만, 적어도 이렇게 하면 문제가 다시 작동하게 됩니다.

관련 정보