GUID Partition Table

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

GUID Partition Table (GPT), zu deutsch GUID-Partitionstabelle (von englisch Globally Unique Identifier), ist ein Standard für das Format von Partitionstabellen auf Festplatten oder anderen Datenträgern. Die Spezifikation ist Teil des UEFI-Standards, der ausgehend von Großrechnern etwa seit dem Jahr 2000 zunehmend das BIOS auch in PCs ersetzt. GPT ist dabei der Nachfolger der Master-Boot-Record-Partitionstabellen. GUID-Partitionstabellen können nur unter Einschränkungen auch mit vorigen BIOS-Versionen verwendet werden.[1]

Aufbau[Bearbeiten]

Schematische Darstellung einer GPT. Jeder LBA-Block entspricht einem Sektor der Festplatte und ist 512 Bytes groß.

Entsprechend dem GPT-Schema besteht ein Datenträger aus den folgenden Bereichen:

  • MBR, dessen spezielle Konfiguration den Einsatz der Platte auch unter MBR-Betriebssystemen erlaubt und vor Veränderungen durch MBR-Partitionierungstools schützt
  • primäre GPT, bestehend aus Header und Partitionseinträgen
  • Partitionen
  • sekundäre GPT, bestehend aus Header und Partitionseinträgen

Die sekundäre GPT am Ende des Datenträgers ist teilweise eine Kopie der primären GPT am Anfang des Datenträgers: Die Inhalte der Felder für die Positionen des eigenen und des alternativen GPT Headers sind vertauscht und die Adresse der Partitionstabelle verweist auf die Kopie der Partitionstabelle am Ende der Platte vor dem alternativen Header. Damit haben beide GPT Header auch eine unterschiedliche CRC32-Prüfsumme. Durch die enthaltene Redundanz kann im Fehlerfall die Partitionstabelle wiederhergestellt werden. Da in der GPT eine Prüfsumme eingetragen wird, kann festgestellt werden, ob eine GPT fehlerhaft ist.

MBR-Partitionstabelle[Bearbeiten]

Im ersten Sektor/Block des Datenträgers (LBA 0) befindet sich der MBR mit einer klassischen MBR-Partitionstabelle und einem Eintrag, der den Rest des Datenträgers als belegt kennzeichnet. Für ein Partitionierungstool, das nur MBR- aber keine GPT-Partitionstabellen lesen kann, erscheint daher der gesamte Platz auf dem Datenträger als belegt. Der MBR einer GPT-Festplatte stellt somit einen Schutz für den Inhalt des Datenträgers dar, falls auf diesen mit Partitionierungstools, die das GPT-Schema noch nicht kennen, zugegriffen werden soll (daher auch englisch protective MBR). Als Partitionskennung wird der Wert EE16 für einen Schutz-MBR (mit nachfolgender GUID-Partitionstabelle) oder EF16 bei einer EFI-Systempartition verwendet.[2]

Header der GUID-Partitionstabelle[Bearbeiten]

Im zweiten Sektor/Block (LBA 1) befindet sich der Header der primären GPT und im letzten Sektor/Block (LBA −1) befindet sich der sekundäre Backup-GPT. Der Header selbst beschreibt u. a. die nutzbaren Blöcke des Datenträgers, die Position des eigenen Headers und des sekundären Backup-Headers sowie die Anzahl und Größe der Partitionseinträge. Die EFI-Spezifikationen[3] schreiben ein Minimum von 16 384 Bytes für die Partitionstabelle vor, so dass es Platz für 128 Einträge gibt. Weiterhin werden der Header selbst und die Partitionseinträge mit CRC32-Prüfsummen abgesichert, die von der Firmware, dem Bootloader oder dem Betriebssystem überprüft werden müssen. Wird daher der Header z. B. mit einem Hexeditor verändert, macht dies die Checksumme ungültig und das System wird instabil oder sogar unbrauchbar.

Im Header der GPT sind folgende Informationen abgelegt:

