「fsckとe2fsckはどう違うのか、対象は何か」
Linuxでファイルシステムの不整合を検出・修復するコマンドが
e2fsck です。ext2/ext3/ext4で使われ、停電後やジャーナルが壊れた時の最初の一手として現場で使われています。この記事では、
e2fsck の基本書式から主要オプション、実機での出力例、そして「マウント中に実行してはいけない」「-pオプションの罠」など実務でつまづきやすいポイントまでをまとめます。この記事のポイント
・e2fsck は ext2/ext3/ext4 ファイルシステムの一貫性をチェック・修復する
・対象デバイスは必ず アンマウント するかシングルユーザモードで実行する
・主要オプションは -c(不良ブロック)-f(強制)-p(自動修復)-y(yes自動)
・終了コードでチェック結果を判定できる(0=正常、1=修復済み、4以上=異常)
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
e2fsckコマンドとは(ext2/ext3/ext4の一貫性チェッカ)
e2fsck は「ext2 filesystem check」の略で、Linuxの ext2/ext3/ext4 ファイルシステムに対して、ディスク上のメタデータの整合性をチェックし、壊れていれば修復するコマンドです。汎用コマンド
fsck はファイルシステムのタイプを自動判別し、ext系であれば内部的に e2fsck を呼び出します。つまり、ext系ファイルシステムに対しては fsck /dev/sda1 も e2fsck /dev/sda1 も同じ動きをします。次のような場面で
e2fsck が必要になります。・停電や強制再起動の後、起動時に自動チェックが走った
・
fsck.ext4 がエラーを出してマウントできない・ジャーナルが壊れて
Mount failed: read-only filesystem が出る・サーバー移管前にディスクを健康状態でリリースしたい
ext4 環境でも
e2fsck が標準のチェッカで、fsck.ext4 は実体が e2fsck のシンボリックリンクになっています。e2fsckの基本書式
書式は単純で、オプションとデバイス名を渡すだけです。# e2fsck [オプション] [デバイス名] 例)e2fsck -cfpv /dev/hda1 →「/dev/hda1」のファイルシステムの一貫性をチェックする ※/dev/hda1 はIDEディスクの第1パーティション。SATA/SCSIなら /dev/sda1 など
・root権限が必要(一般ユーザーでは実行できない)
・対象デバイスはアンマウントしておく(マウント中の実行はファイルシステム破壊のリスク)
・オプションをつけずに実行すると対話モード(修復のたびに y/n を聞かれる)
e2fsckの主なオプション
| オプション | 意味 |
|---|---|
-c |
不良ブロックをチェックし、見つかったブロックを不良ブロックinodeに登録する |
-f |
ファイルシステムが「clean」(前回正常)でも強制的にチェックする |
-p |
問題があった場合、対話せずに自動的に修復する(preen mode) |
-v |
状況を詳細に表示する(verbose) |
-y |
修復確認の問い合わせに、すべて「yes」と答える |
-n |
修復は一切せず、すべて「no」と答えてレポートだけ取る(読み取り専用チェック) |
-b スーパーブロック番号 |
代替スーパーブロックを使って起動できないファイルシステムを救出する |
-D |
ディレクトリ最適化(後述)を行う |
-y と -p の違い
似たオプションで混同しやすいのが-y と -p です。・
-p(preen):安全な軽微な修復だけを自動で行う。判断が必要な深刻な不整合に当たると停止して人間に判断を委ねる・
-y:すべての問い合わせに yesを返す。深刻な不整合でも自動修復を進める本番運用やcronで自動的に走らせるのは
-p 一択です。-y はデータ復旧の手段がない時の最終手段として扱うのが安全です。実行例:マウント中に実行してしまった時の警告
冒頭で「対象はアンマウントしておく」と書きましたが、もしマウント中に実行すると、e2fsckが警告を出します。[pakira@Tiger ~]$ su - ← rootにスイッチします パスワード: ← rootパスワードは表示されません [root@Tiger ~]# e2fsck -cfpv /dev/hda1 ← /dev/hda1 をチェック /dev/hda1 is mounted. WARNING!!! Running e2fsck on a mounted filesystem may cause SEVERE filesystem damage. Do you really want to continue (y/n)? yes ← 対象ボリュームをアンマウント済み、またはシングルユーザモード起動の場合のみ 「y」と答える。それ以外では必ず「n」で中断する /boot: recovering journal 35 inodes used (0.13%) 2 non-contiguous inodes (5.7%) # of inodes with ind/dind/tind blocks: 8/3/0 15397 blocks used (14.75%) 0 bad blocks 0 large files 22 regular files 3 directories 0 character device files 0 block device files 0 fifos 0 links 1 symbolic link (1 fast symbolic link) 0 sockets
・
recovering journal:ext3/ext4のジャーナルから未反映トランザクションを回復・
0 bad blocks:不良ブロックがないことを確認(-c 指定時の成果)・
inodes used / blocks used:使用率の概況サマリ警告の「
SEVERE filesystem damage」は脅し文句ではなく、実際にマウント中(書き込みが走っている最中)にメタデータを書き換えると、ファイルが消える事故が起きます。本番環境では絶対に y と答えないでください。正しい手順:シングルユーザモードでe2fsckを実行する
本番サーバーのルートパーティションをチェックしたい場合は、シングルユーザモード(rescue mode)で再起動し、ルートを read-only でマウントした状態でe2fsck を実行します。シングルユーザモードの起動手順
GRUB2 が表示されているタイミングでe キーを押し、linux 行の末尾に single または 1 を追加して Ctrl+x で起動します。# GRUBの linux 行末尾に single を追加 linux /boot/vmlinuz-... root=/dev/sda1 ro single ↑ これを追記
ルートを read-only で再マウントしてe2fsckを実行
# シングルユーザモードに入った後 # mount -o remount,ro / # e2fsck -fpv /dev/sda1 # reboot
umount してチェックできます。# 例:/data パーティションをチェック # umount /data # e2fsck -fpv /dev/sdb1 # mount /data
e2fsckの終了コードでチェック結果を判定する
e2fsck はチェック結果を終了コードで返します。シェルスクリプトで自動運用する時に重要な情報です。| 終了コード | 意味 |
|---|---|
| 0 | エラーなし |
| 1 | エラーが見つかり、修復された |
| 2 | システムを再起動する必要がある |
| 4 | 未修復のエラーが残っている |
| 8 | 動作時エラー(オプション不正など) |
| 16 | 使い方エラー(書式間違い) |
| 32 | ユーザー操作によって中断された |
複数のエラーが重なった場合は、終了コードがビット和で返ります。
$? で受け取った後、echo $((rc & 4)) のようにビット演算で「未修復エラー残り」をチェックする運用も可能です。トラブルシュート・実務でよく当たる落とし穴
「Superblock invalid」で起動できない時はバックアップスーパーブロックで救出
ファイルシステムの先頭にあるスーパーブロックが壊れると、e2fsck自体が起動できません。ext2/ext3/ext4 はスーパーブロックを複数バックアップしているので、
-b オプションで代替を指定すれば救出できます。# バックアップスーパーブロックの一覧を取得 # mke2fs -n /dev/sda1 ... Backup superblock at 32768, 98304, 163840, 229376, ... # 代替スーパーブロックを使ってe2fsckを実行 # e2fsck -b 32768 /dev/sda1
mke2fs -n は実際にはフォーマットせず、もし作るならどこにスーパーブロックを置くかを表示するだけです。必ず -n を付けてください。「Bad magic number in super-block」が出る
これも先頭スーパーブロック破損のサインです。上記と同じく-b でバックアップを指定するか、デバイス名を間違えていないか(パーティションテーブルが壊れて /dev/sda1 ではなく /dev/sda2 が正解、など)を fdisk -l /dev/sda で再確認してください。e2fsckが終わらない・極端に遅い
大容量ディスク(数TB以上)に対する-c オプションでの不良ブロック走査は、HDDだと数十時間かかります。本番停止時間に収まらない場合は次の対応を検討してください。
・
-c は外して、メタデータの整合性チェックだけに絞る・
-c -c(2回指定)で非破壊リード/ライトテストになるが、これはさらに遅い・SMART情報(
smartctl -a /dev/sda)で物理障害が見えているなら、e2fsckより先にディスク交換を検討ext3/ext4でジャーナルが壊れた場合
ジャーナル自体が壊れている時は、e2fsck 単体では修復できないケースがあります。tune2fs -O ^has_journal /dev/sda1 でジャーナルを一旦無効化(ext2状態にする)→ e2fsck でチェック → tune2fs -j /dev/sda1 でジャーナル再作成、という流れで救出することがあります。データ損失の可能性があるため、必ずバックアップを取ってから実施してください。本記事のまとめ
| やりたいこと | コマンド例 |
|---|---|
| ファイルシステムの一貫性をチェックする | e2fsck -fpv /dev/sda1 |
| 不良ブロックも合わせてチェックする | e2fsck -cfpv /dev/sda1 |
| 読み取り専用でレポートだけ取る | e2fsck -n /dev/sda1 |
| 代替スーパーブロックで救出する | e2fsck -b 32768 /dev/sda1 |
| バックアップスーパーブロックの位置を確認する | mke2fs -n /dev/sda1 |
| 終了コードを確認する | e2fsck -fpv /dev/sda1; echo $? |
e2fsck は普段はカーネルが自動で動かしているので意識する機会が少ないコマンドですが、いざ起動できない時に頼りになります。シングルユーザモードへの入り方とセットで、手順を体に染み込ませておくと安心です。■関連コマンド
fsck / mke2fs / tune2fs / dumpe2fs / fdisk -l3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linuxログを調査する方法|/var/log/の読み方とgrep・journalctlの使い方
- 前のページへ:chkconfigでLinuxのサービス自動起動を設定する方法|systemctlへの移行早見表付き
- この記事の属するカテゴリ:Linuxコマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます