『超越时空的幻想』——GPT、UEFI深度解析与应用
Warning :本文内含有大量图片,可能会导致您的猫产生不适,可以点开本页后先加载后观看
近些年来,随着技术的高速发展,借着Win8的春风,把GPT、UEFI吹进了传统PC中,噢,你说Mac啊。大D一直不喜欢水果的产品,只是比较欣赏水果产品的工业设计,但是你要让大D去购买并使用水果的产品。那基本是不可能的。
虽然Mac对GPT分区表和EFI的支持要更早。
随着大D逐渐接触各类使用UEFI的超级本、笔记本、台式机。对UEFI和GPT的了解逐渐增多。
思来想去写个水文权当科普。
由于大D的本子不主持EFI,还是传统的BIOS,于是本文中涉及到的所有操作,均在Vmware虚拟机下进行,跟实体机操作并无大区别,灵活变通即可。
本文将从多个方面深度解析GPT和UEFI,同时还会以Win7 64bit作为范本,演示如果在EFI/GPT上安装Win7。
全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一种硬盘的分区结构。它是可扩展固件接口标准(EFI)的一部分,用来替代BIOS中的主引导记录分区表。但因为MBR分区表不支持容量大于2.2TB的分区,所以也有一些BIOS系统为了支持大容量硬盘而用GPT分区表取代MBR分区表。GPT分区表支持最多9.4ZB的硬盘和分区。
说到GPT分区表,自然要回顾一下原始的MBR是怎么实现的。
主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。
因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。
由于主引导记录中磁盘分区表(DPT)的大小为64字节,每个分区是16字节,这也就固定了MBR只能有四个主分区。
为解决多分区的问题,引入了扩展引导记录(EBR)的概念,使MBR可以支持更多的分区。
但MBR的问题在于无法管理更大的分区或硬盘。
现在让我们回到GPT分区表上来,先让我们来看一下GPT分区表的结构:
在MBR硬盘当中,分区信息直接存储在主引导记录(MBR)中,而在GPT硬盘中,分区表的位置信息存储在GPT头中,但出于兼容性考虑,硬盘的第一个闪去仍是MBR分区,之后才是GPT头。
传统MBR(LBA 0)
LBA 0 当中存储的是出于兼容性考虑而存储的一段MBR,用来防止不支持GPT表的硬盘工具错误识别并导致硬盘内数据损坏,这个MBR也叫做保护MBR。
同时这部分可以使不支持GPT启动的操作系统可以从MBR启动,启动之后只能操作MBR分区表的分区,无法操作GPT分区表中的分区。
Mac中的Boot Camp就是使用这种方式来启动硬盘上的Windows的。
分区表头(LBA 1)
分区表头定义了硬盘的可用空间以及组成分区表的项(分区)的大小和数量。
同时还记录了这块硬盘的GUID(全局唯一标识符,一个16字节(128位)的二进制数)。记录了分区表本身的我只和大小。以及备份分区表头和分区表的位置和大小(在硬盘最后面)。同时自身还具备CRC32校验,当出错时,可以从备份GPT中恢复整个分区表。
分区表项(LBA2-33)
这部分存储就是分区信息了。使用GUID来表示分区的类型,起始LBA、末尾LBA、属性、分区名等等信息。
操作系统支持
类Unix系统
操作系统 |
版本 |
平台 |
BIOS/GPT |
UEFI/GPT |
FreeBSD |
7.0以后 |
x86、x86-64 |
支持 |
支持 |
Linux |
大多数发行版 |
x86、x86-64、IA-64 |
支持 |
支持 |
Mac OS X |
10.4.0以后 |
x86、x86-64 |
不支持 |
支持 |
Solaris |
10以后 |
x86、x86-64、SPARC |
不支持 |
不支持 |
32位Windows系统
操作系统 |
平台 |
自BIOS/GPT启动 |
自EFI/GPT启动 |
支持GPT磁盘读取写入 |
Windows XP |
x86 |
否 |
否 |
否 |
Windows Server 2003 |
x86 |
否 |
否 |
否 |
Windows Server 2003 |
x86 |
否 |
否 |
是 |
Windows Vista |
x86 |
否 |
否 |
是 |
Windows Server 2008 |
x86 |
否 |
否 |
是 |
Windows 7 |
x86 |
否 |
否 |
是 |
64位Windows系统
操作系统 |
平台 |
自BIOS/GPT启动 |
自EFI/GPT启动 |
支持GPT磁盘读取写入 |
Windows XP |
IA-64 |
否 |
是 |
是 |
Windows XP |
IA-64 |
否 |
是 |
是 |
Windows Server 2003 |
IA-64 |
否 |
是 |
是 |
Windows Server 2003 |
x86-64 |
否 |
否 |
是 |
Windows XP |
x86-64 |
否 |
否 |
是 |
Windows Vista |
x86-64 |
否 |
是 |
是 |
Windows Server 2008 |
x86-64,IA-64 |
否 |
是 |
是 |
Windows 7 |
x86-64 |
否 |
是 |
是 |
Windows Server 2008 R2 |
x86-64,IA-64 |
否 |
是 |
是 |
统一可扩展固件接口(英语:Unified Extensible Firmware Interface,简称UEFI)是一种个人电脑系统规格,用来定义操作系统与系统韧体之间的软件界面,为替代BIOS的升级方案。可扩展固件接口负责加电自检(POST)、连系操作系统以及提供连接操作系统与硬件的接口。
UEFI最初由英特尔开发,原名为EFI(Extensible Firmware Interface)现时由统一可扩展固件接口论坛(UEFI论坛)来推广与发展。

