Limine
Limine 是一个先进的、可移植的、多协议的启动引导器,最初是作为 Limine 启动协议的参考实现而开发的,但也支持启动 Linux 以及链式加载其他启动引导器的能力。
esp
指的是 EFI 系统分区(也称为 ESP)的挂载点。支持的文件系统
Limine 支持 FAT12、FAT16、FAT32 和 ISO9660。 支持的文件系统列表是根据 Limine 的 设计理念 有意限制的。
安装
安装 Limine 启动引导器
BIOS 系统
支持 MBR 和 GPT 分区设备,安装过程非常相似。
部署
核心启动引导器文件位于 /usr/share/limine/
中。对于安装到 BIOS 系统而言,最重要的是 limine-bios.sys
文件,其中包含 Limine 启动所需的 stage 3 代码。此文件需要位于将要部署 Limine 的磁盘上任何分区(只要文件系统受支持)的根目录、/boot
目录、/limine
目录或 /boot/limine
目录中。
例如
# cp /usr/share/limine/limine-bios.sys /boot/
然后 stage 1 和 stage 2 需要部署到磁盘上。无论使用 MBR 还是 GPT,安装过程都是相同的,因为它会自动检测使用的方案并进行相应的安装
# limine bios-install /dev/sdX
其中 /dev/sdX
是要安装 Limine 的磁盘(不是分区)。例如 /dev/sda
或 /dev/nvme0n1
。有关块设备命名方案的描述,请参阅 Device file#块设备名称。
UEFI 系统
在 UEFI 系统上部署 Limine 涉及将 /usr/share/limine/BOOTX64.EFI
文件复制到 EFI 系统分区,通常是 esp/EFI/BOOT/BOOTX64.EFI
,但也可以使用其他文件名,只要 UEFI BIOS 能够识别它们即可。与 GRUB 不同,Limine 不会在 NVRAM 中为启动引导器添加条目:使用 efibootmgr 为 Limine 设置条目。
UEFI+BIOS 可启动驱动器
只要驱动器是 GPT 格式化的,并且包含 EFI 系统分区,就可以同时遵循 BIOS 和 UEFI 部署程序,以创建一个能够在传统 BIOS 和 UEFI 系统上启动的驱动器。这非常有用,例如,在 USB 闪存驱动器上安装操作系统,该驱动器将在可能支持或可能不支持 UEFI 的多个系统上使用,或者为了方便在系统之间移动硬盘驱动器。
配置
limine 不附带默认配置文件,因此需要创建一个。此文件是必要的,用于告知 Limine 哪些操作系统可用于启动。配置文件有很多选项,因为 Limine 允许相当程度的自定义。有关配置文件的详细文档、其格式和选项,请参见 此处。
配置文件与 limine-bios.sys
一样,需要位于部署 Limine 的驱动器上的分区(只要该分区的文件系统受支持)的根目录、/boot
目录、/limine
目录或 /boot/limine
目录中。配置文件必须命名为 limine.conf
。
boot():/
代表 limine.conf
所在的分区。如果不存在单独的 /boot
分区,并且 limine.conf
而是位于根分区上,那么,在以下示例中,boot():/
应改为 boot():/boot/
。以下是一个简单的示例配置,其中包含 1 个启动菜单条目,描述了典型的 Arch Linux 内核和 initramfs
limine.conf
timeout: 5 /Arch Linux protocol: linux path: boot():/vmlinuz-linux cmdline: root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw module_path: boot():/initramfs-linux.img
其中 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
是根文件系统的 UUID。
为了防止这种情况,您应该首先在配置中嵌入每个资源文件的 b2sum
校验和。 Limine 文件路径有一个可选字段,其中包含文件的 b2sum
校验和。可以通过附加 #
字符,然后附加 128 个字符的校验和来指定此字段
boot():/path#checksum为了保护配置文件,您应该使用
limine enroll-config
命令将其 b2sum
嵌入到 EFI 可执行文件中。Windows 条目
为了能够启动 Windows,我们需要知道 ESP 中 bootmgfw.efi
的路径。这可以通过进入 ESP 并使用以下命令来完成
$ find -name "bootmgfw.efi"
./EFI/Microsoft/Boot/bootmgfw.efi
我们现在需要做的就是将以下内容添加到配置中
limine.conf
/Windows protocol: efi path: boot():/EFI/Microsoft/Boot/bootmgfw.efi
从另一个磁盘启动
使用 efi
协议加载 UKI,并使用 uuid(分区 UUID):
指定路径,请参阅 UKI#Limine。
pacman 钩子
虽然不是强制性的,但设置一个 pacman 钩子 在 Limine 升级时部署它可能很有用。
以下仅为示例。编辑路径和设备以匹配系统配置。
BIOS
/etc/pacman.d/hooks/liminedeploy.hook
[Trigger] Operation = Install Operation = Upgrade Type = Package Target = limine [Action] Description = Deploying Limine after upgrade... When = PostTransaction Exec = /bin/sh -c "/usr/bin/limine bios-install /dev/sdX && /usr/bin/cp /usr/share/limine/limine-bios.sys /boot/"
UEFI
/etc/pacman.d/hooks/liminedeploy.hook
[Trigger] Operation = Install Operation = Upgrade Type = Package Target = limine [Action] Description = Deploying Limine after upgrade... When = PostTransaction Exec = /usr/bin/cp /usr/share/limine/BOOTX64.EFI /boot/EFI/BOOT/
技巧与诀窍
启动条目自动化
Dracut 支持
limine-dracut-supportAUR 专为喜欢使用 Dracut 生成 initramfs 或 UKI 的用户而设计。它通过自动化 Limine 启动引导器中内核的添加和删除来简化内核管理。
配置
与其编辑 /etc/limine-entry-tool.conf
,不如修改 /etc/default/limine
,它优先于 /etc/limine-entry-tool.conf
。
1. 编辑 /etc/default/limine
- 将
ESP_PATH
设置为您的 ESP 路径。(或者,如果bootctl
自动检测到 ESP,则无需配置ESP_PATH
)。 - 使用您首选的 内核参数 设置
KERNEL_CMDLINE[default]=
。
- 如果未设置
KERNEL_CMDLINE[default]=
或KERNEL_CMDLINE=
,该工具将首先尝试从文件/etc/kernel/cmdline
中读取。如果不可用,它将回退到从/proc/cmdline
读取。 - 可选地,
KERNEL_CMDLINE[fallback]=
应用于包含名称 fallback 的内核条目。 - 此外,
KERNEL_CMDLINE["kernel name"]=
条目对应于启动菜单中的内核条目名称,允许每个内核条目使用唯一的内核 cmdline/参数。例如,linux-lts 内核条目的KERNEL_CMDLINE["linux-lts"]=
。
- 为了节省 ESP 空间,将
DRACUT_FALLBACK
设置为no
以禁用为 initramfs 或 UKI 自动生成 fallback。 - 如果您希望使用 UKI 启动,请将
DRACUT_UKI
设置为yes
。
- systemd-boot 或 rEFInd 可以自动加载由该工具生成的 UKI。
- 如果安装并启用了 sbctl,则该工具可以在更新或安装内核时使用您的安全启动密钥自动签名 UKI。
FIND_BOOTLOADERS
设置为 yes
以检测并将它们添加到 Limine。2. 运行以下命令以生成 initramfs 或 UKI 并更新 esp/limine.conf
。
# limine-update
有关更多配置选项,请参阅 limine-entry-tool 的配置
mkinitcpio 或其他 initramfs 工具
limine-entry-tool-gitAUR 不包含用于自动化内核添加和删除的 initramfs 工具和 pacman 钩子。
1. 编辑 /etc/default/limine
以覆盖 /etc/limine-entry-tool.conf
中的任何设置
- 将
ESP_PATH
设置为您的 ESP 路径。(或者,如果bootctl
自动检测到 ESP,则不需要配置ESP_PATH
)。 - 使用您首选的 内核参数 设置
KERNEL_CMDLINE[default]=
。
- 如果未设置
KERNEL_CMDLINE[default]=
或KERNEL_CMDLINE=
,该工具将首先尝试从文件/etc/kernel/cmdline
中读取。如果不可用,它将回退到从/proc/cmdline
读取。 - 可选地,
KERNEL_CMDLINE["kernel name"]=
条目对应于启动菜单中的内核条目名称,允许每个内核条目使用唯一的内核 cmdline/参数。
2. 安装您选择的 initramfs 工具(例如,mkinitcpio、dracut、booster 或其他首选工具)。
3. 编写一个脚本,例如 pacman 钩子,以使用 limine-entry-tool
命令和所需的选项来自动化内核的添加和删除,从而管理 Limine 启动菜单中的启动条目。
有关更多详细信息,请参阅 limine-entry-tool README。
Snapper 快照与 Btrfs 的集成
limine-snapper-syncAUR 工具提供了 Snapper 和 Limine 启动引导器之间的集成。它对于以下方面很有用:
- 支持启动到选定的 Snapper 快照。
- 提供两种不同的方法来还原系统快照:rsync 或 btrfs。
- 还原快照后,将在 Limine 启动引导器中添加一个“备份”条目,从而提供了一种在需要时轻松恢复到“备份”的方法。
- 当创建包含相同可启动文件的新快照时,自动修复 ESP 上旧快照中损坏的可启动文件。
- 如果 ESP 上同一可启动文件的两个哈希值不匹配,则自动记录有关潜在硬件问题的错误消息。
- 测试只读快照:使用 overlayfs 在类似不可变系统的系统上测试任何已安装的软件包,而无需修改原始数据。请注意,这并不意味着测试启动分区或单独的 home 子卷/分区。
配置
1. 配置 esp/limine.conf
以包含 //Snapshots
或 /Snapshots
关键字,用于自动生成的快照条目。
示例
limine.conf
/+Arch Linux comment: Any comment comment: machine-id=yyyyyyyyyyyyyyyyyy //Linux protocol: linux path: boot():/vmlinuz-linux cmdline: root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw rootflags=subvol=/@ module_path: boot():/initramfs-linux.img //Snapshots
仅选择一个关键字
//Snapshots
进入 OS 启动条目块内部。(默认,如果未设置)
或
/Snapshots
进入块外部。
包含来自 /etc/machine-id
的 machine-ID 是可选的,但有助于自动识别。重命名启动条目不会影响该工具。
2. 编辑 /etc/default/limine
,这将覆盖 /etc/limine-snapper-sync.conf
- 将
ESP_PATH
设置为您的 ESP 路径(或者,如果bootctl
自动检测到 ESP,则不需要配置ESP_PATH
)。 - 设置
MAX_SNAPSHOT_ENTRIES
以限制快照条目的数量。默认值为 8。 - 设置
LIMIT_USAGE_PERCENT
以在超出 ESP 使用限制时停止创建新的快照条目。默认值为 80。
- 如果使用 自定义 Snapper 布局,请确保配置以下内容
- 为您的根子卷路径指定
ROOT_SUBVOLUME_PATH
。默认情况下在大多数情况下为/@
。 - 为您的根快照路径指定
ROOT_SNAPSHOTS_PATH
。默认值为/@/.snapshots
,这是根子卷/@
的标准 Snapper 布局。
- 为您的根子卷路径指定
3. 运行命令以检查是否成功或显示错误消息
# limine-snapper-sync
4. 如果它工作正常,则 启用 systemd 服务 limine-snapper-watcher.service
,每当您的 Snapper 列表更改时,它会在您的启动菜单中自动生成快照条目。
安装 limine-dracut-supportAUR 以自动化在 ESP 上的 limine.conf
中创建启动条目。有关更多详细信息,请参阅 Dracut 支持。
有关更多详细信息,请参阅 limine-snapper-sync README 和更多配置选项。
命令
limine-snapper-sync
将 Limine 快照条目与 Snapper 列表同步。limine-snapper-list
显示当前的 Limine 快照条目。limine-snapper-info
提供有关版本、可启动快照总数和验证可启动文件的详细信息。limine-snapper-restore
从选定的可启动快照中还原您的系统,包括匹配的内核版本。
已知限制
- 仅支持任何 Snapper 布局,不支持没有 Snapper 的任意 Btrfs 布局。
- 无法为在该工具安装之前创建的旧快照生成可启动快照条目,因为这些快照通常不再具有其对应的内核版本。