当前位置:当前位置:首页 > 热点 > centos7内核升级 正文

centos7内核升级

[热点] 时间:2026-10-17 04:23:01 来源:力不从心网 作者:探索 点击:156次

CentOS 7 默认内核是内核 3.10.0-1160,这个版本号看着挺新,升级实际上内核社区早在 2017 年就停止维护 3.10 主线了。内核红帽做了大量 backport,升级把很多新特性塞了回去,内核但有些东西塞不进去——比如 WireGuard、升级BBR 的内核某些改进、新硬件的升级驱动支持。我手上这台老服务器跑 NVMe 盘,内核3.10 内核对某些国产主控的升级 TRIM 支持就是有问题,fstrim 跑完 dmesg 里一堆 timeout。内核换内核这事,升级早晚得干。内核

ELRepo 是升级最省事的路子。装源、内核装包、改 grub 顺序,三步完事:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm yum --enablerepo=elrepo-kernel install kernel-ml -y

kernel-ml 是主线稳定版,跟着 Linus 的 tag 走。kernel-lt 是长期支持版,适合不想频繁折腾的。我选 ml,因为要用 5.10 之后才稳定的 io_uring 特性。

装完别急着重启。先看 /boot/grub2/grub.cfg 里新内核的菜单项在第几行。ELRepo 装完通常自动把新内核设为默认,但 CentOS 7 的 grub 默认指向旧内核的情况我遇到过不止一次。保险起见手动改:

grub2-set-default 0 grub2-mkconfig -o /boot/grub2/grub.cfg

0 是菜单第一项,也就是最新装的那个。重启前 uname -r 记一下旧版本号,万一新内核起不来,grub 菜单里还能选回去。

重启之后 uname -r 应该显示 6.x 了。但事情没完。新内核的模块目录在 /lib/modules/$(uname -r),第三方驱动——比如 NVIDIA 显卡驱动、某些 RAID 卡驱动——需要重新编译。我这次升级就栽在这:MegaRAID 的 megaraid_sas 模块在新内核里虽然自带,但固件版本旧,跑 storcli 查盘直接报错。去 Broadcom 官网下了新固件刷进去才正常。

还有几个坑得提。CentOS 7 的 dracut 版本偏老,生成 initramfs 时如果 /etc/dracut.conf 里没加 add_drivers+=" nvme " 之类的配置,新内核可能找不到根分区。我习惯装完内核后手动跑一遍:

dracut -f --kver $(uname -r)

另外 grubby 这个工具比手动改 grub.cfg 靠谱,grubby --set-default /boot/vmlinuz-6.x.x 直接指定内核路径,不用数菜单序号。

升级完内核,iptables 和 nftables 的兼容层要注意。5.x 之后 iptables 默认走 nft 后端,如果之前有复杂的 iptables 规则脚本,建议先 iptables-save 备份,重启后 iptables-restore 测试。我这边一条 DNAT 规则在新内核下匹配顺序变了,排查了半小时才发现是 nft 的 priority 和旧版不一样。

最后说下回滚。新内核跑了一周,如果发现某个关键服务起不来——比如 Oracle 的 ASM 库不认新内核的 ioctl——直接重启,在 grub 菜单选旧内核进去,然后 yum remove kernel-ml 删掉新内核,grub2-mkconfig 重新生成配置。别把旧内核删了,这是底线。

我这次升级从 3.10 跳到 6.9,最大的感受是 NVMe 盘的延迟从平均 200μs 降到了 80μs 左右,fio 随机读 IOPS 涨了将近一倍。但代价是 dkms 状态得盯着,每次内核更新都要确认第三方模块编译通过。没有银弹,自己权衡。

(责任编辑:娱乐)

相关内容
精彩推荐
热门点击
友情链接