Vorwort:
Hier geht es um Aufmerksam bzgl. eines potentiellen Fehlers oder einer bedingten Verhaltensweise von LUKS in Verbindung mit SSDs und fehlendem TRIM. Es ist keine Anleitung und kein Tutorial, sondern nur meine begrenzte Diagnose und ein "Workaround", der bei mir funktioniert hat. Wer seine Daten nicht richtig gesichert hat, sollte das hier nicht unbedingt nachahmen.
TLDR:
In meinem mdadm Raid0 LuksEncrypted SSD Mount musste "discard" allowed werden, damit sie TRIM ausführen können. Ohne TRIM verstand das System nicht, welche Blöcke wirklich belegt sind und welche nicht, weil Luks sie weiterhin claimed, obwohl das Dateisystem noch freien Speicher anzeigt. Das führt dann trotz vermeintlich freiem Speicherplatz bei Schreibvorgängen zu einem Dateisystem-Fehler (bei mir EXT4) und dem error 5 im Log, weil die SSD den Write verweigert.
TRIM kann z.B. beim LuksOpen mit "--allow-discards" oder auch in der "/etc/crypttab" enabled werden. Recherchiert was zu euren Einbindungen am besten passt. Checkt zusätzlich ob fstrim as wiederkehrender Systemprozess automatisch regelmäßig durch läuft.
Auf einer 64GB SSD im selben System, die ich 50% 50% in zwei Partitionen geteilt, in Raid0 und Luks gepackt habe, ist es nicht zu reproduzieren (es ist eine andere SSD an einen anderen Controller... vielleicht ist es eine Inkompatibilität). Vielleicht hat es beim Raid0 damit zu tun, dass die Dateien 50:50 geschrieben werden auf verschiedene Laufwerke, was Datenblock Zuordnung schwierig macht? Vllt. ist der SSD Controller buggy und auf TRIM infos angewiesen? Ggf. stimmt das Zusammenspiel Hardware/Software hier nicht? Who knows.
Ich untersuche weiter.
TURNS OUT:
Es sind 2x Sandisk Ultra 3D mit 4TB. Wenn TRIM bei denen nicht sauber läuft durch die ganzen Abstraktionsschichten kommt man um einen Daten-Refresh nicht herum. Ich habe also alles geplättet, das mdadm neu angelegt, Luks neu angelegt, "allow discards" direkt als Flag in den Header gesetzt und die Daten vom Backup Raid1 wieder neu aufgespielt. Anschließend habe ich noch mal ein fstrim durch laufen lassen (die SSDs sind beim TRIM auch noch mal gut warm geworden, ist schnell und erfolgreich durch gelaufen) und ich habe bisher meine konstanten 1GB (also 2x SATA SSD Bandbreite) an konstanter Lese-/Schreibgeschwindigkeit zurück (wenn es jetzt nicht ein Haufen kleinst-Dateien sind). 👍
Der Langzeitgebrauch wird zeigen, ob das in eine halben oder ganzen Jahr noch mal nötig ist, oder ob die Controller-Firmware jetzt selbst regeln kann das Performance-Level zu halten.
Hey zusammen.
Ich betreibe schon super lange in meinem HomeNAS/Server hardware-unabhängige Raids auf mdadm Basis.
Die Grundlage dafür gab es schon seit meinem AM1 AMD Athlon 5350, ging über einen i3-4130T, einen Ryzen 3700X und ist jetzt bei einem Ryzen 5950X mit B550 Board angekommen. Ich teile euch mal meine heutige Erkenntnis mit, auf die man sicher auch selbst kommen kann, aber über die ich naiv nie nachgedacht habe.
Der aktuelle Stand ist:
Shit Happens
Jetzt ist mir bei einem Füllstand von ~5TB folgendes mit meinem produktiven Samba-Drive passiert:
Beim Kopieren des letzten rendered Videos kam es immer wieder zu Fehlern und Hängern im Dateisystem. Die SSDs waren in IO zu 100% ausgelastet während nur kbyte-weise Schreibprozesse in Monitor-Anwendungen zu sehen waren. Nachdem file transfers über das Netzwerk irgendwann abgebrochen sind wurde der LuksDrive Mountpoint in den "emergency_ro" (Emergency Read Only) Modus gesetzt, also Schreibschutz.
Die beiden SSDs haben ~180 Betriebsstunden und sind bzgl. SMART unauffällig (saubere Werte, quick und long Test problemlos bestanden).
Nachdem ich dann mit fsck (-y) das EXT4 Dateisystem checken und im zweiten Durchlauf reparieren konnte, war es nach Neueinhängung wieder beschreibbar gemounted. Nach dem ersten großen Schreibvorgang ist es allerdings direkt wieder im Read Only Modus gelandet.
Turns out
LuksEncrypted SSDs müssen "discard" allowen, damit sie TRIM ausführen können. Ohne TRIM versteht das System nicht, welche Blöcke wirklich belegt sind und welche nicht, weil Luks sie weiterhin claimed, während das Dateisystem aber den logischen freien Speicher anzeigt. Bei einem Schreibvorgang auf einem "vollen ungetrimmten" Laufwerk kommt es dann zu Fehlern. Bei HDDs (extra noch mal stupide getestet mit dem 2x 1TB Raid0) ist das irrelevant.
Was haben wir gelernt?
TRIM ist wichtig bei LuksEncrypted SSDs. Die Default-Konfiguration aller beteiligten Pakete unter Ubuntu Server sorgt dafür, dass TRIM nicht automatisch funktioniert. Da muss man sich schon selbst drum kümmern. Checkt zusätzlich ob fstrim as wiederkehrender Systemprozess automatisch regelmäßig durch läuft.
Vielleicht hilft es ein paar googlenden Leuten
der Beitrag ist 8 Minuten später schon im Google Suchindex gelandet, die sind echt flott.
Hier geht es um Aufmerksam bzgl. eines potentiellen Fehlers oder einer bedingten Verhaltensweise von LUKS in Verbindung mit SSDs und fehlendem TRIM. Es ist keine Anleitung und kein Tutorial, sondern nur meine begrenzte Diagnose und ein "Workaround", der bei mir funktioniert hat. Wer seine Daten nicht richtig gesichert hat, sollte das hier nicht unbedingt nachahmen.
TLDR:
In meinem mdadm Raid0 LuksEncrypted SSD Mount musste "discard" allowed werden, damit sie TRIM ausführen können. Ohne TRIM verstand das System nicht, welche Blöcke wirklich belegt sind und welche nicht, weil Luks sie weiterhin claimed, obwohl das Dateisystem noch freien Speicher anzeigt. Das führt dann trotz vermeintlich freiem Speicherplatz bei Schreibvorgängen zu einem Dateisystem-Fehler (bei mir EXT4) und dem error 5 im Log, weil die SSD den Write verweigert.
TRIM kann z.B. beim LuksOpen mit "--allow-discards" oder auch in der "/etc/crypttab" enabled werden. Recherchiert was zu euren Einbindungen am besten passt. Checkt zusätzlich ob fstrim as wiederkehrender Systemprozess automatisch regelmäßig durch läuft.
Auf einer 64GB SSD im selben System, die ich 50% 50% in zwei Partitionen geteilt, in Raid0 und Luks gepackt habe, ist es nicht zu reproduzieren (es ist eine andere SSD an einen anderen Controller... vielleicht ist es eine Inkompatibilität). Vielleicht hat es beim Raid0 damit zu tun, dass die Dateien 50:50 geschrieben werden auf verschiedene Laufwerke, was Datenblock Zuordnung schwierig macht? Vllt. ist der SSD Controller buggy und auf TRIM infos angewiesen? Ggf. stimmt das Zusammenspiel Hardware/Software hier nicht? Who knows.
Ich untersuche weiter.
TURNS OUT:
Es sind 2x Sandisk Ultra 3D mit 4TB. Wenn TRIM bei denen nicht sauber läuft durch die ganzen Abstraktionsschichten kommt man um einen Daten-Refresh nicht herum. Ich habe also alles geplättet, das mdadm neu angelegt, Luks neu angelegt, "allow discards" direkt als Flag in den Header gesetzt und die Daten vom Backup Raid1 wieder neu aufgespielt. Anschließend habe ich noch mal ein fstrim durch laufen lassen (die SSDs sind beim TRIM auch noch mal gut warm geworden, ist schnell und erfolgreich durch gelaufen) und ich habe bisher meine konstanten 1GB (also 2x SATA SSD Bandbreite) an konstanter Lese-/Schreibgeschwindigkeit zurück (wenn es jetzt nicht ein Haufen kleinst-Dateien sind). 👍
Der Langzeitgebrauch wird zeigen, ob das in eine halben oder ganzen Jahr noch mal nötig ist, oder ob die Controller-Firmware jetzt selbst regeln kann das Performance-Level zu halten.
Hey zusammen.
Ich betreibe schon super lange in meinem HomeNAS/Server hardware-unabhängige Raids auf mdadm Basis.
Die Grundlage dafür gab es schon seit meinem AM1 AMD Athlon 5350, ging über einen i3-4130T, einen Ryzen 3700X und ist jetzt bei einem Ryzen 5950X mit B550 Board angekommen. Ich teile euch mal meine heutige Erkenntnis mit, auf die man sicher auch selbst kommen kann, aber über die ich naiv nie nachgedacht habe.
Der aktuelle Stand ist:
- eine primäre NVMe SSD mit 240GB fürs OS
- 2x 4TB SATA SSD mdadm RAID0 (LuksEncrypted)
- mein "produktives" Samba-Drive, wo alle im Haushalt ihre Daten drauf lagern
- 3x 8TB HDD RAID1 (LuksEncrypted)
- das Backup für das Produktiv-Drive
- eine Platte war spare, ich synce sie aber jetzt doch direkt mit, damit das nicht erst im kritischen Moment passiert, wenn eine bereits ausgefallen ist
- eine offsite 8TB liegt verschlüsselt in der Büro-Schublade (3-2-1 yeah)
- 2x 1TB HDD RAID0 (LuksEncrypted)
- Laufwerk für temporäre Daten, oft sequential "raw" Video, ist nur ein Raid0 um die 2.5Gbit im Netzwerk besser auszureizen
- 1x 3TB HDD (LuksEncrypted)
- Speicherort für Boot-Drive-Images aller Rechner im Haushalt
Shit Happens
Jetzt ist mir bei einem Füllstand von ~5TB folgendes mit meinem produktiven Samba-Drive passiert:
Beim Kopieren des letzten rendered Videos kam es immer wieder zu Fehlern und Hängern im Dateisystem. Die SSDs waren in IO zu 100% ausgelastet während nur kbyte-weise Schreibprozesse in Monitor-Anwendungen zu sehen waren. Nachdem file transfers über das Netzwerk irgendwann abgebrochen sind wurde der LuksDrive Mountpoint in den "emergency_ro" (Emergency Read Only) Modus gesetzt, also Schreibschutz.
Die beiden SSDs haben ~180 Betriebsstunden und sind bzgl. SMART unauffällig (saubere Werte, quick und long Test problemlos bestanden).
Nachdem ich dann mit fsck (-y) das EXT4 Dateisystem checken und im zweiten Durchlauf reparieren konnte, war es nach Neueinhängung wieder beschreibbar gemounted. Nach dem ersten großen Schreibvorgang ist es allerdings direkt wieder im Read Only Modus gelandet.
Bash:
[86597.650812] EXT4-fs (dm-3): Delayed block allocation failed for inode 52887565 at logical offset 55296 with max blocks 1024 with error 5
[86597.650820] EXT4-fs (dm-3): This should not happen!! Data will be lost
[86732.597087] EXT4-fs (dm-3): failed to convert unwritten extents to written extents -- potential data loss! (inode 142802951, error -5)
Turns out
LuksEncrypted SSDs müssen "discard" allowen, damit sie TRIM ausführen können. Ohne TRIM versteht das System nicht, welche Blöcke wirklich belegt sind und welche nicht, weil Luks sie weiterhin claimed, während das Dateisystem aber den logischen freien Speicher anzeigt. Bei einem Schreibvorgang auf einem "vollen ungetrimmten" Laufwerk kommt es dann zu Fehlern. Bei HDDs (extra noch mal stupide getestet mit dem 2x 1TB Raid0) ist das irrelevant.
Was haben wir gelernt?
TRIM ist wichtig bei LuksEncrypted SSDs. Die Default-Konfiguration aller beteiligten Pakete unter Ubuntu Server sorgt dafür, dass TRIM nicht automatisch funktioniert. Da muss man sich schon selbst drum kümmern. Checkt zusätzlich ob fstrim as wiederkehrender Systemprozess automatisch regelmäßig durch läuft.
Vielleicht hilft es ein paar googlenden Leuten
Zuletzt bearbeitet: