我目前将基于 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 的方法现在可以工作了。