https://zhuanlan.zhihu.com/p/20623053?refer=archlinux

顺便先试一下EFISTUB。这个更早,11年Linux 3.3加入。简单来说,它让kernel自己成为EFI bootloader,从而不需要再安装别的bootloader(如grub),而直接从EFI BIOS引导。

安装方法非常简单:

  1. 把kernel和initrd复制到ESP分区(硬盘的第一个分区)。如果把ESP分区挂载到/boot,pacman就可以把相关文件直接安装进去。
  2. 用root执行:
efibootmgr -d /dev/sda -p 1 -c -L "Arch Linux" -l /vmlinuz-linux -u "root=/dev/sda2 rw initrd=/initramfs-linux.img"

好了,重启进BIOS选择引导顺序就成了。比安装grub步骤更少。

理论上也可以不用efibootmgr,在BIOS里直接添加引导项。但我不知道怎么在BIOS里输入命令行参数...


说回systemd-boot。安装也不复杂。

  1. 把ESP分区挂载到/boot。
  2. 用root执行bootctl install。它会把systemd-boot复制到ESP,并且设置成系统缺省bootloader。(一贯的霸道总裁作风)。
  3. 编辑/boot/loader/loader.conf,设置default和timeout。如果不设置timeout,它会直接引导default,除非你按住空格键才会显示菜单。
  4. 编辑/boot/loader/entries/arch.conf:
title archlinux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=/dev/sda2 rw 

好了。

systemd-boot的优点(相比grub):

  1. 单文件,安装简单。
  2. 引导项是独立的配置文件,因此每个发行版只需要把自己的文件复制到/boot/loader/entries,不会互相覆盖。

可是问题来了:systemd-boot只能引导两种东西:

  1. Linux kernel
  2. 别的EFI bootloader

而前面说了,Linux kernel本身就是EFI bootloader。所以这东西就是个选择EFIbootloader的菜单,和BIOS自带的菜单功能差不多。唯一好处是,编辑配置文件毕竟比操作efibootmgr简单。可是,rEFInd可以0配置完成同样功能。所以说,systemd搞这个有啥用啊... 倒是前面被我们嫌弃的grub反而不可替代,因为它可以loopback引导live iso。






参考:
  1. https://wiki.archlinux.org/index.php/Systemd-boot
  2. EFISTUB - ArchWiki
发布于 2016-03-05
10-27 13:49
查看更多