简介:
在本文中,我们将讨论如何在 GRUB 引导加载器中更改默认启动的 Linux 内核版本。这对于在多个内核版本间切换非常有用。已在Ubuntu上验证可用。告别直接修改/boot/grub/grub.cfg的土办法。
查看目前linux上面的内核版本
# 方法一
ls /boot/vmlinuz-*
# 方法二:
cat /boot/grub/grub.cfg | grep menuentry
# 查看目前使用的内核版本
uname -r
以:Linux 5.15.0-86-generic切换到 Linux 5.11.0-40-generic为例子。
步骤概述:
1.确认目标内核版本在 GRUB 菜单中的位置
查看 /boot/grub/grub.cfg
,找到想要设置为默认的内核版本对应的 menuentry
。记住它在菜单中的位置,计数从 0 开始。具体例子见下面**“grub.cfg实例”**
cat /boot/grub/grub.cfg
2.编辑 GRUB 配置文件
打开 /etc/default/grub
,使用管理员权限。使用文本编辑器,如 nano
或 vim
:
sudo vim /etc/default/grub
3.修改 GRUB_DEFAULT 变量
在 /etc/default/grub
文件中找到 GRUB_DEFAULT
行。如果目标内核位于子菜单中,使用格式 "主菜单位置>子菜单位置"
。例如,如果目标内核是 “Advanced options” 子菜单中的第三个选项(计数为 2),(具体例子见下面**“grub.cfg实例”**,一下子就懂了),则设置为:
#GRUB_DEFAULT=0 #一般默认是 这个,把它注释掉即可。
GRUB_DEFAULT="1>2"
4.更新 GRUB 配置
保存对 /etc/default/grub
的更改后,运行以下命令更新 GRUB:
sudo update-grub
5.重启系统
完成上述步骤后,重启系统。系统现在应该会默认启动到新设置的内核版本。
sudo reboot
注意:
- 直接编辑
/boot/grub/grub.cfg
文件是不推荐的,因为这个文件会在系统更新或执行update-grub
命令时被自动覆盖。 - 在做出任何更改之前,请备份相关文件,以防万一出现配置错误。
grub.cfg实例
位置:/boot/grub/grub.cfg,摘录其中内容如下:
### main manu(主菜单),number 0, starting with 0. => vim /etc/default/grub : GRUB_DEFAULT=0
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-0ca8df87-68c6-4792-ab3a-cf10e70c71c9' {
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 0ca8df87-68c6-4792-ab3a-cf10e70c71c9
else
search --no-floppy --fs-uuid --set=root 0ca8df87-68c6-4792-ab3a-cf10e70c71c9
fi
linux /boot/vmlinuz-5.15.0-86-generic root=UUID=0ca8df87-68c6-4792-ab3a-cf10e70c71c9 ro quiet splash $vt_handoff
initrd /boot/initrd.img-5.15.0-86-generic
}
### main manu(主菜单),number 1
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-0ca8df87-68c6-4792-ab3a-cf10e70c71c9' {
### submain manu(子菜单),number 0,starting with 0. => vim /etc/default/grub : GRUB_DEFAULT="1>0"
menuentry 'Ubuntu, with Linux 5.15.0-86-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-86-generic-advanced-0ca8df87-68c6-4792-ab3a-cf10e70c71c9' {
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 0ca8df87-68c6-4792-ab3a-cf10e70c71c9
else
search --no-floppy --fs-uuid --set=root 0ca8df87-68c6-4792-ab3a-cf10e70c71c9
fi
echo 'Loading Linux 5.15.0-86-generic ...'
linux /boot/vmlinuz-5.15.0-86-generic root=UUID=0ca8df87-68c6-4792-ab3a-cf10e70c71c9 ro quiet splash $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.15.0-86-generic
}
### submain manu(子菜单),number 1, => vim /etc/default/grub : GRUB_DEFAULT="1>1"
menuentry 'Ubuntu, with Linux 5.15.0-86-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-86-generic-recovery-0ca8df87-68c6-4792-ab3a-cf10e70c71c9' {
recordfail
load_video
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 0ca8df87-68c6-4792-ab3a-cf10e70c71c9
else
search --no-floppy --fs-uuid --set=root 0ca8df87-68c6-4792-ab3a-cf10e70c71c9
fi
echo 'Loading Linux 5.15.0-86-generic ...'
linux /boot/vmlinuz-5.15.0-86-generic root=UUID=0ca8df87-68c6-4792-ab3a-cf10e70c71c9 ro recovery nomodeset dis_ucode_ldr
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.15.0-86-generic
}
### submain manu(子菜单),number 2, => vim /etc/default/grub : GRUB_DEFAULT="1>2"
menuentry 'Ubuntu, with Linux 5.11.0-40-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.11.0-40-generic-advanced-0ca8df87-68c6-4792-ab3a-cf10e70c71c9' {
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 0ca8df87-68c6-4792-ab3a-cf10e70c71c9
else
search --no-floppy --fs-uuid --set=root 0ca8df87-68c6-4792-ab3a-cf10e70c71c9
fi
echo 'Loading Linux 5.11.0-40-generic ...'
linux /boot/vmlinuz-5.11.0-40-generic root=UUID=0ca8df87-68c6-4792-ab3a-cf10e70c71c9 ro quiet splash $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.11.0-40-generic
}
### submain manu(子菜单),number 3, => vim /etc/default/grub : GRUB_DEFAULT="1>3"
menuentry 'Ubuntu, with Linux 5.11.0-40-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.11.0-40-generic-recovery-0ca8df87-68c6-4792-ab3a-cf10e70c71c9' {
recordfail
load_video
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 0ca8df87-68c6-4792-ab3a-cf10e70c71c9
else
search --no-floppy --fs-uuid --set=root 0ca8df87-68c6-4792-ab3a-cf10e70c71c9
fi
echo 'Loading Linux 5.11.0-40-generic ...'
linux /boot/vmlinuz-5.11.0-40-generic root=UUID=0ca8df87-68c6-4792-ab3a-cf10e70c71c9 ro recovery nomodeset dis_ucode_ldr
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.11.0-40-generic
}
}
觉得有用,就点个赞吧