CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

老的应用服务必须要跑在CentOS 7系统,可坑爹的CentOS 7官方早都不维护了!尤其今年2026,Linux各种核弹级漏洞一天能爆出好几个,能堵一个是一个,实在修复不了,真被黑了也认命,下面是本人自己找到亲测可用的CentOS 7.9 内核从3.10 升级到 5.4.218的教程,来自于CentOS 7.9 内核升级实战:从 3.10 到 5.4.218 – 墨天轮!但这位博主的文章排版实在看的费劲,本人算是重新排版的吧。

一、升级背景与核心诉求

1.1 3.10 内核的核心痛点解析

1.1.1 软件兼容性瓶颈

随着云原生、大数据等技术的普及,许多主流软件(如 Kubernetes 高版本、Elasticsearch 新特性、机器学习框架 TensorFlow 等)对内核版本提出了更高要求,明确标注不支持 3.10 这类老旧内核。例如,部分软件依赖的 bpf 功能、新的文件系统特性在 3.10 内核中存在缺失或bug,导致安装后无法启动或运行异常。

1.1.2 cgroup 相关稳定性风险

3.10 内核的 cgroup 子系统存在设计缺陷,在高并发资源调度场景下(如容器集群、大数据任务调度),可能出现资源统计异常、进程调度死锁等问题,最终导致整个服务器或集群挂死,且难以通过常规手段排查定位。

1.1.3 xfs 文件系统适配缺陷

经实践验证,当 CentOS 7 系统同时满足“3.10 内核 + xfs 磁盘格式”条件时,会触发内核与文件系统的兼容性问题,表现为磁盘 IO 卡顿、文件读写超时甚至系统 panic,这一问题在数据密集型业务场景中尤为突出。

1.2 内核版本选型依据

1.2.1 为什么选择 5.4.218 LTS 内核

  • 长期支持特性:Linux 5.4 系列是官方认证的 LTS(Long-Term Support)版本,维护周期至 2026 年,能够为生产环境提供持续的安全更新与 bug 修复,避免频繁升级内核带来的风险;
  • 工具链兼容性:5.4.218 版本经过 ELRepo 团队适配,能够兼容 CentOS 7.9 自带的 GCC 4.8 工具链,无需升级系统基础工具链即可正常安装运行,降低了升级复杂度;
  • 功能完整性:该版本修复了 3.10 内核的 cgroup 缺陷、xfs 适配问题,同时支持现代软件所需的核心特性,能够彻底解决兼容性瓶颈。

1.2.2 ELRepo 仓库支持现状说明

ELRepo 是 CentOS/RHEL 系统最可靠的第三方内核仓库,但由于 CentOS 7 已 EOL,其在 2024 年底停止了主线内核(kernel-ml)的支持。不过,针对 5.4 这类 LTS 内核,ELRepo 仍通过归档仓库提供 kernel-lt(Long-Term Support)版本的构建包,这也是本次选择 kernel-lt-5.4.218 的核心原因。

1.3 升级前置原则

1.3.1 数据备份优先级

内核升级属于系统级操作,存在一定风险(如启动失败、硬件驱动不兼容等)。升级前必须完成两项核心备份:一是系统重要配置文件(/etc、/boot 目录)备份至异地存储;二是业务数据全量备份,确保升级失败时可快速回滚。

1.3.2 测试环境预验证要求

建议先在与生产环境配置一致的测试服务器上完成升级验证,重点测试:新内核启动稳定性、业务软件运行兼容性、硬件驱动(如网卡、存储控制器)适配性,确认无异常后再推广至生产环境。

二、升级前环境全景确认

在执行升级操作前,需先对系统环境进行全面核查,确保满足升级前提条件,避免因环境差异导致升级失败。

2.1 系统基础信息核查

2.1.1 操作系统版本验证

通过以下命令确认系统为 CentOS 7.9 版本,这是本次升级的基础环境要求:

