Linux fsck ユーティリティは、Linux ファイルシステム (ext2、ext3、ext4 など) のチェックと修復に使用されます。
ファイルシステムが最後にチェックされたのがいつであったかに応じて、システムはブート時に fsck を実行して、ファイルシステムが一貫した状態にあるかどうかをチェックします。ファイルシステムに問題がある場合、システム管理者は手動で実行することもできます。
データ破損の問題を回避するために、マウントされていないファイル システムで fsck を実行してください。
この記事では、fsck コマンドを実行してファイル システム エラーのトラブルシューティングと修正を行う方法に関する 10 の実用的な例について説明します。
1.ディスク パーティションのファイル システム チェック
まず、以下に示すように parted コマンドを使用して、システムで利用可能なすべてのパーティションを表示します。
# 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
以下に示すように、特定のファイルシステム (例:/dev/sda6) を確認できます。
# 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
fsck コマンドの終了コードは次のとおりです。
- 0 – エラーなし
- 1 – ファイルシステムのエラーが修正されました
- 2 – システムを再起動する必要があります
- 4 – ファイルシステムのエラーが未修正のまま
- 8 – 操作エラー
- 16 – 使用法または構文エラー
- 32 – ユーザーのリクエストにより Fsck がキャンセルされました
- 128 – 共有ライブラリ エラー
2.ファイルシステムの種類に固有の fsck コマンド
fsck は、ファイルシステム チェック操作のために、それぞれのファイル システム チェッカー コマンドを内部的に使用します。これらの fsck チェッカー コマンドは通常、/sbin の下にあります。
次の例は、可能なさまざまな fsck チェッカー コマンドを示しています (例:fsck.ext2、fsck.ext3、fsck.ext4 など)。
# cd /sbin # ls fsck* fsck fsck.cramfs fsck.ext2 fsck.ext3 fsck.ext4 fsck.ext4dev fsck.minix fsck.msdos fsck.nfs fsck.vfat
fsck コマンドは、チェックされているファイル システムのファイル システム チェッカーが見つからない場合、エラーを返します。
たとえば、ntfs パーティションに対して fsck を実行すると、次のエラー メッセージが表示されます。 /sbin の下に fsck.ntfs はありません。そのため、次のエラー メッセージが表示されます。
# 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.オプション -A を使用して、1 回の実行ですべてのファイルシステムをチェックします
このオプションを使用すると、fsck の 1 回の実行ですべてのファイルシステムをチェックできます。これにより、/etc/fstab 内の各ファイルシステムについて記載されている fs_passno によって指定された順序でファイル システムがチェックされます。
fs_passno 値が 0 のファイルシステムはスキップされ、0 より大きいファイルシステムが順番にチェックされることに注意してください。
/etc/fstab には、以下に示すエントリが含まれています。
# 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
ここでは、同じ fs_passno を持つファイルシステムがシステムで並行してチェックされます。
# fsck -A
以下に示すように -R オプションを追加して、このグローバル チェック中にルート ファイルシステムを除外することをお勧めします。
# 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
注:オプション -y は、以下の例の 1 つで説明されています。
4.オプション -t を使用して特定のファイルシステム タイプのみをチェックする
fsck -t オプションを使用すると、チェックするファイルシステムのリストを指定できます。オプション -A を使用している場合、fsck はこのオプション -t で指定されたファイルシステムのみをチェックします。 fslist はカンマ区切りの値であることに注意してください。
次に、以下に示すように、ext2 を fslist 値として -t オプションに渡します。
# 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
この例では、/dev/sda6 がファイルシステム ext2 で作成された唯一のパーティションであるため、それに応じてチェックされます。
ファイルシステムの前にキーワード「no」を使用すると、特定のファイルシステムを除く他のすべてのファイルシステム タイプをチェックできます。
次の例では、ext2 ファイルシステムがチェックから除外されています。
# 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.オプション -M を使用して、マウントされたファイルシステムで Fsck を実行しないでください
すべての fsck 操作で、このオプションをデフォルトとして使用することをお勧めします。これにより、マウントされているファイルシステムで誤って fsck を実行することを防ぎます。
# 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)
上記のように、/dev/sda7 がマウントされます。この /dev/sda7 マウントされたファイルシステムで fsck を実行しようとすると (-M オプションを指定して)、fsck は以下に示すように終了コード 0 で終了します。
# fsck -M /dev/sda7 # echo $? 0
6.オプション -T を使用して表示タイトルをスキップ
オプション -T を使用すると、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
タイトルは「util-linux 2.20.1 からの fsck」のようなものであることに注意してください。
7.オプション -f を使用して、クリーンであってもファイルシステム チェックを強制する
デフォルトでは、fsck はクリーンなファイル システムをスキップして、処理を高速化しようとします。
# 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
以下に示すように、-f を使用して強制的にファイル システムをチェックすることができます。
# 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.オプション -y を使用して、検出された問題の自動修正を試みます
次の例では、/dev/sda6 パーティションが次のように破損しています。
# 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
上記のように、ディレクトリ Movies およびファイル test 属性が無効です。
次の例では、-y はすべての質問に「はい」を渡し、検出された破損を自動的に修正します。
# 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.修復は避けますが、オプション -n を使用して Stdout に問題を報告してください
fsck -n オプションを使用してファイルシステムを修復せずに、そのような検出された問題を stdout に出力することができます。
まず、パーティション /dev/sda6 に、Movies ディレクトリ (および fw ファイル) に有効な属性の詳細がないという問題があることに気付きます。
# 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
上記の問題は、stdout に表示される特定のパーティションで、次のように修正せずに、
次の fsck の例では、問題を修正せずに stdout に表示します。 (出力の一部を以下に示します)。
# 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.オプション -a を使用して損傷部分を自動的に修復します
損傷した部分を (ユーザーの操作なしで) 自動的に修復するには、以下に示すようにオプション -a を使用します。
# fsck -a -AR
オプション -a は、e2fsck ユーティリティの -p と同じです。これにより、ユーザーの操作なしで安全に修正する必要がある検出された問題を e2fsck が修正します。
fsck が管理者の注意を必要とする場合、問題の説明を表示する前に、単にエラー コード 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
ここで fsck -y オプションを使用すると、上記の問題を自動的に修正できます。
# 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