如何安全地更换 Linux RAID5 阵列中尚未出现故障的磁盘?

如何安全地更换 Linux RAID5 阵列中尚未出现故障的磁盘?

我在 4 个磁盘上有一个软件 RAID5 阵列 (Linux md)。

我想用新磁盘替换其中一个磁盘,而不使阵列处于降级状态,如果可能的话,在线。这怎么可能呢?

这很重要,因为我不想:

  • 冒着对其他磁盘施加压力的风险,这样一个磁盘可能会在重建过程中崩溃,
  • 冒着处于“无平价状态”的风险,所以我在一段时间内没有安全网。

我想在线这样做要求太多了,我应该将dd旧磁盘的数据原始复制()到新磁盘离线然后替换它,但我认为理论上是可能的......

一些背景:这些磁盘几乎连续旋转了 5.5 年以上。目前它们仍然可以完美工作,并且都通过了(长)SMART 自检。然而,我有理由认为这 4 个磁盘中的一个不会持续太久(假设是预测性故障)。

答案1

使用 mdadm 3.3+

自从mdadm3.3(2013 年 9 月 3 日发布),如果您有3.2+ 内核,您可以按如下方式进行:

# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1

sdd1是您要更换的设备,sdc1是执行此操作的首选设备,并且必须将其声明为阵列上的备用设备。

--with选项是可选的,如果未指定,将使用任何可用的备用。

较旧的 mdadm 版本

注意:你还需要一个3.2+ 内核

首先,添加一个新驱动器作为备用驱动器(分别用您的 RAID 和磁盘设备替换md0sdc1):

# mdadm /dev/md0 --add /dev/sdc1

然后,启动像这样的复制替换操作(sdd1作为故障设备):

# echo want_replacement > /sys/block/md0/md/dev-sdd1/state 

结果

系统会将所有可读块从 复制sdd1sdc1。如果遇到不可读的块,它将根据奇偶校验来重建它。操作完成后,前一个备用驱动器(此处:sdc1)将变为活动驱动器,并且故障驱动器将被标记为故障 (F),以便您可以将其删除。

笔记:信用归于弗罗斯特舒茨安斯加尔·埃斯特曼谁找到了原始解决方案(参见重复的问题)。

较旧的内核

其他答案建议:

  • 约翰尼方法:将阵列转换为 RAID6,“替换”磁盘,然后返回 RAID5,
  • 豪克拉格方法:简单地从 RAID5 阵列中删除磁盘,使其成为新磁盘的 RAID1(镜像)的一部分,然后将该镜像驱动器添加回 RAID5 阵列(理论)...

答案2

这也许可以满足要求

  1. 在线的
  2. 除了要更换的磁盘之外,不要对任何磁盘施加压力

但即使以下内容可能有效,您也可能不会在“书中”找到任何此类建议......

主意:

  1. 将旧磁盘从阵列中取出(暂时):mdadm --manage /dev/raid5 --fail /dev/OLD
  2. 从旧磁盘和新磁盘创建新的 md 设备 (RAID-1):mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. 将 RAID-1 放回阵列中(而不是 /dev/OLD):mdadm --manage /dev/raid5 --re-add /dev/md42

什么应该:-) 发生:

  1. RAID-5 使 /dev/md42 同步。这应该不会花很长时间。
  2. RAID-5 再次正常运行(但速度较慢)。
  3. /dev/NEW 与 /dev/OLD 同步。

观察同步进度(cat /proc/mdstatmdadm --monitor)。如果同步完成,请将 RAID-1 从 RAID-5 中取出,停止 RAID-1,将 /dev/NEW 重新添加到 RAID-5。如果一切正常,请覆盖 /dev/OLD 上的 mdraid 超级块以避免出现问题:mdadm --zero-superblock

警告:仅当您使用位图时,快速 RAID-5 同步才可能起作用。如果您没有,那么最好先使用虚拟 RAID-5(不带位图)进行测试。或者添加一个。至少应该可以添加一个外部的。否则,在更改设备之前可能需要停止 RAID-5。不过,如果从 RAID-5 启动,这会变得有点复杂。

答案3

如果您不介意运行 RAID-6(2 个奇偶校验磁盘而不是 1 个),并且运行 mdadmin 3.1.x 或更高版本,则可以将 RAID-5 阵列转换为 RAID-6添加额外的奇偶校验磁盘。然而,这将使阵列在重建过程中承受压力。由于写入期间需要更新更多奇偶校验磁盘,因此它会产生一些性能影响。

但如果它成功完成,那么您可以将发生故障的磁盘保留在原位,并且当它最终发生故障时,您仍然可以获得阵列的奇偶校验保护。我认为如果您不等待将其保留为 RAID6,则可以将阵列从 RAID6 转换回 RAID5。

我不知道有什么在线方法可以将阵列保持为 RAID-5 并更换磁盘而不将阵列置于降级模式,因为我认为您必须将其标记为更换失败。您的 dd 复制想法可能就是这样做的方法。

相关内容