先插一句话,现在很多人用UEFI BIOS这个称呼。这里为了区分:BIOS一律指传统BIOS,

UEFI BIOS一律称呼为UEFI。

UEFI下的BIOS设置,一律称为UEFI设置。

写这篇的原因

想直接看干货的跳过这节吧。

一直就想写这个,因为自己折腾Hackintosh。

最初BootThink,后来Chameleon,现在Clover。

每次接触新玩意,都要纠结好久的“安装”问题:我这个磁盘默认BootThink启动,我想重装Windows,会覆盖引导,怎么办。

BootThink要求启动分区是NTFS,这是什么鬼要求?想换个Kext还得重启回Windows?

这个Chameleon太老了,我想换新版本,直接替换ISO么?

听说了个叫XPCBoot的东西,那是什么玩意?教程怎么只给了一个装Duet的工具?Efildr20这个文件在哪下载?

这个什么iBoot,听说用这个的Hackintosh能打开BootCamp助理?但我怎么启动到了一个类似于BIOS设置的地方?

我这个老华硕装了Clover怎么启动不了?黑屏卡在那?屏幕只有一个6?

哇,这个老电脑平均一万次才能进Clover一次,怎么启动个Clover就要二十分钟?

新电脑支持了UEFI,终于能用Clover了!这个神马MBR、GPT是怎么回事?

教程里把Clover引导做在了U盘上,我怎么能摆脱优盘开机?

………………

直到我搞懂了Clover,直到我搞懂了UEFI,突然觉得:“哇!懂了原理之后,这些玩意一点都不难啊!”

嗯。上面是根因。

诱因是前几天有人问了我上面的加粗的那个问题。

其实这篇文章,也适合以下用户:重装Windows,提示我什么MBR、GPT,不让装?

我想装个Linux,但我希望默认还是Windows。

我想重装Windows,可是我开机不再默认Grub,怎么回Linux?

“Windows无法定位现有分区,也无法。。。。。”

我电脑好几个磁盘,我把Windows装到了磁盘2上,怎么开机我在UEFI里选磁盘二开不开?

装Windows时候听说有个什么操作能装在VHD上?

那个什么EFI分区是干嘛的?

UEFI的启动U盘为啥非得FAT32?

不需要第三方工具就能做UEFI下的Windows安装盘?

以前我一直装Ghost版的Windows,UEFI之后真的没法Ghost了么?

我电脑是UEFI的,想装Linux,但我手头没优盘,听说也能搞定?

标题说是科普,可是我可能会习惯性的啰嗦技术细节。我尽量科普吧。

先说传统BIOS吧

一句话概括:BIOS只认识设备,不认识分区、不认识文件。

BIOS启动的时候,按照CMOS设置里的顺序,挨个存储设备看:(此处不讨论PXE和光盘)

这个存储设备的前512字节是不是以0x55 0xAA结尾?

不是,那就跳过。找下一个设备。

是的话,嗯,这个磁盘可以启动,加载这512字节里的代码,然后执行。

执行之后,后面的事,几乎就跟BIOS没啥关系了。

就是这样。

至于后面启动什么系统,取决于这512字节里存了谁家的代码。这个代码是各家的系统安装程序写进去的,目的是启动自家系统。比如你装(或者重装)了Windows,这里面就变成了Windows的启动代码。

比如你装(或者重装)了Linux,这里面就会变成Grub的启动代码。

顺便这512字节包含了MBR分区表的信息。但是有人可能注意到,上面半句没提“系统装在哪个分区上了”,硬盘有几个分区。

其实BIOS并不认识分区表。哪怕磁盘上没有分区表,没分过区,只要前512字节有0x55 0xAA的结尾,有合适的引导代码,也是能启动的。

然后说UEFI

(此处只讨论民用64位架构下的UEFI。)

一句话概括,UEFI认识设备,还认识设备ROM,还认识分区表、认识文件系统以及文件。

UEFI启动的时候,经过一系列初始化(SEC、CAR、DXE什么的,SEC、CAR你们不需要懂。下一节里会说DXE阶段是干嘛的)

然后按照设置里的顺序,找启动项。启动项分两种,设备启动项和文件启动项:

·文件启动项,大约记录的是某个磁盘的某个分区的某个路径下的某个文件。对于文件启动项,固件会直接加载这个EFI文件,并执行。类似于DOS下你敲了个win.com就执行了Windows 3.2/95/98的启动。文件不存在则失败。