cat /etc/redhat-release
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

2.1.2 当前内核版本确认

核查当前运行的内核版本,确认是否为需要升级的 3.10 系列:

uname -r
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

2.1.3 其中 OceanBase 也不推荐使用 3.10 版本的内核

CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

2.2 依赖环境预检查

2.2.1 EPEL 仓库安装状态验证

EPEL 仓库提供了大量 CentOS 官方仓库缺失的依赖包,部分内核安装依赖需要从 EPEL 获取,因此需先确认 EPEL 已安装:

yum install -y epel-release
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

若输出“Package epel-release-7-14.noarch already installed and latest version”,说明已安装;若未安装,命令会自动完成安装。

2.2.2 核心工具链可用性检查

后续生成 GRUB 配置、构建 initramfs 镜像需要 grub2-tools 和 dracut 工具,提前确认是否安装(若未安装,将在后续步骤中补充安装):

rpm -q grub2-tools dracut
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

三、内核升级实操步骤

3.1 仓库配置与密钥导入

3.1.1 EPEL 仓库安装(已安装场景确认)

如 2.2.1 所示,若系统未安装 EPEL 仓库,需先执行以下命令安装,确保后续依赖包可正常获取:

yum install -y epel-release
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

3.1.2 ELRepo GPG 密钥导入

ELRepo 仓库的 RPM 包采用 GPG 签名验证,需先导入密钥以确保包的完整性和安全性:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

执行后无报错,说明密钥导入成功。

3.2 内核 RPM 包手动下载

由于 ELRepo 官方 yum 仓库已停止对 CentOS 7 内核包的主动维护,直接通过 yum 安装可能失败,因此采用“手动下载 RPM 包 + 本地安装”的方式,这是当前最可靠的方案。

3.2.1 下载目录准备

为便于管理,创建专门的下载目录,避免与系统其他文件混淆:

cd /tmp/

mkdir devel

cd devel/
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

3.2.2 kernel-lt 主包与devel包下载

选择 ELRepo 归档镜像站(coreix.net)下载 kernel-lt-5.4.218 主内核包和devel包(devel包用于后续软件编译依赖,建议必装):

wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.218-1.el7.elrepo.x86_64.rpm
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

继续下载devel包:

wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.218-1.el7.elrepo.x86_64.rpm
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

3.2.3 备选下载方案(链接失效处理)

若上述镜像站链接失效,可通过以下方式获取:

  1. 直接访问 ELRepo 归档目录浏览下载:http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/
  2. 选择 5.4 系列其他稳定版本(如 5.4.225,同样为 LTS 迭代版),替换下载链接中的版本号即可:
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.225-1.el7.elrepo.x86_64.rpm
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64.rpm

#注释
我这边用wget在服务器下载,速度只有50kb,索性直接在本地电脑挂上VPN后,直接用浏览器下载,然后上传到安装目录中去
http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.225-1.el7.elrepo.x86_64.rpm
http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64.rpm
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

3.3 内核 RPM 包安装

3.3.1 直接安装操作

使用 rpm -ivh 命令安装下载的内核包,该命令会保留旧内核,仅新增安装新内核,安全性更高:

ls
rpm -ivh kernel-lt-5.4.218-1.el7.elrepo.x86_64.rpm \
>         kernel-lt-devel-5.4.218-1.el7.elrepo.x86_64.rpm

我这里使用rpm -ivh kernel-lt-5.4.218-1.el7.elrepo.x86_64.rpm \

kernel-lt-devel-5.4.218-1.el7.elrepo.x86_64.rpm直接安装出现了错误,似乎是第二个devel直接通过浏览器下载的文件有问题?怎么尝试都安装不了,然后又通过

wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64.rpm

的方式下载了一遍,然后

rpm -ivh kernel-lt-devel*.rpm

直接安装,结果提示安装成功了……,如果你也安装不了,可以问问deepseek

CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

输出中显示“100%”且无报错,说明安装成功。

