UEFI启动分析 UEFI设置启动项

UEFI启动时分为两种情况

  1. 启动时只能选择从那个磁盘启动,如下最后两项为两个磁盘:


    启动选项(选择启动磁盘)

    在用户选择了启动磁盘后,UEFI会在这个磁盘中寻找EFI分区,然后找这个分区下的/EFI/Boot/bootx64.efi(UEFI可以执行的二进制文件),由这个文件进行下一步操作(引导操作系统),这个文件通常由操作系统给出,在光盘/EFI/BOOT目录下

  2. UEFI中已经创建了启动项如图前两个:


    启动选项(选择启动磁盘)

    这个启动项记录了引导文件(*.efi)所在的磁盘和分区以及文件名,直接执行这个efi文件即可开始进行下一步操作(引导操作系统)

以下进行验证:

磁盘基本信息

磁盘信息
磁盘信息
block ID

可见磁盘第二个分区(EFI分区)挂在在/boot/efi中,查看:

/boot/efi/
/boot/efi/EFI/Microsoft/

开机启动项直接选择磁盘方式

注意到bootx64.efi文件,电脑启动,如果选择启动项是磁盘(比如ATA HDD0:

启动选项(选择启动磁盘)

),BIOS(应该说是UEFI)会在整个磁盘寻找EFI分区,即这里的/dev/sda2(EFI System),然后在Boot目录下寻找bootx64.efi并执行,这个文件会找到需要执行的开机引导程序,比如Windows Boot Manager或Grub,然后后面的引导都交给它们处理
所以在系统安装包里的/EFI/BOOT/目录下会有这个文件(windows的是文件名是bootmgfw.efi),系统安装时会将这个文件拷贝到EFI分区的Boot目录下并改名为bootx64.efi
Boot下的bootx64.efi就是Windows的bootmgfw.efi文件

Ubuntu安装时不会将bootx64.efi复制到EFI分区的/EFI/Boot/中,那个依然是Windows的文件,所以开机按F12选择从磁盘启动后,会进入windows boot manager,Ubuntu的做法是在BIOS添加一个启动项,即方法2,这个选项会调用EFI分区/EFI/Ubuntu文件夹下面的文件(如果EFI分区里没有这个文件夹则引导失败,选择这个启动项会看起来无任何反应)。
grub.cfg指定了启动的磁盘(磁盘0分区7的uuid(hd0,gpt7)挂载在root(根文件目录)),以及configuration file为/boot/grub/grub.cfg,然后根据这个配置文件grub进行系统引导,接下来就交接给grub啦~~

/boot/grub/

grub.cfg

添加UEFI启动项

UEFI启动项

在开机进入BIOS后,在BOOT项可能会有添加启动项的选项(电脑没有这个功能,没试╮(╯_╰)╭),如果没有,可以使用工具efibootmgr来添加
efi添加启动项

! 这里-d指定磁盘,-p指定分区号(EFI分区),-c表示创建,-L表示名称,-l指定有效的启动efi文件(EFI分区中的有效efi文件)
将elf文件放到EFI分区中

再来一个,改成普通分区


Paste_Image.png

再来一个,改成使用EFI分区的一个名称错误的efi文件


EFI分区elf文件
efi信息

重启,每个启动项试一次,发现只有Test可以正确进入,原因是Test2的efi文件使用的是非EFI分区,Test3使用的grub.efi文件不能正确引导

应用

  • 制作多系统引导
  • 引导坏了可以手动进行修复

参考

https://www.zhihu.com/question/22502670

推荐阅读更多精彩内容