Was macht fsck -p (preen) auf ext4?

16

Ich habe einen Blogbeitrag über die Reparatur von Dateisystemen gelesen und der Autor hat eine gute Frage gestellt ... fsck -psoll kleinere Fehler automatisch beheben, ohne dass ein menschliches Eingreifen erforderlich ist. Aber was genau wird behoben, wenn das Dateisystem geputzt werden soll? Welche Fehler werden behoben, und was veranlasst es, den Benutzer anzuhalten und ihm mitzuteilen, dass er fsck interaktiv ausführen muss? Gibt es eine Liste?

Ich habe herumgegoogelt und alles, was ich finde, ist die Manpage, die nicht wirklich sagt, was -prepariert oder was die Hands-On-Flagge auslöst. Ich interessiere mich speziell für das ext4-Dateisystem.

Bart Silverstrim
quelle

Antworten:

18

Die Antwort auf Ihre Frage liegt in der e2fsck/problems.cDatei des Quellcodes von e2fsprogs . Wenn Sie nach der PR_PREEN_OKFlagge suchen , können Sie loslegen.

Da die vollständige Fehlerbehandlung aufgrund der Vielzahl der möglichen Fehlerbedingungen etwas aufwändiger ist, sollten Sie sich den Code genauer ansehen, wenn Sie sich über einen bestimmten Fall Gedanken machen. Die folgenden Listen wurden jedoch aus den Kommentaren zu den Fehlerbedingungen extrahiert und sollen Ihnen einen groben Überblick über die Auswirkungen des Putzmodus geben.

