前言
之前那台机器各种软件包更新失败,我一度以为要重装才能解决(参考我之前把数据盘装成系统盘、100G 数据全没的那次惨案,重装对我来说约等于数据火葬)。
后来才发现 Ubuntu 大版本升级根本不用重装。do-release-upgrade 这条命令会把整个系统原地升到新的大版本,/home 里的数据、你自己装过的软件、/etc 里的配置基本都能保留下来——它本质上就是把你 apt 源指向新版本,然后做一次「超大号的 full-upgrade」。
写这篇的时候是 2026 年 10 月底,正好卡在升级 26.04 LTS 的最佳时间点,所以顺手把流程和踩过的坑一起记下来。
一、先搞清楚:你能升到哪儿
Ubuntu 只支持相邻版本升级,不能一步跨两级。现在的版本关系是这样:
| 你当前的版本 | 直升目标 | 备注 |
|---|---|---|
| 22.04 LTS | 24.04 LTS | 得到 24.04 再升一次才到 26.04 |
| 24.04 LTS | 26.04.1 LTS | 通道 2026 年 9 月 29 日才开放 |
| 25.04 | 25.10 | 升完再按本教程到 26.04 |
| 25.10 | 26.04 | 25.10 已于 2026 年 7 月 9 日停止支持,别再拖了 |
几个新手最容易懵的点:
- LTS 到 LTS 的通道不是发布日就开的。 官方惯例是等新版本的
.1点发布(26.04.1 是 2026 年 8 月 27 日出的)再放一段时间才打开,所以 4 月刚发 26.04 的时候,24.04 用户do-release-upgrade是看不到提示的。现在(10 月)已经全量开放了,只是灰度推送,有人还会晚几天。 - 别手动改 codename。 把
sources.list里的noble直接改成resolute然后apt full-upgrade,是新手作死第一名,配置迁移脚本不会跑,系统大概率半残。 Prompt=lts不是不许升级。 很多人以为设成lts就升不了非 LTS 版,其实它只是「只提示 LTS」;只有Prompt=never才是彻底关闭升级。- 别忘了还有过渡版。 2026 年 10 月 15 日发了 26.10,只维护 9 个月。把
Prompt设成normal的人,升到 26.04 之后很快就会被提示升 26.10,过几个月又要再升一次。生产环境 / 想省心,老老实实用Prompt=lts。
二、动手前的准备
# 1. 看当前版本lsb_release -a
# 2. 看剩余空间(升级要下大量 deb,根分区至少留 10~15G)df -h /
# 3. 有没有被 hold 住的包(有输出就是被锁了,会卡升级)sudo apt-mark showhold# 需要解锁就:sudo apt-mark unhold 包名然后是备份。这一步我劝你不要省:
- VPS / 云主机:控制面板里打一个快照(镜像备份也行),挂了直接回滚,这是最爽的兜底方式。
- 虚拟机:拍一个完整快照。
- 物理机 / 没有快照功能:至少把
/etc里你手改过的配置、数据库、网站目录、Docker 的 volume 拷走。别信「我不动数据盘就没事」,升级中途断电或者你手滑选了覆盖配置,哭都来不及。
再补一句:笔记本插上电源,服务器上留出足够长的时间窗口(别在业务高峰或者凌晨困得要睡的时候升),全程大概 20 分钟到 2 小时不等,看机器和带宽。
三、正式升级(命令行)
1. 先把当前版本升到最新
升级工具会强制要求系统「已经全更新」,这一步跳过就会报错。
sudo apt updatesudo apt dist-upgrade -o APT::Get::Always-Include-Phased-Updates=truesudo apt --purge autoremove
# 如果更新了内核,先重启再登录回来继续sudo rebootdist-upgrade 而不是 upgrade:后者不处理依赖变更,容易留下 kept back 的包,do-release-upgrade 看到这些包会直接罢工。加那个 -o 参数是为了绕开「分阶段推送」(phased updates),不然有些更新你几天都收不到。
2. 检查升级策略
grep ^Prompt /etc/update-manager/release-upgrades
# 如果是 never,改成 ltssudo sed -i 's/^Prompt=.*/Prompt=lts/' /etc/update-manager/release-upgrades顺手确认升级工具本身在(大部分系统自带):
sudo apt install -y ubuntu-release-upgrader-core3. 先探一下有没有新版本(不会真的开始升)
do-release-upgrade -c看到类似 New release '26.04.1 LTS' available. 就说明通道对你开了。如果输出 No new release found,别急着 -d(那是给测试机拉开发版的),就是灰度还没轮到你,等一两天再试。
4. SSH 用户必做:装 screen 保命
远程升级最怕断网——断了以后 apt 处于半完成状态,比本机翻车更难收拾。do-release-upgrade 检测到装了 GNU Screen 会自己在后台开一个会话,断线了可以重连接上。
sudo apt install -y screen
# 顺便开一个备用端口的 SSH,主连接断了还能从这里进去sudo ufw allow 1022/tcp5. 开始升级
sudo do-release-upgrade过程会跑很久,中间有几个提示必须认真看清楚:
- 要不要自动重启服务:直接
y。 - 配置文件冲突(最重要的一个):出现
=== Config file difference ===说明你改过的文件和官方新版不一致。按d看 diff,再决定。原则很简单:nginx、sshd_config、php-fpm、你大改过的sysctl.conf——保留本地版(keep the local version currently installed);- 从没动过的默认配置——用维护者版本。
- 拿不准就保留本地版,反正升级后服务起不来,日志会告诉你哪儿出了问题。
- 删除 obsolete 软件包:提示会让你先看列表(选列出清单那个选项),确认里面没有你还要用的东西再
y。别看到旧内核头文件、旧语言运行时就紧张,真正被删的是官方判定废弃的包,其余一般只是进 autoremove 的候选。
工具会自动把第三方源(PPA、Docker 官方源、各种国内镜像)临时禁用,这是正常行为,不是坏了。
6. 图形化升级(桌面版)
不想敲命令的话,桌面版更省事:
- 「软件更新器」里如果出现
New Ubuntu release '26.04.1 LTS' is available就点升级; - 没提示就打开
update-manager -c,或者直接把「设置 → 关于 → 软件更新」里的通知策略调成 LTS。
前提是 /etc/update-manager/release-upgrades 里的 Prompt 不是 never,否则图形界面永远不会弹新版本。
四、桌面版特有的坑
这块是我觉得最劝退、也最容易被忽略的部分:
- 26.04 的 GNOME 只剩 Wayland 了。 X11 会话被去掉,普通应用通过 XWayland 自动跑,感知不强;但依赖 X11 的东西(部分录屏、某些远程桌面、老游戏、
xrandr脚本、双显卡的一些配置)行为会变。用 NVIDIA 闭源驱动的,升级前先确认新内核有对应模块。 - GNOME 扩展基本全灭。 大版本跳一级,扩展和新的 GNOME 版本不兼容,出现「桌面变朴素了」「顶部栏没了」很正常。别慌,先
gnome-extensions disable逐个排查,等作者更新,或者用gnome-tweaks关扩展后重新启用。 - 显卡 / 声卡驱动的小毛病:升级完最好重启两次(第二次让 DKMS 和 pipewire 相关服务干净地重跑一遍),能省不少「明明装了但没生效」的疑惑。
五、升级后收尾
# 1. 确认版本lsb_release -a # Description: Ubuntu 26.04.1 LTS / Codename: resoluteuname -r # 内核版本
# 2. 看有没有起不来的服务systemctl --failedjournalctl -xe -p 3 --no-pager | tail -n 40
# 3. 收尾清理sudo apt --purge autoremove还有一个容易漏的收尾:重新启用第三方源。升级时它们被移到了 /etc/apt/sources.list.d/ 下的 *.distUpgrade 文件里:
ls /etc/apt/sources.list.d/# 把 xxx.list.distUpgrade 改回 xxx.list,也就是重新启用for f in /etc/apt/sources.list.d/*.distUpgrade; do sudo mv "$f" "${f%.distUpgrade}"; done
# deb822 格式(ubuntu.sources 之外的大多用这个)里 codename 也要换成新版sudo sed -i 's/noble/resolute/g' /etc/apt/sources.list.d/*.sources /etc/apt/sources.list.d/*.list 2>/dev/nullsudo apt updateDocker、宝塔、1Panel、PPA 这些第三方源在新版本上不一定有对应的包,如果 apt update 报 404 Not Found,就是上游还没同步/适配新版本,先禁用这个源等几天。
最后别忘了把临时开的端口关掉:
sudo ufw delete allow 1022/tcp六、报错对照表
| 报错信息 | 原因和解法 |
|---|---|
Prompt is set to never so upgrading is not possible | 改 /etc/update-manager/release-upgrades 为 Prompt=lts |
Please install all available updates for your release before upgrading | 回到第三节第 1 步,dist-upgrade 到干净为止 |
You have not rebooted after updating a package which requires a reboot | 重启,再登录继续 |
Packages have been kept back | apt-mark showhold 查 hold;没有 hold 就是分阶段更新,用 -o APT::Get::Always-Include-Phased-Updates=true |
旧版(如 25.10)apt update 一堆 404 | 该版本已 EOL,官方包搬到了 old-releases,把 ubuntu.sources 里的 URIs 改成 http://old-releases.ubuntu.com/ubuntu/ 再升 |
| 国内镜像源升级中途失败 | 镜像还没同步完新版本。临时切回官方源升,升完再换回来 |
| SSH 断了,重连不上 | 升级工具的备用 SSH 在 1022 端口:ssh -p 1022 用户@IP;然后 sudo screen -ls 找到带 ubuntu-release-upgrade-screen-window 的会话,sudo screen -d -r 会话名 接回去继续答题 |
| 升级完某个服务 / 容器起不来 | 先 systemctl status 服务名 和 journalctl -xe 看日志,十有八九是配置被覆盖或第三方源没恢复,不是升级失败 |
尾声
do-release-upgrade 这条命令真的被低估了——它比很多人想的安全得多,前提是升级前打好了快照。重装一次丢的数据,够后悔一整年,原地升级至少给你留了一条回滚的路。
至于我那个「软件包怎么都更新失败」的老问题,升级 26.04 之后确实好了,不过原因我没完全定位到,一半是快照救命,一半可能是之前那个盘满 + hold 的连带问题。
💡 评论需审核