2개 드라이브의 데이터 손실 없이 3x3TB RAID 5 어레이를 생성하는 방법은 무엇입니까?

2개 드라이브의 데이터 손실 없이 3x3TB RAID 5 어레이를 생성하는 방법은 무엇입니까?

현재 2개의 3TB 하드 드라이브가 있는데 그 중 하나는 거의 꽉 찼고 다른 하나는 약 200GB의 여유 공간이 있습니다. 3TB 드라이브를 추가로 구입하고 RAID 5 어레이를 설정하고 싶은데 기존 데이터가 손실될까봐 걱정됩니다.

mdadm어레이를 생성하는 데 사용되는 명령은 데이터가 있는 기존 드라이브의 mdadm --create --verbose /dev/md0 --level=5 --raid-devices=2 /dev/sdb2 /dev/sdc2 --spare-devices=1 /dev/sdd2위치 /dev/sdb2및 위치와 데이터가 없는 새 3TB 드라이브라는 것을 알았습니다 . 이로 인해 내 데이터가 손실됩니까 ?/dev/sdc2/dev/sdd2/dev/sdb2/dev/sdc2

제가 가진 또 다른 아이디어는 스페어 없이 2x3TB RAID 5 어레이를 만드는 것이었습니다. 어레이의 한 드라이브는 비어 있고 다른 드라이브에는 데이터가 있었습니다. 그런 다음 기존 드라이브의 파일을 새(6TB) 어레이로 복사하고 중복된 드라이브를 지우고 어레이에 예비 드라이브로 추가할 수 있습니다. 이것이 효과가 있을지 의심스럽기는 하지만요?

위의 옵션 중 어느 것도 작동하지 않는 경우 2개의 드라이브에 이미 데이터가 포함되어 있고 1개의 드라이브가 비어 있는 RAID 5 어레이를 만드는 다른 방법이 있습니까? 한 번에 2개의 새로운 빈 드라이브를 추가하면 새로운 옵션이 표시되나요?

저는 Ubuntu Server 16.04.2 mdadm버전 3.3을 사용하고 있습니다.

답변1

6TB의 데이터를 저장할 수 있는 3TB 디스크 2개가 있습니다. 새로운 3TB 디스크를 설치하려고 합니다.

이를 통해 3TB 디스크 3개를 6TB 데이터를 저장하는 RAID5 어레이로 변환할 수 있습니다. 그러나 프로세스는 매우 지루하며 도중에 데이터가 손실될 가능성이 상당히 높습니다.

요구 사항을 달성하기 위한 단계

sda디스크를 (데이터 포함), sdb(데이터 포함), sdc(새) 로 선언해 보겠습니다 .

  1. 가능하다면 며칠 동안 친구에게 디스크를 빌려야 하더라도 모든 데이터를 백업하세요.
  2. 새 디스크에 RAID1 배열을 만듭니다 sdc. 두 개의 멤버가 있어야 하는데 그 중 하나가 누락되었습니다.
  3. 이 RAID1 어레이에 파일 시스템을 생성합니다.
  4. sdb새로운 RAID1 어레이에 데이터 복사
  5. 데이터를 올바르게 복사했는지 확인하십시오.
  6. sdbRAID1 어레이에 추가
  7. 동기화가 완료될 때까지 기다리세요
  8. 재시작
  9. RAID1 어레이를 RAID5로 확장합니다. 세 개의 구성원이 있어야 하는데 그 중 하나가 누락되었습니다. 이렇게 하려면 추가 디스크에 128K의 임시 공간이 필요합니다. 이렇게 하려면 USB 스틱을 사용해야 할 수도 있습니다. RAM 디스크를 사용하지 마십시오.
  10. sda새로운 RAID5 어레이에 데이터 복사
  11. 데이터를 올바르게 복사했는지 확인하십시오.
  12. sdaRAID5 어레이에 추가
  13. 재시작

실제 사례

다음은 세 개의 파일을 디스크 이미지로 사용하는 작업 예입니다.

# Prepare the demonstration
#
dd if=/dev/zero bs=1M count=100 of=sda.img
dd if=/dev/zero bs=1M count=100 of=sdb.img
( echo n; echo p; echo 1; echo; echo; echo w ) | fdisk sda.img  # One primary partition
( echo n; echo p; echo 1; echo; echo; echo w ) | fdisk sdb.img  # One primary partition
losetup --show --find --partscan sda.img
losetup --show --find --partscan sdb.img

# At this point we have /dev/loop0 representing the first disk sda, with /dev/loop0p1
# equivalent to a disk partition sda1. Also /dev/loop1 representing the second disk.

mkfs -t ext4 -L sda /dev/loop0p1
mkfs -t ext4 -L sdb /dev/loop1p1
mkdir -p /mnt/sda1 /mnt/sdb1
mount /dev/loop0p1 /mnt/sda1
mount /dev/loop1p1 /mnt/sdb1
cp -a /usr/local/man/. /mnt/sda1/u.l.man/
mkdir /mnt/sdb1/u.l.etc
cp -a /usr/local/bin/. /mnt/sdb1/u.l.bin/
df -h | grep mnt
umount /mnt/sda1
umount /mnt/sdb1


# Create the third disk
#
dd if=/dev/zero bs=1M count=100 of=sdc.img
( echo n; echo p; echo 1; echo; echo; echo w ) | fdisk sdc.img  # One primary partition
losetup --show --find --partscan sdc.img


# Create the RAID1 array and its filesystem
#
mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=default /dev/loop2p1 missing
mkfs -t ext4 -L md1 /dev/md1
mkdir -p /mnt/md1

# Now /dev/loop2 is equivalent to third disk sdc, and /dev/loop2p1 representing sdc1


# Copy the data from sdb to md1
#
mount /dev/loop1p1 /mnt/sdb1
mount /dev/md1 /mnt/md1
cp -a /mnt/sdb1/. /mnt/md1/
umount /mnt/sdb1
umount /mnt/md1


# Complete the RAID1 array
#
mdadm --manage /dev/md1 --add /dev/loop1p1


# Grow the RAID1 array to RAID5
#
mdadm --grow /dev/md1 --level=5 --raid-devices=3 --backup-file=/root/workarea.dat --force
e2fsck -f /dev/md1
resize2fs /dev/md1


# Copy the data from sda to md1
#
mount /dev/loop0p1 /mnt/sda1
mount /dev/md1 /mnt/md1
cp -a /mnt/sda1/. /mnt/md1/
umount /mnt/sda1
umount /mnt/md1


# Add the remaning disk to the RAID5 array
#
mdadm --manage /dev/md1 --add /dev/loop0p1


# All done
#
mdadm --stop /dev/md1
losetup -d /dev/loop0
losetup -d /dev/loop1
losetup -d /dev/loop2
rm sda.img sdb.img sdc.img

디스크의 라이브 데이터를 다루기 전에 실제 예제를 이해했는지 확인해야 합니다. 말할 필요도 없이 이는 귀하의 책임이므로 라이브 시스템을 변경하기 전에 백업을 수행하는 것이 좋습니다.

관련 정보