`e2fsck -n` + Wie kann ich feststellen, ob e2fsck ausgeführt werden muss, um beschädigte Blöcke zu reparieren?

576
King David

Wir wollen das Dateisystem auf dem Datenträger überprüfen, /deb/sdc ... /dev/sdgauf jedem Red Hat Linux - Maschine.

Das Ziel ist es herauszufinden, welche Datenträger benötigt werden e2fsck(wie e2fsck -y /dev/sdbusw.).

Laut Manpage

-n
Öffnen Sie das Dateisystem schreibgeschützt und nehmen Sie für alle Fragen die Antwort "Nein" an. Ermöglicht e2fsckdie nicht interaktive Verwendung. Diese Option kann nicht gleichzeitig mit der Option -poder angegeben werden -y.

Wenn wir den Befehl ausführen (Beispiel)

 e2fsck -n /dev/sdXX 

wir bekommen

e2fsck 1.42.9 (28-Dec-2013) Warning! /dev/sdc is mounted. Warning: skipping journal recovery because doing a read-only filesystem check. /dev/sdc: clean, 94/1310720 files, 156685/5242880 blocks 

Was müssen wir also von der e2fsck -nAusgabe erfassen, das erfordert, dass wir laufen e2fsck(ohne -n)?

e2fsck-Prozess

init 1 umount /dev/sdXX e2fsck -y /dev/sdXX # (or e2fsck -C /dev/sdXX for full details)  init 3 
2

2 Antworten auf die Frage

0
Kamil Maciorowski

Sie verwenden e2fsckalso, ich gehe davon aus, dass wir über ext?Dateisysteme sprechen . Der Befehl

tune2fs -l /dev/sdXX 

zeigt Ihnen den scheinbaren Zustand des Dateisystems an (das gemountet werden kann, es ist sicher). Sie werden (unter anderem) entweder bekommen

Filesystem state: clean 

oder etwas anderes als clean. Weil grepfalse zurückgegeben wird, wenn die Übereinstimmung nicht gefunden wird, kann Ihr grundlegender Versuch folgendermaßen aussehen:

tune2fs -l /dev/sdXX | grep "^Filesystem state:[ ]*clean$" || { commands; to; fix; the; filesystem; } 

Das obige funktioniert nur, wenn das Dateisystem zuvor seinen unreinen Zustand erkannt hat. Manchmal möchten Sie ohnehin nach Problemen suchen (deshalb ist das gewünschte Verhalten bei fsckjedem n-ten Mount oder wenn eine solche Anzahl von Tagen vergangen ist). Wenn ich Ihnen recht verstehe, versuchen Sie e2fsck -y /dev/sdXX, durch Analyse der Ausgabe von zu erfahren, ob Sie dies sollten e2fsck -n /dev/sdXX.

Ich sage nicht die Ausgabe analysieren. Überprüfen Sie den Exitstatus. Sehen man 8 e2fsck, um zu lernen:

Der zurückgegebene Exit-Code e2fsckist die Summe der folgenden Bedingungen:
0- Keine Fehler
1- Dateisystemfehler wurden korrigiert
2- Dateisystemfehler wurden korrigiert, das System sollte neu gestartet werden
4- Dateisystemfehler wurden nicht korrigiert
8- Betriebsfehler
16- Verwendungs- oder Syntaxfehler
32- e2fsckAbbruch durch Benutzeranfrage
128- Fehler in der gemeinsam genutzten Bibliothek

Hinweis e2fsck -n /dev/sdXXtut nichts nützlich (und es wird wieder „keine Fehler“), wenn das Dateisystem scheint klar; Dies ist also eine andere Möglichkeit, den augenscheinlichen Zustand zu erkennen, wie wir es mit getan haben tune2fs. Um trotzdem zu prüfen, benötigen Sie eine -fOption. Dann möchten Sie wissen, ob der Exit-Status Folgendes enthält4 . In bashdiesem kann mit gemacht werden:

