So defragmentieren Sie ein XFS -Dateisystem

So defragmentieren Sie ein XFS -Dateisystem
Die Fragmentierung ist ein langjähriges Problem bei der Speicherung. Es entsteht, wann die Speichermedien aufgrund längerer Verwendung Stücke von zugewiesenen Blöcken mit freiem Speicherplatz zwischen ihnen erhalten. Dies geschieht, weil verschiedene Programme den Speicher in unterschiedlicher Reihenfolge anfordern und den Speicher dann zu unterschiedlichen Zeiten befreien. Wenn Sie zwischen den Daten nicht zugewiesen sind, reduzieren Sie den gesamten verfügbaren Speicherplatz in der Festplatte (Speichereffizienz) und auch die Leistung der Festplatte, da die Daten nicht in einem großen zusammenhängenden Teilen gespeichert sind, sondern sich auf der Festplatte verbreiten.

Dieses Problem zeigt sich besonders in Magnetmedien, obwohl SSDs auch darunter leiden. Lassen Sie uns versuchen, ein XFS -Dateisystem in diesem Beitrag zu entfalten.

Sandbox -Setup

Um mit dem XFS -Dateisystem zu experimentieren, habe ich mich zunächst entschlossen, eine Testbench zu erstellen, anstatt mit kritischen Daten auf einer Festplatte zu arbeiten. Dieser Testbench besteht aus einer Ubuntu -VM, mit der eine virtuelle Festplatte verbunden ist, die einen Rohspeicher bietet. Sie können VirtualBox verwenden, um die VM zu erstellen und dann eine zusätzliche Festplatte zum Anbringen an der VM zu erstellen

Gehen Sie einfach zu den Einstellungen Ihres VM und unter Einstellungen → Speicher Abschnitt Sie können dem SATA -Controller eine neue Festplatte hinzufügen. Sie können eine neue Festplatte erstellen. Wie unten gezeigt, aber stellen Sie sicher, dass Ihre VM ausgeschaltet ist, wenn Sie dies tun.

Sobald die neue Festplatte erstellt wurde, schalten Sie die VM ein und öffnen Sie das Terminal. Der Befehl LSBLK Listet alle verfügbaren Blockgeräte auf.

$ lsblk
SDA 8: 0 0 60g 0 Festplatte
├─sda1 8: 1 0 1m 0 Teil
└─sda2 8: 2 0 60g 0 Teil /
SDB 8:16 0 100g 0 Festplatte
SR0 11: 0 1 1024m 0 ROM

Abgesehen vom Hauptblockgerät SDA, Wo das Betriebssystem installiert ist, gibt es jetzt ein neues SDB -Gerät. Erstellen wir schnell eine Partition daraus und formatieren Sie sie mit dem XFS -Dateisystem.

Öffnen Sie den geteilten Dienstprogramm als Root -Benutzer:

$ verteilt -a optimal /dev /sdb

Erstellen wir zunächst eine Partitionstabelle mit MKLabel. Darauf erstellen wir eine einzige Partition aus der gesamten Festplatte (die 107 GB Größe hat). Sie können überprüfen, ob die Partition durch Auflisten mithilfe von Print -Befehl durchgeführt wird:

(Abteilte) Mklabel GPT
(Teil) MkPart Primary 0 107
(Abteilter) Druck
(abgebrochen) verlassen

Okay, jetzt können wir mit LSBLK sehen, dass sich unter dem SDB -Gerät ein neues Blockgerät namens SDB1 befindet.

Formen wir diesen Speicher als XFS und montieren Sie sie im /mnt -Verzeichnis. Führen Sie erneut die folgenden Aktionen als Wurzel aus:

$ mkfs.xfs /dev /sdb1
$ montage /dev /sdb1 /mnt
$ df -h

Der letzte Befehl druckt alle montierten Dateisysteme und Sie können überprüfen, ob /dev /sdb1 bei /mnt montiert ist.

Als nächstes schreiben wir hier eine Reihe von Dateien als Dummy -Daten, um sie hier zu entfalten:

$ dd if =/dev/urandom von =/mnt/myfile.txt count = 1024 bs = 1024

Der obige Befehl würde eine Datei myfile schreiben.Txt von 1 MB Größe. Sie können diesen Befehl automatisch in eine einfache für die Schleife mit Bash automatisch machen und mehr solche Dateien generieren. Verbreiten Sie sie über verschiedene Verzeichnisse, wenn Sie möchten. Einige von ihnen zufällig löschen. Führen Sie all dies im XFS -Dateisystem (an /mnt montiert) aus und überprüfen Sie dann die Fragmentierung. All dies ist natürlich optional.

Defragmentieren Sie Ihr Dateisystem

Das erste, was wir tun müssen, ist herauszufinden, wie man die Fragmentierungsprüfung überprüfen kann. Das von uns zuvor erstellte XFS -Dateisystem befand sich beispielsweise auf dem Geräteknoten /Dev /SDB. Wir können das Dienstprogramm XFS_DB (für XFS -Debugging) verwenden, um die Fragmentierung zu überprüfen.

$ xfs_db -c frag -r /dev /sdb1

Das -C -Flag nimmt verschiedene Befehle auf, darunter der Frag -Befehl, um die Fragmentierungebene zu überprüfen. Die -R -Flag, mit der sichergestellt wurde, dass die Operation vollständig schreibgeschützt ist.

Wenn wir feststellen, dass in diesem Dateisystem eine Fragmentierung vorhanden ist, führen wir den Befehl XFS_FSR auf dem Geräteknoten aus:

$ XFS_FSR /DEV /SDB1

Dieser letzte Befehl ist alles, was es gibt, um Ihr Dateisystem zu entfalten. Aber das für XFS macht wenig Sinn. Die ausgiebebasierte Allokation von XFS stellt sicher, dass Probleme wie Fragmentierung auf ein Minimum bleiben.

Anwendungsfälle

Die Anwendungsfälle, in denen Sie sich die meisten über die Fragmentierung von Dateisystemen befassen müssen. Eine Datenbank ist ein klassisches Beispiel dafür und Datenbanken sind dafür bekannt, viele, viele „Löcher“ in Ihrem Speicher zu hinterlassen. Speicherblöcke sind nicht zusammengefüllt, was den verfügbaren Platz im Laufe der Zeit kleiner und kleiner macht.

Das Problem tritt nicht nur in Bezug auf den reduzierten nutzbaren Raum auf, sondern auch in Bezug auf reduzierte IOPS, was die Leistung Ihrer Anwendung beeinträchtigen könnte. Ein Skript zu haben, um die Fragmentierungsstufe kontinuierlich zu überwachen, ist eine konservative Möglichkeit, das System aufrechtzuerhalten. Sie möchten nicht.