·设备启动项,大约记录的就是“某个U盘”、“某个硬盘”。(此处只讨论U盘、硬盘)对于设备启动项,UEFI标准规定了默认的路径“\EFI\Boot\bootX64.efi”。UEFI会加载磁盘上的这个文件。文件不存在则失败。

就是这样。

至于这个EFI文件会干嘛,主板是不管的。

但是随着Windows8.x,以及UEFI标准2.x,推出了一个叫做SecureBoot的功能。开了SecureBoot之后,主板会验证即将加载的efi文件的签名,如果开发者不是受信任的开发者,就会拒绝加载。

比如CloverX64.efi就好像没有签名。

UEFI的DXE与磁盘上的文件

一个磁盘分区,要格式化之后,才能往里存文件,格式化的时候,又能选择不同的文件系统。

比如Win10可以选FAT32、NTFS、exFAT、ReFS几种,Linux可以选ext2、ext3、ext4、FAT32等,macOS可以选FAT32、HFS+、APFS、exFAT几种。

其实每个操作系统,都会有文件系统驱动,然后才能读取某种文件系统。

比如Windows带了上述四种文件系统等驱动,Linux带了FAT32、ext等文件系统等驱动,macOS带了上述四种驱动以及NTFS等只读驱动。

设备也是一样的。

原版的WinXP只带了IDE驱动,没有SATA驱动;原版Win7只带了IDE和SATA驱动,没带NVMe驱动;Win8/Win10则带了IDE/SATA和NVMe三种驱动;macOS10.12带了SATA驱动以及苹果专用NVMe磁盘的驱动;macOS10.13带了SATA和标准NVMe驱动。

UEFI作为一个模糊了固件和操作系统界限的东西,作为一个设计之初就考虑到了扩展性的东西,它也是有驱动程序的。启动过程中的DXE阶段,全称叫Driver eXecution Environment,就是加载驱动用的。

首先各种PCI-E的设备,比如显卡,比如PCI-E的NVMe固态硬盘,都有固件。

其中支持UEFI的设备,比如10系列的Nvidia显卡,固件里就会有对应的UEFI的驱动。

题外话:浦科特的NVMe固态硬盘,UEFI版固件是没有那个丑丑丑的Logo的哦。那个丑丑丑丑的Logo是浦科特的BIOS版(Legacy版)固件。它被加载是因为主板默认为了兼容性,“StorageOptionROM”选项默认是Legacy的。改成UEFI,就见不到那个丑丑丑丑丑的浦科特Logo页了。

UEFI启动后,进入了DXE阶段,就开始加载设备驱动,然后UEFI就会有设备列表了。

对于其中的磁盘,UEFI会加载对应的驱动解析其中的分区表(GPT和MBR)。然后UEFI就会有所有分区的列表了。然后UEFI就会用内置的文件系统驱动,解析每个分区。然后UEFI就会认识分区里的文件了。比如“\EFI\Boot\bootX64.efi”。

作为UEFI标准里,钦定的文件系统,FAT32.efi是每个主板都会带的。所有UEFI的主板都认识FAT32分区。这就是UEFI的Windows安装盘为啥非得是FAT32的。

除此之外,苹果的主板还会支持hfs分区。如果某天Linus Torvalds推出了主板,我猜这主板一定会带EXT4.efi,哈哈哈哈哈。

如同Windows可以安装驱动一样,UEFI也能在后期加载驱动。

比如CloverX64.efi启动之后,会加载\EFI\Clover\drivers64UEFI下的所有驱动。包括VboxHFS.efi等各种efi。网上你也能搜到NTFS.efi。

再比如,UEFIShell下,你可以手动执行命令加载驱动。

题外话:一个没收钱的“广告”,我真的好喜欢Paragon这个公司啊。推出了NTFS for Mac、HFS for Windows、ExtFS for……等一套文件系统驱动啊,我买了好几份。后来看到这公司还推出了UEFI版的文件系统驱动合集,好想搞一套,但可惜这玩意只卖给主板厂商。

再插句嘴,Apple随着macOS10.13推出了APFS,很良心的放出了apfs.efi,广大Hackintosh用户的福音啊,把这玩意放进Clover里就能识别APFS分区里的HighSierra了!

说说EFI系统分区

UEFI规范里,在GPT分区表的基础上,规定了一个EFI系统分区(EFI System Partition,ESP),ESP要格式化成FAT32,EFI启动文件要放在“\EFI\”文件夹下面。

比如Windows的UEFI启动文件,都在“\EFI\Microsoft”下面。

比如Clover的东西,全都放在“\EFI\Clover”下面。

