Aus Linux-Magazin 08/2011

GUID-Partitionstabelle statt MBR in der Praxis

© Gennadiy Kravchenko, 123RF.com

GPT – die GUID-Partitionstabelle – löst bei großen Festplatten den gewohnten Master Boot Record zwangsweise ab. Die normalen Linux-Fdisk-Programme kommen aber noch nicht klar mit dem neuen Partitionierungsschema. Mit den richtigen Tools ist der korrekte Dreh aber schnell gefunden.

Seit Menschen Festplatten in PC-Gehäuse schrauben, stoßen sie an Limits. Mal waren es die im Bios, dann die von Controllern [1] oder solche in den Betriebssystemen. Maximale Sektoren, Köpfe, Partitionsgrenzen und -mengen, Bootbereiche und, und, und. In den 80ern beispielsweise zwang MS-DOS 3.2 Festplattenbesitzer dazu, ihre teuren Schätzchen in 32-MByte-Partition aufzuteilen. Eine solche Veteranin mit 2,5 Kilo Kampfgewicht zeigt Abbildung 1 auf der Seite liegend. Um ihre nach heutigen Maßstäben lächerlichen 85 MByte Kapazität zu nutzen, waren mindestens drei Partitionen nötig.

Abbildung 1: Alt und neu: Seite an Seite eine mit 85 MByte nur äußerlich große Micropolis-Platte aus den 80ern neben einer aktuellen 3-TByte-SATA-Festplatte von Seagate, die für diesen Artikel als Testobjekt diente.

Abbildung 1: Alt und neu: Seite an Seite eine mit 85 MByte nur äußerlich große Micropolis-Platte aus den 80ern neben einer aktuellen 3-TByte-SATA-Festplatte von Seagate, die für diesen Artikel als Testobjekt diente.

Das zweite, optisch kleinere Gerät auf dem Foto dagegen ist sehr viel neuerem Datums, eine von zwei Seagate ST 33000651 AS, die der Hersteller dem Linux-Magazin für die Tests zu diesem Artikel geliehen hat. Mit ihrer Kapazität von rund 3 TByte überschreitet sie gegenwärtig das PC-geschichtlich kritische Limit von 2 TByte, verursacht diesmal durch die MBR-Partitionstabelle (Abbildung 2, [2]).

Abbildung 2: Aufbau des Master Boot Record. Die Partitionstabelle mit vier Einträgen hat nur 4 Byte pro Sektornummer zur Verfügung.

Abbildung 2: Aufbau des Master Boot Record. Die Partitionstabelle mit vier Einträgen hat nur 4 Byte pro Sektornummer zur Verfügung.

Das klassische MBR-Partitionierungsschema CHS ist sowieso schon lange ausgeschöpft (maximal 1024 Cylinders * 255 Heads * 63 Sectors) mit seinen 8 GByte. Seither nehmen Bios und Betriebssystem immer 254 Köpfe, 63 Sektoren und 1023 Zylinder an und nutzen die jeweils 4 Byte in der Partitionstabelle, um Position und Größe der Sektoren festzulegen (Logical Block Addressing, LBA).

Mit diesem Kniff lebte die PC-Welt bislang ganz gut – doch die Zeit ist vorbei, denn (232-1 Sektoren)*512 Byte Sektorgröße ergibt rund 2,2 TByte als maximale Größe für eine Partition und reichlich 4 TByte als Größe der Festplatte ([3], [4]).Wer also eine aktuelle 3-TByte-Platte am Stück verwenden will, beispielsweise in einem File- oder Mailserver, muss grundlegend etwas ändern – willkommen in der Welt der GUID-Partitionstabellen!

