兄弟们,今天咱们聊点硬核的。
上周三凌晨两点,我正睡得香呢,电话突然响了。接起来一听,是某电商公司的运维总监,声音都在抖:"老哥,我们双11预热服务器全挂了,内核升级后启动不了,现在网站打不开,老板在群里疯狂@我..."
我揉揉眼睛,问了一句:"你们是不是直接yum update kernel了?"
对面沉默了三秒:"是啊,网上教程都这么写的..."
我叹了口气。这就是典型的"跟着教程走,锅从天上来"。
说实话,我在Linux运维这行摸爬滚打十多年,内核升级这事儿,见过太多血淋淋的教训。今天这篇文章,我就把我这些年踩过的坑、背过的锅、熬过的夜,统统整理出来。6000字长文,建议先收藏,再慢慢看。
一、内核升级前,你必须知道的5件事
1.1 什么是Linux内核?
咱们先不搞那些高大上的定义。说白了,Linux内核就是操作系统和硬件之间的"翻译官"。
你插个U盘,内核负责识别;你开个网页,内核负责调度CPU;你写个文件,内核负责跟硬盘打交道。没有内核,你的Linux就是一堆废铁。
内核版本号长这样:6.14.3,三段数字分别代表:主版本号(大版本更新)、次版本号(功能迭代)、修订号(bug修复)。
1.2 为什么要升级内核?
我见过太多人,看到内核有新版本就手痒,非得升级。结果升级完,驱动挂了、服务崩了、老板骂了。
内核升级的真正原因应该是:
• 安全漏洞:Spectre、Meltdown这些漏洞,老内核根本防不住
• 硬件支持:新出的Intel 14代CPU、AMD XDNA NPU,老内核认都认不出来
• 性能优化:Linux 6.14的NT同步原语驱动,能让Windows游戏在Linux上跑得更快
• 新功能需求:容器化需要cgroup v2,eBPF需要新内核支持
但记住:生产环境,稳定第一。如果你的3.10内核跑得好好的,没有安全漏洞,硬件也支持,那就别瞎折腾。
1.3 升级前必做的5项检查
别急着敲命令,先把这几件事办了:
检查磁盘空间:
df -h /boot
/boot分区至少留500MB,最好1GB。我见过太多人升级失败,就是因为/boot满了。
查看当前内核:
uname -r
cat /proc/version
备份数据:
rsync -av /etc /home /var/www /backup/
二、CentOS/RHEL系内核升级实战
CentOS 7默认内核是3.10,CentOS 8是4.18。说实话,这版本太老了,很多新硬件都不支持。
2.1 使用ELRepo仓库升级(推荐)
这是最稳妥的方法,适合生产环境。
第一步:导入GPG密钥并安装ELRepo
# CentOS 7
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
第二步:查看可用内核
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
你会看到两种内核:kernel-ml(主线版本,最新最潮)和kernel-lt(长期支持版,推荐生产环境)。
第三步:安装新内核
# 安装长期支持版(推荐)
sudo yum --enablerepo=elrepo-kernel install kernel-lt -y
注意!这里用的是yum install,不是yum update。install会新增一个内核,update会替换,风险大得多。
第四步:更新GRUB配置
sudo grub2-set-default 0
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
第五步:重启并验证
三、Ubuntu/Debian系内核升级实战
Ubuntu的内核升级相对简单,但坑也不少。
3.1 使用官方仓库升级
# 更新软件源
sudo apt update
sudo apt upgrade -y
# 安装最新通用内核
sudo apt install linux-image-generic linux-headers-generic -y
# 更新GRUB
sudo update-grub
# 重启验证
sudo reboot
uname -r
3.2 Ubuntu升级常见问题
问题1:/boot分区满了
# 自动清理旧内核
sudo apt autoremove --purge
问题2:新内核缺少网卡驱动
这是最常见的问题。升级后网卡不识别,SSH连不上。
解决办法:重启时按住Shift,进入GRUB菜单,选择旧内核启动,然后排查驱动问题。
四、手动编译内核(终极技能)
有时候仓库里的内核不满足需求,比如需要开启某个特定功能,或者要打补丁,就得手动编译。
4.1 准备工作
# CentOS/RHEL
sudo yum groupinstall "Development Tools"
sudo yum install ncurses-devel bison flex elfutils-libelf-devel openssl-devel
# 下载内核源码
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.14.tar.xz
tar -xvf linux-6.14.tar.xz -C /usr/src/
cd /usr/src/linux-6.14
4.2 配置内核选项
这是最关键的一步,也是最让人头大的。
# 复制当前配置作为基础
cp /boot/config-$(uname -r) .config
# 使用menuconfig图形化配置
make menuconfig
界面出来后,用方向键导航,空格键切换选项([*]编译进内核,<M>编译成模块,[ ]不选)。
4.3 编译和安装
# 编译(-j$(nproc)表示用所有CPU核心并行编译)
time make -j$(nproc)
# 安装模块
sudo make modules_install
# 安装内核
sudo make install
编译时间看机器配置,16核服务器大概20分钟,老笔记本可能要几个小时。
五、内核升级的注意事项(血泪总结)
5.1 生产环境升级 checklist
• 在测试环境验证过
• 数据已备份
• /boot空间充足
• 保留旧内核
• 确认GRUB配置正确
• 准备好回滚方案
5.2 绝对不能做的事
1. 不要删除旧内核:至少保留一个能启动的旧内核,直到新内核稳定运行一周以上。
2. 不要直接yum update kernel:这是替换不是新增,一旦新内核起不来,你就凉了。
3. 不要在业务高峰期升级:凌晨2点升级,出问题能熬到早上9点;下午3点升级,出问题全公司都知道了。
5.3 回滚方案
万一新内核起不来,别慌。重启时按Shift(BIOS)或Esc(UEFI),进入GRUB菜单,选旧内核启动。
总结一下
内核升级这件事,说难不难,说简单也不简单。关键是要有敬畏之心——你面对的是整个系统的最底层,一旦出问题,影响是全局的。
我这些年总结的经验就一句话:"测试环境验证三遍,生产环境谨慎再谨慎。"
别信那些"一键升级脚本",也别盲目追求最新版本。Linux 6.14确实香,但如果你的3.10内核跑得好好的,何必折腾?
记住:备份先行,谨慎操作,留好退路。
咱们下期见!
本文作者:运维老司机,10年Linux运维经验,踩过无数坑,背过无数锅,只想把经验分享给你。