아직 오류가 발생하지 않은 Linux RAID5 어레이의 디스크를 안전하게 교체하는 방법은 무엇입니까?

아직 오류가 발생하지 않은 Linux RAID5 어레이의 디스크를 안전하게 교체하는 방법은 무엇입니까?

4개의 디스크에 소프트웨어 RAID5 어레이(Linux md)가 있습니다.

어레이를 저하된 상태로 두지 않고 디스크 중 하나를 새 디스크로 교체하고 싶습니다., 가능하다면 온라인으로. 이것이 어떻게 가능한지?

다음과 같은 작업을 원하지 않기 때문에 이는 중요합니다.

  • 다른 디스크에 스트레스를 가할 위험이 있으므로 재구축 중에 하나가 충돌할 수 있습니다.
  • "패리티 없음 상황"에 처할 위험이 있으므로 한동안 안전망이 없습니다.

온라인에서 이 작업을 수행하는 것은 너무 많은 것을 요구하는 것 같아서 dd이전 디스크의 데이터를 새 디스크로 원시 복사(raw copy() 해야 합니다.오프라인그럼 교체를 해보겠지만 이론적으로는 가능할 것 같은데...

일부 배경: 이 디스크는 5.5년 이상 거의 지속적으로 회전해 왔습니다. 현재로서는 여전히 완벽하게 작동하며 모두 (긴) SMART 자체 테스트를 통과했습니다. 그러나 4개의 디스크 중 하나가 오래 지속되지 않을 것이라고 생각하는 이유가 있습니다(예측 오류 가정).

답변1

mdadm 3.3 이상 사용

~부터mdadm3.3(2013년 9월 3일 발행)3.2+ 커널, 다음과 같이 할 수 있습니다:

# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1

sdd1교체하려는 장치이고, sdc1이 작업에 선호되는 장치이며, 어레이에서 예비 장치로 선언해야 합니다.

--with옵션은 선택 사항이며 지정하지 않은 경우 사용 가능한 대체가 사용됩니다.

이전 mdadm 버전

참고: 또한3.2+ 커널.

먼저 새 드라이브를 예비 드라이브로 추가합니다( 및 디스크 장치를 각각 RAID 및 디스크 장치로 교체 md0) sdc1.

# mdadm /dev/md0 --add /dev/sdc1

sdd1그런 다음 다음과 같이( 실패한 장치로) 복사-교체 작업을 시작합니다 .

# echo want_replacement > /sys/block/md0/md/dev-sdd1/state 

결과

시스템은 에서 으로 읽을 수 있는 모든 블록을 복사 sdd1합니다 sdc1. 읽을 수 없는 블록이 발견되면 패리티를 기반으로 블록을 다시 빌드합니다. 작업이 완료되면 이전 예비 드라이브(여기서: sdc1)가 활성 드라이브가 되고 오류가 발생한 드라이브는 오류(F)로 표시되므로 제거할 수 있습니다.

노트:신용은 다음과 같습니다프로스트슈츠그리고안스가 에스테르만원래 솔루션을 찾은 사람(참조질문이 중복되었습니다.).

오래된 커널

다른 답변은 다음을 제안합니다.

  • 남자~의방법:어레이를 RAID6으로 변환하고 디스크를 "교체"한 다음 다시 RAID5로 전환합니다.
  • 하우크라그~의방법: RAID5 어레이에서 디스크를 제거하고 새 디스크의 RAID1(미러)의 일부로 만든 다음 해당 미러링된 드라이브를 RAID5 어레이(이론)에 다시 추가하기만 하면 됩니다.

답변2

이게 효과가 있을 수도 있어

  1. 온라인
  2. 교체하려는 디스크 이외의 다른 디스크에 압력을 가하지 마십시오.

그러나 다음 방법이 효과가 있을지라도 "책에서" 그러한 조언을 찾을 수 없을 것입니다...

아이디어:

  1. 어레이에서 이전 디스크를 제거합니다(일시적으로).mdadm --manage /dev/raid5 --fail /dev/OLD
  2. 기존 디스크와 새 디스크에서 새 md 장치(RAID-1)를 만듭니다.mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. RAID-1을 다시 어레이에 넣습니다(/dev/OLD 대신):mdadm --manage /dev/raid5 --re-add /dev/md42

무엇~해야 한다:-) 발생하다:

  1. RAID-5는 /dev/md42를 동기화합니다. 시간이 오래 걸리지 않습니다.
  2. RAID-5는 다시 잘 작동하지만 속도는 느려집니다.
  3. /dev/NEW는 /dev/OLD와 동기화됩니다.

동기화 진행 상황을 관찰합니다( cat /proc/mdstat또는 mdadm --monitor). 동기화가 완료되면 RAID-5에서 RAID-1을 제거하고 RAID-1을 중지한 다음 /dev/NEW를 RAID-5에 다시 추가합니다. 모든 것이 정상이면 문제를 방지하기 위해 /dev/OLD의 mdraid 슈퍼 블록을 덮어씁니다.mdadm --zero-superblock

경고하다:빠른 RAID-5 동기화는 비트맵을 사용하는 경우에만 작동할 수 있습니다. 없는 경우 먼저 가상 RAID-5(비트맵 없음)로 테스트하는 것이 가장 좋습니다. 아니면 하나를 추가하세요. 최소한 외부 항목을 추가하는 것이 가능해야 합니다. 그렇지 않으면 장치를 변경하기 전에 RAID-5를 중지해야 할 수도 있습니다. 그러나 RAID-5에서 부팅하는 경우에는 조금 더 복잡해집니다.

답변3

RAID-6(패리티 디스크 1개가 아닌 2개)을 실행하고 mdadmin 3.1.x 이상을 실행해도 괜찮다면 다음을 수행하세요.RAID-5 어레이를 RAID-6으로 변환추가 패리티 디스크를 추가합니다. 그러나 이로 인해 재구축 프로세스 중에 어레이가 스트레스를 받게 됩니다. 쓰기 중에 더 많은 패리티 디스크를 업데이트해야 하므로 성능에 어느 정도 영향을 미칩니다.

그러나 성공적으로 완료되면 실패한 디스크를 그대로 둘 수 있으며 결국 실패하더라도 여전히 어레이의 패리티 보호를 받을 수 있습니다. RAID6으로 유지하기를 기다리지 않으면 어레이를 RAID6에서 다시 RAID5로 변환할 수 있다고 생각합니다.

어레이를 RAID-5로 유지하고 어레이를 성능 저하 모드로 전환하지 않고 디스크를 교체하는 온라인 방법을 모릅니다. 교체 실패로 표시해야 한다고 생각하기 때문입니다. 귀하의 dd 사본 아이디어가 이를 수행하는 방법일 수 있습니다.

관련 정보