让 Grub2 识别 Raid 10 启动/根

让 Grub2 识别 Raid 10 启动/根

我已经尝试让我的 raid 从 grub2 启动大约 2 天了,但似乎没有成功。问题似乎是它根本无法识别我的 raid。它看不到 (md0) 等。我不确定为什么或如何更改这种情况。我正在使用 mdadm,2 个设备(本质上是 raid1)袭击10,f2,目前退化

我尝试过使用 grub install 添加raidmdraid模块以及其他模块。我尝试过几种变体,grub-install例如grub-install --debug --no-floppy --modules="biosdisk part_msdos chain raid mdraid ext2 linux search ata normal" /dev/md0

我一直在网上寻找我还没有做过的事情的答案,但没有运气。在我计划移除的另一个驱动器上,raid 已初始化并在启动时正常安装,但它不是该设置的启动/根。我的grub.cfg无法被 grub 识别,因为它无法读取 raid 分区,所以我没有发布它。md0 没有列在我的/boot/grub/device.map.

答案1

不要忘记 GRUB2 仍处于开发阶段,所以如果您想使用它……则需要您自行承担风险。

鉴于上述情况,我认为你最好获取最新的源代码并进行编译,看看是否能解决你可能遇到的任何问题。你应该至少使用 1.9.6 版本,因为文档说,并确保您使用 v0.90 mdadm 元数据超级块构建了您的 raid。

例如,要为 /boot 文件系统创建“-l 10”RAID1 设备,其中有“-n 4”个磁盘和“-x 0”个备用磁盘:

mdadm --create -e 0.90 -n 4 -x 0 -l 1 /dev/md2 /dev/sda2 /dev/sdb2 [/dev/sdc2 /dev/sdd2 ...]

在使用 mdadm v3.2.3、grub 1.99-21ubuntu3 进行测试时,只有启动文件系统需要元数据 0.90,而根文件系统则不需要。而且,在移除磁盘后,raid10 无法工作,因此示例为上面的 raid1。(另一个与 raid10 相关的问题这里

答案2

更新当前软件版本(Ubuntu 14.10):
Grub2 2.02~beta2-15

我设置了分区并在其上创建了 md 设备,然后在其上运行了 mkfs。然后我启动了 Ubuntu 的安装程序 (ubiquity)。(如果您不先执行 mkfs,ubiquity 会坚持对您的 md 设备进行分区。我不知道 grub 是否会处理分区上 MD 内的分区表。)

在 XFS 上使用/(包括/boot)2 个磁盘的 RAID10,f2 时,即使缺少一个磁盘,GRUB 也能顺利启动。(目前或曾经有一个错误,GRUB 认为如果缺少 2 个设备,RAID10 就无法使用,而不检查缺少哪两个设备。因此,在某些情况下,Linux 使用降级的 RAID10 不会有问题,但 GRUB 的简单检查会失败。)

(XFS 说明:grub2 2.02 beta2 不支持 XFS 的新元数据格式。在获得修补的 GRUB 之前,mkfs.xfs -m crc=1请不要在包含的文件系统上使用该格式。)/boot

我使用 32kiB 的块大小对 RAID10,f2 进行了测试,以确保 vmlinuz 和我的 initrd 在磁盘上不连续。不过,我没有使用需要 GRUB 从多个磁盘读取才能获得完整文件的配置进行测试,因此我仍然不知道是否支持该配置。(不过我认为不支持:我是在 GRUB 命令行中进行测试的(在加载 normal.mod 之后,而不是从 grub 恢复控制台进行测试)。

ls (md/0)
blah blah holds an XFS filesystem
ls (md/1)
<machine reboots instantly>
 or booting with only one disk connected:
error: failure reading sector 0xb30 from `fd0'.
error: disk `md/1' not found.

(英特尔 DZ68DB 主板,主板的 SATA 控制器上的磁盘(设置为 RAID,而不是 AHCI,以防万一))所以我猜它正在寻找具有正确 UUID 的分区来完成 RAID0。

我的 RAID10,f2 使用默认元数据 1.2 格式(位于分区起始位置 4kiB 处)。由于 grub 现在能够识别 md 设备,因此您无需像以前那样将 md 超级块隐藏在分区末尾(您可以使用格式 1.0 以及我认为 0.9 来实现这一点)。我没有测试 grub 是否也支持或ddfimsm某些主板控制器使用的 BIOS raid 元数据格式)。

我的两个磁盘都有 GPT 分区表,EF02 Bios 启动分区在第一个“常规”分区之前。(从扇区 40 到 2047)。Grub 使用它来放置读取 RAID 和 XFS 所需的内容,但这些内容无法放入 512B 引导扇区中。

不要对您的 bios 启动分区进行 RAID。您需要单独进行grub-install每个/dev/sdX分区,以便可以启动任何磁盘。这样做还会将 grub 所需的内容写入该磁盘上的 BIOS 启动分区。 update-grub不会触及 bios 启动分区,它只会从配置文件重建菜单和 initrd。只grub-install触及启动分区,而且就像我说的,无论如何都需要在每个磁盘上运行。

在移除一个硬盘的情况下进行实际启动测试:Ubuntu 提供了一个交互式选项,可以跳过安装不可用的文件系统。(我/var/cache在 RAID0 上安装过)。但在告诉它跳过之后,一切正常。

答案3

对于任何向下滚动到这里的人来说,我在尝试让 Ubuntu 16/14 从 24 磁盘 SW RAID 10 启动时遇到了这个问题。

关键在于将 /boot 分区设置为 RAID 1;Grub 显然不喜欢 RAID 10。系统的其余部分、交换分区和根分区(“/”)都设置为 RAID 10。

相关内容