Booster

出自 ArchWiki

Booster 是一个快速的 initramfs 生成器,类似于 mkinitcpiodracut。Booster 的灵感来源于 "distri" 项目,旨在创建一个小巧快速的 init 镜像。

Booster 提供了 /usr/bin/booster 用户空间工具,负责 initramfs 镜像生成。默认情况下,生成的镜像位于 /boot/

安装

安装 booster 软件包。软件包安装钩子将为每个已安装的内核生成 initramfs 镜像(例如,对于 linuxlinux-lts)。镜像位于 /boot 目录下

$ ls -lh /boot/booster*
-rwxr-xr-x 1 root root 4.0M Dec 16 16:20 /boot/booster-linux.img

或者镜像可以手动构建

$ booster build mybooster.img

配置

Booster 的生成器配置文件位于 /etc/booster.yaml。如果没有配置文件,则使用默认配置(主机特定的镜像,无网络)。

配置文件有助于覆盖默认行为。有关详细信息,请参阅 booster(1) § CONFIG FILE

提前加载模块

在某些情况下,一些内核模块需要在 initramfs 阶段提前加载。

例如,如果您需要加载 nvidia 模块,请使用以下配置设置

/etc/booster.yaml
modules_force_load: nvidia,nvidia_modeset,nvidia_uvm,nvidia_drm

然后重新生成 booster 镜像

加密

Booster 支持开箱即用的基于 LUKS 的全盘加密,类似于 Clevis。生成器不需要任何额外的配置。但是,对于 initramfs,您需要附加有关 root 所在 LUKS 分区的信息。这可以通过 rd.luks.uuid=LUKSUUIDrd.luks.name=LUKSUUID=LUKSNAME 内核参数来完成,这些参数需要在引导加载程序配置文件中指定。LUKSUUID 指定需要 Booster 解锁的加密 LUKS 分区的 UUIDbooster(1) § UUID parameters 手册建议 UUID 不包含任何引号。LUKSNAME 指定解锁分区的名称(如 /dev/mapper/LUKSNAME)。有关相关选项,请参阅 booster(1) § BOOT TIME KERNEL PARAMETERS

无需重建镜像。完成引导加载程序配置后,重启计算机。之后,您将在启动时看到 Enter passphrase for YOURROOT: 提示,要求输入加密根分区的密码。

systemd 风格绑定

Booster 还支持与 systemd 绑定的分区,例如 systemd-fido2systemd-tpm2

如果您使用 systemd-fido2,请安装 libfido2 软件包,并使用以下配置将 fido2-assert 添加到镜像中

/etc/booster.yaml
extra_files: fido2-assert

重新生成 booster 镜像。Booster 将在启动时检测到此配置,并使用当前的 YubiKey 来解锁驱动器。

注意: 在 commit 1b65577 之前,据报告 Booster 可能无法足够早地加载一些必要的内核模块,以使用 FIDO2 密钥解锁加密分区。在这种情况下,添加以下模块以强制加载
/etc/booster.yaml
modules_force_load: usbhid,hid_sensor_hub
extra_files: fido2-assert

重新生成 booster 镜像

完成 Booster 配置后,您需要更新 /boot 中的 Booster 镜像。镜像可以手动使用 booster build booster-foo.img 生成,或者使用便捷脚本 /usr/lib/booster/regenerate_images,该脚本会遍历所有已安装的内核并为每个内核生成 Booster 镜像。

引导加载程序配置

镜像生成后,就该配置引导加载程序了。

微码更新

mkinitcpiodracut 不同,Booster 不支持将微码更新包含到生成的镜像中;有关如何配置引导加载程序以额外加载相应的微码镜像的详细信息,请参阅 Microcode#Microcode in a separate initramfs file

rEFInd

如果配置已经依赖于 自动检测,则无需进行额外的配置更改。rEFInd 支持 名为 booster* 的 initrd 文件

如果您手动指定 initramfs 路径,无论是在 refind.conf 中还是在 手动引导节中,请确保使用正确的文件名。即 booster-linux.img 而不是 initramfs-linux.img

systemd-boot

要使用 systemd-boot 启用新的 initramfs 镜像,只需创建一个新的引导加载程序条目,如下所示

/boot/loader/entries/booster.conf
title Arch Linux with booster
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /booster-linux.img
options root=UUID=08f83949-bcbb-47bb-bc17-089aaa59e17e rw

其中根文件系统由 UUID=08f83949-bcbb-47bb-bc17-089aaa59e17e 引用。要查找您的根设备 UUID,请运行 blkid /dev/ROOTDEVICE

故障排除

调试

如果 Booster 出现问题且未按预期工作,请启用调试输出,以提供有关正在发生情况的额外信息

  • 对于生成器,有一个 -debug 命令行标志:booster -debug
  • 对于 init,有一个 booster.debug 内核参数。

如果您认为这是 Booster 本身的问题,请在 GitHub 上提交工单

Booster 生成器失败,提示“打开文件过多”错误

如果您启用了 stripuniversal,并看到类似 /usr/lib/modules/glue_helper.ko: pipe2: too many open files 的错误,则需要增加每个进程的打开文件限制。请参阅 Limits.conf#nofile

参见