UEFI与GPT(7.3课上作业)

一、UEFI:统一可扩展固件接口


1、什么是UEFI

        统一可扩展固件接口(Unified Extensible Firmware Interface,UEFI)是一种PC系统规格,用来定义操作系统与系统固件之间的软件界面,作为BIOS的替代方案。UEFI负责加电自检(POST),联系操作系统以及提供操作系统与硬件连接的接口。下图为EFI在软件层次中的位置:

blob.png



2、UEFI引导过程

    1、系统开机 – 加电自检(POST)

    2、UEFI固件被加载,并由它初始化要启动的硬件

    3、固件读取其引导管理器以确定从何处(比如从哪个硬盘及分区)加载哪个UEFI应用(如windows boot manager)

    4、固件按照引导管理器中的启动项目,加载UEFI应用

    5、根据已启动的UEFI应用还可以启动其他应用(对应于UEFI shell或rEFInd之类的引导管理器的情况)或者启动内核及initramfs(对应于GRUB之类引导器的情况),这取决于UEFI应用的配置



3、UEFI与BIOS的比较

1,EFI使用了模块化,C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,相比BIOS而言更容易实现,容错和纠错的特性更强,缩短了系统开发的时间。

2,EFI运行于32或64乃至未来增强的处理器模式下,突破传统BIOS16位代码的寻址能力,达到CPU的最大寻址。使得EFI驱动可以操控所有硬件设备。而BIOS只能以16位代码的形式提供硬件服务程序,这使其只能提供给操作系统引导程序或MS-DOS类操作系统使用。

3,EFI系统下的驱动不是直接运行于CPU上的代码写成,而是用EFIBC编写而成的,这是一组专用于EFI驱动的虚拟机器语言,需要EFI驱动环境(DXE)下被解释运行,这提供了不同系统平台间的向下兼容性。另外EFI驱动开发简单,所有PC部件供应商都可以参与开发,对于丰富其功能十分有利。



4、EFI与操作系统的关系

      EFI理论上非常类似于一个低级操作系统,并且具有操控所有硬件资源的能力。但它有其局限性:在EFI规范中,

1,EFI只是硬件和预启动软件间的接口规范

2,不提供负载的内存保护功能,只具备简单的内存管理机制。

3,EFI不提供中断机制,即每个驱动程序必须使用轮询+解释的方式运行,效率较低

当EFI所有组件加载王城后,系统可以开启一个类似操作系统shell 的命令解释环境,在这里用户可以使用各种EFI应用程序,如硬件检测及排错软件,引导管理等等。



5、EFI的组成

一般来说,EFI由如下几部分组成

1,Pre-EFI初始化模块:初始化CPU,主桥及存储器

2,EFI驱动执行环境:加载DXE

3,EFI驱动程序:枚举、识别及加载其他设备驱动程序

4,兼容性支持模块(CSM):为不支持EFI的操作系统提供支持

5,EFI高层应用:如引导程序,排错程序等

6,GUID磁盘分区表:GPT(见下文)



二、全局唯一标识分区表:GPT

全局唯一标识分区表(GUID Partition Table,GPT)是一个实体硬盘的分区表的结构布局的标准。它是EFI标准的一部分,被用于替代BIOS系统中的主引导记录(MBR)分区表。



特点:

     在MBR硬盘中,分区信息直接存储于主引导记录(MBR)中。但在GPT硬盘中,分区表信息存储于GPT头中。(处于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头)

     跟现代的MBR一样,GPT也使用逻辑区块地址(LBA)作为寻址方式。传统MBR信息存储与LBA0,GPT头存储于LBA1,接下来LBA2 ~ LBA33是分区表,使用16384字节(32扇区)作为GPT分区表。LBA34是硬盘上第一个分区的开始。

     为了减少分区表损坏的风险,GPT在硬盘的最后保存了一份分区表的副本



传统MBR(LBA0)

     在GPT分区表的开头,处于兼容性考虑仍然存储了一份传统的MBR,用来放置不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR叫做保护MBR。在支持GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,表示这块硬盘使用GPT分区表。不能识别GPT的操作系统通常会识别到一块未知类型的分区,并且拒绝对其进行操作,除非用户删除这个分区。另外,能够识别GPT的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或分区表中有多个项,也会拒绝对硬盘进行操作。

另外在MBR与GPT共存的混合分区表硬盘中,可以使不支持GPT启动的操作系统从MBR启动,启动后只能操作MBR分区表中的分区。



GPT分区表头(LBA1)

     分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。一般最多可以创建128个分区,即分区表中保留128个项,每个都是128字节。

     分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件,引导程序和操作系统可以根据校验值来判断分区表是否出错,如果出错,则使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份的也校验错误,硬盘将不可用,所以GPT分区表不能直接使用16进制编辑器修改。



分区表项(LBA2-33)

GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。


GPT的优点

    1,使用GUID来表明分区类型 – 无冲突

    2,为每个分区提供了一个唯一硬盘GUID和一个唯一分区GUID – 一个好的不依赖文件系统封的引用分区和硬盘的方式

    3,任意分区数 – 取决于给分区表分配的空间 – 不需要扩展和逻辑分区。默认定义了128个分区的空间。

    4,使用64位LBA存储扇区数 – 最大硬盘可寻址大小为2 ZB。

    5,存储了备份头和分区表可用于主要部分损坏时进行急救。

    6,CRC32校验值用于检测头和分区表的错误与损坏


GPT体系

GPT分区表项的格式

起始字节
长度 内容
0 16字节 分区类型GUID
16 16字节 分区GUID
32 8字节 起始LBA(小端序)
40 8字节 末尾LBA
48 8字节 属性标签
56 72字节 分区名(可以包括36个UTF-16(小端序)字符)

资料来源:Wiki、ArchLinux

原创文章,作者:lichenhan,如若转载,请注明出处:http://www.178linux.com/23165

(0)
lichenhanlichenhan
上一篇 2016-07-12
下一篇 2016-07-12

相关推荐

  • 文本处理工具之grep

                    文本处理工具之grep 一、grep的简介 1、grep是一个文本过滤器的工具,它根据用户指定的模式(pattern)对目标文本进行匹配检查,并将匹配的行打印到标准输出或输出重定向。 2、模式:由文本字符或正则表达式组成 3、正则表达式分…

    2017-05-06
  • GIAC 2017全球互联网架构大会12月22日即将登陆上海!

    12月22~23日,高可用架构和msup联合主办的GIAC 全球互联网架构大会将于上海举行。GIAC 2017全球互联网架构大会优惠报名平台活动家

    2017-12-04
  • shell精讲

    shell精讲 shell变量        定义变量时,变量名不加美元符号($,PHP语言中变量需要) 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: 首个字符必须为字母(a-z,A-Z)。 中间不能有空格,可以使用下划线(_)。 不能使…

    Linux干货 2016-08-21
  • 源码编译安装之apache

    工具: Development tools组包 httpd-2.2.9.tar.gz links网站浏览工具   安装apache之前需要安装编译需要的环境“Development tools”这个是编译使用的必须的环境包,使用下面的命令可以安装。 [root@CentOS6 ~]# yum groupinstall&…

    Linux干货 2016-08-24
  • Shell编程之位置变量

           linux中命令可以接受参数,同样的,shell脚本也可以接受参数。这些参数用$1、$2、$3…$n表示。       $0  表示脚本本身       $1  传递给脚本的第1个参数 $2  传…

    Linux干货 2016-08-12