1 efi partition header – Intel Extensible Firmware Interface User Manual
Page 368

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.