Offset Länge Inhalt
0 8 bytes Signatur („EFI PART“, 45h 46h 49h 20h 50h 41h 52h 54h)
8 4 bytes Revision (00h 00h 01h 00h)
12 4 bytes Header-Größe – Little Endian (5Ch 00h 00h 00h entspricht 92 bytes)
16 4 bytes Header-CRC32-Prüfsumme
20 4 bytes Reservierter Bereich – muss Null (0) sein
24 8 bytes Position des eigenen LBA (dieses Headers)
32 8 bytes Position des Backup-LBA (des anderen Headers)
40 8 bytes Erster benutzbarer LBA für Partitionseinträge (bei der primären Partitionstabelle ist dies der letzte LBA + 1, normalerweise 34)
48 8 bytes Letzter benutzbarer LBA für Partitionseinträge (bei der sekundären Partitionstabelle ist dies der letzte LBA – 1, normalerweise Datenträgergröße – 34)
56 16 bytes Datenträger-GUID (als Referenz siehe auch UUID bei UNIXe)
72 8 bytes Start-LBA der Partitionstabelle
80 4 bytes Anzahl der Partitionseinträge (Partitionen)
84 4 bytes Größe eines Partitionseintrags (normalerweise 128)
88 4 bytes Partitionstabellen-CRC32-Prüfsumme
92 * Reservierter Bereich; muss mit Nullen, für den Rest des Blocks, belegt sein (420 Bytes bei einem 512-byte LBA)

Partitionseintrag[Bearbeiten]

Die Partitionseinträge werden im LBA 2 bis LBA 33 (sekundärer Header: LBA-33 bis LBA-2) abgelegt. Jeder Partitionseintrag umfasst 128 Byte. Somit können pro logischem Block vier Partitionseinträge abgelegt werden. Diese in der Spezifikation vorgeschriebene Mindestanzahl von 32 Sektoren für Partitionseinträge kann bei Bedarf beliebig erhöht werden, so dass die maximal mögliche Anzahl an Partitionen prinzipiell nur durch den zur Verfügung stehenden Plattenplatz beschränkt wird.

Im Partitionseintrag selbst sind folgende Daten hinterlegt:

Offset Länge Inhalt
0 16 Bytes Partitionstyp-GUID
16 16 Bytes Einzigartige Partitions-GUID
32 8 Bytes Beginn der Partition (erster LBA – Little-Endian)
40 8 Bytes Ende der Partition (letzter LBA – inklusive)
48 8 Bytes Attribute (siehe folgende Tabelle)
56 72 Bytes Partitionsname (36 UTF-16LE-Zeichen)
128 Bytes insgesamt

Die einzelnen Einträge sind verhältnismäßig einfach aufgebaut. Die ersten 16 Bytes beschreiben den Partitionstyp. Die Partitionstyp-GUID für eine EFI-Systempartition ist z.B. {C12A7328-F81F-11D2-BA4B-00A0C93EC93B}. Es folgen 16 Bytes mit der Partitions-GUID. Dann folgen die Nummer des ersten und des letzten LBA-Sektors der Partition, 8 Bytes mit Attributen und der Name der Partition (36 Unicode-Zeichen lang).

Microsoft definiert folgende Attributeinträge:

Bit Inhalt
0 Systempartition
1 vor EFI verstecken
2 Legacy BIOS bootfähig (analog MBR 80h Active flag)[4]
60 Nur lesen (Read-only)
62 Versteckt (Hidden)
63 Nicht automatisch mounten (= keinen Laufwerksbuchstaben zuweisen)

Partitionstyp-GUIDs[Bearbeiten]

Partitionstyp ursprüngliches System englische Bezeichnung Bezeichnung und Beschreibung
GUID MBR
00000000-0000-0000-0000-000000000000 GPT Unused entry
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 01 IBM-PC Microsoft basic data FAT-12
04 FAT-16 < 32MB
06 FAT-16
07 NTFS (oder HPFS)
0b FAT-32
0c FAT-32 LBA
0e FAT-16 LBA
11 FAT-12 (versteckt)
14 FAT-16 < 32MB (versteckt)
16 FAT-16 (versteckt)
17 NTFS (oder HPFS) (versteckt)
1b FAT-32 (versteckt)
1c FAT-32 LBA (versteckt)
1e FAT-16 LBA (versteckt)
E3C9E316-0B5C-4DB8-817D-F92DF00215AE 0c Windows (EFI) Microsoft reserved Hybrid-MBR-Typ 0c entspricht dem von FAT-32 LBA
DE94BBA4-06D1-4D40-A16A-BFD50179D6AC 27 Windows Windows RE[5] Windows Recovery Environment (Vista), basiert auf Windows PE
7412F7D5-A156-4B13-81DC-867174929325[6] 30 ONIE ONIE boot Open Network Install Environment (ONIE)[7]
D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149[6] ONIE config
9E1A2D38-C612-4316-AA26-8B49521E5A8B 41 PReP PowerPC PReP boot
AF9B60A0-1431-4F62-BC68-3311714A69AD 42 Windows Windows LDM data Logical disk manager
5808C8AA-7E8F-42E0-85D2-E1E90434CFB3 Windows LDM metadata
E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D Windows Storage Spaces
37AFFC90-EF7D-4E96-91C3-2D7AE055B174 75 IBM GPFS General Parallel File System (GPFS)
FE3A2A5D-4F32-41A7-B725-ACCC3285A309[8][9] 7f[10] Chromebook ChromeOS kernel Google Chrome OS
3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC[8][9] 7f[10] ChromeOS root
2E0A753D-9E48-43B0-8337-B15192CB1B5E[8][9] 7f[10] ChromeOS reserved
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F 82 Linux Linux swap Auslagerungspartition von Linux (und Solaris auf MBR)
0FC63DAF-8483-4772-8E79-3D69D8477DE4 83 Linux filesystem auch oft als “Linux native” bezeichnet
8DA63339-0007-60C0-C436-083AC8230908 Linux reserved Hybrid-MBR-Typ entspricht dem von “Linux native”
933AC7E1-2EB4-4F13-B844-0E14E2AEF915 83 freedesktop.org (Linux)[11][12] Linux /home auto-mount für systemd von freedesktop.org
44479540-F297-41B2-9AF7-D131D5F0458A Linux x86 root (/)
4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 Linux x86-64 root (/)
B921B045-1DF0-41C3-AF44-4C6F280D3FAE Linux ARM64 root (/)
3B8F8425-20E0-4F3B-907F-1A25A76F98E8 Linux /srv
D3BFE2DE-3DAF-11DF-BA40-E3A556D89593 84 Intel-PC Intel Rapid Start
E6D6D379-F507-44C2-A23C-238F2A3DF928 8e Linux Linux LVM Logical Volume Manager
516E7CB4-6ECF-11D6-8FF8-00022D09712B a5 FreeBSD FreeBSD disklabel
83BD6B9D-7F41-11DC-BE0B-001560B84F0F FreeBSD boot
516E7CB5-6ECF-11D6-8FF8-00022D09712B FreeBSD swap
516E7CB6-6ECF-11D6-8FF8-00022D09712B FreeBSD UFS
516E7CBA-6ECF-11D6-8FF8-00022D09712B FreeBSD ZFS
516E7CB8-6ECF-11D6-8FF8-00022D09712B FreeBSD Vinum/RAID
85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7 a5 Midnight BSD Midnight BSD data
85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7 Midnight BSD boot
85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7 Midnight BSD swap
0394Ef8B-237E-11E1-B4B3-E89A8F7FC3A7 Midnight BSD UFS
85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7 Midnight BSD ZFS
85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7 Midnight BSD Vinum
824CC7A0-36A8-11E3-890A-952519AD3F61 a6[10] OpenBSD OpenBSD data
55465300-0000-11AA-AA11-00306543ECAC a8 Mac OS X Apple UFS
516E7CB4-6ECF-11D6-8FF8-00022D09712B a9 FreeBSD FreeBSD disklabel FreeBSD, NetBSD, OpenBSD (unter OpenBSD wird MBR-Typ a6 verwendet[10])
49F48D32-B10E-11DC-B99B-0019D1879648 NetBSD NetBSD swap
49F48D5A-B10E-11DC-B99B-0019D1879648 NetBSD FFS
49F48D82-B10E-11DC-B99B-0019D1879648 NetBSD LFS
2DB519C4-B10F-11DC-B99B-0019D1879648 NetBSD concatenated
2DB519EC-B10F-11DC-B99B-0019D1879648 NetBSD encrypted
49F48DAA-B10E-11DC-B99B-0019D1879648 NetBSD RAID
426F6F74-0000-11AA-AA11-00306543ECAC ab Mac OS X Apple boot
48465300-0000-11AA-AA11-00306543ECAC af Apple HFS/HFS+
52414944-0000-11AA-AA11-00306543ECAC Apple RAID
52414944-5F4F-11AA-AA11-00306543ECAC Apple RAID offline
4C616265-6C00-11AA-AA11-00306543ECAC Apple label
5265636F-7665-11AA-AA11-00306543ECAC AppleTV recovery
53746F72-6167-11AA-AA11-00306543ECAC Apple Core Storage
6A82CB45-1DD2-11B2-99A6-080020736631 be Solaris Solaris boot
6A85CF4D-1DD2-11B2-99A6-080020736631 bf Solaris root
6A898CC3-1DD2-11B2-99A6-080020736631 Solaris /usr MacZFS verwendet dieselbe GUID.
6A87C46F-1DD2-11B2-99A6-080020736631 Solaris swap
6A8B642B-1DD2-11B2-99A6-080020736631 Solaris backup
6A8EF2E9-1DD2-11B2-99A6-080020736631 Solaris /var
6A90BA39-1DD2-11B2-99A6-080020736631 Solaris /home
6A9283A5-1DD2-11B2-99A6-080020736631 Solaris alternate sector
6A945A3B-1DD2-11B2-99A6-080020736631 bf Solaris Reserved
6A9630D1-1DD2-11B2-99A6-080020736631
6A980767-1DD2-11B2-99A6-080020736631
6A96237F-1DD2-11B2-99A6-080020736631
6A8D2AC7-1DD2-11B2-99A6-080020736631
75894C1E-3AEB-11D3-B7C1-7B03A0000000 c0[10] HP-UX HP-UX data
E2A1E728-32E3-11D6-A682-7B03A0000000 HP-UX service
BC13C2FF-59E6-4262-A352-B275FD6F7172 ea freedesktop.org[12] Freedesktop $BOOT
42465331-3BA3-10F1-802A-4861696B7521 eb Haiku Haiku BFS
BFBFAFE7-A34F-448A-9A5B-6213EB736C22 ed ESP, herstellerspezifisch Lenovo system partition
F4019732-066E-4E12-8273-346C5641494F Sony system partition
C12A7328-F81F-11D2-BA4B-00A0C93EC93B ef EFI EFI System Unter parted wird eine solche Partition mit “boot flag”, also als Startpartition, angezeigt.
024DEE41-33E7-11D3-9D69-0008C781F39F MBR partition scheme eingebettete MBR-Partitionstabelle
21686148-6449-6E6F-744E-656564454649 BIOS boot partition Eine Partition, die von GRUB zum Starten auf BIOS-basierten PCs verwendet wird. Die GUID liest sich „!haHdInotNeedEFI“ in Hexadezimaldarstellung.
4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D f8[13] Ceph Ceph OSD Ceph Object Storage Daemon
4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D Ceph dm-crypt OSD Ceph Object Storage Daemon (verschlüsselt)
45B0969E-9B03-4F30-B4C6-B4B80CEFF106 Ceph journal
45B0969E-9B03-4F30-B4C6-5EC00CEFF106 Ceph dm-crypt journal
89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE Ceph disk in creation
89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE Ceph dm-crypt disk in creation
AA31E02A-400F-11DB-9590-000C2911D1B8 fb VMWare ESX VMWare VMFS
9198EFFC-31C0-11DB-8F78-000C2911D1B8 VMWare reserved
9D275380-40AD-11DB-BF97-000C2911D1B8 fc VMWare kcore crash protection
A19D880F-05FC-4D3B-A006-743F0F84911E fd Linux Linux RAID

