Einführung
Aufgrund der Architektur von SSDs oder Solid-State-Laufwerken führt die fortlaufende Verwendung zu Leistungseinbußen, wenn diese nicht berücksichtigt und gemindert werden. Der BefehlTRIM ist eine Operation, mit der das Betriebssystem Informationen an die SSD weitergeben kann, über die keine Datenblöcke mehr verwendet werden. Auf diese Weise können die internen Systeme der SSD den Verschleißausgleich besser verwalten und das Gerät für zukünftige Schreibvorgänge vorbereiten. TRIM kann einen erheblichen Einfluss auf die Leistung des Geräts im Laufe der Zeit und auf seine Gesamtlebensdauer haben.
Es ist zwar möglich, kontinuierliches TRIM in Linux zu aktivieren, dies kann jedoch die Leistung aufgrund des zusätzlichen Overheads bei normalen Dateivorgängen beeinträchtigen. Eine sanftere Alternative besteht darin,periodic TRIM zu konfigurieren. Dadurch wird das Betriebssystem so konfiguriert, dass das Laufwerk nach einem Zeitplan und nicht als notwendige Komponente für reguläre Dateivorgänge zurechtgeschnitten wird. In fast allen Fällen bietet es die gleichen Vorteile wie kontinuierliches TRIM, ohne dass die Leistung beeinträchtigt wird.
In diesem Handbuch werden wir kurz erläutern, wie SSDs und TRIM funktionieren, und anschließend zeigen, wie Sie periodisches TRIM auf einer Vielzahl von Linux-Distributionen aktivieren.
Wie speichern SSDs Daten?
Um die von TRIM gelösten Probleme besser zu verstehen, ist es hilfreich, einige Informationen darüber zu erhalten, wie SSDs ihre Daten speichern und verwalten.
Dateneinheiten
Daten auf SSDs werden in Einheiten fester Größe geschrieben und gelesen, die alspages bezeichnet werden. Die Seiten wiederum sind in größeren Einheiten zusammengefasst, die alsblocks bezeichnet werden.
Lese-, Schreib- und Löschbeschränkungen
SSDs können Seiten einzeln lesen und beschreiben. Sie können jedoch nur Daten auf Blockebene löschen. Eine weitere Einschränkung besteht darin, dass Schreibvorgänge nur auf Seiten ausgeführt werden können, die vollständigzeroed waren (alle Bits auf 0 gesetzt). Das bedeutet, dass das direkte Überschreiben von Daten nicht möglich ist.
Um Daten zu ändern, muss die SSD tatsächlich die Informationen vom alten Speicherort lesen, sie im Speicher ändern und dann die geänderten Daten auf neue Seiten mit Nullen schreiben. Anschließend wird eine interne Tabelle aktualisiert, um den logischen Speicherort, den das Betriebssystem erhält, dem neuen physischen Speicherort der Daten auf dem Gerät zuzuordnen. Der alte Speicherort wird in einer anderen internen Tabelle alsstale markiert: nicht verwendet, aber noch nicht auf Null gesetzt.
Zurückfordern veralteter Seiten
Um die veralteten Seiten zurückzugewinnen, müssen die internen Garbage-Collection-Prozesse der SSD alle gültigen Seiten aus einem Block lesen und in einen neuen Block schreiben. Auch hier wird die Zuordnung der logischen und physischen Speicherorte für die interne Tabelle aktualisiert. Der alte Block, der jetzt keine eindeutigen, noch verwendeten Daten enthält, kann dann auf Null gesetzt und als für zukünftige Schreibvorgänge bereit markiert werden.
Was macht TRIM?
Die internen Abfallsammelprozesse der SSD sind für das Löschen von Blöcken und die Verwaltung des Verschleißniveaus verantwortlich. In der Regel „löschen“ Dateisysteme Daten jedoch, indem sie sie lediglich in ihren eigenen Datensätzen als Speicherplatz markieren, der wieder verfügbar ist. Sie löschen die Daten nicht wirklich aus dem zugrunde liegenden Speicher, sondern überschreiben möglicherweise den zuvor von diesen Daten belegten Bereich bei nachfolgenden Schreibvorgängen.
Dies bedeutet, dass die SSD in der Regel nicht weiß, dass eine Seite nicht mehr benötigt wird, bis sie vom Dateisystem die Anweisung erhält, zu einem späteren Zeitpunkt an denselben logischen Speicherort zu schreiben. Es kann seine Garbage Collection-Routinen nicht ausführen, da es nie informiert wird, wenn Daten gelöscht werden, nur wenn der zuvor dafür reservierte Speicherplatz jetzt für andere Daten verwendet werden soll.
Mit dem Befehl TRIM werden Informationen darüber, welche Daten nicht mehr verwendet werden, vom Dateisystem auf die SSD übertragen. Auf diese Weise kann das Gerät im Leerlauf seine regulären Müllsammelaufgaben ausführen, um sicherzustellen, dass auf Null gesetzte Seiten vorhanden sind, die für neue Schreibvorgänge bereit sind. Die SSD kann Daten im Voraus mischen, veraltete Seiten bereinigen und das Gerät im Allgemeinen in gutem Zustand halten.
Das Durchführen von TRIM bei jedem Löschen kann jedoch kostspielig sein und sich negativ auf die Leistung des Laufwerks auswirken. Durch das Konfigurieren von periodischem TRIM werden dem Gerät Masseninformationen zu nicht benötigten Seiten in regelmäßigen Abständen und nicht bei jedem Vorgang bereitgestellt.
Kontinuierliches TRIM deaktivieren
Möglicherweise haben Sie Continuous TRIM auf Ihren Geräten bereits aktiviert, als sie gemountet wurden. Bevor wir periodisches TRIM aktivieren, ist es sinnvoll, einen Blick auf unsere aktuellen Mount-Optionen zu werfen.
Continuous TRIM wird aktiviert, indem ein Laufwerk oder eine Partition mit der Optiondiscard
bereitgestellt wird.
Suchen Sie zunächst die Dateisysteme, die derzeit mit der Optiondiscard
bereitgestellt werden:
findmnt -O discard
OutputTARGET SOURCE FSTYPE OPTIONS
/mnt/data /dev/sda1 ext4 rw,relatime,discard,data=ordered
/mnt/data2 /dev/sdb1 ext4 rw,relatime,discard,data=ordered
Sie können diese Dateisysteme ohne die Optiondiscard
erneut bereitstellen, indem Sie-o remount,nodiscard
mitmount
einschließen:
sudo mount -o remount,nodiscard /mnt/data
sudo mount -o remount,nodiscard /mnt/data2
Wenn Sie den Befehlfindmnt
erneut ausführen, sollten Sie keine Ergebnisse erhalten:
findmnt -O discard
Öffnen Sie als Nächstes die Datei/etc/fstab
, um die derzeit für Ihre Dateisysteme definierten Mount-Optionen anzuzeigen. Diese bestimmen, wie die Dateisysteme bei jedem Start eingehängt werden:
sudo nano /etc/fstab
Suchen Sie nach der Optiondiscard
und entfernen Sie sie aus den Zeilen, die Sie finden:
/etc/fstab
. . .
# /dev/sda1 /mnt/data ext4 defaults,nofail,discard 0 0
/dev/sda1 /mnt/data ext4 defaults,nofail 0 0
# /dev/sdb1 /mnt/data2 ext4 defaults,nofail,discard 0 0
/dev/sdb1 /mnt/data2 ext4 defaults,nofail 0 0
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Die Dateisysteme werden jetzt ohne die Optiondiscard
bereitgestellt und bei nachfolgenden Startvorgängen auf dieselbe Weise bereitgestellt. Wir können jetzt periodisches TRIM für alle Dateisysteme einrichten, die es unterstützen.
Periodisches TRIM für Systemdistributionen einrichten
Das Einrichten von periodischem TRIM für moderne Distributionen, die mit systemd ausgeliefert werden, ist eher unkompliziert.
Ubuntu 16.04
Ubuntu 16.04 wird mit einem Skript geliefert, das wöchentlich voncron
ausgeführt wird. Dies bedeutet, dass die Aktivierung der im folgenden Abschnitt beschriebenen systemd-Methode für Ubuntu 16.04 nicht erforderlich ist.
Wenn Sie das Skript untersuchen möchten, können Sie es anzeigen, indem Sie Folgendes eingeben:
cat /etc/cron.weekly/fstrim
Output#!/bin/sh
# trim all mounted file systems which support it
/sbin/fstrim --all || true
Wie Sie sehen können, benötigt dieses Skript eine Version vonfstrim
mit dem Flag--all
. Viele Versionenfstrim
, die mit früheren Versionen von Ubuntu ausgeliefert wurden, enthalten diese Option nicht.
Andere Systemdistributionen
Für andere Systemd-Distributionen kann periodisches TRIM mit der Dateifstrim.timer
aktiviert werden, die einmal pro Woche TRIM-Vorgänge auf allen fähigen, gemounteten Laufwerken ausführt. Dies nutzt auch die Optionfstrim --all
.
Zum Zeitpunkt dieses Schreibens ist dies die beste Methode für die folgenden Distributionen:
-
Debian 8
-
CentOS 7
-
Fedora 24
-
Fedora 23
-
CoreOS
Für CentOS 7, Fedora 23, Fedora 24 und CoreOS sind standardmäßig die Einheitenfstrim.service
undfstrim.timer
verfügbar. Aktivieren Sie die.timer
-Einheit, um eine wöchentliche TRIM aller angeschlossenen fähigen Laufwerke zu planen:
sudo systemctl enable fstrim.timer
In Debian 8 sind diefstrim.service
undfstrim.timer
im Dateisystem verfügbar, jedoch nicht standardmäßig in systemd geladen. Sie müssen lediglich die Dateien kopieren:
sudo cp /usr/share/doc/util-linux/examples/fstrim.service /etc/systemd/system
sudo cp /usr/share/doc/util-linux/examples/fstrim.timer /etc/systemd/system
Jetzt können Sie den Timer wie bei den anderen Distributionen aktivieren:
sudo systemctl enable fstrim.timer
Ihr Server sollte jetzt alle bereitgestellten Dateisysteme, die den Vorgang unterstützen, einmal wöchentlich TRIMMEN.
Einrichten von periodischem TRIM für Nicht-Systemdistributionen
Zufälligerweise werden die meisten Distributionsversionen, die mit nicht systemd init-Systemen geliefert werden, auch mit Versionen des Dienstprogrammsfstrim
ausgeliefert, die nicht das Flag--all
hatten. Dies erschwert den sicheren automatischen TRIM-Betrieb erheblich.
Die Verwendung von TRIM auf Laufwerken, die es nicht unterstützen, oder auf Geräten, die es falsch implementieren, kann gefährlich sein und zu Datenverlust führen. Das--all
-Flag kann diese Szenarien sicher verarbeiten. Der manuelle Versuch, festzustellen, ob angeschlossene Laufwerke den Vorgang korrekt unterstützen, kann jedoch gefährlich sein.
In Ubuntu 14.04 ist ein kurzes Skript namensfstrim-all
enthalten, das dies versucht. Ein wöchentliches Skript, das voncron
ausgeführt wird, führt dies aus. Das Skript interpretiert die TRIM-Fähigkeit angeschlossener Laufwerke jedoch nicht immer korrekt.
Für diese und andere Distributionen mitfstrim
-Befehlen ohne das--all
-Flag besteht die beste Problemumgehung darin, eine statisch verknüpfte Version vonfstrim
zu kompilieren, die das Flag enthält. Dies kann zusammen mit der verteilungsverwalteten Version installiert und nur explizit vomcron
-Job aufgerufen werden.
Dies ist möglicherweise die beste Option für die folgenden Distributionen:
-
Ubuntu 14.04
-
Ubuntu 12.04
-
Debian 7
-
CentOS 6
Für Ubuntu 14.04 ist es wahrscheinlich am besten, das Skriptfstrim-all
für die Ausführung zu deaktivieren, da es den Status möglicherweise nicht richtig erkennt:
sudo chmod a-x /etc/cron.weekly/fstrim
sudo mv /etc/cron.weekly/fstrim /etc/cron.weekly/fstrim.bak
Für andere Distributionen können Sie direkt einspringen.
Installieren Sie die Software Compilation Tools
Installieren Sie zunächst die benötigten Software-Erstellungstools.
Für Ubuntu- und Debian-Systeme kann dies durch Eingabe von:
sudo apt-get update
sudo apt-get install build-essential
Auf CentOS-Systemen können Sie ähnliche Tools installieren, indem Sie Folgendes eingeben:
sudo yum groupinstall 'Development Tools'
Sie haben jetzt die Build-Abhängigkeiten, die zum Kompilieren einer aktuellen Version vonfstrim
erforderlich sind.
Laden Sie die Quelldateien herunter und extrahieren Sie sie
Das Dienstprogrammfstrim
wird mit anderen Tools in einer Gruppe namensutil-linux
veröffentlicht. Sie finden den Quellcode, sortiert nach Release-Version,here.
Klicken Sie auf die neueste Version des Pakets. Im Moment sind dasv2.28
, aber das kann im Verlauf der Entwicklung anders sein.
Suchen Sie im nächsten Verzeichnis den neuesten Tarball für die Software. Dies beginnt mitutil-linux-
und endet mit.tar.gz
. Derzeit ist die neueste stabile Versionutil-linux-2.28.1.tar.gz
. Klicken Sie mit der rechten Maustaste auf den entsprechenden Link und kopieren Sie ihn in Ihre Zwischenablage.
Wechseln Sie auf Ihrem Server in das Verzeichnis/tmp
. Verwenden Sie das Dienstprogrammcurl
oderwget
und fügen Sie die URL ein, die Sie kopiert haben, um die Datei herunterzuladen:
cd /tmp
curl -LO https://www.kernel.org/pub/linux/utils/util-linux/v2.28/util-linux-2.28.1.tar.gz
Extrahieren Sie anschließend den Tarball, um die Quellverzeichnisstruktur zu erstellen:
tar xzvf util-linux*
Nachdem wir den Quellcode und die Build-Tools haben, können wir die Software erstellen.
Konfigurieren und kompilieren Sie einen statisch verknüpften fstrim
Beginnen Sie mit der Eingabe der extrahierten Verzeichnisstruktur:
cd /tmp/util-linux*
Als nächstes müssen wir die Software konfigurieren. Da wir nur eine isoliertefstrim
-Binärdatei installieren und die von unserem Paketverwaltungssystem verwalteten Dienstprogramme und Bibliotheken nicht überschreiben möchten, kompilieren wir eine statische Binärdatei.
Dazu müssen wir die statische Verknüpfung aktivieren und gemeinsam genutzte Bibliotheken deaktivieren. Konfigurieren Sie die Software mit diesen Eigenschaften, indem Sie Folgendes eingeben:
./configure --enable-static --disable-shared
Sobald die Software konfiguriert ist, können Sie das Dienstprogrammfstrim
kompilieren, indem Sie Folgendes eingeben:
make fstrim
Dadurch wird das Dienstprogramm kompiliert und im obersten Verzeichnis des extrahierten Archivs abgelegt.
Kopieren Sie die Binärdatei in ein Verzeichnis mitnot in Ihrem PATH. Da wir dies nur aus dem Skriptcron
aufrufen möchten, sollten wir sicherstellen, dass es nicht mit den vom System installiertenfstrim
für andere Zwecke konkurriert.
Wir werden ein Verzeichnis namens/cron-bin
erstellen und die Binärdatei dort ablegen:
sudo mkdir /cron-bin
sudo cp /tmp/util-linux*/fstrim /cron-bin
Wir haben jetzt Zugriff auf ein funktionaleres Dienstprogramm vonfstrim
.
Erstellen Sie ein wöchentliches Cron-Skript, um fstrim auszuführen
Jetzt können wir ein neues Skript erstellen, das wöchentlich voncron
ausgeführt wird. Dies ist genau das gleiche Skript, das in Ubuntu 16.04 enthalten ist, außer dass es auf den Ort verweist, an dem wir unsere statisch kompilierte Binärdatei abgelegt haben.
Erstellen Sie die Datei, indem Sie Folgendes eingeben:
sudo nano /etc/cron.weekly/fstrim
Fügen Sie die folgenden Zeilen ein. Dadurch wird die neue Binärdateifstrim
mit der Option--all
ausgeführt:
/etc/cron.weekly/fstrim
#!/bin/sh
# trim all mounted file systems which support it
/cron-bin/fstrim --all || true
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Machen Sie das Skript ausführbar, indem Sie Folgendes eingeben:
sudo chmod a+x /etc/cron.weekly/fstrim
Die Daemonscron
undanacron
führen dieses Skript einmal pro Woche aus, um die Dateisysteme zu TRIMMEN.
Fazit
Ihr Linux-Server sollte jetzt so konfiguriert sein, dass er wöchentlich alle unterstützten Dateisysteme zuschneidet. Mit TRIM können Sie die Leistung und Lebensdauer Ihrer SSDs langfristig maximieren.
Kontinuierliche TRIM-Vorgänge klingen zwar ideal, können aber den regulären Dateisystemvorgängen erheblichen Overhead hinzufügen. Periodisches TRIM bietet einen guten Mittelweg, indem wichtige Informationen weitergeleitet werden, die für die routinemäßige Wartung des Laufwerks in einem geplanten Job erforderlich sind, anstatt als Bestandteil jeder Dateioperation.