背景
CentOS 7 于 2024 年 6 月 30 日正式 EOL,官方仓库已停止更新。内核 3.10.0 已经无法满足现代容器运行时(如 Docker 24.x+、containerd 2.x)、eBPF 可观测性工具、以及新版文件系统(XFS reflink、OverlayFS 元数据加速)的需求。
核心矛盾:大量存量业务仍运行在 CentOS 7 上,迁不动;内核 3.10 太老,跑不了新东西。
本文聚焦原地升级内核这一路径——在不变更系统主体的情况下,通过 ELRepo 仓库安装 6.1.x LTS 内核,让 CentOS 7 继续支撑业务。
1. 风险警示与前置决策
1.1 明确核心风险
EOL 风险:CentOS 7 自 2024 年 6 月 30 日起不再接收安全更新。glibc、openssl、systemd 等系统组件停留在 2014 年基线,内核升级无法解决这些用户态库的漏洞。
内核与旧 glibc 的兼容问题:CentOS 7 的 glibc 版本为 2.17(2012 年发布)。新内核的部分系统调用(如 copy_file_range 的完整实现、io_uring 高级特性)需要 glibc 2.20+ 支持。大多数用户态程序通过兼容路径运行,但少数新特性会静默退化。
闭源驱动不兼容:以下驱动类型风险极高:
| 驱动类型 | 风险等级 | 说明 |
|---|---|---|
| NVIDIA 闭源驱动 | 高 | 需重新编译内核模块,必须使用支持新内核的驱动版本 |
| 博通 RAID 卡闭源驱动 (megaraid) | 高 | 部分旧版闭源驱动无 6.x 内核的 DKMS 支持 |
| 定制内核模块 (第三方安全模块等) | 中 | 需验证内核模块 ABI 兼容性 |
| open-vm-tools (ESXi) | 低 | 开源版本适配良好,但旧版本需升级 |
不可逆性:内核升级后卸载新内核是可行的,但升级过程中对 initramfs 和 GRUB 配置的修改不可自动回退。
1.2 方案决策树
┌─────────────────────────┐ │ 你的业务能接受停机迁移吗? │ └────────────┬────────────┘ ┌─────────┴─────────┐ ▼ ▼ 能接受 不能接受 │ │ ┌────────────────┼────────────┐ ▼ ▼ ▼ ▼ ←──────────────────┐ ┌───────────┐ ┌──────────┐ ┌──────────────┐ │ │迁移到 │ │迁移到 │ │原地升级内核 │ │ │AlmaLinux 9│ │Rocky │ │(kernel-lt) │ │ │或 Rocky 9 │ │Linux 9 │ │ │ │ └─────┬─────┘ └─────┬────┘ └──────┬───────┘ │ │ │ │ │ ▼ ▼ ▼ │ ┌──────────────────────────────────────────┐ │ │ 业务代码在 glibc 2.34+ / OpenSSL 3.x 下 │ │ │ 能用吗? │ │ └────────────┬─────────────────────────────┘ │ │ │ ▼ ▼ 能用 不能用(如闭源商业软件绑定 glibc 2.17) │ │ ▼ ▼ AlmaLinux 9 原地升级内核 (kernel-lt) 或 Rocky 9 │ ▼ ┌───────────────┐ │ 是否需要新内核 │ │ 的全部特性? │ └───┬───────┬───┘ │ │ ▼ ▼ 需要 仅需安全补丁 │ │ ▼ ▼ kernel-lt CentOS Stream 8/9 6.1.x 迁移(原地升级至 Stream)三选一结论:
| 方案 | 适用场景 | 不适用场景 |
|---|---|---|
| 原地升级内核 | 存量业务无法迁移;仅需新内核特性(容器、eBPF);闭源软件绑定 glibc 2.17 | 需要完整 glibc/OpenSSL 升级;安全合规要求持续补丁更新 |
| 迁移 AlmaLinux/Rocky 9 | 业务可接受停机窗口;应用兼容 glibc 2.34+ 和 OpenSSL 3.x | 闭源商业软件硬依赖 CentOS 7 用户态 |
| 原地升级至 CentOS Stream | 停在 Red Hat 生态;有短期迁移计划 | 需要长期稳定支持(Stream 是滚动发布,支持周期短) |
2. 升级前的关键前置准备
2.1 全面数据备份
# 备份关键目录BACKUP_DIR="/backup/pre-kernel-$(date +%Y%m%d)"mkdir -p "$BACKUP_DIR"
# /etc 系统配置cp -a /etc "$BACKUP_DIR/etc"
# /boot 内核与引导文件cp -a /boot "$BACKUP_DIR/boot"
# /var 日志与运行时数据(业务数据酌情)cp -a /var "$BACKUP_DIR/var"
# GRUB 引导记录备份dd if=/dev/sda of="$BACKUP_DIR/mbr-backup.bin" bs=512 count=1
# 分区表备份fdisk -l > "$BACKUP_DIR/partitions.txt"lsblk -f > "$BACKUP_DIR/filesystems.txt"备份恢复验证:在测试环境执行一次完整恢复演练。仅验证 tar 或 cp 没有报错不算”验证”——必须实际挂载或解压并检查文件内容。
2.2 规划系统快照
虚拟机环境(VMware / Proxmox / KVM):
# VMware 拍摄快照vim-cmd vmsvc/snapshot.create <vmid> "pre-kernel-upgrade" "内核升级前快照 $(date +%F)"
# KVM / QEMUvirsh snapshot-create-as --domain centos7-vm --name "pre-kernel-upgrade"云环境:在控制台创建自定义镜像。阿里云选”创建自定义镜像”,腾讯云选”制作镜像”,AWS 选”Create Image (AMI)“。镜像创建时服务器最好处于关机状态。
2.3 紧急救援准备
# 下载 CentOS 7 安装 ISO(与当前系统版本一致)wget https://vault.centos.org/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
# 制作启动 U 盘(假设 U 盘为 /dev/sdb)dd if=CentOS-7-x86_64-DVD-2009.iso of=/dev/sdb bs=4M status=progress
# 验证现有 GRUB 菜单项(确保存在旧内核条目可用于回退)awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg2.4 建立检查清单
执行以下命令,保存输出到文件,用于升级后对比:
PRE_CHECK="/backup/pre-check-$(date +%Y%m%d).log"
{ echo "=== 内核版本 ===" uname -r
echo -e "\n=== 系统版本 ===" cat /etc/centos-release
echo -e "\n=== 当前 GRUB 默认项 ===" grub2-editenv list
echo -e "\n=== PCI 设备列表 ===" lspci -nn
echo -e "\n=== USB 设备列表 ===" lsusb
echo -e "\n=== 已加载内核模块 ===" lsmod | sort
echo -e "\n=== 块设备与挂载点 ===" lsblk -f
echo -e "\n=== 网络接口 ===" ip addr show
echo -e "\n=== 路由表 ===" ip route show
echo -e "\n=== SELinux 状态 ===" getenforce
echo -e "\n=== 当前运行服务 ===" systemctl list-units --type=service --state=running
echo -e "\n=== 已安装内核包 ===" rpm -qa | grep kernel | sort
echo -e "\n=== /etc/fstab ===" cat /etc/fstab
echo -e "\n=== 磁盘使用 ===" df -h
echo -e "\n=== 内存信息 ===" free -h} > "$PRE_CHECK"2.5 兼容性前置修复:NSS/TLS 问题
截至 2026 年,CentOS 7 原生的 NSS(Network Security Services)加密库已无法处理大多数 HTTPS 连接。在配置任何第三方仓库之前,必须先强制切换为 HTTP 源更新加密库。
# 备份并移除所有现有 .repo 文件mkdir -p /etc/yum.repos.d.bak-$(date +%Y%m%d)mv /etc/yum.repos.d/*.repo /etc/yum.repos.d.bak-$(date +%Y%m%d)/
# 强制配置使用 HTTP 协议的阿里云 CentOS Vault 源# 注意:gpgcheck=0 为临时措施,用于绕过可能已过期的 CentOS 7 GPG 密钥;# 待加密库更新完毕后,第 3.1 节会切换到正式的 HTTPS vault 源并重新启用 GPG 检查。cat > /etc/yum.repos.d/CentOS-Vault-HTTP.repo << 'EOF'[base]name=CentOS-$releasever - Base (HTTP)baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/gpgcheck=0enabled=1
[updates]name=CentOS-$releasever - Updates (HTTP)baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/gpgcheck=0enabled=1
[extras]name=CentOS-$releasever - Extras (HTTP)baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/gpgcheck=0enabled=1EOF
# 清理缓存并更新加密相关包yum clean all && yum makecacheyum update -y nss nss-util nss-sysinit nss-tools curl ca-certificates验证:执行
curl -I https://www.elrepo.org,如果返回HTTP/2 200而非 SSL 错误,说明 NSS 修复成功,可以继续后续步骤。
3. 配置与安装 ELRepo 仓库
3.1 处理官方仓库失效
CentOS 7 官方仓库已失效。在安装 ELRepo 之前,必须将 base/updates/extras 仓库指向 vault 镜像。
# 备份原有仓库配置cp -a /etc/yum.repos.d /etc/yum.repos.d.bak-$(date +%Y%m%d)
# 替换为 vault 镜像源(阿里云)cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'[base]name=CentOS-$releasever - Basebaseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/gpgcheck=1gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7enabled=1
[updates]name=CentOS-$releasever - Updatesbaseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/gpgcheck=1gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7enabled=1
[extras]name=CentOS-$releasever - Extrasbaseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/gpgcheck=1gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7enabled=1EOF
# 清除缓存并验证yum clean all && yum makecache腾讯云用户将 mirrors.aliyun.com 替换为 mirrors.cloud.tencent.com。
⚠️ 资源枯竭预警:截至 2026 年,由于 CentOS 7 EOL 已超过两年,各大云厂商为优化存储成本,已开始逐步清理历史 Vault 归档源。建议在完成内核升级后,立即按 4.4 节 方法备份关键 RPM 包,并参考 8.5 节 构建本地离线仓库,以防公网源彻底失效。
3.2 导入 GPG 公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org验证指纹:
rpm -q gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n' | grep elrepo3.3 安装 ELRepo 仓库包
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm验证仓库已启用:
yum repolist | grep elrepo预期输出:
elrepo ELRepo.org Community Enterprise Linux Repository - el7elrepo-kernel ELRepo.org Community Enterprise Linux Kernel Repository - el74. 内核版本选型指南
4.1 生产环境唯一推荐:kernel-lt
生产环境只应选择 kernel-lt(Long Term Support)。kernel-ml(Mainline)是最新主线版本,用于尝鲜和测试。
ELRepo 目前提供的 LTS 版本:
| 版本 | 状态 | 说明 |
|---|---|---|
| kernel-lt 6.1.x | 活跃支持 | 推荐,LTS 支持已正式延长至 2027 年 12 月 |
| kernel-lt 5.4.x | 维护中 | 较弱支持,LTS 至 2025 年底 |
推荐 6.1.x。理由:6.1 是目前最新的 LTS 内核,对 eBPF、XFS、OverlayFS 的支持比 5.4 有显著提升,且 CentOS 7 上的 Docker/containerd 用户态已充分测试。
4.2 kernel-lt vs kernel-ml 详细对比
| 维度 | kernel-lt (6.1.x) | kernel-ml (6.12+) |
|---|---|---|
| 稳定性 | 只收安全补丁和严重 bug 修复 | 持续引入新特性和变更 |
| 支持周期 | 至 2027 年底(6 年 LTS) | 至下一主线版发布后约 3 个月 |
| 特性更新 | 冻结,可预期 | 每 2-3 个月新版本,API 可能变化 |
| 生产适用 | 是 | 否(仅用于验证新特性或测试硬件兼容性) |
| 内核模块兼容 | 小版本升级 ABI 稳定 | 版本间 ABI 可能变化,需重新编译第三方模块 |
| 社区测试量 | 数百万台生产服务器 | 以桌面/开发环境为主 |
选择 kernel-ml 可能遇到的问题:
- 主线内核 API 不稳定,闭源驱动 DKMS 模块可能无法编译
- 内核模块签名策略可能变更,导致 Secure Boot 环境下的模块加载失败
- 几乎无社区生产案例支撑,出问题时排查资料少
4.3 查看可用版本
yum list available --disablerepo='*' --enablerepo=elrepo-kernel输出示例:
kernel-lt.x86_64 6.1.119-1.el7.elrepo elrepo-kernelkernel-ml.x86_64 6.12.10-1.el7.elrepo elrepo-kernel4.4 离线安装(无外网环境)
在有外网的机器上下载 RPM 包:
# 安装 yum-utilsyum install -y yum-utils
# 下载 kernel-lt 及其依赖(不安装)yumdownloader --resolve --destdir=/tmp/kernel-lt-rpms kernel-lt --enablerepo=elrepo-kernel
# 打包传输tar -czf kernel-lt-rpms.tar.gz -C /tmp kernel-lt-rpms在离线服务器上安装:
tar -xzf kernel-lt-rpms.tar.gz -C /tmp/kernel-offlinecd /tmp/kernel-offlinerpm -ivh kernel-lt-*.rpm5. 实施内核安装
5.1 安装长期支持内核
yum --enablerepo=elrepo-kernel install kernel-lt -yyum install 模式下新内核不会覆盖旧内核,两者共存。
5.2 校验安装文件
rpm -qa | grep kernel | sort预期输出应同时包含:
kernel-3.10.0-1160.119.1.el7.x86_64 # 旧内核,仍保留kernel-lt-6.1.119-1.el7.elrepo.x86_64 # 新安装的 LTS 内核kernel-lt-tools-6.1.119-1.el7.elrepo.x86_64kernel-lt-tools-libs-6.1.119-1.el7.elrepo.x86_64kernel-tools-3.10.0-1160.119.1.el7.x86_64 # 旧内核的 tools 包kernel-tools-libs-3.10.0-1160.119.1.el7.x86_64关键检查:
# 确认 vmlinuz 和 initramfs 已生成ls -lh /boot/vmlinuz-* | grep "6\.1"ls -lh /boot/initramfs-*.img | grep "6\.1"5.3 扫描并处理驱动
dracut 默认只将当前运行环境已加载的模块打包进 initramfs。如果你的硬件需要特定驱动在启动早期加载(如 RAID 卡、NVMe、iSCSI HBA),必须手动注入。
# 检查当前系统已加载的存储/网络驱动lsmod | grep -E 'mpt3sas|megaraid|nvme|qla2xxx|bnx2|ixgbe|mlx'
# 注入关键驱动到新内核的 initramfsdracut --force --kver 6.1.119-1.el7.elrepo.x86_64 \ --add-drivers "mpt3sas megaraid_sas nvme" \ /boot/initramfs-6.1.119-1.el7.elrepo.x86_64.img将
6.1.119-1.el7.elrepo.x86_64替换为实际安装的版本号。使用ls /boot/vmlinuz-*确认。
虚拟机启动关键驱动:在 KVM/QEMU 上需注入 virtio_blk virtio_net virtio_scsi;在 VMware ESXi 上需注入 vmw_pvscsi vmxnet3。
检查 initramfs 包含的模块:
lsinitrd /boot/initramfs-6.1.119-1.el7.elrepo.x86_64.img | grep -E 'mpt3sas|nvme|megaraid|virtio'6. 更新启动引导与验证
6.1 查看内核启动项
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg输出示例:
0 : CentOS Linux (6.1.119-1.el7.elrepo.x86_64) 7 (Core)1 : CentOS Linux (3.10.0-1160.119.1.el7.x86_64) 7 (Core)2 : CentOS Linux (0-rescue-xxxxxxxxxxxxxxxx) 7 (Core)新内核 6.1.119 在索引 0。
6.2 设置新内核为默认项
使用索引 0 的方式在添加/删除内核后会漂移。推荐提取内核标题名称来设置:
# 提取包含 "6.1." 的 menuentry 标题KERNEL_TITLE=$(awk -F\' '/menuentry / && /6\.1\./ {print $2; exit}' /boot/grub2/grub.cfg)echo "目标内核: $KERNEL_TITLE"
# 使用标题名称设置默认启动项grub2-set-default "$KERNEL_TITLE"验证:
grub2-editenv list预期输出(saved_entry 值为完整内核标题而非索引号):
saved_entry=CentOS Linux (6.1.119-1.el7.elrepo.x86_64) 7 (Core)备选方案:如果你的 GRUB 版本不支持标题名称,可使用
grub2-set-default 0按索引设置,但需注意内核条目增删后索引可能变化。
6.3 生成 GRUB 配置
grub2-mkconfig -o /boot/grub2/grub.cfgUEFI 系统:
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg6.4 检查配置持久性(关键)
这一步经常被忽略,却是重启后回到旧内核的首要原因。
grep GRUB_DEFAULT /etc/default/grub如果输出为 GRUB_DEFAULT=saved,则必须修正。推荐直接将内核标题写入 /etc/default/grub,避免索引漂移:
# 删除旧 GRUB_DEFAULT 行,追加内核标题sed -i '/^GRUB_DEFAULT=/d' /etc/default/grubecho "GRUB_DEFAULT=\"$KERNEL_TITLE\"" >> /etc/default/grub然后重新生成 GRUB 配置:
grub2-mkconfig -o /boot/grub2/grub.cfg备选方案:若 GRUB 版本仅支持索引模式,可将
GRUB_DEFAULT=saved改为GRUB_DEFAULT=0(sed -i 's/^GRUB_DEFAULT=.*/GRUB_DEFAULT=0/' /etc/default/grub),但内核条目顺序变动时索引可能失效。推荐优先使用标题名称。
7. 重启、验证与回退
7.1 推荐:一次性启动测试
首选方案——在 GRUB 菜单中手动选择新内核一次性启动,验证成功后再设为永久默认:
# 1. 重启reboot
# 2. 在 GRUB 菜单出现时(按方向键暂停倒计时)# 手动选择 "CentOS Linux (6.1.119-1.el7.elrepo.x86_64) 7 (Core)" 启动这个方式的好处:如果新内核启动失败,直接硬重启即可回到旧内核,无需进入救援模式。
7.2 执行重启(直接设为默认)
如果无法物理访问 GRUB 菜单(远程服务器),在完成第 6 章所有步骤后直接 reboot:
reboot7.3 验证新内核
uname -r预期输出:
6.1.119-1.el7.elrepo.x86_647.4 功能完整性检查
对照第 2.4 节保存的检查清单,逐一比对:
# 内核模块无缺失lsmod | sort | diff /backup/pre-check-*.log -
# 所有文件系统正常挂载df -hmount | column -t
# 网络正常ip addr showping -c 3 8.8.8.8
# 核心服务运行正常systemctl list-units --type=service --state=runningsystemctl --failed
# Docker / containerd 功能验证(如适用)docker infodocker run --rm hello-world
# SELinux 状态与升级前一致getenforce
# dmesg 中无异常错误dmesg --level=err,crit,alert7.5 定义回退流程
新内核启动失败时:
- 硬重启服务器
- 在 GRUB 菜单出现时,选择旧内核(
3.10.0-1160开头的条目)启动 - 进入系统后执行:
# 恢复旧内核为默认grub2-set-default 'CentOS Linux (3.10.0-1160.119.1.el7.x86_64) 7 (Core)'grub2-mkconfig -o /boot/grub2/grub.cfg
# 可保留新内核以便后续排查# 不要执行 yum remove kernel-lt- 排查
/var/log/messages和journalctl -k中新内核的启动日志
7.6 故障深度排查
场景一:initramfs 驱动缺失(启动时 kernel panic——“Cannot open root device”)
# 用旧内核启动后,重新生成 initramfs 并注入驱动dracut --force --kver 6.1.119-1.el7.elrepo.x86_64 \ --add-drivers "mpt3sas megaraid_sas nvme virtio_blk virtio_net" \ /boot/initramfs-6.1.119-1.el7.elrepo.x86_64.img
# 确认 root 使用的存储驱动已包含lsinitrd /boot/initramfs-6.1.119-1.el7.elrepo.x86_64.img | grep -E "$(lsmod | awk '{print $1}' | grep -E 'ata|scsi|nvme|virtio' | paste -sd'|')"场景二:闭源驱动加载失败
# NVIDIA 驱动:需要重新编译内核模块# 先卸载旧驱动,重启进入新内核,再安装支持 6.x 内核的驱动
# 检查当前内核下 nvidia 模块状态modprobe nvidiadmesg | grep -i nvidia
# 如失败,到 NVIDIA 官网下载与内核版本兼容的驱动,重新编译安装场景三:依赖包版本冲突
# 部分旧包可能依赖 kernel-3.10.0 头文件# 检查冲突package-cleanup --problems
# 如 kernel-devel 冲突,确保安装对应版本的 kernel-lt-develyum --enablerepo=elrepo-kernel install kernel-lt-devel场景四:网络服务启动失败
# 新内核可能重命名了网卡(如 eth0 -> ens192)# 检查实际网卡名ip link show
# 更新网络配置sed -i 's/eth0/ens192/g' /etc/sysconfig/network-scripts/ifcfg-eth0mv /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-ens192
# 重启网络systemctl restart network8. 后期清理与系统固化
8.1 确认系统稳定
不要立即清理旧内核。等待至少 1-2 个业务高峰周期(或 1 个月),确认涵盖以下场景:
- 高负载下的内存压力和 OOM 行为正常
- 夜间定时任务(cron jobs)正常执行
- 日志轮转等系统维护流程不受影响
- 监控系统(Zabbix/Prometheus node_exporter)数据正常上报
8.2 锁定内核版本
防止 yum update 意外升级内核:
# 在 /etc/yum.conf 的 [main] 段添加echo 'exclude=kernel* kernel-lt* kernel-ml*' >> /etc/yum.conf验证锁定生效:
yum update --assumeno | grep -i kernel# 应该看到 "Excluding packages: kernel* kernel-lt* kernel-ml*" 类似输出8.3 清理旧内核
系统稳定后,移除旧内核释放 /boot 空间:
# 确认当前运行的内核uname -r
# 查看所有已安装内核rpm -qa | grep "^kernel-[0-9]" | sort
# 移除旧内核(逐个指定,确保不删除当前内核)yum -y remove kernel-3.10.0-1160.119.1.el7.x86_64
# 如果存在多个旧内核版本,逐个卸载8.4 清理残留依赖
# 安装 yum-utils(如未安装)yum install -y yum-utils
# 清理旧内核,保留当前使用的1个package-cleanup --oldkernels --count=1保留 kernel-tools:
# kernel-tools、kernel-tools-libs 是系统运行时工具包(如 cpupower、turbostat)# 确保当前版本的 kernel-lt-tools 和 kernel-lt-tools-libs 已安装rpm -qa | grep kernel | grep tools预期保留的包:
kernel-lt-6.1.119-1.el7.elrepo.x86_64kernel-lt-tools-6.1.119-1.el7.elrepo.x86_64kernel-lt-tools-libs-6.1.119-1.el7.elrepo.x86_64kernel-lt-devel-6.1.119-1.el7.elrepo.x86_64 # 如有编译内核模块需求则保留8.5 构建本地离线 RPM 仓库
公网 vault 镜像源随时可能被清理。构建本地离线仓库可在后续需要重装或回退时自保:
# 创建本地仓库目录mkdir -p /opt/local-repo/packages
# 下载当前运行内核及所有依赖包yumdownloader --resolve --destdir=/opt/local-repo/packages \ kernel-lt kernel-lt-tools kernel-lt-tools-libs kernel-lt-devel \ --enablerepo=elrepo-kernel
# 下载 ELRepo 仓库包本身yumdownloader --destdir=/opt/local-repo/packages elrepo-release --enablerepo=elrepo
# 创建本地 yum 仓库元数据yum install -y createrepocreaterepo /opt/local-repo/packages
# 创建本地 .repo 文件备用cat > /opt/local-repo/local.repo << EOF[local-kernel]name=Local Kernel RPM Repositorybaseurl=file:///opt/local-repo/packagesgpgcheck=0enabled=0EOF需要时启用:
yum --enablerepo=local-kernel install kernel-lt -y建议将 /opt/local-repo 目录归档并传输至安全的异地存储。
常见问题速查
| 问题 | 原因 | 解决 |
|---|---|---|
| 重启后仍是旧内核 | GRUB_DEFAULT=saved 覆盖了 grub2-set-default,或索引漂移 | 使用内核标题名称写入 /etc/default/grub(第 6.4 节),执行 grub2-mkconfig |
| kernel panic: cannot open root device | initramfs 缺少存储驱动 | 用旧内核启动,dracut --add-drivers 重新生成 initramfs |
yum install kernel-lt 报依赖错 | 基础仓库失效 | 配置 vault 镜像源(第 3.1 节) |
/boot 空间不足 | 旧内核残留 | 先 yum remove 最旧的内核释放空间 |
| Docker 容器无法启动 | Docker 版本过旧,不支持新内核 | 升级 Docker 至 24.x+ |
| 网卡名变化 | 新内核的 predictable network interface naming 策略不同 | 更新 /etc/sysconfig/network-scripts/ 中的配置文件 |