에 대한 질문을 찾았습니다.mdadm 예비 디스크내 질문에 거의 대답했지만 무슨 일이 일어나고 있는지 명확하지 않습니다.
4개의 디스크로 구성된 RAID5가 있으며, 모두 정상 작동 시 다음과 같이 표시됩니다 active/sync
.
Update Time : Sun Sep 29 03:44:01 2013
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
...
Number Major Minor RaidDevice State
0 202 32 0 active sync /dev/sdc
1 202 48 1 active sync /dev/sdd
2 202 64 2 active sync /dev/sde
4 202 80 3 active sync /dev/sdf
그러나 디스크 중 하나에 오류가 발생하면 RAID가 작동을 멈췄습니다.
Update Time : Sun Sep 29 01:00:01 2013
State : clean, FAILED
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
...
Number Major Minor RaidDevice State
0 202 32 0 active sync /dev/sdc
1 202 48 1 active sync /dev/sdd
2 0 0 2 removed
3 0 0 3 removed
2 202 64 - faulty spare /dev/sde
4 202 80 - spare /dev/sdf
과연 무슨 일이 벌어지고 있는 걸까요??
해결 방법은 RAID를 다시 설치하는 것이었습니다. 운 좋게도 그렇게 할 수 있습니다. 다음 번에는 아마도 이에 대한 심각한 데이터가 있을 것입니다. 단일 디스크 장애로 인해 장애가 발생하지 않는 RAID를 갖기 위해서는 이를 이해해야 합니다.
나는 내가 기대했던 것과 일어난 일을 나열하지 않았다는 것을 깨달았습니다.
3개의 양호한 디스크와 1개의 불량 디스크가 있는 RAID5는 성능 저하 모드(3개는 활성/동기화되고 1개는 결함 있음)에서 작동할 것으로 예상됩니다.
무슨 일이 일어났는가 하면 스페어가 갑자기 생성되어 결함이 있다고 선언된 후 새 스페어가 탄생했습니다.또한허공에서 생성되어 사운드를 선언한 후 RAID가 작동하지 않는 것으로 선언되었습니다.
이것은 다음의 출력입니다 blkid
.
$ blkid
/dev/xvda1: LABEL="/" UUID="4797c72d-85bd-421a-9c01-52243aa28f6c" TYPE="ext4"
/dev/xvdc: UUID="feb2c515-6003-478b-beb0-089fed71b33f" TYPE="ext3"
/dev/xvdd: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3"
/dev/xvde: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3"
/dev/xvdf: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3"
TYPE 및 SEC_TYPE은 RAID에 ext3이 아닌 XFS가 있으므로 흥미롭습니다....
이 디스크에서 시도된 마운트에 대한 로그(다른 모든 마운트와 마찬가지로 이전에 나열된 최종 결과 발생)에는 다음과 같은 로그 항목이 있습니다.
Oct 2 15:08:51 it kernel: [1686185.573233] md/raid:md0: device xvdc operational as raid disk 0
Oct 2 15:08:51 it kernel: [1686185.580020] md/raid:md0: device xvde operational as raid disk 2
Oct 2 15:08:51 it kernel: [1686185.588307] md/raid:md0: device xvdd operational as raid disk 1
Oct 2 15:08:51 it kernel: [1686185.595745] md/raid:md0: allocated 4312kB
Oct 2 15:08:51 it kernel: [1686185.600729] md/raid:md0: raid level 5 active with 3 out of 4 devices, algorithm 2
Oct 2 15:08:51 it kernel: [1686185.608928] md0: detected capacity change from 0 to 2705221484544
Oct 2 15:08:51 it kernel: [1686185.615772] md: recovery of RAID array md0
Oct 2 15:08:51 it kernel: [1686185.621150] md: minimum _guaranteed_ speed: 1000 KB/sec/disk.
Oct 2 15:08:51 it kernel: [1686185.627626] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
Oct 2 15:08:51 it kernel: [1686185.634024] md0: unknown partition table
Oct 2 15:08:51 it kernel: [1686185.645882] md: using 128k window, over a total of 880605952k.
Oct 2 15:22:25 it kernel: [1686999.697076] XFS (md0): Mounting Filesystem
Oct 2 15:22:26 it kernel: [1686999.889961] XFS (md0): Ending clean mount
Oct 2 15:24:19 it kernel: [1687112.817845] end_request: I/O error, dev xvde, sector 881423360
Oct 2 15:24:19 it kernel: [1687112.820517] raid5_end_read_request: 1 callbacks suppressed
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423360 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Disk failure on xvde, disabling device.
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Operation continuing on 2 devices.
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423368 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423376 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423384 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423392 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423400 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423408 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423416 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423424 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423432 on xvde).
Oct 2 15:24:19 it kernel: [1687113.432129] md: md0: recovery done.
Oct 2 15:24:19 it kernel: [1687113.685151] Buffer I/O error on device md0, logical block 96
Oct 2 15:24:19 it kernel: [1687113.691386] Buffer I/O error on device md0, logical block 96
Oct 2 15:24:19 it kernel: [1687113.697529] Buffer I/O error on device md0, logical block 64
Oct 2 15:24:20 it kernel: [1687113.703589] Buffer I/O error on device md0, logical block 64
Oct 2 15:25:51 it kernel: [1687205.682022] Buffer I/O error on device md0, logical block 96
Oct 2 15:25:51 it kernel: [1687205.688477] Buffer I/O error on device md0, logical block 96
Oct 2 15:25:51 it kernel: [1687205.694591] Buffer I/O error on device md0, logical block 64
Oct 2 15:25:52 it kernel: [1687205.700728] Buffer I/O error on device md0, logical block 64
Oct 2 15:25:52 it kernel: [1687205.748751] XFS (md0): last sector read failed
거기에 xvdf가 나열되어 있지 않습니다.
답변1
이는 RAID5의 근본적인 문제입니다. 재구축 시 불량 블록이 킬러입니다.
Oct 2 15:08:51 it kernel: [1686185.573233] md/raid:md0: device xvdc operational as raid disk 0
Oct 2 15:08:51 it kernel: [1686185.580020] md/raid:md0: device xvde operational as raid disk 2
Oct 2 15:08:51 it kernel: [1686185.588307] md/raid:md0: device xvdd operational as raid disk 1
Oct 2 15:08:51 it kernel: [1686185.595745] md/raid:md0: allocated 4312kB
Oct 2 15:08:51 it kernel: [1686185.600729] md/raid:md0: raid level 5 active with 3 out of 4 devices, algorithm 2
Oct 2 15:08:51 it kernel: [1686185.608928] md0: detected capacity change from 0 to 2705221484544
⋮
어레이가 조립되어 성능이 저하되었습니다. xvdc, xvde 및 xvdd로 어셈블되었습니다. 분명히 핫 스페어가 있습니다.
Oct 2 15:08:51 it kernel: [1686185.615772] md: recovery of RAID array md0
Oct 2 15:08:51 it kernel: [1686185.621150] md: minimum _guaranteed_ speed: 1000 KB/sec/disk.
Oct 2 15:08:51 it kernel: [1686185.627626] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
Oct 2 15:08:51 it kernel: [1686185.634024] md0: unknown partition table
Oct 2 15:08:51 it kernel: [1686185.645882] md: using 128k window, over a total of 880605952k.
'파티션 테이블' 메시지는 관련이 없습니다. 다른 메시지는 md가 아마도 핫 스페어(제거/다시 추가하려고 시도한 경우 이전에 실패한 장치일 수 있음)에서 복구를 시도하고 있음을 알려줍니다.
⋮
Oct 2 15:24:19 it kernel: [1687112.817845] end_request: I/O error, dev xvde, sector 881423360
Oct 2 15:24:19 it kernel: [1687112.820517] raid5_end_read_request: 1 callbacks suppressed
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423360 on xvde).
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Disk failure on xvde, disabling device.
Oct 2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Operation continuing on 2 devices.
그리고 이것은 md가 xvde(나머지 세 장치 중 하나)에서 섹터를 읽으려고 시도하는 것입니다. 이는 실패하고[불량 섹터, 아마도] md(어레이 성능이 저하되었기 때문에)를 복구할 수 없습니다. 따라서 어레이에서 디스크가 제거되고 이중 디스크 오류가 발생하면 RAID5가 작동하지 않습니다.
왜 예비품으로 라벨이 지정되었는지 잘 모르겠습니다. 이상합니다(하지만 일반적으로 를 보는 것 같으니 /proc/mdstat
mdadm이 라벨을 붙인 방식일 수도 있습니다). 또한 최신 커널은 불량 블록으로 인해 제거되는 것을 훨씬 더 주저한다고 생각했습니다. 하지만 오래된 커널을 실행하고 있는 것은 아닐까요?
이에 대해 무엇을 할 수 있나요?
좋은 백업. 이는 데이터를 유지하기 위한 모든 전략에서 항상 중요한 부분입니다.
어레이에서 정기적으로 불량 블록을 제거하는지 확인하십시오. OS에 이미 이를 위한 크론 작업이 포함되어 있을 수 있습니다. repair
또는 check
에 에코하여 이를 수행합니다 /sys/block/md0/md/sync_action
. "복구"는 발견된 패리티 오류(예: 패리티 비트가 디스크의 데이터와 일치하지 않음)도 복구합니다.
# echo repair > /sys/block/md0/md/sync_action
#
cat /proc/mdstat
, 또는 해당 sysfs 디렉토리의 다양한 파일을 사용하여 진행 상황을 볼 수 있습니다 . (다음에서 다소 최신 문서를 찾을 수 있습니다.Linux Raid Wiki mdstat 기사.
참고: 정확한 버전은 확실하지 않은 이전 커널에서는 검사를 통해 잘못된 블록이 수정되지 않을 수 있습니다.
마지막 옵션 중 하나는 RAID6으로 전환하는 것입니다. 이를 위해서는 다른 디스크가 필요합니다(~할 수 있다4개 또는 3개의 디스크로 구성된 RAID6을 실행하는 경우에는 아마도 원하지 않을 것입니다). 충분히 새로운 커널을 사용하면 가능하면 불량 블록이 즉시 수정됩니다. RAID6은 두 개의 디스크 오류에서도 살아남을 수 있으므로 하나의 디스크에 오류가 발생하더라도 불량 블록에서도 살아남을 수 있습니다. 따라서 둘 다 불량 블록을 매핑하고 재구축을 계속합니다.
답변2
다음과 같이 RAID5 어레이를 생성한다고 상상합니다.
$ mdadm --create /dev/md0 --level=5 --raid-devices=4 \
/dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
정확히 당신이 원하는 것이 아닙니다. 대신 다음과 같이 디스크를 추가해야 합니다.
$ mdadm --create /dev/md0 --level=5 --raid-devices=4 \
/dev/sda1 /dev/sdb1 /dev/sdc1
$ mdadm --add /dev/md0 /dev/sdd1
mdadm
또는 의 옵션을 사용하여 다음과 같이 예비 부품을 추가할 수 있습니다 .
$ mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 \
/dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
목록의 마지막 드라이브가 예비 드라이브가 됩니다.
에서 발췌mdadm 매뉴얼 페이지
-n, --raid-devices=
Specify the number of active devices in the array. This, plus the
number of spare devices (see below) must equal the number of
component-devices (including "missing" devices) that are listed on
the command line for --create. Setting a value of 1 is probably a
mistake and so requires that --force be specified first. A value
of 1 will then be allowed for linear, multipath, RAID0 and RAID1.
It is never allowed for RAID4, RAID5 or RAID6. This number can only
be changed using --grow for RAID1, RAID4, RAID5 and RAID6 arrays, and
only on kernels which provide the necessary support.
-x, --spare-devices=
Specify the number of spare (eXtra) devices in the initial array.
Spares can also be added and removed later. The number of component
devices listed on the command line must equal the number of RAID devices
plus the number of spare devices.