我可以用一台设备创建软件 RAID 1

我可以用一台设备创建软件 RAID 1

我有一个磁盘,我想为其创建镜像;我们称这个磁盘为sda。我刚刚购买了另一个相同大小的磁盘,我们可以将其称为sdb.sdasdb有一个分区,分别称为sda1sdb1

创建突袭时,我不想擦除sda干净并重新开始,我只是希望它开始镜像sdb.我的思路是:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1

...创建没有sdb磁盘的阵列,然后运行类似的命令(我正在大声思考以下命令,因为我不确定如何实现此步骤)

mdadm /dev/md0 --add /dev/sdb1

假设注释sdb1的格式类似于sda1

这可能吗?

答案1

标题中问题的简单答案是“是”。但您真正想做的是下一步,即镜像现有数据。

可以转换现有磁盘,但如上所述,由于元数据位置,这是有风险的。最好使用新磁盘创建一个空(损坏的)镜像并将现有数据复制到其上。然后,如果它不起作用,您只需启动回未镜像的原始状态即可。

首先,初始化/dev/sdb1为缺少驱动器的新驱动器/dev/md0并初始化文件系统(我假设是 ext3,但选择权在你)

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
mkfs -text3 /dev/md0

现在,/dev/sda1很可能是您的根文件系统 ( /),因此为了安全起见,您应该从 Live CD、救援磁盘或其他可以访问这两者的可启动系统执行下一步/dev/sda1/dev/md0尽管我已经通过切换到单用户模式成功完成了此操作。

将文件系统的全部内容复制/dev/sda1/dev/md0.例如:

mount /dev/sda1 /mnt/a       # only do this if /dev/sda1 isn't mounted as root
mount /dev/md0 /mnt/b
cd /mnt/a                    # or "cd /" if it's the root filesystem
cp -dpRxv . /mnt/b

编辑/etc/fstab或以其他方式确保在下次启动时/dev/md0安装而不是/dev/sda1.您的系统可能设置为从其启动/dev/sda1,并且启动参数可能将其指定为根设备,因此在重新启动时,您应该手动更改此设置,以便根设备/dev/md0(假设/dev/sda1是根设备)。重新引导后,检查现在/dev/md0是否已安装 ( df) 以及它是否作为降级镜像运行 ( cat /proc/mdstat)。添加/dev/sda1到数组:

mdadm /dev/md0 --add /dev/sda1

由于重建将覆盖/dev/sda1,因此您使用哪个元数据版本无关紧要。与往常一样,在进行重大更改时,请进行完整备份(如果可能)或至少确保无法重新创建的任何内容都是安全的。

您将需要重新生成引导配置以/dev/md0作为 root 使用(如果/dev/sda1是 root),并且可能需要重新生成mdadm.conf以确保/dev/md0始终启动。

答案2

当然,您可以创建它并指定第二个磁盘当前为missing

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1

答案3

你可以这么做。您需要小心一点,但如果您非常小心,不要输错任何内容,并且不会在设置中留下任何陷阱,那么这并不危险。

我强烈建议不要在实时系统上进行任何操作。在某些情况下这是可能的,但需要额外小心。从 liveCD/liveUSB 启动,例如分手了或者系统救援光盘

首先,您需要稍微缩小体积,为 mdraid 元数据(超级块)腾出空间。有几种元数据格式,您必须使用将元数据放在磁盘末尾的元数据。 (在某些设置中,您可能有足够的空间将超级块放在开头,但这更复杂且更容易出现风险,所以我会对此进行讨论。)

您必须确保块设备的最后 128kB 未被使用,以便为超级块腾出空间。因此,您需要缩小/dev/sda1.如果这是 ext2/ext3/ext4 文件系统,请使用 获取当前文件系统大小tune2fs /dev/sda1,然后运行resize2fs /dev/sda1 NNN,其中 NNN 是该大小减去 128kB。你可以这样做分手了反而。如果需要缩小 extN 文件系统,则需要先卸载它; btrfs 文件系统可以实时收缩。

确保块设备的最后 128kB 空闲后,调用mdadm --create创建 RAID-1 卷。除了超级块之外,这不会触及卷的任何部分。最初,该卷将只有一个组件:所有其他组件都设置为失败。您必须通过--level=1(或等效的-n 1)(此方法仅适用于 RAID-1)和--metadata=0.9--metadata=1.0(默认超级块格式 1.2 将超级块放在设备的开头附近,这可能会覆盖数据)。--raid-devices( )的参数-n是 RAID 卷中的组件数量(包括缺失的组件)。

mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda1 missing

您现在可以激活阵列并添加其他组件。

mdadm --add /dev/md0 /dev/sdb1

关于引导加载程序的注释:Grub2 理解 Linux RAID-1 并且可以从中引导。诸如 Grub1 等不支持 RAID 的引导加载程序会从镜像卷透明地读取数据,但如果引导加载程序读取的驱动器出现故障,您的系统将无法启动。如果 RAID 卷位于分区上,请务必在两个驱动器上安装 Grub 的引导扇区。

一定要有备份。 “不危险”意味着“你可能不需要它们”,而不是“拿你的数据做赌注”。

重新发布并稍作改编如何设置磁盘镜像 (RAID-1)

相关内容