分享

UEFI下Windows启动引导的顺序(附带linux双系统)

 imnobody2001 2023-03-10 发布于黑龙江

这里均以64位系统(windows和linux均是),gpt分区,UEFI引导作为例子,现在基本上不会不支持吧。

windows下UEFI引导文件的载入顺序

主板启动windows的一般有两种方法:

windows boot manager启动

硬盘直接引导启动

这里用vmware的虚拟机来演示

主板bios中分别是途中前两项(第二项是你自己的硬盘名称,我这里是vmware虚拟机的SCSI硬盘,后面的四个不用管)

在安装windows的时候,系统会位我们建立一个ESP分区,大约200M到300M左右,里面的目录结构大概是这样的:(使用diskgenius等软件可以读取内部文件)EFI ├── Boot │ └── bootx64.efi └── Microsoft  ├── Boot  │ ├── BCD  │ ├── bootmgfw.efi  └── Recovery

这里我省略了一些字体等其他文件,只列出了主要的文件

方法1,即windows boot manager 进入系统

① 启动程序会找到指定GPT硬盘的fat格式的分区(fat32、fat16等),即esp、efi分区(别名而已)

注意是指定的GPT硬盘,这里是windows创建它的boot manager时已经写入了nvram,告诉他去哪块硬盘找。

② 寻找EFI/Microsoft/Boot/bootmgfw.efi 文件

③ bootmgfw.efi文件去寻找 EFI/Microsoft/Boot/BCD 文件

通常,bcd文件中里面可以放入一些不同的启动项供用户选择启动,如windows双系统,PE等的启动项,具体看下图:

在这里插入图片描述

④ 当你选择了启动windows后,BCD文件会找到对应分区(大部分人应该是C盘)下的\Windows\system32\winload.efi 文件

⑤ 由winload.efi加载完成windows系统

方法2,即选择硬盘启动

① 启动程序会寻找这块硬盘的的EFI分区

② 寻找EFI/Boot/bootx64.efi 文件

③ bootx64.efi文件去寻找 EFI/Microsoft/Boot/BCD 文件

接下来步骤和方法1一样。

按照上面的步骤来看,bootx64.efi和bootmgfw.efi好像是同一个文件,实际上他们确实是同一个文件,即想要正常启动系统,BCD文件是必须有的,而bootx64.efi和bootmgfw.efi两个文件二选一保留下来就行了。

同样,当你把硬盘拔下来插入别的电脑,一般可以直接使用方法2启动硬盘里的windows(这里忽视了驱动问题)

接下来就是安装linux,这里我安装的是archlinux

根据arch的官方wiki安装,我这里分出了三个分区

swap分区、根目录分区、home目录分区

已经存在的EFI分区挂载点为/boot/efi

即这样顺序(这里以上文说的bootx64.efi的路径为例子):/boot/efi/EFI/boot/bootx64.efi

最后生成grub引导的代码,两行grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=archlinux grub-mkconfig -o /boot/grub/grub.cfg

这些代码再Arch Linux的官方wiki都可以找到

重启进入主板bios会发现多了个archlinux的启动项,等级和性质和windows boot manager一样

并且你会发现EFI分区下的EFI文件夹下多了个archlinux文件夹

接下来进入linux系统sudo vim /boot/grub/custom.cfg

在里面加入windows的启动项(就是把上文的两个efi文件任意一个加入linux的grub引导中):menuentry "windows 10" {     search --no-floppy --fs-uuid --set=root 自己的fs_uuid     chainloader /EFI/Microsoft/Boot/bootngfw.efi }

其中“自己的fs_uuid”使用blkid命令查看,如图:

在这里插入图片描述

这里我的efi分区为/dev/sda1,所以可以看到是38A0-4EA3

我这里是使用bootngfw.efi文件,你也可以使用bootx64.efi,但是有时候该文件可能会被你新装的linux更改成指向linux系统,比如安装manjaro(archlinux分支,图形安装界面),一路下一步后,安装完,EFI文件夹里面会多一个manjaro文件夹,以及顺带着把bootx64.efi文件改了,导致你用方法2启动系统默认进入的是linux系统。

同时可以加入menuentry "System shutdown" {   echo "System shutting down..."   halt } menuentry "System restart" {   echo "System rebooting..."   reboot }

分别是关机和重启选项,以下是效果图

在这里插入图片描述

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多