Ubuntu服务器应选GA还是HWE内核?如何查看
Ubuntu Server 默认使用 GA 内核,HWE 需单独安装。本文提供命令识别当前轨道,并说明 HWE 约每 6 个月升级内核和重启一次。
小版本发布会为我的 Ubuntu 服务器安装新内核吗?
不会。在 Ubuntu 服务器上,选择 HWE 内核还是 GA 内核,取决于您安装的相应软件包;小版本发布不会替您安装 HWE 内核。“enablement”一词在发行说明中有两种不同含义,这正是混淆的起点。硬件启用(HWE)指较新的内核分支。升级启用则是另一件事,指从一个 LTS 版本升级到下一个 LTS 版本的路径开放。已经运行且使用 GA 内核的服务器,在其 LTS 版本的每个小版本发布中都会继续使用 GA 内核。
GA 和 HWE 内核轨道
GA(general availability,正式发布)是 Ubuntu LTS 在发布日提供的内核。它在该版本的标准支持期内保持同一个上游内核版本。安全修复和错误修复会回移植到该内核中,因此 uname -r 中的最后一个数字每隔几周就会变化。字符串开头的上游版本不会变化。
HWE(hardware enablement,硬件支持)是另一条轨道。Canonical 会将每个后续 interim 版本中的内核回移植到 LTS,直到下一个 LTS 的内核为止。因此,在达到下一个 LTS 的内核前,硬件支持内核大约每 6 个月升级到一个更新的上游版本。Canonical 将其称为滚动更新模型。最终的硬件支持内核就是下一个 LTS 的 GA 内核,之后在该 LTS 的剩余支持期内保持这个上游版本,并以与 GA 相同的方式获取修复。桌面镜像默认安装硬件支持内核。服务器和云镜像默认安装 GA 内核,硬件支持栈则需要通过可选软件包启用。
两者的取舍很简单。GA 提供一个多年不变的内核版本。HWE 提供更新的驱动程序和内核功能,但在该轨道仍处于滚动更新阶段时,大约每 6 个月需要升级一次版本并重启。
我当前使用的是哪个内核分支?
uname -r 中从不包含 hwe。两个分支打印的版本都以 -generic 结尾,因此仅凭正在运行的内核名称无法判断。已安装的元软件包会告诉您更新跟随哪个分支;将其与 uname -r 对比,可以确认当前实际运行的内核。
uname -r
grep VERSION_ID /etc/os-release
apt-cache policy linux-generic linux-generic-hwe-24.04将 24.04 替换为您本机上 VERSION_ID 打印的数字。apt-cache policy 会为您指定的每个软件包打印一行 Installed:。该行表示软件包已安装,并不表示其内核正在运行。Installed: (none) 对应 -hwe- 软件包,并且 linux-generic 存在版本号,表示您的更新跟随 GA 分支,前提是没有安装其他启用分支元软件包,例如 linux-virtual-hwe-24.04。后面的命令会检查这一点。反之则表示您跟随启用分支。如果两个软件包都有版本号,说明两个内核都已安装。使用 Ubuntu 默认的 GRUB_DEFAULT=0 时,GRUB 会启动版本最新的内核,也就是启用分支内核;但如果有人将 GRUB_DEFAULT 设置为特定启动项或设置为 saved,实际启动的仍可能是 GA 内核。只有 uname -r 能告诉您当前正在运行的内核。
某些提供商镜像安装的是 linux-image-virtual,而不是 linux-generic。这是为虚拟机准备的精简模块集,并且有自己的启用分支变体。不要猜测软件包名称。请先让系统列出已选择的内核软件包,再查询软件包存档中该发行版有哪些启用分支软件包。
apt-mark showmanual | grep '^linux-'
apt-cache search linux-image | grep hwe
apt-cache depends linux-image-generic-hwe-24.04
dpkg -l 'linux-image-*' | grep '^ii'
ls /boot/vmlinuz-*apt-cache depends 会显示启用分支元软件包当前指向的内核镜像。如果该镜像的版本与 uname -r 匹配,说明您正在运行启用分支内核。ls /boot/vmlinuz-* 会显示当前已安装且可启动的内核,通常会比您预期的更多。
每个点版本对各个轨道的影响
在 GA 轨道上,点版本不会改变正在运行的服务器。点版本包含刷新的安装镜像,以及 apt 已经持续提供的更新。它决定新建机器安装什么,不决定现有机器运行什么。Ubuntu 点版本实际会改变什么介绍了其余内容。
在 enablement 轨道上,元软件包会在点版本发布前的常规内核更新周期中更新,而不是在发布日更新。该轨道仍处于滚动更新阶段时,Canonical 会在第一个 LTS 点版本之后的每个 LTS 点版本前更新 enablement 内核,直到更新到包含下一个 LTS 的 GA 内核的版本。对于 24.04,这个版本是 24.04.5,内核版本为 7.0。完成这一步后,后续点版本不会再提供新的 enablement 内核:Ubuntu 20.04.6 于 2023 年 3 月发布,但 Ubuntu 内核生命周期页面将来自 20.04.5 的 5.15 列为 20.04 最后一个 enablement 内核。对于 2025-08-07 发布的 24.04.3,从 6.11 切换到 6.14 的计划是在 2025.06.16 的内核 SRU 周期中执行。linux-image-generic-hwe-24.04 会将依赖关系改为较新的内核镜像,下一次常规更新就会安装该镜像。apt 手册页明确说明了为什么运行普通的 update 就足够:“如果满足依赖关系需要,将安装新软件包,但绝不会删除现有软件包。”因此,apt upgrade 会拉取新内核。它只有在下一次重启后才会成为正在运行的内核。
在 24.04 上,滚动更新已经结束。截至 2026-10-21,amd64 上的 linux-generic-hwe-24.04 依赖 7.0 内核镜像,该版本是 26.04 的 GA 内核。从这里开始,该轨道只会获得修复,不会再跳转到更高的上游版本。
无人参与的任务是否会替你完成这些操作,取决于你的配置。阅读 /etc/apt/apt.conf.d/50unattended-upgrades,并查看其中的 Allowed-Origins 块。随系统提供的默认配置启用了 release 和 security 软件源,但将 updates 软件源注释掉了。这并不能阻止 enablement 步骤,因为 Ubuntu 也会将内核元软件包更新(包括 enablement 切换)发布到 security 软件源。截至 2026-10-21,linux-generic-hwe-24.04 版本 7.0.0-38.38~24.04.4 已发布在 noble-security 中。因此,在安装了 enablement 元软件包的默认配置下,unattended-upgrades 会自行安装每个新的 enablement 内核。但它仍然只有在重启后才会生效。请检查文件,不要凭假设判断。
支持期限由相同的机制决定。GA 内核在 LTS 版本的标准支持期限内获得支持,无需你执行任何操作。每个 enablement 内核都会获得支持,直到被下一个 enablement 内核替换。最后一个 enablement 内核是例外:它会在 LTS 剩余生命周期内获得支持。在完成最后一步之前,HWE 只有在你持续完成每个步骤时才是受支持的轨道。如果在该轨道上落后两个步骤,你运行的内核将不再获得修复,而 apt 不会对此给出任何提示。
不要从任何博客文章(包括本文)获取精确日期。Canonical 会在Ubuntu 内核生命周期页面发布内核结束日期,并在Ubuntu 发布周期页面发布版本和支持日期。不过,内核表不会列出每个内核。截至 2026-10-21,其中没有 24.04 的 6.11 和 6.14 enablement 内核,也没有 22.04 的 5.19、6.2 和 6.5,因此无法查到它们的结束日期。表中已有的行显示了上一段所述的规律:作为 24.04.4 enablement 内核的 6.17 于 2026 年 7 月结束标准支持,也就是 7.0 在该轨道替换它的月份。将这些页面上的信息与服务器上 uname -r 和 grep VERSION_ID /etc/os-release 的输出进行比较。只有这两组事实共同描述了你的机器。
为什么 HWE 内核很少对 VPS 有帮助
HWE 用于硬件。笔记本或物理服务器如果配备了比 LTS 内核更新的 NIC(网络接口卡)、存储控制器或 GPU,在新内核发布前可能无法正常工作。启用内核就是为此提供修复的。在真实硬件上,它往往决定机器能否正常运行。
租用的 VPS 不存在这个问题,因为它看不到这些硬件。虚拟机只会看到一组精简且有意保持较旧的虚拟设备。请检查你的设备。
sudo apt install -y pciutils
lspci -nnklspci -nnk 会列出每个设备,以及其下方绑定的内核驱动。在大多数 VPS 实例中,列表很短:网络设备使用 virtio_net,磁盘使用 virtio_blk 或 virtio_scsi。这些驱动已经包含在主线内核中多年。虚拟设备被设计为稳定接口,这是有意为之,因为服务商将 VPS 迁移到其他物理硬件后,虚拟机仍必须继续运行。因此,在租用服务器上,人们安装启用内核的主要原因通常并不存在。
但代价仍然存在。每次启用内核都会引入一个新的内核二进制文件,并需要单独重启;这还不包括你为安全内核更新已经执行的重启。对于没有备用节点可进行故障转移的单台 VPS,重启就是需要安排并监控的停机时间。实时内核修补 可以减少部分安全更新所需的重启,但不能省去版本升级所需的重启,因为版本升级使用的是不同的内核,而不是对现有内核进行修补。
何时应切换到 enablement 内核
以下4种情况,答案明确是“应该切换”。
- 虚拟机监控程序提供了当前内核无法驱动的设备。具体表现是:设备已出现在
lspci -nnk中,但其下没有Kernel driver in use:行,同时接口未出现在ip -brief link中,或磁盘未出现在lsblk中。 - 运行的软件明确要求最低内核版本高于当前版本。容器运行时、数据库和 eBPF 工具都可能有此要求。将供应商声明的最低版本与
uname -r进行比较,并以供应商要求为准。 - 你遇到的错误已在 GA 版本之后于上游修复,但修复未回移到当前内核。切换前确认 enablement 版本确实包含该修复,否则你只能接受重启成本并继续承受该错误。
- 你需要 GA 版本之后才加入的文件系统或网络功能,并且该功能正是服务器存在的原因。
如果以上情况都不适用于你的服务器,GA 就是正确选择。继续使用 GA 是经过判断的决定,而不是疏忽。
如何切换,以及重启后需要检查什么
先检查可用空间。如果 /boot 是一个较小的独立分区,添加第二行内核可能会将其填满,随后 apt 会因 No space left on device 而停留在半配置状态。
df -h /boot
sudo apt update
sudo apt install --install-recommends linux-generic-hwe-24.04
ls /boot/vmlinuz-*
sudo reboot服务器恢复后,确认哪些内容发生了变化,哪些没有变化。
uname -r
ip -brief link
lsblk
journalctl -k -b 0 -p err --no-pager现在,uname -r 应与 apt-cache depends linux-image-generic-hwe-24.04 指定的镜像匹配。在当前的 24.04 上,这意味着上游版本高于之前的版本,即用 7.0 替代 6.8。在 enablement 轨道尚未切换的版本上,上游版本可能保持不变:截至 2026-10-21,26.04 上的 linux-generic 和 linux-generic-hwe-26.04 都依赖 7.0.0-38.38。网络和磁盘列表应与之前完全一致,因为相同的虚拟设备仍然存在。此处缺少网络接口是唯一需要重点关注的故障,因为这通常意味着只能通过云服务商控制台访问服务器。journalctl -k -b 0 -p err 会以 error 优先级及更高优先级(err、crit、alert 和 emerg)输出本次启动的内核消息;在运行正常的 VPS 上,输出应为空或接近为空。读取 VPS 上的内核日志解释了这些嘈杂日志行的含义。不要在当天删除旧内核。它是你的回退路径。
如果新内核运行异常,如何恢复
旧内核仍然安装在系统中,也仍显示在 GRUB 菜单里。打开服务商的控制台,重启系统,然后在“Advanced options for Ubuntu”下选择上一个内核。这样操作一次即可确认旧内核仍能启动。要让该选择在每次重启后保持不变,则需要执行另一项配置,详见固定 VPS 启动时使用的内核。如果机器始终无法恢复,控制台显示 GRUB 提示符或内核崩溃,则参阅内核更新后无法启动的 VPS,其中介绍了恢复流程。
启动到可正常工作的内核后,将相关软件包恢复原状。
sudo apt install linux-generic
sudo apt remove linux-generic-hwe-24.04 linux-image-generic-hwe-24.04 linux-headers-generic-hwe-24.04
sudo reboot删除元软件包后,下一次 enablement 步骤不会再安装新的内核。这不会删除已经安装的内核映像,因此运行中的系统不会发生变化。重启后,确认 uname -r 再次显示 GA 版本。sudo apt autoremove --purge 会清理部分旧内核映像,但不一定会清理你刚刚停用的那个版本。APT 始终保留正在运行的内核和已安装的最新内核,而 enablement 内核通常就是最新版本。确认 uname -r 表明当前并未运行该内核后,使用 dpkg -l 'linux-image-*' 显示的版本号,按名称删除该版本的 linux-image-、linux-modules- 和 linux-modules-extra- 软件包。清理 /boot 中的旧内核介绍了更棘手的情况:在完成上述操作前,/boot 已经用满。
还需要了解一点:内核跟踪会在下一个 LTS 版本处自行切换。升级到下一个 LTS 后,系统会使用该版本的 GA 内核。它比你当前使用的 GA 内核更新,并会重新开始支持周期。如果你正计划升级,因此关注 point release,请参阅将 24.04 升级到 26.04,其中介绍了具体流程。在此之前继续使用 GA 内核,对于租用的服务器来说是正常且合理的选择。
FAQ
点版本发布会更改已安装服务器上的内核吗?
GA 轨道不会。点版本发布主要是更新安装镜像,因此它决定新建机器使用的内容。现有服务器会继续使用其已安装元软件包名称所指定的轨道。如果已安装 linux-...-hwe-... 软件包,启用步骤会以常规内核更新的形式提供给您。该更新会在所属点版本发布之前发布,下一次 apt upgrade 会安装它。新内核会在下次重启时开始运行,而不是在 apt 完成安装时立即运行。
如何判断我运行的是 HWE 内核还是 GA 内核?
运行 apt-cache policy linux-generic linux-generic-hwe-24.04,将 24.04 替换为您自己的版本号。其 Installed: 行包含实际版本的软件包,就是您后续更新所遵循的轨道。这不能证明当前运行的是哪个内核,因此请将 uname -r 与镜像 apt-cache depends linux-image-generic-hwe-24.04 的名称进行比较。不要仅根据 uname -r 判断轨道,因为运行中的内核名称在两个轨道中都以 -generic 结尾,并且从不包含 hwe。如果两个软件包都未安装,请运行 apt-mark showmanual | grep '^linux-',因为某些提供商镜像改用 linux-image-virtual 系列。
HWE 内核是否不如 GA 内核稳定?
每个启用内核都是受 Ubuntu 支持的内核,因此这不是质量问题,而是变更频率问题。GA 内核多年保持同一个上游版本,因此您测试过的行为会保持不变。启用内核大约每6个月更新到较新的上游版本,直到达到下一个 LTS 的内核版本;每次更新都可能导致驱动默认值或 sysctl 在您的工作负载下发生变化。对于很少维护的服务器,较少的变化通常比较新的驱动更有价值。
我的 VPS 应该使用 HWE 内核吗?
通常不应该。虚拟机看到的是一组固定的虚拟设备,主要是 virtio,而这些设备的驱动已经在内核中存在多年。因此,启用轨道所提供的硬件支持对 VPS 没有实际收益。额外的重启仍然需要执行。只有在有明确原因时才切换,例如当前内核无法驱动某个设备,或您必须运行的软件明确要求最低内核版本。
如果我安装启用内核后一直不重启,会发生什么?
新的内核镜像会写入 /boot 并添加到 GRUB 菜单,但服务器会继续运行旧内核。uname -r 才能准确反映当前运行的内核,软件包列表不能说明这一点。Ubuntu 会在已安装软件包需要重启才能生效时创建 /var/run/reboot-required,因此 ls -l /var/run/reboot-required 会告诉您是否需要重启。在重启完成前,您会承担新内核占用的磁盘空间,却无法获得它包含的修复。