Fstrim
Fstrim - Beschreibung
Beschreibung
Das Programm fstrim für die Kommandozeile[1] stammt aus dem Paket util-linux, welches bei jeder Installation von Ubuntu bereits mit installiert wird
Es kann mit Rootrechten[2] mit folgender allgemeiner Syntax aufgerufen werden
fstrim OPTIONen EINBINDEPUNKT
Das Programm bearbeitet eingebundene Dateisysteme; diese können entweder über Optionen -a, -A, -I oder -t bzw
- deren Langform identifiziert werden, oder es wird über den Parameter EINBINDEPUNKT eines explizit angegeben
Man kann in einer anderen (hier nicht besprochen) Betriebsart auch einen über die Optionen -o, -l und -m bzw
- deren Langform beschrieben Bereich auf einem Datenträger bearbeiten lassen
- Diese und die vorgenannte Betriebsart kann man vermischen
- Lese hierzu Details in der Manpage von fstrim
Installation
Der Befehl fstrim ist Teil des Pakets util-linux, welches aus dem Linux-Kernel-Archiv <https://www.kernel.org/pub/linux/utils/util-linux/> heruntergeladen werden kann.
Aufruf
'''fstrim''' ['''-v'''] ['''-o''' ''offset''] ['''-l''' ''length''] ['''-m''' ''minimum-size''] '''-A'''|'''-a'''|''mountpoint''
Optionen
Unix | GNU | Parameter | Beschreibung |
---|---|---|---|
-h | --help | Hilfe mit Liste der Optionen und deren Kurzbeschreibung ausgeben | |
-V | --version | Version des Programms anzeigen | |
-n | --dry-run | Nichts wirklich ausführen, nur andeuten was passieren könnte | |
-a-I /proc/self/mountinfo | --all | Alle zum Zeitpunkt des Aufrufs tatsächlich eingebundenen Dateisysteme bearbeiten | |
-A-I /etc/fstab | --fstab | Alle in der Datei fstab[4] aufgeführten, tatsächlich eingebundenen Dateisysteme bearbeiten | |
-I LISTE | --listet-in LISTE | LISTE ist eine Folge von durch : getrennten Dateinamen
| |
-t TYPen | --types TYPen | Ergänzt eine angegebene Option -a oder -A
| |
-v | --verbose | Erzeugt ausführlichere Ausgabe, insbesondere die Anzahl der getrimmten Bytes | |
--quiet-unsupported | Wenn das Dateisystem oder das Gerät TRIM nicht unterstützt, keine Meldung erzeugen |
Parameter
Umgebungsvariablen
Exit-Status
Wert | Beschreibung |
---|---|
0 | Erfolg |
>0 | Fehler |
Anwendung
Problembehebung
Batched Discard
Trimmen per "Batched Discard" ist sehr einfach
- Es läuft hinaus auf einen Aufruf des Befehls fstrim
- manuell in einem Terminal[1] mit RootRechten[2]
- oder per Skript
- oder periodisch per Cronjob (nicht empfohlen)
- oder periodisch per Systemd-Unit
Beispiel
Das folgende Beispiel setzt voraus, dass auf /home/ tatsächlich ein eigenes Dateisystem eingebunden ist bzw
- dass das ein Einbindepunkt und nicht nur ein Ordner ist
sudo fstrim -v /home
Als Ausgabe erhält man mit der Option -v eine Ausgabe, wie viele Bytes getrimmt wurden
/home: 1825476608 bytes were trimmed
In diesem Beispiel wurden ungefähr 1,825 GB getrimmt
Es ist nicht ganz klar, was das bedeuten soll
- Schön wäre es, wenn hier gemeldet würde, wie viele Bytes wieder beschreibbar gemacht wurden
- Das ist vermutlich eine zu optimistische Interpretation: Tatsächlich ist es wohl nur die Maximalzahl der möglicherweise befreiten Bytes und die Anzahl der wirklich wieder befreiten Bytes kann sehr viel kleiner sein, möglicherweise auch gar keines
Beispiel Skript
Das Skript unter geeignetem Namen an geeigneter Stelle ablegen, als Eigentümer und Gruppe root setzen und ausführbar machen
1
2 3 4 5 6 7 |
# !/bin/bash
{ echo "*** $(date -R) ***" for MP in / /home # <-- Anpassen auf die eigenen Bedürfnisse do /sbin/fstrim -v "$MP" || echo Fehler beim trimmen von $MP done } | tee >>/var/log/batched_discard.log |
Eine Ausgabe sieht dann z.B
- so aus
*** Sun, 12 Oct 2014 12:51:07 +0200 *** /: 290,9 MiB (305029120 bytes) trimmed /home: 116,4 MiB (122036224 bytes) trimmed
Man kann es z.B
- als Job für Anacron ablegen
Beispiel Systemd-Unit
Beispiel für eine Systemd-Unit für fstrim
- basierend auf der des Betriebssystems
# /etc/systemd/system/UU-fstrim.service [Unit] Description=Discard unused blocks on filesystems from /etc/fstab Documentation=man:fstrim(8) ConditionVirtualization=!container [Service] Type=oneshot ExecStart=/sbin/fstrim --listed-in /etc/fstab:/proc/self/mountinfo --verbose --quiet-unsupported PrivateDevices=no PrivateNetwork=yes PrivateUsers=no ProtectKernelTunables=yes ProtectKernelModules=yes ProtectControlGroups=yes MemoryDenyWriteExecute=yes SystemCallFilter=@default @file-system @basic-io @system-service
Die markierten Optionen für den Aufruf von fstrim sind an die eigenen Bedürfnisse anzupassen
- Da bei Ubuntu die Datei /etc/fstab[4] nicht leer ist, bleibt die Angabe weiterer Dateien wirkungslos
Online Discard
Diese Methode ist zwar einfach zu konfigurieren, aber ihre richtige Anwendung ist dennoch sehr anspruchsvoll
- Man benötigt umfangreiches Fachwissen, detaillierte Kenntnisse über die Implementierung im Linux Kernel und genaue Kenntnis der technischen Spezifikationen der verbauten SSD (Hardware) sowie deren Verhalten (Fehler in der Firmware)
- Dieser Abschnitt richtet sich an Experten und enthält keine vollständige Übersicht und erst recht keine für Laien taugliche Anleitung
Experten-Info
Es gibt inzwischen mehrere Varianten für kontinuierliches Trimmen: # Die ursprüngliche Implementierung (später als "non-queued continuous trim" betzeichnet) war optimiert auf frühere Bauarten von SSDs ohne "wear leveling"
- SATA-Geräte vor Revision 3.1 unterstützen nur diese Variante, die im Betrieb einige unerwünschte Effekte produzieren kann
- Die Spezifikation SATA Rev. 3.1 wurde im Juli 2011 veröffentlicht
- Bis heute (2024) sind Controller nach dieser bzw
- folgenden Revisionen selten
- Externe Gehäuse mit USB/SATA-Wandler beherrschen in der Regel nur SATA Rev 3.0
- Bei der neueren Variante "queued continuous trim" werden TRIM-Anforderungen von der SSD gesammelt und als Batch ausgeführt
- Dies reduziert die Häufigkeit des während der Ausführung von TRIM erfolgenden Einfrieren des Systems
- Die Variante „Ausführung von "queued continuous trim" durch die SSD“ erfordert eine SSD nach hinreichend neuer SATA Revision (zunehmend erfüllt) und ebenso beim SATA-Controller (bei externen Geräten immer noch selten)
- Für manche SSDs ist dieser Modus im Linux Kernel gesperrt wegen ernsthafter Korruption von Daten. → Folgende Tabelle 3 und Trim_(computing)
- Manche Administratoren misstrauen nach schlechten Erfahrungen aus der Anfangszeit der Methode „Ausführung von "queued continuous trim" durch die SSD“ grundsätzlich dieser Methode und sperren deshalb im Kernel deren technische Grundlage Native_Command_Queuing (NCQ) beim Start des Kernels über eine Bootoption
- libata.force=noncq (NCQ komplett abschalten) oder
- libata.force=noncqtrim (NCQ für TRIM abschalten)
- Bei der Variante „Ausführung von "queued continuous trim" durch den Dateisystemtreiber“ simuliert der Dateisystemtreiber die vorstehende Arbeitsweise
- Er sammelt selbst die TRIM-Anforderungen und sendet diese als "non-queued"-TRIM-Anforderungen
Manche SSDs sind bekannt für ihre fehlerhafte Implementierung mancher ATA-Befehle im Kontext TRIM und deshalb im Linux Kernel (genauer in der libata) für bestimmte Betriebsweisen gesperrt
- Eine fehlende Mitgliedschaft in dieser schwarzen Liste ist natürlich keine Garantie für fehlerfreie Funktion, sondern bedeutet nur fehlende Erkenntnisse über das betreffende Gerät
Tabelle 3: SSDs mit Beschränkungen bei Online Discard | |||
Hersteller | Modell | Firmware | |
Micron/Crucial | M500 | alle | "queued continuous trim" gesperrt |
M550 | MU01 | ||
Micron | M510 | MU01 | |
Crucial | MX100 | MU01 | |
Samsung | 840850 | alle | |
SuperSSpeed | S238 | alle | TRIM generell gesperrt: Löscht falsche Blöcke, somit Datenverlust |
- Hinweis
Für SSDs der ersten Baureihen fanden sich Berichte, wodurch die per „Online Discard“ entstehenden TRIM-Befehle die Performance der SSD reduzieren oder diese unbenutzbar machen könnten
- Bei aktuellen SSDs ist dieses Problem nicht bekannt
Dennoch ist "Online Discard" aggressiver als "Batchd Discard", lässt somit die SSD schneller altern und sollte daher nur in den Fällen eingesetzt werde, wenn "Batched Discard" keine befriedigenden Ergebnisse liefert
Zur Nutzung von "Online Discard" muss man beim Einbinden die (bzw
- abhängig von Dateisystemtyp eine verwandte) Option discard verwenden
- Mit einer solchen Option fordert der Dateisystemtreiber fortlaufend TRIM von der SSD an, sobald im Dateisystem Speicherbereiche frei werden
- Die Details kann man in der Dokumentation des jeweiligen Dateisystems nachlesen
- Siehe auch die folgenden Abschnitte für ext4, Btrfs und Swap
Anhang
Siehe auch
Dokumentation
- Man-Page
Links
Projekt
Weblinks