Disk Partition Alignment - was bedeutet das?
Zu diesem Thema gibt es viele Artikel, manche führen auch zur Panik bei Administratoren - was versteckt sich jetzt
hinter dem Thema Disk Partition Alignment - und warum wurde es überhaupt zu einem Problem?
Das Problem liegt wie so oft in der Geschichte. Als die ersten Harddisks (in Megabytegröße) eingeführt wurden, hat
man sich auf eine Sektorgröße - die kleinste Einheit, in der man auf einer Harddisk lesen und schreiben kann - von
512Bytes (Nutzdaten) geeinigt. Da man damals sehr darauf geachtet hat, dass ja kein Platz verschwendet wird, wurden
die Partitionen der Harddisks ab dem ersten "freien" 512Bytes Sector gelegt. Dies war leider der Sektor 63 (die
Sektoren sind ab 0 gezählt) - was für das Disk Partition alignment in späterer Folge ein großes Problem wurde.
Die Harddisks wurden immer größer und irgendwann haben immer mehr Hersteller von Raid Controllern, Storages,
Filesystemen,... mit den 512 Bytes Sectorgrößen ein Problem bekommen - es waren einfach zu viele Sektoren.
Bemerkenswert ist übrigens, dass sogar in DOS die einzelnen Sektoren schon auf "Cluster" zusammengefasst wurden,
damit man nicht so viel kleine Stückchen hat. Solang die Harddisks nur in MegaBytegrößen verfügbar waren, war dies
noch kein wirkliches Performancethema.
Inzwischen werden große SATA Disken intern schon mit 4096 Byte Sektoren (und nicht mehr mit 512Bytes) formatiert,
damit man mit der Adressierung zurecht kommt.
Was ist jetzt genau das Problem?
Wenn eine Partition im Sektor 63 beginnt - da von 0 gezählt wird also im 64´sten 512Bytes Sektor - beginnt die
Partition also bei 32k abzüglich 512Bytes. Nutzt man eine Disk mit intern 4k Sektoren oder wird eine Storage Lösung
mit RAID Technologie genutzt, beginnt die Partition nie "gleich" mit einer Verwaltungseinheit (Sektor, Stripe,...).
Somit wird aus einem Zugriff auf einen typischen Block (Filesystem, Oracle Datenbank Block,...) auf Hardware Ebene
oft ein Zugriff auf zwei (aufeinanderfolgende) Cluster durchgeführt - das ist meistens noch nicht das große
Performancethema.
Wirklich schlimm wird es erst, wenn man beispielsweise einen 4k Block schreibt, der auf der Hardwareebene
beispielsweise in zwei aufeinander folgenden 4k Sektoren liegt. Hier muss man zuerst die beiden betroffenen 4k
Sektoren lesen, die zu schreibenden 4k Blöcke entsprechend einfügen und die zwei 4k Sektoren schreiben. Nutzt man
RAID mit Parity (RAID 5, Raid 6,...) muss das ganze auch für alle anderen relevanten Sektoren erfolgen - dadurch
wird Schreiben zusätzlich zu einem großen Leseaufwand und die Performance sinkt stark ab.
Wer ist betroffen?
Es fängt an bei Windows - erst ab Windows Vista, Windows 2008 Server achtet Microsoft bei einer Neuinstallation auf
entsprechende Partitionierung (bei Upgrades bleibt das Problem bestehen!).
Bei Linux ist der Default von fdisk leider immer noch Sektor 63.
Das trifft auch ASM, wenn man diesen auf partitionierte Disken zugreifen läßt.
Die Lösung
Für Windows gibt es viele Utilities, man denen man das Alignment korrigieren kann
Unter Linux ist es leider etwas komplizierter. Es hat sich inzwischen durchgesetzt, dass man die erste Partition ab
Sektor 2048 beginnen lässt - das ist ein MB. Damit man dies 100% sicher richtig anlegt, muss man aber etwas mehr
machen. Das folgende Beispiel zeigt, wie man zuerst fdisk anweist, für ein Device eine andere "Geometrie" zu nutzen
und dann eine Partition anzulegen.
fdisk -S 32 -H 64 /dev/sdc
The number of cylinders for this disk is set to 65536.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p
Disk /dev/sdc: 68.7 GB, 68719476736 bytes
64 heads, 32 sectors/track, 65536 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk identifier: 0x5a3bacac
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-65536, default 1): 2
Last cylinder or +size or +sizeM or +sizeK (2-65536, default 65536):
Using default value 65536
Command (m for help): p
Disk /dev/sdc: 68.7 GB, 68719476736 bytes
64 heads, 32 sectors/track, 65536 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk identifier: 0x5a3b93b6
Device Boot Start End Blocks Id System
/dev/sdc1 2 65536 67107840 83 Linux
Command (m for help): w
The partition table has been altered!
# fdisk -lu /dev/sdc
Disk /dev/sdc: 68.7 GB, 68719476736 bytes
64 heads, 32 sectors/track, 65536 cylinders, total 134217728 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x5a3bacac
Device Boot Start End Blocks Id System
/dev/sdc1 2048 134217727 67107840 83 Linux
Quellen
- Einen guten - englischen - Artikel zu Partition Alignment unter Linux und Windows finden Sie hier.
- Einen sehr guten, ebenfalls englischen Artikel zu Partition Alignment unter VMware finden Sie hier.
- Auch bei NetApp finden Sie zum Thema Alignment und VMware einen sehr guten Eintrag in der Knowledge Base.
- Einen Artikel zu 4k Harddisks und Alignment finden Sie hier.