Grub 配置参考文档:https://wiki.centos.org/HowTos/Grub2
使用 ELRepo 升级内核
PS: 使用 ELRepo 升级内核需要访问公网,并且升级的内核版本为较新的稳定版本。如果无法访问公网,可以直接下载 rpm 包进行升级;如果想要升级到指定版本,则需要下载源码包编译升级。
1 导入公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
2 安装 repo 仓库包
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
3 查看repo有多少个包(关闭所有repo,开启kernel的repo)
[root@kernel-update ~]# yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
repo id repo name status
elrepo-kernel ELRepo.org Community Enterprise Linux Kernel Repository - el7 37
repolist: 37
4 查看 kernel 的包(lt:长期稳定版,ml:最新版)
[root@kernel-update ~]# yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
Installed Packages
kernel.x86_64 3.10.0-1160.el7 @anaconda
kernel-headers.x86_64 3.10.0-1160.25.1.el7 @updates
kernel-tools.x86_64 3.10.0-1160.el7 @anaconda
kernel-tools-libs.x86_64 3.10.0-1160.el7 @anaconda
Available Packages
kernel-lt.x86_64 5.4.123-1.el7.elrepo elrepo-kernel
kernel-lt-devel.x86_64 5.4.123-1.el7.elrepo elrepo-kernel
kernel-lt-doc.noarch 5.4.123-1.el7.elrepo elrepo-kernel
kernel-lt-headers.x86_64 5.4.123-1.el7.elrepo elrepo-kernel
kernel-lt-tools.x86_64 5.4.123-1.el7.elrepo elrepo-kernel
kernel-lt-tools-libs.x86_64 5.4.123-1.el7.elrepo elrepo-kernel
kernel-lt-tools-libs-devel.x86_64 5.4.123-1.el7.elrepo elrepo-kernel
kernel-ml.x86_64 5.12.8-1.el7.elrepo elrepo-kernel
kernel-ml-devel.x86_64 5.12.8-1.el7.elrepo elrepo-kernel
kernel-ml-doc.noarch 5.12.8-1.el7.elrepo elrepo-kernel
kernel-ml-headers.x86_64 5.12.8-1.el7.elrepo elrepo-kernel
kernel-ml-tools.x86_64 5.12.8-1.el7.elrepo elrepo-kernel
kernel-ml-tools-libs.x86_64 5.12.8-1.el7.elrepo elrepo-kernel
kernel-ml-tools-libs-devel.x86_64 5.12.8-1.el7.elrepo elrepo-kernel
5 安装稳定版本的内核
yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt.x86_64 -y
6 删除老版本的内核工具包
yum -y remove kernel-tools-libs.x86_64 kernel-tools.x86_64
7 安装稳定版本的内核工具包
yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt-tools.x86_64 -y
8 查看 /etc/grub2.cfg 中内核加载的顺序
[root@kernel-update ~]# grep "^menuentry" /etc/grub2.cfg | cut -d "'" -f2
CentOS Linux (5.4.123-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-930bf0b117f04d2799337a7387203b68) 7 (Core)
9 查看默认加载的内核
[root@kernel-update ~]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
10 修改默认加载的内核
[root@kernel-update ~]# grub2-set-default 'CentOS Linux (5.4.123-1.el7.elrepo.x86_64) 7 (Core)'
#查看
[root@kernel-update ~]# grub2-editenv list
saved_entry=CentOS Linux (5.4.123-1.el7.elrepo.x86_64) 7 (Core)
#or
#0 表示加载 /etc/grub2.cfg 中第一个内核
[root@kernel-update ~]# grub2-set-default 0
#查看
[root@kernel-update ~]# grub2-editenv list
saved_entry=0
11 重启验证
reboot
#查看
[root@kernel-update ~]# uname -a
Linux template 5.4.123-1.el7.elrepo.x86_64 #1 SMP Fri May 28 09:57:53 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux
·
注意事项
CentOS 7 升级内核后出现告警 “pstore: unknown compression: deflate”,这并不影响系统的正常启动,只是在 VGA 接口连接的显示器无法正常显示。
相关错误参考链接:https://elrepo.org/bugs/view.php?id=668
解决方法:
1 将 mgag200.modeset = 0 添加到内核启动选项 /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet ipv6.disable=1 mgag200.modeset=0"
GRUB_DISABLE_RECOVERY="true"
2 使用 grub2-mkconfig 创建一个新的 grub 配置
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
#grub2-mkconfig -o /boot/grub2/grub.cfg
·
源码编译升级内核
源码下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/
源码包中的文档包含很多重要信息,比如:
- README:包含编译的步骤信息
- Documentation/Changes:包含编译时需要的依赖包和版本要求(并非所有系统都需要所有工具)
- Documentation/00-INDEX:包含关于每个文件的信息
- Documentation/DocBook/ 子目录:为内核开发人员和用户提供了一些指南。
1 下载&解压源码包
tar xvf linux-4.4.228.tar.gz
2 确保没有过时的 .o 文件和依赖项
cd linux-4.4.228/
make mrproper
3 查看依赖包及版本要求(Documentation/Changes)
#我这里选择直接安装,至于没有的包也不必担心
#+ 因为 Changes 也指出了:并非需要所有工具
yum -y install gcc make binutils util-linux kmod e2fsprogs jfsutils reiserfsprogs xfsprogs squashfs-tools btrfs-progs pcmciautils quota-tools PPP isdn4k-utils nfs-utils procps oprofile udev grub mcelog iptables openssl bc
#PS:我的 repo 源是阿里的源
4 使用菜单窗口(menuconfig)生成配置文件 “.config”
#编译内核时,所有输出文件将默认为与内核源代码一起存储
#+ 使用选项 "make O=output/dir" 指定一个输出位置
mkdir /opt/build/kernel
make O=/opt/build/kernel menuconfig
报错:找不到 curses.h
#安装 ncurses-devel
yum -y install ncurses-devel
成功后,会看到如下界面:
我们保持默认配置,然后 Save,保存的名字为 .config。
[root@kernel-update ~]# ls -a /opt/build/kernel/
. .. .config Makefile scripts source
5 编译内核
make O=/opt/build/kernel -j 4
报错:找不到 bio.h
#安装 openssl-devel
yum -y install openssl-devel
6 编译安装内核
#如果将内核的任何部分配置为 modules,必须执行 "modules_install"
make O=/opt/build/kernel modules_install install
7 查看 /etc/grub2.cfg 中内核加载的顺序
[root@kernel-update ~]# grep "^menuentry" /etc/grub2.cfg | cut -d "'" -f2
CentOS Linux (4.4.228) 7 (Core)
CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-930bf0b117f04d2799337a7387203b68) 7 (Core)
8 查看默认加载的内核
[root@kernel-update ~]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
10 修改默认加载的内核
[root@kernel-update ~]# grub2-set-default 0
#查看
[root@kernel-update ~]# grub2-editenv list
saved_entry=0
11 重启验证
reboot
#查看
[root@elk-test linux-4.4.228]# uname -a
Linux elk-test 4.4.228 #1 SMP Tue Jun 1 14:42:44 CST 2021 x86_64 x86_64 x86_64 GNU/Linux
第一次重启的时候,出现一个报错:
解决方法:
vim /etc/grub2.cfg
# 修改 crashkernel,参考地址:https://blog.51cto.com/woymk/1621341
crashkernel=256M