Mir ist es lange Zeit nicht gelungen, die TRIM-Funktion (“discard”) für meine LUKS-root-disk einzuschalten.
Ich habe die Ursache bei systemd gesucht, jetzt nun weiss ich, dass der Schlüssel bei mkinitrd liegt.
Eigentlich ist es ganz einfach…
Schritt 0: Sicherungskopie der aktuellen initrd anlegen
Schritt 1: Das script /lib/mkinitrd/scripts/boot-luks.sh editieren
Schritt 2: In der funktion luksopen() jeweils cryptsetup mit der Option “–allow-discards” aufrufen, d.h.
“cryptsetup --tries=1 …” durch “cryptsetup --allow-discards --tries=1 …” ersetzen (3 mal)
Schritt 3: neue initrd erstellen (man mkinitrd)
Schritt 4: In der fstab beim root-Dateisystem die option discard hinzufügen, bei mir sieht das dann so aus:
/dev/system-ssd1/root / ext4 discard,acl,user_xattr 1 1
Schritt 5: mit dieser neuen initrd booten, fertig.
Ich stand mit openSUSE Leap 42.1 vor dem gleichen Problem: TRIM ist für LUKS/dm-crypt nicht aktiviert, wie man im Terminal durch “dmsetup table /dev/mapper/NamedesLUKSLaufwerks” herausfinden kann, die Info “allow_discard” wird NICHT ausgegeben.
Dieser Post hier hat mir entscheidende Hinweise gegeben, ist jedoch nicht mehr ganz up-to-date (z.B. wird mittlerweile dracut verwendet), daher beschreibe ich gerne meine Vorgehensweise. Eine große Hilfe war mir übrigens auch der Eintrag bei Ubuntuusers: TRIM › SSD › Wiki › ubuntuusers.de
Schritt 0: Sicherungskopie der aktuellen initrd anlegen (/boot/initrd)
Schritt 1: Sicherungskopie der aktuellen crypttab anlegen (/etc/crypttab)
Schritt 2: crypttab editieren, als Mountoption für das LUKS-Laufwerk “luks, discard” statt “none” eintragen
Schritt 3: Neue initrd erstellen: Terminal als root öffnen, “dracut -f”
Schritt 4: Neustarten, jetzt ist TRIM für das LUKS-Laufwerk aktiviert. Dies kann überprüft werden im Terminal als root mit “dmsetup table /dev/mapper/NamedesLUKSLaufwerks”, das Ergebnis sollte dann in etwa so aussehen, mit der discard-Info am Ende: "0 975718448 crypt aes-xts-plain64 00000000 0 8:2 4096 1 allow_discards"
Schritt 5: Je nach Präferenz kann jetzt manuell getrimmt werden, ein Eintrag zum automatischen TRIM in die fstab erstellt werden (siehe Post oben) oder ein cronjob angelegt werden. Ich habe mich für letztes entschieden und habe unter cron.weekly ein Skript angelegt, das “fstrim -a -v” ausführt.