ubuntu修改默认启动内核
<h1><span style="font-size: 18pt">一、序言</span></h1><p><span style="font-size: 16px">新换的笔记本由于太新的主板芯片,驱动还没有完善。每次升级系统内核都要小心谨慎。经常发生部分硬件驱动失败的事情。</span><br><span style="font-size: 16px">系统Ubuntu 20.04.2 LTS x86_64 ,我现在使用的两个版本的内核5.4.0和5.8.0。默认从高版本内核5.8.0启动。目前5.4.0内核已经趋于稳定,且硬件驱动完善。虽然系统也有更新的内核,但是作为工作机需要稳定使用系统,所以要修改默认启动内核为5.4.0版本。</span></p>
<p><span style="font-size: 16px"><img src="https://img2020.cnblogs.com/blog/470616/202103/470616-20210328111134768-1274662273.png"></span><br><br></p>
<h1><span style="font-size: 18pt">二、调查</span></h1>
<p><span style="font-size: 16px">看了几篇文章关于修改默认的启动内核,方法都是根据<span style="font-family: 黑体; font-size: 18px">grub.cfg</span>(/boot/grub/grub.cfg)提取选项,来修改<span style="font-size: 18px; font-family: 黑体">grub</span>(/etc/default/grub)文件的GRUB_DEFAULT。</span><br><span style="font-size: 16px">需要了解一下grub.cfg的内容。</span><br><span style="font-size: 16px">主要关注两点:</span><br><span style="font-size: 16px"><1> 主菜单:</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">menuentry 'Ubuntu' $menuentry_id_option '' { }
submenu 'Ubuntu 的高级选项' $menuentry_id_option '' { }</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/470616/202103/470616-20210328111353752-1837208776.png"></p>
<p><br><span style="font-size: 16px"><2> 高级选项子菜单:</span><br><span style="font-size: 16px">“submenu 'Ubuntu 的高级选项'”中的menuentry(menu entry),完整的一个选项从menuentry '' {}直到大括号结束。</span></p>
<p><img src="https://img2020.cnblogs.com/blog/470616/202103/470616-20210328111424464-2104699635.png"><br><span style="font-size: 16px"><br></span></p>
<h1><span style="font-size: 18pt">三、开工</span></h1>
<p><span style="font-size: 16px">前提知识补充完毕,开始修改默认启动内核。</span></p>
<p><span style="font-size: 16px"><1> 先通过修改默认启动内核选项索引号,来达到修改默认启动内核的目的。</span><br><span style="font-size: 16px">首先找到本机所有的Linux内核启动项。直接查找submenu下的menuentry,或者</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">➜~ 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' {</span></pre>
</div>
<p><span style="font-size: 16px">所以本机有2个内核4个相关的启动模式。和上一节开机拍照的启动选项相吻合。</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">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)</span></pre>
</div>
<p><span style="font-size: 16px">对应默认的Ubuntu,Linux 5.8.0-48-generic为索引0,明显我想要的启动内核是Ubuntu,Linux 5.4.0-67-generic,即索引2。</span><br><span style="font-size: 16px">于是修改grub</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">➜~ 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=""</span></pre>
</div>
<p><span style="font-size: 16px">将 <span class="cnblogs_code" style="font-family: "courier new", courier; font-size: 15px; color: rgba(0, 0, 0, 1)"><span style="font-size: 16px">GRUB_DEFAULT=0 </span></span> 修改为 </span><span style="color: rgba(0, 0, 0, 1)"><span class="cnblogs_code" style="font-family: "courier new", courier; font-size: 15px">GRUB_DEFAULT="1> 2"</span> </span><br><span style="font-size: 16px">意思是在grub主菜单中选择第2个选项(索引1),在其子菜单中选择第3个选项(索引2),即"1> 2",注意>和2之间有一个空格。</span><br><span style="font-size: 16px">修改完后保存,然后更新grub.cfg</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">➜~ 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
完成</span></pre>
</div>
<p><span style="font-size: 16px">重启计算机就会默认选择5.4.0的内核作为默认启动内核。</span></p>
<p> </p>
<p><span style="font-size: 16px"><2> 上一条通过修改索引号,我担心,更新内核或安装卸载内核,引起索引号变化,导致失效。</span><br><span style="font-size: 16px">于是接着看grub.cfg中的定义,从submenu子菜单开始</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">submenu 'Ubuntu 的高级选项' $menuentry_id_option 'gnulinux-advanced-75e3f56f-b03c-4c45-8e57-3669bd07666e'</span></pre>
</div>
<p><span style="font-size: 16px; color: rgba(0, 0, 0, 1)">子菜单后面单引号内容,分别对应名称和id,于是来实验使用名称或者id来设置GRUB_DEFAULT。</span><br><span style="font-size: 16px; color: rgba(0, 0, 0, 1)">子菜单4个选项从menuentry开始,也有对应的名称和id。</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">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'</span></pre>
</div>
<p><br><span style="font-size: 16px; color: rgba(0, 0, 0, 1)">于是GRUB_DEFAULT有另外两种设置方法:</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">GRUB_DEFAULT="Ubuntu 的高级选项>Ubuntu,Linux 5.4.0-67-generic"</span></pre>
</div>
<p><span style="font-size: 16px; color: rgba(0, 0, 0, 1)">或者</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">GRUB_DEFAULT="gnulinux-advanced-75e3f56f-b03c-4c45-8e57-3669bd07666e>gnulinux-5.4.0-67-generic-advanced-75e3f56f-b03c-4c45-8e57-3669bd07666e"</span></pre>
</div>
<p><span style="font-size: 15px; color: rgba(0, 0, 0, 1); font-family: "courier new", courier">替换掉之前的</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">GRUB_DEFAULT="1> 2"</span></pre>
</div>
<p><span style="font-size: 16px; color: rgba(0, 0, 0, 1)">同样需要更新grub.cfg</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">sudo update-grub</span></pre>
</div>
<p><span style="font-size: 16px; color: rgba(0, 0, 0, 1)">重启计算机,同样修改生效了。</span></p>
<h1><span style="font-size: 18pt">四、后记 </span></h1>
<p> <span style="font-size: 16px"><1> 用户不要直接修改grub.cfg。当修改了grub文件,执行 <span class="cnblogs_code" style="font-family: "courier new", courier; font-size: 15px"><span style="color: rgba(0, 0, 0, 1); font-size: 16px">sudo </span><span style="font-size: 16px">update-grub</span></span> 系统会自动更新grub.cfg文件。</span></p>
<p><em id="__mceDel"><span style="font-size: 16px"><2> grub.cfg子菜单中内核选项,有个奇怪的现象</span></em></p>
<div class="cnblogs_code">
<pre><span style="font-family: "courier new", courier; font-size: 16px; color: rgba(0, 0, 0, 1)">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)</span></pre>
</div>
<p><span style="font-size: 16px">普通模式的逗号,是全角的逗号。recovery mode模式的逗号,是半角的逗号。本文第一个图也很明显看得出来。</span></p>
<p><span style="font-size: 16px">最后,文章参考https://blog.csdn.net/kingroc/article/details/105998517特此感谢。</span></p><br><br>
来源:https://www.cnblogs.com/zzugyl/p/14588114.html
頁:
[1]