Die GPT ist Nachfolgerin der MBR-Partitionstabellen und Teil des EFI-Standards (Extensible Firmware Interface, [5]). Die Spezifikation EFI, in der Hersteller-unabhängigen Ausprägung heißt sie Unified EFI (UEFI), ersetzt und vereinheitlicht die Teile des Bios, die fürs Booten und zum Abarbeiten von Pre-Boot-Programmen zuständig sind. Die GPT verwendet wie die moderneren MBR-Tabellen LBA, aber mit 64 Bit, was Festplatten bei 512 Byte Sektorgröße bis 8 Zettabyte adressierbar macht, was rund 8 Milliarden TByte entspricht. Außerdem verwaltet eine GPT bis zu 128 Partitionen (Abbildung 3, [6]).

Abbildung 3: Aufbau einer GPT. Nach dem wegen der Kompatibilität zu alten Betriebssystemen mitgeführten Standard-MBR folgt ein knapp 100 Byte langer Header. Die eigentliche Partitionstabelle nimmt in 32 Blöcken die Daten von maximal 128 Partitionen à 128 Byte auf.

Abbildung 3: Aufbau einer GPT. Nach dem wegen der Kompatibilität zu alten Betriebssystemen mitgeführten Standard-MBR folgt ein knapp 100 Byte langer Header. Die eigentliche Partitionstabelle nimmt in 32 Blöcken die Daten von maximal 128 Partitionen à 128 Byte auf.

Booten von GPT-Platten

Handelsübliche Serversysteme, Großrechner und neuere Apple-Rechner entsprechen der EFI-Spezifikation und booten darum auch von einer GPT-initialisierten Festplatte. Desktop-Mainboards für Intel- und AMD-CPUs dagegen booten derzeit fast ausschließlich über ihre MBR-Bios-Routinen.

Linuxer haben aber das große Glück, Grub 2 als Lösung des Problems an der Hand zu haben. Der Urlader des Tools stellt nämlich dem Rechner eine EFI-Umgebung zur Verfügung, aus der Linux problemlos von GPT-Datenträgern hochfährt. Achtung: Frühere Grub-Versionen haben dieses Feature noch nicht!

Trotz “Hirnschadens”: GPT in der Praxis

Der Linux-Kernel unterstützt die aktuellen großen Platten und GPTs seit Version 2.6.25, auch wenn Linus Torvalds EFI als “Intels Hirnschaden” abtut [7]. Das Testsystem spricht die Seagate als »/dev/sdh« an, Listing 1 zeigt, was der »dmesg« -Befehl liefert. Beim Partitionieren mit einer GPT verweigern die bekanntesten Programme »fdisk« oder »cfdisk« allerdings die Mitarbeit. Das grafische Programm Gparted dagegen unterstützt GPTs (Abbildung 4). Die erste Festplatte soll mit dem Tool eine einzige große Datenpartition erhalten.

Listing 1

Kernel erkennt 3-TByte-Platte

01 [782663.410960] ata6: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
02 [782663.445923] ata6.00: ATA-8: ST33000651AS, CC44, max UDMA/133
03 [782663.445931] ata6.00: 5860533168 sectors, multi 0: LBA48 NCQ (depth 31/32)
04 [782663.446811] ata6.00: configured for UDMA/133
05 [782663.446830] ata6: EH complete
06 [782663.447076] scsi 7:0:0:0: Direct-Access     ATA      ST33000651AS     CC44 PQ: 0 ANSI: 5
07 [782663.447507] sd 7:0:0:0: Attached scsi generic sg9 type 0
08 [782663.447585] sd 7:0:0:0: [sdh] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)
09 [782663.447780] sd 7:0:0:0: [sdh] Write Protect is off
10 [782663.447788] sd 7:0:0:0: [sdh] Mode Sense: 00 3a 00 00
11 [782663.447928] sd 7:0:0:0: [sdh] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
12 [782663.448846]  sdh: unknown partition table
13 [782663.474623] sd 7:0:0:0: [sdh] Attached SCSI disk
Abbildung 4: Gparted erkennt unpartitionierte 3-GByte-Platten auf Anhieb, anders als Fdisk und Cfisk. Um sie zu nutzen, muss der Admin nun eine GPT anlegen.

