systemd-boot (简体中文)

systemd-boot,曾用名 gummiboot (德语里“橡皮筏”的意思),是一款可以执行 EFI 镜像文件的简单 UEFI 引导管理器。可以通过配置好的模式(全局)或可用方向键导航的屏幕菜单选择默认条目。Arch 默认安装的 systemd 包含了 systemd-boot。

翻译状态:本文是 Systemd-boot翻译。上次翻译日期:2019-03-16。如果英文版本有所更改,则您可以帮助同步翻译。

Systemd-boot 很容易配置,但只能启动 EFI 可执行程序,例如 Linux 内核 EFISTUB, UEFI Shell, GRUB 或者 Windows Boot Manager 等。

注意: 本文用 $esp 表示EFI 系统分区,即 ESP 挂载的位置。

安装

安装 EFI 启动管理器

要安装 systemd-boot EFI 启动管理器,首先确保启动方式是 UEFI 模式,可以访问 UEFI 变量。用 efivar --list 命令进行检查,如果没有安装 ,使用 ls /sys/firmware/efi/efivars (如果目录存在,系统是以 UEFI 模式启动的)。

systemd-boot 仅可以从ESP 分区加载 EFISTUB 内核。要持续更新内核,建议将 ESP 挂载到 . 如果没将 ESP 挂载到 ,需要手动将内核和 initramfs 复制到 ESP. 详情请参考 EFI system partition#Alternative mount points .

下面的例子中会用 代替 EFI 系统分区的实际位置,例如 。

ESP 挂载到 后,使用 bootctl(1)systemd-boot 安装到 EFI 系统分区:

# bootctl --path=$esp install

在 x64 架构的系统上,两个完全一样的二进制文件 和 会被复制到 ESP. 然后将 systemd-boot 设置为 EFI 启动管理器的默认 EFI 程序(默认启动项)。

要完成安装,请 配置 systemd-boot

更新 EFI 启动管理器

每当 systemd-boot 有新版本时,用户都需要更新启动管理器。

手动更新

更新 systemd-boot 需要使用 bootctl。如果没指定 ,会按顺序检查 /efi, 和 。

# bootctl update

可以用 指定具体位置:

# bootctl --path=$esp update

自动更新

软件包 提供了一个 Pacman hook 以自动化更新过程。 安装 该软件包将添加一个在每次更新 systemd 时执行的 hook。

或者,不安装 systemd-boot-pacman-hook 实现相同功能,在 放置以下 Pacman Hook:

配置

启动选单配置

配置文件保存于 $esp/loader/loader.conf ,可指定以下设置:

  • #增加启动选项 中默认选择的选项;不带 .conf 后缀,可以使用通配符,例如 ;
  • – 启动默认选项前的超时时间(以秒为单位)。如果未设定,选单仅在启动时按空格键(或大多数其他键)显示;
  • editor – 是否启用内核参数编辑器。 (默认)为启用, 为禁用;因为用户可以添加 以绕过密码获取 root 权限,如果未经授权的人可以使用这台机器,强烈建议将此选项设置为 ;
  • – 自动为 Windows、EFI Shell 和 Default Loader 添加选项, (默认)启用, 为禁用;
  • auto-firmware – 显示「重启到 UEFI 固件设置」的选项, (默认)启用, 为禁用;
  • – changes UEFI console mode: for 80x25, for 80x50, and above for non-standard modes provided by the device firmware, if any, picks a suitable mode automatically, for highest available mode, (default) for the firmware selected mode.
  • random-seed-mode - 控制是否从文件 中读取随机种子。如果设为 (默认),仅在设置了 EFI 变量 的情况下才从文件加载种子;如果设为 ,即使未设置 EFI 变量,它也会从文件加载种子;如果设为 文件将被忽略。

现有设置的详细解释和对应的参数位于 loader.conf(5) 手册。以下是一个简单的示例:

增加启动选项

如果需要 Intel microcode,不要忘了修改 。

