🎯 ゴール
- カーネル更新後に Ubuntu 24.04 が起動しなくなった場合の切り分けと復旧手順を整理
grub>プロンプトに落ちた状態からの手動復旧と,再発予防のための対策を整理
対象環境
| 項目 | 内容 |
|---|---|
| マシン | HP Desktop PC |
| OS | Ubuntu 24.04 LTS |
| ストレージ | NVMe SSD (/dev/nvme0n1) |
| 無線チップ | Realtek |
問題事象
Note症状
- Wi-Fi が認識しなくなる
- 有線キーボードを挿しても入力できない(通電はしている)
- マウスは動作する
- BIOS 画面ではキーボードが効く
根本原因
- 直近のカーネル更新により,入力ドライバと Realtek 無線ドライバのロードが失敗していた
復旧手順
1. 診断フェーズ(原因の切り分け)
1.1 ハードウェア生存確認
電源 ON 直後,F10 で BIOS Setup に入る
- BIOS でキーボードが効く → ハードは生きている.OS 側の問題
- BIOS でも効かない → ハード故障.修理案件
Note意思決定
- BIOSではキーボードは動作していたので,ハードの故障はなくkernel moduleまわりのトラブルであると推察
- 最新ではなく,1つ古いversionのkernelを用いて起動を試みると判断
2. GRUB プロンプトから手動起動
再起動し,ESCを連打して grub プロンプトモードへ移動
Tip
grub>プロンプトが出ている前提- TAB キーで補完が効くので積極的に活用.
2.1 パーティション確認
ls
→ (hd0) (hd0,gpt1) (hd0,gpt2) … が表示されます.
2.2 Ubuntu のルートパーティションを特定
ls (hd0,gpt2)/
bootetchomeusrなどが見えればそこがルート- 見えなければ
gpt3,gpt4… と順に試す
2.3 カーネルと initrd のファイル名を確認
ls (hd0,gpt2)/boot/
vmlinuz-6.8.0-XX-generic と initrd.img-6.8.0-XX-generic のバージョン番号を控えます.
2.4 手動起動
set root=(hd0,gpt2)
linux /boot/vmlinuz-6.8.0-XX-generic root=/dev/nvme0n1p2
initrd /boot/initrd.img-6.8.0-XX-generic
boot
Note
root=/dev/nvme0n1p2は NVMe SSD の場合(SATA なら/dev/sda2)- パーティション番号(末尾の
p2または2)は GRUB のgpt2と一致させる - カーネルバージョンが複数ある場合,古いほうから試す(新しいのが壊れている可能性が高いため)
3. 対策フェーズ
3.1 GRUB のデフォルトを動作するカーネルに固定
現在動いているカーネルバージョンを確認します.
uname -r/etc/default/grub を編集:
sudo nano /etc/default/grub以下のように変更:
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-XX-generic"
XX は uname -r の値に合わせます.設定を反映:
sudo update-grub3.2 GRUB の修復(必要なら)
UEFI / BIOS を確認:
[ -d /sys/firmware/efi ] && echo "UEFI" || echo "BIOS"| ファームウェア | 対応コマンド |
|---|---|
| UEFI | sudo update-grub のみで十分 |
| BIOS | 追加で sudo grub-install /dev/nvme0n1 |
Warning
パーティション(nvme0n1p2)ではなく ディスク全体(nvme0n1)を指定すること.
3.3 カーネル自動更新の一時停止(任意)
修正版カーネルがリリースされるまで自動更新で再発させたくない場合:
sudo apt-mark hold linux-image-generic linux-headers-generic数週間〜数か月後,解除:
sudo apt-mark unhold linux-image-generic linux-headers-generic3.4 壊れたカーネルの削除(慎重に)
インストール済みカーネル一覧:
dpkg --list | grep linux-image問題のあるカーネルを削除:
sudo apt remove linux-image-壊れたバージョン-generic
sudo update-grub
Warning
- 現在動いているカーネル(
uname -rで表示されるもの)は絶対に削除しない.
Appendix: 用語解説
glossary:
- def: NVMe (Non-Volatile Memory Express)
description: |
PCIe バス経由で直接接続する高速 SSD 用の通信プロトコル.
Linux 上では `/dev/nvme0n1` のように見え,`nvme0` は 1 台目のコントローラ,
`n1` はその上の 1 個目の名前空間 (≒ ディスク本体) を表す.
パーティションは `/dev/nvme0n1p1`,`/dev/nvme0n1p2` のように
`p<番号>` が付与される.
- def: SATA / sda
description: |
SATA は HDD・SSD を接続する従来からの規格.
SATA 接続のディスクは Linux 上で `/dev/sda`,`/dev/sdb` ... と
アルファベット順に認識され,パーティションは `/dev/sda1`,`/dev/sda2`
のように番号のみが付く.NVMe の `nvme0n1p2` に相当するのが SATA の `sda2`.
- def: GRUB (GRand Unified Bootloader)
description: |
Linux で広く使われるブートローダ.BIOS/UEFI から呼び出され,
カーネルと initramfs をメモリへロードして OS を起動する.
設定ファイルは `/etc/default/grub` と `/boot/grub/grub.cfg`.
`grub>` プロンプトに落ちるのは `grub.cfg` を読めなかった場合.
- def: grub> プロンプト
description: |
GRUB が設定ファイルを発見できなかったときに表示される最小シェル.
`ls`,`set root=`,`linux`,`initrd`,`boot` の 5 コマンドだけで
手動起動が可能.TAB 補完が効くため,パーティションやファイル名を
総当たりせずに済む.
- def: (initramfs) シェル
description: |
ルートファイルシステムをマウントできなかったときに落ちる
BusyBox ベースの緊急シェル.カーネル自体は起動しているが,
その先の OS 環境はまだ立ち上がっていない状態.
- def: initramfs / initrd
description: |
カーネル起動直後に展開される一時的なルートファイルシステム.
実ディスク上のルートをマウントするのに必要なドライバ (ストレージ,
ファイルシステム,暗号化など) を含む.ファイル名は通常
`/boot/initrd.img-<カーネルバージョン>`.
- def: vmlinuz
description: |
圧縮済みの Linux カーネル本体.`/boot/vmlinuz-<バージョン>-generic`
の形で配置される.GRUB の `linux` コマンドで指定する対象.
- def: UEFI / BIOS
description: |
PC の電源投入直後に動くファームウェア.UEFI は後継規格で
GPT パーティション・大容量ディスク・セキュアブートに対応.
Linux からは `/sys/firmware/efi` の有無で判別可能.
UEFI なら `update-grub` のみ,旧 BIOS (Legacy) なら
追加で `grub-install /dev/<ディスク全体>` が必要になる.
- def: GPT (GUID Partition Table)
description: |
UEFI 時代の標準パーティションテーブル形式.GRUB プロンプトでは
`(hd0,gpt1)`,`(hd0,gpt2)` のように表示される.`hd0` は 1 台目の
ディスク (NVMe/SATA を問わず) を指し,`gpt<N>` がパーティション番号.
- def: カーネル (kernel)
description: |
OS の中核となるプログラム.ハードウェア制御・プロセス管理・
メモリ管理などを担う.Ubuntu では `linux-image-<バージョン>-generic`
パッケージとして配布され,`uname -r` で現在動作中のバージョンを確認できる.
- def: カーネルモジュール
description: |
カーネルに後付けで組み込めるドライバなどの拡張機能.
Wi-Fi (Realtek)・キーボード入力 (evdev) などもモジュールとして
ロードされており,これらが失敗すると OS は起動しても
周辺機器が使えない状態になる.
- def: apt-mark hold
description: |
指定パッケージを `apt upgrade` 等で更新させないようにする仕組み.
壊れたカーネル更新の再発防止に使う.解除は `apt-mark unhold`.