Abbildung 4: Gparted erkennt unpartitionierte 3-GByte-Platten auf Anhieb, anders als Fdisk und Cfisk. Um sie zu nutzen, muss der Admin nun eine GPT anlegen.

In Gparted legt der Admin zuerst über den Menüpunkt »Laufwerk« eine Partitionstabelle an, die eine Meldung in Übergröße nach sich zieht, dass alle bisher darauf enthaltenen Daten verlustig gehen. Im selben Fenster navigiert der Admin dann »Erweitert | Partitionstabellentyp« an und wählt »gpt« .

Der Menüpunkt »Partition | Neu« macht den Weg für eine neue primäre Partition mit Ext 4 als Dateissystem frei. Die Ankündigung »Abhängig von Anzahl und Größe der Operationen kann dies einige Zeit in Anspruch nehmen« konkretisierte das Testsystem mit einer 10-minütigen Auszeit. Anschließend stehen die 3 TByte zur Verfügung – abzüglich eines stolzen Verwaltungs-Overhead von 44,05 Gibibyte (Listing 2).

Listing 2

fdisk -lu nach dem Partitionieren

01 Disk /dev/sdh: 3000 GB, 3000590369280 bytes
02 255 heads, 63 sectors/track, 364801 cylinders, total 5860528065 sectors
03 Units = sectors of 1 * 512 = 512 bytes
04
05    Device  Boot  Start         End      Blocks   Id  System
06 /dev/sdh1         2048  5860532223  2930272033   83  Linux
07 Warning: Partition 1 does not end on cylinder boundary.

Listing 3 riskiert einen Blick in den 512 Byte großen Master Boot Record, den die GPT aus Kompatibilitätsgründen auch besitzt und korrekt befüllt. Die Signatur 0x55AA signalisiert in Zeile 5 das Ende des MBR. Im zweiten Sektor der GPT befindet sich die Header-Information zur GUID-Partitionierung (Zeilen 7 bis 12). Ab Position 0x400 liegen die Partitionseinträge selbst, die aus folgenden Daten bestehen:

Listing 3

dd if=/dev/sdh | xxd (Auszug)

01 [...]
02 00001c0: 0100 eefe ffff 0100 0000 ffff ffff 0000 ................
03 00001d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
04 00001e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
05 00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa ..............U.
06 [...]
07 0000200: 4546 4920 5041 5254 0000 0100 5c00 0000 EFI PART....\...
08 0000210: 0e0f 49ee 0000 0000 0100 0000 0000 0000 ..I.............
09 0000220: afa3 505d 0100 0000 2200 0000 0000 0000 ..P]....".......
10 0000230: 8ea3 505d 0100 0000 cbb9 6e3f 0765 a746 ..P]......n?.e.F
11 0000240: a7c2 70a1 3db8 25c4 0200 0000 0000 0000 ..p.=.%.........
12 0000250: 8000 0000 8000 0000 6afb 3a17 0000 0000 ........j.:.....
13 [...]
14 0000400: a2a0 d0eb e5b9 3344 87c0 68b6 b726 99c7 ......3D..h..&..
15 0000410: 6903 b666 b91c 7646 a8dd e9d1 d7c6 bc5a i..f..vF.......Z
16 0000420: 0008 0000 0000 0000 ff9f 505d 0100 0000 ..........P]....
  • Partitionstyp (16 Byte)
  • GUID der Partition (16 Byte)
  • Beginn der Partition (8 Byte)
  • Ende der Partition (8 Byte)
  • Attribute (8 Byte)
  • Partitionsname (72 Byte)

Die GUID (Globally Unique Identifier) ist Namensgeberin der GPT, einer eindeutigen, 16 Byte langen Chiffre des Partitionstyps. Tabelle 1 zeigt einige GUIDs (Quelle: Wikipedia). Das Testsystem besitzt seit der Gparted-Aktion eine Datenpartition. Die zugehörige GUID lautet EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, die Umsetzung in Zeile 14 dreht (wohl wegen Big und Little Endian) einige Positionen der ID um.

