UEFI + GPT

在之前的文章《Linux on ASUS N550JK4700》中的系统分区那一节,由于当时我对UEFI不了解,我曾在BIOS中打开了[Launch CSM]选项,意在不使用UEFI,实际上这是一个很糟糕的选择。相比于UEFI,传统的BIOS实在是太落后了。具体的内容可以Google一下或查看Wikipedia,关于 BIOS + MBR 和 UEFI + GPT 的比较,下面作一个简单地介绍。

现代磁盘的内部区块定位一般都采用 LBA 机制,每一个(逻辑)区块又称作一个 Logical Sector(有别于 Physical Sector),区块的编址为一个整数,起始为 0 ,即 LBA 0、LBA 1、LBA 2 …… 每一个逻辑区块的大小为 512B 。磁盘的分区与格式化都是在这个基础上的。先看看大家都熟知的 BIOS + MBR 方案,传统的 BIOS 是运行在 16 位实模式下的,寻址能力十分有限而且运行缓慢,磁盘的分区采用 Master boot record,即在整个磁盘的第一个逻辑扇区(LBA 0)的只有512B的空间里包含了主引导程序和分区表。由于空间的限制,MBR是有很多局限性的:只能有四个主分区,磁盘总大小不能超过2TiB等。UEFI是由Intel公司引入的固件接口,它要比传统BIOS先进得多,它与传统BIOS有一些根本的区别:(1)UEFI直接运行在64位保护模式下;(2)UEFI能直接识别FAT32文件系统,并能读取里面的文件(之所以是FAT格式,是因为历史原因导致FAT格式的跨平台兼容性最好);(3)系统引导程序文件在分区(ESP分区)中,而不是在第一个逻辑扇区中;(4)磁盘分区方案采用GUID Partition Table,即GPT,相对于MBR,这种分区表有很多优势,如主分区的个数(几乎)不受限制。

上图就是GPT分区表的具体结构。为了保持向后兼容性,磁盘的第一个逻辑扇区(LBA 0)仍然保留作为MBR,但对GPT来说它的作用仅仅是为了防止MBR分区工具的错误识别导致GPT分区受到破坏,这被称为保护MBR,其中的分区信息只有一个主分区,分区范围就是整个磁盘(如果磁盘的大小不超过2TiB),分区ID为0xEE,意指GPT分区。磁盘的第二个逻辑扇区(LBA 1)为分区表头,其中通过LBA号定义了分区表项的空间范围、分区表项的数量、可用于分区的空间范围、备份分区表项的空间范围、备份分区表头的位置等。从 LBA 2 到 LBA 33 共32个逻辑扇区为分区表项区,每个 LBA 有 4 个分区表项,共128个分区表项,即可以有128个主分区。在磁盘的最后还有一份分区表项和分区表头的备份。

不像BIOS,UEFI的引导并不依赖于引导扇区,UEFI固件有专门的引导管理模块。当电脑加电时,引导管理模块检查处于 NVRAM(像闪存)中的引导配置,然后加载并执行处于ESP分区的特定的引导文件(efi文件),进而引导整个系统,整个过程都是在64位保护模式下进行的。如果操作系统在U盘(FAT32分区)或光盘中,UEFI还可自动识别文件\EFI\BOOT\BOOTX64.EFI,实现系统引导,是非常直观和方便的。

还有一个问题就是安全启动。现在预装了 Windows 8 的电脑都是支持UEFI的,并且开启了安全启动的选项。针对安全启动 Ubuntu Linux 早已有了解决方案,就是 Shim 。Canonical 的第一阶段引导程序文件 \EFI\ubuntu\shimx64.efi 已经得到了微软的签名。第二阶段引导程序文件便是 \EFI\ubuntu\grubx64.efi ,在第二阶段 Ubuntu 就可以使用 Canonical 自己的签名了!详情参见:https://wiki.ubuntu.com/SecurityTeam/SecureBoot

鉴于此,我关掉了 [Launch CSM], 重装了系统和软件,分区方式如下:

uefi-gpt

实际分区:

disk-gpt

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*