WARNUNG: Im Dateisystem liegt ein Fehler vor. Übergeordnetes Element von Knoten 47322B43 konnte nicht repariert werden. Übergeordnetes Verzeichniseintrag konnte nicht gefunden werden.
Ich habe das Betriebssystem Ubuntu 22.04.2 LTS (Jammy Jellyfish) installiert. Beim Booten erhalte ich immer den folgenden Fehler. Ich habe es versucht und fsck -f /dev/sda2
bekomme immer noch diesen Fehler. Bitte geben Sie mir Tipps, wie ich mein System reparieren kann.
Antwort1
Lassen Sie uns zunächst Inodes in Laiensprache verstehen
Indem wir ... Das Dateisystem unserer Wahl für diese Demonstration istEXT2weil es keineTagebuch schreibenMechanismus und kann daher zum Zwecke der Demonstration einiger Inode-bezogener Probleme leicht beschädigt werden.
Lassen Sie uns eine „Disk“-Image-Datei erstellen:
$ truncate -s 10M myfilesystem
Und formatieren Sie es
$ mkfs.ext2 myfilesystem
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 2560 4k blocks and 2560 inodes
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
Beachten Sie die Anzahl der Inodes ... and 2560 inodes
... Dies ist die permanente Maximalzahl für dieses Dateisystem auf dieser Festplattenpartition ... Sie können so viele Dateien erstellen (alle Arten einschließlich Verzeichnisse) als diese Zahl(abzüglich der speziellen Inodes des Dateisystems), aber nicht mehr als diese Zahl auf diesem Dateisystem.
Lassen Sie uns einen Einhängepunkt erstellen und dieses Dateisystem einhängen:
$ mkdir mymount
$
$ mount myfilesystem mymount/
$
$ ls -la mymount/
total 24
drwxr-xr-x 3 root root 4096 May 8 14:24 .
drwxr-xr-x 3 ubuntu ubuntu 4096 May 8 14:29 ..
drwx------ 2 root root 16384 May 8 14:24 lost+found
$
$ df -ih mymount/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop1 2.5K 11 2.5K 1% /home/ubuntu/test/mymount
Beachten Sie die Anzahl der verwendeten Inodes 11
... Diese werden als spezielle Inodes bezeichnet und standardmäßig für spezielle, vordefinierte Zwecke des Dateisystems reserviert/verwendet ... Lassen Sie uns noch ein paar davon verwenden:
$ touch mymount/file{1..2}
$
$ ls -lai mymount/
total 24
2 drwxr-xr-x 3 root root 4096 May 8 14:33 .
2552 drwxr-xr-x 3 ubuntu ubuntu 4096 May 8 14:29 ..
12 -rw-r--r-- 1 root root 0 May 8 14:33 file1
13 -rw-r--r-- 1 root root 0 May 8 14:33 file2
11 drwx------ 2 root root 16384 May 8 14:24 lost+found
$
$ df -ih mymount/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop1 2.5K 13 2.5K 1% /home/ubuntu/test/mymount
Wir haben zwei Dateien erstellt und zwei weitere Inodes verwendet und sind zu folgendem Ergebnis gekommen 11 + 2 = 13
:
Lasst uns einen davon befreien:
$ rm mymount/file1
$
$ df -ih mymount/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop1 2.5K 12 2.5K 1% /home/ubuntu/test/mymount
Das sind normal 13 - 1 = 12
verwendete Inodes und der, den wir gerade freigegeben haben, wird bei Bedarf wiederverwendet … Inodes sind recycelbar.
Das ist unter normalen Umständen so ... Aber was, wenn wirin einer anderen SchaleKontinuierliches Öffnen und Verwenden einer Datei:
$ tail -f mymount/file2
-
Gehen Sie dann zurück zu unserer ursprünglichen Shell, um diese Datei zu löschen, und hängen Sie das Dateisystem anschließend sofort ungeordnet aus:
$ rm mymount/file2 && umount -l myfilesystem
$
$ ls -lai mymount/
total 8
6425 drwxr-xr-x 2 root root 4096 May 8 14:29 .
2552 drwxr-xr-x 3 ubuntu ubuntu 4096 May 8 14:29 ..
Mounten Sie es dann erneut:
$ mount myfilesystem mymount/
$
$ ls -lai mymount/
total 24
2 drwxr-xr-x 3 root root 4096 May 8 14:44 .
2552 drwxr-xr-x 3 ubuntu ubuntu 4096 May 8 14:29 ..
11 drwx------ 2 root root 16384 May 8 14:24 lost+found
$
$ df -ih mymount/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop1 2.5K 12 2.5K 1% /home/ubuntu/test/mymount
Beachten Sie, dass die Datei zwar tatsächlich gelöscht wurde, ihr Inode jedoch nicht freigegeben wird. Dabei handelt es sich um eine „Simulation“ einer Beschädigung des Dateisystems. Lassen Sie uns die Datei aushängen und überprüfen:
$ umount myfilesystem
$
$ e2fsck myfilesystem
e2fsck 1.46.5 (30-Dec-2021)
myfilesystem was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Deleted inode 13 has zero dtime. Fix<y>? yes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Inode bitmap differences: -13
Fix<y>? yes
Free inodes count wrong for group #0 (2548, counted=2549).
Fix<y>? yes
myfilesystem: ***** FILE SYSTEM WAS MODIFIED *****
myfilesystem: 11/2560 files (0.0% non-contiguous), 170/2560 blocks
Schließen wir die andere Shell, mounten wir sie erneut und überprüfen:
$ mount myfilesystem mymount/
$
$ df -ih mymount/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop1 2.5K 11 2.5K 1% /home/ubuntu/test/mymount
Jetzt kennen Sie die Grundlagen der Verwendung von Inodes ... Und einige der Dinge, die bei ihnen schiefgehen können, um eine Dateisystemprüfung auszulösen, und wie ... Dasselbe kann beim Ein- und Ausstecken einer Festplatte passieren oder wenn das System plötzlich die Stromversorgung verliert, wenn Dateien (insbesondere Systemdateien) werden ständig von Systemprozessen erstellt/gelöscht/aktualisiert ... Bei Verzeichnissen ist dies etwas weniger der Fall, da es normalerweise nicht möglich ist, ein Verzeichnis durch einen Prozess offen zu halten, da sie keinen Handle wie normale Dateien haben. Bei Verzeichnis-Inodes kann es jedoch zu Beschädigungen kommen, wenn das oben genannte passiert, während ihre Metadaten aktualisiert/geändert werden. Außerdem kann es, obwohl selten, passieren, wenn das Dateisystem aufgrund eines defekten/sich verschlechternden Festplattenlaufwerks den Zugriff auf bestimmte Blöcke verliert.
Die meisten Probleme mit Inodes können jedoch problemlos automatisch durch Dienstprogramme zur Dateisystemprüfung behoben werden.
Zurück zu Ihrer Frage
Es kommt jedoch vor, dass diese Dienstprogramme manchmal den Pfad verlieren und nicht wissen, wie sie ein Problem mit Inodes beheben können, insbesondere bei Verzeichnissen, die keine gültigen, lesbaren Metadaten haben, denn zu den Methoden, die diese Tools zum Beheben von Beschädigungen bei Inodes verwenden, gehören eigentlich Metadaten, die den Inhalt, die übergeordneten Verzeichnisse usw. identifizieren.
Der Screenshot, den Sie beigefügt haben, macht es mir etwas schwer, Text zu lesen und zu kopieren ... Was Sie jedoch zu haben scheinen, ist ein Inode 4732284
(unter/usr/src/linux ... /net/ ...
), das im Dateisystem als Verzeichnis gekennzeichnet ist, aber nicht über die üblichen Metadaten verfügt, die seine Beziehung zu seinen übergeordneten Verzeichnissen beschreiben, wodurch es verwaist wird und nicht den üblichen Speicherplatz von einem Block belegt, z. B. 4k
sondern 0
Speicherplatz belegt und daher NULL
... Während in den meisten Dateisystemen Dateien die Größe null/0 haben dürfen, ist dies bei Verzeichnissen nicht der Fall. Weitere Informationen finden Sie unterdieser BeitragUnddieser Beitragfür mehr Details.
Diese Art von Problem,wenn der Wert nicht dramatisch ansteigt, was auf ein defektes Laufwerk/schlechte und beschädigte Blöcke hinweisen könnte, ist kein großes Problem und sollte harmlos sein ... Um es auf einfache Weise loszuwerden, müssen Sie es nur verwenden ... d. h. eine Datei in diesem Verzeichnis erstellen und sie dann entfernen, um ihre Metadaten zu aktualisieren, sodass sie wieder die volle Blockgröße des Dateisystems verwendet und einigermaßen normal aussieht ... Dieses Verzeichnis sollte leicht zu erkennen sein, da es seine 0
Größe in der Ausgabe von zB anzeigt ls -la
und nachdem Sie es verwendet haben, sollte es die übliche Blockgröße anzeigen, zB 4k
wie andere Verzeichnisse im selben Dateisystem ... Wenn das nicht ausreicht, um es wieder in den Normalzustand zu versetzen, rütteln Sie weiter daran, indem Sie zB seinen Eigentümer festlegen chown root:root
oder zB seine Berechtigungen ändern, chmod 755
bis ls -la
eine andere Größe als die 0
für dieses Verzeichnis angezeigt wird.
Hängen Sie dann das enthaltene Dateisystem aus und führen Sie das Dienstprogramm zur Dateisystemprüfung erneut aus. Diesmal sollte das Problem behoben sein.
Das sollte funktionieren, aber wenn es nicht funktioniert, haben Sie zwei Alternativen ...Entwedermit einem Dateisystem-Debugger wiedebugfs
um den Eintrag dieses Inodes manuell zu reparieren/löschenoderAlternativ können Sie Ihre Daten sichern und die Festplattenpartition neu formatieren.