Ans Ende des Datenträgers legt EFI übrigens eine Kopie der GPT zu Sicherungszwecken ab. Eine beschädigte primäre GPT lässt sich mit Hilfe dieser Kopie wiederherstellen. Wer ein Speichermedium von GPT- wieder auf eine MBR-Partitionierung zurückführen möchte, muss die zweite GPT auch löschen, sonst erkennt das System die Festplatte weiterhin als GPT-initialisiert.

Andere GPT-geeignete Tools

Serveradmins, die auf der Kommandozeile arbeiten, können mit Gparted wenig anfangen. Derzeit ist die Zahl der GPT-geeigneten Fdisk-Ersatzprogramme recht überschaubar. Am interessantesten erscheint das Projekt GPT fdisk [8], es besteht aus den Programmen »gdisk« , »sgdisk« und »fixparts« . Ein aktuelles Ubuntu kann nur »gdisk« über sein Repository beziehen. Deshalb ist es sinnvoller, alle Pakete direkt über den Open Suse Build Service [9] zu holen.

Ist das Toolset installiert, lässt sich eine Festplatte prüfen und bearbeiten. »gdisk /dev/sdh« liefert bei einer frischen Festplatte wenig überraschend:

Partition table scan:
 MBR: not present
 BSD: not present
 APM: not present
 GPT: not present

Mit dem Kommando »p« für “Print the partition table” listet das Tool die Partitionstabelle (Listing 4). »o« (Create a new empty GUID partition table) legt nach einer Sicherheitsabfrage eine neue GPT-Tabelle an. Mit »n« (Add a new partition) lässt sich wie vorhin mit Gparted eine durchgängige Datenpartition erzeugen. Gdisk liefert dabei GUID-Optionen, die Gparted nicht kennt:

Listing 4

Partitions-Informationen von Gdisk

01 Disk /dev/sdh: 5860533168 sectors, 2.7 TiB
02 Logical sector size: 512 bytes
03 Disk identifier (GUID): 0AE667A2-818F-4670-A328-500021C76A73
04 Partition table holds up to 128 entries
05 First usable sector is 34, last usable sector is 5860533134
06 Partitions will be aligned on 2048-sector boundaries
Use 'l' on the experts' menu to adjustalignment
Last sector (2048-5860533134, default =5860533134) or {+-}size{KMGTP}:
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter =0700):

Den vorgeschlagenen Wert »0700« für »Linux/Windows data« übernahmen die Tester und schrieben per »w« (Write table to disk and exit) alles auf den Datenträger. Zum Formatieren diente im Test »mkfs.ext4« . Auf der Kommandozeile dauerte der gesamte Vorgang etwa 3 Minuten weniger als mit Gparted. Die so geschriebene GPT war identisch mit der von Gparted erzeugten, das jedenfalls ergab im Test ein direkter Vergleich mit »dd« und »xxd« .

Von MBR nach GPT …

Praktischerweise vermag Gdisk MBR-partitionierte Festplatten in GPT-partitionierte umzuwandeln. Das spart das Retten und Wiederherstellen vorhandener Partitionsinhalte. Zuständig ist das Gdisk-Kommando »r« (Recovery and transformation options). Die Tester zogen dafür einen älteren, 200 GByte großen Datenträger mit MBR-Partitionierung aus ihrem Fundus. Nach der Konvertierung liefert »gdisk /dev/sde« folgendes Ergebnis:

Partition table scan:[...]
Found valid GPT with protective MBR; usingGPT.

Listing 5 zeigt die Ausgabe des Forensiktools »mmls« aus dem Sleuthkit-Paket [10]. Zeile 2 bestätigt die erfolgreiche Umwandlung. Interessant gestaltet sich der Partitionseintrag selbst in Listing 6, denn der Datentyp liegt zusätzlich zur GUID als Texteintrag in Zeile 4 bis 6 vor.

Listing 6

dd if=/dev/sde | xxd (Auszug)

