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.
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.
Einzelne SSD
TODO
Alternativ: RAID1 aus SSD und HDD
Idee:
- SSDs sind oft noch zu teuer, um 2 davon zu nem RAID zusammenzubauen. Daher SSD+HDD.
- Ne einzelne SSD kann durchaus auch kaputt gehen - zwar nicht mechanisch, aber Flash nutzt sich durch Schreibzugriffe ab (wobei die Controller heutzutage sog. Wear-Leveling betreiben, um den Flash möglichst gleichmäßig abzunutzen). Daher will man RAID1.
- Auf der HDD gibt es normalerweise deutlich mehr Platz, kann nicht gespiegelt für weniger wichtige Daten verwendet werden (z.B. Backups, Downloads, SWAP, ...).
- Die meisten READs aus der SSD bedienen, die HDD soll nur die WRITEs abkriegen (um ein aktueller Spiegel der SSD zu sein). Von der HDD soll nur dann gelesen werden, wenn es von der SSD nicht geht (Flash kaputt?). Dies erreicht man, indem man die HDD als --write-mostly deklariert.
- Wenn man auch die Schreibperformance tunen will, braucht man --write-behind. Dann werden die Daten auf die SSD geschrieben, dann wird fertiggemeldet und erst danach werden die Daten auf die HDD geschrieben.
Beispiel-Layout:
SSD |- /boot -||--- / ---||------ /home ------| HDD |- /boot -||--- / ---||------ /home ------||- SWAP -||--------- BACKUP / TRASH ---------|
- SWAP nur auf HDD - Schreibzugriff auf SSD vermeiden (man baut einfach genug RAM ein, dass es nicht so sehr swapped). Haken: wenn die HDD plötzlich verstirbt, stürzt der Rechner ab, wenn Speicherinhalte ausgelagert waren.
- BACKUP - da das eh redundante, wiederbringliche oder unwichtige Daten sind (z.B. Kopien von Daten auf anderen Rechnern, Historische Kopien von / oder /home, Downloads, ...), muss es nicht unbedingt RAID1 sein.
- /boot - wegen Alignment
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.
