如何安全地替换Linux RAID5阵列中尚未发生故障的磁盘?


26

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

我想用一个新磁盘替换其中一个磁盘,而不会使阵列处于降级状态,如果可能,请使其联机。那怎么可能呢?

这很重要,因为我不想:

  • 冒使其他磁盘承受压力的风险,以便在重建过程中可能会崩溃,
  • 冒处于“无奇偶状态”的风险,因此我有一段时间没有安全网了。

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

背景信息:这些磁盘几乎一直在连续旋转5.5年以上。目前,它们仍然可以正常工作,并且都通过了(长期)SMART自检。但是,我有理由认为这4个磁盘中的一个不会持续很长时间(假定为预测性故障)。

Answers:


36

使用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+内核

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

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

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

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

结果

系统会将所有可读块从复制sdd1sdc1。如果涉及不可读的块,它将根据奇偶校验对其进行重构。操作完成后,以前的备用磁盘(此处:)sdc1将变为活动状态,并且发生故障的驱动器将被标记为发生故障(F),因此您可以将其删除。

注:归功于frostschutz安斯加尔Esztermann谁发现原来的解决方案(见重复的问题)。

较旧的内核

其他答案表明:

  • 约翰尼方法:将阵列转换为RAID6,“替换”磁盘,然后再恢复为RAID5,
  • Hauke Laging方法:短暂地从RAID5阵列中删除磁盘,使其与新磁盘一起成为RAID1(镜像)的一部分,然后将该镜像驱动器添加回RAID5阵列(理论上)...

2
mdadm --add--replace工作之前仍然需要。(mdadm3.3,Ubuntu 15.10)。如果你这样做了--add之后--replace,复制将尽快为备用加入开始。(设备保持标记为“需要更换”)。
彼得·科德斯

3

这可能满足要求

  1. 线上
  2. 除了要更换的磁盘外,不要压任何磁盘

但是,即使以下方法可行,您也可能不会在书中找到任何类似的建议...

理念:

  1. 将磁盘OLD从阵列中取出(片刻): mdadm --manage /dev/raid5 --fail /dev/OLD
  2. 从磁盘OLD和NEW创建新的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复制提示可能是实现此目的的方法。


@haukelaging仅供参考,从3.2版内核开始,请参阅我的答案
Totor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.