BISO

  • 默认启动项(Boot Loader)数据:引导代码中存储EFI文件路径
  • 无NVRAM,启动代码和分区表存储于磁盘0柱面0扇区(512字节)

UEFI

  • 默认启动项(Boot Loader)数据:NVRAM中存储EFI文件路径
  • 有NVRAM,启动代码存于NVRAM
  • 分区表存储于磁盘最开始位置到1MB空间

启动项编辑工具

efibootmgr

efibootmgr可用来修改NVRAM中的数据

执行此命令会打印出在BIOS设置的启动项:

1
2
3
4
5
6
7
8
9
$ efibootmgr                                          
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0001,0002,0003,0004
Boot0000* Arch Linux HD(1,GPT,c8f79300-07ea-4a02-8bc6-7cb19803be54,0x800,0xfa000)/\EFI\ARCHLINUX\GRUBX64.EFI
Boot0001* Mac OS HD(1,GPT,c8f79300-07ea-4a02-8bc6-7cb19803be54,0x800,0xfa000)/\EFI\BOOT\BOOTX64.EFI
Boot0002* UEFI:CD/DVD Drive BBS(129,,0x0)
Boot0003* UEFI:Removable Device BBS(130,,0x0)
Boot0004* UEFI:Network Device BBS(131,,0x0)

删除

删除了以上引导项Mac OS(操作要非常小心,不然会导致无法引导系统启动)

1
efibootmgr -b 1 -B

Bootice

刚开始接触Bootice是从WePE系统上自带的,有图形化界面,支持Windows系统,功能还是相当强大的,不只启动编辑

UEFI系统

UEFI总会被人们称为BIOS,这两个其实不是同一个时代的产物,只是习惯。

UEFI一般位于Boot的选项卡中可以进行启动项编辑,但有些厂商的UEFI固件开发的让人难以琢磨,比如联想的M73主板的UEFI编辑启动顺序后总是会往启动项中添加一大堆启动项,可能是个BUG。

Boot Loader

引导加载程序(Boot Loader),一般是以.efi结尾的文件,位于ESP分区,启动时会被UEFI启动项引导启动。

常见

ESP分区

EFI系统分区(ESP),一般位于/boot,建议大小500MB-1GB

EFI文件

由BIOS/UEFI加载启动EFI文件,EFI文件是Boot Loader程序的启动入口(相当于Main函数)

路径

一般情况下存储于:

  • esp/EFI/BOOT/BOOTX64.EFI(64设备)
  • esp/EFI/BOOT/BOOTIA32.EFI(32位设备)

UEFI会默认加载这些路径,像live版的系统装在U盘,可能按F12/F1/F2/F7/F9/F10/Enter/Del/Esc等键即可选择启动

不同的Boot Loader也会有不同的EFI存放路径但都会放置在esp/EFI/<Boot Loader name>(esp代表boot分区)

GRUB

参考:

ArchWiKi:GRUB

安装

  • grub 引导加载程序
  • efibootmgr 自动添加引导UEFI菜单
  • os-prober 自动配置检测其他操作系统

生成Boot Loader

生成引导Boot Loader到/boot目录,EFI文件生成至/boot/EFI/ArchLinux/grubx64.efi,调用efibootmgr添加引导项至UEFI启动菜单,生成/boot/grub引导程序

1
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ArchLinux

配置

参考:

ArchWiKi:GRUB/Tips and tricks

执行配置命令将根据/etc/default/grub等配置文件生成/boot/grub/grub.cfg文件(grub启动序列等配置)

1
grub-mkconfig -o /boot/grub/grub.cfg

安装os-prober将自动检测其他操作系统,比如Windows/其他Linux发行版,可使用命令开启/关闭检测,编辑文件/etc/default/grub

1
2
# false开启true关闭
GRUB_DISABLE_OS_PROBER=false