Das Linux-Dienstprogramm fsck wird verwendet, um Linux-Dateisysteme (ext2, ext3, ext4 usw.) zu überprüfen und zu reparieren.
Je nachdem, wann ein Dateisystem zuletzt überprüft wurde, führt das System beim Booten den fsck aus, um zu prüfen, ob das Dateisystem in einem konsistenten Zustand ist. Der Systemadministrator könnte es auch manuell ausführen, wenn es ein Problem mit den Dateisystemen gibt.
Stellen Sie sicher, dass fsck auf einem nicht gemounteten Dateisystem ausgeführt wird, um Probleme mit Datenbeschädigungen zu vermeiden.
Dieser Artikel erläutert 10 praktische Beispiele zur Ausführung des fsck-Befehls zur Fehlerbehebung und Behebung von Dateisystemfehlern.
1. Dateisystemprüfung auf einer Festplattenpartition
Zeigen Sie zuerst alle verfügbaren Partitionen auf Ihrem System mit dem Befehl parted an, wie unten gezeigt.
# parted /dev/sda 'print' Number Start End Size Type File system Flags 1 1049kB 106MB 105MB primary fat16 diag 2 106MB 15.8GB 15.7GB primary ntfs boot 3 15.8GB 266GB 251GB primary ntfs 4 266GB 500GB 234GB extended 5 266GB 466GB 200GB logical ext4 6 467GB 486GB 18.3GB logical ext2 7 487GB 499GB 12.0GB logical fat32 lba
Sie können ein bestimmtes Dateisystem (zum Beispiel:/dev/sda6) wie unten gezeigt überprüfen.
# fsck /dev/sda6 fsck from util-linux 2.20.1 e2fsck 1.42 (29-Nov-2011) /dev/sda6: clean, 95/2240224 files, 3793506/4476416 blocks
Im Folgenden sind die möglichen Beendigungscodes für den Befehl fsck aufgeführt.
- 0 – Keine Fehler
- 1 – Dateisystemfehler korrigiert
- 2 – System sollte neu gestartet werden
- 4 – Unkorrigierte Dateisystemfehler
- 8 – Betriebsfehler
- 16 – Verwendungs- oder Syntaxfehler
- 32 – Fsck auf Benutzerwunsch abgebrochen
- 128 – Shared-Library-Fehler
2. Fsck-Befehl, der für einen Dateisystemtyp spezifisch ist
fsck verwendet intern den entsprechenden Dateisystem-Prüfbefehl für eine Dateisystem-Prüfoperation. Diese fsck-Checker-Befehle befinden sich normalerweise unter /sbin.
Das folgende Beispiel zeigt die verschiedenen möglichen fsck-Checker-Befehle (zum Beispiel:fsck.ext2, fsck.ext3, fsck.ext4 usw.)
# cd /sbin # ls fsck* fsck fsck.cramfs fsck.ext2 fsck.ext3 fsck.ext4 fsck.ext4dev fsck.minix fsck.msdos fsck.nfs fsck.vfat
Der Befehl fsck gibt Ihnen einen Fehler aus, wenn er keinen Dateisystemprüfer für das zu prüfende Dateisystem findet.
Wenn Sie beispielsweise fsck über eine NTFS-Partition ausführen, erhalten Sie die folgende Fehlermeldung. Es gibt kein fsck.ntfs unter /sbin. Das ergibt also die folgende Fehlermeldung.
# fsck /dev/sda2 fsck from util-linux 2.20.1 fsck: fsck.ntfs: not found fsck: error 2 while executing fsck.ntfs for /dev/sda2
3. Überprüfen Sie alle Dateisysteme in einem Lauf mit Option -A
Mit dieser Option können Sie alle Dateisysteme in einem einzigen Durchlauf von fsck überprüfen. Dies überprüft das Dateisystem in der Reihenfolge, die durch die fs_passno vorgegeben ist, die für jedes Dateisystem in /etc/fstab erwähnt wird.
Bitte beachten Sie, dass das Dateisystem mit einem fs_passno-Wert von 0 übersprungen und größer als 0 in der Reihenfolge geprüft wird.
Die /etc/fstab enthält die unten aufgeführten Einträge,
# cat /etc/fstab ## proc /proc proc nodev,noexec,nosuid 0 0 ## / was on /dev/sda5 during installation /dev/sda5 / ext4 errors=remount-ro 0 1 ## /mydata was on /dev/sda6 during installation /dev/sda6 /mydata ext2 defaults 0 2 ## /backup was on /dev/sda7 during installation /dev/sda7 /backup vfat defaults 0 3
Dabei werden die Dateisysteme mit gleicher fs_passno in Ihrem System parallel geprüft.
# fsck -A
Es wird empfohlen, dass Sie das Root-Dateisystem während dieser globalen Prüfung ausschließen, indem Sie die Option -R wie unten gezeigt hinzufügen.
# fsck -AR -y fsck from util-linux 2.20.1 e2fsck 1.42 (29-Nov-2011) /dev/sda6: clean, 95/2240224 files, 3793506/4476416 blocks dosfsck 3.0.12, 29 Oct 2011, FAT32, LFN /dev/sda7: 8 files, 50/1463400 clusters
Hinweis:Die Option -y wird in einem der folgenden Beispiele erläutert.
4. Überprüfen Sie nur einen bestimmten Dateisystemtyp mit der Option -t
Mit der Option fsck -t können Sie die Liste der zu prüfenden Dateisysteme angeben. Wenn Sie die Option -A verwenden, überprüft der fsck nur das Dateisystem, das mit dieser Option -t erwähnt wird. Beachten Sie, dass fslist ein kommagetrennter Wert ist.
Übergeben Sie nun ext2 als fslist-Wert an die Option -t, wie unten gezeigt:
# fsck -AR -t ext2 -y fsck from util-linux 2.20.1 e2fsck 1.42 (29-Nov-2011) /dev/sda6: clean, 11/2240224 files, 70327/4476416 blocks
In diesem Beispiel ist /dev/sda6 die einzige Partition, die mit dem Dateisystem ext2 erstellt wurde, daher wird es entsprechend überprüft.
Mit dem Schlüsselwort „no“ vor dem Dateisystem können Sie alle anderen Dateisystemtypen außer einem bestimmten Dateisystem prüfen.
Im folgenden Beispiel wird das ext2-Dateisystem von der Prüfung ausgeschlossen.
# fsck -AR -t noext2 -y fsck from util-linux 2.20.1 dosfsck 3.0.12, 29 Oct 2011, FAT32, LFN /dev/sda7: 0 files, 1/1463400 clusters
5. Führen Sie Fsck auf dem gemounteten Dateisystem nicht mit Option -M
ausEs ist eine gute Idee, diese Option als Standard für alle Ihre fsck-Operationen zu verwenden. Dies verhindert, dass Sie fsck versehentlich auf einem gemounteten Dateisystem ausführen.
# mount | grep "/dev/sd*" /dev/sda5 on / type ext4 (rw,errors=remount-ro) /dev/sda6 on /mydata type ext2 (rw) /dev/sda7 on /backup type vfat (rw)
Wie oben gezeigt, ist /dev/sda7 gemountet. Wenn Sie versuchen, fsck auf diesem /dev/sda7-eingehängten Dateisystem auszuführen (zusammen mit der Option -M), wird fsck einfach mit dem Exit-Code 0 beendet, wie unten gezeigt.
# fsck -M /dev/sda7 # echo $? 0
6. Überspringen Sie den Anzeigetitel mit Option -T
Mit der Option -T können Sie den Titel überspringen, der am Anfang der Ausgabe des fsck-Befehls angezeigt wird.
# fsck -TAR e2fsck 1.42 (29-Nov-2011) /dev/sda6 is mounted. e2fsck: Cannot continue, aborting. dosfsck 3.0.12, 29 Oct 2011, FAT32, LFN /dev/sda7: 8 files, 50/1463400 clusters
Beachten Sie, dass der Titel so etwas wie „fsck from util-linux 2.20.1“ ist.
7. Erzwingen Sie eine Dateisystemprüfung, selbst wenn sie sauber ist, indem Sie die Option -f
verwendenStandardmäßig versucht fsck, das saubere Dateisystem zu überspringen, um schneller zu arbeiten.
# fsck /dev/sda6 fsck from util-linux 2.20.1 e2fsck 1.42 (29-Nov-2011) /dev/sda6: clean, 95/2240224 files, 3793503/4476416 blocks
Sie können es zwingen, das Dateisystem zu überprüfen, indem Sie -f wie unten gezeigt verwenden.
# fsck /dev/sda6 -f fsck from util-linux 2.20.1 e2fsck 1.42 (29-Nov-2011) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sda6: 95/2240224 files (7.4% non-contiguous), 3793503/4476416 blocks
8. Versuchen Sie, erkannte Probleme automatisch mit Option -y
zu behebenIm folgenden Beispiel ist die Partition /dev/sda6 wie unten gezeigt beschädigt.
# mount /dev/sda6 /mydata # cd /mydata # ls -li ls: cannot access test: Input/output error total 72 49061 -rw-r--r-- 1 root root 8 Aug 21 21:50 1 49058 -rw-r--r-- 1 root root 36864 Aug 21 21:24 file_with_holes 49057 -rw-r--r-- 1 root root 8192 Aug 21 21:23 fwh 11 drwxr-xr-x 2 root root 49152 Aug 19 00:29 lost+found 2060353 ?rwSr-S-wT 16 root root 4096 Aug 21 21:11 Movies ? -????????? ? ? ? ? ? test
Wie oben zu sehen ist das Verzeichnis Movies und eine Datei test Attribute sind ungültig.
Im folgenden Beispiel übergibt -y „yes“ an alle Fragen, um die erkannte Beschädigung automatisch zu beheben.
# fsck -y /dev/sda6 fsck from util-linux 2.20.1 e2fsck 1.42 (29-Nov-2011) /dev/sda6 contains a file system with errors, check forced. Pass 1: Checking inodes, blocks, and sizes Inode 2060353 is a unknown file type with mode 0137642 but it looks like it is really a directory. Fix? yes Pass 2: Checking directory structure Entry 'test' in / (2) has deleted/unused inode 49059. Clear? yes Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sda6: ***** FILE SYSTEM WAS MODIFIED ***** /dev/sda6: 96/2240224 files (7.3% non-contiguous), 3793508/4476416 blocks
9. Reparieren vermeiden, aber Probleme mit Option -n
an Stdout meldenEs ist möglich, solche erkannten Probleme in stdout auszugeben, ohne das Dateisystem mit der Option fsck -n zu reparieren.
Zuerst könnten Sie das Problem in der Partition /dev/sda6 bemerken/sehen, dass das Movies-Verzeichnis (und die fwh-Datei) keine gültigen Attributdetails hat.
# mount /dev/sda6 /mydata # cd /mydata # ls -lrt total 64 drwxr-xr-x 2 root root 49152 Aug 19 00:29 lost+found ?--xrwx-wx 16 root root 4096 Aug 21 21:11 Movies ?-----x-wx 1 root root 8192 Aug 21 21:23 fwh -rw-r--r-- 1 root root 36864 Aug 21 21:24 file_with_holes -rw-r--r-- 1 root root 8 Aug 21 21:50 1
Das obige Problem in der spezifischen Partition wird in stdout angezeigt, ohne dass es wie folgt behoben wird:
Das folgende fsck-Beispiel zeigt das Problem in der Standardausgabe an, ohne es zu beheben. (Teilausgabe ist unten gezeigt).
# fsck -n /dev/sda6 fsck from util-linux 2.20.1 e2fsck 1.42 (29-Nov-2011) /dev/sda6 contains a file system with errors, check forced. Pass 1: Checking inodes, blocks, and sizes Inode 2060353 is a unknown file type with mode 0173 but it looks like it is really a directory. Fix? no Inode 2060353, i_blocks is 8, should be 0. Fix? no Pass 2: Checking directory structure Inode 2060353 (/Movies) has invalid mode (0173). Clear? no Inode 49057 (/fwh) has invalid mode (013). Clear? no Entry 'fwh' in / (2) has an incorrect filetype (was 1, should be 0). Fix? no Pass 3: Checking directory connectivity Unconnected directory inode 65409 (???) Connect to /lost+found? no '..' in ... (65409) is ??? (2060353), should be (0). Fix? no Unconnected directory inode 2076736 (???) Connect to /lost+found? no Pass 4: Checking reference counts Inode 2 ref count is 4, should be 3. Fix? no Inode 65409 ref count is 3, should be 2. Fix? no Inode 2060353 ref count is 16, should be 15. Fix? no Unattached inode 2060354 Connect to /lost+found? no Pass 5: Checking group summary information Block bitmap differences: -(164356--164357) -4149248 Fix? no Directories count wrong for group #126 (1, counted=0). Fix? no /dev/sda6: ********** WARNING: Filesystem still has errors ********** /dev/sda6: 96/2240224 files (7.3% non-contiguous), 3793508/4476416 blocks
10. Reparieren Sie die beschädigten Teile automatisch mit Option -a
Um den beschädigten Teil automatisch (ohne Benutzerinteraktion) zu reparieren, verwenden Sie die Option -a wie unten gezeigt.
# fsck -a -AR
Die Option -a ist die gleiche wie -p im Dienstprogramm e2fsck. Es bewirkt, dass e2fsck alle erkannten Probleme behebt, die ohne Benutzerinteraktion sicher behoben werden müssen.
Falls fsck die Aufmerksamkeit des Administrators erfordert, wird es einfach mit Fehlercode 4 beendet, bevor die Beschreibung des Problems gedruckt wird.
# fsck -a /dev/sda6 fsck from util-linux 2.20.1 /dev/sda6 contains a file system with errors, check forced. /dev/sda6: Inode 2060353 is a unknown file type with mode 0173 but it looks like it is really a directory. /dev/sda6: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY. (i.e., without -a or -p options) # echo $? 4
Wie Sie sich erinnern, kann die Option fsck -y hier verwendet werden, um das obige Problem automatisch zu beheben.
# fsck -y /dev/sda6 fsck from util-linux 2.20.1 e2fsck 1.42 (29-Nov-2011) /dev/sda6 contains a file system with errors, check forced. Pass 1: Checking inodes, blocks, and sizes Inode 2060353 is a unknown file type with mode 0173 but it looks like it is really a directory. Fix? yes Pass 2: Checking directory structure Inode 49057 (/fwh) has invalid mode (013). Clear? yes Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Block bitmap differences: -(164356--164357) Fix? yes Free blocks count wrong for group #5 (0, counted=2). Fix? yes Free blocks count wrong (682908, counted=682910). Fix? yes /dev/sda6: ***** FILE SYSTEM WAS MODIFIED ***** /dev/sda6: 95/2240224 files (7.4% non-contiguous), 3793506/4476416 blocks