自学内容网 自学内容网

磁盘分区与固件启动

扇区是磁盘读写的基本单位,是磁头从磁盘中读取数据的最小单位,一般是512B(现代磁盘还有4

KB),多个相邻的扇区组合在一起形成一个簇。其中磁盘的第一个扇区特别重要,它存储了磁盘分区表。

早期磁盘的第一个扇区里面含有的磁盘分区表我们称为MBR(Master Boot Record)格式,由于磁盘容量不断扩大,大于2TB以上的磁盘分区已经让某些操作系统无法存取,因此后来又多了一个新的磁盘分区格式,称为GPT(GUID Partition table)

一、 MBR分区与BIOS启动

早期的操作系统采用MBR的方式来引导程序与分区表,引导程序(bootloader)与分区表放在磁盘的第一个扇区,这个扇区通常是512Bytes,主引导记录(MBR)就是这第一个扇区。

 引导程序占446字节,其后64字节描述了分区表,每个分区占用16字节,故可以描述4个分区。最后两个字节是结束标识55AAH。

其中描述每个分区的16字节各字节表示的含义如下:

 第一个字节是引导标志,指示哪个分区是活动的,即哪个分区包含引导加载程序,有一个活动分区也是BIOS判断该设备可以作为启动设备的标识之一。在MBR的4个分区中只有一个分区是活动分区,也就是说只有一个分区能够用作加载操作系统。

第13到16字节标识分区的总扇区数,即最多可以表示2^{32}个扇区,每个扇区为512字节,故该区最大容量为2^{32}*512B=2TB,故MBR最多使用容量位2TB的启动。

CMOS是记录了各项硬件设备参数且嵌入在主板上的存储器,BIOS会根据用户设置去分析哪个设备能够作为启动设备,如果该设备、是启动项,BIOS会读取该设备的第一个扇区的MBR的位置,并将其加载到内存中,并将控制权转给MBR的bootloader。由于MBR的boot loader只有446字节,所有bootloader是一个最小程序,当将控制权交给bootloader后会运行存储在boot分区的GRUB,GRUB启动引导阶段会找到磁盘上操作系统的内核,并将内核加载到内存中进行执行,将控制权交给操作系统内核。

BIOS的启动流程可以概括为:

BIOS启动流程:

系统开机 - 上电自检(Power On Self Test 或 POST)。
POST过后初始化用于启动的硬件(磁盘、键盘控制器等)。
BIOS会运行BIOS磁盘启动顺序中第一个磁盘的首440bytes(MBR启动代码区域)内的代码。
启动引导代码从BIOS获得控制权,然后引导启动下一阶段的代码(如果有的话)(一般是系统的启动引导代码)。
再次被启动的代码(二阶段代码)(即启动引导)会查阅支持和配置文件。
根据配置文件中的信息,启动引导程序会将内核和initramfs文件载入系统的RAM中,然后开始启动内核。

二、GPT分区与UEFI启动

GPT磁盘分区使用GUID分区表,是源自EFI标准的磁盘分区表结构的标准。与普遍使用的主引导记录(MBR)分区方案相比,GPT提供了更加灵活的磁盘分区机制。GPT磁盘整体的布局如下所示:

GPT分区已经没有所谓的主、扩展、逻辑分区的概念,既然每组记录可以独立存在,当然每个都可以视为主要分区,每一个分区窦可以拿来格式化使用。GPT分区使用一个16字节的GUID来表示某个分区。

如果磁盘大于2TB,系统会默认使用GPT分区,如果磁盘小于2TB,系统会默认使用MBR分区。

BIOS搭配GPT

BIOS无法识别GPT分区,主要通过GPT分区的MBR提供的兼容模式,但是BIOS能够从MBR中读取第一阶段的启动引导程序。如果启动引导程序能够支持GPT,BIOS同样可以读取到操作系统内核。如果是类似GRUB这样不支持GPT的启动引导程序的话,就得额外分区出一个BIOS boot分布区,该分区存放其它开机程序。

与BIOS模式相比,UEFI可以直接获得GPT的分区表,不过最好拥有BIOS boot的分区支持,这样更加灵活,这样你就可以安装BIOS模式下的grub,然后以任意模式(UEFI/BIOS)进行启动引导。

UEFI可以同时识别MBR分区和GPT分区,所以在UEFI下,MBR磁盘和GPT磁盘都可用于启动操作系统和数据存储。不过微软限制,UEFI下使用Windows安装程序安装操作系统是只能将系统安装在GPT磁盘中。

仅从系统启动原理方面来讲,UEFI之所以比BIOS强大,是因为UEFI本身已经相当于一个微型操作系统,其优点为:

1、UEFI已具备文件系统的支持,他能直接读取FAT分区中的文件

2、可开发出直接在UEFI下运行的应用程序,这类程序文件通常以efi结尾

由于UEFI既可以直接识别FAT分区中的文件,又可以直接运行其应用程序,那么完全可以将操作系统安装程序做成efi类型的应用程序,然后把它放到任意fat分区中直接运行即可。而BIOS必须先从MBR中读取启动引导程序,在从活动分区中引导启动操作系统,对扇区的操作远比不上对分区中文件的操作更直观更直接。只要将安装文件到一个FAT32(主)分区/U盘中,然后从这个分区/U盘启动,安装操作系统就变得简单

UEFI启动流程概括为:

系统开机 - 上电自检(Power On Self Test 或 POST)。
UEFI 固件被加载,并由它初始化启动要用的硬件。
固件读取其引导管理器以确定从何处(比如,从哪个硬盘及分区)加载哪个 UEFI 应用。
固件按照引导管理器中的启动项目,加载UEFI 应用。
已启动的 UEFI 应用还可以启动其他应用(对应于 UEFI shell 或 rEFInd 之类的引导管理器的情况)或者启动内核及initramfs(对应于GRUB之类引导器的情况),这取决于 UEFI 应用的配置

(UEFI 引导管理器,boot manager) 

UEFI包含一个引导管理器,它允许从UEFI定义的文件系统上的任何文件或通过使用UEFI定义的映像加载服务加载按照该规范编写的应用程序(包括操作系统第一阶段加载程序)或UEFI驱动程序。UEFI定义了NVRAM变量,用于指向要加载的文件。这些变量还包含直接传递给UEFI应用程序的特定于应用程序的数据。这些变量还包含一个人类可读的字符串,可以在菜单中显示给用户。
UEFI定义的变量允许系统固件包含一个引导菜单,该菜单可以指向所有操作系统,甚至是同一操作系统的多个版本。UEFI的设计目标是拥有一组可以驻留在平台固件中的引导菜单。UEFI仅指定用于选择引导选项的NVRAM变量。UEFI将菜单系统的实现作为增值的实现空间。


原文地址:https://blog.csdn.net/qq_44807736/article/details/142527090

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!