01 0000400: a2a0 d0eb e5b9 3344 87c0 68b6 b726 99c7  ......3D..h..&..
02 0000410: 42c4 6d88 c9f9 c84c a33d a0a6 ceb3 2bf3  B.m....L.=....+.
03 0000420: 3f00 0000 0000 0000 c0dd 4917 0000 0000  ?.........I.....
04 0000430: 0000 0000 0000 0000 4c00 6900 6e00 7500  ........L.i.n.u.
05 0000440: 7800 2f00 5700 6900 6e00 6400 6f00 7700  x./.W.i.n.d.o.w.
06 0000450: 7300 2000 6400 6100 7400 6100 0000 0000  s. .d.a.t.a.....

Listing 5

mmls /e3v/sde

01 GUID Partition Table (EFI)
02 Offset Sector: 0
03 Units are in 512-byte sectors
04
05      Slot    Start        End          Length       Description
06 00:  Meta    0000000000   0000000000   0000000001   Safety Table
07 01:  -----   0000000000   0000000062   0000000063   Unallocated
08 02:  Meta    0000000001   0000000001   0000000001   GPT Header
09 03:  Meta    0000000002   0000000033   0000000032   Partition Table
10 04:  00      0000000063   0390716864   0390716802   Linux/Windows data
11 05:  -----   0390716865   0390721967   0000005103   Unallocated

… und umgekehrt

Gdisk konvertiert ebenfalls GPT in MBR zurück. Diese Option funktioniert nicht in allen Fällen und ist darum mit Vorsicht anzuwenden. Nach Rückkonvertierung der zuvor schon umgewandelten Festplatte meldet sich Gdisk mit den Hinweisen aus Listing 7. An dieser Stelle kann »sgdisk« , das zweite Program aus dem GPT-fdisk-Paket, hilfreich sein, das Low-Level-Reparaturen ausführt.

Listing 7

gdisk /dev/sde

01 GPT fdisk (gdisk) version 0.7.1
02
03 Partition table scan:
04   MBR: MBR only
05   BSD: not present
06   APM: not present
07   GPT: not present
08
09 ***************************************************************
10 Found invalid GPT and valid MBR; converting MBR to GPT format.
11 THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if
12 you don't want to convert your MBR partitions to GPT format!
13 ***************************************************************
14
15 Exact type match not found for type code A400; assigning type code for
16 'Linux/Windows data'

Cluster-Festplatten und das leidige Alignment

Normale Festplatten speichern die Daten in ihren Sektoren zu je 512 Bytes. Betriebssysteme und deren Filesysteme fassen mehrere dieser Sektoren zu einem Cluster zusammen, häufig acht Stück, was Cluster mit 4096 Byte Länge ergibt. Um mehr Performance zu erreichen, arbeiten neuerdings große Festplatten intern ebenfalls mit 4096 Byte großen Clustersektoren, die Hersteller sprechen dann von “4k”-Festplatten. Die im Test benutzten Seagate-Festplatten zählen zu dieser Klasse.

Um nach außen für das Bios kompatibel zu sein, übersetzt eine Festplatten-interne Logik die Cluster wieder in 512 Byte große Sektoren. Damit die Angleichung der Verwaltungseinheiten-Größen von Betriebssystem und Festplatte auch zu dem gewünschten Geschwindigkeitsgewinn führt, sollten – egal ob MBR-Partitionen oder mit einer GPT – die 4-KByte-Cluster der Festplatte und die 4-KByte-Cluster des Dateisystems genau aufeinander liegen.

Andernfalls verkehrt sich der Effekt sogar ins Gegenteil: Wenn bei einem Versatz von 2048 Byte das Betriebssystem zum Beispiel einen Cluster auf die Platte schreibt, muss diese dann zwei halbe Cluster auf seine Scheiben übertragen, was auf zwei ganze Cluster hinausläuft. Besonders negativ betroffen von diesem so genannten Alignment sind SSD-Disks, da es auf dem Flashspeicher bei überlappenden Schreibzyklen zu einem Read-Modify-Write-Zyklus kommt.

