Linux 소프트웨어 RAID 1을 RAID 10으로 확장하는 가장 좋은 방법


22

mdadm 배열을 레벨 1에서 레벨 10으로 확장하는 것을 지원하지 않는 것 같습니다.

RAID 1에 2 개의 디스크가 있습니다. 2 개의 새 디스크를 추가하고 어레이를 4 개의 디스크 RAID 10 어레이로 변환하려고합니다.

나의 현재 전략 :

  1. 백업을 잘하십시오.
  2. 2 개의 누락 된 디스크로 성능이 저하 된 4 디스크 RAID 10 어레이를 작성하십시오.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove RAID 1 어레이에서 하나의 디스크.
  5. 사용 가능한 디스크를 RAID 10 어레이에 추가하고 재 동기화가 완료 될 때까지 기다리십시오.
  6. RAID 1 배열을 삭제하고 마지막 디스크를 RAID 10 배열에 추가하십시오.

문제는 5 단계에서 중복성이 부족하다는 것입니다.

더 좋은 방법이 있습니까?


5
0 단계를 잊지 마십시오. 모든 것을 제대로 백업하십시오.
Anthony Lewis

당신의 발걸음이 정확하다고 생각합니다. 한 세트에서 다른 세트로 데이터를 복사하는 동안 중복성이 손실됩니다.
케빈 Kuphal

성능이 저하 된 4disk RAID10을 작성할 수 있습니까?
pauska

1
예, "/ dev / hda missing / dev / hdb missing"을 사용하십시오. 그렇지 않으면 전체 쌍을 잃어 버리면 모두 분리됩니다. 이 질문에 대한 "허용 된 답변"은 우연히 완전히 잘못되어 작동하지 않습니다.
womble

또한이 작업을 수행하는 좋은 방법을 찾고 있는데 질문에 설명 된 방법이 지금까지 내가 찾은 최고라고 생각합니다. Mark Turner의 답변은 4 개의 장치로 재구성 할 수없는 2 개의 장치 배열을 생성하므로 도움이되지 않습니다 (다른 2 개는 예비 장치로만 추가 할 수 있음). 그리고 Suresh Kumar의 답변은 질문에서 설명한 것과 동일하지만 정확하게 작동하지는 않습니다. 누락 된 장치는 3과 4가 아닌 2와 4가되어야합니다. 문제의 단계에 대해 : 5 단계에는 전체 중복성이 있고 6 단계에는 절반의 데이터에 대한 중복성이 있다고 생각합니다. 나는 실제로 단계 renumbere했다 참조
aditsu

답변:


8

linux softraid를 사용하면 디스크가 두 개인 RAID 10 어레이를 만들 수 있습니다.

아래에 사용 된 장치 이름 :

  • md0 유형 / 레벨 RAID1의 이전 배열입니다.
  • md1 유형 / 레벨 RAID10의 새로운 어레이입니다.
  • sda1하고 sdb2있는 새로운 (데이터 없음), 빈 파티션.
  • sda2sdc1(중요 데이터) 된 파티션입니다.

사용 사례에 맞게 이름을 바꾸십시오. 예 lsblk를 사용 하여 현재 레이아웃을 봅니다.

0) 백업, 백업, 백업, 백업 oh 및 BACKUP

1) 새 배열을 만듭니다 (4 개의 장치 : 2 개의 기존 장치, 2 개의없는 장치).

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

이 예제에서 레이아웃 sda1에는 누락 된 상대방 sdb2이 있고 다른 누락 된 상대방이 있습니다. md1이 시점 의 데이터 는 안전하지 않습니다 (실패한 멤버를 추가 할 때까지 효과적으로 RAID0 임).

생성 된 배열의 레이아웃 및 기타 세부 사항을 보려면 다음을 사용하십시오.

mdadm -D /dev/md1

노트! 배열의 레이아웃을 저장해야합니다.

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2) 포맷 및 마운트. 는 /dev/md1즉시 사용할 수 있어야하지만, 필요 포맷 한 후 장착 할 수 있습니다.

3) 파일을 복사하십시오. 예를 들어 rsync를 사용하여 이전 RAID 1에서 새 RAID 10으로 데이터를 복사합니다. (이는 예제 명령 일뿐입니다. rsync에 대한 매뉴얼 페이지를 읽으십시오)

rsync -arHx / /where/ever/you/mounted/the/RAID10

4) 이전 RAID1 (md0)의 첫 번째 부분을 실패하고 새 RAID10 (md1)에 추가하십시오.

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2

노트! 에서 데이터를 삭제합니다 sda2. 는 md0여전히 사용할 수 있어야하지만 경우에만 다른 공격 대원이 완벽하게 작동했다.

