很多朋友一听到 Ubuntu 长期支持版本LTS第一反应就是“装就完了反正五年支持”。但真正在生产环境跑起来后发现新安装的 20.04 内核是 5.4过段时间再看变成了 5.15或者官方 ISO 装出来的 22.04 内核版本比自己预期的新很多然后就开始怀疑是不是装错了。这些问题背后其实都是一件事Ubuntu 长期支持版本内核对应关系没完全吃透。这篇文章我会把 Ubuntu LTS 从 14.04 到 24.04 的内核对应关系、GA 内核与 HWE 内核的区别、如何快速查询和反查、以及生产环境切换内核时容易踩的坑一次性讲清楚。适合正在选型的系统管理员、做运维的开发者以及刚接触 Ubuntu 服务器、想搞明白“为什么内核版本和网上资料对不上”的人。1. 内核对应关系背后的逻辑为什么 LTS 版本的内核会“变”1.1 LTS 版本支持的不仅是 Ubuntu 版本更是内核版本Ubuntu LTS 的“长期支持”意思是官方会对这个系统版本提供长达五年的安全和维护更新。但系统由很多组件组成其中最核心的就是 Linux 内核。内核负责驱动硬件、提供文件系统、管理网络和进程调度。如果你的网卡驱动在新内核里才合入那么 Ubuntu 发布时的旧内核可能就支持不了。所以LTS 版本发布时官方会选择一个当时已经比较成熟的上游内核稳定版作为这个 Ubuntu 版本的默认内核这就是大家常说的 GAGeneral Availability通用可用性内核。后续这个 GA 内核并不是一成不变的官方会在同一个内核版本系列里持续合入安全补丁和 bug 修复。比如 20.04 的 GA 内核初始是 5.4后来稳定在 5.4.0 系列一直不停打补丁但大版本仍然是 5.4。很多人查资料时看到“20.04 对应 5.4”就以为所有 20.04 机器都一定是 5.4.0-x。实际上如果你的系统启用了一些特殊仓库、或者你手动装了新内核那这里就可能有变化。更常见的例外情况是 HWE 内核这一块我后面会专门讲。1.2 内核版本与 Ubuntu 发布节奏的匹配关系Ubuntu 的固定发布节奏是每半年出一个普通版如 21.04、21.10每两年的四月份出一个 LTS。因为 Ubuntu 版本号本身是年份加月份比如 22.04 就是 2022 年 4 月发布的。每个 LTS 发布时Ubuntu 官方都会对照当时 Linux 内核社区的稳定版本确定一个内核基线。这里有个关键点内核社区的版本号是持续升高的。比如 2022 年 4 月上游稳定内核已经发展到了 5.17 左右但 Ubuntu 22.04 却选择了 5.15 作为初始内核。为什么不用最新的因为长期支持版本的核心诉求是稳定不是追新。5.15 是一个长期维护版本LTS 内核而且经过 5.15.0 系列初期的迭代已经相对稳定周边驱动和软件包的兼容性也更好。也就是说Ubuntu LTS 所采用的内核通常不是当时最新而是当时足够稳定、并且被上游社区承诺长期维护的内核。这一点特别重要如果你在 24.04 发布后立刻装上看到内核是 6.8而网上说最新内核已经到 6.10 了不要慌6.8 就是 24.04 的初始基线之后 24.04 会长期基于 6.8 系列做安全修复而不是无脑追新版。2. 历代 Ubuntu LTS 内核对应关系速查从 14.04 到 24.042.1 一份可以对照参考的 GA 内核与 HWE 内核表格下面这张表我整理的是 Ubuntu LTS 刚开始发布时采用的 GA 内核版本以及后续通过点版本更新推出的 HWE 内核版本大致范围。这里需要强调一个概念HWE 是 Hardware Enablement 的缩写翻译过来就是“硬件支持栈”它的作用是在不整体升级 Ubuntu 版本的前提下给 LTS 系统换上更新版本的内核让新设备能被识别。Ubuntu LTS 版本初始 GA 内核后续 HWE 内核常见备注14.04 Trusty TahrLinux 3.133.16 / 4.4老硬件兼容性很少需要操心16.04 Xenial XerusLinux 4.44.8 / 4.10 / 4.13 / 4.1516.04.5 之后 HWE 切到 4.1518.04 Bionic BeaverLinux 4.155.3 / 5.418.04.4 默认 HWE 为 5.420.04 Focal FossaLinux 5.45.8 / 5.11 / 5.13 / 5.1520.04.3 可使用 5.15 HWE22.04 Jammy JellyfishLinux 5.155.17 / 5.19 / 6.2 / 6.5 / 6.822.04 之后 HWE 有两档可选24.04 Noble NumbatLinux 6.8后续随 point release 逐步更新当前较新HWE 还在演进这张表是初始对应关系不是终态。拿 20.04 举例初始 ISO 的内核是 5.4.0但如果你下的是 20.04.5 的镜像那里面可能已经集成了 HWE 的内核 5.15。很多人在部署时发现“明明装的是 20.04uname -r显示 5.15.0-xx”就是因为镜像版本已经包含了 HWE 内核。2.2 理解 GA 内核与 HWE 内核的长期支持范围GA 内核通常被当作 LTS 版本的默认内核它会在该 LTS 版本的支持周期内一直维护。但是注意GA 内核只覆盖到该 LTS 的生命周期结束前的一个时间窗口。比如 20.04 的 GA 内核 5.4 会一直支持到 20.04 标准支持结束大约 2025 年 4 月。如果你在 2024 年之后还继续用 5.4.0安全补丁照样有只是功能不会增加。HWE 内核则是从后续的普通版本里挑选一个更新版本的内核移植到 LTS 上。比如 22.04 的 HWE 内核 6.8 实际上是等相关普通版24.04 使用的内核从 24.04 那边“继承”过来的思路。HWE 内核的维护周期比较短通常会跟着新一批硬件进入一定时间然后就不再有新的安全更新。所以生产环境是否要切换 HWE 内核需要权衡。也就是说如果你追求的是“装完一台服务器三年不动”GA 内核就够了。如果你买的是新款笔记本、新服务器主板自带网卡或 RAID 控制器太新GA 内核不认识那你只能换 HWE 内核或者手动装新内核。3. 实战如何快速查询当前系统的内核与 Ubuntu 版本的对应关系3.1 几条最常用的查询命令别再靠猜很多人一遇到内核问题第一反应是去网上搜“某版本对应内核”不如直接在机器上跑命令十秒钟就知道答案。先查内核版本uname -r这条命令会输出当前运行内核比如5.15.0-91-generic。这里前面是内核版本号 5.15.0后面的-91是 Ubuntu 自己打的发行补丁号泛指该内核的某个修订版本。再查 Ubuntu 版本号lsb_release -a或者更直接点cat /etc/os-release输出里有VERSION_ID22.04这就是你安装的 Ubuntu LTS 版本。结合上面两条输出你就能确定当前系统落在了上面表格里的哪个位置。比如看到22.04和5.15.0-xxx说明是 GA 内核如果看到22.04和6.8.0-xxx说明这台机器已经切到 HWE 内核了。查当前运行架构和内核所有信息uname -a结果会包含系统名、主机名、内核版本、架构等。x86_64就是常见的 64 位。这些命令在 Ubuntu 各个版本的默认终端里都能直接用不需要装任何额外工具。3.2 通过内核版本反查 Ubuntu 版本怎么判断手里的内核属于哪个系统反过来有时你会拿到一台机器不知道它装的哪个 Ubuntu 版本或者内核版本看着很陌生。这时可以先跑cat /etc/os-release如果没有这个文件或者内容被精简过比如一些容器镜像就只能靠内核版本号判断。方法很简单对照内核版本号的大版本。比如看到 5.4.0-xxx大概率是 18.04 HWE 或 20.04 GA。看到 5.15.0-xxx可能是 20.04 HWE 或 22.04 GA。这时要结合其他信息比如/etc/issue、hostnamectl等进一步确认。内核版本与 Ubuntu 版本并不是一一对应关系因为 HWE 机制会让一个内核版本出现在多个 Ubuntu 版本里。建议不要只用一个字段下结论要看uname -r与os-release的组合。3.3 确认当前系统支持的可用内核更新范围如果你想确认自己的 LTS 版本当前能更新到哪个内核不需要去搜表格直接更新软件源列表后查看sudo apt update apt list --upgradable | grep linux-image如果系统没有启用 HWE 仓库输出里通常只有linux-image-generic相关包。启用了 HWE 后会出现linux-image-generic-hwe-22.04之类的包名。这个包名里的 HWE 就是关键看到它说明系统可以跟随 HWE 内核更新。查看当前安装的内核镜像列表dpkg --list | grep linux-image这会列出所有已安装内核包。有些机器里会有多个内核版本记住重启时默认用的通常是最新安装的内核前提是引导加载器没设置什么特殊参数。4. 内核更新与 HWE 栈什么时候选 GA什么时候切 HWE4.1 一张图理清 generic、HWE、OEM 内核的差别Ubuntu 的普通安装镜像默认装linux-image-generic这个包就是当前版本对应的 GA/HWE 内核取决于你怎么安装。实际上官方仓库里有好几套内核元包包名含义适用场景linux-generic当前 Ubuntu 默认内核系列绝大多数服务器和桌面保守选择linux-generic-hwe-版本号硬件支持栈内核版本比 GA 更新新硬件、需要新驱动的用户linux-oem-版本号针对 OEM 预装设备定制的内核笔记本、品牌机专用通常用在厂商预装系统OEM 内核并不会主动推到所有 Ubuntu 用户只在特定设备上通过官方认证渠道提供。如果你不是相关设备用户不需要去折腾。HWE 则更常见官方在 LTS 后续的点版本中会默认推荐。4.2 生产服务器内核升级的保守策略与禁忌给生产服务器升级内核我通常会建议先想清楚三件事有没有必要升级、能不能回滚、升级后有没有人盯着。很多老旧业务跑在 20.04 GA 内核完全没问题。如果新硬件或安全漏洞迫使你升级第一步不是直接apt install linux-generic-hwe-20.04而是先在测试环境里用同样版本的内核跑一遍兼容性测试尤其是数据库、虚拟化、监控 agent 这类对内核敏感的东西。务必保持旧内核不删除。Ubuntu 的 apt 包管理在安装新内核时默认不会移除旧内核这样如果重启后新内核有问题还能在 GRUB 启动菜单里选择旧内核进入系统。但要注意如果你手动执行了autoremove可能会把旧内核也清掉。那种“重启进不去系统、GRUB 又没有旧内核”的场景基本都是因为手贱清过旧内核。升级操作的顺序参考# 备份当前运行内核版本方便回滚时记录 uname -r /root/kernel-before-upgrade.txt # 安装 HWE 内核以 22.04 为例 sudo apt install --install-recommends linux-generic-hwe-22.04 # 更新后重启 sudo reboot # 确认新内核是否正常并检查是否按预期加载 uname -r ls /boot/vmlinuz-*注意 HWE 内核安装时还会带出配套的驱动包比如linux-modules-extra。如果你用的是无线网卡可能需要额外装linux-firmware否则新内核里驱动模块有了固件文件没有照样起不来。4.3 实际模拟在 22.04 上从 GA 内核切换到 HWE 内核假设一台 22.04 服务器当前内核是 5.15.0-91-generic需要切换到更新的 HWE 内核以便识别新款存储卡。操作步骤如下sudo apt update sudo apt install --install-recommends linux-generic-hwe-22.04安装完成后查看系统里多了哪些启动项grep menuentry /boot/grub/grub.cfg | awk -F {print $2}然后重启sudo reboot重启后确认uname -r如果看到类似6.8.0-xx-generic就说明 HWE 切换成功。这里有一个很容易被忽略的点linux-generic-hwe-22.04是一个元包它依赖的 kernel 版本会在之后的维护周期里继续升高比如从 6.2 升到 6.8。所以不要以为装一次就固定了以后每次apt upgrade都可能升级内核版本。这既是 HWE 的好处也是 HWE 的坑每次重启都可能出现一个全新的内核版本需要持续测试。如果发现新内核有问题想回滚到 GA 内核不需要卸载 HWE 包直接在 GRUB 启动菜单里选择之前的内核启动即可。进入系统后可以顺手清理 HWE 包具体操作是sudo apt remove linux-generic-hwe-22.04 linux-image-6.8.0-xx-generic linux-headers-6.8.0-xx-generic但这里要注意6.8.0-xx-generic只是一个示例不同时间安装的具体版本号不同复制命令前一定要用dpkg --list | grep linux-image查清楚再删否则容易误删还在使用的内容。5. 常见问题排查与避坑实录5.1 装了官方 LTS ISO内核却比预期新是不是拿到非官方镜像了这个问题特别多人遇到。我见过有位同事下载了 20.04.6 的镜像安装结果内核显示 5.15.0他以为是镜像包被篡改。其实这是正常现象。官方在发布 LTS 期间会每隔半年左右发布一个 point release例如 20.04.1、20.04.2、20.04.3 等。后续的 point release 镜像往往会把当时的 HWE 内核做进默认安装。也就是说如果你下载的是 20.04.5 或 20.04.6镜像默认内核可能已经是 HWE 内核 5.15 了。这并不代表你装的是假 LTS只是官方替你选择了更新硬件支持。如果想装“最原汁原味”的 GA 内核 LTS通常建议下载初始版本镜像或者安装完成后手动卸载 HWE 包。但对于大多数用户没必要刻意这么做GA 和 HWE 受支持的周期在那个 LTS 版本终止之前都是可接受的。5.2 内核升级后出现网卡消失、黑屏、驱动加载失败怎么办这是内核升级后最让人头疼的问题。常见表现是重启后网络不通SSH 连不上或者屏幕卡在引导画面。排查思路如下首先在服务器本机操作进入 GRUB 菜单选择“Advanced options for Ubuntu”然后选择旧版本内核启动。在网上很多教程会把旧内核称为“recovery mode”一般建议不用恢复模式直接启动旧内核即可。进入旧内核后查看新内核是否真的装了对应模块ls /lib/modules/$(uname -r)/kernel/drivers/net/ethernet如果你的网卡驱动是以第三方源码编译的比如用了 DKMS 包那么新内核安装后需要重新编译。检查命令dkms status如果显示Built而不是Error基本没问题。如果状态是Error那就重新安装一遍 DKMS 包的源码。这类问题最常见的根源不是内核本身而是网卡固件缺失。如果你用的是 Intel 或 Realtek 新网卡建议先安装sudo apt install linux-firmware然后再重新加载驱动sudo modprobe -r 网卡驱动模块名 sudo modprobe 网卡驱动模块名需要先ip link查看网卡接口名称才能知道驱动模块名。对于新手来说稳妥做法是先回滚旧内核再慢慢排查别在旧内核里硬折腾。5.3 查出来的内核版本不在对应关系表里该怎么理解有时你用uname -r查到一个类似5.4.0-100-generic的内核表格里只写了 5.4可能让你疑惑这个 100 是哪来的。其实-100是 Ubuntu 的包修订版本代表在 5.4.0 这个上游版本基础上打的补丁数量。不同时间安装的 Ubuntu 20.04这个数字会不同比如-91、-100都是正常现象。还有一类情况你看到的内核版本比表格中 HWE 更高比如 22.04 竟然变成了 6.11。这种情况通常是手动添加了第三方内核仓库或者使用了官方 backports 策略未来的版本。只要系统能正常运行不需要过度担心。但如果内核版本大跨度跳跃建议查一下软件源里是否有非官方 PPA。另外如果你在云服务器上运行云厂商可能会提供定制内核比如带特殊虚拟化驱动的内核版本号可能和 Ubuntu 官方不完全一致。这时优先以厂商文档为准不要盲目把官方内核强行替换云厂商内核容易踩到虚拟化驱动兼容性的坑。5.4 小技巧如何快速判断该不该换 HWE 内核我在实际运维中会问三个问题第一有没有新硬件识别不了查看dmesg输出里有大量not found、failed、unknown字样多半是内核太旧。第二内核版本是否已经过了上游安全支持期比如 16.04 的 GA 内核 4.4 是很老的了就算官方还在维护 LTS底层内核在旧硬件上的表现也不会太激进。第三业务本身有没有兼容性要求有些数据库驱动、内核模块在不同内核版本之间有 ABI 差异。如果业务跑了很久没动过不建议为了提升一点性能去切 HWE。在我的个人习惯里生产环境倾向“默认 GA明确需要才切 HWE”。桌面上换新硬件则可以直接用 HWE因为个人电脑对数据连续性的要求通常低于服务器而且新特性带来的体验提升更明显。最后再分享一个自己长期使用的习惯拿到一台 Ubuntu LTS 服务器后第一件事就是在/etc/motd这个文件里登录提示上顺手记录一下当时的内核版本和是否 HWE再更新一下机器。这样过几个月回去看不用猜当初做了什么操作。系统管理里最贵的就是“记不清当时为什么这台机器会变成这个样子”所花的时间。表格也许够用但习惯更管用。