3.3.2 安装冲突处理方案

若安装时提示“kernel-tools”“kernel-headers”等包冲突(如“file /usr/bin/kernel-install from install of kernel-lt-devel-xxx conflicts with file from package kernel-headers-xxx”),可先卸载冲突包(此类包对系统基础运行无影响),再重新安装:

yum remove -y kernel-tools kernel-tools-libs kernel-headers
# 卸载完成后重新执行安装命令
rpm -ivh kernel-lt-5.4.218-1.el7.elrepo.x86_64.rpm kernel-lt-devel-5.4.218-1.el7.elrepo.x86_64.rpm

3.4 GRUB 配置修复与优化

安装新内核后,CentOS 7 可能未自动更新 GRUB 启动配置,导致重启后无法识别新内核,需手动完成配置修复。

3.4.1 必要工具安装(grub2-tools、dracut)

如 2.2.2 所示,若系统未安装 grub2-tools,需先执行以下命令安装(dracut 若未安装也需补充):

yum install -y grub2-tools dracut
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * elrepo: mirror.rackspace.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Package dracut-033-572.el7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package grub2-tools.x86_64 1:2.02-0.87.0.2.el7.centos.14 will be installed
--> Processing Dependency: grub2-tools-minimal = 1:2.02-0.87.0.2.el7.centos.14 for package: 1:grub2-tools-2.02-0.87.0.2.el7.centos.14.x86_64
--> Processing Dependency: grub2-common = 1:2.02-0.87.0.2.el7.centos.14 for package: 1:grub2-tools-2.02-0.87.0.2.el7.centos.14.x86_64
--> Running transaction check
---> Package grub2-common.noarch 1:2.02-0.87.0.2.el7.centos.14 will be installed
---> Package grub2-tools-minimal.x86_64 1:2.02-0.87.0.2.el7.centos.14 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==================================================================================================
 Package                   Arch         Version                               Repository     Size
==================================================================================================
Installing:
 grub2-tools               x86_64       1:2.02-0.87.0.2.el7.centos.14         updates       1.8 M
Installing for dependencies:
 grub2-common              noarch       1:2.02-0.87.0.2.el7.centos.14         updates       733 k
 grub2-tools-minimal       x86_64       1:2.02-0.87.0.2.el7.centos.14         updates       178 k

Transaction Summary
==================================================================================================
Install  1 Package (+2 Dependent packages)

Total download size: 2.7 M
Installed size: 14 M
Downloading packages:
(1/3): grub2-tools-2.02-0.87.0.2.el7.centos.14.x86_64.rpm                  | 1.8 MB  00:00:00     
(2/3): grub2-common-2.02-0.87.0.2.el7.centos.14.noarch.rpm                 | 733 kB  00:00:00     
(3/3): grub2-tools-minimal-2.02-0.87.0.2.el7.centos.14.x86_64.rpm          | 178 kB  00:00:00     
--------------------------------------------------------------------------------------------------
Total                                                              11 MB/s | 2.7 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
PackageKit-1.1.10-2.el7.centos.x86_64 has missing requires of PackageKit-backend
  Installing : 1:grub2-common-2.02-0.87.0.2.el7.centos.14.noarch                              1/3 
  Installing : 1:grub2-tools-minimal-2.02-0.87.0.2.el7.centos.14.x86_64                       2/3 
  Installing : 1:grub2-tools-2.02-0.87.0.2.el7.centos.14.x86_64                               3/3 
  Verifying  : 1:grub2-tools-2.02-0.87.0.2.el7.centos.14.x86_64                               1/3 
  Verifying  : 1:grub2-tools-minimal-2.02-0.87.0.2.el7.centos.14.x86_64                       2/3 
  Verifying  : 1:grub2-common-2.02-0.87.0.2.el7.centos.14.noarch                              3/3 

Installed:
  grub2-tools.x86_64 1:2.02-0.87.0.2.el7.centos.14                                                

