mdadm Ubuntu 12.04 在启动过程中无法组装 RAID6

mdadm Ubuntu 12.04 在启动过程中无法组装 RAID6

我会尽量简短地说。

我有一个带有 11 个驱动器的 mdadm RAID 6。多年来,它一直“正常工作”,在重新安装等情况下都没有出现任何问题。我甚至不需要配置 mdadm.conf。

在 12.04 版本之后,我无法再启动机器,因为 mdadm 无法挂载阵列,然后会将我扔进 initramfs shell。在启动时,mdadm 会获取 7 个驱动器并在 /dev/md127 中启动它们,当然这会失败。

启动时,我将其停止,将所有驱动器重新组装为 md0,一切又恢复正常。

问题是,我如何才能使其在启动时正常运行?

经过相当多的测试后,我当前的 mdadm.conf 是这样的: http://pastebin.com/SWx1nCNg

启动期间的 mdadm-status: http://pastebin.com/Ua9W3aj4

请注意,上面粘贴的下面是用于重新组装的命令,该命令工作正常。

帮助? :)

答案1

问题是在所有驱动器初始化之前调用了 /usr/share/initramfs-tools/scripts/mdadm-functions。

我的 RAID 阵列中有 6 个驱动器。其中 2 个是板载 SATA,4 个在 mpt2sas(SAS2008)卡上。

显然,mdadm 试图在 6 个驱动器全部连接到系统之前初始化阵列

如果我将 mdadm-functions 编辑为这样,一切正常(丑陋的修复):

degraded_arrays()
   {
       sleep 15
   mdadm --misc --scan --detail --test >/dev/null 2>&1
   return $((! $?))
  }

对我来说,这个错误是在我今天从 10.04 LTS 升级到 12.04.1 LTS 时出现的!

答案2

因此,经过一些提示后,我发现问题在于某些驱动器没有被 mdadm 足够快地检测到,因此它就停止了。

有人建议添加 rootdelay=30 作为内核参数,但 Ubuntu 直接忽略了。我反而添加了一个 initramfs 预挂载脚本。

echo "sleep 60" > /etc/initramfs-tools/scripts/init-premount;
chmod +x /etc/initramfs-tools/scripts/init-premount;
update-grub; 
update-initramfs -u;

重新启动后,启动时间多了一分钟,但我知道 mdadm 已检测到所有驱动器。

答案3

修改在其他地方找到的对我有用的答案。

我看到的症状:

当我升级到 Precise/12.04 时,在 Lucid/10.04 下运行良好的 RAID 停止了自动组装。RAID 在 Precise 中组装为 /dev/md127。在 initramfs shell 中,以下命令修复了问题并允许机器启动。

mdadm --stop /dev/md127 mdadm --assemble /dev/md0

有效的解决方案:

确保 mdadm.conf 具有正确的 ARRAY 行。(我可以正确组装 /dev/md0,这表明 mdadm.conf 是正确的。)

在 /usr/share/initramfs-tools/scripts/local-top 中创建一个脚本(我称之为 mdfix)

#!/bin/sh
sleep 6
mdadm --stop /dev/md127
sleep 6
mdadm --assemble /dev/md0

然后

chmod +x mdfix
update-grub
update-initramfs -u

update-initramfs 可能会生成有关 /dev/md127 的“无此设备”信息。把毛巾盖在头上,不要惊慌。:)

重新启动后,/dev/md0 应该可以正确挂载,只是速度会比以前慢一点。(休眠可能没有必要,但谨慎总比后悔好。)

相关内容