我有一个磁盘,我想为其创建镜像;我们称这个磁盘为sda
。我刚刚购买了另一个相同大小的磁盘,我们可以将其称为sdb
.sda
并sdb
有一个分区,分别称为sda1
和sdb1
。
创建突袭时,我不想擦除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)