Jump to content

GUID Partition Table

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Fabien le libre (talk | contribs) at 19:45, 4 July 2010 (External links). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

In computer hardware, GUID Partition Table (GPT) is a standard for the layout of the partition table on a physical hard disk. Although it forms a part of the Extensible Firmware Interface (EFI) standard (Intel's proposed replacement for the PC BIOS), it is also used on some BIOS systems because of the limitations of MBR partition tables, which restrict a disk partition's size to a maximum of 2.2 TB (2.2 × 1012 bytes).[1] GPT allows for a maximum disk and partition size of 9.4 ZB (9.4 × 1021 bytes).[1][2]

As of 2010, support for GPT among common systems is limited (see OS support of GPT, and see in turn EFI implementation and adoption).

Diagram illustrating the layout of the GUID Partition Table scheme. In this example, each logical block (LBA) is 512 bytes in size, and each partition entry is 128 bytes. LBA addresses that are negative indicate position from the end of the volume, with −1 as the last addressable block.

History

The widespread MBR partitioning scheme, dating from the early 1980s, imposed limitations which affected the use of modern hardware. Intel therefore developed a new partition-table format in the late 1990s as part of what eventually became UEFI. The GPT as of 2010 forms a subset of the UEFI specification.[3]

Features

MBR-based partition table schemes insert the partitioning information in the master boot record (MBR) (which on a BIOS system is also the container for code that begins the process of booting the system). In a GPT, partition table information is stored in the GPT header, but to maintain compatibility, GPT retains the MBR entry as the first sector on the disk followed by a primary partition table header, the actual beginning of a GPT.

Like modern MBRs, GPTs use logical block addressing (LBA) in place of the historical cylinder-head-sector (CHS) addressing. Legacy MBR information is contained in LBA 0, the GPT header is in LBA 1, and the partition table itself follows. 64-bit Windows operating systems reserve 16,384 bytes (or 32 sectors) for the GPT, leaving LBA 34 as the first usable sector on the disk.

Apple warns:[4] "Do not assume that the block size is always going to be 512 bytes." Modern storage devices such as solid-state drives may contain 1024-byte LBAs and some magneto-optical (MO) drives use 2048-byte sectors (but MO drives are typically not partitioned). Hard disk manufacturers are planning to transition to 4096-byte sectors, but as of early 2010, the first such drives employ firmware that presents the illusion of 512-byte sectors to the OS. [5]

Drives which boot Intel-based Macs are typically formatted with a GUID Partition Table, rather than with the Apple Partition Map (APM).

GPT also provides redundancy, writing the GPT header and partition table both at the beginning and at the end of the disk.

Legacy MBR (LBA 0)

In the GPT specification, the location corresponding to the MBR in MBR-based disks is structured in a way that prevents MBR-based disk utilities from mis-recognizing, and possibly over-writing, GPT disks. This is referred to as a "protective MBR". In operating systems that support GPT-based boot, it is also used to store the first stage of the bootloader code. A single partition type of 0xEE, encompassing the entire GPT drive, is indicated and identifies it as GPT. Operating systems which cannot read GPT disks will generally recognize the disk as containing one partition of unknown type and no empty space, and will typically refuse to modify the disk unless the user explicitly requests and confirms the deletion of this partition. This minimizes accidental erasures. Furthermore, GPT-aware OSes will check the protective MBR and if the enclosed partition type is not of type 0xEE or if there are multiple partitions defined on the target device, the device should not be manipulated.

If the disk exceeds 2 TiB - the maximum partition size representable using the 32-bit LBA's of the legacy MBR (assuming a 512 byte block size) - the size of this partition is marked as 2 TiB, ignoring the rest of disk.

Partition table header (LBA 1)

The partition table header defines the usable blocks on the disk.. It also defines the number and size of the partition entries that make up the partition table. On 64-bit Windows Server 2003 machines, 128 partitions can be created. There are 128 partition entries reserved, each 128 bytes long. (The EFI specification requires that a minimum of 16,384 bytes be reserved for the partition table, so this gives space for 128 partition entries.)

The header contains the disk GUID (Globally Unique Identifier). It records its own size and location (always LBA 1) and the size and location of the secondary GPT header and table (always the last sectors on the disk). Importantly, it also contains a CRC32 checksum for itself and for the partition table, which may be verified by the firmware, bootloader and/or operating system on boot. Because of this, hex editors should not be used to modify the contents of the GPT. Such modification would render the checksum invalid. In this case, the primary GPT may be overwritten with the secondary one by disk recovery software. If both GPTs contain invalid checksums, the disk would be unusable.

Partition table format
Offset Length Contents
0 8 bytes Signature ("EFI PART", 45 46 49 20 50 41 52 54)
8 4 bytes Revision (For version 1.0, the value is 00 00 01 00)
12 4 bytes Header size (in bytes, usually 5C 00 00 00 meaning 92 bytes)
16 4 bytes CRC32 of header (0 to header size), with this field zeroed during calculation
20 4 bytes reserved, must be zero
24 8 bytes Current LBA (location of this header copy)
32 8 bytes Backup LBA (location of the other header copy)
40 8 bytes First usable LBA for partitions (primary partition table last LBA + 1)
48 8 bytes Last usable LBA (secondary partition table first LBA - 1)
56 16 bytes Disk GUID (also referred as UUID on UNIXes)
72 8 bytes Partition entries starting LBA (always 2 in primary copy)
80 4 bytes Number of partition entries
84 4 bytes Size of a partition entry (usually 128)
88 4 bytes CRC32 of partition array
92 * reserved, must be zeroes for the rest of the block (420 bytes for a 512-byte LBA)
LBA Size TOTAL

The values for current and backup LBAs of the primary header should be the second sector of the disk (1) and the last sector of the disk, respectively. The secondary header at the end of the disk identifies its own table of partition entries, which is located directly before that header.

Partition entries (LBA 2–33)

The GPT uses simple and straightforward entries to describe partitions. The first 16 bytes designate the partition type GUID. For example, the GUID for an EFI System partition is {C12A7328-F81F-11D2-BA4B-00A0C93EC93B}. The second 16 bytes contain a GUID unique to the partition. Starting and ending 64-bit LBAs are also recorded here, and space is allocated for partition names and attributes. As is the nature and purpose of GUIDs, no central registry is needed to ensure the uniqueness of the GUID partition type designators.

GUID partition entry format
Offset Length Contents
0 16 bytes Partition type GUID
16 16 bytes Unique partition GUID
32 8 bytes First LBA (little-endian)
40 8 bytes Last LBA (inclusive, usually odd)
48 8 bytes Attribute flags (e.g. bit 60 denotes read-only)
56 72 bytes Partition name (36 UTF-16LE code units)
128 TOTAL

Apple warns: "Do not hardwire the current size of the partition entry (128 bytes)."[6] Microsoft TechNet says that attributes are divided into two halves: the lower 4 bytes representing partition independent attributes, and the upper 4 bytes are partition type dependent. Microsoft uses the following bits in general:[clarification needed]

partition attributes
Bit Content
0 system partition (disk partitioning utilities must reserve the partition as is)
60 read-only
62 hidden
63 do not automount (e.g., do not assign drive letter)

OS support of GPT

Hybrid MBRs are non-standard and can be interpreted in different ways by different OSes.[7] Unless otherwise noted, OSes provide precedence to the GPT data when a hybrid MBR configuration is encountered.

The term No native support on this arch and version. should be understood this way:

Not supported as data disk[8], only known legacy partitions found in protective MBR are accessible via the OS. Detachable disks: only support for MBR partitioning; No access with end user applications. GPT contained raw data is accessible with third-party administrator tools for low level disk access. True file system level support in read or read-write form might be subject of software from a third-party vendor.

Unix Class Operating Systems

OS Version/
Edition
Platform Boot from GPT on PC/BIOS Boot from GPT on EFI Note
FreeBSD Since 7.0 x86, x86-64 Yes Yes In a hybrid configuration, both GPT and MBR partition identifiers may be used.
Linux Most of the x86 Linux Distros

Fedora 8+ and Ubuntu 8.04+[9]

x86-64, IA-64, x86 Yes Yes Some distribution tools, such as fdisk, don't work with GPT.

New tools such as gdisk[10], grub .96+ patches and grub2 have been GPT-enabled.

Mac OS X Since 10.4.0 (some features since 10.4.6) [11] x86, x86-64 No Yes
Solaris Since Solaris 10 x86, x86-64, SPARC No (Work in Progress) No (Work in Progress)

Windows 32-bit versions

There is a problem documented for earlier 32-bit Windows versions that hard disks with more than 2 TB of space and GPT partitioning moved to that platform from e.g. a 64-bit Windows Server machine were not handled correctly in a fashion that any data that got written beyond those limits got wrapped around and appeared in the beginning of the harddisk thus destroying user data, file system structures and even the harddisk formatting information. The root cause were attributed to 32-bit harddisk drivers from a bunch of vendors, even a few with quite a good reputation. With the appearance of Windows Vista and the related driver updates that are compatible with older OS versions as well this 2 TB problem is more or less gone nowadays. The problem was not really a GPT problem but it went along with this since GPT often crossed the 2 TB limit in cases where the used hardware offered more than 2 TB of disk space.

OS Version/
Edition
Platform Boot from GPT on PC/BIOS Boot from GPT on EFI Note
Windows XP (2001-10-25) x86 No No No native support on this arch and version.
Windows Server 2003 (2003-04-24) x86 No No No native support on this arch and version.
Windows Server 2003 Service Pack 1 (2005-03-30) x86 No No Data Disk only [8] MBR takes precedence in hybrid configuration.
Windows Vista (2005-07-22) x86 No No MBR takes precedence in hybrid configuration.
Windows Server 2008 (2008-02-27) x86 No No MBR takes precedence in hybrid configuration.
Windows 7 (2009-10-22) x86 No No MBR takes precedence in hybrid configuration.[7]

Windows 64-bit versions

The following table only lists the 64-bit Windows versions that were ever supporting GPT. These were the "64-bit" server editions for the IA-64 processor platform that came with EFI and GPT boot support from the beginning as GPT was the default partitioning type with increasing features in the peripherals, and the "x86" editions for servers and for end users for the x86-64 and EM64T processor platforms that first had only very limited GPT support until it first went on par with the IA-64 variants at the release of Windows Server 2008. Please note that below are sevaral so-called "Windows XP" versions listed that in fact are technically more equivalent with the mentioned Windows version in the second column.

OS Version/
Edition
Platform Boot from GPT on PC/BIOS Boot from GPT on EFI Note
Windows XP 64-bit (2001-10-25) IA-64 No Yes MBR takes precedence in hybrid configuration. Detachable disks: only support for MBR partitioning.
Windows XP 64-bit, Version 2003 (2003-03-28)
(Workstation variant of Windows Server 2003 64-bit)
IA-64 No Yes MBR takes precedence in hybrid configuration. Detachable disks: only support for MBR partitioning.
Windows Server 2003 64-bit (2003-04-24) IA-64 No Yes MBR takes precedence in hybrid configuration. The default partitioning behavior is GPT. The boot disk for an IA-64 system must be a GPT disk. Other disks in an IA-64 system can be MBR or GPT.[12]
Windows Server 2003 x64, Service Pack 1 (2005-03-30) x86-64 No No Data Disk only [8] MBR takes precedence in hybrid MBR configuration.
Windows XP Professional x64 (2005-04-25)
(Workstation variant of Windows Server 2003 x64)
x86-64 No No Data disk only [8] MBR takes precedence in hybrid configuration. Detachable disks: only support for MBR partitioning.
Windows Vista (2005-07-22) x86-64 No Yes MBR takes precedence in hybrid configuration.
Windows Server 2008 (2008-02-27) x86-64, IA-64 No Yes MBR takes precedence in hybrid configuration.
Windows 7 (2009-10-22) x86-64 No Yes MBR takes precedence in hybrid configuration.[7]
Windows Server 2008 R2 (2009-10-22)
(Server variant of Windows 7)
x86-64, IA-64 No Yes MBR takes precedence in hybrid configuration.

Partition type GUIDs

Assoc. OS Partition type Globally-Unique Identifier (GUID)[1]
(None) Unused entry 00000000-0000-0000-0000-000000000000
MBR partition scheme 024DEE41-33E7-11D3-9D69-0008C781F39F
EFI System partition C12A7328-F81F-11D2-BA4B-00A0C93EC93B
BIOS Boot partition 21686148-6449-6E6F-744E-656564454649
Windows Microsoft Reserved Partition E3C9E316-0B5C-4DB8-817D-F92DF00215AE
Basic data partition[2] EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
Logical Disk Manager metadata partition 5808C8AA-7E8F-42E0-85D2-E1E90434CFB3
Logical Disk Manager data partition AF9B60A0-1431-4F62-BC68-3311714A69AD
Windows Recovery Environment DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
IBM General Parallel File System (GPFS) partition 37AFFC90-EF7D-4e96-91C3-2D7AE055B174
HP-UX Data partition 75894C1E-3AEB-11D3-B7C1-7B03A0000000
Service Partition E2A1E728-32E3-11D6-A682-7B03A0000000
Linux Data partition[2] EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
RAID partition A19D880F-05FC-4D3B-A006-743F0F84911E
Swap partition 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
Logical Volume Manager (LVM) partition E6D6D379-F507-44C2-A23C-238F2A3DF928
Reserved 8DA63339-0007-60C0-C436-083AC8230908
FreeBSD Boot partition 83BD6B9D-7F41-11DC-BE0B-001560B84F0F
Data partition 516E7CB4-6ECF-11D6-8FF8-00022D09712B
Swap partition 516E7CB5-6ECF-11D6-8FF8-00022D09712B
Unix File System (UFS) partition 516E7CB6-6ECF-11D6-8FF8-00022D09712B
Vinum volume manager partition 516E7CB8-6ECF-11D6-8FF8-00022D09712B
ZFS partition 516E7CBA-6ECF-11D6-8FF8-00022D09712B
Mac OS X Hierarchical File System (HFS+) partition 48465300-0000-11AA-AA11-00306543ECAC
Apple UFS 55465300-0000-11AA-AA11-00306543ECAC
ZFS[3] 6A898CC3-1DD2-11B2-99A6-080020736631
Apple RAID partition 52414944-0000-11AA-AA11-00306543ECAC
Apple RAID partition, offline 52414944-5F4F-11AA-AA11-00306543ECAC
Apple Boot partition 426F6F74-0000-11AA-AA11-00306543ECAC
Apple Label 4C616265-6C00-11AA-AA11-00306543ECAC
Apple TV Recovery partition 5265636F-7665-11AA-AA11-00306543ECAC
Solaris Boot partition 6A82CB45-1DD2-11B2-99A6-080020736631
Root partition 6A85CF4D-1DD2-11B2-99A6-080020736631
Swap partition 6A87C46F-1DD2-11B2-99A6-080020736631
Backup partition 6A8B642B-1DD2-11B2-99A6-080020736631
/usr partition[3] 6A898CC3-1DD2-11B2-99A6-080020736631
/var partition 6A8EF2E9-1DD2-11B2-99A6-080020736631
/home partition 6A90BA39-1DD2-11B2-99A6-080020736631
Alternate sector 6A9283A5-1DD2-11B2-99A6-080020736631
Reserved partition 6A945A3B-1DD2-11B2-99A6-080020736631
6A9630D1-1DD2-11B2-99A6-080020736631
6A980767-1DD2-11B2-99A6-080020736631
6A96237F-1DD2-11B2-99A6-080020736631
6A8D2AC7-1DD2-11B2-99A6-080020736631
NetBSD[4] Swap partition 49F48D32-B10E-11DC-B99B-0019D1879648
FFS partition 49F48D5A-B10E-11DC-B99B-0019D1879648
LFS partition 49F48D82-B10E-11DC-B99B-0019D1879648
RAID partition 49F48DAA-B10E-11DC-B99B-0019D1879648
concatenated partition 2DB519C4-B10F-11DC-B99B-0019D1879648
encrypted partition 2DB519EC-B10F-11DC-B99B-0019D1879648
  1. ^ The GUIDs in this table are written assuming a little-endian byte order. For example, the GUID for an EFI System partition is written as C12A7328-F81F-11D2-BA4B-00A0C93EC93B here, which corresponds to the 16 byte sequence 28 73 2A C1 1F F8 D2 11 BA 4B 00 A0 C9 3E C9 3B — only the first three blocks are byte-swapped.
  2. a b Linux and Windows use the same GUID for their respective data partitions.
  3. a b The GUID for /usr on Solaris is used as a generic GUID for ZFS by Mac OS X.
  4. ^ Definitions are in src/sys/sys/disklabel_gpt.h. NetBSD had used the FreeBSD GUIDs before unique NetBSD-specific GUIDs were created.

See also

References

  1. ^ a b "FAQ: Drive Partition Limits" (pdf). UEFI Forum. Retrieved 2010-06-09.
  2. ^ Bill Boswell (2002-07-01). "FAQ: Drive Partition Limits". Redmondmag.com. Retrieved 2010-06-09. GPT disks also support very large partitions thanks to a 64-bit Logical Block Address scheme. A logical block corresponds to one sector, or 512 bytes, yielding a maximum theoretical capacity of eight zettabytes,
  3. ^ Nikkel, Bruce J. (2009). "Forensic analysis of GPT disks and GUID partition tables". Digital Investigation. 6 (1–2): 39–47. The current popular BIOS and MBR partitioning scheme was originally developed in the early 1980s for the IBM Personal Computer using IBM PC-DOS or MS-DOS. The Basic Input/Output System (BIOS) provides an interface to the hardware and initiates the boot process (IBM, 1983). The MBR, located in sector zero, contains the initial boot code and a four entry partition table (Microsoft, 1983). Intended to solve booting and partitioning limitations with newer hardware, a replacement for both the BIOS and the MBR partition table was developed by Intel in the late 1990s (Intel, 2000). This is now called the Unified EFI (UEFI, 2008 UEFI Forum. Unified extensible firmware interface specification version 2.2 2008.UEFI, 2008) specification, and managed by the UEFI Forum (UEFI, 2009). A subset of this specification includes GUID (globally unique identification) Partition Tables, or GPT, intended to replace the DOS/MBR partition tables. {{cite journal}}: Unknown parameter |month= ignored (help); line feed character in |quote= at position 390 (help)
  4. ^ "Technical Note TN2166: Secrets of the GPT". Apple.
  5. ^ "Western Digital's Advanced Format: The 4K Sector Transition Begins". Anandtech.
  6. ^ http://developer.apple.com/mac/library/technotes/tn2006/tn2166.html#SECGPTOVERVIEW
  7. ^ a b c Smith, Rod. "Hybrid MBRs: The Good, the Bad, and the So Ugly You'll Tear Your Eyes Out".
  8. ^ a b c d "Windows and GPT FAQ". Microsoft. Cite error: The named reference "microsoft" was defined multiple times with different content (see the help page).
  9. ^ "Ubuntu on MacBook". Ubuntu Community Documentation.
  10. ^ Smith, Rod. "GPT fdisk for Linux".
  11. ^ "Myths and Facts About Intel Macs". rEFIt.
  12. ^ http://codeidol.com/windows/inside-windows-server-2003/Configuring-Data-Storage/Working-with-GPT-Disks/ Working with GPT Disks