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 11:15
下一篇 2016-07-12 11:15

相关推荐

  • 【N25第四周作业】grep

    文本处理工具: Linux上文本处理三剑客: grep, egrep, fgrep:文本过滤工具(模式:pattern)工具; grep:基本正则表达式,-E,-F egrep:扩展正则表达式, -G,-F grep:不支持正则表达式, sed:stream editor, 流编辑器;文本编辑工具; awk:…

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

    一、计算机的基本组成和功能   cpu包括运算器、控制器、寄存器、缓存       运算器:计算功能,对数据进行加工处理的的部件;       控制器:负责从存储器取出指令,控制cpu计算器之间的运行结果和状态;       寄存器:暂存指令和数据的地方,存储…

    Linux干货 2016-12-04
  • vsftpd基于mysql存储认证(centos7)

    (1)首先开发包组和服务器平平台开发包组 (2)yum安装需要的依赖包 (3)编译安装pam_mysql模块 (4)配置mysql,并添加mysql中的vsftpd进程用户,且创建vsftpd数据库,并将vsftpd数据库授权给vsftpd用户,且创建vsftpd.users表,并在表中添加用户tom (5)创建vsftpd要上传和下载的URL (6)创建基…

    Linux干货 2016-10-15
  • 18-系统启动故障修复-实践

    说明:重启时可以选择性在vmlinuz所在行末尾添加 selinux=0;或者直接编辑/etc/selinus/config文件,更改 SELINUX=disabled 关闭SELINUX。可以避免打标签,节省启动时间 以下操作都需要进入bootloader引导加载项修改内核启动参数,在vmlinuz所在行末尾添加一个启动选项 如何进入bootloader引…

    2017-04-02
  • 博客作业网络班22期+第6周(9.12-9.18)

    请详细总结vim编辑器的使用并完成以下练习题1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@localhost /]# cp /etc/rc.d/rc.sysinit /tmp[root@localhost /]# sed -i 's/\…

    Linux干货 2016-09-19
  • 使用yum源码编译安装程序

    需要的安装包:httpd-2.2.29.tar.bz2 1、安装develpment tools     yum groupinstall "Development Tools" 2、下载服务器中的http源安装包到本地,然后解压到指定文件夹中 lftp 10.1.0.1:/pub/Sources/…

    Linux干货 2016-08-24