손상된 Linux md RAID5 어레이를 복구하는 방법은 무엇입니까?

손상된 Linux md RAID5 어레이를 복구하는 방법은 무엇입니까?

얼마 전 집에 RAID5 시스템이 있었습니다. 디스크 4개 중 하나에 장애가 발생했지만, 디스크를 꺼냈다가 다시 넣은 후 모든 것이 괜찮아 보여 다시 동기화를 시작했습니다. 작업이 완료되었을 때 나는 디스크의 4분의 3이 고장났다는 사실을 깨달았습니다. 그러나 나는 이것이 가능하다고 믿지 않습니다. 디스크에는 여러 개의 파티션이 있으며 각 파티션은 서로 다른 RAID 어레이에 속합니다.

  • md0은 sda1, sdb1, sdc1 및 sdd1로 구성된 RAID1 어레이입니다.
  • md1은 sda2, sdb2, sdc2 및 sdd2로 구성된 RAID5 어레이입니다.
  • md2는 sda3, sdb3, sdc3 및 sdd3으로 구성된 RAID0 어레이입니다.

md0 및 md2는 모든 디스크가 정상이라고 보고하고, md1은 3개 디스크(sdb2, sdc2, sdd2)에 오류가 있다고 보고합니다. 내가 이해하는 바에 따르면, 하드 드라이브에 장애가 발생하면 중간 파티션뿐만 아니라 모든 파티션이 손실되어야 합니다.

이 시점에서 컴퓨터를 종료하고 드라이브의 플러그를 뽑았습니다. 그 이후로 저는 그 컴퓨터에 더 작은 새 디스크를 사용해 왔습니다.

데이터 복구의 희망이 있습니까? mdadm이 내 디스크가 실제로 작동하고 있다고 믿게 만들 수 있나요? 실제로 문제가 있을 수 있는 유일한 디스크는 sdc이지만 다른 어레이에서도 문제가 보고되었습니다.

고쳐 쓰다

마침내 이전 디스크를 연결하고 SystemRescueCd에서 시스템을 부팅할 기회를 얻었습니다. 위의 내용은 메모리에서 작성되었습니다. 이제 하드 데이터가 생겼습니다. 이것이 출력이다mdadm --examine /dev/sd*2

/dev/sda2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:40:48 2010
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 1
  Spare Devices : 1
       Checksum : 68b48835 - correct
         Events : 53204

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     0       8        2        0      active sync   /dev/sda2

   0     0       8        2        0      active sync   /dev/sda2
   1     1       8       18        1      active sync   /dev/sdb2
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdb2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1
       Checksum : 68b4894a - correct
         Events : 53205

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     1       8       18        1      active sync   /dev/sdb2

   0     0       0        0        0      removed
   1     1       8       18        1      active sync   /dev/sdb2
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdc2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 1
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 1
       Checksum : 68b48975 - correct
         Events : 53210

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     2       8       34        2      active sync   /dev/sdc2

   0     0       0        0        0      removed
   1     1       0        0        1      faulty removed
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdd2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 1
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 1
       Checksum : 68b48983 - correct
         Events : 53210

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     4       8       50        4      spare   /dev/sdd2

   0     0       0        0        0      removed
   1     1       0        0        1      faulty removed
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2

마지막 출시 이후 상황이 변경된 것 같습니다. 올바르게 읽으면 sda2, sdb2 및 sdc2가 작동하고 동기화 데이터를 포함하는 반면 sdd2는 대기 상태입니다. 3개의 디스크에 오류가 발생한 것을 분명히 기억하지만 이는 좋은 소식이었습니다. 그러나 배열은 여전히 ​​작동하지 않습니다.

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md125 : inactive sda2[0](S) sdb2[1](S) sdc2[2](S)
      1875194880 blocks

md126 : inactive sdd2[4](S)
      625064960 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

md0의 이름이 md127로 변경된 것 같습니다. md125와 md126은 이상합니다. 두 개가 아닌 하나의 배열이어야 합니다. 이전에는 md1으로 알려져 있었습니다. md2는 완전히 사라졌지만 그것은 내 스왑이므로 상관하지 않습니다.

다른 이름을 이해할 수 있지만 그것은 중요하지 않습니다. 그런데 3개의 "액티브 싱크" 디스크가 있는 어레이를 읽지 못하는 이유는 무엇입니까? sdd2가 별도의 배열에 있으면 어떻게 되나요?

고쳐 쓰다

슈퍼블록을 백업한 후 다음을 시도했습니다.

root@sysresccd /root % mdadm --stop /dev/md125
mdadm: stopped /dev/md125
root@sysresccd /root % mdadm --stop /dev/md126
mdadm: stopped /dev/md126

여태까지는 그런대로 잘됐다. sdd2는 무료이므로 아직 추가하고 싶지 않습니다.

root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c}2 missing 
mdadm: cannot open device missing: No such file or directory
mdadm: missing has no superblock - assembly aborted

분명히 나는 ​​그렇게 할 수 없습니다.

