mdadm+lvm2: 실수로 모든 슈퍼블록을 파괴했습니다.

mdadm+lvm2: 실수로 모든 슈퍼블록을 파괴했습니다.

실수로 모든 RAID1 슈퍼블록을 가비지로 덮어썼습니다. Ubuntu가 나를 일종의 하드 드라이브 복구 모드로 전환했을 때 ALT-CTRL-DEL을 눌러 부팅했기 때문에 이런 일이 발생한 것 같습니다. 내 모니터가 작동하지 않아서 "맹목적으로" 이 작업을 수행했습니다.

내 RAID 파티션을 보면 다음이 표시됩니다.

# mdadm --examine /dev/sdc2
/dev/sdc2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 00000000:00000000:00000000:00000000
  Creation Time : Fri Nov  1 18:59:05 2013
     Raid Level : -unknown-
   Raid Devices : 0
  Total Devices : 1
Preferred Minor : 127

    Update Time : Fri Nov  1 18:59:05 2013
          State : active
 Active Devices : 0
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 1
       Checksum : 6b1f0d22 - correct
         Events : 1


      Number   Major   Minor   RaidDevice State
this     0       8       34        0      spare   /dev/sdc2

   0     0       8       34        0      spare   /dev/sdc2

슈퍼블록이 쓰레기로 완전히 뒤덮인 것은 분명합니다. 두 디스크(sdb2, sdc2)는 동일해 보이고, 정보는 쓰레기이고, uuid는 모두 0이고, raid 수준: 알 수 없음, raid 장치: 0 등입니다.

최선의 선택은 다음과 같습니다.

mdadm --create --assume-clean --metadata=0.90 /dev/md0 --level=1 --raid-devices=2 /dev/sdb2 /dev/sdc2

이와 같이 mdadm --create를 사용하여 RAID 배열을 다시 만들 수 있습니까?

RAID 스택에는 LVM2 물리 볼륨이 있습니다. 개별 디스크나 백업 디스크 이미지에서 LVM2 데이터에 어떻게든 액세스할 수 있습니까?

GRUB는 디스크에서 내 initrd 및 커널 이미지를 찾을 수 있었습니다. /boot는 LVM2 상단의 ext4 루트 파티션 파일 시스템에 있으며 별도의 파티션이 아닙니다. 그래서 저는 데이터가 대부분 손상되지 않고 슈퍼블록이 사라졌다고 믿습니다.

편집: mdadm 명령줄에 --assume-clean을 추가했습니다.

답변1

슈퍼블록 형식 인 경우 0.90멤버를 직접 사용할 수 있어야 합니다(원하는 경우 읽기 전용 모드에서). 이렇게 하면 데이터에 액세스할 수 있으며 다른 디스크만 사용하여 새 RAID-1을 만들고 데이터를 복사한 다음 원본 디스크를 RAID에 추가할 수 있습니다.

다른 것(예: 메타데이터)인 경우 1.2마운트하기 전에 먼저 실제 파티션의 오프셋을 찾아야 합니다. 예를 들어 LVM인 경우 다음과 같은 오프셋을 얻게 됩니다.

# grep -a -b --only-matching LEVELONE /dev/disk
1049088:LABELONE

PV의 첫 번째 섹터가 비어 있기 때문에 512를 뺍니다. 실제로 0.90메타데이터 인 1.0경우 grep은 512를 표시해야 합니다. 이는 의 0실제 오프셋을 의미합니다. 더 큰 것을 얻으면 RAID가 다른 형식을 사용하고 있는 것입니다.

이 경우 올바른 오프셋을 사용하여 루프 장치를 만들 수 있습니다.

# losetup -f --show --read-only --offset $((1049088-512)) /dev/disk
/dev/loop0
# file -s /dev/loop0
LVM2 ...

이것이 귀하의 PV여야 하며 나머지를 처리해야 합니다 vgscan.vgchange -a y


에 관해서는 mdadm --create, 당신이 무엇을 하고 있는지 안다면, 당신은 그것을 할 수 있습니다. 아주 아주 조심스럽게 다루셔야 합니다. 이것은 최후의 수단일 뿐입니다.

오프셋이 다른 것이라면 메타데이터를 0사용해야 합니다 0.90(그것이 사용 중인 것이 확실한 경우). 오프셋이 다른 것이라면 mdadm --create동일한 오프셋을 다시 사용해야 합니다. 기본값 은 mdadm일반적으로 시간이 지나도 변경되지 않습니다. 따라서 명령줄에서 직접 사용하여 지정하십시오 --data-offset.

또한 하나의 디스크로만 생성하십시오. 다른 디스크는 그대로 둡니다 missing. --assume-clean먼저 생성이 성공했는지(장치에서 데이터를 사용할 수 있는지 /dev/md?) 확인한 다음 다른 디스크를 올바르게 동기화할 수 있으므로 이는 더 나은 접근 방식입니다 .

관련 정보