L'utilità Linux fsck viene utilizzata per controllare e riparare i filesystem Linux (ext2, ext3, ext4, ecc.).
A seconda di quando è stata l'ultima volta che un file system è stato controllato, il sistema esegue fsck durante l'avvio per verificare se il file system è in uno stato coerente. L'amministratore di sistema potrebbe anche eseguirlo manualmente quando si verifica un problema con i filesystem.
Assicurati di eseguire fsck su un file system non montato per evitare problemi di danneggiamento dei dati.
Questo articolo spiega 10 esempi pratici su come eseguire il comando fsck per risolvere e correggere eventuali errori del file system.
1. Controllo del file system su una partizione del disco
Innanzitutto, visualizza tutte le partizioni disponibili sul tuo sistema usando il comando parted come mostrato di seguito.
# 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
Puoi controllare un filesystem specifico (ad esempio:/dev/sda6) come mostrato di seguito.
# 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
Di seguito sono riportati i possibili codici di uscita per il comando fsck.
- 0 – Nessun errore
- 1 – Errori del filesystem corretti
- 2 – Il sistema dovrebbe essere riavviato
- 4 – Errori del filesystem non corretti
- 8 – Errore operativo
- 16 – Errore di utilizzo o sintassi
- 32 – Fsck annullato su richiesta dell'utente
- 128 – Errore di libreria condivisa
2. Comando Fsck specifico per un tipo di filesystem
fsck utilizza internamente il rispettivo comando di verifica del filesystem per un'operazione di verifica del filesystem. Questi comandi fsck checker si trovano in genere in /sbin.
L'esempio seguente mostra i vari possibili comandi di fsck checker (ad esempio:fsck.ext2, fsck.ext3, fsck.ext4, ecc.)
# cd /sbin # ls fsck* fsck fsck.cramfs fsck.ext2 fsck.ext3 fsck.ext4 fsck.ext4dev fsck.minix fsck.msdos fsck.nfs fsck.vfat
Il comando fsck ti darà un errore quando non trova un controllo del filesystem per il filesystem che viene controllato.
Ad esempio, se esegui fsck su una partizione ntfs, riceverai il seguente messaggio di errore. Non c'è fsck.ntfs in /sbin. Quindi, questo dà il seguente messaggio di errore.
# 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. Controlla tutti i filesystem in un'unica esecuzione usando l'opzione -A
Puoi controllare tutti i filesystem in una singola esecuzione di fsck usando questa opzione. Questo controlla il file system nell'ordine dato da fs_passno menzionato per ogni filesystem in /etc/fstab.
Tieni presente che i filesystem con un valore fs_passno pari a 0 vengono ignorati e nell'ordine vengono selezionati i valori maggiori di 0.
Il file /etc/fstab contiene le voci elencate di seguito,
# 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
Qui, il filesystem con lo stesso fs_passno viene controllato in parallelo nel tuo sistema.
# fsck -A
Si consiglia di escludere il filesystem di root durante questo controllo globale aggiungendo l'opzione -R come mostrato di seguito.
# 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
Nota:l'opzione -y è spiegata in uno degli esempi seguenti.
4. Seleziona solo un tipo di filesystem specifico usando l'opzione -t
Usando l'opzione fsck -t, puoi specificare l'elenco di filesystem da controllare. Quando si utilizza con l'opzione -A, fsck controllerà solo il filesystem menzionato con questa opzione -t. Nota che fslist è un valore separato da virgole.
Ora, passa ext2 come valore fslist all'opzione -t come mostrato di seguito:
# 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 questo esempio, /dev/sda6 è l'unica partizione creata con il filesystem ext2, quindi viene controllata di conseguenza.
Usando la parola chiave "no" davanti al filesystem, puoi controllare tutti gli altri tipi di filesystem tranne un particolare filesystem.
Nell'esempio seguente, il filesystem ext2 è escluso dal controllo.
# 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. Non eseguire Fsck su Mounted Filesystem usando l'opzione -M
È una buona idea usare questa opzione come predefinita con tutte le tue operazioni fsck. Ciò ti impedisce di eseguire fsck accidentalmente su un filesystem montato.
# 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)
Come mostrato sopra, /dev/sda7 è montato. Se provi a eseguire fsck su questo filesystem montato /dev/sda7 (insieme all'opzione -M), fsck uscirà semplicemente con il codice di uscita 0 come mostrato di seguito.
# fsck -M /dev/sda7 # echo $? 0
6. Salta il titolo visualizzato usando l'opzione -T
Usando l'opzione -T, puoi saltare il titolo visualizzato all'inizio dell'output del comando fsck.
# 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
Nota che il titolo è qualcosa come "fsck da util-linux 2.20.1".
7. Forza un controllo del filesystem anche se è pulito usando l'opzione -f
Per impostazione predefinita fsck tenta di saltare il file system pulito per eseguire un lavoro più rapido.
# 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
Puoi forzarlo a controllare il file system usando -f come mostrato di seguito.
# 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. Tentativo di risolvere automaticamente i problemi rilevati utilizzando l'opzione -y
Nell'esempio seguente, la partizione /dev/sda6 è danneggiata come mostrato di seguito.
# 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
Come visto sopra, la directory Film e un file test gli attributi non sono validi.
Nell'esempio seguente, -y passerà "yes" a tutte le domande per correggere automaticamente il danneggiamento rilevato.
# 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. Evita la riparazione, ma segnala i problemi a Stdout utilizzando l'opzione -n
È possibile stampare tali problemi rilevati in stdout senza riparare il filesystem utilizzando l'opzione fsck -n.
Innanzitutto, potresti notare/vedere il problema nella partizione /dev/sda6 che la directory Movies (e il file fwh) non ha dettagli di attributo validi.
# 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
Il problema precedente nella partizione specifica visualizzata in stdout senza correggerlo come segue,
L'esempio fsck seguente mostra il problema nello stdout senza risolverlo. (l'output parziale è mostrato di seguito).
# 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. Ripara automaticamente le porzioni danneggiate usando l'opzione -a
Per riparare automaticamente la parte danneggiata (senza alcuna interazione da parte dell'utente), utilizzare l'opzione -a come mostrato di seguito.
# fsck -a -AR
L'opzione -a è la stessa di -p nell'utilità e2fsck. Fa sì che e2fsck risolva tutti i problemi rilevati che devono essere risolti in modo sicuro senza l'interazione dell'utente.
Nel caso in cui fsck richieda l'attenzione dell'amministratore, esce semplicemente con il codice di errore 4 prima di stampare la descrizione del problema.
# 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
Come ricorderai, l'opzione fsck -y può essere utilizzata qui per risolvere automaticamente il problema precedente.
# 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