Zum Inhalt springen

Fstrim

Aus Foxwiki

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
  • Aus der Liste wird nur die erste nicht leere Datei berücksichtigt und alle in dieser Datei aufgeführten und tatsächlich eingebundenen Dateisysteme werden bearbeitet
-t TYPen --types TYPen Ergänzt eine angegebene Option -a oder -A
  • TYPen ist eine mit Kommata getrennte Liste von Dateisystemtypen, wie sie auch mount verwendet
  • In der Liste ungenannte oder mit der Vorsilbe no ausgeschlossene Typen werden nicht bearbeitet
  • Wenn man diese Option nicht verwendet, wird nur der Typ autofs ausgeschlossen
-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

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
  1. 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)
  1. 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
  1. https://manpages.debian.org/testing/util-linux-locales/fstrim.8.de.html

Anhang

Siehe auch



Dokumentation

Man-Page
  1. prep(1)


Links

Projekt

Weblinks