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.