一、为什么 2010 年还要升级 CentOS 6.5 的内核
CentOS 6.5(2013-12-01 发布,是 CentOS 6 系列的最后一个主要版本)跑的是 2.6.32-431.el6.x86_64——一个 RHEL/CentOS 维护了 10 年的"长青"内核,对应 RHEL 的"zk 内核"分支。这套内核的好处是极其稳定,几乎所有服务器场景都能跑;坏处是新硬件支持差——比如后期出来的 Intel e1000e 网卡的某些固件 bug、SSD 控制器新特性、新 CPU 微码补丁等,都得靠第三方仓库才能拿到。
2010 年代初的运维圈子里,给生产服务器升级内核的标准动作就是:接 ELRepo。ELRepo(elrepo.org)是 RHEL/CentOS 生态最知名的第三方内核仓库,提供两套主线:
| 包名 | 来源 | 特点 |
|---|---|---|
kernel-lt | Linux stable | 长期维护版(Long Term),稳定性优先 |
kernel-ml | Linux mainline | 主线最新版,新特性优先 |
当时给生产服务器升级的常见选择是 kernel-lt——本文以 6.x 时代最常见的 kernel-lt-3.10.x 路线为例。
本文写于 2010 年,主要面向 CentOS 6.x 时代服务器。CentOS 6 已经在 2020-11-30 EOL,CentOS 7 已经在 2024-06-30 EOL,新机器建议直接上 Rocky / Alma / Ubuntu LTS。本篇留作"那个时代"的运维档案。
二、查清当前系统与内核版本
升级前先确认两件事:发行版版本、内核版本。
| |
lsb_release 在最小化安装的机器上默认没装,可以改用 cat /etc/redhat-release 兜底:
| |
三、解决 yum 下载 ELRepo 公钥时的 SSL 错误
直接 rpm --import ELRepo 的 GPG 公钥,6.x 时代很容易遇到:
| |
这是因为系统自带的 nss(Network Security Services)太老,跟不上 TLS 协议。解决方法就一条:先升级 nss:
| |
之后再 rpm --import 就正常了。
四、安装 ELRepo 仓库
ELRepo 提供按大版本分发的 release RPM,直接装就能拿到 repo 文件:
| |
这一步会生成 /etc/yum.repos.d/elrepo.repo,里面有两个仓库:
elrepo(主仓库,ELRepo 自有驱动)elrepo-kernel(内核专用)elrepo-extras
五、安装 kernel-lt 内核
只启用 elrepo-kernel 仓库,避免其他包被意外升级:
| |
安装完成后,新内核会出现在 /boot/ 下,同时 grub 也会自动加入对应的启动项。但grub 默认从序号 0 开始启动,新内核一般被装在最后,所以下一步要改默认启动顺序。
六、修改 grub 引导顺序
CentOS 6 时代的 grub 还是 legacy grub 1,配置文件是 /etc/grub.conf(实际软链接到 /boot/grub/grub.conf):
| |
把 default=N 改成新内核对应的序号(一般是 0)。文件里长这样:
| |
新内核放在 title 列表的最上面时,default=0 就指向它;放后面就改对应的序号。
坑提醒:改完一定要重启验证,别留在原内核就以为升级成功了。
七、重启验证
| |
重启后再次 uname -r:
| |
确认已经是新内核,老的内核包先别删——留一两周观察稳定再清理。
八、常见坑速查
| 现象 | 原因 | 处理 |
|---|---|---|
rpm --import 报 SSL error | nss 库太老 | yum update nss |
| 安装后还是老内核启动 | grub default 没改 | 编辑 /etc/grub.conf |
启动到一半 dracut panic | initramfs 没生成或磁盘驱动没编进 | 用 dracut --force 重生成 initramfs |
| 第三方软件(如 VMware Tools)装不上 | 内核头文件路径变了 | 装对应 kernel-lt-devel |
九、下一步
- 想再激进一点(拿 Btrfs/OverlayFS 等新特性)→ 改用
kernel-ml,但绝不要在生产环境直接上——6.x 时代的 ml 包出过几次 initramfs 兼容事故 - 想再稳一点(保留老内核回退)→ 升级前用
df/mount拍个快照,VPS 用户用服务商控制台做 system snapshot - 配套的
kernel-lt-devel、kernel-lt-headers也要一并装,否则后面编译 DKMS 模块(如 VirtualBox Guest Additions)会失败 - 真要彻底升级大版本(6.x → 7.x)→ 走
redhat-upgrade-tool(已废弃)或重新装机,跨大版本升级从来都只适合有完整快照的测试机
参考资料
- ELRepo 官网
- CentOS 6 EOL 公告
- RHEL 6.5 Release Notes(kernel 章节)
2024 视角:CentOS 6 时代已彻底过去,迁移方案汇总
本文写于 2010-06-15(实际是后人补档的"老运维回忆"),距今已 14 年。2024 视角下:
一、CentOS 6 已经是"老古董"
- 2020-11-30:CentOS 6 EOL(End of Life)。
- 2020-12 至 2024-06:CentOS Linux 6 走"extended EOL"(付费支持)。
- 2024-06-30:CentOS Linux 6 全面停止维护。
- 2024 视角:仍然跑 CentOS 6 的服务器已经无安全更新——强烈建议迁出。
二、CentOS 6 迁到哪里
| 目标 | 兼容性 | 迁移成本 | 适用 |
|---|---|---|---|
| CentOS 7 | 90% | 低 | 不推荐(7 已 2024-06 EOL) |
| CentOS 8 | 95% | 低 | 不推荐(8 已 2021-12 EOL) |
| CentOS Stream 8/9 | 100% | 低 | 滚动版,生产慎用 |
| Rocky Linux 9 | 100% | 低 | 首选(社区驱动,CIQ 维护) |
| AlmaLinux 9 | 100% | 低 | 首选(CloudLinux 维护) |
| Oracle Linux 9 | 100% | 低 | 大企业 / 商业支持 |
| Ubuntu 22.04 LTS | 80% | 中 | 桌面 / 开发机 |
| Debian 12 | 80% | 中 | 服务器 / 容器 |
三、migrate2rocky 脚本一键迁移
| |
- 注意:必须先做完整备份(快照 / tar 全量),迁移过程会替换核心包。
- 不兼容情况:自定义编译的内核模块(如 NVIDIA 驱动、VirtualBox)需要重新编译。
四、CentOS 6 时代的"运维遗物"清单
2010 年代 CentOS 6 跑的常见服务,2024 都有现代替代:
| 老服务 | 2024 替代 |
|---|---|
| MySQL 5.1 | MySQL 8.0 / MariaDB 10.11 |
| Apache 2.2 | Apache 2.4 / Nginx 1.27 |
| PHP 5.3 | PHP 8.3 |
| iptables | nftables(CentOS 7 后) |
| OpenSSH 5.3 | OpenSSH 9.x(强制 ed25519 / rsa-sha2-256) |
ntpd | chronyd(CentOS 7+) |
ifconfig | ip(iproute2) |
netstat | ss(iproute2) |
service | systemctl |
chkconfig | systemctl enable/disable |
ifupdown | NetworkManager / nmcli |
route | ip route |
arp | ip neigh |
traceroute | mtr(更现代) |
wget | curl(更通用) |
五、CentOS 6 → 9 的"陷阱"清单
- systemd 全面接管:
init.d脚本不再被自动识别——必须写*.service。 - firewalld 取代 iptables:老
iptables -A INPUT ...命令仍兼容(底层是 nftables),但推荐用firewall-cmd。 - SELinux 强制开启:从 CentOS 7 起默认开启,老脚本不写 SELinux context 会失败。
- Python 2.7 EOL(2020-01-01):所有
#!/usr/bin/python必须改成python3。 - OpenSSL 1.1+ / TLS 1.3 强制:老证书可能不再受信任。
- GLIBC 2.28+(CentOS 9):老二进制(如 tcpcopy 1.2.0 预编译版)会报"GLIBC_2.34 not found"。
六、CentOS 6 的"真实价值":归档
2024 视角下,CentOS 6 的真正价值是"运维历史档案"——很多老脚本、老软件、老硬件驱动都跑在上面。
- vmware-tools:CentOS 6 用老版 VMware Tools(kernel 2.6.32 兼容),CentOS 9 改用 open-vm-tools。
- Realtek 网卡驱动:CentOS 6 时代手动编译 r8168,CentOS 9 内核已自带。
- NFS v3:CentOS 6 默认 NFSv3,CentOS 9 默认 NFSv4.2。
- 32 位库:CentOS 6 装
glibc.i686跑 32 位应用,CentOS 9 已经不默认装 i686 仓库。
七、2024 仍在跑 CentOS 6 的"现实方案"
- 方案 A(推荐):迁移到 Rocky / Alma 9
- 方案 B:用 Vault 仓库 +
--enablerepo让 yum 继续用(但无安全更新) - 方案 C:用 docker 容器包老 OS:
| |
- 方案 D:上 K8s + 老 OS Pod(生产慎用)
