SSD-Einsatz mit Linux

Dies ist ein kleiner Merkzettel, was man beachten sollte, v.a. die Dinge beinhalten, die man nachträglich schlecht ändern kann.

SSD-Firmware

Nicht Linux-spezifisch, aber trotzdem erwähnenswert: als allererstes checken, ob auf der SSD die aktuelle Release-Firmware drauf ist, bevor man Daten draufspielt - erspart einem das Backup.

Das Align-Problem

Flash-Disks verwalten ihre Information in großen Blöcken (typisch: 128 kByte bis 512 kByte). Beim Löschen kann immer nur ein ganzer Block gelöscht werden. Da Schreiben bei Flash-Disks ein vorheriges Löschen voraussetzt, wird also immer in diesen ganzen Blöcken geschrieben.

Dateisystem verwenden ebenfalls Blöcke, dort oft Cluster genannt. Überlagert ein Cluster zwei Flash-Blöcke und wird dieser Cluster geschrieben, so müssen diese beide Flash-Blöcke geschrieben werden. Die Schreibrate halbiert sich dadurch, und der Verschleiß, nämlich die Anzahl der geschriebenen Blöcke, verdoppelt sich.

Man muss also dafür sorgen, dass die Clustergrenzen mit den Flash-Blockgrenzen übereinstimmen. Dies muss beim Partitionieren geschehen, da die Clustergrenzen vom Start der Partition abhängen.

fdisk hat in ältereren Versionen den Cylinder-Head-Sector-Modus (C/H/S-Modus) benutzt: Mit heutigen Platten ist immer folgende Geometrie gegeben: Head=255 und Sectors=63. Damit ergeben sich pro Zylinder 255*63=16065 Sektoren. Damit also ein Block auf einen Zylinderanfang fällt, ist schwierig: Ein 128-kByte-Block enthält 128*2=256 Sektoren, das k.g.V von 16065 und 256 ist 16065*256, also fallen bei den Zylindern 1, 256, 512... die Grenzen zusammen. Partitionen müssen dann ein Vielfaches von 256*16065*512 Byte = 2056320 kByte (etwa 2Gbyte) haben.

Alte fdisk-Versionen legen die erste Partition auf den Anfang des 2.ten Kopfes im 1.ten Zylinder (Sektor 63), der dann sicher nicht mit einer Flash-Blockgrenze zusammenfällt.

fdisk

Neuere fdisk-Versionen alignen automatisch, man sieht es daran, dass im Sektor-Modus ("u" und "c") der Partitionsstart der ersten Partition bei 2048 (== 1MB) angezeigt wird.

Man kann aber auch mit älteren fdisks im C/H/S-Modus alignen:

Partitions-Alignment auf 128KB:

fdisk -H 224 -S 56 /dev/sdb  # Cylinder = 49 * 128KB

Hinweis: Wenn man die erste Partition wie üblich auf Cyl 1, Head 1, Sect 1 anfängt (also bei Sektor 56), ist sie nur auf 4KB aligned, aber fuer /boot wenig relevant, da wenig Schreibzugriffe. Alternativ kann man, wenn man kein /boot möchte auch einfach einen Cylinder verschenken und auf Cyl 2 Head 0 Sect 1 (also bei Sektor 12544) anfangen, dann ist man 128KB-aligned und auf Cylinder-Grenze schon bei der ersten Partition.

Warnung: Diese Geometrie (224 Heads, 56 Sektoren/Head) beschränkt die Gesamtkapazität auf 65535*224*56*512 Byte = 391 GByte.

Einzelne SSD

TODO

Alternativ: RAID1 aus SSD und HDD

Idee:

Beispiel-Layout:

TODO: mehr Details zu --write-mostly --write-behind bitmap ...

md Alignment: metadata 0.90 oder 1.0 liegen am ENDE, daher kein Einfluss. 1.1/1.2 liegt am Anfang - die eigentlichen Daten beginnen aber erst ab Sektor 2048, sind also auf 1MB aligned.

sda ist ssd, sdb ist hdd
# boot, keine optimierung:
mdadm --create /dev/md1 -l1 -n2 /dev/sda1 /dev/sdb1
# root / home, schreiboptimiert:
mdadm --create /dev/md2 -l1 -n2 --bitmap=internal /dev/sda2 --write-behind --write-mostly /dev/sdb2
mdadm --create /dev/md3 -l1 -n2 --bitmap=internal /dev/sda3 --write-behind --write-mostly /dev/sdb3

mkfs

ext3

Fuer /boot nehmen wir vorsichtshalber mal ext3, ansonsten ext4:

mke2fs -j /dev/md1

ext4

Fuer root und home ext4, da besserer Support fuer SSD/Alignment:

# 32 blocks * 4KB/block = 128KB
mke2fs -t ext4 -E stripe-width=32,resize=500G /dev/md2
mke2fs -t ext4 -E stripe-width=32,resize=2000G /dev/md3

mount

TODO: noatime,nodiratime oder relatime, /tmp auf tmpfs,

Tuning

TODO: io scheduler

Anmerkung

Ich war auf der Suche nach einer Seite, die Hinweise gibt, was zu beachten ist, wenn in einem Linux system eine SSD Platte zum Einsatz kommt. Aber diese Seite ist leider nur verständlich für Menschen die fdisk und Partitionen im Blut haben. Für mich als ambitionierter Laie und Computerfreund, sagen solche Sätze wenig:

Neuere fdisk-Versionen alignen automatisch, man sieht es daran, dass im Sektor-Modus ("u" und "c") der Partitionsstart der ersten Partition bei 2048 (== 1MB) angezeigt wird.

Was ist aligen? Was ist ein Sektor Modus?

Auch die weitere Erklärung zum fdisk Befehl ist sehr kryptisch:

Hinweis: Wenn man die erste Partition wie üblich auf Cyl 1, Head 1, Sect 1 anfängt (also bei Sektor 56), ist sie nur auf 4KB aligned, aber fuer /boot wenig relevant, da wenig Schreibzugriffe. Alternativ kann man, wenn man kein /boot möchte auch einfach einen Cylinder verschenken und auf Cyl 2 Head 0 Sect 1 (also bei Sektor 12544) anfangen, dann ist man 128KB-aligned und auf Cylinder-Grenze schon bei der ersten Partition.

Vielleicht kann bei Gelgenheit jemand etwas hilfreichere Hinweise hier einbauen? Danke.

SSD (zuletzt geändert am 2013-06-23 10:52:56 durch JonesHamatoma)