ubuntu修改默认启动内核

摘要:
虽然系统也有更新的内核,但是作为工作机需要稳定使用系统,所以要修改默认启动内核为5.4.0版本。<1>先通过修改默认启动内核选项索引号,来达到修改默认启动内核的目的。修改完后保存,然后更新grub.cfg~sudoupdate-grubSourcingfile`/etc/default/grub'Sourcingfile`/etc/default/grub.d/init-select.cfg'正在生成grub配置文件...找到Linux镜像:/boot/vmlinuz-5.8.0-48-generic找到initrd镜像:/boot/initrd.img-5.8.0-48-generic找到Linux镜像:/boot/vmlinuz-5.4.0-67-generic找到initrd镜像:/boot/initrd.img-5.4.0-67-generic找到WindowsBootManager位于/dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efiAddingbootmenuentryforUEFIFirmwareSettings完成重启计算机就会默认选择5.4.0的内核作为默认启动内核。

一、序言

新换的笔记本由于太新的主板芯片,驱动还没有完善。每次升级系统内核都要小心谨慎。经常发生部分硬件驱动失败的事情。
系统Ubuntu 20.04.2 LTS x86_64,我现在使用的两个版本的内核5.4.0和5.8.0。默认从高版本内核5.8.0启动。目前5.4.0内核已经趋于稳定,且硬件驱动完善。虽然系统也有更新的内核,但是作为工作机需要稳定使用系统,所以要修改默认启动内核为5.4.0版本。

ubuntu修改默认启动内核第1张

二、调查

看了几篇文章关于修改默认的启动内核,方法都是根据grub.cfg(/boot/grub/grub.cfg)提取选项,来修改grub(/etc/default/grub)文件的GRUB_DEFAULT。
需要了解一下grub.cfg的内容。
主要关注两点:
<1> 主菜单:

menuentry 'Ubuntu' $menuentry_id_option '' { }
submenu 'Ubuntu 的高级选项' $menuentry_id_option '' { }

ubuntu修改默认启动内核第2张

<2> 高级选项子菜单:
“submenu 'Ubuntu 的高级选项'”中的menuentry(menu entry),完整的一个选项从menuentry '' {}直到大括号结束。

ubuntu修改默认启动内核第3张

三、开工

前提知识补充完毕,开始修改默认启动内核。

<1> 先通过修改默认启动内核选项索引号,来达到修改默认启动内核的目的。
首先找到本机所有的Linux内核启动项。直接查找submenu下的menuentry,或者

