【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 ‘a 中得出的名称’ 单引号必须加
sudo grub2-set-default "CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)"
c. 查看当前的配置状态
sudo grub2-editenv list
( 原文是:sudo grub2-set-default (0~N)或者(‘a 中得出的名称’单引号必须加),但前一种方法设置数字应是没效果的)
例子:
[SDS_Admin@rdma66 etc]$ sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.10.38-21.01.el7.x86_64) 7 (Core)
1 : CentOS Linux (5.10.38-21.hl05.el7.x86_64) 7 (Core)
2 : CentOS Linux (5.10.9-21.01.el7.x86_64.debug) 7 (Core)
3 : CentOS Linux (0-rescue-43c2b0874c3f47b7affd7cdc75462e2c) 7 (Core)
[SDS_Admin@rdma66 etc]$ sudo grub2-set-default 'CentOS Linux (5.10.38-21.hl05.el7.x86_64) 7 (Core)'
[SDS_Admin@rdma66 etc]$ sudo grub2-editenv list
saved_entry=CentOS Linux (5.10.38-21.hl05.el7.x86_64) 7 (Core)
(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
参考或摘抄:
Centos下Linux启动时默认内核设置机制;https://www.cnblogs.com/guoqingpeng/p/13216084.html