在我遇到
systemd-boot 作为引导加载程序后,我再也没有回头使用 GRUB。
在我的观点中,
systemd-boot 更加稳定,并且具有更好的配置方式。
而且,“稳定”意味着它不像 GRUB 那样容易受到攻击。GRUB 很容易出问题。
只要向您的计算机添加一个新硬盘可能会给您带来很大麻烦(可能是因为无法更改引导加载程序 ID 等原因)。
systemd-boot 的唯一缺点是缺乏安全引导支持,但这对我来说不是问题,并且您的内核必须位于 EFI 分区中,而不是根分区中,这与 GRUB 的情况不同。
通过
systemd-boot,我重新获得了对启动过程的完全控制...是的
它应该成为默认的引导加载程序,而不是 GRUB。
更新,如何操作(Debian/Ubuntu):
(这只是一个简要指南,但希望能帮你入门。其他来源:Arhlinux..,freedesktop.. 和 readme..)
1:首先从根分区复制内核文件,例如 /boot/vmlinuz-4.9.0-8-amd64
和 /boot/initrd.img-4.9.0-8-amd64
,到你的 EFI 分区。你可以将它们放在你喜欢的子文件夹中,甚至可以放在根目录。
2:许多指南说你需要访问 EFI 变量,但我不确定这是否必要。但是为了测试是否拥有权限,请运行 efivar --list
。
如果缺少,请安装:apt install efivar
3: 将systemd-boot加载器安装到EFI分区:
bootctl --path=/mnt/efi install
(使用您自己挂载的EFI分区路径)。
4: 编辑文件
/mnt/efi/loader/loader.conf
,修改为以下内容:
timeout 5
# default 6a9857a393724b7a981ebb5b8495b9e-*
(还没弄清楚如何在文件中使用自动添加的UUID,所以我只是标记了出来)
5:/mnt/efi/loader/entries/*.conf目录中的每个文件对应
systemd-boot菜单中的一个引导项。因此,要添加当前操作系统,请创建一个类似以下内容的文件:
title Debian 9 :-)
linux /debian9/vmlinuz-4.9.0-6-amd64
initrd /debian9/initrd.img-4.9.0-6-amd64
options root=UUID=084917b7-8be2-4e86-838d-f771a9902e08`
(在步骤1中修改复制的内核文件路径。将UUID修改为根分区的文件系统UUID(使用Linux命令
lsblk -o name,uuid
))
(一般信息:
bootctl会在您的EFI分区中安装两个引导加载程序文件:)
../BOOT/BOOTX64.EFI
../systemd/systemd-bootx64.efi
这些文件是相同的。您的主板上的EFI BIOS必须引导/指向其中之一。可以直接在BIOS中进行设置,或者使用Linux命令
efibootmgr....
要添加新的启动项,只需创建一个新的
/mnt/efi/loader/entries/*.conf
文件,该文件指向正确的内核文件和根分区。
内核文件必须位于EFI分区(FAT32)上。
EFI分区的大小必须相应调整。我认为Debian/Ubuntu的内核文件大约为50-60MB。所以如果您有两个安装,您需要120MB的空间。
grub-install
,例如从Archlinux live.iso启动。也许bootloader-id
不会被硬编码到.efi文件中。如果是这样的话,Ubuntu还能正常启动吗? - MrCalvingrub-install
,现在我的引导程序ID是ubuntu2
我可以想象安全启动可能不起作用。似乎Ubuntu硬编码ID的整个原因是引导程序已签名,因此无法修改,当然你可以修改,但那样它就不再被签名了。但是我根本不使用安全启动,所以我不在意。 - MrCalvinshimx64.efi
。我的菜单项指向grubx64.efi
(我也不使用安全启动)。 - mook765