Dependency Installed:
  grub2-common.noarch 1:2.02-0.87.0.2.el7.centos.14                                               
  grub2-tools-minimal.x86_64 1:2.02-0.87.0.2.el7.centos.14                                        

Complete!
[root@worker3 devel]# 
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

我自己执行yum install -y grub2-tools dracut,提示无需操作

CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

3.4.2 新内核文件存在性验证

安装完成后,先确认新内核的核心文件已正确写入 /boot 目录:

ls /boot/vmlinuz-*5.4*
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

若输出 /boot/vmlinuz-5.4.218-1.el7.elrepo.x86_64,说明内核文件存在,可继续后续操作。

3.4.3 initramfs 镜像手动生成

initramfs 是系统启动时的临时根文件系统,包含内核启动所需的驱动和工具,需为新内核手动生成:

dracut -f /boot/initramfs-5.4.218-1.el7.elrepo.x86_64.img 5.4.218-1.el7.elrepo.x86_64
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

-f 参数表示强制覆盖已存在的镜像文件,执行后无报错即生成成功。

3.4.4 GRUB 配置重新生成

使用 grub2-mkconfig 命令重新扫描系统内核,生成新的 GRUB 配置文件:

grub2-mkconfig -o /boot/grub2/grub.cfg
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

输出中显示“Found linux image: /boot/vmlinuz-5.4.218-1.el7.elrepo.x86_64”,说明 GRUB 已识别新内核。

3.4.5 GRUB 启动项确认

再次查看 GRUB 菜单,确认新内核已添加到启动列表:

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg

新内核已作为第 0 项(默认启动项顺序),说明配置成功。

3.4.6 默认启动项设置

为确保重启后自动进入新内核,执行以下命令将第 0 项(新内核)设为默认启动项:

grub2-set-default 0
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

验证默认启动项设置:

grub2-editenv list
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

输出“saved_entry=0”,说明默认启动项设置成功。

3.5 系统重启与内核切换

3.5.1 重启操作执行

完成所有配置后,执行重启命令,使新内核生效:

reboot
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

重启过程中,系统会自动加载默认的新内核。

3.5.2 重启后连接确认

重启完成后,重新连接服务器,准备进行后续验证。

四、升级后全面验证

重启后需从多个维度验证内核升级效果,确保系统稳定、内核生效、软件兼容。

4.1 内核版本核心验证

4.1.1 运行内核版本确认

执行 uname -r 命令,确认当前运行的内核已切换为 5.4.218:

uname -r
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

输出结果与预期一致,说明内核切换成功。

4.1.2 已安装内核清单查看

查看系统中已安装的所有内核,确认旧内核未被删除,新内核已成功安装:

rpm -q kernel kernel-lt
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

输出显示,3.10 系列旧内核均保留,新内核 kernel-lt-5.4.218 已成功安装。

4.2 系统基础状态确认

4.2.1 操作系统版本一致性验证

确认操作系统版本仍为 CentOS 7.9,未因内核升级发生变更:

cat /etc/redhat-release

4.2.2 内核编译信息核查

查看内核编译信息,确认其适配 CentOS 7 的工具链:

cat /proc/version
CentOS 7.9 内核从3.10 升级到 5.4.218(已验证)

输出显示内核由 GCC 9.3.1 编译,且针对 EL7 系统优化,确保了与系统工具链的兼容性。

4.3 业务软件兼容性验证

(建议根据实际业务场景补充)安装或启动之前与 3.10 内核不兼容的软件,验证其是否能正常运行。例如:

  • 启动 Kubernetes 集群组件,确认无启动报错;
  • 运行大数据处理任务,验证资源调度正常;
  • 启动机器学习框架,确认依赖库加载成功。

五、关键注意事项与故障预案

5.1 日常使用注意事项

5.1.1 旧内核保留原则

