起動できない時の初動 - kernel panic と緊急モード
この記事で解決できること
- 画面が
kernel panicで固まる・(initramfs)で止まる・緊急モードに落ちる、それぞれの 意味と違い が分かる - 起動失敗が どの段階で止まっているか を切り分けられる
- GRUB からの旧カーネル起動・
fstab修復・fsckによる 最短の復旧手順 が身につく
結論(切り分けの型)
起動失敗は「どの段階で止まったか」で対処が全く変わる。上から順に到達点を確認する。
grub rescue>/grub>→ ブートローダ段階で停止(GRUB 設定・モジュール喪失)(initramfs)プロンプト → root ファイルシステムをマウントできない(初期ユーザ空間)Kernel panic - not syncing: ...→ カーネルが回復不能で停止- 緊急モード(emergency / rescue)のシェル → ユーザ空間には到達、起動が途中で失敗(多くは
fstab)
前提(対象環境)
- ディストリ:Ubuntu / Debian 系(systemd・GRUB 2 を想定)
- 物理コンソール または クラウドのシリアルコンソール / VNC で画面が見える状態
- 復旧操作には root 権限が必要(緊急モードのシェルは root)
起動失敗はどの段階で止まっているか?
結論: 画面に出る文字列で段階を判定する。
grubならブートローダ、(initramfs)なら root マウント失敗、Kernel panicならカーネル停止、emergency modeならユーザ空間到達後の失敗。
Linux の起動は大きく次の順で進む。止まった場所を特定することが復旧の第一歩。
| 段階 | 画面に出るサイン | 主な原因 |
|---|---|---|
| 1. ブートローダ | grub rescue> / grub> |
GRUB 設定・/boot の喪失、パーティション変更 |
| 2. 初期ユーザ空間 | (initramfs) プロンプト |
root デバイスが見つからない、FS 破損 |
| 3. カーネル | Kernel panic - not syncing: |
root マウント不能、必須ドライバ欠如、initramfs 破損 |
| 4. systemd | You are in emergency mode / rescue mode |
fstab のミス、必須マウント失敗、サービス起動失敗 |
まず試す価値があるのは旧カーネル起動
直前のカーネル更新後に起動しなくなった場合、GRUB の「Advanced options」から 1 つ前のカーネルで起動するだけで復旧することが多い(後述)。
kernel panic とは何か?
結論: kernel panic は、カーネルが回復不能なエラーを検知して安全のため停止した状態。多くは root ファイルシステムをマウントできない、または必須ドライバ・initramfs の欠落が原因。
カーネルが内部で致命的な矛盾を検知すると、これ以上続行するとデータ破壊につながると判断して意図的に停止する。これが kernel panic。アプリのクラッシュとは違い、システム全体が止まる。
典型的なメッセージ:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
これは「root ファイルシステムをマウントできなかった」サイン。よくある原因:
- カーネル更新後に initramfs が壊れている / 古い(必要なストレージドライバが含まれていない)
- GRUB の
root=パラメータが指す UUID / デバイスが変わった - ストレージ構成変更(LVM / RAID / ディスク交換)で root が見つからない
別パターンの Kernel panic - not syncing: Attempted to kill init! は、init(systemd)が起動直後に死んだことを示す。initramfs や root FS の破損を疑う。
panic 画面はスクロールして消えることがある。**最初の数行(最上部)**に本当の原因が出る。クラウドならシリアルコンソールのログ、物理機なら写真を撮って最上部を確認する。
GRUB メニューから旧カーネルで起動するには?
結論: 起動時に GRUB メニューを出し、「Advanced options」から 1 つ前のカーネルを選ぶ。直近のカーネル更新が原因なら、これだけで起動できる。
カーネル更新直後の起動不能は、旧カーネルで起動して切り分けるのが最短。
- 電源投入後、GRUB メニューを表示する(出ない場合は起動中に
Shift長押し、UEFI ならEsc連打) - Advanced options for Ubuntu を選ぶ
- 一覧から 1 つ前のバージョンのカーネルを選んで起動
旧カーネルで起動できたら、現行カーネルの initramfs を作り直す:
$ sudo update-initramfs -u -k all $ sudo update-grub
GRUB の起動エントリをその場で編集する
メニューでカーネルを選んだ状態で e を押すと、その場で起動パラメータを編集できる。
- 対象エントリで
eを押す linuxで始まる行の末尾(ro quiet splashなど)にカーソルを移動- 必要なパラメータを追記する(例:
systemd.unit=rescue.target) Ctrl + XまたはF10で起動
この編集は一時的で、再起動すると元に戻る。恒久化は /etc/default/grub 編集 + update-grub。
initramfs プロンプトで止まったら?
結論:
(initramfs)プロンプトは root ファイルシステムをマウントできなかった状態。多くは FS 破損で、fsckをかけてからexitで起動を続行できる。
(initramfs) という BusyBox のプロンプトが出るのは、カーネルは起動したが root をマウントできなかったため。直前に次のような行が出ることが多い。
ALERT! /dev/sda1 does not exist. Dropping to a shell!
または FS の不整合検知。対処:
# 認識されているブロックデバイスを確認 (initramfs) cat /proc/partitions (initramfs) ls /dev/sd* /dev/nvme* # 対象パーティションを検査・修復(必ずアンマウント状態で) (initramfs) fsck /dev/sda1 # 修復後、起動を続行 (initramfs) exit
fsck が「修復するか?」を聞いてきたら、原則 y。大量に出る場合は fsck -y /dev/sda1 で一括。終了後 exit で通常の起動シーケンスに戻る。
fsck はマウント中のファイルシステムにかけないこと。データ破損の危険がある。(initramfs) 段階や緊急モードの read-only マウント状態、あるいはライブ USB から実行する。
緊急モード(emergency / rescue)の入り方と違いは?
結論:
rescue.targetは基本サービスとローカル FS マウントありの単一ユーザ相当、emergency.targetは root を read-only マウントするだけの最小環境。fstab 破損などでは emergency に自動的に落ちる。
systemd には復旧用の 2 つのターゲットがある。できることの範囲が違う。
| ターゲット | マウント | サービス | 用途 |
|---|---|---|---|
rescue.target |
ローカル FS をマウント | 最小限を起動 | 単一ユーザ相当。通常の復旧作業向け |
emergency.target |
root のみ read-only | ほぼ起動しない | 最も最小。fstab 破損時の最後の砦 |
意図的に rescue / emergency で起動する
GRUB の編集(e)で linux 行末尾に追記する。
# rescue モード(推奨。多くの復旧はこれで足りる) systemd.unit=rescue.target # emergency モード(最小構成) systemd.unit=emergency.target
短縮形(rescue / emergency / 古い single 1)も使えるが、systemd.unit= 形式が確実。Ctrl + X で起動するとパスワード入力後に root シェルに入る。
緊急モードで root を書き込み可にする
emergency に落ちると root が read-only のことが多く、ファイルを編集できない。次で書き込み可に再マウントする。
$ mount -o remount,rw /
fstab のミスで緊急モードに落ちたら?
結論:
/etc/fstabの記述ミスや存在しないデバイス指定は起動を止め、emergency モードに落とす。該当行を修正し、mount -aで全行を検証してから再起動する。
緊急モードへの転落で最も多いのが /etc/fstab の問題。追加したマウントの UUID 間違い、デバイス未接続、タイプミスなどで、systemd がマウント待ちのまま起動を諦める。
復旧手順:
# 1. root を書き込み可で再マウント $ mount -o remount,rw / # 2. 直近のブートログから失敗したマウントを特定 $ journalctl -xb | grep -i -E 'mount|fstab|dependency' # 3. fstab を修正(問題行を一時的にコメントアウトしてもよい) $ nano /etc/fstab # 4. 設定を再読込し、全行のマウントを検証 $ systemctl daemon-reload $ mount -a
mount -a がエラーなく完了すれば fstab は健全。エラーが出るなら、その行がまだ問題を抱えている。
事前の保険: 必須でないマウントには nofail オプションを付けておくと、そのデバイスが見つからなくても起動が止まらない。外付けディスクやネットワークマウントに有効。
UUID=xxxx /mnt/data ext4 defaults,nofail 0 2
ブートログをどう読むか?
結論: 復旧後は
journalctl -xbで今回の、journalctl -b -1で前回の失敗ブートを読む。赤字(失敗ユニット)とDependency failedの行が起点。
起動できたら、再発防止のため何が起きたかを確認する。
# 今回のブート全体(-x で説明文付き) $ journalctl -xb # 直前(失敗した)のブート $ journalctl -b -1 # 失敗したユニットだけを一覧 $ systemctl --failed
Dependency failed for ... や Failed to mount ... の行が、起動が止まった直接の原因を指す。ディスク I/O エラーが混じる場合はハードウェア障害も疑う。
前回ブートのログ(-b -1)を読むには永続ジャーナルが必要。/var/log/journal/ が無い環境では再起動でログが消える。sudo mkdir -p /var/log/journal && sudo systemctl restart systemd-journald で永続化しておく。
やってはいけないこと
結論: マウント中の FS への fsck、原因未確認のままの再インストール、panic 画面の見落としは事態を悪化させる。最上部のログと段階の特定を最優先する。
- マウント中のファイルシステムに
fsckをかける → データ破損。必ず read-only / アンマウント状態で - panic 画面の最後の行だけ見て判断 → 本当の原因は最上部。スクロールアウトに注意
- 原因を切り分けずに OS 再インストール → fstab 1 行や旧カーネル起動で直るケースを潰してしまう
fstabを直さず問題行を放置 → 再起動のたびに emergency に落ちる- 永続ジャーナル未設定のまま再起動 → 失敗時のログが消えて原因不明になる