字数 2568,阅读大约需 13 分钟
最近终于下决心,把公司一台服务器上老掉牙的CentOS 7升级到了Rocky Linux 9,中间踩了无数坑,包括升级完成后由于在CentOS 7上自行编译升级了一些核心库,导致升级后服务器无法启动,又进入应急恢复模式模式修复,血泪教训,因此有了些系列,详细记录了升级步骤、遇到的问题及排查过程。希望对有需要的人有帮助。这里再重申一次:危险操作,没有十足的把握,切勿尝试
一、 为什么要升级?—— 升级的充分理由
CentOS 7 已于 2024 年 6 月 30 日 End of Life(EOL)!
这是升级的最核心原因。CentOS 7 在 2024 年 6 月 30 日 正式停止维护(End of Life),这意味着:
1. 不再提供安全更新
- • 官方仓库已停止更新:CentOS 官方不再发布任何安全补丁
- • 漏洞无人修复:发现的 CVE 漏洞永远不会被修复
- • 风险日益增加:随着时间推移,已知漏洞越来越多,系统越来越危险
举例说明:
- • 2024 年 7 月后发现的 OpenSSL 心脏出血类漏洞
- • 这些都永远不会在 CentOS 7 上得到修复!
2. 软件版本严重过时
CentOS 7 的基础软件版本已经非常老旧:
实际问题:
3. 合规性风险
如果你的业务涉及以下场景,继续使用 CentOS 7 可能带来合规风险:
- • PCI DSS 支付卡行业标准:要求使用受支持的操作系统版本
- • 等保 2.0:中国网络安全等级保护要求使用安全版本
- • SOC 2 / ISO 27001:审计时可能因使用 EOL 系统而不通过
审计风险: 安全审计时,"使用已停止维护的操作系统" 会被标记为高风险项。
4. 不支持新硬件
CentOS 7 的内核(3.10)发布于 2013 年,对现代硬件支持极差:
- • 新型 CPU:Intel 第 10 代+、AMD Ryzen 5000+ 支持不佳
- • NVMe SSD:可能没有最优驱动,性能无法发挥
- • 新网卡:2.5G/5G/10G 网卡可能没有驱动
- • USB 4.0 / Thunderbolt:不支持
5. 已知的严重漏洞无法修复
以下是 CentOS 7 上无法修复的部分高危漏洞示例:
- • CVE-2024-XXXX(假设的新漏洞):内核级权限提升,无法修复
- • OpenSSL 相关漏洞:版本太老,不支持新版本
攻击者知道这些系统有漏洞且不会修复,CentOS 7 服务器成为"软柿子"。
6. 隐性成本增加
继续使用 CentOS 7 的"省钱"是假象,实际成本更高:
- • 安全事件处理成本:一次入侵事件的损失远超升级成本
- • 人工维护成本:需要手动编译软件、打补丁、做 workaround
7. 为什么选择 Rocky Linux 9?
Rocky Linux 是 CentOS 的最佳替代品:
Rocky Linux 9 支持周期:
重要提示
升级风险提示:
- • 如果你的服务器托管在
IDC机房,又自行编译安装过一些核心组件,比如openssl之类的,请确保安装有远程控制卡,可以在系统启动失败的情况下通过远程控制卡连接到控制台进行修复工作,如果没有控制卡,请勿尝试,切记!!! - • 生产环境请在维护窗口期操作,并确保有可回滚方案
- • 升级过程中不要中断 SSH 连接,建议使用带 IPMI/KVM 的服务器
⚡ 紧急提醒:如果你还在用 CentOS 7...
请立即评估以下风险:
- 1. 你的服务器暴露在公网吗? → 风险极高,建议立即迁移
- 2. 处理敏感数据吗? → 合规风险,可能面临审计不通过
不要心存侥幸! 继续使用 EOL 系统的代价远大于升级的成本。
1.1 升级路径概览
由于无法直接从 CentOS 7 升级到 Rocky Linux 9,需要按以下路径分阶段进行:
CentOS 7.9 → CentOS 8.5 → Rocky Linux 8.8 → Rocky Linux 9.2
整个过程大约需要 1-2 小时,具体时间取决于网络速度和服务器性能。
1.2 环境要求检查
1.2.1 确认当前系统版本
# 检查当前系统版本
cat /etc/redhat-release
uname -r
uname -a
预期输出示例:
CentOS Linux release 7.9.2009 (Core)
3.10.0-1160.95.1.el7.x86_64
注意: 如果你的版本低于 CentOS 7.9,请先执行 yum -y update 升级到最新版本。
1.2.2 检查磁盘空间
# 检查根分区剩余空间,建议至少保留 10GB 以上
df -h /
# 检查 /boot 分区空间,建议保留 500MB 以上
df -h /boot
如果空间不足,请先清理:
# 清理 yum 缓存
yum clean all
# 删除旧内核(谨慎操作,保留当前使用的内核)
package-cleanup --oldkernels --count=1
1.2.3 备份重要数据
# 备份关键配置文件
cp /etc/fstab /etc/fstab.bak
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 备份网络配置
cp /etc/sysconfig/network-scripts/ifcfg-* /root/network-backup/ 2>/dev/null || true
# 记录已安装的重要软件包列表
rpm -qa > /root/installed-packages-before-upgrade.txt
1.3 更换国内镜像源(加速下载)
为了加快下载速度,建议更换为阿里云镜像源。
1.3.1 备份原有源配置
cd /etc/yum.repos.d/
cp CentOS-Base.repo CentOS-Base.repo.bak
1.3.2 更换阿里云镜像源
# 下载阿里云 CentOS 7 源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 如果没有 wget,使用 curl
# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
1.3.3 清理并重建缓存
yum clean all
yum makecache
验证镜像源是否生效:
yum repolist
你应该能看到 base-aliyun、extras-aliyun、updates-aliyun 等仓库。
1.4 安装必要的工具
1.4.1 安装 EPEL 仓库
EPEL 包含了许多额外的软件包,升级过程中可能需要:
yum -y install epel-release
1.4.2 安装升级工具
# 安装必要的升级工具
yum -y install yum-utils rpmconf
# 安装 dnf(CentOS 8+ 默认使用 dnf)
yum -y install dnf
1.4.3 运行 rpmconf 处理配置文件
# 运行 rpmconf,如果出现提示,输入 Y 和回车继续
# 如果没有提示,继续下一步
rpmconf -a
说明:rpmconf 会检查系统中需要处理的配置文件冲突。
1.5 切换到 DNF 包管理器
从 CentOS 8 开始,系统默认使用 dnf 替代 yum。
1.5.1 移除 yum(可选但推荐)
# 移除 yum 和 yum-metadata-parser
dnf -y remove yum yum-metadata-parser
# 清理 yum 配置目录
rm -Rf /etc/yum
注意: 这一步执行后,就不能使用 yum 命令了,请确保 dnf 可以正常使用。
1.5.2 验证 dnf 安装
dnf --version
预期输出:
4.0.9
Installed: dnf-0:4.0.9.2-2.el7_9.noarch
1.6 检查并解决包冲突(重要)
在升级之前,必须先解决包冲突问题,否则后续升级会遇到报错。
1.6.1 检查孤立包和依赖问题
# 检查孤立包(没有依赖的包)
package-cleanup --leaves
# 检查损坏的依赖
package-cleanup --orphans
1.6.2 标记可能冲突的包
注意: 这些包可能在升级过程中引起冲突,先记录下来:
# 列出可能引起冲突的包
rpm -qa | grep -E "(sysvinit-tools|annobin|dracut-network)"
常见冲突包:
- •
sysvinit-tools - 与 util-linux 冲突 - •
dracut-network - 网络管理器依赖问题
1.7 准备阶段检查清单
在开始正式升级前,请确认以下事项:
1.8 升级前的最后提醒
再次确认你是否真的需要升级?
必须升级的情况(符合任意一条就必须升级):
可以暂缓升级的情况(同时满足以下条件):
即便如此,如果条件允许,还是尽可能升级到新版本!