Startsektor 63 oder 2048

Dass Betriebssystem und Permanentspeicher ihre Verwaltungseinheiten nicht synchron betreiben, ist eher die Regel als die Ausnahme. Schuld ist Microsoft, denn die Partitionierungstools von MS-DOS bis Windows XP lassen die erste Partition nach dem MBR bei Sektor 63 starten. So partitionierte Platten sind darum immer falsch ausgerichtet. Würde die erste Partition bei Sektor 64 beginnen, wäre dagegen eine ganzzahlige Zusammenfassung von 4096 Blöcken möglich. Fdisk von Linux ahmt aus Kompatibilitätsgründen dieses Verhalten nach ([11], [12])

Seit Windows Vista hat Microsoft das Problem erkannt und legt bei neu zu partitionierenden Datenträgern den Start der ersten Partition auf Sektor 2048 statt auf Sektor 63. Bei Fdisk von Linux muss man je nach Version mindestens den DOS-Kompatibilitätsmodus per Kommandozeilenoption abschaltenden. Die Details weiß [11] zu berichten. Alle Tools, die eine GPT einrichten können, legen per Default den Startsektor zum Glück auf Position 2048.

Genau dies ließ sich bei den Tests zu diesem Artikel beobachten: Zeile 6 von Listing 2 zeigt als Startsektor 2048 – daher läuft die Zuordnung der ersten verwendeten 3-TByte-Platte optimal. Vorsicht ist jedoch bei Datenträgern mit einer Vorgeschichte geboten. Zeile 10 von Listing 5 verhilft nämlich zu der Erkenntnis, dass eine GPT auch ab Sektor 63 statt ab 2048 starten darf. Zur Erinnerung: Die zweite Festplatte hatten die Tester von einem MBR-Schema in ein GPT-Schema konvertiert. Dabei blieb dann die Partitionsgrenze bei 63 bestehen.

Abbildung 5: Durch die ungünstige Wahl des Partitions-Startsektors 63 liegen die 4096 Byte großen Cluster von Dateisystem und Festplatte niemals aufeinander. (Quelle: Thomas Krenn Server)

Abbildung 5: Durch die ungünstige Wahl des Partitions-Startsektors 63 liegen die 4096 Byte großen Cluster von Dateisystem und Festplatte niemals aufeinander. (Quelle: Thomas Krenn Server)

Ob sich die Gesamtproblematik in der Praxis so scharf stellt wie in der Theorie, ist strittig, da moderne Festplatten ein ausgeklügeltes, nur dem Hersteller bekanntes Mapping betreiben und zudem in den Betriebs- und Dateisystemen diverse Puffer und Optimierungen eingebaut sind. Es bleibt aber festzuhalten, dass das Verlegen der Partitionen auf 4-KByte-Grenzen eine begrüßenswerte Entwicklung darstellt, die Admins tätig mittragen sollten.

GUID-Table, bitte zum Tanz!

Die Zeit für GPT ist definitiv angebrochen. Moderne Festplatten benötigen die neuen Tabellen, um Partitionen jenseits der 2,2 TByte anzulegen. Von Fdisk muss der Admin dabei vorerst die Finger lassen, Tools wie Gparted springen in die Bresche. Mit dem Bootloader Grub 2 booten auch Desktop-Mainboards problemlos Linux von einer GPT-Platte. In Sachen Performance heißt es, die Augen offen halten: Dass viele moderne Speicher intern mit 4 KByte großen Clustern statt mit 512-Byte-Sektoren arbeiten, ist zwar beim LBA-Adressieren nicht zu bemerken, kann aber bei ungünstigen Partitionen die Performance ruinieren. (jk)

Der Autor

Hans-Peter Merkel ist mit dem Schwerpunkt Datenforensik seit vielen Jahren in der Open-Source-Community aktiv. Er bildet Mitarbeiter von Strafverfolgungsbehörden in Europa, Asien und Afrika aus und engagiert sich als Gründer und Vorsitzender bei Freioss und Linux4afrika.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben