ESP分区和MSR分区是干嘛的?
首先需明确的是只有UEFI启动+GPT(GUID Partiton Table)硬盘分区才会出现ESP分区和MSR分区,而传统(Legacy)启动+MBR(Master Boot Record)硬盘分区完全用不到ESP分区和MSR分区。UEFI前身是英特尔在1998年开始开发的Intel Boot Initiative,后来被重命名为可扩展固件接口(Extensible Firmware Interface,缩写为EFI)。2005年英特尔将其交由统一可扩展固件接口论坛(Unified EFI Forum)来推广与发展,EFI也正式更名为UEFI(Unified EFI,即统一可扩展固件接口)。
UEFI论坛于2007年1月7日公布2.1版本,所以近十来年的新配电脑标配是UEFI启动,只有十来年前的电脑才是传统的BIOS启动。UEFI固件也可以支持传统BIOS启动环境,两者并没有功能上的本质区别,PC的启动固件的引导过程从IBM PC机诞生那天起,就没有本质改变过。在ROM Stage阶段没有内存,需要在ROM上运行汇编语言代码。临时空间Cache登场用作RAM后,C语言才可以粉墨登场。
在RAM Stage阶段,有了可以大展拳脚的内存,很多额外需要大内存的东西可以开始运行了,这时就需要初始化芯片组、CPU、主板模块等核心过程。在Find Somethin to boot Stage阶段就要枚举设备,发现启动设备,并把启动设备之前需要依赖的节点通通打通,然后才开始移交工作,这才是Windows或者Linux时代的开始。UEFI的发明有偶然性,也有必然性。UEFI发明之前,PC机都还在用传承自1979年的传统BIOS,一堆用汇编写的硬件初始化代码,它封闭、神秘,并且充满了各种不清不楚的预设和祖传代码。1997年英特尔的员工基于传统BIOS来支持基于安腾处理器芯片组的服务器,但并不顺利,最终该计划被证实不可行,英特尔最终最顶开发一套全新的机制。
在平台固件和OS加载器之间使用高级C语言接口成为了一个必然选择,这样操作系统可以尽可能少地去了解平台的硬件细节,为启动过程定义一个在固件和操作系统间和CPU架构无关的API就由此诞生了。UEFI是用模块化C语言风格的参数堆栈传递方式,动态链接的形式构成的,较BIOS更易于实现,容错和纠错特性更强,缩短了系统研发的时间。UEFI的启动时间要比传统的BIOS启动要快,可支持鼠标图形化操作。在使用新硬盘之前必须对它进行分区,这些分区包含了分区从哪里开始的信息,这样操作系统才知道那个扇区是属于哪个分区的,以及哪个分区是可以启动的。MBR即主引导记录,最早在1983年由IBM PC DOS 2.0中提出。之所以叫主引导记录,是由于它存在于驱动器开始部分的一个特殊的启动扇区,包含了已安装的操作系统的启动加载器和驱动器的逻辑分区信息。
MBR支持最大2TB的硬盘,而无法处理大于2TB容量的硬盘,它只能创建最多4个主分区,如果还要建立更多的分区,就需要创建所谓的“扩展分区”,并在其中创建逻辑分区。严格意义上将扩展分区并不是一个实际意义的分区,仅仅只是一个指向下一个分区的指针。GPT即全局唯一标识符(GUID)分区表,顾名思义驱动器上每一个分区都有一个全局的唯一的标识符,这串随机生成的字符串可以保证为地球上的每一个GPT分区都分配完全唯一的标识符。GPT没有MBR那么多限制,容量可以达到操作系统和文件系统都没法支持,并且还支持无限个分区数量,而不需要创建扩展分区。目前限制仅在操作系统上,Windows最多支持128个GPT分区。UEFI用于取代老旧的BIOS,而GPT用于取代老旧的MBR。UEFI虽然可以引导MBR,但它似乎与GPT更配,值得注意的是传统的BIOS是没法引导GPT分区内的系统,会黑屏提示无法引导系统磁盘。
ESP在Windows操作系统下不可见,支持UEFI启动的电脑都需要从ESP启动系统,操作系统被引导之后,就不会再使用它。虽然ESP是一个FAT16或FAT32的格式的物理分区,但它的分区标识是EF(十六进制)而不是常规的0E或0C。MSR分区本质就是写在分区表上的未分配的空间,Windows系统并不会想MSR分区建立文件系统或者写数据,但在Windows8以上系统更新时,就会检测MSR分区,所以MSR分区对于Windows是必须保留的,不可删除,而对于Linux、MacOS则不受影响。
至于HD和RD,很明显是用来区分存储设备的类型,比如下图:HD表示硬盘,而RD表示U盘,而后面阿拉伯数字0、1、2……则表示系统自检后挂着的顺序。历史的车轮总是在往前挪,很多技术是因为不适应当下的局势又很难跃进,所以就干脆推倒重来。如果不是十几年前的老旧电脑,还是UEFI+GPT更配。