WD "Advanced Format" HD mit LINUX

Diese Informationen sind im Moment anwendbar auf die Festplatten WD10EARS, WD15EARS und WD20EARS von Western Digital.

Die neueste Generation Festplatten von WD wechselt von 512 Byte zu 4 KByte grossen Datenblöcken, WD kennzeichnet dies mit “Advanced Format Drive”. Diese ersten Festplatten simulieren, um potenziellen kompatibilitäts Problemen aus dem Weg zu gehen, eine Festplatte mit 512 Byte Blöcken, was auch problematisch ist! Für mehr Informationen über die technischen Hintergründe könnt ihr diesen guten Artikel lesen: Western Digital’s Advanced Format: The 4K Sector Transition Begins

Als Linux benutzer musste ich leider feststellen, das WD die Festplatte ziemlich sicher mit Linux getestet hat aber es nicht als nötig erachtet, die nötigen Informationen bereit zu stellen.

Der Kleber auf der Verpackung suggeriert einen reibungslosen Betrieb mit Linux. Dies ist aber ein Trugschluss:
All other OS configurations - drive is ready for use as is

Auswirkungen ohne Anpassungen

Wenn man die Festplatte einbaut und ohne Anpassungen einsetzt (also überall die voreingestellten Werte benutzt), wird nicht viel Freude aufkommen. In diversen Versuchen konnte ich jeweils auf neu erstellten Partitionen und Filesystemen zeigen, dass die Schreibleisung nach kurzer Zeit (ca. 10 bis 15 min konstantes beschreiben) die Schreibgeschwindigkeit unter 1 MByte/s absinkt!

Was ist zu beachten?

Wie es WD für Windows XP dokumentiert, ist es nötig, die Partitionsgrenzen an den Grenzen der jetzt 4 KByte grossen Blöcke auszurichten. Für XP Benutzer stellt WD ein Tool zur Verfügung das dies sicherstellt.

Für den Einsatz mit Linux muss keine spezielle Software eingesetzt werden aber es ist zwingend nötig die Festplatte korrekt zu Partitionieren. Wenn ihr fdisk oder parted benutzt mit den voreingestellten Einstellungen wird die Festplatte falsch Partitioniert! Aktuelle Versionen von parted wurden angepasst, kontrolliert trotzdem ob die Partitionen korrekt ausgerichtet sind.

Um zu prüfen wie und wo eure Partitionen erstellt wurden könnt ihr fdisk verwenden:

fdisk -l -u

So sieht ein schlechtes Beispiel aus:

     
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1              63  2930272064  1465136001   83  Linux 

Es ist zwingend notwendig, dass der Start Wert durch 8 teilbar ist und entsprechend der End Wert plus eins durch 8 teilbar ist. Was in diesem Beispiel (was dem default Verhalten von fdisk, älteren parted und Windows XP entpricht) nicht der Fall ist!

  • Start durch 8 teilbar
  • (End+1) durch 8 teilbar

Was zu tun ist

Je nach dem was ihr üblicherweise verwendet hier die Anleitungen was ihr tun müsst:

fdisk

Die Details dahinter sind nicht ganz trivial aber das Resultat zählt. (Dank an Ted: Aligning filesystems to an SSD’s erase block size)

fdisk mit diesen Parametern erstellt alle Partitionen ausgerichtet an 4 Kbyte Blockgrenzen:

fdisk -H 224 -S 56 /dev/sdb

Partitionen ansonsten ganz normal erstellen und zur Sicherheit am Schluss nachprüfen.

parted

In gparted (parted Version mit GUI) habe ich die nötigen Einstellungen leider nicht gefunden, darum müsst ihr parted in der Konsole benutzen.

Wie beschrieben müsst Ihr sicherstellen, dass eure Partitionen an 4 KByte Blockgrenzen beginnen und enden. Relativ einfach geht das, wenn Ihr parted so umstellt, das alle Grössen in KByte angezeigt werden. (Ganz exakt in Kibibyte) Alle Grössen die Ihr eingebt müssen dann durch 8 teilbar sein.

Beispiel für eine Festplatte mit einer Partition (Beachted den Befehl unit kib)

parted /dev/sdb
(parted) unit kib
(parted) print
Model: ATA WDC WD15EARS-00Z (scsi)
Disk /dev/sdc: 1465138584kiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start    End            Size           Type     File system  Flags
 1      31.5kiB  1465136032kiB  1465136001kiB  primary  xfs


