人们常说镜像 RAID(如 RAID 1)中的磁盘是另一个磁盘的精确镜像副本。
那么我可以关闭机器并简单地交换两个硬盘电缆吗?
如果两个磁盘中的一个崩溃并且永远失效了,我可以简单地关闭机器,放入第三个(新的)硬盘而不是失效的硬盘,从 Live CD 启动并“dd”磁盘的全部内容吗?是否仍然可以使用新磁盘,然后再次启动并使用 RAID 1 运行?
如果事情没那么简单,那为什么不是这样呢?
答案1
数据的相同副本存储在每个磁盘上(前提是阵列不是“脏”的,例如,如果在写入磁盘 0 后但在写入磁盘 1 之前断电)。然而,元数据是不同的;它允许 mdadm 和 md 区分两个磁盘。
你能交换一下电缆吗?
你能交换两个磁盘上的电缆。当您(或您的发行版的启动脚本)mdadm --assemble
在阵列上执行操作时,mdadm 会查看每个磁盘上的元数据,并从中找出哪个是磁盘 1,哪个是磁盘 2。
事实上,这非常灵活,例如,您可以移除其中一个磁盘,将其放入 USB-SATA 外壳中,然后将其连接到 USB 端口,mdraid 仍然会非常满意。
我可以使用 来恢复降级的阵列dd
吗?
不。如果您这样做,您将有两个磁盘 1,或两个磁盘 2,并且 mdadm 会感到困惑(并且,我没有对此进行测试,但我认为它会拒绝组装阵列)。
一般来说,所有阵列管理都是通过 mdraid 完成的mdadm
,而且绕过 mdraid 很少是一个好主意。要恢复阵列,请将新磁盘/分区添加到其中。像这样,假设sdb1
是替换磁盘上的分区:
mdadm --add /dev/md0 /dev/sdb1
mdraid 随后会复制数据,您可以通过 来查看状态cat /proc/mdstat
。您可以在重新同步期间继续使用该阵列。无需从 Live CD 或类似设备启动(您应该能够从降级阵列启动)。事实上,如果您的机器中有热插拔托盘,您可以像这样更换出现故障的 sdb:
mdadm -r /dev/md0 /dev/sdb1
- 卸下驱动器
- 放入新驱动器
- 对新驱动器进行分区(通常但并非总是如此,将再次成为 sdb)。
mdadm -a /dev/md0 /dev/sdb1
这不需要任何停机时间。
另请注意,如果您从镜像启动,则需要确保引导加载程序(例如 grub)已安装到两个磁盘上。如何执行此操作取决于您的发行版。
还要别的吗?
是的。mdadm --create
不是恢复步骤。它用于创建一个新的,空白数组,下一步通常是pvcreate
or mkfs
。已经存在的阵列开始使用mdadm --assemble
. (这似乎是一个很常见的错误,并且有可能破坏数据。)
最后的评论
您可能应该花一些时间来熟悉 mdraid 文档(您是毕竟,信任它与您的数据)。特别是,请通读mdadm
手册页、您的发行版发布的任何 RAID 文档以及 Documentation/md.txt(来自内核源代码,与您的内核版本相对应)。这些可能不是最容易理解的文档,但它们通常都是最新的。
还有一个Linux 突袭维基,但请注意,并非所有内容都是最新的。
还有其他页面,但要特别小心任何提及mkraid
或/etc/raidtab
除了历史注释之外的内容,因为这些工具已经过时了十年。
答案2
这些磁盘并非 100% 相同。每个 Linux softraid 设备都包含一个带有 uniq guid 的元数据块。所以 dd 可能不起作用。
不过端口并不重要。您甚至可以将驱动器放入外部 USB 盒中,它仍然可以工作。当然不适用于硬件突袭。