顺便先试一下EFISTUB。这个更早,11年Linux 3.3加入。简单来说,它让kernel自己成为EFI bootloader,从而不需要再安装别的bootloader(如grub),而直接从EFI BIOS引导。
安装方法非常简单:
- 把kernel和initrd复制到ESP分区(硬盘的第一个分区)。如果把ESP分区挂载到/boot,pacman就可以把相关文件直接安装进去。
- 用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。安装也不复杂。
- 把ESP分区挂载到/boot。
- 用root执行bootctl install。它会把systemd-boot复制到ESP,并且设置成系统缺省bootloader。(一贯的霸道总裁作风)。
- 编辑/boot/loader/loader.conf,设置default和timeout。如果不设置timeout,它会直接引导default,除非你按住空格键才会显示菜单。
- 编辑/boot/loader/entries/arch.conf:
title archlinux linux /vmlinuz-linux initrd /initramfs-linux.img options root=/dev/sda2 rw
好了。
systemd-boot的优点(相比grub):
- 单文件,安装简单。
- 引导项是独立的配置文件,因此每个发行版只需要把自己的文件复制到/boot/loader/entries,不会互相覆盖。
可是问题来了:systemd-boot只能引导两种东西:
- Linux kernel
- 别的EFI bootloader
而前面说了,Linux kernel本身就是EFI bootloader。所以这东西就是个选择EFIbootloader的菜单,和BIOS自带的菜单功能差不多。唯一好处是,编辑配置文件毕竟比操作efibootmgr简单。可是,rEFInd可以0配置完成同样功能。所以说,systemd搞这个有啥用啊... 倒是前面被我们嫌弃的grub反而不可替代,因为它可以loopback引导live iso。
参考:
发布于 2016-03-05