(parted) mkpart
Partition type?  primary/extended? p
File system type?  [ext2]? xfs
Start? 32
End? 1465138584
(parted) print
Model: ATA WDC WD15EARS-00Z (scsi)
Disk /dev/sdc: 1465138584kiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start    End            Size           Type     File system  Flags
 1      32.0kiB  1465138584kiB  1465138552kiB  primary

Discussion

Guido, 2010/06/15 16:48

Soweit mir bekannt ergibt sich die neue Blockgröße von 4k aus 8 x 512b 'herkömmlicher' Sektoren. Der Start-Sektor sollte also durch 8 ohne Rest teilbar sein. Der letzte Sektor einer Partition muss vor der nächsten 8er-Gruppe enden, d.h. der Ende-Sektor plus 1 sollte durch 8 restlos teilbar sein. Die Partitionsgröße ist damit automatisch durch 8 teilbar.

Christoph Zimmermann, 2011/03/22 09:22

Artikel korrigiert. Danke für den Hinweis.

Alex, 2010/07/01 22:20, 2011/03/22 09:20

Hallo,

Erst mal vielen Dank fuer die Info. Ich habe gerade versucht das aktuelle Ubuntu 10.04 zu installieren und bin an dem fehlenden Support fuer Sektor-groessen > 512 bytes gescheitert.

