디스크 4개로 구성된 RAID 5가 디스크 1개에 장애가 발생하면 작동하지 않습니까?

디스크 4개로 구성된 RAID 5가 디스크 1개에 장애가 발생하면 작동하지 않습니까?

에 대한 질문을 찾았습니다.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/mdstatmdadm이 라벨을 붙인 방식일 수도 있습니다). 또한 최신 커널은 불량 블록으로 인해 제거되는 것을 훨씬 더 주저한다고 생각했습니다. 하지만 오래된 커널을 실행하고 있는 것은 아닐까요?

이에 대해 무엇을 할 수 있나요?

좋은 백업. 이는 데이터를 유지하기 위한 모든 전략에서 항상 중요한 부분입니다.

어레이에서 정기적으로 불량 블록을 제거하는지 확인하십시오. 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.

관련 정보