Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

搜索
查看: 8109|回复: 28

[技术] 系统引导那些事 关于windows下系统uefi的引导过程 [复制链接]

Rank: 2Rank: 2

UID
4821131
帖子
247
PB币
429
贡献
0
技术
0
活跃
137
发表于 2017-7-22 07:58:34 |显示全部楼层
本帖最后由 leew1229 于 2017-7-23 00:01 编辑

UEFI 的引入 还要从win8/8.1开始,原生支持UEFI模式的win系统也是从8/8.1开始的。
现在,我们安装win 系统时,不再局限于过去单一的一种方式,随着研究和应用的深入。
主板厂商,已经将可以将UEFI引入win7系统。

所以现在,安装系统变得更简单也更复杂。因为排列组合的关系,使用不同技术,都可以完成系统安装和启动。
主板      legacy BIOS 和  Unified EFI

硬盘      MBR 和 GPT   
首先分下启动类型:
标准类型  BIOS+MBR   硬盘大于2T不能识别
      UEFI+GPT   系统须使用64位系统
兼容性引导   BIOS+GPT  做系统启动十分困难,必须做特殊处理,并且不适合于win系统
        UEFI+MBR  
以上的引导方式都有人做到过。

这里使用 DiskGen 查看硬盘类型  ,可以看到分区类型发生了变化。
MBR.jpg
    GPT.jpg

这里还有点问题需要研究,待以后再来说明。我在固态盘和硬盘上都装有系统,启动方式当时设了纯UEFI
,问题就是,为什么纯UEFI下可以使用MBR分区启动系统?事实上,我在分区的时候是磁盘二采用了GPT分区的,但磁盘一重装系统后,并没有识别磁盘二为GPT分区。

放下不谈。
http://www.cnblogs.com/mahocon/p/5691348.html 这里有一遍文章个人认为写得想当好。可以去参考一下。
那么我们再启动系统的时候是怎么做到的呢。
有一个基本的共识:就是系统启动过程,必须遵循一定的逻辑,不可以跳脱。
         上面提到的参考中也同样提到了分阶段执行。凡做事,必有先后。
