현재 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
(새) 로 선언해 보겠습니다 .
- 가능하다면 며칠 동안 친구에게 디스크를 빌려야 하더라도 모든 데이터를 백업하세요.
- 새 디스크에 RAID1 배열을 만듭니다
sdc
. 두 개의 멤버가 있어야 하는데 그 중 하나가 누락되었습니다. - 이 RAID1 어레이에 파일 시스템을 생성합니다.
sdb
새로운 RAID1 어레이에 데이터 복사- 데이터를 올바르게 복사했는지 확인하십시오.
sdb
RAID1 어레이에 추가- 동기화가 완료될 때까지 기다리세요
- 재시작
- RAID1 어레이를 RAID5로 확장합니다. 세 개의 구성원이 있어야 하는데 그 중 하나가 누락되었습니다. 이렇게 하려면 추가 디스크에 128K의 임시 공간이 필요합니다. 이렇게 하려면 USB 스틱을 사용해야 할 수도 있습니다. RAM 디스크를 사용하지 마십시오.
sda
새로운 RAID5 어레이에 데이터 복사- 데이터를 올바르게 복사했는지 확인하십시오.
sda
RAID5 어레이에 추가- 재시작
실제 사례
다음은 세 개의 파일을 디스크 이미지로 사용하는 작업 예입니다.
# 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
디스크의 라이브 데이터를 다루기 전에 실제 예제를 이해했는지 확인해야 합니다. 말할 필요도 없이 이는 귀하의 책임이므로 라이브 시스템을 변경하기 전에 백업을 수행하는 것이 좋습니다.