Skip to Main Content

Breadcrumb

Disk Partition Alignment

Oracle Enterprise Linux

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.