bootctl 会在 $esp/loader/entries/*.conf 搜索启动选项– 一个文件中只能包含一个启动选项,下面是参数列表:

  • 必须选项. 系统的名称.
  • – 内核版本,只在有多个 时需要.
  • – 通过 用于区分不同设备的名称, 只在有多个 和 时需要.
  • efi – 要启动的EFI应用程序的位置,以 () 为相对路径,; 例如 . 需要此选项或是 (参阅下文) 的一项.
  • – 传递给 EFI 应用程序或内核启动的参数,可选.但如果你要启动linux,至少需要 和 选项.

要启动linux,你还可以指定 和 ;这会自动转换成 efi path 和 – 这个语法只是为了方便,在功能上并没有区别.

一般的安装选项

这是一个根分区既不在LVM逻辑卷又没有加密时的配置选项:

注意这个例子中用PARTUUID(或是PARTLABEL)来标识一个GPT分区(和UUID/LABEL不同,它标识一个文件系统).使用因为PARTUUID/PARTLABEL是因为它不像UUID/LABEL会在格式化时改变,也不像 /dev/sd* 会在某些时候交换.在某些无文件系统分区(或是不支持卷标的LUKS 加密卷)上也能工作.

根分区在LVM 逻辑卷上时

这是一个根分区在LVM逻辑卷上时的样例:

用实际的逻辑卷组和逻辑卷名替换 (例如 root=/dev/mapper/volgroup00-lvolroot). 也可以使用UUID:

....
options  root=UUID=<UUID identifier> rw

加密的根分区

这是一个加密的根分区 (例如通过DM-Crypt / LUKS)的样例:

这个例子中用了UUID; PARTUUID 应该也可以使用, 如果你愿意,也可以用UUID替换/dev/段. 参阅 Dm-crypt/System configuration#Boot loader.

如果使用 LVM,cryptdevice 行应该类似于:

你也可以加入类似于 \EFI\arch\grub.efi的EFI应用程序.

根分区是btrfs子卷

如果用btrfs子卷作为根分区,记得加入 到选项中,在这个例子中,根分区挂载在名称为'ROOT'的btrfs子卷中 (例如 ):

如果做不到这一点的话,会出现这样的错误消息:

EFI Shells 或其他 EFI 应用程序

你可以像这样加载EFI Shell或其他EFI应用程序:

对休眠的支持

参阅 Suspend and hibernate.

启动选单中的按键操作

启动选单中支持的按键操作有:

  • Up/Down - 选择选项
  • - 加载所选的选项
  • - 设置默认的启动选项 (会保存在 EFI 变量中)
  • - 增加超时时间 (会保存在 EFI 变量中)
  • - 减少超时时间 (会保存在 EFI 变量中)
  • - 编辑内核参数,如果 editor 选项设置为,则没有任何作用.
  • - 显示版本信息
  • - 退出
  • P - 显示目前的配置
  • - 帮助

这些热键可以在启动管理器时直接指定启动哪一个选项

  • - Linux
  • - Windows
  • a - OS X
  • - EFI Shell
  • -选项的编号

排除问题

在传统启动下安装

如果你以传统方式(MBR)启动电脑,或许能成功安装,不过需要在安装之后像你的固件提供如何启动systemd-boot的相关信息,为此你需要:

  • 一个EFI Shell;
  • 或是你的UEFI 固件设置中提供了更改启动选项的界面.

如果能这样做的话,进入你的 EFI Shell 或是 UEFI 固件设置,修改你的默认EFI启动加载器为 (在i686架构上是 systemd-bootia32.efi).

通过efibootmgr手动添加启动选项

如果运行 命令失败,你可以通过 手动增加选项:

# efibootmgr -c -d /dev/sdX -p Y -l /EFI/systemd/systemd-bootx64.efi -L "Linux Boot Manager"

EFI 系统分区的设备名称替换.

在Windows升级后不能看到启动菜单

参阅Windows 修改了启动顺序

参阅

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.