➜  ~ grep gnu-linux /boot/grub/grub.cfg
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-75e3f56f-b03c-4c45-8e57-3669bd07666e' {
        menuentry 'Ubuntu,Linux 5.8.0-48-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.8.0-48-generic-advanced-75e3f56f-b03c-4c45-8e57-3669bd07666e' {
        menuentry 'Ubuntu, with Linux 5.8.0-48-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.8.0-48-generic-recovery-75e3f56f-b03c-4c45-8e57-3669bd07666e' {
        menuentry 'Ubuntu,Linux 5.4.0-67-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-67-generic-advanced-75e3f56f-b03c-4c45-8e57-3669bd07666e' {
        menuentry 'Ubuntu, with Linux 5.4.0-67-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-67-generic-recovery-75e3f56f-b03c-4c45-8e57-3669bd07666e' {

所以本机有2个内核4个相关的启动模式。和上一节开机拍照的启动选项相吻合。

Ubuntu,Linux 5.8.0-48-generic
Ubuntu, with Linux 5.8.0-48-generic (recovery mode)
Ubuntu,Linux 5.4.0-67-generic
Ubuntu, with Linux 5.4.0-67-generic (recovery mode)

对应默认的Ubuntu,Linux 5.8.0-48-generic为索引0,明显我想要的启动内核是Ubuntu,Linux 5.4.0-67-generic,即索引2。
于是修改grub

➜  ~ sudo vim /etc/default/grub                                                    
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

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

GRUB_DEFAULT=0 修改为GRUB_DEFAULT="1> 2"
意思是在grub主菜单中选择第2个选项(索引1),在其子菜单中选择第3个选项(索引2),即"1> 2",注意>和2之间有一个空格。
修改完后保存,然后更新grub.cfg

➜  ~ sudo update-grub          
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
正在生成 grub 配置文件 ...
找到 Linux 镜像:/boot/vmlinuz-5.8.0-48-generic
找到 initrd 镜像:/boot/initrd.img-5.8.0-48-generic
找到 Linux 镜像:/boot/vmlinuz-5.4.0-67-generic
找到 initrd 镜像:/boot/initrd.img-5.4.0-67-generic
找到 Windows Boot Manager 位于 /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings
完成

重启计算机就会默认选择5.4.0的内核作为默认启动内核。

<2> 上一条通过修改索引号,我担心,更新内核或安装卸载内核,引起索引号变化,导致失效。
于是接着看grub.cfg中的定义,从submenu子菜单开始

submenu 'Ubuntu 的高级选项' $menuentry_id_option 'gnulinux-advanced-75e3f56f-b03c-4c45-8e57-3669bd07666e'

子菜单后面单引号内容,分别对应名称和id,于是来实验使用名称或者id来设置GRUB_DEFAULT。
子菜单4个选项从menuentry开始,也有对应的名称和id。

menuentry 'Ubuntu,Linux 5.8.0-48-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.8.0-48-generic-advanced-75e3f56f-b03c-4c45-8e57-3669bd07666e'
menuentry 'Ubuntu, with Linux 5.8.0-48-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.8.0-48-generic-recovery-75e3f56f-b03c-4c45-8e57-3669bd07666e'
menuentry 'Ubuntu,Linux 5.4.0-67-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-67-generic-advanced-75e3f56f-b03c-4c45-8e57-3669bd07666e'
menuentry 'Ubuntu, with Linux 5.4.0-67-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-67-generic-recovery-75e3f56f-b03c-4c45-8e57-3669bd07666e'

于是GRUB_DEFAULT有另外两种设置方法:

GRUB_DEFAULT="Ubuntu 的高级选项>Ubuntu,Linux 5.4.0-67-generic"

或者

GRUB_DEFAULT="gnulinux-advanced-75e3f56f-b03c-4c45-8e57-3669bd07666e>gnulinux-5.4.0-67-generic-advanced-75e3f56f-b03c-4c45-8e57-3669bd07666e"

替换掉之前的

GRUB_DEFAULT="1> 2"

同样需要更新grub.cfg

sudo update-grub

重启计算机,同样修改生效了。

四、后记

<1> 用户不要直接修改grub.cfg。当修改了grub文件,执行sudo update-grub系统会自动更新grub.cfg文件。

<2> grub.cfg子菜单中内核选项,有个奇怪的现象

Ubuntu,Linux 5.8.0-48-generic
Ubuntu, with Linux 5.8.0-48-generic (recovery mode)
Ubuntu,Linux 5.4.0-67-generic
Ubuntu, with Linux 5.4.0-67-generic (recovery mode)

普通模式的逗号,是全角的逗号。recovery mode模式的逗号,是半角的逗号。本文第一个图也很明显看得出来。

最后,文章参考https://blog.csdn.net/kingroc/article/details/105998517特此感谢。

免责声明:文章转载自《ubuntu修改默认启动内核》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SAP MM 根据采购订单反查采购申请?Linux下PAM模块学习总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NetBackup linux客户端安装

一、安装流程 1、 将安装包copy到linux系统上 2、 解压 tar –zxvf NetBackup_7.5_CLIENTS2.tar.gz 3、进入到解压后的文件目录,运行 ./install 4、基本上只需配置NetBackup Server 名字 ,当然客户端的name也可以更改,其他需要确认的一路 填写 y 5、客户端和服务器分别添加host...

linux expect详解(ssh自动登录)

shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh root@192.168.22.194 expect "*password:" send "123 " expect "*#" interact 原文链接:http://www.xuanhao360.com/linux-expects...

linux设备驱动 按键几种写法总结

对于基础按键的驱动,有如下几种写法: (1)查询 所谓查询方法,主要描述应用程序会在while(1)里面一直read,如果没有数据会导致阻塞,占用CPU;这种方法是最差的。 (2)中断 中断配合休眠会避免查询法占用CPU的缺点。 应用程序和查询法没有什么区别, 但是驱动里面的read函数会调用wait_event_interruptible, 直到按键产生...

linux 命令行出现-bash-4.2$的解决办法

输入这两句话,然后关闭终端,重新登录一下就好了 cp /etc/skel/.bashrc /root/ cp /etc/skel/.bash_profile /root/ 同样的方法,如果是非root而是某用户,就把目标路径换成相对应的用户路径即可。 这两个文件通常在建立用户目录是自动添加,如果是你手动创建文件夹在/etc/passwd指定目录也会出现该错...

Linux 修改PostgreSQL外部访问白名单

1. 查找配置文件 # find / -name pg_hba.conf # find / -name postgresql.conf 2.修改 2.1 修改pg_hba.conf 查找IPv4 local connections 修改默认的 host all all 127.0.0.1/32 trust 为 host all all 192.168.1...

Linux中编译C文件

C/C++程序编译的过程 预处理,展开头文件,宏定义,条件编译处理等。通过gcc -E source.c -o source.i或者cpp source.c生成。 编译。这里是一个狭义的编译意义,指的是将预处理后的文件翻译成汇编代码的过程。通过gcc -S source.i生成。默认生成source.s文件。 汇编。汇编即将上一步生成的汇编代码翻译成对应的...