root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c}2        
mdadm: /dev/md1 assembled from 1 drive - not enough to start the array.
root@sysresccd /root % cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : inactive sdc2[2](S) sdb2[1](S) sda2[0](S)
      1875194880 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

그것도 소용없어요. 모든 디스크를 사용해 봅시다.

mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c,d}2
mdadm: /dev/md1 assembled from 1 drive and 1 spare - not enough to start the array.
root@sysresccd /root % cat /proc/mdstat                           
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : inactive sdc2[2](S) sdd2[4](S) sdb2[1](S) sda2[0](S)
      2500259840 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

불운. 기반으로이 답변나는 노력할 것이다:

mdadm --create /dev/md1 --assume-clean --metadata=0.90 --bitmap=/root/bitmapfile --level=5 --raid-devices=4 /dev/sd{a,b,c}2 missing
mdadm --add /dev/md1 /dev/sdd2

안전 해요?

고쳐 쓰다

나는 게시했다슈퍼블록 파서 스크립트한때 댓글에 이 표를 만든 적이 있습니다. 어쩌면 누군가가 유용하다고 생각할 수도 있습니다. 도움을 주셔서 감사합니다.

답변1

먼저 디스크를 확인하고, 스마트 셀프 테스트를 실행해 보세요.

for i in a b c d; do
    smartctl -s on -t long /dev/sd$i
done

완료하는 데 몇 시간이 걸릴 수 있지만 몇 분마다 각 드라이브의 테스트 상태를 확인하십시오.

smartctl -l selftest /dev/sda

읽기 오류로 인해 디스크 상태가 불완전하다고 보고되면 해당 디스크는 md1 재조립에 안전하지 않은 것으로 간주되어야 합니다. 자체 테스트가 완료되면 어레이 재조립을 시작할 수 있습니다. 또는 특별히 주의를 기울이고 싶다면 계속하기 전에 디스크를 다른 컴퓨터로 옮기십시오(메모리/컨트롤러 등이 손상된 경우).

최근에 이와 비슷한 사례를 접했습니다. 드라이브 하나에 오류가 발생하여 이를 어레이에 다시 추가했지만 재구축 중에 드라이브 4개 중 3개에서 완전히 오류가 발생했습니다. /proc/mdadm의 내용은 귀하의 내용과 동일합니다(순서가 다를 수 있음).

md1 : inactive sdc2[2](S) sdd2[4](S) sdb2[1](S) sda2[0](S)

하지만 운이 좋아서 이것을 사용하여 배열을 재조립했습니다.

mdadm --assemble /dev/md1 --scan --force

제공하신 --examine 출력을 보면 다음과 같은 상황이 발생하고 있음을 알 수 있습니다. sdd2가 실패하여 이를 제거하고 다시 추가하여 재구축을 시도할 대체 드라이브가 되었습니다. 그러나 sda2 재구축이 실패하고 sdb2도 실패합니다. 따라서 이벤트 카운터는 어레이의 마지막 활성 드라이브인 sdc2 및 sdd2에서 더 큽니다(sdd는 재구축할 기회가 없었기 때문에 모든 드라이브 중에서 가장 오래되었습니다). 이벤트 카운터의 차이로 인해 --force가 필요합니다. 그래서 당신도 이것을 시도해 볼 수 있습니다

mdadm --assemble /dev/md1 /dev/sd[abc]2 --force

전체적으로 위의 명령이 실패하면 다음과 같이 배열을 다시 생성해야 한다고 생각합니다.

mdadm --create /dev/md1 --assume-clean -l5 -n4 -c64 /dev/sd[abc]2 missing

--create이 부분은 중요합니다. 이렇게 하면 missing어레이에 네 번째 드라이브를 추가하려고 하지 마십시오. 그러면 구축이 시작되고 데이터가 손실됩니다.. 누락된 드라이브가 있는 어레이를 생성해도 해당 내용은 변경되지 않으며 복사본을 얻을 수 있습니다.다른 곳에서(raid5는 raid1과 다르게 작동합니다.)

어레이를 시작할 수 없는 경우 여기에서 이 해결 방법을 시도해 보십시오(perl 스크립트).배열 다시 만들기

결국 어레이를 부팅하게 되면 파일 시스템이 깨끗하지 않고 손상될 수 있습니다. 재구축 중에 디스크 하나에 오류가 발생하면 다른 디스크에 쓰지 않고 어레이가 중지되고 정지될 수 있습니다. 이 경우 두 개의 디스크가 실패합니다.아마도시스템이 완료할 수 없는 쓰기 요청을 수행하고 있으므로 일부 데이터가 손실될 가능성이 있지만 이를 전혀 눈치채지 못할 가능성도 있습니다. :-)

편집: 몇 가지 설명을 추가했습니다.

답변2

나는 그것에 많은 문제가 있었지만 mdadm데이터를 잃지 않았습니다. --force모든 데이터가 손실될 수 있으므로 이 옵션을 사용하지 않거나 매우 신중하게 사용해야 합니다 . 게시해 주세요/etc/mdadm/mdadm.conf

관련 정보