Die folgenden Fehler / Warnungen werden derzeit automatisch behandelt, wenn das -pFlag angegeben wird:

  • Tipp verschieben
  • Journal-Inode ist ungültig
  • Journal-Superblock ist beschädigt
  • Superblock has_journal flag ist klar, hat aber ein Tagebuch
  • Superblock needs_recovery-Flag ist gesetzt, aber kein Journal vorhanden
  • Dateisystem-Revision ist 0, aber Feature-Flags sind gesetzt
  • Superblock-Hinweis für externen Superblock
  • Gruppendeskriptor N als nicht initialisiert ohne Funktionssatz markiert.
  • Gruppe-N-Block-Bitmap nicht initialisiert, aber Inode-Bitmap wird verwendet.
  • Der Gruppendeskriptor N hat eine ungültige Anzahl nicht verwendeter Inodes.
  • Bitmap des letzten Gruppenblocks nicht initialisiert.
  • Das Flag test_fs ist gesetzt (und ext4 ist verfügbar)
  • Die letzte Mount-Zeit liegt in der Zukunft (fudged)
  • Letzte Schreibzeit liegt in der Zukunft
  • Blockgruppenprüfsumme (Latch-Frage) ist ungültig.
  • Im Stammverzeichnis ist die Uhrzeit eingestellt
  • Reservierter Inode hat schlechten Modus
  • Gelöschter Inode hat null dtime
  • Inode in Benutzung, aber dtime gesetzt
  • Verzeichnis mit Nulllänge
  • Inode hat falsche i_size
  • Inode hat falsche i_blocks
  • Schlechter Superblock in der Gruppe
  • Fehlerhafte Blockgruppendeskriptoren in der Gruppe
  • Block ohne Grund beansprucht
  • Fehler beim Zuweisen von Blöcken zum Verschieben von Metadaten
  • Fehler beim Zuweisen des Blockpuffers während des Verschiebungsprozesses
  • Verschieben von Metadatengruppeninformationen von X nach Y
  • Verschieben von Metadatengruppeninformationen nach X
  • Blockiere Lesefehler während des Umsiedlungsprozesses
  • Schreibfehler während des Umsiedlungsprozesses blockieren
  • Unveränderliches Flag, das auf einem Gerät oder einer Socket-Inode gesetzt ist
  • Nicht-Null-Größe für Geräte-, FIFO- oder Socket-Inode
  • Dateisystem-Revision ist 0, aber Feature-Flags sind gesetzt
  • Der Journal-Inode wird nicht verwendet, enthält jedoch Daten
  • Journal hat schlechten Modus
  • INDEX_FL-Flag in einem Nicht-HTREE-Dateisystem gesetzt
  • INDEX_FL-Flag in einem Nicht-Verzeichnis gesetzt
  • Ungültiger Stammknoten im HTREE-Verzeichnis
  • Nicht unterstützte Hash-Version im HTREE-Verzeichnis
  • Inkompatibles Flag im HTREE-Stammknoten
  • HTREE zu tief
  • ungültige inode-> i_extra_isize
  • ungültiger ea-Eintrag-> e_name_len
  • ungültiger ea-Eintrag-> e_value_offs
  • ungültiger ea-Eintrag-> e_value_block
  • ungültiger ea-Eintrag-> e_value_size
  • ungültiger ea-Eintrag-> e_hash
  • Inode EXTENTS_FL fehlt, ist aber ein Extent Inode
  • Inode sollte nicht EOFBLOCKS_FL gesetzt sein
  • Verzeichniseintrag wurde gelöscht oder unbenutzter Inode
  • Verzeichnis-Dateityp nicht festgelegt
  • Im Dateisystem festgelegter Verzeichnisdateityp
  • Ungültiger HTREE-Stammknoten
  • Ungültiges HTREE-Limit
  • Ungültige HTREE-Anzahl
  • Der HTREE-Innenknoten enthält in der Tabelle nicht ordnungsgemäße Hashes
  • Inode gefunden in Gruppe, in der _INODE_UNINIT gesetzt ist
  • Inode im Bereich der nicht verwendeten Inodes der Gruppe gefunden
  • i_blocks_hi sollte Null sein
  • / lost + found nicht gefunden
  • Nicht angeschlossener Inode mit der Länge Null
  • Inode ref count falsch
  • Das Auffüllen am Ende der Inode-Bitmap ist nicht festgelegt.
  • Das Auffüllen am Ende der Block-Bitmap ist nicht festgelegt.
  • Block Bitmap Unterschiede Header
  • Block nicht verwendet, aber in der Bitmap markiert
  • Block verwendet, aber in der Bitmap nicht als verwendet markiert
  • Block Bitmap Unterschiede enden
  • Inode Bitmap Unterschiede Header
  • Inode nicht verwendet, aber in der Bitmap markiert
  • Inode verwendet, aber in Bitmap nicht als verwendet markiert
  • Inode-Bitmap-Unterschiede enden
  • Freie Inodes zählen für Gruppenfehler
  • Verzeichnisse zählen für die Gruppe falsch
  • Freie Inodes zählen falsch
  • Freie Blöcke zählen für Gruppenfehler
  • Freie Blöcke zählen falsch
  • Blockbereich nicht verwendet, aber in der Bitmap markiert
  • Blockbereich verwendet, aber in der Bitmap nicht markiert
  • Inode-Bereich nicht verwendet, aber in der Bitmap markiert
  • Inode-Bereich verwendet, aber in der Bitmap nicht markiert
  • Gruppe N Block (e) in Verwendung, aber Gruppe ist mit BLOCK_UNINIT markiert
  • Gruppe N Inode (s) in Verwendung, aber Gruppe ist mit INODE_UNINIT markiert
  • Journal neu erstellen, wenn das Flag E2F_FLAG_JOURNAL_INODE gesetzt ist

