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

相关推荐

  • 初识Linux-即使是997也不能停止学习

    1.计算机的组成及其功能:    从1946年第一台通用计算机ENIAC诞生至今,几乎所有的计算机系统都是建立在冯诺依曼体系结构上的。那么何为冯诺依曼体系结构? 冯诺依曼体系结构:        控制器:是整个计算机的中枢,负责计算机的整体调度工作,将指令从存储器中取出,并对指令进行解释执行。 &n…

    Linux干货 2016-10-29
  • Linux内核编译过程详解

    前言 Linux内核是Linux操作系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性。内核主要功能包括进程管理、内存管理、文件管理、设备管理、网络管理等。Linux内核是单内核设计,但却采用了微内核的模块化设计,支持内核线程以及动态装载内核模块的能力。 Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订…

    Linux干货 2015-04-01
  • Net25-第13周作业

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名; 3)添加samba用户gentoo,centos和u…

    Linux干货 2017-05-15
  • RAID

    RAID:       Redunant ARRAYS OF Inexpensive Disks       廉价磁盘阵列 Independent        Berkeley: A case for Redundent Arrays of Inexpens…

    Linux干货 2016-12-23
  • 第一周作业

    一、计算机的组成及其功能。 计算机是由运算器、控制器、存储器、输入设备、输出设备五大部件组成,每一个部分分别按照要求执行特定的基本功能。 运算器:运算器的主要功能是对数据进行各种运算。 控制器:控制器是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊的进行操作及处理。 存储器:存储器的主要功能是存储程序和各种…

    Linux干货 2017-01-18
  • 第四周作业

    Linux系统文件管理使用案例 1、 复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 首先,利用cp命令将/etc/skel目录复制为/home/tuser1: [root@localhost ~]# cp -r /etc/skel /home/tuser1 随后通过chmo…

    Linux干货 2018-03-24