升级后切勿立即删除旧内核,建议保留至少 1-2 个 3.10 系列旧内核。若新内核运行过程中出现稳定性问题(如频繁 panic、硬件驱动不兼容),可在开机时通过 GRUB 菜单选择旧内核启动,快速恢复系统。

5.1.2 系统更新限制

CentOS 7 已 EOL,官方不再提供系统级更新,升级内核后无需执行 yum update 命令,避免意外覆盖新内核或导致依赖冲突。

5.2 常见故障排查方案

5.2.1 新内核无法启动问题

若重启后系统无法进入新内核,卡在启动界面或直接进入紧急模式,可按以下步骤处理:

  1. 重启服务器,开机时按 Esc 键进入 GRUB 菜单;
  2. 选择 3.10 系列旧内核启动,进入系统;
  3. 检查 /boot 目录空间是否充足(建议剩余空间 ≥ 1GB),若空间不足,删除无用的旧内核 initramfs 镜像或日志文件;
  4. 重新执行 dracut -f /boot/initramfs-5.4.218-1.el7.elrepo.x86_64.img 5.4.218-1.el7.elrepo.x86_64 和 grub2-mkconfig -o /boot/grub2/grub.cfg 命令,修复配置后再次重启。

5.2.2 GRUB 菜单无新内核选项

若执行 grub2-mkconfig 后仍未识别新内核,可能是内核文件安装不完整,可按以下步骤处理:

  1. 重新下载 kernel-lt 主包和devel包,确保文件完整性;
  2. 执行 rpm -e kernel-lt-5.4.218-1.el7.elrepo.x86_64 kernel-lt-devel-5.4.218-1.el7.elrepo.x86_64 卸载已安装的新内核;
  3. 重新执行 rpm -ivh 命令安装,安装完成后再次生成 GRUB 配置。

5.2.3 软件编译依赖缺失

若后续编译软件时提示“kernel-headers not found”,需确认 kernel-lt-devel 包已正确安装,且 /usr/src/kernels/ 目录下存在 5.4.218 内核的源码目录:

ls /usr/src/kernels/5.4.218-1.el7.elrepo.x86_64

若不存在,重新安装 kernel-lt-devel 包即可。

总结

本次 CentOS 7.9 内核从 3.10 到 5.4.218 的升级,成功解决了老旧内核的软件兼容性瓶颈与 cgroup 稳定性风险,同时通过选择 LTS 版本内核,确保了生产环境的长期可靠运行。整个升级过程的核心在于:充分利用 ELRepo 归档仓库获取稳定的 kernel-lt 包,通过手动安装避免 yum 仓库停止支持的影响,同时重点修复 GRUB 配置,确保新内核能够正常启动。


5.3 使用后续

问题的核心

  • 您当前的 5.4.218 内核来自 ELRepo 的 kernel-lt 仓库,但该仓库已停止为 CentOS 7 提供安全更新(最后版本就是 5.4.218,2022 年 10 月)。
  • 这意味着您使用的 5.4.218 无法获得 2022 年 10 月之后发现的内核漏洞补丁(包括您列出的那些 CVE)。
  • 而 CentOS 7 官方的 3.10 内核虽然版本老,但 Red Hat 通过 backport(向后移植) 方式将大量安全补丁移植到了 3.10 上,所以官方的 3.10 内核(例如 3.10.0-1160.119.1.el7实际已修复了那些 CVE,尽管版本号没变。

所以您的两难境地是:

  • 留在 5.4.218:内核新,但缺乏安全更新 → 有漏洞风险。
  • 降级回 3.10:安全补丁齐全,但内核老、功能少、性能可能不如 5.4。

所以实际上3.10内核在安全性上比5.4内核更安全!升级了个寂寞……

给TA打赏
共{{data.count}}人
人已打赏
个人笔记

Tracker服务器搭建历程

2026-3-25 22:53:23

问道专区

这是一个关于问道端游中的故事,我不得不提……

2026-3-20 23:53:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索