e2fsck|ext2/ext3ファイルシステム検査コマンドの使い方とオプション一覧コマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド > e2fsck|ext2/ext3ファイルシステム検査コマンドの使い方とオプション一覧コマンド
「ext4の前のext2/ext3で、ファイルシステムの整合性が崩れた気がする」
「fsckとe2fsckはどう違うのか、対象は何か」
Linuxでファイルシステムの不整合を検出・修復するコマンドが e2fsck です。ext2/ext3/ext4で使われ、停電後やジャーナルが壊れた時の最初の一手として現場で使われています。

この記事では、e2fsck の基本書式から主要オプション、実機での出力例、そして「マウント中に実行してはいけない」「-pオプションの罠」など実務でつまづきやすいポイントまでをまとめます。

この記事のポイント

e2fsck は ext2/ext3/ext4 ファイルシステムの一貫性をチェック・修復する
・対象デバイスは必ず アンマウント するかシングルユーザモードで実行する
・主要オプションは -c(不良ブロック)-f(強制)-p(自動修復)-y(yes自動)
・終了コードでチェック結果を判定できる(0=正常、1=修復済み、4以上=異常)



「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

e2fsckコマンドとは(ext2/ext3/ext4の一貫性チェッカ)

e2fsck は「ext2 filesystem check」の略で、Linuxの ext2/ext3/ext4 ファイルシステムに対して、ディスク上のメタデータの整合性をチェックし、壊れていれば修復するコマンドです。

汎用コマンド fsck はファイルシステムのタイプを自動判別し、ext系であれば内部的に e2fsck を呼び出します。つまり、ext系ファイルシステムに対しては fsck /dev/sda1e2fsck /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 など

ポイントは次の3つです。

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 -l

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。