『超越时空的幻想』——GPT、UEFI深度解析与应用

00——故事背景

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。

01-GPT分区表

全局唯一标识分区表(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分区表的结构:

GUID_Partition_Table_Scheme

在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_setup_utility

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界面

华硕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。

03vmware

由于大D手里木有支持EFI的电脑,于是这里需要配置一个VMware虚拟机,以方便继续介绍下面的东西。

打开VMware虚拟机的配置文件,文件名一般为xxxx.vmx

在本文件最后添加一行:

201304051412

即可。

配置好了VMware之后,继续往下走~

04GPTEFISZ

方法都大同小异,灵活变通的掌握就OK咯~~

我们先来观赏一下VMware EFI提供的Boot Maintenance Manager。

VmwareEFI1

这里,必须使用原版的Windows安装盘,市面上所谓的GHOST版本和OEM版可能无法在EFI上引导。

引导成功后到EFI Shell的样子:

VMwareEFI2

大D在第一次尝试安装的时候发现无法引导到安装光盘上,后来经过一些搜索,得知VMware9对EFI支持还不会很良好,需要在设置虚拟机的时候选择安装的操作系统为Windows 7X64,才可以引导到安装程序。

Win7EFI1

如果是一块新的硬盘,那么直接分区即可。会看到又一个分区为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分区表怎么办?

你会遇到如下图提示的错误:

Error1

选择驱动器高级选项,将所有分区删除重建即可。如果你想折腾,还可以选择使用DiskPart分区。

DiskPart分区

安装程序里shift+F10可以叫出命令提示符。

然后在安装程序里继续安装即可,如果看不到分区情况,请刷新。

05jsy

欢乐的时间总是短暂地,换来的是无尽的空虚和长叹。

这水文洋洋洒洒也写了3000多字。

从一定的角度上展现了EFI和GPT。

也大致说明了如何在EFI+GPT上安装Win7。

BIOS的全面衰亡指日可待,全新的EFI+GPT早晚有一天会占领所有的电脑。

但是不得不面对的是,EFI+GPT让Win7的基于MBR引导技术的激活方式几乎全部报废。

这也是为什么微软大力推行EFI的主要原因。反盗版嘛。

不过已经有了在EFI上激活Win7的方法,各位看客就自己搜索吧。嘿嘿。

06ck

Windows GPT 需要的分区---GPT相关之二

IDF2011英特尔信息技术峰会——微软 Windows 平台演进与UEFI规范 主讲:杜熊、Tony Managefeste

让 VMware Workstation 8 支持EFI/UEFI BIOS 启动

HOW TO: Use the Diskpart.efi Utility to Create a GUID Partition Table Partition on a Raw Disk in Windows

Windows and GPT FAQ

Change a Master Boot Record Disk into a GUID Partition Table Disk

GUID Partition Table

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以灵感写本文。

07xd

2013-04-07 第一次修订

感谢52神犇指出的错误。

版权声明
转载保留版权: 大D技研室 | 《『超越时空的幻想』——GPT、UEFI深度解析与应用》
本文链接地址:https://www.dadclab.com/archives/3291.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , , , , 标签