![为什么断开连接然后重新连接的 mdadm RAID1 磁盘不会自动重新连接和重新同步?](https://linux22.com/image/147586/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%96%AD%E5%BC%80%E8%BF%9E%E6%8E%A5%E7%84%B6%E5%90%8E%E9%87%8D%E6%96%B0%E8%BF%9E%E6%8E%A5%E7%9A%84%20mdadm%20RAID1%20%E7%A3%81%E7%9B%98%E4%B8%8D%E4%BC%9A%E8%87%AA%E5%8A%A8%E9%87%8D%E6%96%B0%E8%BF%9E%E6%8E%A5%E5%92%8C%E9%87%8D%E6%96%B0%E5%90%8C%E6%AD%A5%EF%BC%9F.png)
我正在 Hyper-V 下使用 Debian 9 进行以下测试:我有两个(虚拟)磁盘,每个磁盘都有一个分区,并/dev/md0
定义为 RAID1/dev/sda1
和/dev/sdb1
。定义的根 EXT4 文件系统md0
运行良好。
sdb
然后我通过删除虚拟硬件重新启动计算机以删除磁盘。一切正常,我收到一封电子邮件,说阵列现在很干净,但已降级:
md0 : active raid1 sda1[0]
4877312 blocks super 1.2 [2/1] [U_]
好的,正如预期的那样。我重新附加sdb
,使用相同的磁盘文件创建一个新的虚拟磁盘并重新启动计算机,但系统似乎没有重新检测到该磁盘。没有任何变化,阵列仍然有 1 个驱动器,并且处于干净、降级状态。mdadm --detail /dev/md0
仍然报告磁盘已被删除。
我预计磁盘会在下次启动时自动重新检测、重新连接和重新同步,因为 uuid 和磁盘名称匹配。
我手动重新添加磁盘,mdadm --manage /dev/md0 --add /dev/sdb1
系统同步它并且阵列恢复干净。
这是系统应该工作的方式吗?
mdadm: Found some drive for an array that is already active
PS:我在启动时收到大量消息。mdadm: giving up.
答案1
如果RAID磁盘突然消失(就操作系统而言),导致RAID阵列降级,然后又回来,是否是因为系统管理员故意拔出磁盘然后重新插入?或者可能是因为某处存在间歇性连接,可能是电缆损坏或连接松动?
如果系统有办法知道删除和恢复是有意的,它可以自动拾取。但软件 RAID 没有这样的知识,因此它会假设最坏的情况,并表现得好像磁盘或其连接由于某种原因变得不可靠,除非另有说明。
硬件 RAID 控制器具有热插拔磁盘的磁盘可能具有额外的电路来检测特定插槽中的磁盘何时已被物理移除和更换,并且可以在与该 RAID 控制器关联的插槽中的所有磁盘始终假定为 RAID 磁盘的额外假设下工作。
因此,当磁盘消失并且热插拔监控电路指示磁盘已被物理移除时,控制器可以检查随后插入同一插槽的任何磁盘是否有其自己类型的 RAID 元数据。如果不存在元数据,则它可能是刚从工厂出厂的新磁盘,并且一旦热插拔监视器电路指示磁盘已完全插入,就可以自由覆盖。同样,如果元数据指示它是同一磁盘重新插入后,RAID组可自动恢复。
如果元数据存在并表明该磁盘曾经属于不同的RAID 设置时,系统管理员可能正在设置从使用相同类型 RAID 控制器的不同服务器抢救数据,因此最好等待进一步指示:管理员将决定是覆盖磁盘还是导入其 RAID 设置为另一个 RAID 卷及其现有数据。
但是,如果磁盘消失了,而热插拔监控电路表明它仍然物理存在,则硬件 RAID 控制器将有一个很好的理由来声明它有故障,即使它稍后会自行重新出现。
(一个重要的附带教训:如果您要将硬件 RAID 磁盘从故障服务器移动到另一台类似服务器以挽救故障服务器的数据,请确保接收服务器在插入之前没有任何处于降级状态的 RAID 集。包含一些关键数据的唯一副本)。