是否可以在没有 initramfs 的情况下启动到 RAID1 btrfs 根文件?

是否可以在没有 initramfs 的情况下启动到 RAID1 btrfs 根文件?

我目前将基于 BTRFS 的 gentoo 系统切换为使用 raid1(基本上第二个硬盘未使用,所以我将其用作 raid1)。

我可以在 raid1 模式下使用第二个设备扩展 btrfs 文件系统。但从此以后 grub2 将不再启动。是否可以让 grub2 引导到使用 raid1(并且位于子卷上)的 btrfs 根文件系统,而无需 initramfs?到目前为止,我从未使用过 initramfs,因为在 gentoo 上这似乎有点太复杂了。

当我尝试启动时,我只遇到内核恐慌 - 内核似乎无法正确挂载 rootfs。不过,直到我将 rootfs 切换到 raid1 之前,系统做过启动正常,看来是raid1造成的。

另一个相关问题 - 用于 rootfs 的两个分区(sda5、sdb5)具有相同的 UUID。这是正常的吗?

答案1

是的,可以这样做,但可能不可靠。

您需要使用rootflags内核命令行上的参数显式地告诉内核有关卷的每个单独设备的信息,如下所示:

rootflags=device=/dev/sda5,device=/dev/sdb5

这有几个非常具体的限制:

  • 如果您使用的是旧内核,它可能无法工作。我自己只在 4.10 及更新版本上这样做过,但我知道它在某些 3.x 内核上不起作用。
  • 您只能使用设备路径作为值device=,并且它们必须是不是由udev.如果没有 initramfs,您就无法使用它来查找设备,并且当您尝试挂载根文件系统时还blkid没有创建的链接。udev
  • 每当您更改分区布局时,您都需要手动更新它。

至于你的第二个问题,是的,BTRFS 卷中的每个设备共享相同的 UUID 是正常的。类似工具报告的 UUIDblkid是针对每个文件系统的,而不是针对每个设备的,因此多设备文件系统将为每个组件设备显示相同的 UUID。

答案2

我确实尝试了“device=...”方法,但它根本不起作用 - 我在启动时确实遇到了内核恐慌。这可能是因为我使用 4.9.76 作为内核 - 也许这只适用于 4.10 或更高版本。无论如何 - 我放弃了,看了看https://wiki.gentoo.org/wiki/Btrfs/Native_System_Root_Guide(我正在使用gentoo)并根据本指南构建了一个initramfs。但是,如果您遵循本指南,您可能还需要将以下行添加到文件中initramfs_list:

    #some devices
    nod /dev/console 644 0 0 c 5 1
    nod /dev/tty0    644 0 0 c 4 0

否则,您可能会收到“无法打开初始控制台”错误。

这种基于 initramfs 的方法现在可以工作了。

相关内容