EFI系统分区

EFI系统分区(英語:EFI system partition,简写为ESP),是一个FATFAT32格式的磁碟分區,但是其分区标识是EF (十六进制) 而非常规的0E0CUEFI固件可从ESP載入EFI啟動程式或者EFI應用程式。

概览编辑

EFI系统分区的文件系统基于FAT文件系统[1][2][3]。在GUID分区表(GPT)方案中,EFI系统分区的全局唯一标识符(GUID)是C12A7328-F81F-11D2-BA4B-00A0C93EC93B,而其在主引导记录(MBR)分区表方案中的标识符是0xEF。GPT分区和MBR分区的磁盘都可以包含一个EFI系统分区,因为需要UEFI固件来支持这两种分区方案。此外,EFI分区还支持光盘和DVD的El Torito引导格式[4]

在Legacy BIOS中,一个分区的第一个扇区被加载到内存中。UEFI固件不执行MBR中的代码,除非通过CSM(兼容性支持模块)在Legacy BIOS模式下启动[4]

UEFI规范要求完全支持MBR分区表。一些UEFI实现在检测到引导磁盘上的某些类型的分区表时,会立即切换到BIOS的CSM引导。这样如果EFI分区位于MBR分区表中,UEFI引导会被阻止[5]

UEFI固件提供了对从可移动存储设备(如U盘)启动的支持[4]。如果要使用这项功能,可移动设备需要采用FAT12FAT16FAT32文件系统进行格式化,而引导加载程序要么根据标准的ESP文件层次结构存放在EFI分区中,要么必须向系统引导管理器提供引导加载器的完整路径。固定驱动器上永远只应该使用FAT32格式[4]

应用编辑

Linux 使用GRUB2作為成熟的UEFI啟動程式。UEFI固件将他们加载以后,它们可以从它们支持的所有设备、分区和文件系统访问和引导内核映像,不再受EFI分区的限制。

因为EFI引导存根的存在,不使用传统UEFI引导加载程序的情况下也可以引导一个Linux内核映像。通过将自己伪装成PE/COFF映像,并在固件中显示为UEFI应用程序,启用了EFI启动存根的x86内核映像可以由UEFI固件直接加载和执行。这种内核映像仍然可以由BIOS的引导加载程序加载和运行;因此,EFI引导存根允许单个内核映像在任何引导环境中工作。

在内核构建配置期启用选项CONFIG_EFI_STUB (EFI存根支持),可以启用Linux内核对EFI引导存根的支持[6]。它被合并到2012年3月18日发布的3.3版Linux内核主线代码中[7]Gummiboot (又名system-boot)是一个简单的UEFI引导管理器,它加载并运行配置好的UEFI映像,只访问EFI系统分区。配置文件片段、内核映像和initrd映像需要驻留在EFI系统分区上,因为Gummiboot不支持访问其他分区或文件系统上的文件。Linux内核需要在启用CONFIG_EFI_STUB的情况下构建,以便它们可以作为UEFI映像直接执行[8]

EFI分区的挂载点通常是/boot/efi,在Linux启动后可以访问它的内容[9]

在不同操作系统下的可见性编辑

  • Windows:一般是不可见的。在磁盘管理程序中可以显示,但不能直接分配驱动器号。
  • Linux发行版:视同普通分区,可使用mount程序直接挂载其对应的块设备。一般挂载于/boot/efi目录下。

文件系统编辑

UEFI固件仅支持FATFAT32文件系统的EFI系统分区,因此用户须将EFI系统分区格式化为上述文件系统,否则将无法被识别。

  1. ^ UEFI Specification Version 2.5, Section 12.3 File System Format (PDF). UEFI.org: 536, 537. April 2015 [2015-05-29]. (原始内容存档 (PDF)于2015-05-29). The file system supported by the Extensible Firmware Interface is based on the FAT file system. EFI defines a specific version of FAT that is explicitly documented and testable. Conformance to the EFI specification and its associate reference documents is the only definition of FAT that needs to be implemented to support EFI. To differentiate the EFI file system from pure FAT, a new partition file system type has been defined. 
  2. ^ Technical Note TN2166: Secrets of the GPT. Developer.Apple.com. 2006-11-06 [2015-05-06]. (原始内容存档于2015-05-18). 
  3. ^ EFI system partition. ArchWiki. [14 March 2020]. (原始内容存档于2020-05-06). 
  4. ^ 4.0 4.1 4.2 4.3 UEFI Specifications (versions 2.5 and older) (PDF). UEFI.org. April 2015 [2015-05-29]. (原始内容存档于2015-05-08). 
  5. ^ UEFI system booting from MBR partition table and GRUB legacy. ArchLinux.org. June 2012 [2013-10-06]. (原始内容存档于2014-04-19). 
  6. ^ Linux kernel 3.11.1 arch/x86/Kconfig: CONFIG_EFI_STUB (line #1575). Kernel.org. [2013-10-06]. 
  7. ^ Linux kernel 3.3: 1.10. EFI boot support. KernelNewbies.org. 2012-03-18 [2013-10-06]. (原始内容存档于2013-09-27). 
  8. ^ gummiboot: Simple UEFI Boot Manager. FreeDesktop.org. [2016-01-22]. (原始内容存档于2013-09-12). 
  9. ^ UEFI - Community Ubuntu Documentation. Ubuntu.com. 2013-12-21 [2013-12-27]. (原始内容存档于2013-12-27).