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

相关推荐

  • 逻辑卷(LVM)管理实例详解

    LVM基本术语 下面是LVM需要了解的基本术语:    物理卷(PV physical volume): 它可以是物理硬盘上的分区,也可以是整块物理硬盘;  卷组(VG volume group): 建立在物理卷之上,一个卷组至少包括一个物理卷,可以动态增删物理卷;  逻辑卷(LV logical volume):建立…

    Linux干货 2016-09-01
  • 马哥教育面授班22期:第一天课程练习

    Linux发展史:        1984年:Richard Stallman发起GNU项目和自由软件基金会创建开源的UNIX实用工具版本        创建通用公共许可证(GPL)        1991年:Linux Torvalds发…

    Linux干货 2017-05-16
  • 虚拟网卡实验:网卡别名 与 bond多网卡模式

     一、网卡别名:多IP 绑定一个 Interface         将多个IP地址绑定到一个NIC上            网卡别名:    &n…

    Linux干货 2016-09-05
  • linux系统启动流程及内核编译

    Linux系统启动流程 initialization [ɪˌnɪʃəlaɪ'zeɪʃn] 初始化 内核参数: /usr/share/doc/kernel-doc-VERSION/Documentation 系统初始化流程(内核级别): POST –> BootSequence(BIOS) –> BootLoade…

    Linux干货 2016-09-19
  • Linux基本文本管理命令

    一.Linux上的文件管理命令都有哪些,其使用的方法及其相关演示1.cp命令:copy (文件复制功能)源文件,目标文件单源复制:cp [OPTION]…[-T] SOURCE DEST多源复制:cp [OPTION]…SOURCE…DIRECTORYcp [OPTION]… -T DIRECTORY SOURCE… 单源复制:cp [OPTION]…[-T…

    2017-09-20
  • 8.1作业

    创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为“Gentoo Distribution” [root@localhost wang]# useradd -G bin,root -s /bin/csh -c "Gentoo&n…

    Linux干货 2016-08-02