Linux如何设置Centos启动默认使用的内核

Posted bandaoyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux如何设置Centos启动默认使用的内核相关的知识,希望对你有一定的参考价值。


目录

​修改方法​

​原理说明​

​ 报错处理​


修改方法

 (1)主动修改:

使用Linux下自带的grub工具 “grub2-set-default” 和 “grub2-reboot” 修改,其中后者真正设置的是next_entry参数,只在下次启动时有效。

可能需要先安装grub2和生成grub.cfg

sudo yum install -y grub2
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

            修改步骤:

                a. 查看当前系统具有的内核

                    sudo awk -F\\ $1=="menuentry " print i++ " : " $2 /etc/grub2.cfg

                b. 设置默认的启动内核

                     sudo grub2-set-default (0~N)或者(‘a 中得出的名称’单引号必须加)

                c. 查看当前的配置状态

                     sudo grub2-editenv list


    (2)让系统主动记录上次的内核选项:

            在 4 所述的/etc/default/grub 参数中,

                设置GRUB_DEFAULT=saved

                同时增加GRUB_SAVEDEFAULT=true  系统在每次启动时,会主动将当前选择的内核选项更新到5 中的两个文件中

               注:此参数不设置时,默认为true,但如果记录过程遇到错误,将不再强制记录。

(注意:如果同时设置(1)默认内核和 (2)“主动记录上次的内核选项”,则启动的时候linux会使用上次的的内核启动,只是centos 7 是这样的)

原理说明

1. 背景:

    x86架构下,Linux的启动过程中,Bios操作完毕后,由grub进行内核的启动

    CentOS7下grub介入之后的启动界面如下:

    CentOS Linux (4.16.7) 7 (Core)                                                                                            

    CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)                                                                             

    CentOS Linux (0-rescue-5d2e988e8b5b4bdf81b86a690b19ea19) 7 (Core)

  在此界面下,可以进行

          1. 内核版本的选择

          2. 按下“e”在选定的内核启动前编辑启动相关细节

          3. 按下“c”进入grub命令行,手动键入命令,设置参数,选定内核及其他文件进行启动

2. 此界面是怎么生成的:

    此界面是grub根据其配置文件生成的,配置文件为:

        EFI模式配置文件:    /boot/efi/EFI/centos/grub.cfg

        legacy配置文件:    /boot/grub2/grub.cfg

    配置文件的内容在这里不详细解释了,之前组内分享“Linux启动引导”部分已经详细分析过了。


3. 配置文件如何更改:

    (1) 先修改/etc/default/grub文件中的参数

    (2) 然后使用grub2-mkconfig工具生成上述grub.cfg配置文件

        EFI模式配置文件生成:        grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

        legacy模式配置文件生成:    grub2-mkconfig -o /boot/grub2/grub.cfg


4. 默认启动的内核是什么决定的

    在/etc/default/grub的参数中可以设置启动时默认选择的内核,参数是:

        GRUB_DEFAULT        =      0~N        默认从数字启动项启动

                    =     saved        使用系统中记录的saved_entry的值作为默认启动项

    注意修改之后要重新按照‘3 中操作生成配置文件。


5. 上述saved_entry的值在哪里?

    EFI模式:         /boot/efI/EFI/centos/grubenv

    legacy模式:        /boot/grub2/grubenv

    在CentOS7 中,/boot/efI/EFI/centos/grubenv文件是原始文件,/boot/grub2/grubenv是它的链接文件。

6. 上述saved_entry的值怎么修改?

    警告:/boot/efI/EFI/centos/grubenv和/boot/grub2/grubenv不可以直接进行编辑修改,需要使用工具

    修改方法:

        (1)主动修改:使用Linux下自带的grub工具 “grub2-set-default” 和 “grub2-reboot” 修改,其中后者真正设置的是next_entry参数,只在下次启动时有效。

(可能需要先安装grub2和生成grub.cfg

sudo yum install -y grub2
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

            修改步骤:

                a. 查看当前系统具有的内核

                    awk -F\\ $1=="menuentry " print i++ " : " $2 /etc/grub2.cfg

                b. 设置默认的启动内核

                    grub2-set-default (0~N)或者(‘a 中得出的名称’单引号必须加)

                c. 查看当前的配置状态

                    grub2-editenv list


        (2)让系统主动记录上次的内核选项:

            在 4 所述的/etc/default/grub 参数中,

                设置GRUB_DEFAULT=saved

                同时增加GRUB_SAVEDEFAULT=true  系统在每次启动时,会主动将当前选择的内核选项更新到5 中的两个文件中

                    注:此参数不设置时,默认为true,但如果记录过程遇到错误,将不再强制记录。

7. 其他:

    如果 6 中没有使用工具修改,而是强制修改的话,系统主动记录上次启动内核将会失败。

报错处理

我们经常会在CentOS 6和CentOS 7升级中遇到/boot/grub/grub.conf not found 和 /boot/grub2/grub.cfg not found 错误,这里是解决的方法:

​/boot/grub/grub.conf​​ 缺失:

sudo yum install -y grub
sudo grub-mkconfig -o /boot/grub/grub.conf

​/boot/grub2/grub.cfg​​ 缺失:

sudo yum install -y grub2
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

参考或摘抄:

​解决/BOOT/GRUB/GRUB.CONF NOT FOUND 和 /BOOT/GRUB2/GRUB.CFG NOT FOUND 问题:https://wzfou.com/question/17884/​

​Centos下Linux启动时默认内核设置机制;javascript:void(0)​


以上是关于Linux如何设置Centos启动默认使用的内核的主要内容,如果未能解决你的问题,请参考以下文章

-Linux系统启动原理及故障排除

修改Centos7.2系统的默认启动内核模式

centos7设置默认的内核启动

Redhat/Centos 设置默认启动内核

Redhat7/Centos7 修改默认启动内核方法二

Linux - 修改内核启动顺序及删除无用内核