做系统一大头疼事情就是UEFI/BIOS/MBR/GPT等等的选择。系统平台和硬件日新月异,基本上中文站的解释正确性参差不齐,出了问题也查不到正确解决方案,我也遇到过很多次系统启动的问题(这就是为什么我喜欢用英文系统,不用自己翻译直接就能谷歌一下到正确答案)。因此写一篇详解,正确解决一下在系统启动上的疑问。
顺便:b站的专栏编辑器真的是弱智。
目录MBR/GPT和BIOS/UEFI区别与选择四者的区别与关系
如何查看自己的配置
UEFI/BIOS和GPT/MBR的选择
BIOS启动详解
UEFI启动详解EFI分区与文件
UEFI boot manager与多系统
BIOS设置与CSM兼容模式
启动常见问题
MBR/GPT和BIOS/UEFI区别与选择
MBR/GPT是每个硬盘的分区格式。MBR是旧的格式,最多4个主分区,不支持2TB的分区。GPT是新的格式,没有上述限制(不过老的分区工具会有2TB分区的限制)。
在引导系统上,BIOS/UEFI是如何从主板固件载入系统的两种方式。传统BIOS是老式的启动方式,启动上没有任何功能。UEFI是新式启动方式,支持许多功能,更加灵活,也可以兼容BIOS启动方式。新的主板都支持UEFI,但是每家主板厂商每代主板支持的程度很可能不同。多系统的话用UEFI会方便很多。
UEFI/BIOS与MBR/GPT之间没有任何关系。UEFI可以支持MBR,BIOS也可以支持GPT。和HDD/SSD与SATA/M2关系差不多,SSD有SATA和M2两种接口,HDD有SATA接口,当然也可以做成M2的,不过这搭配实在蠢得没人做这种东西而已。但是主板不一定支持UEFI启动MBR分区的硬盘。如果存在MBR的硬盘,主板固件实现有可能会降到BIOS兼容模式启动,导致UEFI系统无法启动。
如何查看自己的配置
中文网上一个常说的说法是UEFI的主板有华丽的图形界面。这个说法是有问题的。现在主板复杂的图形界面的确是UEFI的主板才能支持,但是部分OEM的主板设置界面也很原始,但其实是UEFI的。UEFI的一个特性是启动时可以只有部分屏幕动画(?我没去查这个功能叫啥)。例如下图,主板logo还在,Windows启动的转圈圈可以显示。如果是传统BIOS启动的话则只有黑屏上一个转圈圈,因为显示主板logo的屏幕已经被刷掉了。
因此Windows一个简便的方法区分UEFI还是传统BIOS启动的方法就是看主板logo还在不在。
当然非Windows的系统启动时不一定还会显示主板logo。并且UEFI启动的系统的启动画面并不一定华丽。例如Arch的安装盘,BIOS启动画面比UEFI华丽的多:这是传统BIOS启动(网图,没找到更好的)
这才是UEFI启动
区分MBR/GPT,查看硬盘分区格式,可以Win+X,磁盘管理,右键自己的系统所在硬盘,然后如图查看
要查看自己的系统启动方式是什么,可以Win+R,输入msinfo32回车,如图。传统就是传统BIOS启动。
UEFI/BIOS和GPT/MBR的选择
在选择上,若是老系统没有需要,不需要在意,区别不大。如果Win 10想从MBR+BIOS迁移至GPT+UEFI,设置——更新和安全——恢复——高级启动——立即重启。重启后疑难解答——高级选项——命令行模式进入Windows PE。命令行执行mbr2gpt /validate,如果没有报错,执行mbr2gpt /convert,然后重启即可。
装新系统若自己不是很懂也不想折腾也没有功能上的需求,装Win 10就不需要在意。如果要装单个非Windows系统可以选择BIOS+MBR,因为主板厂商和其他操作系统的实现参差不齐,目前UEFI坑还是太多了。有能力的话尽量还是用新的UEFI。要装多系统需要选择UEFI,否则更麻烦。
要新装UEFI启动的Win的话,推荐在主板把CSM兼容模式关闭,不然可能会装成传统BIOS模式。下载原版系统镜像,推荐使用Rufus(https://rufus.ie/)烧写。选择镜像和u盘后,分区模式选择GPT,启动模式选择UEFI,然后烧写启动u盘。然后按流程安装。新硬盘的话直接点击空硬盘即可,不需要手动分区。
BIOS启动详解
BIOS的启动会按照你所设置的顺序依次尝试读取每个硬盘开始部分的一个特定区域。如果读取到boot loader就把相关代码载入内存,接下来就交给CPU开始处理和启动系统。如果没读到boot loader则按顺序读取下一个硬盘,若都没读到就是常见的:
因此BIOS的设计是过时的:boot loader空间有限无法实现更多功能;boot loader空间位置固定灵活性差;BIOS中无法读取启动系统信息,只能按硬盘启动,硬盘中多系统无法直接选择。
UEFI启动详解
EFI分区
相比BIOS固定的位置,UEFI启动会查找硬盘中的EFI分区。EFI分区一般为FAT32格式,被标记为ESP。不需要为第一个分区。例如下图中两块硬盘,第一块第一个分区为EFI分区,第二块硬盘第三个分区为EFI分区。
Windows默认设置的EFI分区为100M,单系统是足够的,但要多系统的话可能会出问题,见下面常见问题。多系统的话建议EFI分区设200-500M。(顺便一提,分区表和raid格式数据记得备份保存,最近刚因为分区表损坏丢了数据)
EFI分区中除了资源文件,最主要用于启动的是一些*.efi文件。如图。这些efi文件会由UEFI boot manager读取启动。
UEFI boot manager
UEFI启动会使用UEFI boot manager,是主板固件中的程序。可以通过EFI shell修改;如果系统是通过UEFI启动的,则也可以通过程序修改。UEFI boot manager会默认读取\EFI\Bottt\boot{架构}.efi,在64位系统上就是bootx64.efi,以下默认说bootx64.efi。
本来写完了4k字,不小心关了。垃圾b站写着已保存但没有自动保存就只剩到这了,前面的修订也没了。反正没人看剩下懒得仔细重写了,就随便写写了。
单Windows系统若未设置主板启动项,会引导bootx64然后引导\EFI\Microsoft\Boot\bootmgfw.efi,即Windows boot manager启动。
多Windows也只有一个bootmgfw.efi,然后由Windows boot manager统一管理,在windows里可由msconfig设置。
除了默认读取的bootx64.efi,如果安装盘的系统是UEFI启动的话,可以设置主板UEFI启动项,即将多个系统的.efi文件路径设置进主板boot manager中,如下图。
多其他系统就如上图,每个系统一个efi,这个是系统安装时加入主板设置的,如果安装过程正确会加入到UEFI启动项中,就可以在启动项中直接看到每个系统,而不是BIOS一样只能看到硬盘。
不过如果安装盘的系统是传统BIOS启动的话,则无法修改主板EFI启动项。
另外进入主板的EFI shell也是可以手动加启动项的。
这个启动项也不是很智能,像图上的Ubuntu已经不存在了,但因为这个启动项还在主板设置中,所以还是能看到这个启动项,但当然是没法正常启动的。
BIOS设置与CSM兼容模式
主板设置中的CSM兼容模式是UEFI用于兼容传统BIOS启动等功能用的。
CSM关闭时仅能看到存在EFI分区的硬盘和设置的EFI启动项。如果(硬盘不存在EFI分区)或者(不存在bootx64.efi 且 未设置启动项)就不显示。
CSM开启时显示所有硬盘和EFI启动项,但由于各家主板厂商实现问题可能会有很多坑(尤其是老主板),如果仅用EFI启动的话最好关闭。见常见问题。
常见问题
Windows更新提示无法更新系统保留的分区
EFI分区不够大,中文解决方法教程写的都是垃圾。见https://www.thewindowsclub.com/we-couldnt-update-system-reserved-partition,懒得重写翻译了。
无法启动UEFI系统
有的主板在存在BIOS启动的硬盘时,可能会降级到传统BIOS启动。拔掉MBR的硬盘,关闭CSM再测试。
有的系统安装方式是只添加自己路径下的.efi文件,然后添加主板启动项来启动,而不会添加bootx64.efi。这样的话将硬盘放到其他电脑上则会因为既没有默认efi文件也没有启动项而导致看不到启动项,无法启动。
如果手动启动了启动项又回到主板设置界面,可能efi文件不存在或该efi引导的系统不存在。检查默认路径bootx64.efi和\EFI\Microsoft\Boot\bootmgfw.efi(如果是Win,不是的话自行检查路径)是否正确存在。
部分主板可能只默认载入windows的boot manager路径而不是bootx64,非Windows系统可能需要手动添加。见https://wiki.archlinux.org/index.php/GRUB/EFI_examples