또한에 동기화 / 복구 프로세스가 시작됩니다 md1. 상태를 확인하려면 아래 명령 중 하나를 사용하십시오.

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

복구가 완료 될 까지 기다리십시오 .

5) 새 어레이에 GRUB을 설치합니다 (부팅한다고 가정). 일부 Linux 복구 / 부팅 CD가 가장 효과적입니다.

6) 새 어레이로 부팅합니다. 제대로 작동 한 경우 기존 어레이를 폐기하고 나머지 디스크를 새 어레이에 추가하십시오.

반품 불가

이 시점에서 이전 md0 배열의 마지막 멤버에서 데이터를 삭제합니다. 모든 것이 작동하는지 절대적으로 확인하십시오.

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1

그리고 다시- 복구 가 완료 될 까지 기다리십시오md1 .

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7) mdadm 구성 업데이트

업데이트해야합니다 /etc/mdadm/mdadm.conf(md0 제거).

그리고 설정을 initramfs에 저장하십시오 (재부팅 후 사용 가능)

update-initramfs -u

1
네 개의 디스크가 어디로 들어 옵니까?
womble

뭐라고? 디스크 2 개로 어레이를 생성하고, 데이터를 복사하고, 하나의 디스크를 제거하여 RAID 1에 실패한 다음 해당 디스크를 RAID10에 추가 한 다음 RAID10으로 부팅하여 RAID1로 부팅 한 다음 RAID1을 파괴하고 마지막 디스크를
Mark Turner

4
내 의견 후에 답변을 수정했습니다. 또한이 절차는 예비 디스크가 거의없는 2 디스크 RAID-10 (4 디스크 RAID-10)을 제공합니다. RAID-10 볼륨도 재구성 할 수 없습니다.
womble

2
제공 한대로 명령을 실행했으며 / proc / mdstat에 표시된 것처럼 두 개의 스페어가있는 두 개의 디스크 RAID-10으로 끝납니다. 이것은 mdadm v2.6.7.2가있는 커널 2.6.30에 있습니다.
울다

3
"mdadm : raid10 어레이 / dev / md1은 재구성 할 수 없습니다." mdadm 맨 페이지에도 언급되어 있습니다.
womble

9

Mark Turner와 동일한 절차를 따르지만 RAID 어레이를 만들 때 2 개의 누락 된 디스크를 언급하십시오.

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

그런 다음 다른 단계로 진행하십시오.

요컨대, 총 4 개의 디스크 (중 ​​2 개가 누락 됨)로 RAID10을 생성 한 후 재 동기화하고 그 후 다른 2 개의 디스크를 추가하십시오.


6

2 개의 2TB 디스크 mdadm RAID 1의 LVM에서 4 개의 디스크 RAID 10 (2 개의 원본 + 2 개의 새로운 디스크)의 LVM으로 이동했습니다.

@aditsu가 언급했듯이 드라이브 순서는 배열을 만들 때 중요합니다.

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

위의 코드는 2 개의 누락 된 디스크가있는 사용 가능한 배열을 제공합니다 (전체 디스크를 사용하지 않는 경우 파티션 번호 추가). 세 번째 디스크가 추가되면 동기화가 시작됩니다. 세 번째 동기화가 완료되기 전에 네 번째 디스크를 추가했습니다. 세 번째 디스크가 완료되고 동기화가 시작될 때까지 예비 디스크로 표시되었습니다.

내 상황에 대한 단계 :

  1. 백업을 잘하십시오.

  2. 2 개의 누락 된 디스크로 성능이 저하 된 4 개의 디스크 RAID 10 어레이를 생성합니다 (손실 된 디스크 # 2 및 4라고 함).

  3. 아내에게 관심있는 파일을 변경하거나 추가하지 말라고 지시하십시오.

  4. RAID 1 어레이 (디스크 4)에서 하나의 디스크를 고장 및 제거하십시오.

  5. 디스크 1을 비워두고 물리적 범위를 RAID 1 어레이에서 RAID 10 어레이로 이동하십시오.

  6. 활성 RAID 1 어레이를 종료하고 해당 빈 디스크 (디스크 2)를 RAID 10 어레이에 추가 한 후 재 동기화가 완료 될 때까지 기다리십시오.

  7. RAID 1 (디스크 4)에서 제거 된 첫 번째 디스크를 RAID 10 어레이에 추가하십시오.

  8. 아내에게 계속 나아갑니다.

7 단계 에서 어레이 1을 종료하지 않고 드라이브 1, 2 또는 OR 4가 실패합니다 (디스크 4를 다시 동기화하는 동안). 드라이브 3이 실패하면 어레이의 데이터가 토스트됩니다.


+1, 특히 3 단계;)

-1, 불분명 한 지시, 아내 없음, 데이터 손실
ZAB