e2fsck -nf /dev/sdXX # this is safe even if the filesystem is mounted status=$? [ $(( $status & 4 )) -eq 4 ] && { commands; to; fix; the; filesystem; } 

Kurze Erklärung:

  • $?ist der Beendigungsstatus des letzten Befehls ( e2fsckin diesem Fall). Ich speichere es in einer separaten Variable, damit ich mehrere Tests damit machen kann. In diesem einfachen Beispiel, bei dem es nur einen Test gibt, ist dies nicht erforderlich, im Allgemeinen jedoch eine gute Praxis. Der zugrunde liegende Grund ist: nachdem diese Zeilen $statusnoch den Exit-Status von enthalten e2fsckund wiederverwendet werden können, während (das Neue) $?nichts damit zu tun hat e2fsck.
  • $(( ... )) macht Shell-Arithmetik
  • wo &ist bitweise UND,
  • dann [ ... -eq 4 ]ist in der Tat der testBefehl zu überprüfen, ob das Ergebnis ist 4.
  • Wenn der Test erfolgreich ist, wird der { ... }Block ausgeführt.

Es können Fehler nicht im Dateisystem selbst, sondern auf tieferen Ebenen auf dem Gerät auftreten. Ich denke, das ist nicht im Rahmen dieser Frage, aber um Sie in die richtige Richtung zu weisen, falls Sie es brauchen, sind dies nützliche Befehle (Hinweis sdX, nicht sdXX):

  • smartctl -t long /dev/sdX
  • badblocks -n -b 512 /dev/sdX

Lesen Sie die Manpages, bevor Sie sie verwenden.

Vielen Dank für die lange und ausgezeichnete Antwort, nur eine Anmerkung, warum nicht -> [[$]? -eq 4]] & & e2fsck -y / dev / sdXX, es ist einfacher King David vor 7 Jahren 0
Zweitens - Ist es sicher, das e2fsck -nf / dev / sdXX auszuführen, während das Gerät angehängt ist? King David vor 7 Jahren 0
@KingDavid `[$? -eq 4] `verfehlt zB '12', was '4 + 8' ist. Sie erhalten diesen Wert wahrscheinlich nicht. Es liegt an Ihnen, welche Logik Sie verwenden werden, ob Sie nach '128' suchen oder nicht usw. Wenn Sie genau '4' zuordnen möchten, dann `[$? -eq 4] `sollte gut gehen. `e2fsck -nf / dev / sdXX` ist sicher, da` -n` es schreibgeschützt macht. Der Befehl kann also nichts kaputt machen. Eine andere Frage ist: Kann der montierte Zustand die Schlussfolgerung ändern? Das weiß ich nicht. Ich gehe davon aus, dass Sie den Zustand eines Dateisystems untersuchen müssen, ohne den normalen Betrieb zu stören. Natürlich sollten Sie "umount" vor "e2fsck -y" eingeben. Kamil Maciorowski vor 7 Jahren 0
@KingDavid Ich habe mein (Test-) Dateisystem absichtlich mit einigen `dd`-Befehlen verwöhnt und den Exit-Code` 12` von `e2fsck -nf` erhalten. Ich denke, Sie sollten nicht auf Sohle "4" prüfen; benutze meinen bitweise bewussten Code besser. Kamil Maciorowski vor 7 Jahren 0
0
Stef

Prüfen Sie zunächst, ob es sich um ein Journaling-Dateisystem handelt.

"Ein Journaling-Dateisystem ist ein Dateisystem, das Änderungen aufzeichnet, die noch nicht im Hauptteil des Dateisystems festgeschrieben sind, indem die Absichten dieser Änderungen in einer Datenstruktur aufgezeichnet werden, die als" Journal "bezeichnet wird. Dies ist in der Regel ein Umlaufprotokoll Bei einem Systemabsturz oder Stromausfall können solche Dateisysteme schneller wieder online geschaltet werden, wobei die Wahrscheinlichkeit einer Beschädigung geringer ist. "

Dann können Sie mit Gparted die Konsistenz überprüfen und sehen, was das Tool für Sie tun kann.