Linux · 1 7 月, 2026 0

CentOS 7现代化改造:将Linux内核版本从3.10升级至6.6

写在前面的废话

自2024年官方彻底抛弃CentOS 7后,CentOS 7的默认Linux内核版本便永远定格在了3.10。

即使本人是一个“能用就行”主义者,但3.x的内核再怎么说也太老了。就比如BBR拥塞控制算法(2016年发布),支持的最低内核版本都是4.9。

许久之前,升级内核还可以用过yum install这种简单粗暴的方式,然而原先用来安装内核的仓库已经删库跑路。所以本文带你直接下载Linux内核的源码,并用编译源码的方式将内核版本升级至6.6.52。

为什么是6.6?
CentOS 7的glibc 2.17和内核工具链已经十分老旧,能稳定编译的最高内核版本大约是6.6 LTS。
据说6.7~6.9也能编译,但某些功能会自动禁用。而从6.10开始大量功能依赖新工具链,CentOS 7几乎无法完整编译。
同时6.6似乎也是最后一个不依赖Rust的LTS内核。老旧的工具链对Rust并不友好。

事前准备

如果你还没有安装编译所需的工具,且没有更新CentOS官方仓库地址,请先阅读这篇文章 完成仓库更新。

然后通过YUM安装编译工具:

yum groupinstall -y "Development Tools"
yum install -y ncurses-devel openssl-devel elfutils-libelf-devel bc flex bison

还有就是最重要的:为避免悲剧,更换内核前请注意备份系统!

接下来看我操作

  1. 下载并解压源码并进入源码目录
KVER=${KVER:-6.6.52}
cd /usr/src
curl -LO https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-$KVER.tar.xz
tar -xf linux-$KVER.tar.xz
cd linux-$KVER
  1. 生成配置
  • 首先,基于现行旧内核支持的模块制作新内核的编译配置:
cp -v /boot/config-$(uname -r) .config || true
yes "" | make oldconfig
# oldconfig不会自动开启新功能,只会补齐新内核新增的选项
  • 然后,执行make menuconfig,在菜单中选择想要编译进新内核的新模块。
    这一步虽然是可选步骤,但如果想使用像BBR这种在3.10之后版本中引入的特性,需要额外添加。
开启BBR选项所在位置:
Networking support  --->
    Networking options  --->
        TCP: advanced congestion control  --->
            <*> BBR congestion control algorithm
  1. 开始编译内核和各个模块
make -j$(nproc)
make -j$(nproc) modules

注:编译过程中如果出现跟tar有关的报错,请参考这篇文章解决。

  1. 安装内核
make modules_install
make install
grub2-mkconfig -o /boot/grub2/grub.cfg
# ^^ 执行结果中出现新版本内核则说明新内核已被安装
  1. 设置内核启动顺序并重启
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
# ^^ 如果新内核显示在列表第一位,那么这里的数字就是0。以此类推:
grub2-set-default 0
reboot

重启完成后,用uname -a命令确认内核升级完成。

一键安装脚本

上述步骤1~4可用以下脚本一键执行。注意在“[2/4] 生成配置”时会弹出模块选择菜单,需要手工交互。不需要的话可以注释掉make menuconfig那一行。

#!/bin/bash
set -e

KVER=${KVER:-6.6.52}

echo "[1/4] 下载内核源码..."
cd /usr/src
curl -LO https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-$KVER.tar.xz
tar -xf linux-$KVER.tar.xz
cd linux-$KVER

echo "[2/4] 生成配置..."
cp -v /boot/config-$(uname -r) .config || true
yes "" | make oldconfig
make menuconfig

echo "[3/4] 编译内核 + 模块..."
make -j$(nproc)
make -j$(nproc) modules

echo "[4/4] 安装内核..."
make modules_install
make install
grub2-mkconfig -o /boot/grub2/grub.cfg

写在最后的废话

有人说,换成更加现代操作系统不行吗?

还真不一定行。一个典型的例子就是阿里云那个最便宜的t6突发实例

CentOS 7在上面稳定运行了将近一坤年。前几天本人将其OS更换为RockyLinux 10。

谁曾想以前从未感觉到,这服务器性能低到令人发指。dnf update级别的命令可以让它直接宕机(就是连后台VNC进去都无法操作的那种),突发实例的CPU积分更是瞬间清零。

最后还是老老实实换回了CentOS 7,依旧能平稳运行。看来这古董系统还要再战半个世纪。