如果服务器操作系统的内核无法满足您的业务需求,您可以选择更换内核版本,即可在较小(相较于更换操作系统)的影响范围内满足业务要求。
本文以CentOS操作系统为例,介绍更换内核版本的操作流程。
操作场景 提升系统性能
新的内核版本可能会带来性能优化,例如更快的文件系统操作、更低的延迟或更高的吞吐量。支持新硬件
当服务器安装了新的硬件设备,但当前内核不支持该设备时,可能需要升级内核以获得对新硬件的支持。修复安全漏洞
新的内核版本可能会修复部分在旧内核中发现的安全漏洞。获取新特性支持
新的内核版本可能会引入一些新的功能特性,例如,新的文件系统、虚拟化技术、容器化功能等。注意事项 更换系统内核可能会出现兼容性、稳定性及安全问题,强烈建议您在操作前进行数据备份 。 更换内核操作需使用root
权限。 升级内核版本 升级内核小版本 若您仅需要升级内核的小版本,可通过yum官方源进行操作。
说明
本节以将CentOS 7.9内核版本由3.10.0-1160.102.1.el7
升级为3.10.0-1160.119.1
为例。
登录目标Linux服务器 。执行如下命令,查看当前内核版本。uname -r
回显示例: 执行如下命令,升级yum
包管理器。sudo yum update -y
执行如下命令,查看可安装的内核版本。sudo yum list kernel --showduplicates
回显示例: 执行如下命令,安装指定版本的内核。sudo yum install kernel-3.10.0-1160.119.1.el7 -y
说明
请将3.10.0-1160.119.1.el7
替换为实际内核版本。
更新引导配置。
执行如下命令,查看已安装的内核。
执行如下命令,设置默认使用的内核。sudo grub2-set-default 0
说明
请将0
替换为您在第7步中查询到的已安装内核序号。
执行如下命令,重启实例。sudo reboot
执行如下命令,查看当前内核版本,确认内核是否升级成功。uname -r
回显示例: 执行如下命令,安装新内核相关的内核软件包。yum install kernel-devel kernel-headers kernel-modules-extra kernel-tools kernel-tools-libs kernel-tools-libs-devel -y
回显示例:注意
若Yum源中没有所需版本的kernel-headers、kernel-devel等软件包。您可以自行下载安装:
下载目标软件包,例如通过清华大学镜像站 下载。 上传软件包至目标实例。了解更多 。 执行如下命令,安装目标软件包。rpm -ivh <待安装的RPM包>
升级内核大版本 若您需要升级内核的大版本,可通过ELRepo源或自行编译内核。
说明
本节以将CentOS 8.3内核版本由4.18.0-348.7.1
升级为6.10.11
为例。
步骤一:安装ELRepo源 登录目标Linux服务器 。
执行如下命令,查看当前内核版本。
uname -r
回显示例:
执行如下命令,更新软件包。
yum update -y
执行如下命令,导入ELRepo公钥。
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
执行如下命令,安装ELRepo源。
yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm -y
执行如下命令,替换ELRepo镜像仓库地址为清华大学开源软件镜像站,并注释mirrorlist
。
sed -i "s@mirrorlist@#mirrorlist@g" /etc/yum.repos.d/elrepo.repo ;sed -i "s@elrepo.org/linux@mirrors.tuna.tsinghua.edu.cn/elrepo@g" /etc/yum.repos.d/elrepo.repo
注意
本文使用清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/
作为镜像仓库地址,您也可以按需选用其他镜像站。了解更多 。
执行如下命令,更新软件包缓存。
sudo yum makecache
步骤二:安装新内核 在目标实例中执行如下命令,载入ELRepo源数据。yum --disablerepo="*" --enablerepo="elrepo-kernel" repolist
回显示例: 查看ELRepo源中当前操作系统支持使用的内核包。yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
回显示例说明
kernel-ml
:代表主线内核。它包含了最新的功能、改进和实验性的特性,更新频繁。若您追求最新的技术和功能,对系统稳定性有一定的容忍度,并且愿意处理可能出现的问题,可以选用该类内核。kernel-lt
:长期支持(LTS)内核。主要关注稳定性和兼容性,这些内核版本经过了更广泛的测试,并且在较长时间内得到支持。若您需要稳定运行环境、不希望频繁更新内核或者对新功能需求不高,可以选用该类内核。 执行如下命令,安装最新的主线内核。yum --enablerepo=elrepo-kernel install kernel-ml -y
说明
若您期望安装指定内核,可执行如下命令,请将kernel-ml-6.10.11-1.el8.elrepo
替换为上一步查询获得的目标内核版本。
yum --enablerepo="elrepo-kernel" install kernel-ml-6.10.11-1.el8.elrepo
步骤三:修改Grub配置 执行如下命令,查看已安装的内核信息。grubby --info=ALL | grep ^kernel
回显示例: 执行如下命令,指定启动实例时使用的默认内核。grubby --set-default=/boot/vmlinuz-6.10.11-1.el8.elrepo.x86_64
回显示例:说明
本文以使用安装的6.10.11-1.el8.elrepo.x86_64
内核为例,请将/boot/vmlinuz-6.10.11-1.el8.elrepo.x86_64
替换为上一步查询获取的实际目标内核信息。
执行如下命令,重启实例。reboot
执行如下命令,确认实例内核是否更新成功。uname -r
回显示例: 安装新内核相关软件包。
执行如下命令,查看已安装的内核软件包。rpm -qa | grep kernel
回显示例: 执行如下命令,删除旧内核软件包。yum remove kernel-core-4.18.0 kernel-devel-4.18.0 kernel-tools-libs-4.18.0 kernel-headers-4.18.0 -y
说明
本文以删除4.18.0
版本内核相关软件包为例,请将其替换为实际软件包。
执行如下命令,安装当前使用的新内核相关软件包。yum --enablerepo="elrepo-kernel" install kernel-ml-devel kernel-ml-headers kernel-ml-modules-extra kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-devel -y
执行如下命令,确认您需要的新内核及其内核软件包均已安装。rpm -qa | grep kernel
回显示例: 说明
本节以将CentOS 7.9内核版本由3.10.0-1160.102.1.el7
升级为5.4.278
为例。
步骤一:下载内核源码 前往Kernel官方 站点,进入您期望下载的目标内核版本目录。
获取目标版本内核源码包下载链接。
说明
本文以安装5.4.278
内核为例,获取进入v5.x目录后获取linux-5.4.278.tar.gz的下载链接为https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.278.tar.gz
。
登录目标Linux服务器 。
在待更换内核的实例中,执行如下命令,下载内核源码包。
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.278.tar.gz
执行如下命令,下载系统安装相关软件包。
yum install bc gcc make python3 ncurses-devel flex bison openssl-devel elfutils-libelf-devel -y
执行如下命令,查看GCC版本。
gcc --version
若版本不低于7
,请继续后续步骤。 若版本低于7
,请执行如下命令,升级GCC。
执行如下命令,安装SCL默认源。
yum install centos-release-scl scl-utils-build -y
执行如下命令,替换软件仓库地址替换为国内镜像地址。
说明
本文以替换为火山引擎镜像地址https://mirrors.volces.com/
为例,您可以按需替换为目标镜像地址。
sed -i "s@#baseurl=http://mirror.centos.org@baseurl=https://mirrors.volces.com/@g" /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
sed -i "s@mirrorlist=@#mirrorlist=@g" /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
sed -i "s@# baseurl=http://mirror.centos.org@baseurl=https://mirrors.volces.com/@g" /etc/yum.repos.d/CentOS-SCLo-scl.repo
sed -i "s@mirrorlist=@#mirrorlist=@g" /etc/yum.repos.d/CentOS-SCLo-scl.repo
执行如下命令,刷新Yum缓存。
yum repolist && yum clean all && yum makecache
执行如下命令,安装高版本GCC。
yum install -y devtoolset-10-gcc devtoolset-10-gcc-c++ devtoolset-10-binutils
执行如下命令,使新版本GCC生效。
执行如下命令,验证新安装的GCC是否生效。
gcc --version
回显示例:
步骤二:编译内核 在下载的内核源码包所在目录下,执行如下命令进行解压。
tar xvf linux-5.4.278.tar.gz
说明
请将linux-5.4.278.tar.gz
替换为实际源码包。
执行如下命令,进入解压后的源码目录。
cd linux-5.4.278
说明
请将linux-5.4.278
替换为实际源码包。
执行如下命令,复制当前内核使用的配置文件。
cp -p /boot/config-$(uname -r) .config
执行如下命令,修改新内核的配置文件。
sed -i "s@CONFIG_SYSTEM_TRUSTED_KEYS@#CONFIG_SYSTEM_TRUSTED_KEYS@g" /root/linux-5.4.278/.config ;sed -i "s@CONFIG_DEBUG_INFO_BTF@#CONFIG_DEBUG_INFO_BTF@g" /root/linux-5.4.278/.config
说明
请将/root/linux-5.4.278/.config
替换为您在第8步中复制获得的配置文件所在路径。
编辑内核参数。
执行如下命令,进入文本界面。
make menuconfig
按需修改内核参数配置,本文仅修改内核名称。
使用方向键选中General setup
,按回车键进入通用设置页面。 使用方向键选中Local version - append to kernel release
,按回车键进入内核版本自定义设置。 输入跟随在内核版本后的本地信息,本文以-1.el7.x86
例,最终内核信息将展示为5.4.278-1.el7.x86
。 按tab
键选中< Ok >
,按回车键保存修改。 按tab
键选中< Exit >
,按回车键回到主页面。
按tab
键选中< Save >
,按回车键保存修改。
按需修改内核配置文件名称,按tab
键选中< Ok >
,按回车键保存修改。
按回车键退出编辑。
按Tab
键选中< Exit >
,按回车键退出编辑。
执行如下命令,编译内核。
make -j $(nproc)
编译成功回显示例:
执行如下命令,将编译后的内核模块复制至系统目录。
make modules_install
执行如下命令,安装内核镜像及boot初始化文件系统镜像文件。
make install
步骤三:修改Grub配置 更新引导配置。
执行如下命令,查看已安装的内核。
执行如下命令,设置默认使用的内核。sudo grub2-set-default 0
说明
请将0
替换为您在第2步中查询到的已安装内核序号。
执行如下命令,重启实例。sudo reboot
执行如下命令,查看当前内核版本,确认内核是否升级成功。uname -r
回显示例: 安装新内核相关软件包。
执行如下命令,查看已安装的内核软件包。rpm -qa | grep kernel
回显示例: 执行如下命令,删除旧内核软件包。yum remove kernel-tools-3.10.0 kernel-3.10.0 kernel-tools-libs-3.10.0 kernel-headers-3.10.0 kernel-devel-3.10.0 -y
说明
本文以删除3.10.0
版本内核及其相关软件包为例,请将其替换为实际软件包。
执行如下命令,安装新内核相关的内核软件包。yum install kernel-devel kernel-headers kernel-modules-extra kernel-tools kernel-tools-libs kernel-tools-libs-devel -y
注意
若Yum源中没有所需版本的kernel-headers、kernel-devel等软件包。您可以自行下载安装:
下载目标软件包,例如通过清华大学镜像站 下载。 上传软件包至目标实例。了解更多 。 执行如下命令,安装目标软件包。rpm -ivh <待安装的RPM包>
执行如下命令,确认您需要的新内核及其内核软件包均已安装。rpm -qa | grep kernel