Ubuntu Server / do-release-upgrade / 如何升级 Ubuntu 发行版
要将 Ubuntu Server 操作系统升级到下一发行版,请使用 sudo do-release-upgrade。开始前应先完整更新当前发行版的软件包,确认受支持的升级路径,并准备可恢复的备份。
软件包更新与发行版升级的区别
do-release-upgrade 将 Ubuntu 的基础软件包和系统配置迁移到下一发行版。它不同于刷新软件包列表的 apt update,也不同于在当前发行版内更新软件包的 apt upgrade。日常管理可参考Ubuntu Server apt 使用指南。
长期支持版 LTS(Long Term Support)应按顺序升级到下一个 LTS。例如,从 22.04 LTS 前往 26.04 LTS,需要先升级到 24.04 LTS,并在每一步检查系统运行情况。不要通过批量替换软件源代号来跳过发行版。升级路径与支持期限可查阅 Ubuntu 发行周期。
新 LTS 发布后,并非所有现有服务器都会立即获得升级。LTS 之间的升级通常在第一个点版本发布后开放,实际是否提供应以升级工具的检查结果为准。对于已结束支持的发行版,应单独制定恢复或迁移方案,不要假定以下步骤可以原样使用。
准备备份与恢复访问方式
安排服务停机窗口,并使用具有管理权限的账户操作。检查目标 Ubuntu 版本的发行说明及应用程序支持条件。Web 服务器能启动,不代表 PHP、数据库和扩展模块都能正常运行。
- 备份:将服务数据、数据库、
/etc下的配置、证书及恢复所需的机密信息存放到安全的独立位置。数据库应使用该产品提供的一致性备份方法,并验证能否恢复。仅对运行中的虚拟机创建快照,并不能保证数据库一致性。 - 恢复访问:准备并测试物理控制台、远程管理控制台或云串行控制台,确保 SSH(Secure Shell,安全外壳协议)断开后仍能访问服务器。即使通过 SSH 升级,也不要把 SSH 作为唯一恢复途径。
- 云环境条件:检查云服务商对镜像、内核、启动方式和管理代理的支持要求。并非所有云服务器都禁止原地升级。如果恢复困难,或需要提前验证业务兼容性,也应比较新建服务器后迁移数据的方案。
以下命令检查当前发行版、文件系统剩余空间与 inode、未完成的软件包状态以及被保留的软件包,不会启动发行版升级。
cat /etc/os-release
uname -r
df -h / /boot
df -i / /boot
sudo dpkg --audit
apt-mark showhold
记录 VERSION_ID,先解决 / 和 /boot 的空间不足问题。空间需求取决于安装配置和变更计划。若 dpkg --audit 报告问题,应先调查;处理被保留的软件包前也要弄清原因,不要仅为通过升级检查而全部解除保留。
更新当前发行版并检查通知策略
- 刷新当前发行版的软件包列表并安装所有更新。以下准备命令见于 Ubuntu Server 官方升级流程。
sudo apt update
sudo apt dist-upgrade -o APT::Get::Always-Include-Phased-Updates=true
dist-upgrade 根据已配置的软件源调整依赖关系,也可能移除软件包。阅读变更计划,若重要软件包将被意外移除,请先停止。此选项会包含分阶段推送的更新,但该命令本身不会切换 Ubuntu 发行版。确认两个命令均成功,且没有待安装的更新。
- 检查
/run/reboot-required是否存在。存在该文件表示需要重启,才能完成当前更新。
if [ -f /run/reboot-required ]; then
cat /run/reboot-required
fi
如果需要重启,在维护窗口内执行 sudo reboot,重新连接并检查服务后再继续。文件不存在不代表应用程序验证也已完成。
- 若找不到
do-release-upgrade,安装提供该命令的软件包,再检查发行版通知策略。
sudo apt install ubuntu-release-upgrader-core
cat /etc/update-manager/release-upgrades
如果命令已经存在,可跳过安装。要让 LTS 服务器继续升级到下一 LTS,在配置文件中使用 Prompt=lts。Prompt=normal 也会检查中间发行版,并不允许跳过版本。需要修改时,先用另一个文件名备份原文件,再通过 sudoedit /etc/update-manager/release-upgrades 仅编辑相关设置。两种策略的区别见 Ubuntu 的 LTS 与中间发行版切换指南。
确认目标后开始升级
先检查是否有可用的发行版升级。-c 只检查并退出,不会启动升级,也不会测试应用程序兼容性。
sudo do-release-upgrade -c
如果没有可用目标,请检查当前版本、支持路径、Prompt 设置、未安装更新、网络和升级开放状态。do-release-upgrade 手册中的 -d 用于检查开发发行版,也可用于在首个点版本之前评估新 LTS。不要为了绕过“没有新发行版”的提示,就在生产服务器上随意添加该选项。
备份和恢复访问准备好,且显示的目标符合计划后,用以下命令开始。不要添加自动批准选项,并确保能够及时回答交互提示。
sudo do-release-upgrade
- 变更摘要:检查目标发行版、将移除或安装的软件包、下载量和所需空间。若重要服务将被移除等情况不符合计划,应在批准前停止并排查。软件包开始安装后,不要强制终止进程或关闭电源。
- 配置文件提示:比较现有配置与软件包维护者提供的配置,再决定保留还是替换。查看差异和选择操作时,以屏幕上的实际说明为准。无条件保留或替换所有文件,都可能丢失现有服务配置或新版本必需的改动。
- 外部软件源与连接:PPA(Personal Package Archive,个人软件包归档)及第三方软件源会在升级中被禁用。如果工具提示了单独的恢复 SSH 端口,再按实际提示检查防火墙和云安全规则,并限制为管理员可访问。不要关闭整个防火墙,也不要长期开放不必要的端口。
遇到移除过时软件包的提示,也应阅读列表后再决定。升级完成并要求重启时,在维护窗口内重启,保留控制台访问,直至完成后续检查。
重启后检查版本与服务
重新连接,确认系统已进入目标发行版,并检查有无失败的服务。将内核版本与升级前的记录或目标发行版的软件包信息比较,再刷新软件包列表。
cat /etc/os-release
uname -r
systemctl --failed
sudo apt update
apt list --upgradable
确认 VERSION_ID 是目标值,逐项调查 systemctl --failed 报告的失败。即使没有失败单元,也应按业务要求测试网页响应、数据库读写、计划任务、监控和备份。关闭恢复控制台前,还要测试一个新的 SSH 会话。
确认外部软件源支持新的 Ubuntu 发行版,并与已安装软件包兼容后,只重新配置需要的软件源。不要一次性启用仍使用旧代号的所有源。进一步清理应在服务稳定后进行,并审阅拟删除的软件包。
处理错误与连接中断
出现错误时,保存最后的提示及 /var/log/dist-upgrade/ 下的日志。Ubuntu 升级错误报告指南也将该目录的日志列为排查资料。先列出文件,再阅读实际存在的日志,以缩小故障阶段和软件包相关原因的范围。
sudo ls -lah /var/log/dist-upgrade/
sudo less /var/log/dist-upgrade/main.log
SSH 断开后,先通过恢复控制台检查现有升级进程及其进度。不要仅因连接断开就重新启动升级,或删除 APT 锁文件。软件包处理中的中断,需要根据日志和当前软件包状态恢复。
没有通用的单条命令可以撤销发行版升级并返回之前的 Ubuntu。需要恢复时,应将经过验证的服务器备份和数据库备份恢复到相互一致的时间点,或切换到已准备的旧服务器。同时考虑如何保留备份后产生的数据写入。仅恢复 Prompt 配置文件,不能还原已经更改的操作系统。




