Partition Alignment
Partition Alignment Linux
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 Volumens führt eine fehlerhafte Ausrichtung von Partitionen zu verminderter Performance.
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.
Fehlerhaftes Alignment
Richtiges Alignment
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.
Überprüfen des Partition Alignment
Alignment Check mit parted
Falsches Alignment
Richtiges Alignment
Alignment Check mit fdisk
Falsches Alignment
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/sda1 * 63 208844 104391 83 Linux
/dev/sda2 208845 167766794 83778975 8e Linux LVM
Richtiges Alignment
255 heads, 63 sectors/track, 243067 cylinders, total 3904876544 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004f115
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 9764863 4881408 83 Linux
/dev/sda2 9764864 3904876543 1947555840 83 Linux
Auch ein netter Artikel dazu Aligning IO on a hard disk RAID – the Theory
Guter Artikel, Alex! Das Disk-Alignement wird selbst von vielen erfahrenen Sysadmins ignoriert, da das Thema dort meist unbekannt ist. Ich aligne auch meist bei 1 MiB, damit macht man meist alles richtig.