XFS

So defragmentieren Sie ein XFS-Dateisystem

So defragmentieren Sie ein XFS-Dateisystem
Fragmentierung ist ein seit langem bestehendes Problem bei der Lagerung. Es tritt auf, wenn die Speichermedien aufgrund längerer Nutzung Blöcke von zugewiesenen Blöcken mit freiem Speicherplatz dazwischen erhalten. Dies geschieht, weil verschiedene Programme Speicher in unterschiedlicher Reihenfolge anfordern und dann den Speicher zu unterschiedlichen Zeiten freigeben. Da die Daten nicht in einem großen zusammenhängenden Block gespeichert werden, sondern über die Festplatte verteilt werden, verringert sich der insgesamt verfügbare Speicherplatz auf der Festplatte (Speichereffizienz) und auch die Leistung der Festplatte.

Dieses Problem tritt besonders bei magnetischen Medien auf, obwohl auch SSDs darunter leiden. Lassen Sie uns in diesem Beitrag versuchen, ein XFS-Dateisystem zu defragmentieren.

Sandbox-Einrichtung

Um mit dem XFS-Dateisystem zu experimentieren, entschied ich mich, eine Testbench zu erstellen, anstatt mit kritischen Daten auf einer Festplatte zu arbeiten. Diese Testbench besteht aus einer Ubuntu-VM, mit der eine virtuelle Festplatte verbunden ist, die Rohspeicher bereitstellt. Sie können VirtualBox verwenden, um die VM zu erstellen und dann eine zusätzliche Festplatte zum Anhängen an die VM erstellen

Gehen Sie einfach zu den Einstellungen Ihrer VM und unter Einstellungen → Speicher Abschnitt können Sie 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 1024 M 0 rom

Abgesehen vom Hauptblockgerät sda, wo das OS installiert ist, gibt es jetzt ein neues sdb-Gerät. Lassen Sie uns schnell eine Partition daraus erstellen und mit dem XFS-Dateisystem formatieren.

Öffnen Sie das parted-Dienstprogramm als Root-Benutzer:

$ parted -a optimale /dev/sdb

Lassen Sie uns zuerst eine Partitionstabelle mit mklabel erstellen, gefolgt von der Erstellung einer einzelnen Partition aus der gesamten Festplatte (die 107 GB groß ist). Sie können überprüfen, ob die Partition erstellt wurde, indem Sie sie mit dem Befehl print auflisten:

(getrennt) mklabel gpt
(getrennt) mkpart primär 0 107
(geteilter) Druck
(getrennt) aufhören

Okay, jetzt können wir mit lsblk sehen, dass sich unter dem sdb-Gerät ein neues Blockgerät namens sdb1 befindet.

Lassen Sie uns diesen Speicher als xfs formatieren und im Verzeichnis /mnt mounten. Führen Sie erneut die folgenden Aktionen als Root aus:

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

Der letzte Befehl druckt alle eingehängten Dateisysteme und Sie können überprüfen, ob /dev/sdb1 unter /mnt eingehängt ist.

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

$ dd if=/dev/urandom of=/mnt/myfile.txt-Anzahl = 1024 bs = 1024

Der obige Befehl würde eine Datei myfile schreiben.txt mit 1 MB Größe 1. Sie können diesen Befehl mit bash in eine einfache for-Schleife automatisieren und mehr solcher Dateien generieren generate. Verteilen Sie sie auf verschiedene Verzeichnisse, wenn Sie möchten. Löschen Sie ein paar von ihnen nach dem Zufallsprinzip. Tun Sie dies alles im xfs-Dateisystem (eingehängt unter /mnt) und prüfen Sie dann auf Fragmentierung. All das ist natürlich optional.

Defragmentieren Sie Ihr Dateisystem

Das erste, was wir tun müssen, ist herauszufinden, wie man das Ausmaß der Fragmentierung überprüft. Das zuvor erstellte xfs-Dateisystem befand sich beispielsweise auf dem Geräteknoten /dev/sdb. Wir können das Dienstprogramm xfs_db (steht für xfs debugging) verwenden, um den Fragmentierungsgrad zu überprüfen.

$ xfs_db -c frag -r /dev/sdb1

Das Flag -c nimmt verschiedene Befehle an, darunter den Befehl frag, um den Fragmentierungsgrad zu überprüfen. Das Flag -r, das verwendet wird, um sicherzustellen, dass die Operation vollständig schreibgeschützt ist.

Wenn wir feststellen, dass dieses Dateisystem fragmentiert ist, führen wir den Befehl xfs_fsr auf dem Geräteknoten aus:

$ xfs_fsr /dev/sdb1

Dieser letzte Befehl ist alles, was Sie brauchen, um Ihr Dateisystem zu defragmentieren. Sie können dies als Cronjob hinzufügen, der Ihr Dateisystem regelmäßig überwacht. Aber das macht für xfs wenig Sinn. Die umfangsbasierte Zuordnung von XFS sorgt dafür, dass Probleme wie Fragmentierung auf ein Minimum reduziert werden.

Anwendungsfälle

Die Anwendungsfälle, bei denen Sie sich am meisten Sorgen um die Fragmentierung des Dateisystems machen müssen, sind Anwendungen, bei denen viele kleine Datenblöcke geschrieben und neu geschrieben werden. Eine Datenbank ist ein klassisches Beispiel dafür und Datenbanken sind dafür berüchtigt, viele, viele „Löcher“ in Ihrem Speicher zu hinterlassen. Speicherblöcke werden nicht zusammenhängend aufgefüllt, wodurch der verfügbare Speicherplatz mit der Zeit immer kleiner wird.

Das Problem entsteht nicht nur in Bezug auf den reduzierten nutzbaren Speicherplatz, sondern auch in Bezug auf reduzierte IOPS, die die Leistung Ihrer Anwendung beeinträchtigen können. Ein Skript zur kontinuierlichen Überwachung des Fragmentierungsgrades ist eine konservative Methode zur Wartung des Systems. Sie möchten nicht, dass ein automatisiertes Skript zufällig mit der Defragmentierung Ihres Dateisystems beginnt, insbesondere wenn es bei Spitzenlast verwendet wird.

OpenTTD-Tutorial
OpenTTD ist eines der beliebtesten Wirtschaftssimulationsspiele auf dem Markt. In diesem Spiel musst du ein wunderbares Transportunternehmen aufbauen....
SuperTuxKart für Linux
SuperTuxKart ist ein großartiger Titel, der entwickelt wurde, um Ihnen das Mario Kart-Erlebnis kostenlos auf Ihrem Linux-System zu bieten. Es ist ziem...
Battle for Wesnoth-Tutorial
The Battle for Wesnoth ist eines der beliebtesten Open-Source-Strategiespiele, die Sie derzeit spielen können. Dieses Spiel befindet sich nicht nur se...