zoukankan      html  css  js  c++  java
  • 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特此感谢。

  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/zzugyl/p/14588114.html
Copyright © 2011-2022 走看看