系统启动项/系统引导原理(BIOS、UEFI、GRUB)
先说下写本文的目的。很多学生党、程序猿经常喜欢倒腾双系统(包括我)。每次瞎折腾以后,总会莫名其妙出现系统启动问题;每次重装双系统,都要网上看半天教程;本着求知精神,我们当然知其然,还要知其所以然。
知道了原理,实践就不会那么茫然了。由于目前主流方式是UEFI+GPT方案。因此本文重点介绍也偏向于此。
名词解释
UEFI
统一可扩展固件接口(英语:Unified Extensible Firmware Interface,缩写UEFI),用来替代BIOS的方案。
GPT
guid partition table,guid分区表。属于UEFI标准的一部分。
ESP分区
efi system partition,efi系统分区,一个fat32格式的分区。uefi固件从这里加载UEFI引导器和应用程序。
bootloader
系统启动引导器,作用是为了让机器知道真正的系统所在的位置,以及启动入口。
GRUB
全称 GRand Unified Bootloader。G=是一个GNU项目的多操作系统启动程序,也是目前使用最广泛的bootloader.注:bootloader的根本目的是启动内核
重要文件介绍
bootmgfw.efi
bootmgfw.efi 是 Windows默认引导文件。windows安装后,引导文件位于ESP分区如下目录:/EFI/Miscosoft/Boot/bootmgfw.efi。
grubx64.efi
使用grub加载器的引导文件。
efibootmgr
linux中的EFI启动管理器,用来管理NVRAM启动入口以及顺序。
NVRAM
UEFI规范中,关于NVRAM的正解:
NVRAM是BIOS ROM中的一段区域,一般定义为64k byte, 现在EFI把所有的变量都存在这里。
bootx64.efi
bootx64.efi 是计算机默认引导文件,默认的路径是/EFI/Boot/bootx64.efi。只有当所有的启动入口都不可用,才会尝试使用该文件去启动。
该文件的内容是等同于grubx64.efi或者bootmgfw.efi。
启动流程
1.首先根据启动入口,确定需要加载的启动器(.efi文件)
2.对于Linux系统,或者是使用grub引导的系统,会加载到grubx64.efi文件
3.grub加载/boot/grub下的模块及配置文件
4.加载系统启动内核
参考文献
https://wiki.archlinux.org/index.php/GRUB#Installation
https://staight.github.io/2018/09/05/%E5%BC%95%E5%AF%BC%E6%80%BB%E7%BB%93/