grub2在RAID1 md0设备上找不到/ boot

我有4个分区(sda2,sdb2,sdc2,sdd2)组成的/ boot的RAID1 md0。 我在2TB硬盘上使用GPT,所以每个磁盘(sda1,…)上的第一个分区是1兆字节的bios_grub分区。

我也有用于LVM的RAID10 md1(包含/)和用于交换的RAID0 md2,它们都是从所有4个驱动器上的分区构build的。

mdadm持久超级版本是0.9。

Grub在所有4个驱动器(hd0,hd1,hd2,hd3)上安装了类似grub-install --modules="mdraid lvm" '(hd0)'东西。

问题。

重新启动时,grub2失败,出现“error:no such disk”,并显示“grub rescue>”提示。 ls命令只显示4个磁盘及其分区 – 但没有md*设备。 尝试insmod normal再给出“错误:没有这样的磁盘”。 检查“根”和“前缀”显示“(md0)/ grub”,这是正确的。 set prefix=(hd0,2)/grub然后insmod normal允许insmod normal启动。

这个问题。

为什么grub2没有看到md0?

到目前为止,我能看到的唯一解决scheme是用硬编码工作前缀(grub-mkimage –prefix ='(hd0,2)/ grub')手动构buildgrub映像,然后使用grub-setup将映像写入每个磁盘。 但是,这个解决scheme很难看,而且容易出错(为了避免错误,需要调查grub-install如何调用这两个命令)。 我会欣赏更好的解决scheme。 (注意:这是一个远程服务器,所以不能真正做'重新启动debugging'。)

RAID仍然是引导程序恕我直言的灰色地带之一。

我最近build了一个RAID1系统,几个小时后,试图让LILO / GRUB / GRUB2检测到我放弃的RAID,并且告诉它使用第一个硬盘检测到的第一个分区,并确保硬盘出现故障硬盘已经排列正确的MBR /引导程序等…

所以它的function是引导,从第一个硬盘(没有raid)抓取内核和initfs,然后引导内核,并把所有的RAID内容留给内核。 因为GRUB / LILO没有物理地写入驱动器,所以不会损坏它们。

基本上我只是忽略了RAID的引导程序阶段。

内核需要重新组装raidarrays,即使grub首先执行它。 除非在启动过程中驱动器出现故障,否则grub不需要为RAID1系统提供RAID识别。

PS你不需要raid0 SWAP,这个能力已经在内核中了。 只需在FSTAB中将两个交换设备的优先级设置为1即可

 /dev/sda2 none swap sw,pri=1 0 0 /dev/sdb2 none swap sw,pri=1 0 0 ect.... 

如果在正常的操作过程中单个交换驱动器出现故障,那么系统很可能会失败。 (你可以raid1交换,只是不是从上面的fstab)