前一段时间登陆到系统时都会有提示要不要升级到Ubuntu 24.04版本,当时没太想升级就取消了。几次之后发现最近怎么没有提示了,什么原因呢?难道这个提示几次拒绝后就不再提示了吗?于是想自己主动升级一下系统版本,发现不能直接升级24.04 LTS版本了。
以下记录了整个过程及最后实现的方法,主要理解思路,其实就是把配置及版本恢复到该(ubuntu22.04.5 LTS)版本原有的状态,如:内核。
当前系统版本
swper@Mt:~$ lsb_release
No LSB modules are available.
swper@Mt:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
根据网上一些说法,这个问题内核版本6.8.0-114就是关键线索。说说核心原因:
HWE内核版本冲突
当前系统装的是 22.04的HWE内核栈(linux-generic-hwe-22.04),不是22.04默认的GA内核(5.15)。
问题出在这里:
- 22.04 HWE把内核升到了6.8系列,和24.04的GA内核同源但版本号不同步
- 22.04 HWE的6.8.0-114是jammy仓库的补丁版本,patch号可能高于24.04 noble仓库的6.8.0-XX
do-release-upgrade在计算升级路径时,apt无法处理内核”降级”(从高patch号降到低patch号),直接报 “Could not calculate the upgrade”
简单说:22.04的HWE内核太新了,比24.04仓库里的还新,升级器算不出一条合理的升级路径。
排查步骤
先确认报错信息,跑一下:
sudo do-release-upgrade
直接提示:没有可用的 LTS 开发版本 升级到最新的 非 LTS 开发版本
在 /etc/update-manager/release-upgrades 中设定 Prompt=normal。

或直接看日志
grep-i"broken\|error\|cannot" /var/log/dist-upgrade/main.log
grep"Broken" /var/log/dist-upgrade/apt.log

通过日志可以发现,很多包有冲突,或者信赖版本不对,破坏了升级的途径,所以执行do-release-upgrade 命令时无法匹配升级方案。
解决方案
方案一:先切回GA内核再升级(推荐)
安装GA主线内核,如果升级内核时没有清除可跳过此步
sudo apt install linux-generic
确定有没有清除时,可以查看系统当中有哪些内核版本
# 列出所有已安装内核
dpkg --list | grep linux-image
大概输出:

rc / ii 这两个字母,告诉你这个内核现在是啥状态。
- ii = 已安装、正常可用
- rc = 已删除,但配置文件还留着(不算真正安装)
可以看到 linux-image-generic 5.15.0.178.162 这个主线内核还是可以正常使用的,所以可以直接切换内核。
建议用 grub-reboot 先临时切一次,确认能正常启动再改默认。毕竟万一主线内核有驱动问题(比如NVIDIA闭源驱动对主线内核兼容性差),还能重启回HWE兜底。
重启系统选择 5.15.0.178.162 内核
重新启动系统,在进入GRUB界面时选择Advanced options for ubuntu 选项

进入界面后可以看到多个选项,记得要找到主线内核版本5.15.0.178,这个是ubuntu22.04 LTS的内核版本。

使用这个版本内核进入系统(正常是可以进入的),再查看当前内核版本确认一下。
swper@Mt:~$ uname -r
5.15.0-178-generic
#看到这个版本,表示成功切换到主线的内核版本了。
移除HWE内核元包
sudo apt remove linux-image-generic-hwe-22.04

再移除之前升级过的内核6.8.0-114,因为现在重启系统还是默认会进行6.8.0-114版本。

移除高版本的内核6.8.0-114
sudo apt remove linux-image-6.8.0-114-generic linux-headers-6.8.0-114-generic
#完成后再查看次grub.cfg文件内容,可发现只剩一个版本内核了
sudo awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg
重启系统,确认用的是5.15内核
uname -r
然后升级
sudo do-release-upgrade
注意确定以下两个文件的完整及可用性:
/etc/apt/sources.list #更新源
/etc/update-manager/meta-release #这个就是执行do-release-upgrade命令去校验的一个官方地址,它错了可能就无法检查出新版本
- 可能改了源地址导致检查链接时不稳定,不确定直接使用官方原来的地址
- 之前可能对文件修改过,未按正规的格式书写
这个是Ubuntu22.04系统中默认的配置
cat /etc/update-manager/meta-release
[METARELEASE]
URI = https://changelogs.ubuntu.com/meta-release
URI_LTS = https://changelogs.ubuntu.com/meta-release-lts
URI_UNSTABLE = https://changelogs.ubuntu.com/meta-release-development
完成后执行再执行以下操作即可。
sudo apt clean
sudo rm -rf /var/lib/apt/lists/* #去掉第三方源,防止冲突影响升级
sudo apt update
sudo apt full-upgrade -y
sudo do-release-upgrade #执行检查升级更新,正常应该可以提示升级更新了

如果还是提示,找不到那可以再尝试一下,重新安装组件
sudo apt install --reinstall update-manager-core -y
方案二:如果以上都不行,全新安装24.04
对于桌面系统来说,备份/home后全新安装往往比折腾升级更省心,尤其是HWE栈+第三方PPA的系统。
HWE内核和LTS跨版本升级的冲突是个老问题了,Ubuntu官方也没有特别好的自动化处理。作为一个做过运维应该有感觉——这种情况下”降内核再升”或者”直接重装”才是稳妥路线。