So konfigurieren Sie periodisches TRIM für den SSD-Speicher auf Linux-Servern

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.timeraktiviert 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.timerverfü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 Dienstprogrammsfstrimausgeliefert, 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-allfü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 Dienstprogrammfstrimkompilieren, 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 Skriptcronaufrufen 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 voncronausgefü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ärdateifstrimmit der Option--allausgefü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.