GNU/Linux >> Linux の 問題 >  >> Linux

ファイルシステムをチェックして修復する10のLinux Fsckコマンドの例

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

Linux
  1. Linux での mkdir および rmdir コマンドの例

  2. Linux での rm コマンドの例

  3. Linux での ps コマンドの例

  1. Linux Catコマンド:使用法と例

  2. Linux での swapon および swapoff コマンドの例

  3. w Linux でのコマンド例

  1. Linuxコマンド-概要と例

  2. Linuxのfsckコマンドでファイルシステムエラーをチェックして修復する

  3. 7 Linux df コマンドの例