无法在 Debian linux squeeze 中启动新创建的 mdadm 软件 raid

无法在 Debian linux squeeze 中启动新创建的 mdadm 软件 raid

您好,我在 Debian Squeeze Linux 上创建 swraid 时遇到了非常奇怪的问题。我开始在单个驱动器上从现有的 Debian 标准安装创建 RAID1。因此我购买了新驱动器并开始按照本教程操作:
http://www.howtoforge.com/how-to-set-up-software-raid1-on-a-running-system-incl-grub2-configuration-debian-squeeze

一切顺利,我从新驱动器创建了初始 RAID。然后我成功启动了这个新驱动器并将我的旧驱动器添加到此阵列。旧驱动器成功同步到 RAID。完成所有设置后,我已准备好最后一次重新启动我的新 Raid1 阵列。
但突然驱动器阵列需要启动。Grub 启动时间很长(打印一些有关 fd0 读取错误的错误消息)。当我从菜单中选择时,debian 开始加载非常缓慢并停止并显示未找到 md0 的消息。在 grub shell 中我发现只有 /dev/md,没有 /dev/md0 或 /dev/md1。

经过几个小时的尝试,我终于让 Raid 工作了。使用 ugky hack。

我必须补充一点:

mdadm -A --auto=md /dev/md0

在正确的位置:

/usr/share/initramfs-tools/init

并重建内核的 initrd.img

此命令启动我的 Raid 并创建 /dev/md0 和 /dev/md1。

但这是一个丑陋的黑客行为,而且我认为它不太稳定。而且它在未来的一些更新中可能会出现问题。所以我的问题是为什么我需要在 init 脚本中进行这种更改?我的阵列有什么问题吗?如何修复它?

感谢所有提示。我现在很绝望,我花了一整晚(12 小时)。

答案1

好的,我找到了从 mdadm Raid1 启动的问题的解决方案。我很惭愧花了这么多时间才弄清楚,因为这是一个相当简单的错误。

其中/etc/default/mdadm有部分:

# INITRDSTART:
#   list of arrays (or 'all') to start automatically when the initial ramdisk
#   loads. This list *must* include the array holding your root filesystem. Use
#   'none' to prevent any array from being started from the initial ramdisk.
INITRDSTART='none'

我不得不将其改为:

INITRDSTART='all'

然后我可以从 /usr/share/initramfs-tools/init 中删除我的自定义命令,并且 Linux 可以从我的 raid 1 中顺利启动。

答案2

您的阵列没有任何问题,并且通常需要修改 initrd 映像以获得额外的驱动程序或其他适配来适应启动过程。

您可以使用的另一个技巧是,启动时,大多数 init 进程会以只读方式挂载根分区,因此您可以将其指向 /dev/sda1 或与用于启动的适当分区之一绑定的任何指示符,但当您旋转根分区时,将其指向 mdadm 设备。这就是我在拥有一组软件突袭驱动器时的处理方式。

相关内容