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

二、调查
看了几篇文章关于修改默认的启动内核,方法都是根据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 '' { }

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

三、开工
前提知识补充完毕,开始修改默认启动内核。
<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修改默认启动内核的更多相关文章
- ubuntu13.04修改默认启动内核
ubuntu下面的启动内核选项跟其他操作系统不一样,有个子菜单,比如我在默认的ubuntu13.04上安装了一个新的内核3.14.5,那么默认的第一项是3.14.5内核,第二项是一个子菜单,第二项里面 ...
- Centos7多内核情况下修改默认启动内核方法
1.1 进入grub.cfg配置文件存放目录/boot/grub2/并备份grub.cfg配置文件 [root@linux-node1 ~]# cd /boot/grub2/ [root@linux ...
- centos系统有多个内核,修改默认启动内核
打开系统文件 vim /boot/grub/grub.conf default=0,意思是GRUB在默认情况下,也就是用户没有选择的情况下,去启动显示在用户界面的第一个系统:GRUB启动系统时是从0 ...
- centos 修改默认启动内核,及删除无用内核
#使用cat /boot/grub2/grub.cfg |grep menuentry 查看系统可用内核 [root@bigapp-slave27 ~]# cat /boot/grub2/grub.c ...
- Centos7修改默认启动内核
#使用cat /boot/grub2/grub.cfg |grep menuentry 查看系统可用内核 root@Cs7-:/root> cat /boot/grub2/grub.cfg | ...
- 【Ubuntu】Ubuntu中下载特定版本内核和设置某版本内核为默认启动内核
0. 基本命令 uname -a # 查看当前所使用内核 dpkg -l | grep linux # dpkg后是lmn的l.查看当前操作系统的内核 dekg -l | grep linux-ima ...
- 安装ubuntu和windows双系统后,如何修改默认启动项
在安装了Ubuntu16.04系统之后,系统会默认自启动Ubuntu16.04,而我们大多数情况下可能都在使用windows系统,不修改默认设置,不经意间便会启动了Ubuntu16.04,通过我的经历 ...
- CentOS 7 添加win7启动项——修改默认启动项
CentOS 7使用grub2引导启动,在win7之后装完CentOS再启动会丢失win7启动项. 首先,添加win7启动项,步骤如下: 1.使用root登陆系统 2.用文本编辑器打开 /boot/g ...
- Linux使用命令修改默认启动为图形或字符界面
因为要在Linux系统上装NVIDIA显卡驱动,默认重启必须是字符界面,因此把这块所需命令记录下来. 1,先查看当前系统默认启动的界面 systemctl get-default 2,修改默认启动界面 ...
随机推荐
- element-ui & babel-plugin-component config bug
element-ui & babel-plugin-component config bug vue-cli bad babel.config.js module.exports = { pr ...
- Dart & data type(static / dynamic)
Dart & data type(static / dynamic) Darts 飞镖 标枪 javelin/darts type https://dartpad.dartlang.org/ ...
- Koa 洋葱模型
Koa 洋葱模型 let context = { data: [] }; async function middleware1(ctx, next) { console.log('action 001 ...
- 聊一下PBN程序图例中的XTT
PBN航路点的定位容差用XTT与ATT来表示,ATT=0.8*XTT.保护区半宽用1.5*XTT+BV计算得到,BV值在不同的航段取值不同. 对于A至E类航空器,距ARP 30nm以外BV值为2 ...
- linux系统忘记root的登录密码
参考链接:https://www.jb51.net/article/146541.htm 亲测有效 使用场景 linux管理员忘记root密码,需要进行找回操作. 注意事项:本文基于centos7环 ...
- linux文件权限的查看和修改(转)
原文链接:https://www.cnblogs.com/sxdcgaq8080/p/7498906.html 命令: chmod 777 scan_record.js 格式: chmod 权限数字 ...
- html5的标签中,哪些是行内元素,哪些是块级元素。
块级元素:块级大多为结构性标记 <address>...</adderss> <center>...</center> 地址文字 <h1> ...
- SpringBoot解决特殊符号 []报400问题
当遇到特殊符号传递给后台时,如果不加处理,就会报400的错误,解决办法有两种. 1.前台解决 前台解决的方法就是把这些特殊符号转义,转义之后浏览器和后台都可以识别. //对特殊字符进行转义 encod ...
- 单例模式有效解决过多的if-else
策略模式 引例:假如我们要分享一个篇文章.有微信分享.微博分享.QQ分享等......我们是先判断类型是哪个,然后再调用各自得API去做分享操作 一般来说,大多数人都会根据类型判断是哪个渠道吧,如下代 ...
- 基于docker搭建gitlab
一.概述 GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目. 它拥有与Github类似的功能,能够浏览 ...