systemd-boot (简体中文)
systemd-boot (以前被称为gummiboot) 是可以执行 EFI 镜像文件的简单 UEFI 启动管理器。启动的内容可以通过一个配置(glob)或者屏幕菜单选择。Arch 默认安装的 systemd 提供了这个功能。
配置很简单,但是只能启动 EFI 可执行程序,例如 Linux 内核 EFISTUB, UEFI Shell, GRUB, Windows Boot Manager等。
Contents
安装
在UEFI 引导下安装
- 确认启动方式是 UEFI 模式
- 验证可以正确访问 EFI 变量
- 挂载 EFI 系统分区(ESP)
- 复制内核和 initramfs 到 ESP。
- 执行下面命令将 systemd-boot 程序复制到 EFI 系统分区并将 systemd-boot 安装成EFI启动管理器的默认的 EFI 程序。
# bootctl --path=$esp install
在传统启动下安装
如果你以传统方式(MBR)启动电脑,或许能成功安装,不过需要在安装之后像你的固件提供如何启动systemd-boot的相关信息,为此你需要:
- 一个EFI Shell;
- 或是你的UEFI 固件设置中提供了更改启动选项的界面.
如果能这样做的话,进入你的 EFI Shell 或是 UEFI 固件设置,修改你的默认EFI启动加载器为 $esp/EFI/systemd/systemd-bootx64.efi
(在i686架构上是 systemd-bootia32.efi
).
更新
systemd-boot (bootctl(1), systemd-efi-boot-generator(8)) 假定你的 EFI 系统分区 挂载在 /boot
. 和 gummiboot 不同,Systemd-boot的升级需要用户手动进行:
# bootctl update
如果 EFI 系统分区不在 /boot
, 需要加入 --path=
参数来指定. 例如:
# bootctl --path=esp update
配置
基本配置
基本设置保存在$esp/loader/loader.conf
,有三个选项:
The basic configuration is kept in $esp/loader/loader.conf
, with three possible configuration options:
-
default
–默认加载的配置文件 (不含.conf
后缀); 可以使用通配符arch-*
-
timeout
–启动选单的超时时间,如果不设置的话,启动选单只有在按键时才显示.
-
editor
-是否允许用户编辑内核参数.1
(默认值) 是允许,0
是阻止. 因为用户可以通过init=/bin/bash
来绕过root密码并获得root权限,建议设置成0
.
下面是一个样例:
$esp/loader/loader.conf
default arch timeout 4 editor 0
你也可以在启动选单中改变默认值和超时时间,所做的改动会保存到efivars中.
增加启动选项
如果需要 Intel microcode,不要忘了修改 initrd
。
bootctl 会在 $esp/loader/entries/*.conf
搜索启动选项– 一个文件中只能包含一个启动选项,下面是参数列表:
-
title
– 必须选项. 系统的名称.
-
version
– 内核版本,只在有多个title
时需要.
-
machine-id
– 通过/etc/machine-id
用于区分不同设备的名称, 只在有多个title
和version
时需要.
-
efi
– 要启动的EFI应用程序的位置,以 ($esp
) 为相对路径,; 例如/vmlinuz-linux
. 需要此选项或是linux
(参阅下文) 的一项.
-
options
– 传递给 EFI 应用程序或内核启动的参数,可选.但如果你要启动linux,至少需要initrd=efipath
和root=dev
选项.
要启动linux,你还可以指定 linux path-to-vmlinuz
和 initrd path-to-initramfs
;这会自动转换成 efi path
和 options initrd=path
– 这个语法只是为了方便,在功能上并没有区别.
一般的安装选项
这是一个根分区既不在LVM逻辑卷又没有加密时的配置选项:
$esp/loader/entries/arch.conf
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw
注意这个例子中用PARTUUID(或是PARTLABEL)来标识一个GPT分区(和UUID/LABEL不同,它标识一个文件系统).使用因为PARTUUID/PARTLABEL是因为它不像UUID/LABEL会在格式化时改变,也不像 /dev/sd* 会在某些时候交换.在某些无文件系统分区(或是不支持卷标的LUKS 加密卷)上也能工作.
根分区在LVM 逻辑卷上时
这是一个根分区在LVM逻辑卷上时的样例:
$esp/loader/entries/arch-lvm.conf
title Arch Linux (LVM) linux /vmlinuz-linux initrd /initramfs-linux.img options root=/dev/mapper/<VolumeGroup-LogicalVolume> rw
用实际的逻辑卷组和逻辑卷名替换 <VolumeGroup-LogicalVolume>
(例如 root=/dev/mapper/volgroup00-lvolroot
). 也可以使用UUID:
.... options root=UUID=<UUID identifier> rw
加密的根分区
这是一个加密的根分区 (例如通过DM-Crypt / LUKS)的样例:
$esp/loader/entries/arch-encrypted.conf
title Arch Linux Encrypted linux /vmlinuz-linux initrd /initramfs-linux.img options cryptdevice=UUID=<UUID>:<mapped-name> root=/dev/mapper/<mapped-name> quiet rw
这个例子中用了UUID; PARTUUID 应该也可以使用, 如果你愿意,也可以用UUID替换/dev/段. 参阅 Dm-crypt/System configuration#Boot loader.
如果使用 LVM,cryptdevice 行应该类似于:
esp/loader/entries/arch-encrypted-lvm.conf
title Arch Linux Encrypted LVM linux /vmlinuz-linux initrd /initramfs-linux.img options cryptdevice=UUID=<UUID>:MyVolGroup root=/dev/mapper/MyVolGroup-MyVolRoot quiet rw
你也可以加入类似于 \EFI\arch\grub.efi
的EFI应用程序.
根分区是btrfs子卷
如果用btrfs子卷作为根分区,记得加入 rootflags=subvol=<root 子卷名称>
到options
选项中,在这个例子中,根分区挂载在名称为'ROOT'的btrfs子卷中 (例如 mount -o subvol=ROOT /dev/sdxY /mnt
):
$esp/loader/entries/arch-btrfs-subvol.conf
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw rootflags=subvol=ROOT
如果做不到这一点的话,会出现这样的错误消息: ERROR: Root device mounted successfully, but /sbin/init does not exist.
EFI Shells 或其他 EFI 应用程序
你可以像这样加载EFI Shell或其他EFI应用程序:
$esp/loader/entries/uefi-shell-v1-x86_64.conf
title UEFI Shell x86_64 v1 efi /EFI/shellx64_v1.efi
$esp/loader/entries/uefi-shell-v2-x86_64.conf
title UEFI Shell x86_64 v2 efi /EFI/shellx64_v2.efi
对休眠的支持
启动选单中的按键操作
启动选单中支持的按键操作有:
-
Up/Down
- 选择选项 -
Enter
- 加载所选的选项 -
d
- 设置默认的启动选项 (会保存在 EFI 变量中) -
-/T
- 增加超时时间 (会保存在 EFI 变量中) -
+/t
- 减少超时时间 (会保存在 EFI 变量中) -
e
- 编辑内核参数,如果editor
选项设置为0
,则没有任何作用. -
v
- 显示版本信息 -
Q
- 退出 -
P
- 显示目前的配置 -
h/?
- 帮助
这些热键可以在启动管理器时直接指定启动哪一个选项
-
l
- Linux -
w
- Windows -
a
- OS X -
s
- EFI Shell -
1-9
-选项的编号
排除问题
通过efibootmgr手动添加启动选项
如果运行bootctl install
命令失败,你可以通过 efibootmgr手动增加选项:
# efibootmgr -c -d /dev/sdX -p Y -l /EFI/systemd/systemd-bootx64.efi -L "Linux Boot Manager"
用EFI 系统分区[broken link: invalid section]的设备名称替换/dev/sdXY
.