👍 在桶装幺蛾子食用更佳!
systemd-boot 是一个易于配置的 UEFI 启动引导管理器。相比于更加常见的 GNU GRUB,它有以下优缺点:
- 轻量灵活,功能和界面都很精简,配置文件很好写(GRUB 的配置文件甚至需要
grub-mkconfig转译)。 - 是一个原生的 EFI 应用程序,只使用固件功能。这导致了下一条的功能缺失。
- 缺乏 GRUB 的一些功能,例如不支持主题、不支持文件系统读写(FAT 等 EFI 固件支持的除外);对于 BTRFS 用户来说,还不支持直接从 BTRFS 子卷启动(只能写内核参数)。
- 似乎有些同学认为 systemd-boot 界面比 GRUB 好看。
对本蛾子来说,由于不需要 Windows 双启动,也不怎么使用 BTRFS 子卷启动的功能,systemd-boot 的功能足矣。因此,今天就来删掉 GRUB,安装 systemd-boot。
📦 安装 systemd-boot
在 Arch Linux 上,systemd-boot 是 systemd 的依赖,而后者又是 base 包组的依赖,因此您应当已经安装了 systemd-boot,可以通过 bootctl 配置。
首先,将 systemd-boot 安装到 /boot:
sudo bootctl install
systemd-boot 默认您的 ESP 分区是
/boot、/boot/efi或/efi。
如果您的输出中包括以下警告:
⚠️ Mount point '/boot' which backs the random seed file is world accessible, which is a security hole! ⚠️
⚠️ Random seed file '/boot/loader/[SEED]' is world accessible, which is a security hole! ⚠️
您可以先移除安装:
sudo bootctl remove
这是因为您给 /boot 设置的挂载选项给普通用户 r-- 的权限,而用于生成证书的种子文件也被设置为了可读,提示您这是一个安全风险。您可以修改 /etc/fstab,在 /boot 的挂载参数中添加 uid=0,gid=0 并修改 umask=0077,fmask=0077,这样对普通用户的权限就是 ---。
然后,卸载并重新挂载 /boot:
sudo umount /boot
sudo systemctl daemon-reload
sudo mount -a
尝试以普通用户执行 cd /boot,如果出现 Permission denied,说明您设置的默认权限已经生效。
💡 umask 是 Linux 创建新文件时的默认权限。
权限分为读取、写入和执行(
rwx),分别对应数字 4 4 4、 2 2 2、 1 1 1,将数字相加,就可以得到对应的权限。例如,r-x就是 4 + 1 = 5 4+1=5 4+1=5。权限的对象分为所有者用户、所有者群组和其他人,三者的权限连在一起就是文件的权限设置,如rwxr-xr--对应数字754。需要注意,umask 是「减去」的权限数字,上文设置的
0077结果就是700,也就是除了所有者(uid=0就是 Root,而gid=0就是 Root 的群组)Root 外任何人都无法读写或执行。
再次执行安装指令,就看不到这个警告了。
systemd-boot 不会自动更新引导程序。您可以安装 AUR 包 systemd-boot-pacman-hook 来自动更新。
⚙️ 配置 systemd-boot
systemd-boot 的配置文件直接存储在 /boot/loader 里。
编辑 /boot/loader/loader.conf,例如:
default @saved
timeout 0
console-mode auto
editor no
其中:
default @saved:进入上次引导的系统。您也可设置为arch.conf,也就是您稍后在entries目录里设置的文件名。timeout 0:不显示引导菜单。本蛾子很喜欢这个功能,可以节约选择操作系统的时间;如果需要修改内核参数,在开机时按空格即可(很像进入 BIOS 的方法)。console-mode auto:分辨率设置,自动选择。
然后在 entries 里添加条目。systemd-boot 没有 GRUB 的 os-prober 这样的工具,只能自行添加。例如 /boot/loader/entries/arch.conf:
title Arch Linux
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
options ...
注意几点:
- 如果您使用 CPU 的特定微码,必须设置
initrd /amd-ucode.img或者initrd /intel-ucode.img,且必须在initrd /initramfs-linux.img之前。 options就是内核参数,可以用sudo grub-mkconfig 2>/dev/null | grep vmlinuz抄 GRUB 的。尤其是 BTRFS 用户,若不向内核指定子卷将无法启动。
如果您双系统使用 Windows,systemd-boot 会在启动时自动查找其 EFI 文件,加入菜单。同样的还有 UEFI 命令行和固件设置。
由于 systemd-boot 与 systemd 良好的耦合,您可以在重启时指定下一次启动的条目,或者进入固件设置:
sudo systemctl reboot --boot-loader-entry=[SOME_ENTRY].conf
sudo systemctl reboot --firmware-setup
本蛾子警告您:现在不要删除 GRUB!
📜 测试启动
大部分电脑启动时允许您指定从哪一个来源启动;在 UEFI 中,就是从哪个 EFI 应用程序启动。例如,本蛾子的电脑可以使用 F12 键。总之,在进入选择界面之后,您可以选择使用 systemd-boot 启动,若成功引导,则安装正确 🎉
如果出现了配置文件格式错误,但内核可以正常启动,您会看见一条一闪而过的红色警告。不要犹豫——拿出手机录视频,看清楚到底是什么报错。
如果引导结果显示找不到 /sbin/init,那就是您的 initrd 配置错误(例如没写微码的 initrd),或者您使用 BTRFS 而未指定子卷。
🗑 删掉 GRUB
首先把 grub 和 osprober 包删掉:
sudo pacman -Rs grub osprober grub-btrfs
然后删除 GRUB 留下的配置文件:
sudo rm /etc/default/grub.pacsave
删除 GRUB 的引导文件:
sudo rm -rf /boot/grub grubfont.pf2
最后拿 efibootmgr 删除启动项:
sudo efibootmgr # 确认 GRUB 是哪个启动项
sudo efibootmgr -b [GRUB_BOOTNUM] -B
然后再次重启测试。如果出现任何问题,翻出您安装 Arch Linux 时安装 GRUB 的命令,从镜像 arch-chroot 进去重装引导即可。UEFI 的一大优点就是灵活。
如果您还有其他的引导程序,它可能意外成了第一启动项。您同样可以用 efibootmgr 修改顺序,详情请查看 efibootmgr -h。
🎆 下课
systemd-boot 启动是真的快,甚至 BIOS 时间超过了引导时间?

1638

被折叠的 条评论
为什么被折叠?



