Reparatur eines XFS -Systems

Reparatur eines XFS -Systems
Dateisysteme sind oben auf Speichergeräten aufgebaut. Es gibt RAID -Controller und Festplattencontroller, die jeweils ein eigenes kleines Stück Firmware ausführen. Es gibt Caches, um die Leistungen zu verbessern. Es gibt Festplatten mit unterschiedlichen Sektorgrößen und Festplatten, die eine andere Sektorgröße melden, je nachdem, wie Sie die Frage stellen.

Bei so vielen verschiedenen Teilen, die einen typischen Speicherstapel bilden, ist es ein Wunder, dass alles überhaupt funktioniert. Die meiste Zeit funktioniert die Dinge jedoch gut. Die wenigen Male, in denen die Dinge schief gehen, brauchen wir Dienstprogramme wie xfs_repair, um uns aus dem Chaos herauszuholen.

Dinge können schief gehen, wenn Sie eine Datei schreiben und die Macht geht aus oder es gibt eine Kernel -Panik. Sogar Daten, die auf einer Festplatte ruhen, können im Laufe der Zeit aufgrund der physikalischen Struktur von Speicherelementen sich ändern. Dies wird als Bitfäule bezeichnet. In allen Fällen brauchen wir einen Mechanismus für:

  1. Das Überprüfen der gelesenen Daten sind dieselben Daten, die zuletzt geschrieben wurden. Dies wird implementiert, indem eine Prüfsumme für jeden Datenblock vorliegt und die Prüfsumme für diesen Block verglichen wird, wenn Daten gelesen werden. Wenn die Prüfsumme übereinstimmt, wurden die Daten nicht geändert
  2. Eine Möglichkeit, die korrupten oder verlorenen Daten zu rekonstruieren, entweder aus einem Spiegelblock oder aus einem Paritätsblock.

Sandbox -Setup

Lassen Sie uns einen Testbench einrichten, um eine XFS -Reparaturroutine auszuführen, anstatt tatsächliche Festplatten mit wertvollen Daten zu verwenden. Wenn Sie bereits über ein zerbrochenes Dateisystem verfügen, können Sie diesen Abschnitt überspringen und mit dem nächsten Kopf zum nächsten springen. 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. Wenn Sie möchten, können Sie automatisch mehr solche Dateien generieren, diese über verschiedene Verzeichnisse im XFS -Dateisystem (an /mnt montiert) verbreiten und dann auf Fragmentierung suchen. Verwenden Sie dafür Bash oder Python oder einen anderen Ihrer bevorzugten Skriptsprache.

Fehler überprüfen und reparieren

Datenversorger können sich ohne Ihr Wissen still in Ihre Festplatten einlassen. Wenn ein Datenblock nicht gelesen wird und die Prüfsumme nicht verglichen wird, kann der Fehler nur zum falschen Zeitpunkt angezeigt werden. Wenn jemand versucht, in Echtzeit auf die Daten zuzugreifen. Stattdessen ist es eine gute Idee, einen gründlichen Scan aller Datenblöcke für die Überprüfung der Bitfäule oder andere Fehler häufig auszuführen.

Das Dienstprogramm xfs_scrub soll diese Aufgabe für Ihre erledigen. Diese experimentelle Funktion ist teilweise vom Scrub -Befehl von OpenZFS inspiriert und ist nur auf XFSPROGS Version 4 verfügbar.15.1-1ubuntu1, das keine stabile Veröffentlichung ist. Wenn es fälschlicherweise Fehler erkennt, kann es Sie irreführen, Datenbeschäftigung zu verursachen, anstatt sie zu beheben! Wenn Sie jedoch damit experimentieren möchten, können Sie es mit dem Befehl in einem montierten Dateisystem verwenden:

$ xfs_scrub /dev /sdb1

Bevor Sie versuchen, ein beschädigtes Dateisystem zu reparieren, müssten Sie es zuerst entlarvt. Dies soll verhindern, dass Anwendungen versehentlich in das Dateisystem schreiben, wenn es in Ruhe gelassen werden soll.

$ Umount /dev /sdb1

Das Reparieren von Fehlern ist so einfach wie das Laufen:

$ xfs_repair /dev /sdb1

Essentielle Metadaten werden immer als mehrere Kopien gehalten, auch wenn Sie RAID nicht verwenden und wenn etwas mit dem Superblock oder den Inodes schief gelaufen ist, kann dieser Befehl dieses Problem für Sie aller Wahrscheinlichkeit genommen beheben.

Nächste Schritte

Wenn Sie die Datenversorgung häufig (oder sogar einmal sehen, wenn Sie etwas Mission kritisches ausführen), sollten Sie Ihre Festplatten ersetzen, da dies ein früher Indikator für eine Festplatte ist, die kurz vor dem Sterben steht.

Wenn ein Controller fehlschlägt oder eine RAID -Karte das Leben aufgegeben hat, kann keine Software auf der Welt das Dateisystem für Sie reparieren. Sie möchten keine teuren Datenwiederherstellungsrechnungen und Sie möchten auch keine langen Downtimes. Behalten Sie also diese SSDs und Spinnenteller im Auge!