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

相关推荐

  • 2016/10/14日作业

    ##操作类: 1、设置自己的终端提示符,要求字符终端登录时: a> 需要带颜色 b> 需要显示当前执行到了第几条命令 c> 显示当前登录终端,主机名和当前时间 a>export  PS1='[\e[034m\u @\h \w \#]\$ \e[0m'  b>export PS1=&#039…

    Linux干货 2016-10-20
  • Centos6启动流程详解

    一、名词解释 POST: Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测。 BIOS:Basic Input andOutput System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系…

    2017-03-28
  • 第三周作业

    1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d' ' -f1 | sort -u 2.取出最后登录到当前系统的用户的相关信息。 […

    Linux干货 2017-01-04
  • 网络基础知识札记

    Linux网络属性管理(1)     Bell(AT&T), PARC(Xerox)        以太网     计算机网络:共享底层通信信道         CSMA/CD算法      &nbsp…

    Linux干货 2016-09-06
  • ansible

    Ansible 1、  特性: 模块化:调用特定的模块,完成特定任务; 基于Python语言实现部署简单:agentless; 支持自定义模块; 支持playbook;编排任务; ansible自身并不实现任何管理任务,它的所有管理任务,统统都使用模块完成;             &nb…

    Linux干货 2016-11-11