fsck

提供: ArchWiki
2021年8月1日 (日) 20:44時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (カテゴリを追加)
ナビゲーションに移動 検索に移動

関連記事

fsck"file system check" の略であり、Linux のファイルシステムをチェックしたり修復するのに使われます。通常、全てのファイルシステムをチェックするのに必要な時間をけずるため、fsck プログラムは異なる物理ディスクドライブのファイルシステムを同時に処理します (参照: fsck(8))。

Arch Linux のブートプロセスでは起動するたびに簡便に fsck を実行してドライブ上の全てのパーティションを自動的にチェックします。そのため、特に必要がないかぎりは基本的にコマンドラインを使用する必要はありません。

ブート時のチェック

仕組み

2つの方法があります:

  1. mkinitcpio には fsck フックによって、マウントする前に root ファイルシステムを fsck するオプションがあります。これを使う場合、root を rw カーネルパラメータで読み書き可能でマウントする必要があります [1]
  2. systemd は (/etc/fstab またはユーザーによるユニットファイルで指定された) fsck パス番号が 0 より大きいファイルシステムの fsck を実行します。root ファイルシステムの場合、最初にカーネルパラメータ ro で読み取り専用でマウントして、それから fstab から読み書き可能で再度マウントする必要があります (defaults マウントオプションには rw が含まれています)。

デフォルトで1番目の方法が推奨されています。インストールガイドに従った場合はこちらを使うことになります。2番目の方法を使いたい場合は、mkinitcpio.conf から fsck フックを削除してカーネルコマンドラインで ro を使ってください。どちらの方法を使っていたとしても、カーネルパラメータ fsck.mode=skip を使うことで fsck を完全に無効化することが可能です。

強制的にチェック

base mkinitcpio フックを使っている場合、カーネルパラメータで起動時に fsck.mode=force を設定することで強制的に fsck をすることができます。マシンに存在する全てのファイルシステムをチェックします。

また、systemd が提供している systemd-fsck@.service(8) は initramfs でチェックされないファイルシステムも全てチェックされます。ただし、ルートファイルシステムをチェックするとファイルシステムを再マウントしなくてはならないため起動プロセスが遅くなるので注意してください。

ノート: 他の GNU/Linux ディストリビューションを使っていた場合、forcefsck という名前のファイルをファイルシステムのルートに書き出す方法や、shutdown コマンドと -F フラグを使用する方法は、昔の SysVinitUpstart の初期バージョンでしか動作せず、systemd では使えないので注意してください。Arch Linux で使うことができるのは上述の方法だけです。

ヒントとテクニック

破損ブロックを修復

破損箇所を自動的に修復するには、次を実行:

警告: このコマンドは修復するべきかどうか尋ねません。コマンドを実行した時点で答えは Yes と受け取ります。
# fsck -a

破損ブロックをインタラクティブに修復

ヒント: これはブートパーティション上のファイルが変更されており、ジャーナルを更新するのに失敗した場合に使えます。この場合はブートパーティションをアンマウントしてから次のコマンドを実行してください:

破損箇所を修復するには、次を実行:

# fsck -r <drive>

チェックの頻度を変更

デフォルトでは、fsck は30回起動するたびにファイルシステムをチェックします (パーティションごとに別々にカウントされます)。チェックの頻度を変更するには、次を実行:

# tune2fs -c 20 /dev/sda1

上の例では、20 が次のチェックを行うまでの起動回数です。

1 を設定すると起動時に毎回スキャンを行い、0 を設定すると一切スキャンしなくなります。

ヒント: 指定パーティションの fsck 実行頻度と現在のマウント回数を見るには次のコマンドを使います:
# dumpe2fs -h /dev/sda1 | grep -i 'mount count'

fstab のオプション

fstab はシステムの設定ファイルであり、マウントするパーティション (ファイルシステム) とファイルシステムツリーを Linux カーネルに指示するのに使われます。

基本的な /etc/fstab エントリは以下のようになります:

/dev/sda1   /         ext4      defaults       0  1
/dev/sda2   /other    ext4      defaults       0  2
/dev/sda3   /win      ntfs-3g   defaults       0  0

6番目のカラム (太字) が fsck のオプションです。

  • 0 = チェックしない。
  • 1 = 最初にチェックするファイルシステム (パーティション)。/ (root パーティション) は 1 に設定してください。
  • 2 = 他のチェックするファイルシステム。

トラブルシューティング

分割した /usr パーティションで fsck が動作しない

  1. /etc/mkinitcpio.conf に必要なフックを記述していることを確認してください。また、このファイルを編集した後にはかならず initramfs イメージを再生成する必要があります。
  2. fstab を確認してください。最後のフィールドはルートパーティションだけを "1" にする必要があります。それ以外はすべて "2" か "0" にします。他の誤字もないように注意深く確認してください。

ext2fs : no external journal

電源切断により、ext3/4 ファイルシステムが通常の方法で修復できないほど破損する場合があります。普通は fsck が外部ジャーナルを見つけられないというプロンプトを出します。その場合は次の一連のコマンドを実行してください:

ディレクトリを指定してそのパーティションをアンマウントします

# umount <directory>

新しいジャーナルをパーティションに書き込みます

# tune2fs -j /dev/<partition>

fsck を起動してパーティションを修復します

# fsck -p /dev/<partition>