BIOS、UEFI、分区(MBR、GPT、ESP)及 Bootloader (启动加载器/启动引导程序、GRUB、Syslinux)

1.BIOS 与 UEFI

BIOS 是第一代的( UEFI 是第二代),用于识别管理和初始化(注意是 识别 ,操作系统才是 使用 )电脑主板上各种硬件如 CPU 、内存 、显卡、硬盘等的一个“相对固化”的电脑主板上的小程序,简单来说,有了 BIOS 电脑才有了各种最基本能力和行为。第一代的 BIOS 比较简陋,难看又难用。

第二代叫 UEFI 或是 UEFI BIOS ,其实,它叫 UEFI 之前,它是英特尔私有的小创意产品,叫EFI,本质上它还是 BIOS 只不过穿花衣换新貌,好看又好用,基本功能主要还是识别和初始化硬件,当然,也开始干一点点其它的活了,比如可以直接读取 FAT 分区( UEFI 不认识 NTFS )中的文件、可以直接运行其它的 xxx.efi 程序,甚至可以直接引导操作系统的启动。

Win8 及以上系统原生支持 UEFI 方式安装系统(需 GPT 分区方式,需64位系统),即在 BIOS 中设置为开启EFI或者UEFI 后,就可对 Win8 的 ISO 解压文件进行引导并安装系统,也可用于安装后系统的启动(需有 ESP 分区)。如果用U盘等移动存储设备安装Win7 及以下系统,需从 Win8 中提取Bootmgfw.efi文件,重命名为BOOTX64.EFI 放在 \EFI\Boot\ 下,然后需要在 UEFI 的“启动(boot)”栏,将“第一启动选项”选择为UEFI XXX 即可安装 Win7 及以下系统。另一种方法是:从 Win8 的安装文件中提取 Shell.efi 和 Bootmgfw.efi 文件,拷贝到安装文件所在分区的*根*目录,然后进入UEFI Shell 界面后在命令行下手动进行引导安装,Win7 及以下系统在配合 ESP 分区时也可用于正常使用时系统的引导启动。

理解BIOS_UEFI_MBR_GPT_ESP_Bootloader_启动引导程序的基本概念

理解BIOS_UEFI_MBR_GPT_ESP_Bootloader_启动引导程序的基本概念

2.分区及MBR、GPT、MSR、ESP

分区是将硬盘的存储区域划分为一个或多个可以独立访问的区块(英文叫 sectors,即扇区),然后给每个扇区分配一个地址,称为逻辑块地址(即LBA)。例如,双重系统或多重系统的启动、linux系统使用的 swap 区等都需要进行分区,当然,单系统时不进行分区也不影响硬盘的使用(此时是有一个分区)。此外,分区也可以从逻辑上隔离数据,例如为音视频数据创建单独的分区。

存储硬盘分区信息的区域上的叫 分区表 ,有两种主流的分区模式:传统的 Master Boot Record (主引导记录 MBR )和新的 GUID Partition Table (全局唯一标示硬盘分区表 GPT )。后者功能更强大,解决了许多 MBR 的限制。 MBR 方式中的分区表存储在硬盘等设备最开始的 512 字节。其中,包含操作系统启动加载器(简化的启动引导程序,记录了活动分区中完整的引导程序的位置并进行跳转和移交控制权限,如跳转至grub、ntldr等完整功能的引导程序存储地址,使得这些程序被读入内存并被 CPU 运行)和分区表,注意, MBR 并不位于某个分区中,而是硬盘分区划分开始之前的一小段区域,也即设备的最开始的存储区域。MBR 分区方式,硬盘仅能被分区为 4 主分区或 3 主分区和1 扩展分区(进一步细分为逻辑分区)。MBR 方式分区最大支持管理 2.2TB 硬盘空间。

