使用 mdadm 和 1 个带有数据的磁盘构建 RAID 5

使用 mdadm 和 1 个带有数据的磁盘构建 RAID 5

我有 3 个完全相同的驱动器(4tb Ironwolf),我想在其中使用 MDADM 进行 raid-5 以实现小程度的数据安全。现在的问题是,1 个驱动器充满了我无法备份的数据。

是的,我知道当构建和驱动器失败时,我的所有数据都会消失,但我仍然想尽最大努力。

为了更容易理解,我们将它们称为 sda1 和 sdb1(它们是空的),以及 sdc1(带有数据)。

mdadm --create --verbose /dev/md0 --level=5 --raid-devices=2 /dev/sda1 /dev/sdb1;
rsync -av --exclude-from=excludefile /dev/sdc1 /dev/md0;    
mkfs.ext4 /dev/sdc1;    
mdadm --add /dev/md0 /dev/sdc1;    
mdadm --grow --raid-devices=3 --spare-devices=1 /dev/md0;

有人可以确认这是正确的方法吗?

答案1

如果您有少量可用磁盘空间,您可以使用环回设备测试这些命令。

创建环回设备a、b、c:

dd if=/dev/zero bs=1M count=50 > diska.img    # Plan for RAID5
dd if=/dev/zero bs=1M count=50 > diskb.img    # Likewise
dd if=/dev/zero bs=1M count=50 > diskc.img    # Original data will be here

la=$(losetup --find --show diska.img); echo $la
lb=$(losetup --find --show diskb.img); echo $lb
lc=$(losetup --find --show diskc.img); echo $lc

创建一些“重要的原始数据”并将其放在第三个磁盘上($lc

mkfs -t ext4 -L data "$lc"
mount "$lc" /mnt
cp -a /usr/share/man/man1 /mnt
umount /mnt

现在尝试根据您的想法创建 RAID5 阵列。在这种情况下,我们有$la$lb作为两个空白磁盘,并且$lc代表重要的第三个磁盘:

mdadm --create --verbose /dev/md0 --level=5 --raid-devices=2 "$la" "$lb"

成功;这创建了一个包含两个成员的 RAID5 阵列。就我个人而言,我会指定三个,其中第三个元素为单词missing,因为这使我的意图更加清晰:

mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 "$la" "$lb" missing

但是,您的下一个命令不太正确。rsync在文件系统之间复制,而不是在设备之间复制,因此首先需要创建新的文件系统并挂载两者:

mkfs -t ext4 -L data /dev/md0
mkdir -p /mnt/src /mnt/dst
mount "$lc" /mnt/src             # Here you could use mount /dev/sdc1 /mnt/src
mount /dev/md0 /mnt/dst
rsync -av --exclude-from=excludefile /mnt/src/ /mnt/dst

你应该rsync --dry-run在它执行之前检查它要做什么。

umount /mnt/src
umount /mnt/dst

此时,您需要绝对确定已成功将数据从原始磁盘复制到新的(降级的)RAID5 阵列,因为我们要将旧磁盘添加到阵列中。

如果您最初只指定了两个设备,则需要扩展阵列以包含第三个:

mdadm --grow /dev/md0 --raid-devices=3 --add "$lc"    # /dev/sd1c when you do this for real

另一方面,如果您接受我的建议并开始使用三个设备(其中一个是missing),您只需要添加设备:

mdadm --manage /dev/md0 --add "$lc"

最后,您可以在文件系统的预期部分中重新挂载 RAID 5 阵列。用于cat /proc/mdstat查看重新同步的进行情况。

仅对于测试台,您需要停止阵列并删除组件

mdadm --stop /dev/md0
losetup -d "$la"
losetup -d "$lb"
losetup -d "$lc"
rm diska.img diskb.img diskc.img

相关内容