「ちょっと時間が空いたから、とりあえずパッケージを最新にするか」ぐらいの軽い気持ちで apt upgrade したら、Ubuntu が起動しなくなってしまった。原因はさっぱり分かってないけど、再び同じことが起きた時のために対処法を記しておく。
※ 以下の対処法は私の環境での話です。みなさまが行う場合には各々の環境に併せてコマンドの中身を変更し、自己責任で行っていただくようお願いします。
環境
- PC に HDD(SSD)を2台搭載しているので、1台に Ubuntu、もう1台に Windows をインストールしている
- GRUB で dual boot できるように設定していた
- Ubuntu をインストールした HDD は2つの partition に分けていて、ひとつ(
/dev/sda1
)を EFI に使い、もうひとつ(/dev/sda2
)をファイルシステムの root (/
) にマウントしている
事象
- apt upgrade したら、kernel が 6.8 系から 6.11 に upgrade された
- もしかしたらこの時に GRUB も upgrade されたかもしれない
- 今まで apt upgrade で kernel が更新された時は、自動的に update-grub などが実行されていたので、apt upgrade が終わったら何も考えずに再起動した
- PC が起動したら
grub>
という GRUB のプロンプトが表示されるだけで、Ubuntu が起動されない -
grub> ls
コマンドを実行すると、HDD は正しく認識されている -
grub> ls (hd0,gpt2)/
を見ると、ファイルシステムは壊れていなさそう -
grub> ls (hd0,gpt2)/boot/
を見ると、vmlinuz や initrd はちゃんとある
これらのことから、Ubuntu の中身は壊れておらず、なんらかの原因で GRUB 関係が壊れているものと想像する。
インストール済みの Ubuntu の起動
Ubuntu 自体が壊れているわけではないので、以下のどれかの方法でインストール済みの Ubuntu を起動、もしくはそれと同様の状態にする。
GRUB から Ubuntu を起動する
grub からコマンドで Ubuntu を起動しようとしたが上手くいかなかったので、インストールに使った USB から boot し、そこから強制的に HDD 上のデバイスをマウントした。
一通り直してから気づいたのだが、もしかしたら以下のコマンドで boot できたのかもしれない。
grub> set root=(hd0,gpt2)
grub> linux /boot/vmlinuz-6.11.0-17-generic root=/dev/sda2
grub> initrd /boot/initrd.img-6.11.0-17-generic
grub> boot
USB から boot し、HDD 上のデバイスを mount する
上にも書いた通り、grub コマンドでは上手く行かなかったので、PC に Ubuntu のインストール USB を刺し、BIOS の Boot Selector で USB を指定して Ubuntu を立ち上げた。
BIOS の Boot Selector を起動するには、PC の電源を入れた後に(私の PC の BIOS では) F11 を連打すればよい。
Ubuntu を立ち上げたら、適当にターミナルを開き、以下のコマンドを入力することによって HDD 上のデバイスを強制的にマウントし、chroot でマウントポイントが root になるよう変更する。
> sudo su -
> mount /dev/sda2 /mnt
> mount -B /dev/sda1 /mnt/boot/efi
> for i in /dev /dev/pts /proc /sys /run; do mount -B $i /mnt/$i; done
> chroot /mnt
Boot Selector で Ubuntu のデバイスを指定する
私の今回の場合は、実は上記2つの方法のどちらも用いていない。
F11 の連打で BIOS の Boot Selector を立ち上げ、そこから Ubuntu のデバイスを指定したら、なんとあっさり Ubuntu が立ち上がってしまった。
なのでまぁこれでも使えるっちゃ使えるので良いのだけれども、毎回 F11 連打するのはメチャクチャ面倒なので、ちゃんと GRUB を直すことにする。
GRUB の設定変更
grub のコマンドで立ち上げた場合も、USB で boot して mount, chroot した場合も、Boot Selector から Ubuntu を起動した場合も、以下から同じ。
apt upgrade によって GRUB の設定がリセットされてしまったようなので、最初から GRUB の設定をする。
変更するファイルは /etc/default/grub
のみ。
以下は私の設定なので、お好みで。
- GRUB の表示画面
GRUB_TIMEOUT_STYPE=menu
- GRUB のタイムアウト
GRUB_TIMEOUT=0
- GRUBのスタイル
-
GRUB_CMDLINE_LINUX_DEFAULT="quiet text"
- "quiet splash" だとフォントが小さすぎて見にくいから
-
- Windows がインストールされているデバイスを検索して表示する
GRUB_DISABLE_OS_PROBER=false
他は変更する必要がない。
GRUB の再インストールとアップデート
> sudo grub-install --efi-directory=/boot/efi
> sudo update-grub
BIOS に EFI を再認識させる
上記を行い再起動しても、症状は直らない。
一旦 PC の電源を入れ直し、F2 の連打で(F2 かどうかは BIOS 依存)BIOS のメニューを立ち上げる。
そして Boot の設定から、一旦 boot device を全部 disable にしてから、再度 Ubuntu や Windows のデバイスを設定する。
最後に、もう一度 PC の電源を入れ直せば、全部直っている、はず。
最後に
色々試行錯誤しながらやって直ったので、上記の通りやっても素直に直らないかも。
ただ、Ubuntu 自体は壊れたわけでも失われたわけでもないので、どうにかすればきっとちゃんと直るはず。
そして、あくまで自己責任でお願いします。