mdadm RAID1: 디스크를 3개로 늘린 다음 2개로 복원할 수 있나요?

mdadm RAID1: 디스크를 3개로 늘린 다음 2개로 복원할 수 있나요?

오래된 디스크 2개가 있는 Linux(CentOS7) 소프트웨어 RAID1 시스템이 있습니다. 그 중 하나는 이미 실패의 조짐을 보이기 시작했습니다. 한 번에 하나씩 새 디스크로 이러한 디스크를 단계적으로 중단하고 싶지만 항상 전체 미러를 활성 상태로 유지합니다.

3방향 미러에 세 번째 새 디스크를 추가한 다음 이전 디스크를 무효화하고 다른 새 디스크로 반복한 다음 두 번째 이전 디스크를 무효화하는 것을 고려하고 있습니다. 이렇게 하면 이벤트 실패 후 공격대가 재구축될 때까지 기다리는 대신 항상 미러를 사용할 수 있습니다.

이는 num-devices=3에서 작동하고 커지는 것 같지만 작업이 끝나면 어떻게 장치 두 개로 다시 "축소"합니까? 내가하려는 일에 대한 참조를 찾을 수없는 것 같습니다.

답변1

다른 사람들이 지적했듯이배열 축소명령을 실행하여 mdadm --grow. (이 프로세스의 전체 목적이 손실 가능성을 줄이는 것인 경우에도 데이터를 백업했는지 확인하는 것을 잊지 마십시오. 사람의 실수는 항상 발생합니다.)

루핑 장치는 프로그램을 테스트하고 개선하는 편리한 방법을 제공합니다. 다음은 완전한 예입니다.

블록 장치 4개와 그 중 2개로 구성된 RAID1 어레이를 생성하고 포맷하고 마운트합니다.

$ fallocate -l 521MiB avolume1
$ fallocate -l 521MiB avolume2
$ fallocate -l 521MiB avolume3
$ fallocate -l 521MiB avolume4
$ sudo losetup -f avolume1
$ sudo losetup -f avolume2
$ sudo losetup -f avolume3
$ sudo losetup -f avolume4
$ sudo mdadm --create --run -n 2 -l 1 /dev/md17 /dev/loop0 /dev/loop1
mdadm: Note: this array has metadata at the start and
...
mdadm: array /dev/md17 started.
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop1[1] loop0[0]
      532480 blocks super 1.2 [2/2] [UU]
$ sudo mkfs.ext4 /dev/md17
mke2fs 1.46.2 (28-Feb-2021)
...
Writing superblocks and filesystem accounting information: done
$ sudo mount /dev/md17 /mnt

배열을 늘리고 세 번째 블록 장치를 추가합니다.

$ sudo mdadm --grow /dev/md17 -n 3 --add /dev/loop2
mdadm: added /dev/loop2
raid_disks for /dev/md17 set to 3
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop2[2] loop1[1] loop0[0]
      532480 blocks super 1.2 [3/3] [UUU]

실패하고 어레이에서 초기 블록 장치 중 하나를 제거합니다.

$ sudo mdadm /dev/md17 --fail /dev/loop0
mdadm: set /dev/loop0 faulty in /dev/md17
$ sudo mdadm /dev/md17 --remove /dev/loop0
mdadm: hot removed /dev/loop0 from /dev/md17
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop2[2] loop1[1]
      532480 blocks super 1.2 [3/2] [_UU]

네 번째 블록 장치를 어레이에 추가합니다.

$ sudo mdadm /dev/md17 --add /dev/loop3
mdadm: added /dev/loop3
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop3[3] loop2[2] loop1[1]
      532480 blocks super 1.2 [3/3] [UUU]

어레이에서 두 번째 초기 블록 장치를 제거합니다.

$ sudo mdadm /dev/md17 --fail /dev/loop1
mdadm: set /dev/loop1 faulty in /dev/md17
$ sudo mdadm /dev/md17 --remove /dev/loop1
mdadm: hot removed /dev/loop1 from /dev/md17
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop3[3] loop2[2]
      532480 blocks super 1.2 [3/2] [U_U]

마지막으로 배열을 확장(축소)합니다.

$ sudo mdadm --grow -n 2 /dev/md17
raid_disks for /dev/md17 set to 2
$ cat /proc/mdstat
Personalities : [raid1] [raid10]
md17 : active raid1 loop3[3] loop2[2]
      532480 blocks super 1.2 [2/2] [UU]

답변2

SMART가 제안한 대로 RAID10 구성에서 "죽어가는" 드라이브가 있습니다. 저는 새 드라이브를 추가하기 전에 어레이 성능 저하를 방지하기 위해 유사한 솔루션을 찾고 있었습니다. 나는 mdadm --replace내가 원하는 것을 사용하고 수행했으며 새 드라이브를 동기화한 다음 곧 없어질 드라이브를 결함으로 설정했습니다. 교체 명령을 실행하기 전에 새 드라이브를 예비 드라이브로 추가해야 합니다.

$> mdadm /dev/md0 --add /dev/new
$> mdadm /dev/md0 --replace /dev/old

참고: 어레이가 성능 저하 모드에 있는 동안 /dev/new를 추가하면 예비로 추가되지 않지만 어레이 재구축이 시작됩니다.

RAID10에 대한 참고 사항: mdadm 소프트웨어 raid10에는 홀수 개의 디스크가 존재할 수 있으므로 raid10을 추가하고 확장해도 레이아웃이 변경되지 않습니다(예: n2 --> n3(3방향 미러)).

답변3

mdadm /dev/<md> --fail <real_dev>    # first fail the disk
mdadm /dev/<md> --remove <real_dev>  # then remove it

관련 정보