我有一个要为其创建镜像的磁盘;我们称之为磁盘sda
。我刚买了另一个同样大小的磁盘,我们可以称之为sdb
. sda
并且sdb
有一个称为一个分区sda1
并sdb1
分别。
创建突袭时,我不想sda
清理干净并重新开始,我只是希望它以sdb
. 我的思路是这样做:
mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1
Run Code Online (Sandbox Code Playgroud)
...创建没有sdb
磁盘的阵列,然后运行类似的东西(我正在大声思考以下命令,因为我不确定如何实现这一步)
mdadm /dev/md0 --add /dev/sdb1
Run Code Online (Sandbox Code Playgroud)
sdb1
假设Note 的格式类似于sda1
这可能吗?
Sta*_*mer 29
标题中问题的简单答案是“是”。但您真正想做的是下一步,即对现有数据进行镜像。
可以转换现有磁盘,但如前所述,由于元数据位置,这是有风险的。最好用新磁盘创建一个空的(损坏的)镜像并将现有数据复制到它上面。然后,如果它不起作用,您只需启动回未镜像的原始版本。
首先,初始化/dev/sdb1
为/dev/md0
缺少驱动器的新驱动器并初始化文件系统(我假设是 ext3,但选择权在您手中)
mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
mkfs -text3 /dev/md0
Run Code Online (Sandbox Code Playgroud)
现在,/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
Run Code Online (Sandbox Code Playgroud)
编辑/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
Run Code Online (Sandbox Code Playgroud)
由于重建将覆盖/dev/sda1
,因此您使用的元数据版本无关紧要。与往常一样进行重大更改时,请进行完整备份(如果可能)或至少确保无法重新创建的任何内容都是安全的。
您需要重新生成引导配置以/dev/md0
用作 root(如果/dev/sda1
是 root),并且可能需要重新生成mdadm.conf
以确保/dev/md0
始终启动。
小智 6
当然,您可以创建它,指定第二个磁盘当前为missing
:
mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1
Run Code Online (Sandbox Code Playgroud)
你可以这么做。您需要小心一点,但是如果您非常小心,不要输错任何内容,并且不会在设置中留下任何陷阱,那么这并不危险\xc2\xb9。
\n\n我强烈建议不要在实时系统上进行任何操作。在某些情况下这是可能的,但需要额外小心。从 liveCD/liveUSB(例如Parted或SystemRescueCD)启动。
\n\n首先,您需要稍微缩小体积,为 mdraid 元数据(超级块)腾出空间。元数据格式有多种,您必须使用一种将元数据放在磁盘末尾的格式。(在某些设置中,您可能有足够的空间将超级块放在开头,但这更复杂且更容易出现风险,因此我将对此进行介绍。)
\n\n您必须确保块设备的最后 128kB 未被使用,以便为超级块腾出空间。因此,您需要缩小/dev/sda1
. 如果这是 ext2/ext3/ext4 文件系统,请使用 获取当前文件系统大小tune2fs /dev/sda1
,然后运行resize2fs /dev/sda1 NNN
,其中 NNN 是该大小减去 128kB。您可以使用Parted来完成此操作。如果需要缩小 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\n
Run Code Online (Sandbox Code Playgroud)\n\n您现在可以激活阵列并添加其他组件。
\n\nmdadm --add /dev/md0 /dev/sdb1\n
Run Code Online (Sandbox Code Playgroud)\n\n关于引导加载程序的注释:Grub2 理解 Linux RAID-1 并且可以从中引导。诸如 Grub1 等不支持 RAID 的引导加载程序会从镜像卷中透明地读取数据,但如果引导加载程序读取的驱动器出现故障,您的系统将无法启动。如果 RAID 卷位于分区上,请务必在两个驱动器上安装 Grub 的引导扇区。
\n\n\xc2\xb9确保有备份。\xe2\x80\x9c不危险\xe2\x80\x9d意味着\xe2\x80\x9c你可能不需要它们\xe2\x80\x9d,而不是\xe2\x80\x9c赌博你的数据\xe2\x80\x9d。
\n\n重新发布并稍作改编自如何设置磁盘镜像 (RAID-1)
\n