1

나는 지금 raid1을 raid10으로 옮겼고이 페이지가 도움이되었지만 위의 답변에 누락 된 것이 있습니다. 특히 내 목표는 ext4 출생 시간을 유지하는 것이 었습니다.

설정은 다음과 같습니다

  • 각 유형 msdos 및 md0 (ext4 파티션 포함) 및 mbr (msdos 포함)의 raid1 디스크 2 개
  • 새로운 기본 디스크가되는 새로운 디스크 2 개 (모두 동일한 크기)
  • 4 디스크를 md127 ext4 습격하지만 크기로 인해 mbr에서 gpt 로 전환해야했습니다.
  • 내 홈 디스크이므로 bootmanager 설정이 필요하지 않습니다.
  • 내 일상 우분투 사용 (따라서 : 외부 복구 디스크를 사용하지 않음)
  • gparted, dd 및 mdadm 사용

이전에 언급 한 바와 같이 : 제로 단계는 백업이어야하며 프로세스에서 항상 잘못된 데이터가 발생할 수 있습니다.

  1. 지원

  2. 새로운 공격대 설치

    1. 새로운 공격대를 만들다

      mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
      

      (나는 레이아웃이 중요하다는 것을 알았습니다. 2와 4는 기본 '가까운'습격의 복제본 인 것 같습니다)

    2. md127에서 gpted 설정 gpt를 사용하고 이전 파티션 크기 이상의 새 파티션 (ext4)을 추가하는 RAID의 파티션 설정
  3. 이주하다

    1. 이제 데이터를 가져 오는 중 ... 나는 처음으로 rsync를 사용하려고했지만 출생 시간을 유지하지 못했습니다 ... dd를 사용 하여 오래된 습격에서 새로운 습격으로 복제 하십시오.

      dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
      

      ITR WAIT FOR IT
      는 USR1을 해당 프로세스로 전송하여 확인할 수 있습니다

      kill -s USR1 <pid>
      

    2. gparted raid 수정은 훌륭한 도구입니다. 파티션을 확인 및 수정하고 몇 번의 마우스 클릭만으로 해당 디스크의 전체 크기로 크기를 조정하도록 지시합니다.)

    3. 새 uuid를 해당 파티션으로 설정하고 fstab을 업데이트하십시오 (uuid 변경).

    4. conf에 당신의 공격대를 저장하십시오

      mdadm --examine --scan  >> /etc/mdadm/mdadm.conf
      

      그리고 오래된 것을 제거하십시오

      vim /etc/mdadm/mdadm.conf 
      
    5. 구조대가 아닌 경우 재부팅
  4. 오래된 것을 파괴

    1. 첫 번째 실패하고 새로운 습격에 추가

      mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
      

      그런 다음 해당 장치에서 gpt를 만들고 빈 파티션을 새로 설정하십시오.

      mdadm /dev/md127 --add /dev/sdc1
      


      확인할 수있는 IT 대기

      cat /proc/mdstat
      
    2. 두 번째 중지

      mdadm --stop /dev/md0 
      

      마지막 장치에서 gpt를 만들고 빈 파티션을 다시 설정하십시오.

      mdadm /dev/md127 --add /dev/sdd1
      

      다시 기다립니다


0

나는 LVM으로 그것을했다. 초기 구성 :-sda2, sdb2-맨 위에 raid1 md1을 작성했습니다. sda1 및 sdb1은 / boot 파티션의 두 번째 raid1에 사용되었습니다. -md1은 볼륨 그룹 공간에서 pv이고 일부 lvm이 있습니다.

디스크 sdc 및 sdd를 추가하고 sda / sdb와 같은 파티션을 만들었습니다.

그래서:

  1. md10을 다음과 같이 생성했습니다.

    mdadm --create / dev / md10 --level raid10 --raid-devices = 4 / dev / sdc2 누락 / dev / sdd2

  2. 그것에 vg를 확장하십시오 :

    pvcreate / dev / md10 vgextend 공간 / dev / md10

  3. md1에서 md10으로 볼륨을 이동했습니다.

    pvmove -v / dev / md1 / dev / md10

(완료 대기) 4. 볼륨 그룹을 줄입니다.

vgreduce space /dev/md1
pvremove /dev/md1
  1. 어레이 md1 중지 :

    mdadm -S / dev / md1

  2. 이전 md1에서 md10으로 디스크를 추가하십시오.

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. /etc/mdadm/mdadm.conf에서 업데이트 구성 :

    mdadm -E --scan >> / dev / mdadm / mdadm.conf

(그리고 오래된 md1을 제거하십시오)

kvm에 사용 된 활성 볼륨으로 라이브 시스템에서 수행 된 모든 것;)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.