浅谈操作系统引导过程
BISO
- 默认启动项(Boot Loader)数据:引导代码中存储EFI文件路径
- 无NVRAM,启动代码和分区表存储于磁盘0柱面0扇区(512字节)
UEFI
- 默认启动项(Boot Loader)数据:NVRAM中存储EFI文件路径
- 有NVRAM,启动代码存于NVRAM
- 分区表存储于磁盘最开始位置到1MB空间
启动项编辑工具
efibootmgr
efibootmgr可用来修改NVRAM中的数据
执行此命令会打印出在BIOS设置的启动项:
1 | efibootmgr |
删除
删除了以上引导项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
参考:
安装
- 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 |
配置
参考:
执行配置命令将根据/etc/default/grub等配置文件生成/boot/grub/grub.cfg文件(grub启动序列等配置)
1 | grub-mkconfig -o /boot/grub/grub.cfg |
安装os-prober将自动检测其他操作系统,比如Windows/其他Linux发行版,可使用命令开启/关闭检测,编辑文件/etc/default/grub
1 | false开启true关闭 |