Linuxový nástroj fsck se používá ke kontrole a opravě linuxových souborových systémů (ext2, ext3, ext4 atd.).
V závislosti na tom, kdy byl souborový systém naposledy zkontrolován, systém spustí během zavádění fsck, aby zkontroloval, zda je souborový systém v konzistentním stavu. Správce systému by jej také mohl spustit ručně, když dojde k problému se souborovým systémem.
Ujistěte se, že jste spustili fsck na nepřipojených souborových systémech, abyste se vyhnuli problémům s poškozením dat.
Tento článek vysvětluje 10 praktických příkladů, jak spustit příkaz fsck k odstraňování a opravě jakýchkoliv chyb souborového systému.
1. Kontrola souborového systému na diskovém oddílu
Nejprve si prohlédněte všechny dostupné oddíly ve vašem systému pomocí příkazu parted, jak je ukázáno níže.
# 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
Můžete zkontrolovat konkrétní souborový systém (například:/dev/sda6), jak je ukázáno níže.
# 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
Níže jsou uvedeny možné ukončovací kódy pro příkaz fsck.
- 0 – žádné chyby
- 1 – Opraveny chyby systému souborů
- 2 – Systém by měl být restartován
- 4 – Chyby systému souborů zůstaly neopravené
- 8 – Provozní chyba
- 16 – Chyba použití nebo syntaxe
- 32 – Fsck zrušeno na žádost uživatele
- 128 – Chyba sdílené knihovny
2. Příkaz Fsck specifický pro typ souborového systému
fsck interně používá příslušný příkaz filesystem checker pro operaci kontroly souborového systému. Tyto příkazy kontroly fsck jsou obvykle umístěny pod /sbin.
Následující příklad ukazuje různé možné příkazy kontroly fsck (například:fsck.ext2, fsck.ext3, fsck.ext4 atd.)
# cd /sbin # ls fsck* fsck fsck.cramfs fsck.ext2 fsck.ext3 fsck.ext4 fsck.ext4dev fsck.minix fsck.msdos fsck.nfs fsck.vfat
Příkaz fsck vám zobrazí chybu, když nenajde kontrolu souborového systému pro kontrolovaný souborový systém.
Pokud například spustíte fsck přes oddíl ntfs, zobrazí se následující chybová zpráva. Pod /sbin není žádný fsck.ntfs. Tím se zobrazí následující chybová zpráva.
# 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. Zaškrtněte Všechny systémy souborů v jednom běhu pomocí volby -A
Pomocí této možnosti můžete zkontrolovat všechny souborové systémy v jednom spuštění fsck. Toto kontroluje souborový systém v pořadí daném fs_passno uvedeným pro každý souborový systém v /etc/fstab.
Vezměte prosím na vědomí, že souborový systém s hodnotou fs_passno 0 jsou přeskočeny a větší než 0 jsou zaškrtnuty v objednávce.
/etc/fstab obsahuje položky, jak jsou uvedeny níže,
# 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
Zde je souborový systém se stejným fs_passno kontrolován paralelně ve vašem systému.
# fsck -A
Během této globální kontroly se doporučuje vyloučit kořenový souborový systém přidáním volby -R, jak je uvedeno níže.
# 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
Poznámka:Možnost -y je vysvětlena v jednom z níže uvedených příkladů.
4. Zaškrtněte Pouze určitý typ souborového systému pomocí volby -t
Pomocí volby fsck -t můžete zadat seznam souborového systému, který má být zkontrolován. Když používáte volbu -A, fsck zkontroluje pouze souborový systém uvedený s touto volbou -t. Všimněte si, že fslist jsou hodnoty oddělené čárkami.
Nyní předejte ext2 jako hodnotu fslist volbě -t, jak je uvedeno níže:
# 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
V tomto příkladu je /dev/sda6 jediným oddílem vytvořeným se souborovým systémem ext2, takže bude odpovídajícím způsobem zkontrolován.
Pomocí klíčového slova ‚ne‘ před souborovým systémem můžete zkontrolovat všechny ostatní typy souborových systémů kromě konkrétního souborového systému.
V následujícím příkladu je souborový systém ext2 z kontroly vyloučen.
# 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. Nespouštějte Fsck na připojeném souborovém systému pomocí volby -M
Je dobré použít tuto možnost jako výchozí pro všechny operace fsck. To vám zabrání v náhodném spuštění fsck na souborovém systému, který je připojen.
# 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)
Jak je uvedeno výše, /dev/sda7 je připojen. Pokud se pokusíte spustit fsck na tomto připojeném souborovém systému /dev/sda7 (spolu s volbou -M), fsck se jednoduše ukončí s návratovým kódem 0, jak je uvedeno níže.
# fsck -M /dev/sda7 # echo $? 0
6. Přeskočte zobrazovaný titul pomocí volby -T
Pomocí volby -T můžete přeskočit nadpis zobrazený na začátku výstupu příkazu 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
Všimněte si, že název je něco jako „fsck z util-linux 2.20.1“.
7. Vynutit kontrolu souborového systému, i když je vyčištěn pomocí volby -f
Ve výchozím nastavení se fsck pokouší přeskočit čistý souborový systém, aby mohl pracovat rychleji.
# 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
Můžete jej vynutit, aby zkontroloval systém souborů pomocí -f, jak je ukázáno níže.
# 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. Pokuste se opravit zjištěné problémy automaticky pomocí volby -y
V následujícím příkladu je oddíl /dev/sda6 poškozen, jak je uvedeno níže.
# 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
Jak je vidět výše, adresář Filmy a test souboru atributy jsou neplatné.
V následujícím příkladu -y předá všem otázkám „ano“ a automaticky opraví zjištěné poškození.
# 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. Vyhněte se opravě, ale nahlaste problémy Stdout pomocí volby -n
Takto zjištěné problémy je možné vytisknout do stdout bez opravy souborového systému pomocí volby fsck -n.
Nejprve si můžete všimnout/vidět problém v oddílu /dev/sda6, že adresář Movies (a soubor fwh) nemá platné podrobnosti o atributech.
# 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
Výše uvedený problém v konkrétním oddílu zobrazený v stdout, aniž byste jej opravili následujícím způsobem,
Následující příklad fsck zobrazuje problém v stdout, aniž by jej opravoval. (částečný výstup je zobrazen níže).
# 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. Automaticky opravit poškozené části pomocí volby -a
Chcete-li poškozenou část opravit automaticky (bez zásahu uživatele), použijte volbu -a, jak je uvedeno níže.
# fsck -a -AR
Volba -a je stejná jako -p v obslužném programu e2fsck. To způsobí, že e2fsck opraví všechny zjištěné problémy, které musí být bezpečně opraveny bez zásahu uživatele.
V případě, že fsck vyžaduje pozornost správce, před tiskem popisu problému se jednoduše ukončí s kódem chyby 4.
# 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
Jak si pamatujete, možnost fsck -y zde může být použita k automatickému vyřešení výše uvedeného problému.
# 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