但是Apple比较特殊,它的主板直接去HFS/APFS分区找启动文件。然而即便如此,Mac的ESP里还是会有一堆Apple的文件。Macbook上的ESP分区里的“\EFI\Apple”文件夹

说正事,上面“写这篇文章的原因”里加粗的那个问题。

根据UEFI标准里说的,你可以把优盘里的“\EFI\Clover”文件夹,拷贝到硬盘里的ESP对应的路径下。然后把“\EFI\Clover\CloverX64.efi”添加为UEFI的文件启动项就行了。

Windows的BCD命令,其实也可以添加UEFI启动项,然而我没搞懂怎么弄。我更喜欢用EasyUEFI来搞这些操作。但是免费版的EasyUEFI不支持企业版Windows哦~某些Win10用户要被拒之门外了。

这一节的最后,再说说“\EFI\Boot”这个文件夹。这个文件夹,放谁家的程序都行。无论是“\EFI\Microsoft\Boot\Bootmgfw.efi”,还是“\EFI\Clover\CloverX64.efi”,只要放到“\EFI\Boot”下并且改名“bootX64.efi”,就能在没添加文件启动项的情况下,默认加载对应的系统。

举个例子:一个U盘,你想做成Windows安装盘+Hackintosh安装盘,该怎么做?你划分俩分区,第一个分区格式化成FAT32,第二个分区HFS+。

苹果系统下把第二个分区做成安装盘。苹果启动盘做好了。

把Windows的ISO镜像里的文件拷贝到第一个分区。Windows安装盘做好了。

然后Clover拷贝到第一个分区的“\EFI\Clover”文件夹下。Clover的东西也做好了。

最后,怎么让这个U盘插到任何电脑上都默认启动Clover呢?答案是,把“\EFI\Boot”下的“bootX64.efi”换成Clover的就可以了。那个文件夹放谁家的efi文件,都要改名“bootX64.efi”哦。

嗯,这一节就写到这吧。

Windows 8/8.1/10在UEFI和BIOS下,各种启动文件的顺序

BIOS下:MBR->PBR->bootmgr->WinLoad.exe

按照前文说的,BIOS加载某个磁盘MBR的启动代码,这里特指Windows的引导代码,这段代码会查找活动分区(BIOS不认识活动分区,但这段代码认识活动分区)的位置,加载并执行活动分区的PBR(另一段引导程序)。

Windows的PBR认识FAT32和NTFS两种分区,找到分区根目录的bootmgr文件,加载、执行bootmgr。

bootmgr没了MBR和PBR的大小限制,可以做更多的事。它会加载并分析BCD启动项存储。而且bootmgr可以跨越磁盘读取文件了。所以无论你有几个磁盘,你在多少块磁盘上装了Windows,一个电脑只需要一个bootmgr就行了。bootmgr会去加载某磁盘某NTFS分区的“\Windows\System32\WinLoad.exe”,后面启动Windows的事就由WinLoad.exe来完成了。

重点来了,为什么图中有两组虚线?

因为“启动磁盘”和“装系统的磁盘”可以是同一个磁盘,也可以不是同一个。“启动分区”和“系统分区”可以是不同磁盘的不同分区,也可以是相同磁盘的不同分区,也可以是同一个分区。

这就解释了,为什么,有的时候,Windows装在磁盘2上,却要在BIOS里选磁盘0启动了。

因为bootmgr可能在磁盘0上。

UEFI下:UEFI固件->bootmgfw.efi->WinLoad.efi

根据前文说的,UEFI启动项分为文件启动项和设备启动项。

通常情况:主板UEFI初始化,然后找到了默认启动项“Windows Boot Manager”。里面写了bootmgfw.efi的位置。固件加载bootmgfw.efi。bootmgfw.efi根据BCD启动项存储,找到装Windows的磁盘的具体分区,加载其中的WinLoad.efi。由WinLoad.efi完成剩下的启动工作。

其中的虚线,根上面的一样,意思是,Windows启动盘和EFI启动盘,可以是一个硬盘,也可以是不同的硬盘。所以对于UEFI来说,启动盘是bootmgfw.efi所在的那个盘。

回答一下上面列出的几个问题以前我一直装Ghost版的Windows,UEFI之后真的没法Ghost了么?

先说一句,真不推荐用网上的Ghost版Windows安装盘来装系统了。微软公开放出了官方的原版Win10下载链接,而且还有启动盘制作程序。链接在这:下载 Windows 10。写这个的原因,是因为,有时候,自己做的Ghost备份,还是挺好用的。

并不是不能Ghost了。但是传统的Ghost盘,都是只Clone了C盘,没有考虑到“UEFI下,启动盘是ESP分区,跟Windows不是同一个分区”的事。