GPT 分区方式会为每一个分区分配一个全局唯一的标识符,理论上 GPT 支持无限个磁盘分区,这个标识符是一个随机生成的字符串。在 GPT 分区表开始的前部,处于兼容性考虑仍然存储了一份的 MBR,用来防止不支持 GPT 的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR(PMBR)。在支持UEFI引导启动的操作系统中,这里也用于存储第一阶段的启动代码。在 PMBR 中,只有一个标识为 0xEE 的分区,以此来表示该硬盘使用 GPT 分区表。不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区,这就避免了意外删除分区的危险。另外,能够识别 GPT 分区类型的操作系统会检查保护MBR中的分区表,如果分区类型不是 0xEE 或者 MBR 分区表中有多个项,也会拒绝对硬盘进行操作。PMBR 存储了 GPT 分区表的一部分分区(通常是前四个分区),可以使不支持从 GPT 分区类型启动的*操作系统*从这个 MBR 启动(但需 BIOS 可识别 GPT 分区方式…操作系统从 GPT 分区启动是需要类似 Bootmgfw.efi 文件的,与操作系统能够读写(认识) GPT 分区是另一回事。),启动后只能使用 MBR 分区表中的分区,如 Boot Camp 就是使用这种方式启动 Windows。而且,GPT 分区方式各分区是等价的,都相当于是主分区了,利于 Windows 实现动态磁盘(类似 Linux 的 LVM )。

GPT 分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量,还记录了这块硬盘的 GUID,记录了分区表头本身的位置和大小(位置总是在 LBA 1)以及备份分区表头和分区表的位置和大小(备份 GPT 在硬盘的最后)。它还储存着它本身和分区表的 CRC32 校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从备份 GPT 中恢复整个分区表,如果备份 GPT 也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。

GPT 分区表项(LBA 2–33):GPT 分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型 GUID。例如,UEFI 系统分区的GUID 类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的 GUID(这个 GUID 指的是该分区本身,而之前的 GUID 指的是该分区的类型)。再接下来是分区起始和末尾的64位 LBA 编号,以及分区的名字和属性。

敲黑板划重点:因为第一代 BIOS 无法识别 GPT 分区,所以第一代 BIOS 下 GPT 分模式区不能用于引导启动操作系统,在操作系统(如 Win7/8 )支持识别 GPT 分区的情况下可用于数据存储,相当于是一块无启动功能的从盘。UEFI 可同时识别 MBR 分区和 GPT 分区,因此第二代 UEFI BIOS 下,MBR 分区的磁盘和 GPT 分区的磁盘都可用于引导启动操作系统和数据存储。UEFI 与 GPT 之间无必然联系,在使用 UEFI 启动引导方式时,需要一个 FAT32 格式的分区并存放 .efi 格式的引导文件即可,GPT 分区方式最大的便利在大于 2T 硬盘的存储空间管理上。使用第二代 UEFI 并配合 GPT 分区就一举两得,即便利了系统的引导也方便了大容量硬盘的管理!!!这两种分区模式可以用 DiskGenius 等工具进行互相转换。

Microsoft 保留分区 (MSR) 在每个磁盘驱动器上保留空间以供以后的操作系统软件使用。GPT 磁盘不支持隐藏的扇区。每个 GPT 磁盘都必须包含一个 MSR。磁盘上分区的顺序应该为 ESP(如果有)、OEM(如果有)、MSR,后跟主数据分区。非常重要的一点是:一定要在主数据分区之前创建 MSR 。对于第二代BIOS 即 UEFI 来说,每个可启动驱动器必须包含一个 ESP、一个 MSR 和至少一个包含操作系统的基本数据分区。每个数据驱动器(从盘)必须包含至少一个 MSR 和一个基本数据分区。

UEFI 规范要求有 ESP 分区,是强制的,(U)EFI 系统分区(也称为 ESP 或者 EFI system )是一个 FAT32 格式的物理分区。ESP是一个独立于操作系统之外的分区,操作系统被引导之后,就不再依赖它。使用 UEFI 模式的启动电脑需要从 ESP 分区启动系统,从 ESP 加载 .efi 启动程序和应用程序。这使得 ESP 非常适合用来存储那些系统级的维护性的工具和数据,比如:引导管理程序如GRUB、驱动程序、系统维护工具、系统备份等,甚至可以在 ESP 里安装一个特殊的操作系统(mini Linux 或 Win PE 等)。之所以将 UEFI 与 GPT 联系在一起,那是因为在BIOS设置启动模式设为 UEFI 后,Win7/8 系统在安装时要求 GPT 硬盘。其实我们在安装系统时可以是 bios+mbr 模式安装系统,然后我们可以再建一个 FAT 格式的100M大小的主分区,注意必须为主分区。然后用 bootbcd 等工具重建 UEFI 引导到刚才建立的 FAT 分区里去,分区里有了 EFI 文件夹,意味重建 UEFI 引导成功,就可以在 BIOS 设为 UEFI 引导启动方式。

3.Bootloader (启动加载器/启动引导程序、GRUB、Syslinux)

Bootloader 又叫启动加载器/启动引导程序,是 BIOS 或 UEFI 启动的第一个“外部”程序(这个外部是指硬盘、U盘等相对于电脑主板来说的外部)。负责使用系统内核加载设备驱动模块(系统的启动不是一蹴而就的,有个循序渐进,由小到大逐步迭代的过程),初始化内存盘,开始启动过程。系统内核也是一种程序,一般用汇编语言写成,是电脑硬件能够“读懂”的机器语言,因此用它来电脑硬件“沟通协商”,为完整系统的启动开疆拓土打下基础,让各个核心硬件设备进入工作状态,但它的这种底层特性也带来了使用的不便,只干最基本最重要的工作。Bootloader 就是 BIOS 或 UEFI 与系统内核之间的纽带,系统内核与完整的系统之间也是桥梁纽带关系了。

启动引导程序有系统自带且用途专一的如 WinXP 系统的 ntldr ;还有,博爱众生心怀天下的,如 GRUB, GRUB2或者 Syslinux 即可以用于 Linux 系统也可用于 Windows 系统。但它们的特征信息如加装它们时的位置信息,是必须被“记录”在主引导记录(MBR), 或者GUID 分区表(GPT) 里了,基本过程是:开机上电——>BIOS/UEFI——>在 MBR/GPT读取跳转信息——>Bootloader(ntldr/GRUB /Syslinux)——>系统内核——>完整系统。

适用于 BIOS 和 UEFI 的通用型启动加载器:GRUB 和 Syslinux。GRUB 功能丰富,支持复杂场景。配置文件和 ‘sh’ 脚本语言很类似,可以自动生成。也是Linux平台下最常用的启动加载器。注意:GRUB 是下一代 GRand Unified Bootloader, 一般写为GRUB2,请不要和 GRUB Legacy (也称之为 grub-0.97,grub-0.x 或 GRUB1 仅支持一代 BIOS 启动) 混淆了,它来自下一代 GRUB 研究项目 PUPA,代码全部重写,实现了模块化和增强了移植性。Syslinux是一个优秀的启动加载器集合,可以从硬盘、光盘或通过 PXE 的网络引导启动系统。支持的 文件系统包括 FAT, ext2, ext3, ext4和非压缩的单设备 Btrfs. 它本身只能访问其所在分区上的数据,通过 Chainloading (chain.c32 程序) 可以绕过这个限制。Syslinux主要用于Linux光盘的安装程序。

欢迎投稿、分享转载,转载请保留如下信息:格物躬行博客[https://www.go2do.net]

本文由 [go2do] 原创,本文链接: https://www.go2do.net/linux/what-difference-bootloader-grub-bios-uefi-mbr-getting-started.html



You may also like...

发表评论

电子邮件地址不会被公开。

本页共执行143次数据库查询,耗时0.324秒,使用内存 1.75 MB