お金をかけずにサーバーの勉強をしよう

Ubuntuで 1つ前のカーネルに戻す

2024年4月11日

メニューへ戻る

カーネルをアップデートしたら画面が立ち上がらなくなった…。

※実際にデスクトップが立ち上がらなくなったのですが、このページを書くために GRUBのメニューを弄り回して再起動を繰り返しているうちに [5.15.0-102]で普通に立ち上がるようになってしまいました。
原因は不明ながらも「1つ前のカーネルで立ち上げる方法には変わりありません。

私は普段遣いの PCとして VMware Workstation Playerの仮想マシンにある Lubuntu 22.04を愛用しています。

今日カーネルのアップデートがあって、5.15.0-102になったんですが、その後からデスクトップが起動しなくなってしまいました。

ログイン画面でパスワードを入力したあとは画面が真っ暗のまま先に進みません。

インターネットで調べてみると、VirtualBox上の Windows 7がクラッシュするって報告が上っていましたので、バーチャルディスプレイドライバあたりの同じ理由なのかなと思います。

カーネルは次のアップ−デートで直るとして、理由はさておき今の状態じゃ使えませんから、1つ前のカーネルに戻すことにします。

これまでこの操作をしたことが無かったので、『Software Desigin』誌でお馴染みの技術評論社の記事を参考に真似してやってみました。
第743回 Ubuntuの標準ブートローダーであるGRUBを改めて見直す

具体的には GRUBの変数を書き換え、ブートメニューの操作を自動化して、デフォルトではないカーネルを指定する感じになります。


まず真っ暗な画面で何もできませんので、コンソールのセッションを開きます。
Ctrl + Alt + F2を押します。
(まめちしきな)

「黒い画面」に切り替わるので、そこで普通にログインします。
あとはデスクトップのターミナルで操作しているのと同じです。

カーネルのファイルがある [/boot]ディレクトリを見てみます。

subro@Lubuntu2204:~$ ls -l /boot
total 267016
-rw------- 1 root root   6280194  3月  6 03:23 System.map-5.15.0-101-generic
-rw------- 1 root root   6281969  3月  6 00:22 System.map-5.15.0-102-generic
-rw-r--r-- 1 root root    262005  3月  6 03:23 config-5.15.0-101-generic
-rw-r--r-- 1 root root    261981  3月  6 00:22 config-5.15.0-102-generic
drwxr-xr-x 5 root root      4096  4月 11 07:00 grub
lrwxrwxrwx 1 root root        29  4月 11 06:27 initrd.img -> initrd.img-5.15.0-102-generic
-rw------- 1 root root 118162674  3月 20 06:36 initrd.img-5.15.0-101-generic
-rw------- 1 root root 118247146  4月 11 06:27 initrd.img-5.15.0-102-generic
lrwxrwxrwx 1 root root        29  4月 11 06:27 initrd.img.old -> initrd.img-5.15.0-101-generic
-rw-r--r-- 1 root root    182800  2月  7  2022 memtest86+.bin
-rw-r--r-- 1 root root    184476  2月  7  2022 memtest86+.elf
-rw-r--r-- 1 root root    184980  2月  7  2022 memtest86+_multiboot.bin
lrwxrwxrwx 1 root root        26  4月 11 06:27 vmlinuz -> vmlinuz-5.15.0-102-generic
-rw------- 1 root root  11634824  3月  6 04:04 vmlinuz-5.15.0-101-generic
-rw------- 1 root root  11670216  3月  6 01:30 vmlinuz-5.15.0-102-generic
lrwxrwxrwx 1 root root        26  4月 11 06:27 vmlinuz.old -> vmlinuz-5.15.0-101-generic

デフォルトでは最新のに加えて 1つ前のカーネルが残されるようになっていますので、こういう時に助かります。
[5.15.0-102] と [5.15.0-101] がありますね。

今は [5.15.0-102]で問題が出ているので、[5.15.0-101]で起動するようにします。

sudoコマンドとテキストエディタを使い root権限で [/etc/default/grub]ファイルを編集します。
このファイルのコメント以外で生きている行はこれだけ。

GRUB_DEFAULT="0"
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

[GRUB_TIMEOUT_STYLE=hidden]行で、GRUBのメニューが出ないようになってるらしいです。
以下のように書き換えます。

を書き換えます。

GRUB_DEFAULT="0"
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=-1  メニューがタイムアウトしないようにしている
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

この内容を反映させてから再起動します。

subro@Lubuntu2204:~$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Sourcing file `/etc/default/grub.d/lubuntu-grub-theme.cfg'
Generating grub configuration file ...
Found theme: /usr/share/grub/themes/lubuntu-grub-theme/theme.txt
Found linux image: /boot/vmlinuz-5.15.0-102-generic
Found initrd image: /boot/initrd.img-5.15.0-102-generic
Found linux image: /boot/vmlinuz-5.15.0-101-generic
Found initrd image: /boot/initrd.img-5.15.0-101-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done

subro@Lubuntu2204:~$ sudo reboot

再起動するとブートメニューが出るようになりました。

ここから「メニューID」というのが大事になってくるので、メニューの項目をメニューIDと共に記します。

●1画面目

メニューIDメニュー項目
0Ubuntu
1Advanced options for ubuntu
2Memory Test

[Ubuntu]を選ぶと普通に最新カーネルで立ち上がります。
今回は [Advanced options for ubuntu]を選択します。
GRUBメニュー 1

●2画面目
右が切れてしまって分かりづらいのですが、以下のようになっています。

メニューIDメニュー項目
05.15.0-102 普通
15.15.0-102 リカバリモード
25.15.0-101 普通
35.15.0-101 リカバリモード

今回は [5.15.0-101 普通]を選択します。
GRUBメニュー 2

実際にこれで旧いカーネルを使って上手く起動できました。

subro@Lubuntu2204:~$ uname -r
5.15.0-101-generic

上のメニューでの操作を [/etc/default/grub]ファイルに記します。
[GRUB_DEFAULT]変数の値が、メニューIDを順番に記したもので「1番を選んでから2番を選ぶ」ってことですね。
メニューの表示はしないよう元に戻します。

GRUB_DEFAULT="1>2"
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

これで再起動した後はやはり旧いカーネルで立ち上がるようになって、とりあえず問題を回避できるようになったのでした。

なお仕組みから言うと、次回カーネルのアップデートがあるとその時から問題のあるカーネルが選ばれるようになってしまうので、[/etc/default/grub]ファイルの内容を元に戻すのを忘れないようにしましょう。

Linuxに慣れてきたら、右の本は読みましょう。