Begrenzungen[Bearbeiten]

Die GPT verwendet Logical Block Addressing (LBA) mit 64 Bit umfassenden Einträgen, sodass – bei einer Sektorengrößen von 512 Byte – Festplatten bis zu einer Gesamtgröße von 8 Zebibyte adressiert und diese in beliebig viele Partitionen aufgeteilt werden können.

Unterstützung in Betriebssystemen[Bearbeiten]

Für Betriebssysteme, die auf der IA64-Architektur (Intel Itanium-Prozessoren) aufbauen, ist die Unterstützung von GPT zwingend notwendig, da diese Rechner das Extensible Firmware Interface verwenden. Auch bei PCs setzte sich ab ca. 2005 zunehmend der nunmehr UEFI genannte BIOS-Nachfolger durch, sodass auch Betriebssysteme für die IA-32-Architektur GPT unterstützen. Neben den entsprechenden IA64-Versionen von FreeBSD, HP-UX, Linux, NetBSD, OpenVMS, Solaris und Windows, die GPT Firmware-bedingt unterstützen, wird spätestens seit der Ablösung des BIOS durch UEFI auch von allen IA-32-Versionen GPT unterstützt.

Seit der Umstellung der Apple-Macintosh-Rechner auf Intel-Prozessoren Anfang 2006 verwendet Mac OS X ebenfalls GPT, da Intel-basierte Macs eine Apple-eigene EFI-Variante verwenden. Mac OS X 10.4 „Tiger“ und neuer kann jedoch auch auf der PowerPC-Plattform GPT-Medien verwenden, Firmware-bedingt aber nicht davon starten.

Die Versionen von Microsoft Windows XP, die noch für die 32-Bit-Intel i386-Architektur entwickelt wurden, können dagegen auf einer GPT-Festplatte nur mit Einschränkungen installiert und betrieben werden. Unter anderem lesen sie nur den MBR, nicht aber die GPT, um Partitionierungsdaten zu erhalten. Durch die Verwendung von hybriden Partitionstabellen können die jeweiligen Partitionen sowohl als MBR- als auch als GPT-Partition eingerichtet werden, allerdings stehen im MBR maximal drei primäre Partitionen zur Verfügung, da dieser nicht mehr als vier Einträge zulässt und die erste Partition bereits für die EFI-Firmware reserviert ist. Umgekehrt werden erweiterte Partitionen des MBR, die als Container mehrere logische Partitionen enthalten können, von GPT nicht mehr unterstützt.