开机一定要先展开主板芯片,读取硬盘数据,而硬盘头部的数据决定了怎样的引导方式。
传统win系统一个既定的事实是  BIOS+MBR  也就是,常说的NT5方式。硬盘头64字节内容指定了硬盘的分区类型,规定了分区表,这个时候只能有4个主分区,并且只能有一个活动分区,用于存放引导文件。
如果MBR出错, 一般都显示 boot failure-insert system diskette
而如果系统引导出错,一般则显示为 NTLDR missing( NT5 或者GTLDRmissing (NT6)  
win系统启动过程,有时候是很复杂的,很难理解为什么要这样启动: MBR类型硬盘分区 硬盘上存在魔法代码,短短4个字符,决定了引导工作的下一步在哪里, 指引计算机从活动分区引导启动操作系统。MBR 大小也只有512bytes,这里面要存 分区表DPT 、引导(boot loader)、硬盘状态、和55 AA。它很可爱,也很凶残,一点点错误就会杀掉你的计算机。
引导则意味着指向一个系统引导件,win系统很简单,并且具有直接读写MBR的功能,也可以修改MBR,将引导直接指向 winload.exe 到了这里就要去分析winload.exe 做了什么调用了什么文件,这里同样不再详细叙述。
我们只简单的做一下描述    MBR——  ——boot loader————NTLDR或者GTLDR——winloader.exe

对于新的UEFI+GPT  ,说的已经很多了,启动过程也更丰富。但是在win系统,具体则是指向一个文件 winloader.efi
而他的调用过程则是
GPT——EFI分区——EFI分区下的Boot文件夹——boot64.efi

这也就是为什么在UEFI模式下,实现快速启动需要显卡支持EFI启动的原因。
一定程度来说,UEFI打开了WIN的封闭世界。

4楼是大神,他说的我明白了。
就是指 UEFI启动其实也是存在两种形式的,我局限在windows下了。
确实是有两种启动方式。
并且LBR是我原先理解错了,感谢指正。
201610170953378340.png



GPT.jpg
1

查看全部评分

Rank: 19Rank: 19Rank: 19

UID
456912
帖子
59481
PB币
30
贡献
0
技术
73
活跃
8403

热心会员 水神勋章

发表于 2017-7-22 08:27:04 |显示全部楼层
多谢,学习了。

Rank: 7Rank: 7Rank: 7

UID
4574835
帖子
475
PB币
2903
贡献
0
技术
813
活跃
1048
发表于 2017-7-22 09:07:18 |显示全部楼层
楼主接触系统的时间晚?win7 x64就原生支持UEFI

Rank: 2Rank: 2

UID
4812213
帖子
441
PB币
506
贡献
0
技术
0
活跃
731
发表于 2017-7-22 09:07:32 |显示全部楼层
LBR是什么?我只知道PBR
uefi+gpt引导win的流程有两种:
1.系统启动项启动
uefi→efi分区\efi\Microsoft\boot\bootmgfw.efi→winload.efi
2.硬盘启动项启动
uefi→efi分区\efi\boot\bootx64(或bootia32)
通常走的是第一种流程,只有在系统启动项丢失时和usb设备启动时才使用第二种流程

Rank: 7Rank: 7Rank: 7

UID
522135
帖子
1979
PB币
1148
贡献
0
技术
0
活跃
1756
发表于 2017-7-22 10:32:17 |显示全部楼层
多谢楼主分享!!!

Rank: 5Rank: 5Rank: 5

UID
4276493
帖子
503
PB币
604
贡献
0
技术
0
活跃
1156
发表于 2017-7-22 10:46:52 |显示全部楼层
没研究过它怎么启动,学习了!

Rank: 5Rank: 5Rank: 5

UID
1072963
帖子
1013
PB币
794
贡献
0
技术
0
活跃
1010
发表于 2017-7-22 10:52:07 |显示全部楼层
不错的文章

Rank: 5Rank: 5Rank: 5

UID
10776
帖子
560
PB币
1541
贡献
0
技术
0
活跃
822
发表于 2017-7-22 11:55:19 |显示全部楼层
我的理解如下,不足之处望指正
传统bios引导是
1.读取bois里设定的第一启动设备的mbr(主引导记录)
2.寻找活动分区
3.加载pbr(分区引导记录)
4.加载boot loader(nt5是ntldr,nt6是bootmgr,其他如grub)
5.加载相应启动菜单(nt5是boot.ini,nt6是boot目录bcd文件,grub的grub.conf)
6.加载系统引导程序(win是winloader.exe,linux是initrd等)

uefi引导(多数为64位引导)
1.uefi搜索所有设备的efi分区(fat分区及包含efi、boot目录、bootx64.efi文件)并以此列出可引导的efi启动设备,win7必须开启csm兼容模式,所以并非完全兼容uefi
2.选择引导该设备并加载efi启动菜单(efi目录下多条记录)
3.加载引导文件(windows的bootmgfw.efi,grub的grubx64.efi)
4.加载相应启动菜单(windows为bcd文件,grub的grub.conf)
5.加载系统引导程序(windows为winloader.efi,linux为initrd等)

如果引导有问题也是依据上面的次序逐个排除

Rank: 2Rank: 2

UID
4812213
帖子
441
PB币
506
贡献
0
技术
0
活跃
731
发表于 2017-7-22 14:25:30 |显示全部楼层
refuge 发表于 2017-7-22 11:55
我的理解如下,不足之处望指正
传统bios引导是
1.读取bois里设定的第一启动设备的mbr(主引导记录)

uefi引导分uefi系统启动项和uefi硬盘引导项
uefi系统启动项记录的是引导管理器的路径是存储在自己的环境变量里的,可以存在多个,一个系统启动项对应一个引导管理器,uefi启动时读取系统启动项里的参数直接找到并加载引导管理器

举个例子我们通常uefi安装的win,会生成一个windows boot manager的启动项并作为默认的启动项写入uefi的设置参数里,windows boot manager这个启动项记录着bootmgfw.efi的路径,电脑开机后,uefi会读取默认启动项的启动参数直接找到并加载bootmgfw.efi并把控制权传给win的引导管理器

uefi硬盘启动项是在usb启动时和本地硬盘上没有对应的系统启动项时才用的,是遵循固定逻辑寻找引导管理器的,先找到有efi属性的分区,如果这块硬盘没有efi属性的分区则找到第一个fat分区,找到指定分区后寻找efi\boot\bootx64(bootia32).efi文件

win7要开启csm是因为win7的内置的显卡是驱动不支持uefi gop,如果你有幸找到并安装了支持uefi gop的显卡驱动的话可以通过设置在纯uefi下启动的。
2

查看全部评分

Rank: 2Rank: 2

UID
4802889
帖子
133
PB币
30
贡献
0
技术
0
活跃
923
发表于 2017-7-22 19:39:15 |显示全部楼层
改uefi启动以后调整屏幕亮度异常,无法将屏幕亮度调至最低,也无法正常关机,关机似乎变成锁屏

Rank: 2Rank: 2

UID
4821131
帖子
247
PB币
429
贡献
0
技术
0
活跃
137
发表于 2017-7-22 23:16:37 |显示全部楼层
caidaocai 发表于 2017-7-22 14:25
uefi引导分uefi系统启动项和uefi硬盘引导项
uefi系统启动项记录的是引导管理器的路径是存储在自己的环境 ...

终于明白其中的重点关节了,灰常给力。 遵循固定逻辑,我理解的是 :应该代表首先搜索存储器也就是硬盘。找到硬盘的分区类型。也就是 如果存在MBR 则为使用兼容模式,如果是GPT,就寻找第一个FAT分区。
而GPT磁盘为防止winNT5.x误认为是空盘而提示进行格式化,而在硬盘有一个pMBR。

Rank: 1

UID
4816465
帖子
41
PB币
117
贡献
0
技术
0
活跃
7
发表于 2017-7-22 23:26:51 |显示全部楼层

多谢楼主分享!!!

Rank: 2Rank: 2

UID
4812213
帖子
441
PB币
506
贡献
0
技术
0
活跃
731
发表于 2017-7-23 01:20:23 |显示全部楼层
leew1229 发表于 2017-7-22 23:16
终于明白其中的重点关节了,灰常给力。 遵循固定逻辑,我理解的是 :应该代表首先搜索存储器也就是硬盘。 ...

uefi兼容模式和mbr和gpt无关的,在uefi下mbr的主分区和逻辑分区统统按主分区处理的,mbr的分区没有guid属性所以不存在efi分区就寻找第一个fat分区,gpt的每个分区都有guid的值来标记属性的,通过guid的值来寻找是否有efi属性的分区,没有efi分区的情况下才寻找第一个fat分区

nt5.x也只有x86的客户端版本不支持识别gpt,x86的服务器版和所有的x64版都支持gpt读写的,ia64版支持安装在gpt上的

Rank: 2Rank: 2

UID
4812213
帖子
441
PB币
506
贡献
0
技术
0
活跃
731
发表于 2017-7-23 01:37:53 |显示全部楼层
Legacy BIOS的引导流程,bios→mbr→pbr→引导管理器的过程中会将控制权限依次传递给mbr和pbr的最后在传递给引导的,如果病毒感染mbr的话,就是系统在病毒下运行了。
在uefi的引导过程中uefi是直接吧控制权限传给引导的,开了secure boot的话uefi会验证efi文件的签名,通不过验证的话会拒绝加载
这也是uefi比Legacy BIOS安全的一点

自由

UID
117259
帖子
14912
PB币
16966
贡献
0
技术
178
活跃
4496

优秀版主 7周年庆典勋章 Win10先驱者 十一周年

发表于 2017-7-23 02:57:40 |显示全部楼层
本帖作为知识普及帖很有实战价值。

Rank: 1

UID
4677170
帖子
48
PB币
0
贡献
0
技术
0
活跃
338

Win10先驱者

发表于 2017-7-23 05:41:51 |显示全部楼层
EFI+GPT分区表的启动大概是这样的,当然也有很多其他的设置

bios识别硬盘→efi分区→启动是读取bcd菜单配置(如:是否启动传统启动顺序菜单)→bcd指定分区id下的目录下的启动文件(比如 分区:\WINDOWS\system32\winload.efi)→按照bcd上的这条目的启动配置进行引导启动这一个系统(如:是否禁用驱动程序签名校检,是哪一个启动模式)

Rank: 7Rank: 7Rank: 7

UID
3503718
帖子
2081
PB币
328
贡献
0
技术
0
活跃
1870
发表于 2017-7-23 07:10:36 |显示全部楼层
学习了,谢谢!

Rank: 5Rank: 5Rank: 5

UID
4729892
帖子
503
PB币
570
贡献
0
技术
0
活跃
225
发表于 2017-7-23 07:24:20 |显示全部楼层
了解了,很不错,谢谢

Rank: 5Rank: 5Rank: 5

UID
4729249
帖子
540
PB币
758
贡献
0
技术
1
活跃
316
发表于 2017-7-23 07:27:39 |显示全部楼层
非常有用的东西。

Rank: 2Rank: 2

UID
4812213
帖子
441
PB币
506
贡献
0
技术
0
活跃
731
发表于 2017-7-23 08:37:02 |显示全部楼层
nasbdh9 发表于 2017-7-23 05:41
EFI+GPT分区表的启动大概是这样的,当然也有很多其他的设置

bios识别硬盘→efi分区→启动是读取bcd菜单配 ...

uefi+gpt引导win正常是这样的
uefi读取启动配置参数,里面记录了bootmgfw.efi的路劲,硬盘x分区x:\efi\Microsoft\boot\bootmgfw.efi
uefi→bootmgfw.efi(如果开启secure boot的话会先验证签名,通不过拒绝加载)加载并将控制权移交给bootmgfw.efi→bootmgfw.efi再读取bcd根据bcd的参数→winload.efi(如果开启secure boot的还是会先验证签名的,通不过就拒绝加载)带着参数加载并将控制权限交给winload.efi。
回顶部
Copyright (C) 2005-2019 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件