可扩展固件接口在软件层次中的位置
我们还是先来回顾一下BIOS
BIOS
BIOS(Basic Input/Output System)
在PC启动的过程中,BIOS担负著初始化硬件,检测硬件功能,以及引导操作系统的责任。

Award BIOS 设置界面
BIOS的主要工作就是对电脑进行自检和初始化。同时负责一些程序服务的处理和硬件中断处理。
接下来往回说,接着说UEFI
UEFI
UEFI产生的背景
大家都知道,Intel一直引领着以x86系列处理器为基础的PC技术潮流。在PC、芯片组等领域也一直保持绝对主导的地位。
UEFI技术的前身EFI技术是源于Intel Itanium(安腾)平台的。传统的BIOS技术是为了兼容16位实模式,这就导致了后期基本上所有的处理器升级换代都要保有16位实模式。处理器加电启动的时候,仍然会切换到16位实模式运行。
Intel认为,CPU为了兼容古老的BIOS,就必须有16位实模式兼容,这样限制了CPU的发展。
BIOS是以16位汇编代码,寄存器参数调用方式,静态链接以及1M一下内存固定编址存在了十几年,虽然各大BIOS厂商一直在努力让BIOS跟上潮流,但是BIOS的本质得不到改变。
这迫使Intel在开发新的处理器的时候,必须考虑加上使性能大大降低的兼容模式。
但Intel自家体系中的安腾处理器没有这样的顾虑,安腾是一个新生的处理器架构,系统固件和操作系统之间的接口都可以重新定义。
这一次,Intel将其定义成一个可以扩展的。标准的固件接口规范,不同于传统的BIOS。这个新产品就是EFI。
EFI和BIOS的区别
最重要的区别在于,EFI使用的是模块化,C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,比BIOS更容易实现,容错和纠错的能力更强大。
同时还大大的缩短了系统研发时间,UEFI运行在32或64位模式,甚至可以在未来的技术发展中,突破现在传统的16位代码寻址模式,达到处理机的最大寻址。
利用EFI加载驱动、识别及操作硬件。
EFI系统驱动是又EFI Byte Code编写成,这是EFI专用的虚拟机器语言,只能在EFI驱动运行环境下被解释运行。这就保证了向下的兼容性。
另外,EFI驱动开发简单,所有的PC部件生产厂商都可以参与进来,整个过程十分像现代操作系统开发的过程。
这样就实现了让BIOS图形化,图形化监控硬件状态。甚至让不进入操作系统收邮件变成可能。