Bis zum Erscheinen von Windows Vista Anfang 2007 richteten sich die 64-Bit-Windows-Versionen vornehmlich an Server-Betreiber und professionelle Anwender (z. B. CAD oder Grafik/Design). Dazu zählt auch die bereits 2005 erschienene Windows XP Professional x64 Edition. Bei deren Erscheinen war die umfassende GPT-Unterstützung durch entsprechende 64-Bit-Treiber nur bei ausgesuchter Hardware vorhanden. Mit Erscheinen von Vista wurde die Verfügbarkeit von 64-Bit-Treibern generell besser, sodass diese in der Regel ebenfalls die x64-Version von XP unterstützen.

Das Fachmagazin c't konnte in der Anfangsphase der Einführung während des Tests einer 4 TB großen, mit GPT partitionierten Festplatte feststellen, dass zahlreiche Festplattentreiber namhafter Hersteller beim Schreiben auf Bereiche jenseits von 2 TB die Daten statt an der gewünschten Stelle am Anfang der Festplatte ablegten, so dass es zu massiven Datenverlusten oder gar zum Verlust der Formatierung der Festplatte kam.[14] Das Problem trat anscheinend speziell bei den 32-Bit-Versionen von Windows XP auf, die zwar teilweise schon Unterstützung für GPT mit sich führten, jedoch aufgrund ihres 32-Bit-Treiberdesigns bei der früher üblichen physischen Sektor-Größe von 512 Byte die 2-TB-Grenze nicht überschreiten konnten.[15] Da der Einsatz solcher Partitionen damals noch hauptsächlich bei Servern anzutreffen war, ergaben sich diese Probleme am ehesten dann, wenn die Festplatten eines solchen Systems mit anderen Rechnern ausgetauscht wurden.

Ein 64-Bit-Linux kann – ganz ohne UEFI oder gesonderte BIOS-Unterstützung – mit GRUB2 von einer GPT-Partition booten. Es ist also kein UEFI dazu notwendig – die Kopplung von GPT an (U)EFI ist somit nicht zwingend.[1]

Bei OpenBSD ist die Unterstützung für GPT noch experimentell. Für einen Test muss das System aus den Quellen übersetzt werden[16]. Dabei ist die Option GPT in der Konfiguration des Kernels zu aktivieren[17]. Die offiziellen Releases werden ohne diese Unterstützung ausgeliefert.

Quellen[Bearbeiten]

  1. a b Linux kann ohne gesonderte BIOS-Unterstützung GPT verwenden und von GPT-Partition booten, In: c't Nr. 4/2011, S. 170 ff.
  2. List of partition identifiers for PCs. Technische Universität Eindhoven. Abgerufen am 18. April 2012.
  3. http://www.uefi.org/home/ (U)EFI Specification (englisch)
  4. e09127r3 EDD-4 Hybrid MBR boot code annex (PDF; 119 kB) Abgerufen am 18. Mai 2012.
  5. Microsoft TechNet: Was ist Windows RE?, abgerufen am 4. Juli 2015
  6. a b https://github.com/onie/onie/blob/master/rootconf/x86_64/sysroot-lib-onie/onie-blkdev-common
  7. http://www.onie.org/
  8. a b c vboot_reference/firmware/lib/cgptlib/include/gpt.h, ChromeOS-Quelltext von 23. Dezember 2010
  9. a b c http://www.chromium.org/chromium-os/chromiumos-design-docs/disk-format
  10. a b c d e f gptfdisk auf sourceforge.com (englisch), abgerufen am 4. Juli 2015
  11. http://www.freedesktop.org/software/systemd/man/systemd-gpt-auto-generator.html
  12. a b http://www.freedesktop.org/wiki/Specifications/DiscoverablePartitionsSpec/
  13. https://github.com/ceph/ceph/blob/9bcc42a3e6b08521694b5c0228b2c6ed7b3d312e/src/ceph-disk#L76-L81
  14. RAID-System: 4 TByte in einem Gehäuse, In: c't Nr. 2/2009, S. 54
  15. Microsoft TechNet: GUID-Partitionstabelle
  16. OpenBSD Building the System from Source [1]
  17. Mailing list openbsd-cvs [2]