얼마 전 집에 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