Booster
Booster 是一个快速的 initramfs 生成器,类似于 mkinitcpio 和 dracut。Booster 的灵感来源于 "distri" 项目,旨在创建一个小巧快速的 init 镜像。
Booster 提供了 /usr/bin/booster
用户空间工具,负责 initramfs 镜像生成。默认情况下,生成的镜像位于 /boot/
。
安装
安装 booster 软件包。软件包安装钩子将为每个已安装的内核生成 initramfs 镜像(例如,对于 linux、linux-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 支持开箱即用的基于 LUKS 的全盘加密,类似于 Clevis。生成器不需要任何额外的配置。但是,对于 initramfs,您需要附加有关 root 所在 LUKS 分区的信息。这可以通过 rd.luks.uuid=LUKSUUID
或 rd.luks.name=LUKSUUID=LUKSNAME
内核参数来完成,这些参数需要在引导加载程序配置文件中指定。LUKSUUID
指定需要 Booster 解锁的加密 LUKS 分区的 UUID。booster(1) § UUID parameters 手册建议 UUID 不包含任何引号。LUKSNAME
指定解锁分区的名称(如 /dev/mapper/LUKSNAME
)。有关相关选项,请参阅 booster(1) § BOOT TIME KERNEL PARAMETERS。
无需重建镜像。完成引导加载程序配置后,重启计算机。之后,您将在启动时看到 Enter passphrase for YOURROOT:
提示,要求输入加密根分区的密码。
systemd 风格绑定
Booster 还支持与 systemd 绑定的分区,例如 systemd-fido2
和 systemd-tpm2
。
如果您使用 systemd-fido2
,请安装 libfido2 软件包,并使用以下配置将 fido2-assert
添加到镜像中
/etc/booster.yaml
extra_files: fido2-assert
重新生成 booster 镜像。Booster 将在启动时检测到此配置,并使用当前的 YubiKey 来解锁驱动器。
/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 镜像。
引导加载程序配置
镜像生成后,就该配置引导加载程序了。
微码更新
与 mkinitcpio 和 dracut 不同,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 生成器失败,提示“打开文件过多”错误
如果您启用了 strip
和 universal
,并看到类似 /usr/lib/modules/glue_helper.ko: pipe2: too many open files
的错误,则需要增加每个进程的打开文件限制。请参阅 Limits.conf#nofile。