如何使用systemd、UEFI、lvm2 rootfs和systemd EFI启动来启动gentoo?

如何使用systemd、UEFI、lvm2 rootfs和systemd EFI启动来启动gentoo?

我已经使用该设置安装了 Arch Linux。现在,我想与 gentoo 进行双启动。但是,当启动 gentoo 时,未检测到根 UUID(在 LVM 上)。我的分区方案是这样的:( lsblk -f)

sda                                                                    
├─sda1         vfat        E3B9-CCB0                               /boot
└─sda2         LVM2_member GwYKZG-fjl2-UV2L-KX57-1O8J-rBdp-fpdheC 
  ├─lvm-arch   ext4        67ce60f0-1a30-4da3-bb14-8dbfa0e4ea1d    /
  └─lvm-gentoo ext4        4db48ce0-3163-4a4d-ab8a-1961935cb680

我可以使用配置文件启动 Arch linux /boot/loader/entries/arch.conf

title           Arch Linux (LVM)
linux           /vmlinuz-arch
initrd          /initramfs-arch.img
options         root=UUID=67ce60f0-1a30-4da3-bb14-8dbfa0e4ea1d rw

完成gentoo安装后,我创建/boot/loader/entries/gentoo.conf文件:

title           Gentoo (LVM)
linux           /vmlinuz-gentoo
initrd          /initramfs-gentoo.img
options         root=UUID=4db48ce0-3163-4a4d-ab8a-1961935cb680 rw

我用的/boot/EFI/systemd/systemd-bootx64.efi是开机。 gentoo选项确实出现在启动菜单上,但是当我选择它时根本没有任何反应。只是空白。我尝试直接使用我的硬盘在 virtualbox 上启动,然后启动只能工作,直到找到rootfs.不知何故,/dev/mapper/lvm-gentoo无法找到UUID。仅/dev/sda2检测到 UUID。

我的猜测是内核或 initramfs 有问题。但是,我确实使用设备映射器支持编译了内核。我没有去做:

genkernel --lvm --install initramfs

我错过了什么?

答案1

由于您不仅需要使用逻辑卷管理器(LVM),还需要使用通用唯一标识符(UUID),因此您应该向 genkernel 命令添加另一个选项,这--disklabel将导致类似这样的结果

genkernel --lvm --disklabel --install initramfs

using--disklabel选项将确保blkid其他命令包含在 initramfs 中并且在引导阶段可用。

其他建议是尝试另一种选择,以确保所有驱动程序也可用。也许您已将它们构建为模块而不是在内核中。--all-ramdisk-modules将包含 initramfs 映像中的所有内核模块。这不是强制性的,但您可以尝试一下以确保安全。

答案2

如果 root 位于逻辑卷上,则 systemd-boot 加载程序文件应如下所示:

title      Debian10
linux      /vmlinuz-4.19.0-4-amd64
initrd     /initrd.img-4.19.0-4-amd64
options    root=/dev/mapper/VG01-LV01 rw

要获取 LV 路径,请使用:(
lsblk --path --output name,kname,fstype,mountpoint,model
name

相关内容