|
|
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