Ubuntuのデフォルトカーネルを強制的に変更する

今回UbuntuをPCにインストールしてapt-upgradeをすると再起動後に画面が表示されない現象がおきました。
Twitterで最新のカーネルが不安定でセーフブートで一つ前のカーネルを使用してると聞いて試してみたところ画面がつくようになりました。
しかし毎回セーフブートからカーネルを選択するのは面倒くさいので一つ前のカーネルをデフォルトで起動できないか試してみました。


## 環境
Ubuntuのバージョン: 21.04
デフォルトのカーネル: 5.11.0.22-generic
変更したいカーネル: 5.11.0.16-generic
## 試してみたこと
### /etc/default/grubの編集

色々試してみましたが、UEFIが起動したり通常の起動などしたりで上手く行きませんでした。

``` 
sudo gedit /etc/default/grub
sudo update-grub
```


``` bash:/etc/default/grub
GRUB_DEFAULT=2
```
``` bash:/etc/default/grub
GRUB_DEFAULT="saved"
```

``` bash:/etc/default/grub
GRUB_DEFAULT="Ubuntu, with Linux 5.11.0.16-generic
```
``` bash:/etc/default/grub
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.11.0.16-generic
```

``` bash:/etc/default/grub
GRUB=DEFAULT="gnulinux-5.11.0-16-generic-advanced-5f2f8280-6d4b-4822-bbbf-792ef193a92d"
```

### grub-set-defaultコマンド
これは反映されませんでした

```
sudo grub-set-default 2
```

### /boot/grub/grub.cfgの編集

通常起動するUbuntuのカーネルを変更することで成功しました。
※update-grubすると上書きされて元のカーネルに戻ります。
`boot/grub/grub.cfg`を開いて`submenu`の中から変更したいカーネルを探して`linux`の行と`initrd`の行をコピーし`menuenty 'ubuntu'`の`linux`と`initrd`の行へ上書きします。


```　:変更したカーネルのsubmenu
menuentry 'Ubuntu, with Linux 5.11.0-16-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.11.0-16-generic-advanced-5f2f8280-6d4b-4822-bbbf-792ef193a92d' {
		recordfail
		load_video
		gfxmode $linux_gfx_mode
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		set root='hd0,gpt2'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  5f2f8280-6d4b-4822-bbbf-792ef193a92d
		else
		  search --no-floppy --fs-uuid --set=root 5f2f8280-6d4b-4822-bbbf-792ef193a92d
		fi
		echo	'Linux 5.11.0-16-generic をロード中...'
		linux	/boot/vmlinuz-5.11.0-16-generic root=UUID=5f2f8280-6d4b-4822-bbbf-792ef193a92d ro  quiet splash $vt_handoff
		echo	'初期 RAM ディスクをロード中...'
		initrd	/boot/initrd.img-5.11.0-16-generic
}
```

```
sudo gedit /boot/grub/grub.cfg
```




``` /boot/grub/grub.cfg編集前
mmenuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-5f2f8280-6d4b-4822-bbbf-792ef193a92d' {
	recordfail
	load_video
	gfxmode $linux_gfx_mode
	insmod gzio
	if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
	insmod part_gpt
	insmod ext2
	set root='hd0,gpt2'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  5f2f8280-6d4b-4822-bbbf-792ef193a92d
	else
	  search --no-floppy --fs-uuid --set=root 5f2f8280-6d4b-4822-bbbf-792ef193a92d
	fi
	linux	/boot/vmlinuz-5.11.0-22-generic root=UUID=5f2f8280-6d4b-4822-bbbf-792ef193a92d ro  quiet splash $vt_handoff
	initrd	/boot/initrd.img-5.11.0-22-generic
}
```


``` /boot/grub/grub.cfg編集後
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-5f2f8280-6d4b-4822-bbbf-792ef193a92d' {
	recordfail
	load_video
	gfxmode $linux_gfx_mode
	insmod gzio
	if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
	insmod part_gpt
	insmod ext2
	set root='hd0,gpt2'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  5f2f8280-6d4b-4822-bbbf-792ef193a92d
	else
	  search --no-floppy --fs-uuid --set=root 5f2f8280-6d4b-4822-bbbf-792ef193a92d
	fi
	linux	/boot/vmlinuz-5.11.0-16-generic root=UUID=5f2f8280-6d4b-4822-bbbf-792ef193a92d ro  quiet splash $vt_handof
	initrd	/boot/initrd.img-5.11.0-16-generic
}
```

## My Accounts
<a href="https://github.com/mao2009"><img src="https://mao2009.github.io/qiita_template/GitHub-Mark-64px.png" width="50px"></a><a href="https://twitter.com/loach_mao"> <img src="https://mao2009.github.io/qiita_template/Twitter_Social_Icon_Circle_Color.png" width="50px"></a>