Linux – SSD – TRIM aktivieren – dm-crypt, lvm, ext4, grub

Letztens habe ich meinem Media-PC eine 64 GB SSD spendiert. Bekanntlich ist bei SSDs eine gute Garbage Collection und/oder TRIM vonnöten – sonst kann es zu Performanceverlusten und zu einer verkürzten Lebensdauer kommen!

Hintergrund: Das Dateisystem streicht „gelöschte“ Dateien nur aus dem Inhaltsverzeichnis, die eigentliche Datei aber bleibt weiter gespeichert. Nach einiger Zeit der Nutzung ist damit jeder Bereich des Laufwerks mit entweder aktuellen, oder noch nicht tatsächlich gelöschten Inhalten belegt. Bei Festplatten war das kein Problem, da sie ihre Magnetisierungszustände direkt ineinander übergehen lassen können. Flashspeicher hingegen müssen die noch gefüllten Flashzellen erst leeren, um sie im zweiten Durchgang mit der neuen Datei zu beschreiben. Diese doppelte Arbeit ist anhand einer dann bis zu doppelt so langen Schreibzeit nachvollziehbar.

Quelle: Wikipedia.de – Solid-State-Drive – Performanceverluste

Die Crucial m4 hat zwar eine gute Garbage Collection, aber ich habe bereits unter Mac OS X mit aktiviertem TRIM bessere Benchmarkergebnisse erzielen können als ohne. Daher wollte ich auf meinem Arch Linux HTPC auch Trim aktivieren.Crucial SSD Logo - Linux - SSD - TRIM aktivieren - dm-crypt, lvm, ext4, grub

Grundsätzlich unterstützt Linux zwei Arten des Discards [TRIM] (discard = verwerfen):

  • Batched Discard – Der Befehl fstrim /mnt/point/ weist das Dateisystem an, ungenutzte Bereiche zu suchen und diese dem Controller der SSD zu melden. Dieser Befehl muss sporadisch und manuell vom Anwender ausgeführt werden.
  • Online Discard – Der Kernel informiert das Laufwerk sofort, wenn Speicherbereiche durch Löschen von Dateien frei werden. Diese Funktion ist von Haus aus deaktiviert und muss vom Anwender in /etc/fstab mit der Option -o discard eingeschaltet werden.

Quelle: wiki.ubuntuusers.de – SSD

Allerdings wird Online Discard nicht gerade empfohlen, aufgrund der zahlreichen TRIM-Befehle kann auch hier die Leistung bzw. Haltbarkeit der SSD einbrechen! Daher sollte man Batched Discard verwenden, diesen kann man automatisiert per Crontab ausführen.

Damit die TRIM-Befehle korrekt bei der SSD ankommen, braucht man bei einem ext4 formatiertem, DM-Crypt verschlüsseltem Logical-Volume mindestens Kernel-Version 3.1 und DM-Crypt (cryptsetup) 1.4. Das ist mit dem aktuellem (23. März 2012) Arch Linux kein Problem, dort rennt momentan die Kernel-Version 3.2.12 und DM-Crypt 1.4.1.

Nun aber zum Wesentlichen: der Batched Discard wird über den Befehl …

fstrim -v [EINHAENGEPUNKT]

… gestartet. Beim ersten Ausführen, in meinem Fall bei …

fstrim -v /

…, habe ich die Fehlermeldung …

fstrim: /: FITRIM ioctl failed: Die Operation wird nicht unterstützt

… erhalten. Der Grund dafür ist, dass man in der menu.lst von GRUB (/boot/grub/menu.lst) noch zwei zusätzliche Parameter setzen muss! Diese zwei Parameter sind …

allow-discards

… und …

root_trim=yes

…, diese benötigt man nur in Verbindung mit einem LUKS-Device (dm-crypt/cryptsetup verschlüsselte Partition), damit die TRIM-Befehle an die SSD durch gereicht werden! In Kombination schaut das Ganze dann so aus (im Code-Fenster muss nach rechts gescrollt werden).

vi /boot/grub/menu.lst
# (0) Arch Linux
 title Arch Linux
 root (hd0,0)
 kernel /vmlinuz-linux cryptdevice=/dev/sda2:main:allow-discards root=/dev/mapper/main-root ro lang=de locale=de_DE.UTF-8 root_trim=yes
 initrd /initramfs-linux.img

Jetzt funktioniert dann auch der batched Discard.

fstrim -v /
1539371465 Bytes was trimmed
fstrim -v /boot
57865244 Bytes was trimmed

Um diesen batched Discard nun jeden Tag auszuführen, habe ich ein einfaches cron.daily Skript erstellt (/etc/cron.daily/trim).

vi /etc/cron.daily/trim
/sbin/fstrim /boot
/sbin/fstrim /
chmod 744 /etc/cron.daily/trim

Bei Arch Linux ist der standardmäßige Zeitplaner Anacron. Der Vorteil gegenüber Cron ist, dass dieser Job 100%ig täglich ausgeführt wird, auch wenn das System nur eine Stunde am Tag eingeschaltet ist. Anacron prüft selbstständig, ob das Skript schon einmal ausgeführt wurde, man legt daher keine Ausführzeit fest.

Solltet ihr, genauso wie ich, auch schon einmal online Discard konfiguriert haben, so solltet ihr die Mountoption discard (Online Discard) aus der/den jeweiligen fstab (/etc/fstab) Zeile(n) entfernen.

UUID=87cb8a81-ea18-4604-97eb-74cb1d32d731 / ext4 defaults,discard,noatime,nodiratime 0 1
UUID=de4ca7b0-7b6f-4636-9112-c3f5708dc76e /boot ext4 defaults,discard,noatime,nodiratime 0 1
UUID=87cb8a81-ea18-4604-97eb-74cb1d32d731 / ext4 defaults,noatime,nodiratime 0 1
UUID=de4ca7b0-7b6f-4636-9112-c3f5708dc76e /boot ext4 defaults,noatime,nodiratime 0 1

Die UUIDs der Partitionen solltet ihr natürlich an euere UUIDs anpassen.

blkid /dev/mapper/main-root
/dev/mapper/main-root: UUID="87cb8a81-ea18-4604-97eb-74cb1d32d731" TYPE="ext4"
blkid /dev/sda1
/dev/sda1: UUID="de4ca7b0-7b6f-4636-9112-c3f5708dc76e" TYPE="ext4"

Quellen:
wiki.ubuntuusers.de – SSD TRIM
geekparadise.de – Trim testen unter Linux
spinics.net – Testing TRIM with hdparm on dm-crypt
forums.gentoo.org – DMCRYPT + SSD + TRIM: Wie Kernel Parameter? [solved]

Veröffentlicht von

_nico

Mac-User aus Leidenschaft, Blogger seit Oktober 2009, 88er Baujahr, technikaffin. Ich fühle mich aber nicht nur auf Apple'schen Betriebssystemen zu Hause, alles was eine Shell hat, interessiert mich besonders! Ihr findet mich auch auf Twitter und Google+.

9 Gedanken zu „Linux – SSD – TRIM aktivieren – dm-crypt, lvm, ext4, grub“

    1. Ist richtig, aber dann wird bei jedem löschen die TRIM-Befehle gestartet. Dadurch belastest du aber jedes Mal die SSD, was zu Problemen mit der Haltbarkeit führen kann.

Schreibe einen Kommentar zu Dominik Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert