文章目录
- 前言
- 启动流程概述
- 磁盘分区格式
- MBR磁盘
- GPT磁盘
- 隐藏分区
- 传统BIOS引导
- 传统BIOS启动流程
- UEFI引导
- UEFI引导程序
- UEFI启动流程
- 引导加载程序
- 启动操作系统
- 相关参考
前言
现代计算机的启动是一个漫长的流程,这个流程中会涉及到各种硬件的配置与交互,包括硬件状态检测、设备配置等,并最终引导到用户可操作的操作系统界面。
启动流程概述
现代计算机的启动流程总体上可以分成三个阶段:BIOS/UEFI启动阶段、引导加载程序以及启动操作系统。如下:
其中:
- BIOS/UEFI阶段:完成上电自检、基本硬件初始化,选择引导介质,并将控制权移交到引导介质上的加载程序;
- 引导加载程序:负责完成操作系统的选取,并引导对应的操作系统;
- 启动操作系统:操作操作正式开始接管计算机,并对硬件继续进行初始化、加载驱动以及拉起系统服务,并最终进入人机交互界面。
对于普通计算机而言,主要还是从硬盘引导操作系统。
磁盘分区格式
BIOS和UEFI引导方式与磁盘采用的分区格式有对应的关系,因此在说明计算机启动流程之前,有必要对磁盘分区格式进行一定的了解。通常,我们在使用磁盘时都会对磁盘进行分区,并在分区上创建文件系统之后进行使用,这里涉及到了磁盘是如何管理这些分区信息的。目前有两个标准的分区技术可以被使用:MBR分区格式和GPT分区格式。
MBR磁盘
早期计算机基本都是采用MBR磁盘格式,并配合传统BIOS引导方式进行启动。MBR,全称Master Boot Record,即主引导记录,是一种将磁盘引导程序和磁盘分区信息保存在磁盘第一个扇区(扇区大小512B)的磁盘分区格式,其结构示意如下:
主引导扇区存储的内容包括:
- 引导程序:基于传统BIOS方式启动的计算机,在上电时会从磁盘第一个扇区加载引导程序到内存指定位置,并进行启动。主引导记录可支持存储最长引导程序大小为448字节;
- DPT分区表:主引导记录使用64字节大小的空间,最多可记录4个分区的信息,这也是在windows系统下最多只能创建4个主分区的原因,但可以将其中主分区信息设置成扩展分区,扩展分区又可以继续划分成多个逻辑分区;
- 结束符:主引导扇区结束标识。
由于MBR只使用磁盘的第一个扇区来保存分区表信息,这导致了一系列限制,例如划分的主分区数量不能超过4,最大只能识别2TB左右的分区空间。此外,若第一个扇区遭到损坏,所有的分区信息都会丢失。
GPT磁盘
为了破除只有512个字节的MBR分区表的许多限制,技术人员对硬盘分区表的标准进行了升级,提出了新的 GUID Partition Table(全局唯一标识磁盘分区表),简称 GPT 分区表。GPT磁盘的结构示意如下:
对GPT磁盘的关键结构进行说明如下:
- 保护MBR:GPT磁盘为了保持与MBR磁盘的兼容性,将磁盘的第一个扇区定义为保护MBR。GPT分区技术本身不会使用到这个扇区。同时为了防止一些MBR磁盘工具破坏GPT磁盘的分区信息;
- GPT头:
- GPT分区表:从第2扇区到第33扇区,用于记录分区表信息;
- 分区区域:磁盘数据分区;
- GPT备份区域:包含GPT分区表备份和GPT头备份,若GPT头部和分区表遭到损坏,可以通过备份区域进行恢复。
隐藏分区
GPT磁盘还包含了两个隐藏分区:
- ESP分区:EFI系统分区,主要用于在EFI平台上引导操作系统,可以存放EFI引导程序、驱动程序以及系统维护工具等;
- MSR分区:微软保留分区,与Windows操作系统相关,其它操作系统可以不关心。
传统BIOS引导
BIOS,Basic Input System,即基本输入输出系统,是一组固化在计算机主板上一个只读存储器芯片的程序,保存着计算机最初始的系统配置信息、上电自检程序和系统初始化程序。
传统BIOS启动流程
BIOS的工作流程和功能可以分为以下几个主要方面:
- 上电自检:系统上电后,会首先加载BIOS程序执行。BIOS程序启动后会进行上电自检;
- 准备硬件:BIOS设置并准备好电脑的主要硬件,比如CPU和硬盘,为启动操作系统做好准备。
- 引导过程:BIOS确定从哪个设备(硬盘、U盘等)启动电脑,并开始加载操作系统。
- 系统设置:BIOS提供一个界面,让用户可以设置或更改电脑的硬件配置。
UEFI引导
UEFI,统一可扩展固件接口,用于替代传统BIOS的引导方式。
UEFI引导程序
UEFI引导方式主要与GPT磁盘进行配合完成计算机的启动。在前面提到过,GPT磁盘中包含了ESP隐藏分区,用于存放EFI引导程序。EFI引导程序会在计算机启动后,被UEFI固件加载继续执行引导流程。对于不同处理器平台,UEFI规范定义的EFI引导程序名称存在差异。
硬件平台 | 文件名 | PE可执行机器类型 |
---|---|---|
32-bit | BOOTIA32.EFI | 0x14c |
x64 | BOOTx64.EFI | 0x8664 |
AArch32 | BOOTARM.EFI | 0x01c2 |
Aarch64 | BOOTAA64.EFI | 0xAA64 |
在此以Armv8平台为例,可以查看ESP分区(通常会被挂载到/boot/efi目录)下的EFI引导程序信息:
[root@localhost BOOT]# file BOOTAA64.EFI
BOOTAA64.EFI: MS-DOS executable PE32+ executable (EFI application) Aarch64 (stripped to external PDB), for MS Windows
UEFI启动流程
UEFI的启动流程相对简化了很多,在系统上电后,UEFI固件被加载执行,在UEFI完成基本的系统配置后,会从ESP分区查找指定的EFI引导程序并执行,随后所有的流程便由EFI引导程序接管。
引导加载程序
启动操作系统
相关参考
- 《Gentoo Handbook》