Nach einigen Stunden Suchen und probieren, bin ich auf folgende EINFACHE LOESUNG gestossen: die aktuelle SystemRescueCd (http://www.sysresccd.org/) enthaelt GParted to 0.6 welches Sektor-groessen > 512 bytes unterstuetzt! (http://www.sysresccd.org/Changes-x86: “Updated GParted to 0.6.0 (support for devices with sectors > 512 bytes)”)

Die neueren WD-Festplatten koennen meiner Erfahrung nach damit problemlos partitioniert werde. Jedoch ist bei der ersten Generation (z.B. WD10EARS) Vorsicht geboten, da die Festplatte eventuell (abhaengig von Firmware) die erweiterte Blockgroesse von 4096 nicht deklariert. Dies kann mit fdisk getestet werden. Meine Festplatte deklariert eine Blockgroesse von 4096:

#> fdisk -l -u

Sector size (logical/physical): 512 bytes / 4096 bytes

Wird keine 'Sector size' angegeben order nur 512 bytes kommt man wahrscheinlich nicht um das Partitionieren bei Hand (wie oben beschrieben) rundrum.

B., 2010/08/07 08:30

danke für die aufschlussreiche Darstellung.

Jenny Meister, 2010/08/20 21:43

Hallo,

ich hab ne WD-EARS (2TB) mit “fdisk -H 224 -S 56 /dev/sdx” partitioniert. fdisk -l -u meldet dann:

 Gerät  boot.     Anfang        Ende     Blöcke   Id  System

/dev/sda1 56 3907016959 1953508452 83 Linux

man beachte, dass der Endsektor *nicht* durch vier teilbar ist. Trotzdem hab ich volle Performance, “hdparm -t” meldet 101 MB/s. Es scheint also nicht notwendig zu sein, dass der Endsektor ebenfalls durch vier teilbar ist. Beim Anfangssektor, klar, muss es aber so sein.

Christoph Zimmermann, 2011/03/22 09:19

Entsprechende Korrekturen für diesen Sachverhalt habe ich im Artikel korrigiert.

Frank, 2010/12/19 12:31

Hallo,

meine WD-EARS (2TB) ist demzufolge also ungeschickt partitioniert:

fdisk -l -u /dev/sda1 * 63 27326564 13663251 83 Linux /dev/sda2 27326565 27342629 8032+ 83 Linux /dev/sda3 27342630 31535594 2096482+ 82 Linux Swap / Solaris /dev/sda4 31535595 3907024064 1937744235 83 Linux

Trotzdem bekomme ich: /dev/sda1: Timing buffered disk reads: 268 MB in 3.00 seconds = 89.28 MB/sec /dev/sda2: Timing buffered disk reads: 6 MB in 0.08 seconds = 75.77 MB/sec /dev/sda3: Timing buffered disk reads: 324 MB in 3.02 seconds = 107.45 MB/sec /dev/sda4: Timing buffered disk reads: 340 MB in 3.01 seconds = 112.81 MB/sec

Das sieht doch aber gar nicht so schlecht aus, oder? Auch im täglichen Betrieb kann ich keine Performance-Probleme feststellen …

Gruß, Frank

Gernot, 2011/01/06 09:20

Zunächst einmal vielen Dank für die hilfreiche und praxisnahe Zusammenfassung! Folgendes möchte ich beitragen:

1. “hdparm -t” scheint mir nach einem Blick in die Manpage kein geeigneter Performancetest im Rahmen der 4K-Sektor-Problematik zu sein. Zur Option ”-t” steht dort:

”[…] This measurement is an indication of how fast the drive can sustain sequential data reads under Linux, without any filesystem overhead.[…]”

Es geht demnach um das rein sequentielle Lesen; das Filesystem (und damit das Alignment) wird hierbei nicht berücksichtigt.

2. Dem Tipp mit der System Rescue CD möchte ich beistimmen. Die SysRescCD 1.6.4 enthält die Gparted-Version 0.7.0, welche es erlaubt, beim Verschieben den Startsektor einer Partition an MiBs auszurichten. Ein Formatieren und Neupartitionieren ist nicht zwingend erforderlich.

3. Die folgenden zwei Links finde ich ebenfalls lesenswert:

mensch, 2011/02/10 13:42

per scroogle hierhergeraten + da Kommentare erlaubt scheinen in Kürze: Du schreibst oben bei fdisk, daß die Werte für start/stop durch vier teilbar sein sollen… auch wenn etliche andere im Netz ähnliches behaupten, stimmt das schlichtweg nicht. 1. da start+stop sich auf 512byte-Sektoren beziehen, muß es für eine 4kB-Grenze durch 8 teilbar sein 2. nicht stop, sondern (stop+1) muß durch 8 teilbar sein, denn z.B. bei einer acht 512byte-Blöcke (ein 4kB-Block) umfassenden Partition, die bei 8 startet, hat der letzte Block die Nummer 15, nicht 16. das hat bei den primären-Partitionen auch gleich zur Folge, daß die nächste automatisch durch 8 teilbar ist.

Christoph Zimmermann, 2011/02/18 01:14

Hallo mensch

Danke für deine Kommentare.

Deine Korrekturen sind Richtig und auch wichtig für dieses Thema.

Die Teilbarkeit durch 8 habe ich im Text korrigiert. Wenn ich Zeit habe korrigiere ich noch das mit dem Endwert.

Hauke Laging, 2013/01/26 10:43

Es liegt in der Natur der Sache, dass der Endsektor einer Partition völlig egal ist. Geschwindigkeitseinbußen sind dadurch nicht möglich, es kann aber sein, dass (minimal) Platz verschwendet wird (innerhalb der Partition wegen der Dateisystemblockgröße und auch durch den Abstand zur folgenden Partition). Durch den Offset des Partitionsbeginns verschiebt sich der ganze Inhalt der Partition und ist deshalb günstig oder eben ungünstig positioniert. Wo die Partition aufhört, interessiert den Inhalt der Partition nicht; das hat keinen Einfluss darauf, wie auf den Inhalt zugegriffen wird.

Andreas, 2011/07/27 09:02

Danke für deinen Artikel - ich habe mich damit auch gerade ausseinandersezuen müssen. Allerdings kommt bei mir noch die RAID Stripe Size hinzu.

Parted schlägt von sich aus (aktuelle Versionen) ein Alihnment mit 1MiB vor. Das ist gerade für RAID's optimal, da sich die Stripe Size immer als Bruchteil von 1MiB darstellen lässt. Meine Stripe Size ist 256KiB - wenn ich bei 1MiB anfange habe ich zwar 3 Strips leer - kann aber nach belieben die Stripe Size ändern, ohne neu partitionieren zu müssen.

paul, 2011/08/23 09:11

Also bei mir erzeugt der Befehl fdisk -H 224 -S 56 /dev/sdb nicht die korrekte Sektorgröße. Die logische Sektorengröße wird 512b, die physikalische ist 4096b. Ich habe eine WD20EARX mit 2TB und physikalischer Sektorgröße 4kb. (nebenbei: mich würde schon interessieren, wie man auf die Werte für fdisk -H und -S kommt)

Enter your comment. Wiki syntax is allowed:
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International