Die folgenden Fehlerbedingungen führen zum Abbruch des nicht interaktiven fsck-Prozesses, auch wenn das -pFlag gesetzt ist:

  • Block Bitmap nicht in Gruppe
  • Inode-Bitmap nicht in Gruppe
  • Inode-Tabelle nicht in Gruppe
  • Dateisystemgröße ist falsch
  • Die Anzahl der Inodes im Superblock ist falsch
  • Der Hurd unterstützt die Dateityp-Funktion nicht
  • Journal hat einen unbekannten Superblock-Typ
  • Fragen Sie, ob wir das Tagebuch löschen sollen
  • Der Journal-Superblock verfügt über ein unbekanntes Feature-Flag mit Lesezugriff
  • Journal-Superblock hat ein unbekanntes inkompatibles Feature-Flag gesetzt
  • Das Journal hat eine nicht unterstützte Versionsnummer
  • Fragen Sie, ob wir das Tagebuch trotzdem führen sollen
  • Reservierte Blöcke ohne resize_inode
  • Resize_inode nicht aktiviert, aber resize inode ist ungleich Null
  • Inode-Größe ändern ungültig
  • Die letzte Mount-Zeit liegt in der Zukunft
  • Die letzte Schreibzeit liegt in der Zukunft
  • Gruppendeskriptor N-Prüfsumme ist ungültig.
  • Das Stammverzeichnis ist keine Inode
  • Block-Bitmap-Konflikte mit anderen fs-Blöcken
  • Inode-Bitmap steht in Konflikt mit einem anderen fs-Block
  • Inode-Tabelle kollidiert mit einem anderen fs-Block
  • Block-Bitmap befindet sich in einem fehlerhaften Block
  • Inode-Bitmap befindet sich in einem fehlerhaften Block
  • Ungültige Blocknummer in Inode
  • Blocknummer überlappt fs Metadaten
  • Inode hat unzulässige Blöcke (Latch-Frage)
  • Zu viele fehlerhafte Blöcke in der Inode
  • Ungültige Blocknummer im fehlerhaften Block-Inode
  • Bad Block Inode hat ungültige Blöcke (Latch-Frage)
  • Bad Block wird als indirekter Bad Block verwendet
  • Inkonsistenz kann nicht sofort behoben werden
  • Falsche Eingabeaufforderung für den primären Block
  • Eingabeaufforderung zum Unterdrücken von Nachrichten
  • Imagic-Flag auf einer Inode gesetzt, wenn das Dateisystem dies nicht unterstützt
  • Komprimierungsflag auf einem Inode gesetzt, wenn das Dateisystem dies nicht unterstützt
  • Beschäftige dich mit Inodes, die Teil der Orphan-Linked-List waren
  • Umgang mit Inodes, die Teil einer beschädigten Orphan-Linked-List waren (Latch-Frage)
  • Fehler beim Lesen des erweiterten Attributblocks
  • Ungültiger erweiterter Attributblock
  • Erweiterte Attributreferenzanzahl falsch
  • Mehrere EA-Blöcke werden nicht unterstützt
  • Fehler EA-Zuordnungskollision
  • Falscher erweiterter Attributname
  • Falscher erweiterter Attributwert
  • Inode zu groß (Latch-Frage)
  • Verzeichnis zu groß
  • Normale Datei zu groß
  • Symlink zu groß
  • Der fehlerhafte Block hat einen indirekten Block, der mit dem Dateisystemblock in Konflikt steht
  • Inode-Größenänderung fehlgeschlagen
  • Inode scheint ein Verzeichnis zu sein
  • Fehler beim Lesen des Extent-Baums
  • Fehler beim Iterieren von Extents
  • Schlechter Startblock im Umfang
  • Der Umfang endet jenseits des Dateisystems
  • EXTENTS_FL-Flag in einem Dateisystem, das keine Extents enthält
  • Inode hat Extents, Superblock fehlt INCOMPAT_EXTENTS-Feature
  • Schneller Symlink hat EXTENTS_FL gesetzt
  • Ausmaße sind außer Betrieb
  • Inode hat einen ungültigen Extent-Knoten
  • Duplizierte / fehlerhafte Blöcke klonen?
  • Ungültige Inode-Nummer für '.'
  • Der Verzeichniseintrag hat eine falsche Inode-Nummer
  • Der Directry-Eintrag ist ein Link zu "."
  • Verzeichniseinstiegspunkte für Inode befinden sich jetzt in einem fehlerhaften Block
  • Der Verzeichniseintrag enthält einen Link zu einem Verzeichnis
  • Der Verzeichniseintrag enthält einen Link zum Stammverzeichnis
  • Der Verzeichniseintrag enthält unzulässige Zeichen im Namen
  • Fehlendes '.' im verzeichnis inode
  • Fehlendes '..' im Verzeichnis-Inode
  • Der erste Eintrag im Verzeichnis inode enthält kein '.'
  • Der zweite Eintrag im Verzeichnis inode enthält kein '..'
  • i_faddr sollte Null sein
  • i_file_acl sollte null sein
  • i_dir_acl sollte null sein
  • i_frag sollte Null sein
  • i_fsize sollte Null sein
  • Inode hat schlechten Modus
  • Verzeichnis beschädigt
  • Dateiname zu lang
  • Directory Inode hat einen fehlenden Block (Loch)
  • '.' ist nicht NULL beendet
  • '..' wird nicht NULL beendet
  • Unzulässiger Zeichengerät-Inode
  • Unzulässiger Block Device Inode
  • '.' Duplizieren Eintrag
  • Doppelter Eintrag
  • Final rec_len ist falsch
  • Fehler beim Lesen des Verzeichnisblocks
  • Fehler beim Schreiben des Verzeichnisblocks
  • Verzeichniseintrag für '.' ist groß. Teilt?
  • Ungültige FIFO-Inode
  • Ungültige Socket-Inode
  • Verzeichnisdateityp falsch
  • Der Verzeichnisdateiname ist null
  • Ungültiger Symlink
  • i_file_acl (erweiterter Attributblock) ist fehlerhaft
  • Dateisystem enthält große Dateien, hat aber kein solches Flag in sb
  • Ungültiges HTREE-Verzeichnis löschen
  • Fehlerhafter Block im inneren Knoten des Baums
  • Doppelter Verzeichniseintrag gefunden
  • Nicht eindeutiger Dateiname gefunden
  • i_blocks_hi sollte Null sein
  • Unerwarteter HTREE-Block
  • Root-Inode nicht zugeordnet
  • Kein Zimmer in Fundbüro
  • Nicht verbundener Verzeichnisknoten
  • .. Eingabe ist falsch
  • Lost + fand kein Verzeichnis
  • Nicht angeschlossene Inode
  • Superblock korrupt
  • Fragmente werden nicht unterstützt
  • Fehler beim Ermitteln der physischen Gerätegröße des Dateisystems
  • Das externe Journal verfügt über mehrere (nicht unterstützte) Dateisysteme
  • Externe Zeitschrift kann nicht gefunden werden
  • Externes Journal hat schlechten Superblock
  • Superblock hat eine falsche Journal-UUID
  • Fehler beim Zuweisen der Inode-Bitmap
  • Fehler beim Zuweisen der Block-Bitmap
  • Fehler beim Zuweisen der icount-Linkinformationen
  • Fehler beim Zuweisen des Verzeichnisblockarrays
  • Fehler beim Scannen der Inodes
  • Fehler beim Durchlaufen von Blöcken
  • Fehler beim Speichern der Inode-Count-Informationen
  • Fehler beim Speichern der Verzeichnisblockinformationen
  • Fehler beim Lesen von Inode (zum Löschen)
  • Fehler beim Zuweisen der Refcount-Struktur
  • Fehler beim Lesen des Extended Attribute-Blocks beim Korrigieren von refcount
  • Fehler beim Schreiben des erweiterten Attributblocks beim Korrigieren des Refcount
  • Fehler beim Zuweisen der Zuweisungsstruktur für die EA-Region
  • Fehler beim Scannen der Inodes
  • Fehler beim Zuweisen der Inode-Bitmap
  • Interner Fehler: dir_info konnte nicht gefunden werden
  • Fehler beim Zuweisen der Kontenstruktur
  • Fehler beim Durchlaufen der Verzeichnisblöcke
  • Fehler beim Aufheben der Zuordnung von Inode
  • Fehler beim Anpassen der EA-Nachzählung
  • Fehler beim Zuweisen der Inode-Bitmap
  • Fehler beim Erstellen des Stammverzeichnisses
  • Root-Inode ist kein Verzeichnis. abbrechen
  • Ohne Root-Inode kann nicht fortgefahren werden.
  • Interner Fehler: dir_info konnte nicht gefunden werden
  • Programmierfehler: Bitmap-Endpunkte stimmen nicht überein
  • Interner Fehler: Fudging-Ende der Bitmap
  • Fehler beim Kopieren in Ersatz-Inode-Bitmap
  • Fehler beim Kopieren in Ersatzblock-Bitmap
Noah
quelle
Noah, wenn du das weißt, ist es möglich, all diese Fehler zu erstellen / zu injizieren (oder was auch immer möglich ist)? Ich versuche, die Ursache dieser Fehler und die mögliche Lösung dieser Fehler zu untersuchen.
AnkurTank