华硕UEFI界面
EFI和操作系统
EFI在其概念上,非常类似于一个操作系统,但是仅具有操作硬件资源的能力。虽然有人认为有一天EFI会取代操作系统。但是,EFI的缔造者们,在第一版规范出台的时候,就将EFI的能力限制起来,让它不能威胁到操作系统的统治地位。
1、EFI只是硬件和预启动软件间的接口规范。
2、EFI环境不提供中断机制。只让EFI驱动轮询检查硬件状态,需要用解释方式运行,较操作系统的机械码驱动效率低。
3、EFI不提供缓存器保护。只具备一定的管理能力。
EFI的组成
一般认为EFI由以下几个部分:
1.Pre-EFI初始化模块
2.EFI驱动执行环境
3.EFI驱动程序
4.兼容性支持模块(CSM)
5.EFI高层应用
6.GUID硬盘分区表
在实现上:
EFI初始化模块负责CPU、主板北桥(桥)以及存储器的初始化,然后载入EFI驱动执行环境。
当驱动执行环境载入执行后,系统可以枚举并加载其他的EFI驱动,进行各类设备的初始化。
UEFI的发展
Intel和Microsoft都在大力推广UEFI,由Intel和AMD在内的一些PC厂商成立了UEFI论坛,目前最新的版本为:v2.3.1。
由于大D手里木有支持EFI的电脑,于是这里需要配置一个VMware虚拟机,以方便继续介绍下面的东西。
打开VMware虚拟机的配置文件,文件名一般为xxxx.vmx
在本文件最后添加一行:
1 |
firmware="efi" |
即可。
配置好了VMware之后,继续往下走~
方法都大同小异,灵活变通的掌握就OK咯~~
我们先来观赏一下VMware EFI提供的Boot Maintenance Manager。
、
这里,必须使用原版的Windows安装盘,市面上所谓的GHOST版本和OEM版可能无法在EFI上引导。
引导成功后到EFI Shell的样子:
大D在第一次尝试安装的时候发现无法引导到安装光盘上,后来经过一些搜索,得知VMware9对EFI支持还不会很良好,需要在设置虚拟机的时候选择安装的操作系统为Windows 7X64,才可以引导到安装程序。
如果是一块新的硬盘,那么直接分区即可。会看到又一个分区为128M的MSR保留分区。
Microsoft 保留分区 (MSR) 在每个磁盘驱动器上保留空间以供以后的操作系统软件使用。GPT 磁盘不支持隐藏的扇区。以前使用隐藏扇区的软件组件现在为特定于组件的分区分配部分 MSR。例如,将基本磁盘转换为动态磁盘会导致该磁盘的 MSR 减少,由新创建的分区保留动态磁盘数据库。MSR 具备 Partition GUID:
DEFINE_GUID (PARTITION_MSFT_RESERVED_GUID, 0xE9E, 0x0B, 0x4DB8, 0x81, 0x7D, 0xF9, 0x2D, 0xF0, 0x02, 0x15, 0xAE)
MSR的大小随着硬盘的大小而不同,大于16G的硬盘,MSR为128MB
接下来的安装与普通安装无异。
如果硬盘上原先是MBR分区表怎么办?
你会遇到如下图提示的错误:
选择驱动器高级选项,将所有分区删除重建即可。如果你想折腾,还可以选择使用DiskPart分区。
DiskPart分区
安装程序里shift+F10可以叫出命令提示符。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Microsoft Windows [版本 6.1.7601] X:\Sources>diskpart Microsoft DiskPart 版本 6.1.7601 Coryright <C> 1999-2000 Microsoft Corpration. 在计算机上: MINWINPC DISKPART> list disk 磁盘 ### 状态 大小 可用 Dyn Gpt --------- ----------- ------- -------- ------- ------- 磁盘 0 联机 60 GB 59 GB DISKPART> select disk 0 磁盘 0 现在是所选磁盘 DISKPART> clean DiskPart 成功地清除了磁盘 DISKPART> convert gpt DiskPart 已将所选磁盘成功地转更换为 GPT 格式 DISKPART>create partition efi size=100 #创建EFI分区为100M DiskPart 成功地创建了指定分区 DISKPART> create partition msr size=128 #创建MSR分区为128M DiskPart 成功地创建了指定分区 DISKPART> create partition primary size=30721 #创建主分区为30G DiskPart 成功地创建了指定分区 |
然后在安装程序里继续安装即可,如果看不到分区情况,请刷新。
欢乐的时间总是短暂地,换来的是无尽的空虚和长叹。
这水文洋洋洒洒也写了3000多字。
从一定的角度上展现了EFI和GPT。
也大致说明了如何在EFI+GPT上安装Win7。
BIOS的全面衰亡指日可待,全新的EFI+GPT早晚有一天会占领所有的电脑。
但是不得不面对的是,EFI+GPT让Win7的基于MBR引导技术的激活方式几乎全部报废。
这也是为什么微软大力推行EFI的主要原因。反盗版嘛。
不过已经有了在EFI上激活Win7的方法,各位看客就自己搜索吧。嘿嘿。
IDF2011英特尔信息技术峰会——微软 Windows 平台演进与UEFI规范 主讲:杜熊、Tony Managefeste
让 VMware Workstation 8 支持EFI/UEFI BIOS 启动
Change a Master Boot Record Disk into a GUID Partition Table Disk’
http://zh.wikipedia.org/wiki/BIOS
VMWare cannot install windows 7 64 bit.
Install Win 8 on VMware with EFI
http://zh.wikipedia.org/wiki/GUID
http://zh.wikipedia.org/wiki/MBR
http://zh.wikipedia.org/wiki/UEFI
本文要感谢D大和兔兔。感谢两位给大D以灵感写本文。
2013-04-07 第一次修订
感谢52神犇指出的错误。
已有 10 条评论
发表评论
电子邮件地址不会被公开。 必填项已标注。
大D 忒牛逼了~ 啥也不说了,收藏夹伺候
@xushine 这个不牛逼。哇咔咔
膜拜大d牛~
@lower 膜拜Lower神牛
先跪大触!
@hcl 膜拜hcl大牛
膜拜大D大牛……
@梦之翼 膜拜梦之翼大牛
warning写错了,正确的写法见前面。
大D的这文章好高端啊!
@52 咳咳,俺这种小学没毕业水平的英语是吧。。大牛您就多担待。。俺文章没有多高端的。渣渣的