Partition Alignment
Unter Partition Alignment versteht man das richtige Ausrichten von Partitionen an sinnvollen Grenzen 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.
Partitionen in der Vergangenheit
In der Vergangenheit begann die erste Partition stets auf LBA-Adresse 63 (entspricht dem 64. Sektor) - siehe dazu auch CHS und LBA Adressierung von Festplatten. Die Größe eines solchen (logischen) Sektors beträgt 512 Byte. Bei normalen Festplatten (mit einer physischen Sektorgröße von 512 Byte) ist das auch ok. Neuere Festplatten mit einer physischen Sektorgröße von 4.096 Byte (4 KiB) emulieren zwar nach außen hin eine Sektorgröße von 512 Byte, arbeiten intern aber mit 4.096 Byte. Auch SSDs arbeiten mit einer Pagegröße von 4 KiB bzw. 8 KiB. Bei diesen neuen Festplatten bzw. SSDs ist eine solche Partitionierung beginnend bei LBA-Adresse 63 sehr problematisch.
Wenn Sie nämlich diese Partition mit einem Dateisystem mit einer typischen Blockgröße von 4 KiB formatieren, passen die 4 KiB Dateisystem-Blöcke 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 bis zu 25fach schlechtere Schreibperformance bei kleinen Dateizugriffen.[1]
Korrekte Partitionierung
Um diese Probleme 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.
Virtualisierte Systeme
Informationen für virtualisierte Systeme finden Sie im Artikel File System Alignment in virtualisierten Umgebungen.
Windows
Neuere Windows Versionen (Windows Vista, Windows 7, Windows Server 2008) führen folgendes sinnvolles Alignment durch:[2][3]
- Disk Size <=4GiB -> align at 64KiB
- Disk size >4GiB -> align at 1MiB
Ältere Versionen benötigen ein manuelles Alignment.[4]
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.[5][6][7] Mit -S 32 -H 64
sind die Partitionen aber jedenfalls 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 ab Version 2.17.1
fdisk nutzt ein 1MiB Alignment ab util-linux-ng Version >= 2.17.1 sofern der DOS-Kompatibilitätsmodus deaktiviert wird.[8]
Die Empfehlung bei neueren fdisk Versionen lautet:[9]
- verwenden Sie fdisk von util-linux-ng >= 2.17.2
- lesen 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
Im folgenden Beispiel zeigen wir ein fehlerhaftes Alignment. Dies entsteht durch den DOS-compatible mode:
root@ubuntu-10-04:~# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xe4909079. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): p Disk /dev/sdb: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xe4909079 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-19457, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-19457, default 19457): +10G Command (m for help): u Changing display/entry units to sectors Command (m for help): p Disk /dev/sdb: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders, total 312581808 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: 0xe4909079 Device Boot Start End Blocks Id System /dev/sdb1 63 20980889 10490413+ 83 Linux Command (m for help):
Beispiel richtiges Alignment fdisk ältere Version
Mit den Parametern -S 32 -H 64
erhält man ein richtiges Partition Alignment wenn man bei Zylinder 2 die Partition beginnen lässt:
debian:~# 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: 0x5a3b93b6 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! Calling ioctl() to re-read partition table. Syncing disks. debian:~# 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: 0x5a3b93b6 Device Boot Start End Blocks Id System /dev/sdc1 2048 134217727 67107840 83 Linux debian:~#
Beispiel richtiges Alignment fdisk ab Version 2.17.1
Bei abgeschaltetem DOS-compatible mode und der Sektor-Einheit bekommen wir ein richtiges Alignment (Partition beginnt an LBA Adresse 2048 - in diesem Fall mit einer SSD mit 4 KiB Pagegröße liegen damit 256 leere Pages zu Beginn, die Partition beginnt genau am Anfang der 257. Page):
root@ubuntu-10-04:~# fdisk -c -u /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xfae13403. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) Command (m for help): p Disk /dev/sdb: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders, total 312581808 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: 0xfae13403 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 sector (2048-312581807, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-312581807, default 312581807): +10G Command (m for help): p Disk /dev/sdb: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders, total 312581808 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: 0xfae13403 Device Boot Start End Blocks Id System /dev/sdb1 2048 20973567 10485760 83 Linux Command (m for help):
Alignment überprüfen
Unter Linux können Sie mit einem der beiden folgenden Kommandos das Alignment überprüfen (ersetzen Sie /dev/sdX durch das Device, z.B. /dev/sda):
sfdisk -d /dev/sdX
fdisk -l -u /dev/sdX
Das Beispiel hier zeigt ein System, das mit Ubuntu 10.04 installiert wurde. Der Installer von Ubuntu 10.04 hat dabei sowohl die primären, als auch die logischen Partitionen auf 1 MiB ausgerichtet. Dies erkennen Sie daran, dass Sie die Nummer des Start-Sektors der Partition durch 2048 dividieren können (2048 Sektoren * 512 Byte pro Sektor = 1.048.576 Bytes = 1 MiB). Die erweiterte Partition (in diesem Beispiel /dev/sda2) ist nicht auf 1 MiB ausgerichtet - dies ist allerdings auch nicht nötig, da diese nur als Container für die logischen Partitionen dient und die logischen Partitionen selbst schon auf 1 MiB ausgerichtet sind.
user@ubuntu-test:~$ sudo sfdisk -d /dev/sda Warning: extended partition does not start at a cylinder boundary. DOS and Linux will interpret the contents differently. # partition table of /dev/sda unit: sectors /dev/sda1 : start= 2048, size= 39061504, Id=83, bootable /dev/sda2 : start= 39065598, size=1761810434, Id= 5 /dev/sda3 : start= 0, size= 0, Id= 0 /dev/sda4 : start= 0, size= 0, Id= 0 /dev/sda5 : start= 39065600, size= 3997696, Id=82 /dev/sda6 : start= 43065344, size=1757810688, Id=83 user@ubuntu-test:~$ sudo fdisk -l -u /dev/sda Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 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: 0x000d8343 Device Boot Start End Blocks Id System /dev/sda1 * 2048 39063551 19530752 83 Linux /dev/sda2 39065598 1800876031 880905217 5 Extended /dev/sda5 39065600 43063295 1998848 82 Linux swap / Solaris /dev/sda6 43065344 1800876031 878905344 83 Linux user@ubuntu-test:~$
LVM
Wenn Sie LVM verwenden, ist auch hier ein richtiges Alignment wichtig.
In der Regel sollte das Alignment aber automatisch passen. Ältere LVM Versionen führen ein Alignment auf 64KiB aus - somit ist der Beginn eines Physical Extents auch am Beginn einer Page der SSD. Ein Patch vom August 2010 sorgt nun für ein Alignment auf 1 MiB. Der Patch ist in LVM Version Version 2.02.73 - 18th August 2010 eingeflossen:
- lvm-devel RFC PATCH change default alignment of pe_start to 1MB (Mike Snitzer, linux-lvm mailing list, 05.08.2010)
- lvm-devel RFC PATCH v2 change default alignment of pe_start to 1MB (Mike Snitzer, linux-lvm mailing list, 06.08.2010)
- LVM2 What's New (Change default alignment of pe_start to 1MB.)
- Re: (linux-lvm) LVM Alignement (Mike Snitzer, linux-lvm mailing list, 22.07.2011)
Software RAID
Ein Linux Software RAID hat in der Regel ein richtiges Alignment. Bei RAID Volumes mit dem der älteren Superblock Metadaten-Version 0.90 liegt der Superblock am hinteren Ende des Devices (in einem 64 KiB aligned Block), die RAID Daten beginnen am Anfang des Devices. Und Software RAID mit der neueren Superblock Metadaten-Version 1.* aligned die Daten auf 1 MiB (siehe Linux Software RAID - Alignment überprüfen).
Einzelnachweise
- ↑ Linux on 4KB-sector disks: Practical advice (developer.ibm.com, via web.archive.org)The biggest write performance effects occurred with small file creation (extracting the kernel tarball). Effects on tarball extraction ranged from 1.04 (for ext4fs) to 25.53 (for ReiserFS), with a mean of 10.9.
- ↑ Disk Partition Alignment Best Practices for SQL Server (msdn.microsoft.com, May 2009) In Windows Vista as well as Windows Server 2008, partition alignment is usually performed by default. The default for disks larger than 4 GB is 1 MB; the setting is configurable and is found in the registry at the following location: HKLM\SYSTEM\CurrentControlSet\Services\VDS\Alignment
- ↑ LUN Types and Linux partition alignment (blogs.netapp.com)
- ↑ Disk performance may be slower than expected when you use multiple disks in Windows Server 2003, in Windows XP, and in Windows 2000 (Microsoft KB)
- ↑ http://www.thinkpad-forum.de/software/linux/88045-umzug-von-hdd-zu-ssd-mit-minimalen-arbeitsaufwand/#post807878
- ↑ http://www.nuclex.org/blog/personal/80-aligning-an-ssd-on-linux
- ↑ http://www.ocztechnologyforum.com/forum/showthread.php?54379-Linux-Tips-tweaks-and-alignment&p=373224#post373224
- ↑ https://ata.wiki.kernel.org/index.php/ATA_4_KiB_sector_issues#L-2._Userspace_tools_status_.28thanks_to_Karel_Zak.5B13.5D.29
- ↑ http://karelzak.blogspot.com/2010/05/4096-byte-sector-hard-drives.html
Weitere Informationen
- Aligning IO on a hard disk RAID – the Theory (MySQL Performance Blog), 09.06.2011
- Chapter 20. Storage I/O Alignment and Size (RHEL6 Storage Administration Guide)
- ATA 4 KiB sector issues (ata.wiki.kernel.org)
- http://www.infoq.com/news/2010/03/4k-sectors
- http://blogs.netapp.com/storage_nuts_n_bolts/2010/03/lun-types-and-linux-partition-alignment.html
- Partitioning Advice by Rod Smith
- Western Digital’s Advanced Format: The 4K Sector Transition Begins (AnandTech)
- Linux Hardware RAID Howto
- http://superuser.com/questions/164439/what-is-the-the-dos-compatibility-flag-in-fdisk
- http://www.chip.de/artikel/SSD-So-haelt-die-Hightech-Festplatte-8x-laenger-5_37897062.html
- http://en.wikipedia.org/wiki/Logical_Disk_Manager#Compatibility_problems
- Recommendations for Aligning VMFS Partitions (VMware)
- Best Practices for File System Alignment in Virtual Environments (NetApp)
Autor: Werner Fischer Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.
|