跳转至内容

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 进行配置更改后,需要重新生成 initramfs 镜像以使更改生效。要做到这一点,请参阅下面的示例。

Booster 提供了一个方便的脚本,该脚本会遍历所有已安装的内核并为每个内核生成镜像。

# /usr/lib/booster/regenerate_images

或者,您可以通过直接调用 booster 并带上 build 参数来手动生成镜像。

$ booster build mybooster.img

这将会在您当前的目录中构建一个 initramfs 镜像。请注意,根据在文件系统上运行的位置,这可能需要提升的权限。

配置

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

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

早期模块加载

您可以在 initramfs 阶段强制加载某些模块。

例如,如果您需要 Kernel mode setting#Early KMS start 以避免在 NVIDIA GPU 初始化之前运行图形会话,请使用以下配置设置:

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

然后 重新生成 booster 镜像

加密

Booster 开箱即用地支持基于 LUKS 的全盘加密,类似于 Clevis。生成器不需要任何额外的配置。但是,对于 initramfs,您需要附加关于根所在 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 解锁驱动器。

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

移除模块

您可以通过 - 符号从 initramfs 中移除模块。例如,手动选择所有模块并执行与 Mkinitcpio/Minimal initramfs 相同的操作以提高启动性能,如下所示:

/etc/booster.yaml
modules: -*,btrfs,nvme

精简模块

您可以通过精简模块来减小 initramfs 的大小。

/etc/booster.yaml
strip: true
注意 此设置会移除 内核锁定所需的模块签名。

压缩

Booster 支持 initramfs 压缩,默认使用 zstd 算法。当前支持的算法有 zstdxzgziplz4none

/etc/booster.yaml
compression: zstd

引导加载器配置

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

微码更新

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

rEFInd

如果配置依赖于 自动检测,则不需要额外的配置更改。rEFInd 支持 命名为 booster* 的 initramfs 文件

如果您在 refind.conf手动引导项中手动指定 initramfs 路径,请确保使用正确的文件名。即,使用 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

故障排除

Debug

如果 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

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.