Extensible Firmware Interface Specification
11-8 12/01/02 Version 1.10
11.2.2.1 EFI Partition Header
EFI defines a new partitioning scheme that must be supported by EFI firmware. The following list
outlines the advantages of using the GUID Partition Table over the legacy MBR partition table:
• Logical Block Addressing is 64 bits.
• Supports many partitions.
• Uses a primary and backup table for redundancy.
• Uses version number and size fields for future expansion.
• Uses CRC32 fields for improved data integrity.
• Defines a GUID for uniquely identifying each partition.
• Uses a GUID and attributes to define partition content type.
• Each partition contains a 36 Unicode character human readable name.
The EFI partitioning scheme is depicted in Figure 11-2. The GUID Partition Table Header (see
Table 11-1) starts with a signature and a revision number that specifies which version of the EFI
specification defines the data bytes in the partition header. The GUID Partition Table Header
contains a header size field that is used in calculating the CRC32 that confirms the integrity of the
GUID Partition Table Header. While the GUID Partition Table Header’s size may increase in the
future it cannot span more than one block on the device.
Two GUID Partition Table Header structures are stored on the device: the primary and the backup.
The primary GUID Partition Table Header must be located in block 1 of the logical device, and the
backup GUID Partition Table Header must be located in the last block of the logical device. Within
the GUID Partition Table Header there are the MyLBA and AlternateLBA fields. The MyLBA
field contains the logical block address of the GUID Partition Table Header itself, and the
AlternateLBA field contains the logical block address of the other GUID Partition Table
Header. For example, the primary GUID Partition Table Header’s MyLBA value would be 1 and its
AlternateLBA would be the value for the last block of the logical device. The backup GUID
Partition Table Header’s fields would be reversed.
The GUID Partition Table Header defines the range of logical block addresses that are usable by
Partition Entries. This range is defined to be inclusive of FirstUsableLBA through
LastUsableLBA on the logical device. All data stored on the volume must be stored between
the FirstUsableLBA through LastUsableLBA, and only the data structures defined by EFI
to manage partitions may reside outside of the usable space. The value of DiskGUID is a GUID
that uniquely identifies the entire GUID Partition Table Header and all its associated storage. This
value can be used to uniquely identify the disk. The start of the GUID Partition Entry array is
located at the logical block address PartitionEntryLBA. The size of a GUID Partition Entry
element is defined in the GUID Partition Table Header. There is a 32-bit CRC of the GUID
Partition Entry array that is stored in the GUID Partition Table Header in
PartitionEntryArrayCRC. The size of the GUID Partition Entry array is the
PartitionEntrySize multiplied by NumberOfPartitionEntries. When a GUID
Partition Entry is updated, the PartitionEntryArrayCRC must be updated. When the
PartitionEntryArrayCRC is updated, the GUID Partition Table Header CRC must also be
updated, since the PartitionEntryArrayCRC is stored in the GUID Partition Table Header.