Linux rootfs 阵列随机组装失败

Linux rootfs 阵列随机组装失败

我有一台运行 Arch x86_64 2.6.30 的机器。

它的根目录设置在自动安装在 /dev/md0 下的 raid5 阵列上。
这是通过内核参数完成的,如下所示:
kernel /vmlinuz26 md=0,/dev/sda3,/dev/sdb3,/dev/sdc3 md=2,/dev/sda2,/dev/sdb2,/dev/sdc2 rootfstype=ext4 root=/dev/md0 ro

以前这个方法很好用,但有时无法组装 md0 阵列。
如果一切正常,内核会探测块 ID,找到匹配项,然后等待阵列组装 10 秒。

这通常会立即完成,但有时它会等待 10 秒,之后它会超时并进入恢复控制台,我无法使用它,因为它不接受任何输入。我想这可能是因为我唯一可用的键盘是 USB 键盘(即使键盘在 GRUB 菜单中可以使用)。

当这种情况发生时,我只需要重新启动,阵列就会正常安装。

顺便说一句,这种情况发生的概率约为 30%。
这种情况发生在完全关闭后。
这种情况可能连续发生多次。

由于无法挂载 rootfs,因此无法写入任何日志。

有人见过这样的事吗?
你知道为什么会发生这种情况吗?

答案1

我假设这可能只是你的内核正在重新排序驱动器名称,因为它通常只是以先到先得的方式分配名称,而不需要像 udev 那样进行重命名。

我的建议是使用 udev 附带的 initrd,这样您就可以确保驱动器的名称正确。如果您使用 udev(或类似的东西,定制的),然后只需通过 /dev/disk/by-uuid/ 安装驱动器,这将更加安全,因为它们通常不会改变。

答案2

甚至没有错误的屏幕截图,我想没人能肯定地说。你能做的最好的事情就是将 initrd 引入你的系统,并将你的启动过程转换为使用 UUID 而不是设备名称(设备名称可能会发生变化,例如,如果你忘记了你的 pendrive 在任何 usb 插槽中)。

答案3

在对分区进行突袭时,您可能需要检查它们是否全部标记为 Linux Raid 自动检测分区(类型 FD)而不是 Linux(类型 83)。只要您不更改分区大小,就可以使用您选择的分区编辑器安全地修改类型。如果您特别谨慎,请一次只修改一个分区,这样您就不会破坏整个突袭。

您的内核足够现代,只要它内置或在 initrd 中提供适当的 mdadm 模块,它就会扫描所有可用分区。如果它找到 FD 类型分区,它会检查 mdadm 超级块。所有具有相同 raid id 的分区将自动重新组装,而无需您在启动时明确设置它。

您也可以继续定义它,但我会首先检查分区类型是否都是 FD,然后删除 raid 定义,看看它是否有帮助。

相关内容