EFI下的Guid Partition Table Format

一. Legacy system

在legacy系统下,MBR一定是位于磁盘的第一个扇区,MBR总size为512个字节,由64个字节的partition table和446个字节的boot code,以及2个字节内容为0x55AA的signature组成。

 

Legacy Partition table只能支持4个磁盘分区,每个分区用16个字节来描述。

 

二、EFI system

操作系统可以选择将自己的loader程序做成EFI应用程序,然后按照UEFI规范,存放在硬盘的GPT分区内的ef/boot/目录下。具体的文件名是boot(ARCH).efi,这里ARCH是架构名,如果是IA32,则是bootia32.efi,当然也可以是bootx64.efi,bootIA64.efi等等。

BIOS检测到这个文件,会自动将其加载到内存,然后执行。换言之,开始启动操作系统。

PMBR

在支持EFI系统的磁盘里,第一个扇区仍然是放着一个MBR,它叫做Protective MBR,是为了兼容一些比较老的软件和工具而存在的。

PMBR和MBR的格式完全相同,但是它会在partition table entry里去描述一个OsType类型为0xEE的磁盘分区,0xEE代表的类型为EFI,这个分区的startingLBA应该设定为0x00000001,SizeInLBA应该设定为0xFFFFFFFF,也就是说,除了LBA0,要把整个磁盘看成一个类型为EFI的大分区。

Primary Partition Table

PMBR占用了LBA(logic block address)0,primary partition table必须从LBA1开始。

primary partition table分为两个部分,第一部分是header,第二部分是entry array。

 

Header的格式如下:

Partition entry array就和MBR的一样了,是一个数组,里面装有partition 1~n的描述符,每一个分区的描述符如下:

Backup Partition Table

Backup partition table和Primary partition table的内容完全相同,它只是前面那张表的一个备份,它位于磁盘的最后一个block。

如果primary表发生损坏,软件可以去读取backup表来启动系统并对primary表进行restore。

 

注意

如果软件需要更新以上两张表,必须先更新backup,再更新primary,header和entry的更新顺序没有规定,用户可以随意。

你可能感兴趣的:(UEFI学习)