昨天因为一次系统更新,我的双系统挂掉了。
更新之前系统情况:
- UEFI引导模式
- ubuntu windows双系统
- UEFI先启动ubuntu,ubuntu的启动菜单中有windows的启动项。但是windows的BCD配置文件中没有设置ubuntu。
- 之前UEFI的启动项中有没有设置windows的启动项不清楚
(因为一直正常没有手动启动过)。不过固态硬盘的ESP分区中的/EFI/Boot/bootx64.efi是windows的启动管理器(如果选择(默认或者手动)从该硬盘启动,UEFI引导会在该硬盘中搜索第一块格式为FAT/FAT32的分区,即ESP分区),UEFI会默认加载该启动管理器,即如果选择手动从固态硬盘启动,会打开windows。
这是这次导致引导出现问题的更新,更新之后的系统状况是
- windows ubuntu双系统
- UEFI中ubuntu的引导不见了,windows的更新添加了一个UEFI启动项 而且由于windows不能检测到其他的系统,导致ubuntu的引导丢失
最终的解决办法:
添加启动项
默认是UEFI引导,该方法是linux系统的启动菜单中有windows的方法。
既然UEFI的中的系统启动项不见了,可以使用EasyUEFI添加一个UEFI启动项,可以在下面的链接中下载EasyUEFI。
打开EasyUEFI,选择管理EFI启动项,创建新项,填写类型和描述,类型选择启动项对应的系统类型,描述随便,剩下的就是选择目标分区和文件路径。
UEFI方式会将引导项存储在一个FAT格式的磁盘分区中,磁盘分区不大,我的有260M,系统在建立引导时可能将磁盘命名为ESP或者EFI,这些用DiskGenius可以很方便的看到,除了查看分区,后面也可以用DG更改ESP分区来修复引导。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200311182444488.png
这是我电脑的FAT格式分区,名字叫SYSTEM_DRV,看文件夹就可以看出来。
开机后摁f12后进入UEFI启动项的选择界面。UEFI分为从磁盘启动还是从已创建的启动项启动。这里从https://www.jianshu.com/p/9166e8c00ca2参考一张图片(因为懒得重启了)
选择从磁盘启动后,UEFI会选择从磁盘中搜索EFI分区,用这个分区下的/EFI/Boot/bootx64.efi作为默认引导管理器,如上图的后两个启动项。
选择从已创建的启动项启动后,UEFI会从启动项记录的引导文件即目标系统的启动管理器开始下一步操作。
知道这一步就好搞了:1.找到ubuntu系统在EFI分区的启动管理器 2.用EasyUEFI添加启动项。 因为ubuntu的grub启动中包含windows的启动信息,所以windows也可以启动。
ubuntu采用同grub2启动,在/EFI/ubuntu下的grubx64.efi文件是ubuntu的启动管理器,EasyUEFI选择这个文件路径即可。
添加启动项后将启动项置顶,就可以正常登录ubuntu和windows了。
修改windows的BCD配置文件
使用启动项启动windows的启动过程如下:
UEFI----->EFI分区(FAT格式)----->\EFI\Microsoft\Boot\bootmgfw.efi(windows的启动管理器)----->读取BCD配置文件--------->根据BCD配置选择内核加载文件\Windows\system32\winload.exe。
在Legacy+MBR的引导方式下,EasyBCD也是通过更改BCD文件的内容,选择相应的启动项,但是在UEFI引导下,EasyBCD禁止添加linux引导。所以可以用DG将Microsoft文件夹下的BCD文件copy出来,再用BOOTICE更改BCD文件的内容。
参考下面链接可以更改Windows的BCD配置文件
http://www.upantool.com/jiaocheng/boot/9403.html
我觉得用智能编辑模式更好点,启动文件选择目标系统的启动管理器,和第一种方法的文件路径相同,将BCD文件修改后重启就可以在开机时看到windows的选择菜单了。
总结:
造成问题的原因是系统更新的时候windows改掉了UEFI的引导,但是又不像linux的grub2启动一样可以探测磁盘中的文件系统并添加到启动菜单中,才导致了ubuntu的UEFI启动丢失。
本来如果是legacy+mbr引导,使用easyBCD能很方便的在windows的BCD文件中添加ubuntu的引导。但是现在用的电脑使用的是UEFI+gpt的引导,easyBCD不支持,所以搞起来费了点时间。顺便整理一下资料,分享的同时以备以后查阅。
windows引导方式
现在windows的主要引导方式主要有两种:legacy BIOS和UEFI BIOS,还有两种磁盘分区表格式:MBR和GPT
MBR
windows的操作系统的MBR分区格式最多支持四个主分区或者三个主分区 一个扩展分区,扩展分区还可以分为多个逻辑分区。MBR分区表不支持大于2.2TB的分区,或者一些硬盘制造商将扇区升级到4KB,使MBR的有效容量上限上升到了16TB
GPT
GPT分区格式可以最多支持128个主分区,最大容量可以达到18EB
一般来说引导方式和磁盘分区表的组合有两种,即Legacy+MBR UEFI+GPT。因为,Legacy可以识别MBR分区格式,不能识别GPT分区格式。UEFI两种分区格式都可以识别,但是微软限制UEFI启动方式下只能将windows安装到GPT磁盘。
引导原理
bootloader:
广义上来说等于 BIOS+启动管理器+启动文件+载入程序
BIOS有 Legacy UEFI
启动管理器如 windows的bootmgfw.efi grub启动的grubx64.efi
启动文件如 windows的 winload.exe
狭义上来说bootloader指启动管理器和启动配置文件。
Legacy + MBR引导原理
引导过程:上电–>Legacy BIOS–>MBR–>DPT–>PBR–> Bootmgr(vista开始)/NTLDR–>BCD(vista开始)/boot.ini–>Winload.exe–>内核加载 –>windows vista/windows xp
UEFI+GPT引导原理
引导过程:上电–>UEFI–>GPT分区表–>EFI分区–>\efi\Microsoft\boot\bootmgfw.efi–>efi\Microsoft\BCD→\Windows\system32\winload.efi。
参考文档:
- https://blog.csdn.net/liao20081228/article/details/82591728
- https://blog.csdn.net/li_qing_xue/article/details/79228867
- https://www.jianshu.com/p/9166e8c00ca2
- https://www.cnblogs.com/sddai/p/6354289.html
- https://blog.csdn.net/donglany/article/details/79961938
- https://bbs.deepin.org/forum.php?mod=viewthread&tid=147753&extra=