Tips zu Solid State Diskscongenio

* Einführung

Solid State Disks (SSD) werden aktuell immer beliebter. Empfehlenswert sind aktuell die Produkte mit Sandforce-, Samsung- und Intel-Controllern.

Es gibt jedoch ein paar Kleinigkeiten zu beachten:

Intern basieren diese Platten auf Flash-Speichern des MLC-Typs, da SLC-Speicherchips zu teuer sind. Diese Speicher lassen sich nur ca. 10.000 Mal beschreiben.

Um eine möglichst gleichmäßige Abnutzung zu erzielen und einem frühen Ausfall zu begegnen, wird ein sogenanntes Wear-Leveling genutzt. Die Details der dabei verwendeten Algorithmen sind Firmengeheimnisse. Bekannt ist allerdings, dass die verwendeten Speicherchips eine Seitengröße von 4 KByte haben.

Dies ist insofern ein Problem, als die Sektorengröße, welche die kleinste addressierbare Einheit bilden, nur 512 Byte beträgt. Aufgrund von längst unzeitgemäßen Festlegungen werden außerdem Festplatten immer noch logisch in Zylinder, Köpfe und Sektoren aufgeteilt. Dabei werden meist 63 Sektoren verwendet, was zur Folge hat, dass die erste Partition auf einer Festplatte normalerweise bei Sektor 63 beginnt. Bei NTFS und FAT ist die kleinste addressierbare Einheit meist auch 4 KByte groß, so dass die Blöcke einer solchen Partition physisch auf zwei Seiten im Flashspeicher der SSD verteilt sind. Dadurch verdoppelt sich die Anzahl der Schreibzugriffe auf die SSD. Da zudem in den SSDs meist mehrere Pages logisch zusammengefasst werden, wäre ein Alignment auf 128-KByte-Adressen (Vielfaches von 4 KByte) optimal.


* Windows

Windows 7 wurde daher so modifiziert, dass es den ersten Sektor einer Partition auf ein anderes Alignment anpasst, z.B. wird der erste Sektor dabei auf die Nummer 2048 statt 63 gelegt. Bei Windows 7 und Vista lässt sich mit dem Parameter "align=2048" ein spezifisches Aligment erzwingen, wenn eine Partition neu angelegt wird.

Bei bestehenden NTFS-Partitionen ergeben sich aber diverse Probleme:
  • Es gibt nur wenige Partitionierungswerkzeuge, mit dem man sektorgenau die Position einer Partition festlegen kann.
  • Die meisten Werkzeuge, mit denen man Partitionen verschieben und kopieren kann, beherrschen das noch weniger. Es ist dort auch praktisch unmöglich, Partitionen von Platte zu Platte zu kopieren oder gar dabei die Größe zu verändern. Die Ausnahme bildet das Paragon "Partition Alignment Tool", mit dem man nachträglich Partitionen SSD-geeignet verschieben kann.
  • Sicherungsprogramme wie TrueImage können ebenfalls nicht sektorgenau positionieren, außerdem können sie nicht in eine bestehende Partition rücksichern (zumindest nicht, wenn man davon booten will).
Will man also z.B. eine bestehende, bootfähige NTFS-Partition von einer alten Platte auf eine SSD kopieren, kann man entweder das Tool "Migrate OS to SSD" von Paragon nutzen oder wie folgt vorgehen:
  • Verkleinerung der alten Partition auf die Größe, die auf der Ziel-SSD zur Verfügung steht (mit etwas Reserve) mit einem Tool wie Disk Director, Paragon Partition Manager o.ä.
  • Start z.B. der -> System Rescue CD. In der Root-Shell mit fdisk eine Partition anlegen, die korrekt ausgerichtet ist (z.B. Startsektor = 2048). Dazu kann man mit dem Kommando "u" die Einheiten auf Sektoren umschalten. Die Zielpartition sollte genausoviel Sektoren wie die Quellpartition erhalten. Der Typ ist "7 (NTFS)", die Partition muss mit "a" aktiv gemacht werden.
  • Kopieren der Quell-Partition auf die neu angelegte Partition der SSD mittels "dd if=/dev/sdXY of=/dev/sdAB bs=409600".
  • Ggf. Platte bootfähig machen mit den üblichen Windows-Werkzeugen (-> z.B. mit der Vista Recovery Disc) (Stichworte "BOOTREC /FIXMBR", "BOOTREC /FIXBOOT", "BOOTSECT /NB60 ALL".
  • Leider funktionert das Booten aufgrund der 1:1-Kopie mittels "dd" trotzdem noch nicht: Man muss mit einem Hexeditor ("hexedit") den ersten Sektor der Boot-Partition auf der SSD korrigieren, weil im -> BPB der Eintrag "HiddenSectors" auf den ersten Sektor verweisen muss - dort steht üblicherweise noch 63. Dieser Eintrag muss auf 2048 umgeändert werden.

* Linux

Unter Linux gab es anfangs ebenfalls Schwierigkeiten, die Theodore Ts'o -> hier beschreibt.

Besonders ärgerlich sind hier Dinge wie Swap (eine Swap-Partition hat immer einen 4096 Byte langen Header). Man kann dabei nicht angeben, wo die Payload beginnen soll. Da das Aligment vorzugsweise 128 KByte sein sollte, müsste man also eine Swap-Partition auf einer Adresse anlegen, die 128 KByte - 4 KByte beträgt, also z.B. auf Sektor 248 beginnt.

Neben den im Artikel genannten Alignments für LVM-PVs, VGs, LVs und dem eigentlichen Dateisystem (z.B. ext3) müssen eventuell auch noch LUKS-Header angepasst werden (mit "cryptsetup luksFormat --align-payload=256").

Inzwischen ist in praktisch allen Software-Komponenten das Alignment richtig implementiert, so dass die großen Linux-Distributionen dies in aktuellen Versionen korrekt beherrschen.


* Stand des TRIM-Supports

Optimal ist neben dem richtigen Alignment unter -> Linux ab 2.6.28 mit -> ext4 natürlich die direkte Unterstützung des -> TRIM-Kommandos. Allerdings ist das "Online Discard" aus guten Gründen bei den meisten Distributionen derzeit noch nicht eingeschaltet, weil es bei Kernels vor 3.1 eher Probleme bereitet als löst (siehe -> hier und -> hier). Man sollte derzeit anstelle der "discard" Mount-Option unter Linux eher per Crontab einmal pro Woche einen fstrim-Befehl auf die Filesysteme absetzen.

Ab Windows 7 wird TRIM automatisch unterstützt, nicht jedoch unter Windows Vista oder XP.