截至 2026-07-05,Rocky 官网显示 Rocky Linux 9.8 已发布;Rocky 9.8 发行内核仍是 5.14.0-687.x,这是 RHEL/Rocky 的企业内核路线:版本号不新,但会回补安全修复和驱动补丁。
一、先定策略
推荐优先级
| 项目 | Rocky 官方 5.14 | ELRepo 6.1 |
|---|---|---|
| 定位 | 企业发行版内核 | 上游 LTS 内核 |
| 稳定性 | 更适合生产 | 也稳定,但集成风险更高 |
| Secure Boot | 默认兼容 | 未受信任的内核默认拦截 |
| 内核功能 | 版本号旧,但有大量回补 | 原生功能更新 |
| 硬件支持 | 够用,偏保守 | 新硬件支持更好 |
| Docker/K8s | 推荐 | 可用,但要测试 |
| 数据库服务器 | 推荐 | 一般没必要 |
| kmod/DKMS | 兼容性更好 | 更容易遇到模块问题 |
| 生产默认 | 推荐 | 谨慎 |
ELRepo 自己也说明,kernel-lt 基于长期支持分支,kernel-ml 基于 mainline stable 分支;这些内核包可与 RHEL/Rocky 官方内核并存,但 ELRepo 也强调这类内核更偏硬件支持/测试,且 “As-Is”、不保证支持,还不支持 Secure Boot 签名。
所以我的结论是:
生产环境:先只做 Rocky 9.8 + 官方 kernel。 只有在你遇到明确问题,例如新网卡、新 NVMe、GPU、主板芯片、无线网卡、ZFS、Btrfs、特定 eBPF 功能不够,再考虑 ELRepo kernel-lt。kernel-ml 不建议作为长期生产内核。
二、升级前检查
先采集现状,方便回滚和排查。
cat /etc/os-release cat /etc/redhat-release uname -r hostnamectl uptime df -hT lsblk -f dnf repolist dnf list installed kernel\* rpm -qa | egrep 'kernel|kmod|dkms|nvidia|zfs|virtualbox|wireguard|falco|sysdig' | sort grubby --default-kernel grubby --info=ALL | egrep '^index=|^kernel=|^title='
重点看这几个风险点:
df -h /boot df -h / dnf check dnf repoquery --duplicates dnf repoquery --unsatisfied
如果 /boot 小于 500MB,或者已经塞满很多旧内核,先不要直接升级。RHEL/Rocky 默认通过 installonly_limit 保留有限数量内核;Red Hat 文档也说明可以用 installonly_limit=3 这类参数控制保留数量。
检查:
grep -E '^installonly_limit' /etc/dnf/dnf.conf
建议保留:
installonly_limit=3
不要设成 1。至少保留一个旧内核用于回滚。
三、升级最新版
Rocky 9 小版本升级一般就是正常 dnf upgrade。这不是 9 升 10。Rocky 官方对跨大版本的态度是:不支持原地大版本升级,推荐重装迁移。
先清缓存:
sudo dnf clean all sudo dnf makecache
查看会升级什么:
sudo dnf check-update
执行升级:
sudo dnf upgrade -y
升级完成后重启:
sudo reboot
重启回来检查:
cat /etc/redhat-release uname -r rpm -q rocky-release dnf list installed kernel\* | sort
如果你是从 Rocky 9.2、9.3、9.4 之类升上来,完成后应该进入当前 9 系最新 release。
Rocky 官网当前显示 9.8 已发布,Rocky 9.8 对应发行内核是 5.14.0-687.10.1。
四、升级后基础验证
1. 系统服务
systemctl --failed journalctl -p err -b --no-pager dmesg -T | egrep -i 'error|fail|warn|panic|segfault|oom|firmware' | tail -100
2. 网络
ip a ip r resolvectl status 2>/dev/null || cat /etc/resolv.conf ping -c 3 223.5.5.5 ping -c 3 www.baidu.com
如果是服务器,重点确认 SSH 不断:
ss -lntp systemctl status sshd --no-pager
3. Docker / containerd / K8s
systemctl status docker --no-pager 2>/dev/null systemctl status containerd --no-pager 2>/dev/null docker ps 2>/dev/null crictl ps 2>/dev/null
K8s 节点额外看:
systemctl status kubelet --no-pager kubectl get nodes -o wide kubectl get pods -A | egrep -v 'Running|Completed'
4. 数据库类服务
PostgreSQL / Redis / MySQL 这类建议检查监听、日志、实际连接:
ss -lntp | egrep '5432|6379|3306' journalctl -u postgresql --no-pager -n 100 2>/dev/null journalctl -u redis --no-pager -n 100 2>/dev/null
Docker 场景:
docker ps docker logs --tail=100 <container_name>
五、升级到“最新稳定内核”
这里要分清楚:
A. 官方 Rocky 9 最新内核
这个最稳:
sudo dnf upgrade -y kernel kernel-core kernel-modules kernel-modules-core kernel-modules-extra sudo reboot
验证:
uname -r rpm -q kernel
这是我最推荐的生产方案。
B. ELRepo kernel-lt
安装elrepo前需要确认bios的Secure Boot有没有关闭,Secure Boot 是启动签名校验;关掉后,ELRepo 6.1 不会再因为签名被拦。
适合:新硬件、驱动、较新 eBPF/文件系统/网卡支持,但又不想追 mainline。
安装 ELRepo:
sudo dnf install -y elrepo-release sudo dnf makecache
Rocky Wiki 说明 ELRepo 是社区认可仓库,主要提供新内核和 kmod 驱动包,但 kernel 仓库需要单独启用。
查看可用内核:
sudo dnf --disablerepo='*' --enablerepo=elrepo-kernel list available 'kernel-lt*' 'kernel-ml*'
安装 kernel-lt:
sudo dnf --enablerepo=elrepo-kernel install -y kernel-lt kernel-lt-devel
不要乱装 kernel-lt-headers。ELRepo 文档明确提醒,很多情况下你需要的是 kernel-lt-devel,不是 kernel-lt-headers。
查看启动项:
grubby --info=ALL | egrep '^index=|^kernel=|^title='
设置默认启动到 kernel-lt,例如:
sudo grubby --set-default "$(ls /boot/vmlinuz-*elrepo* | sort -V | tail -1)" grubby --default-kernel
重启:
sudo reboot
验证:
uname -r
C. ELRepo kernel-ml
不建议生产长期用,安装方式类似:
sudo dnf --enablerepo=elrepo-kernel install -y kernel-ml kernel-ml-devel
但是我不建议你把它作为生产默认内核。ELRepo 对 kernel-ml 的说明更偏“硬件测试/临时解决硬件不工作问题”,不是企业生产默认路线。
六、内核升级后的重点排查
1. 确认当前内核
uname -r grubby --default-kernel grubby --default-title
2. 确认模块是否正常
lsmod | head dmesg -T | egrep -i 'module|firmware|taint|error|fail' | tail -100
如果你有 DKMS、NVIDIA、ZFS、VirtualBox、Falco、Sysdig、WireGuard 这类内核模块,重点检查:
dkms status 2>/dev/null rpm -qa | egrep 'dkms|kmod|nvidia|zfs|virtualbox|falco|sysdig|wireguard' | sort
常见问题是:内核升了,但第三方模块没编译成功。比如 NVIDIA 驱动、ZFS、VirtualBox 驱动都容易中招。
3. Secure Boot
如果开启了 Secure Boot,ELRepo 文档明确说 kernel-lt 包没有 Secure Boot 签名。
检查:
mokutil --sb-state
如果是 SecureBoot enabled,你要么关闭 Secure Boot,要么走自签名/MOK 流程,否则 ELRepo 内核可能无法正常启动。
4. 网络驱动
lspci -nnk | egrep -A3 -i 'ethernet|network' ethtool -i eth0 2>/dev/null ip link
把 eth0 换成实际网卡名。
5. 存储驱动
lsblk blkid mount -a findmnt dmesg -T | egrep -i 'nvme|scsi|xfs|ext4|btrfs|zfs|io error|reset' | tail -100
七、回滚方案
1. 临时从 GRUB 选择旧内核
重启时在 GRUB 菜单选择旧的 Rocky 官方内核启动。 这也是为什么升级前不要删除旧内核。
2. 设置默认回官方 Rocky 内核
查看所有内核:
grubby --info=ALL | egrep '^index=|^kernel=|^title='
找官方 Rocky 内核,一般路径类似:
/boot/vmlinuz-5.14.0-xxx.el9_x.x86_64
设置默认:
sudo grubby --set-default /boot/vmlinuz-5.14.0-xxx.el9_x.x86_64 sudo reboot
Oracle Linux 文档对 grubby --set-default 的说明也适用于 RHEL 系 GRUB2 管理思路:指定完整 /boot/vmlinuz-* 路径后,默认内核设置会立即生效并在重启后使用。
3. 删除 ELRepo 内核
确认已经启动回官方内核后:
uname -r
如果当前不是 elrepo 内核,可以删除:
sudo dnf remove -y 'kernel-lt*' 'kernel-ml*' sudo dnf config-manager --set-disabled elrepo-kernel sudo dnf clean all
八、实际执行流程
# 1. 记录现状 cat /etc/redhat-release uname -r df -hT dnf repolist rpm -qa | egrep 'kernel|kmod|dkms|nvidia|zfs|virtualbox' | sort grubby --info=ALL | egrep '^index=|^kernel=|^title=' # 2. 检查包状态 dnf check dnf repoquery --duplicates dnf repoquery --unsatisfied # 3. 升级 Rocky 9 到当前 9 系最新 sudo dnf clean all sudo dnf makecache sudo dnf upgrade -y # 4. 重启 sudo reboot # 5. 验证 cat /etc/redhat-release uname -r systemctl --failed journalctl -p err -b --no-pager
如果一切正常,到这里就够了。
只有确实需要较新内核时,再加:
sudo dnf install -y elrepo-release sudo dnf --disablerepo='*' --enablerepo=elrepo-kernel list available 'kernel-lt*' 'kernel-ml*' # 更推荐 kernel-lt,而不是 kernel-ml sudo dnf --enablerepo=elrepo-kernel install -y kernel-lt kernel-lt-devel sudo grubby --set-default "$(ls /boot/vmlinuz-*elrepo* | sort -V | tail -1)" sudo reboot
九、最终建议
目标如果是“系统保持最新、稳定、安全”,建议:Rocky Linux 9 → 升到 9.8,保留官方 5.14 企业内核,不换 kernel-ml。
目标如果是“硬件太新,官方内核不识别网卡/NVMe/GPU/某些驱动”,再考虑:Rocky 9.8 + ELRepo kernel-lt。
目标如果是“体验最新 Linux kernel 功能”,才考虑:
