Jos*_*ffy 4 software-raid mdadm raid5
我目前有 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
和/dev/sdc2
是我现有的驱动器(有数据),/dev/sdd2
是一种新的3TB驱动器与它没有任何数据。这会不会使我失去对数据/dev/sdb2
和/dev/sdc2
?
我的另一个想法是以某种方式创建一个没有备用设备的 2x3TB RAID 5 阵列,其中阵列中的一个驱动器是空的,另一个有数据。然后我可以将我的文件从现有驱动器复制到新的 (6TB) 阵列,擦除现在的冗余驱动器,然后将其添加为阵列的备用驱动器。虽然我怀疑这行得通吗?
如果上述选项都不起作用,是否有另一种方法来创建 RAID 5 阵列,其中 2 个驱动器已经有数据,1 个驱动器为空?如果我一次添加 2 个新的空驱动器,那会打开新的选项吗?
我使用的是mdadm
3.3 版的Ubuntu Server 16.04.2 。
您有两个 3TB 磁盘存储 6TB 数据。您想安装一个新的 3TB 磁盘。
这将允许您将三个 3TB 磁盘转换为存储 6TB 数据的 RAID5 阵列。然而,这个过程相当繁琐,并且在沿途某处丢失数据的机会相当大。
达到要求的步骤
让我们将磁盘声明为sda
(包含数据)、sdb
(包含数据)、sdc
(新)。
sdc
。它应该有两个成员,其中一个缺失sdb
到新的 RAID1 阵列sdb
到 RAID1 阵列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
Run Code Online (Sandbox Code Playgroud)
在接触磁盘上的实时数据之前,您确实应该确保您理解了工作示例。不用说,这是您的责任,我真的建议您在更改实时系统之前进行备份。
归档时间: |
|
查看次数: |
4630 次 |
最近记录: |