| 
				   | 
				
| Zeile 109: | 
Zeile 109: | 
 | 
  |  | 
  | 
 | </noinclude>  |  | </noinclude>  | 
 | 
  |  | 
 | = TMP =
  |  | 
 | === Batched Discard ===
  |  | 
 | Trimmen per "Batched Discard" ist sehr einfach
  |  | 
 | * Es läuft hinaus auf einen Aufruf des Befehls [https://wiki.ubuntuusers.de/SSD/TRIM/#fstrim fstrim]
  |  | 
 | * manuell in einem Terminal[https://wiki.ubuntuusers.de/SSD/TRIM/#source-1 [1]] mit RootRechten[https://wiki.ubuntuusers.de/SSD/TRIM/#source-2 [2]]
  |  | 
 | * oder per Skript
  |  | 
 | * oder periodisch per [https://wiki.ubuntuusers.de/Cron/ 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 <tt>-v</tt> 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 <tt>root</tt> setzen und ausführbar machen
  |  | 
 | 
  |  | 
 | {| class="wikitable sortable options big"
  |  | 
 | |-  
  |  | 
 | || 1
  |  | 
 | 2
  |  | 
 | 3
  |  | 
 | 4
  |  | 
 | 5
  |  | 
 | 6
  |  | 
 | 7
  |  | 
 | || <nowiki># !/bin/bash</nowiki>
  |  | 
 | {
  |  | 
 | echo "*** $(date -R) ***"
  |  | 
 | for MP in / /home <nowiki># <-- Anpassen auf die eigenen Bedürfnisse</nowiki>
  |  | 
 | 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
  |  | 
 | 
  |  | 
 | <nowiki>*** Sun, 12 Oct 2014 12:51:07 +0200 ***</nowiki>
  |  | 
 | /: 290,9 MiB (305029120 bytes) trimmed
  |  | 
 | /home: 116,4 MiB (122036224 bytes) trimmed
  |  | 
 | 
  |  | 
 | Man kann es z.B
  |  | 
 | * als Job für [https://wiki.ubuntuusers.de/Cron/ 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 <tt>fstrim</tt> sind an die eigenen Bedürfnisse anzupassen
  |  | 
 | * Da bei Ubuntu die Datei '''/etc/fstab'''[https://wiki.ubuntuusers.de/SSD/TRIM/#source-4 [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 [https://en.wikipedia.org/wiki/Trim_(computing)#Disadvantages Trim_(computing)]
  |  | 
 | #* Manche [https://wiki.ubuntuusers.de/Administrator/ 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 [https://de.wikipedia.org/wiki/Native_Command_Queuing Native_Command_Queuing] (NCQ) beim Start des Kernels über eine [https://wiki.ubuntuusers.de/Bootoption/ Bootoption]
  |  | 
 | #** <tt>libata.force=noncq</tt> (NCQ komplett abschalten) oder
  |  | 
 | #** <tt>libata.force=noncqtrim</tt> (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
  |  | 
 | 
  |  | 
 | {| class="wikitable sortable options big"
  |  | 
 | |-  
  |  | 
 | | colspan="4" | 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
  |  | 
 | <blockquote>
  |  | 
 | 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 <tt>discard</tt> 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 [https://wiki.ubuntuusers.de/SSD/TRIM/#ext4 ext4], [https://wiki.ubuntuusers.de/SSD/TRIM/#Btrfs Btrfs] und [https://wiki.ubuntuusers.de/SSD/TRIM/#Swap Swap]
  |  | 
 | </blockquote>
  |  | 
 | 
  |  | 
 | # https://manpages.debian.org/testing/util-linux-locales/fstrim.8.de.html
  |  | 
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
Aufruf
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
<syntaxhighlight lang="bash" highlight="1" line copy>
< /syntaxhighlight>
Problembehebung
Konfiguration
Dateien
Anhang
Siehe auch
Dokumentation
- Man-Page
 
- prep(1)
 
Links
Projekt
Weblinks