其次,Ghost备份,并不能备份分区的GUID。还原之后,ESP分区里的BCD中记录的Windows在“某某GUID的分区上”,就可能找不到对应的GUID了。这时候,需要用bcdedit命令,或者BCDBoot命令,修改BCD存储。鉴于目前的Ghost盘,很少基于DOS了,如果是基于WinPE的,bcdedit命令和bcdboot命令都是已经内置了的。只要制作者在批处理文件里,在Ghost之后,调用bcdedit命令改一下bcd配置就行了。

而且,即使没Ghost备份ESP分区,你依然可以用bcdboot命令来生成ESP分区的内容。同样,在WinPE下,批处理文件里,Ghost还原之后,使用BCDBoot命令生成启动文件就行了。

总结一下,Ghost还原Windows分区之后,调用BCDBoot配置启动项即可。

再说一句,真不推荐用网上的Ghost版Windows安装盘来装系统了。微软公开放出了官方的原版Win10下载链接,而且还有启动盘制作程序。链接在这:下载 Windows 10。写这个的原因,是因为,有时候,自己做的Ghost备份,还是挺好用的。“Windows无法定位现有分区,也无法。。。。。”

这种报错信息,如果是在UEFI模式下,一般是因为,你有多块硬盘,而且超过一块硬盘上,有ESP分区。只要把不想用的ESP分区删掉,或者拔掉对应的硬盘,保证装Windows的时候,只有一个硬盘上有ESP分区,即可。

如果实在做不到,考虑用DISM.exe安装Windows吧。Win7的DISM.exe真的太弱了。尽量用Win10安装盘或者Win10PE里的DISM.exe。不需要第三方工具就能做UEFI下的Windows安装盘?

确实啊,根据上文说的,U盘,格式化成FAT32,然后把Windows安装盘的ISO里面的东西拷贝到U盘就行了。(适用于Win8/8.1/10以及WinServer2012/2012R2/2016。WinVista x64/Win7x64以及WinServer2008x64/2008R2需要额外操作,WinVista x86/Win7x86/WinServer2008x86不支持UEFI)打开这个Windows安装盘,这个ISO(截图的版本较老,自行忽略)打开之后,是这四个文件夹、四个文件,拷贝到优盘。我电脑是UEFI的,想装Linux,但我手头没优盘,听说也能搞定?

对啊对啊,搞个FAT32的分区,把Linux安装盘的iso镜像里面的文件拷贝进去,然后在Windows下,用工具给那个分区的BOOTx64.efi,添加为UEFI文件启动项,开机时候选那个启动项,就能启动到Linux安装盘了。下面示意图是Ubuntu的。记得查看一下你的Linux支不支持SecureBoot哦!如果你要装的Linux不支持SecureBoot,记得关掉主板的SecureBoot设置哦。Ubuntu安装盘ISO镜像内的UEFI启动文件。我想装个Linux,但我希望默认还是Windows。

我想重装Windows,可是我开机不再默认Grub,怎么回Linux?

如果是UEFI模式,那就跟之前一样,改启动项顺序就行了。

如果是传统BIOS的,要么用bootsect.exe把MBR改成Windows的。要么用工具把MBR刷成Grub的。也可以考虑Linux下用dd命令备份MBR的前446字节,到时候再还原回去。重装Windows,提示我什么MBR、GPT,不让装?

这个就是Windows安装程序的限制了。BIOS模式下的Windows只允许被装在MBR分区表下面。UEFI模式下的Windows只允许被装在GPT分区下。但事实上,MBR分区表,也能启动UEFI模式下的Windows。

嗯,就说到这吧。

uefi下的开机顺序_科普贴:BIOS和UEFI的启动项相关推荐

  1. uefi下的开机顺序_如何访问UEFI或BIOS并进行设置?

    ★前言 在不同的电脑上访问BIOS或UEFI设置界面有不同的方法,不管怎样,你都得重启你的电脑. ★如何访问UEFI或BIOS设置界面 ◇通过按键访问 为了访问BIOS或UEFI,你需要在电脑启动过程 ...

  2. uefi下的开机顺序_动态修改UEFI启动顺序的方法与流程

    本发明涉及计算机领域,其主要 技术实现要素: 是动态修改UEFI启动顺序的方法. 背景技术: 固件是固化在Flash芯片中的软件程序.BIOS是计算机中最重要的固件之一,用于初始化硬件.管理硬件资源. ...

  3. uefi下的开机顺序_怎么设置uefi启动顺序

    uefi版 ①免除了u盘启动设置:对于很多电脑小白来说,bios设置u盘启动无疑是非常苦恼的一件事,担心一不小心将bios设置错误导致系统无法正常启动.然而,只要我们主板支持uefi启动的话就相对来说 ...

  4. 设置计算机的启动顺序CDROM.C.A,bios如何设置光驱启动顺序?三种BIOS设置光驱第一启动的方法详细图解...

    在启动计算机时立即按 Delete (Del)[删除键]进入 BIOS[基本输入输出系统]设置 2 选择 Advanced BIOS Features [高级 BIOS 特性设置],并将 First ...

  5. 设置计算机的启动顺序CDROM.C.A,bios如何设置光驱启动顺序 三种BIOS设置光驱第一启动的方法详细图解...

    在启动计算机时立即按 Delete (Del)[删除键]进入 BIOS[基本输入输出系统]设置 2 选择 Advanced BIOS Features [高级 BIOS 特性设置],并将 First ...

  6. win7开机启动项怎么设置_怎么设置u盘为第一启动项bios u盘第一启动项bios设置方法【详解】...

    目前,有许多用户在使用u盘启动电脑的时候遇到了一些小问题,部分电脑一键u盘启动的快捷键是esc键,而用户在连续按下快捷键时很容易就跳过了启动项的选择画面,无法选择u盘启动电脑.今天小编就教大家如何在b ...

  7. dell设置从ssd启动_戴尔dell笔记本bios怎么设置第一启动项为硬盘

    在大家的日常生活中,往往会遇到戴尔笔记本怎么设置硬盘启动顺序的问题,常常会不知道怎么处理,最近有网友向小编咨询这方面的问题,接下来就让小编为大家提供一下解决这种问题的方法,希望能够给大家提供一定的帮助 ...

  8. 华硕主板如何用u盘启动计算机,华硕主板u盘启动是按f几_华硕主板BIOS设置U盘启动的方法-win7之家...

    最近有使用华硕主板的笔记本用户询问小编,电脑开机使用u盘启动是按f几?其实不同主板或品牌的电脑想要使用U盘启动,快捷键都是不一样的.就华硕主板而言,它的快捷键是"F8",下面小编就 ...

  9. 电脑如何进入bios模式_如何进入BIOS设置U盘启动盘

    很多朋友都不知道如何进入笔记本电脑的BIOS界面,设置启动选项后制作U盘启动工具.首先,你需要知道你的笔记本电脑是什么牌子的.接下来,我将教你如何进入BIOS界面.有需要的朋友可以参考哦. 通过小白一 ...

最新文章

  1. 惊讶!缓存刚Put再Get居然获取不到?
  2. android 调用手机震动
  3. Spark Streaming简介
  4. Swift之旅--数据类型
  5. scrapy 搜索关键字_Scrapy 新浪微博搜索爬虫
  6. Java中List和Map接口之间的区别
  7. 手机如何访问电脑局域网文件共享服务器,数据共享 手机怎么访问电脑文件?多个设备之间数据共享...
  8. vue-router vue路由
  9. Spring实战之Cache
  10. CentOS 安装 rz sz
  11. 电脑向linux板卡传文件,ARM 开发板嵌入式linux系统与主机PC通过串口传输文件
  12. mvvm绑定checkbox wpf_WPF(MVVM)菜单中的互斥(和可绑定)复选框
  13. Java面试题视频讲解汇总,持续更新中...
  14. 华硕atk驱动(快捷键)安装流程
  15. Android权限大全
  16. 稳压二极管_百度百科
  17. 成功解决FAT32 No GRLDR问题
  18. 522还不知道怎么表白吗?——经典设计模式之【观察者模式】
  19. 个人笔记,深入理解 JVM,很全!
  20. u盘属于计算机软件吗,u盘属于哪一类商标

热门文章

  1. 湖南大学计算机研究生值不值得读,一个很现实的问题:二本院校的研究生究竟值不值得去读?...
  2. 百度地图JavaScript API获取用户当前经纬度和详细地理位置,反之通过详细地理位置获取当前经纬度...
  3. 面试的时候怎样自我介绍更有效果?
  4. matlab中m_map工具箱绘制大圆航线
  5. mac多开屏幕_Mac系统如何实现多屏显示画面?让Mac系统多屏显示画面的设置方法...
  6. Git 修改 commit author
  7. Latex学习笔记 (Ex4)希腊字母、罗马字母一览表
  8. 英语口语8000句-生病、受伤时
  9. OPENGL 半透明贴图
  10. 【学术】各类基金资助项目英文翻译(中英文对照)