磁盘在镜像 RAID 设置中是否可以互换?

Ced*_*tin 5 raid hard-disk mirror raid1

通常认为镜像 RAID(如 RAID 1)中的磁盘是一个精确的镜像副本。

那么我可以关闭机器并简单地交换两个硬盘电缆吗?

如果两个磁盘中的一个崩溃并且永远死了,我是否可以简单地关闭机器,放置第三个(新)硬盘而不是死的硬盘,从一张实时 CD 启动并“dd”磁盘的整个内容对新磁盘仍然很好,然后在 RAID 1 可操作的情况下再次启动?

如果不是那么简单,为什么不那么简单?

der*_*ert 9

您的数据的相同副本存储在每个磁盘上(前提是阵列不是“脏的”——例如,如果在写入磁盘 0 之后但在写入磁盘 1 之前断电)。但是,元数据是不同的;它允许 mdadm & md 区分两个磁盘。

可以换线吗?

可以交换两个磁盘上的电缆。当您(或您的发行版的启动脚本)mdadm --assemble在阵列上执行操作时,mdadm 会查看每个磁盘上的元数据,并从中找出哪个是磁盘 1,哪个是磁盘 2。

这实际上非常灵活——例如,您可以移除其中一个磁盘,将其放入 USB-SATA 机箱,然后将其连接到 USB 端口,mdraid 仍然会非常满意。

我可以使用 恢复降级的阵列dd吗?

不。如果你这样做,你将有两个磁盘 1 或两个磁盘 2,并且 mdadm 会感到困惑(而且,我没有测试过这个,但我认为它会拒绝组装阵列)。

一般而言,所有阵列管理都已完成,mdadm而且绕过 mdraid 很少是一个好主意。要恢复阵列,请向其中添加新磁盘/分区。像这样,假设sdb1是替换磁盘上的分区:

mdadm --add /dev/md0 /dev/sdb1
Run Code Online (Sandbox Code Playgroud)

然后 mdraid 将复制数据,您可以通过cat /proc/mdstat. 在重新同步期间,您可以自由地继续使用该阵列。无需从 Live CD 或类似设备启动(您应该能够从降级阵列启动)。事实上,如果你的机器中有热插拔托盘,你可以像这样替换一个失败的 sdb:

  1. mdadm -r /dev/md0 /dev/sdb1
  2. 卸下驱动器
  3. 放入新驱动
  4. 对新驱动器进行分区(通常,但不总是,将再次成为 sdb)。
  5. mdadm -a /dev/md0 /dev/sdb1

这不需要任何停机时间。

另请注意,如果您从镜像引导,则需要确保引导加载程序(例如 grub)已安装到两个磁盘上。如何做到这一点取决于您的发行版。

还要别的吗?

是的。mdadm --create不是恢复步骤。它用于创建一个新的空白数组,下一步通常是pvcreatemkfs。已经存在的数组开始使用mdadm --assemble. (这似乎是一个很常见的错误,并且有可能破坏数据。)

结语

你或许应该有点熟悉mdraid文件(你正在使用你的数据的信任,毕竟)。特别是,通读mdadm手册页、发行版发布的任何 RAID 文档以及 Documentation/md.txt(来自内核源代码,对应于您的内核版本)。这些可能不是最容易理解的文档,但它们通常都是最新的。

还有一个Linux Raid wiki,但请注意,并非所有内容都是最新的。

还有其他页面,但要特别小心提及mkraid/etc/raidtab作为历史记录以外的任何内容,因为这些工具已经过时了十年。