Hetzner - DokuWiki

Partition Alignment

Unter Partition Alignment versteht man das richtige Ausrichten von Partitionen an den physikalisch Sektorgrenzen eines Datenträgers (z.B. Festplatte, SSD, RAID-Volume). Ein korrektes Partition Alignment gewährleistet eine optimale Performance bei Datenzugriffen. Speziell bei SSDs (mit internen Page-Größen von beispielsweise 4.096 oder 8.192 Bytes), Festplatten mit 4 KiB (4.096 Bytes) Sektoren und RAID Volumes führt eine fehlerhafte Ausrichtung von Partitionen zu verminderter Performance.

Bei der Installation von Betriebssystemen über den Robot oder unter Verwendung von installimage im Hetzner Rescue-System wird die Ausrichtung automatisch korrekt vorgenommen.

Bei eigenständigen Installation via KVM-Konsole oder via VNC (z.B. CentOS 6.X) muß die Ausrichtung selbst vorgenommen werden. Als Faustregel gilt, daß je neuer das zu installierende Betriebsystem, desto höher die Wahrscheinlichkeit, daß die Partitionen vom Installationsprogramm korrekt ausgerichtet werden.

Das Aligment kann durch folgende Befehle überprüft werden:

sfdisk -uS -l
fdisk -u -l /dev/sdX

Der Startsektor jeder Partition sollte mindestens durch 8 (8 * 512 Byte = 4KiB), im Optimalfall durch 2048 (2048 * 512 Byte = 1 MiB) teilbar sein.

Inhaltsverzeichnis

Hintergrund: Partitionierung

Traditionell arbeiten Festplatten mit einer physischen Sektorgröße von 512 Byte. Die erste Partition beginnt dabei im letzten Sektor der ersten Spur mit der (logischen) Blockadresse 63. Die Größe eines solchen (logischen) Sektors beträgt ebenfalls 512 Byte. Da logische und die physikalische Sektorgröße gleich sind, gibt es keinerlei Probleme. Neuere Festplatten im sogenannten Advanced Format arbeiten intern mit einer physischen Sektorgröße von 4.096 Byte (4 KiB). Nach außen emulieren sie aber weiter eine Sektorgröße von 512 Byte (Advanced Formate 512e). Auch SSDs arbeiten mit einer Pagegröße von 4 KiB beziehungsweise 8 KiB. Bei diesen Festplatten bzw. SSDs ist die "klassische" Partitionierung beginnend ab LBA-Adresse 63 nicht mehr zu empfehlen.

Aktuelle Dateisysteme wie zum Beispiel ext4 oder ntfs nutzen eine Blockgröße von 4 KiB. Die 4 KiB Dateisystem-Blöcke passen nun nicht direkt in die 4 KiB Sektoren der Festplatte bzw. 4 KiB / 8 KiB Pages der SSDs. Beim Schreiben eines einzelnen 4 KiB Dateisystem-Blockes müssen dann zwei 4 KiB Sektoren bzw. Pages verändert werden. Erschwerend kommt dabei hinzu, dass die jeweiligen 512 Byte Blöcke erhalten bleiben müssen - es kommt damit zu einem Read/Modify/Write. Die Folge ist eine deutlich verminderte Performance

Part alignment wrong.png

Korrekte Partitionierung

Um dieses Problem zu vermeiden empfiehlt sich ein Alignment auf 1 MiB - damit ist man auf lange Sicht auf der sicheren Seite. Mit der aktuellen Adressierung in 512 Byte großen logischen Sektoren entspricht das 2048 Sektoren.

Part alignment right.png

Linux

fdisk (ältere Versionen)

Bei älteren fdisk Versionen können Sie manuell über die Paramater -S und -H ein Alignment erreichen. Bezüglich der konkreten Number of Sectors per Track (S) und Number of Head (H) Zahlen finden sich unterschiedliche Empfehlungen. Mit -S 32 -H 64 sind die Partitionen auf 1 MiB aligned (32 Sektoren pro Track * 64 Heads * 512 Byte = 1.048.576 Byte = 1 MiB). Beim Erstellen der ersten Partition beginnen Sie dabei bei Zylinder 2. Ohne spezielle Parameter kommt es zu einem Misalignment durch fdisk.

fdisk im Hetzner Rescue-System

Die im Hetzner Rescue-System enthaltene fdisk Version nutzt ein 1MiB Alignment sofern der DOS-Kompatibilitätsmodus deaktiviert wird.

Die Empfehlung bei neueren fdisk Versionen lautet:

  • verwenden Sie fdisk von util-linux-ng >= 2.17.2
  • beachten Sie Warnungen von fdisk
  • deaktivieren Sie den DOS-compatible mode (-c Option)
  • verwenden Sie Sektoren als Display Units (-u Option)
  • verwenden Sie +size{M,G} um das Ende einer Partition anzugeben

Beispiel fehlerhaftes Alignment

Das folgende Beispiel zeigt ein fehlerhaftes Alignment nach einer VNC-Installation von CentOS 5.6:

[root@static ~]# fdisk -v
fdisk (util-linux 2.13-pre7)
[root@static ~]# fdisk -u /dev/hda

Die Anzahl der Zylinder für diese Platte ist auf 10443 gesetzt.
Daran ist nichts verkehrt, aber das ist größer als 1024 und kann
in bestimmten Konfigurationen Probleme hervorrufen mit:
1) Software, die zum Bootzeitpunkt läuft (z. B. ältere LILO-Versionen)
2) Boot- und Partitionierungssoftware anderer Betriebssysteme
   (z. B. DOS FDISK, OS/2 FDISK)

Befehl (m für Hilfe): p

Platte /dev/hda: 85.8 GByte, 85899345920 Byte
255 heads, 63 sectors/track, 10443 cylinders, zusammen 167772160 Sektoren
Einheiten = Sektoren von 1 × 512 = 512 Bytes

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/hda1   *          63      208844      104391   83  Linux
/dev/hda2          208845   167766794    83778975   8e  Linux LVM

Beispiel korrektes Alignment

root@rescue ~ # fdisk -c -u /dev/sda

Command (m for help): p

Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders, total 2930277168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0004dc67

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     4196351     2097152   fd  Linux raid autodetect
/dev/sda2         4196352     5244927      524288   fd  Linux raid autodetect
/dev/sda3         5244928  1465149167   729952120   fd  Linux raid autodetect

LVM und Software-RAID

Obwohl auch hier auf ein korrektes Alignment geachtet werden muß, ist dies in der Regel nicht explizit notwendig, da mindestens 64 KiB große Blöck verwendet werden. Neuere Version enthalten Patches, die zusätzlich ein Alignment auf 1 MiB-Grenzen vornehmen.

Windows

Alle Windows Versionen ab Windows Vista führen automatisch ein Alignment auf MiB-Grenzen bei allen Datenträgern größer als 4 GiB durch.

Ältere Versionen wie Windows XP benötigen ein manuelles Alignment.



© 2018. Hetzner Online GmbH. Alle Rechte vorbehalten.