CentOS 7内核升级实战:从yum源选择到GRUB配置全解析

张开发
2026/4/3 20:53:21 15 分钟阅读
CentOS 7内核升级实战:从yum源选择到GRUB配置全解析
1. 为什么需要升级CentOS 7内核很多运维工程师第一次接触内核升级时都会有这样的疑问系统跑得好好的为什么要折腾内核我刚开始管理服务器时也这么想直到遇到这几个典型场景硬件兼容性问题最让人头疼。去年我们机房新到了一批NVMe固态硬盘在默认的3.10内核上性能只有预期的一半。升级到5.4内核后IOPS直接翻倍这就是新内核对新型硬件的优化。安全补丁更是刚需。记得有次安全扫描报出CVE-2021-33909漏洞老内核需要打二十多个补丁而直接升级到长期支持版内核就能一次性解决所有问题。生产环境的安全问题从来不是要不要而是多快能解决。性能调优也很关键。有次排查Kafka集群的吞吐量瓶颈发现是内核的TCP缓冲区限制导致的。升级后默认参数就优化了很多省去了手动调参的麻烦。不过要注意内核不是越新越好。主线版ml虽然功能多但我在测试环境就遇到过网卡驱动不兼容的情况。生产环境我强烈建议用长期支持版lt像5.4版本就特别稳定。2. 选择靠谱的yum源2.1 常见源对比第一次升级内核时我照着某教程用默认源操作结果yum install直接报404错误——原来CentOS官方早就移除了内核包。现在主流有三个选择ELRepo最权威的内核源更新及时。但国内直连速度慢建议配个清华镜像rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/elrepo/elrepo/el7/x86_64/RPMS/elrepo-release-7.0-6.el7.elrepo.noarch.rpm阿里云镜像速度飞快但内容更新有延迟。适合紧急情况wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo第三方商业源像Coreix这类国外商业镜像适合特定场景。但要注意GPG签名验证rpmkeys --import https://coreix.net/RPM-GPG-KEY-coreix2.2 源配置实操技巧我习惯用这个命令检查源优先级yum repolist all | grep -i kernel输出类似这样elrepo-kernel ELRepo.org Community Enterprise Linux Kernel Repository - el7 elrepo-kernel-lt ELRepo.org Community Enterprise Linux Kernel Repository (lt) - el7重要提示千万别同时启用多个源的kernel仓库我有次同时开了ELRepo和阿里云的kernel源结果依赖关系全乱套了。建议只启用一个源的kernel仓库其他源只保留base和epel。3. 内核版本选择策略3.1 ml与lt版本详解在ELRepo源里你会看到两种内核包kernel-mlMainline主线版本版本号高如6.2包含所有新功能kernel-ltLong Term长期支持版版本号较保守如5.4只含关键更新我给团队制定的规范是开发/测试环境可以用ml版尝鲜生产环境必须用lt版且要滞后社区3-6个月查看可用版本的命令yum --disablerepo* --enablerepoelrepo-kernel-lt list available3.2 版本锁定技巧自动更新内核听起来方便但可能引发意外问题。我推荐用yum-versionlock锁定版本yum install yum-plugin-versionlock yum versionlock add kernel-lt-5.4.*这样既不影响安全更新又避免大版本跳跃。记得定期检查ELRepo的公告当某个版本结束支持期时要及时规划升级。4. 安装过程全记录4.1 安装前检查清单正式安装前我必做这几项检查磁盘空间至少预留2GB空间df -h /boot当前内核信息uname -r rpm -qa | grep kernel驱动兼容性特别是网卡和存储驱动lspci -k | grep -A 3 -E (Network|Storage)4.2 完整安装流程以安装5.4.214 lt版为例# 导入GPG密钥 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # 安装ELRepo源 rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/elrepo/elrepo/el7/x86_64/RPMS/elrepo-release-7.0-6.el7.elrepo.noarch.rpm # 查看可用内核 yum --disablerepo* --enablerepoelrepo-kernel-lt list available --showduplicates | grep kernel-lt # 安装指定版本 yum -y --enablerepoelrepo-kernel-lt install kernel-lt-5.4.214-1.el7.elrepo # 查看安装结果 rpm -ql kernel-lt-5.4.214-1.el7.elrepo | grep vmlinuz避坑指南如果遇到Public key for xxx.rpm is not installed错误说明GPG校验失败。可以临时加上--nogpgcheck参数但生产环境不建议这样做。5. GRUB2配置详解5.1 启动项管理安装完重启前一定要确认启动顺序awk -F\ $1menuentry {print $2} /etc/grub2.cfg输出类似CentOS Linux (5.4.214-1.el7.elrepo.x86_64) 7 (Core) CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)设置新内核为默认启动项grub2-set-default CentOS Linux (5.4.214-1.el7.elrepo.x86_64) 7 (Core) grub2-mkconfig -o /boot/grub2/grub.cfg5.2 高级调优技巧对于需要频繁切换内核的场景比如验证兼容性可以修改/etc/default/grub文件GRUB_TIMEOUT10 # 增加选择等待时间 GRUB_SAVEDEFAULTtrue # 记住上次选择然后重新生成配置grub2-mkconfig -o /boot/grub2/grub.cfg6. 验证与回滚方案6.1 升级后检查清单新内核启动后我必做这些验证基础功能检查uname -r dmesg | grep -i error systemctl --failed性能基准测试dd if/dev/zero oftestfile bs1G count1 oflagdirect # 测试磁盘IO iperf3 -c 127.0.0.1 # 测试网络吞吐6.2 安全回滚方案即使测试通过我也会保留旧内核至少两个版本。回滚步骤重启时在GRUB界面选择旧内核进入系统后卸载问题内核yum remove kernel-lt-5.4.214-1.el7.elrepo重建GRUB配置grub2-mkconfig -o /boot/grub2/grub.cfg血泪教训有次升级后直接删了旧内核结果新内核网卡驱动有问题只能通过救援模式恢复。现在我的原则是至少保留一个已知稳定的旧内核直到新内核经过完整业务周期验证。

更多文章