概要
軽い気持ちでUbuntu19.04から19.10にアップグレードした時に、紫の画面から起動が進めなくなってしまいました。
セーフモードで起動すると以下のようなメッセージで起動処理が終わっていて、カーネルの起動でこけていそうでした。
Kernel panic - not syncing : VFS
調査
実際にカーネルが悪いのか確かめるために、カーネルのバージョンを変えて起動してみます。
カーネルを選択
1. マシンを起動する際にShiftを押し続けて、Grubのメニューを表示させる
2. 2番目のAdvanced options for Ubuntu
を選択する
3. カーネルを選択
今回は上二つの新しいカーネルが悪さをしていると考えたので、3つ目を選択して起動します。
そうすると無事起動することができました。
対処
カーネルのバージョンを固定
このままだとデフォルトのカーネルのバージョンが変わっていないので、カーネルのバージョンを固定します。
1. 選択できるカーネル一覧
$ grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-99eddd62-fe37-404b-a276-916c752c04fb' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-99eddd62-fe37-404b-a276-916c752c04fb' {
menuentry 'Ubuntu, with Linux 5.3.0-29-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.3.0-29-generic-advanced-99eddd62-fe37-404b-a276-916c752c04fb' {
menuentry 'Ubuntu, with Linux 5.3.0-29-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.3.0-29-generic-recovery-99eddd62-fe37-404b-a276-916c752c04fb' {
menuentry 'Ubuntu, with Linux 5.0.0-38-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.0.0-38-generic-advanced-99eddd62-fe37-404b-a276-916c752c04fb' {
menuentry 'Ubuntu, with Linux 5.0.0-38-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.0.0-38-generic-recovery-99eddd62-fe37-404b-a276-916c752c04fb' {
menuentry 'Ubuntu, with Linux 5.0.0-37-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.0.0-37-generic-advanced-99eddd62-fe37-404b-a276-916c752c04fb' {
menuentry 'Ubuntu, with Linux 5.0.0-37-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.0.0-37-generic-recovery-99eddd62-fe37-404b-a276-916c752c04fb' {
menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
先ほどのメニューに出ていた6つのカーネルが出力されていることがわかります。
2. カーネルを固定
今回は3つ目のUbuntu, with Linux 5.0.0-38-generic
で起動できたので、これに固定します。
$ sudo vim /etc/default/grub
GRUB_DEFAULT="Ubuntu, with Linux 5.0.0-38-generic"
3. 設定ファイルを生成
$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.3.0-29-generic
Found linux image: /boot/vmlinuz-5.0.0-38-generic
Found initrd image: /boot/initrd.img-5.0.0-38-generic
Warning: Please don't use old title `Ubuntu, with Linux 5.0.0-38-generic' for GRUB_DEFAULT, use `Advanced options for Ubuntu>Ubuntu, with Linux 5.0.0-38-generic' (for versions before 2.00) or `gnulinux-advanced-99eddd62-fe37-404b-a276-916c752c04fb>gnulinux-5.0.0-38-generic-advanced-99eddd62-fe37-404b-a276-916c752c04fb' (for 2.00 or later)
Found linux image: /boot/vmlinuz-5.0.0-37-generic
Found initrd image: /boot/initrd.img-5.0.0-37-generic
Adding boot menu entry for EFI firmware configuration
done
ここで、done
で終わっているので、成功していると思いきや、
Warning: Please don't use old title `Ubuntu, with Linux 5.0.0-38-generic' for GRUB_DEFAULT, use `Advanced options for Ubuntu>Ubuntu, with Linux 5.0.0-38-generic' (for versions before 2.00) or `gnulinux-advanced-99eddd62-fe37-404b-a276-916c752c04fb>gnulinux-5.0.0-38-generic-advanced-99eddd62-fe37-404b-a276-916c752c04fb' (for 2.00 or later)
の部分で、grub2.0以上ではカーネルの設定方法が変わっているよ、というエラーが出ています。この通りに、タイトルで指定するのではなく、オプション名で指定します。
$ sudo vim /etc/default/grub
GRUB_DEFAULT="gnulinux-advanced-99eddd62-fe37-404b-a276-916c752c04fb>gnulinux-5.0.0-38-generic-advanced-99eddd62-fe37-404b-a276-916c752c04fb"
もう一度設定ファイル生成します。
$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.3.0-29-generic
Found linux image: /boot/vmlinuz-5.0.0-38-generic
Found initrd image: /boot/initrd.img-5.0.0-38-generic
Found linux image: /boot/vmlinuz-5.0.0-37-generic
Found initrd image: /boot/initrd.img-5.0.0-37-generic
Adding boot menu entry for EFI firmware configuration
done
これで起動時のカーネルのバージョンを固定することができました。
参考