Dieses Problem zeigt sich besonders in Magnetmedien, obwohl SSDs auch darunter leiden. Lassen Sie uns versuchen, ein XFS -Dateisystem in diesem Beitrag zu entfalten.
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.