更新ubuntu18.04->20.04
思路先说清楚:18.04 已经结束标准支持,正确姿势是「一台一台稳步」从 18.04 ➜ 20.04 ➜ 22.04,而不是乱改源直接跨大版本。官方推荐用 do-release-upgrade 工具完成大版本升级。(Ubuntu)
下面给你一套可执行方案,命令+解释一步到位 ✅

一、通用准备工作(18.04 和 20.04 升级前都要做)💾
-
备份
- 云服务器:做快照 / 镜像。
- 物理机:至少备份
/etc、数据库、业务数据目录(如/var/www)。 - 原因:大版本升级本质上是「重装系统+迁移配置」,出问题直接回滚快照最省心。
-
检查磁盘与网络
df -h- 确认根分区至少剩余 5~10GB 空间,避免下载和解压包时写满磁盘。
-
建议在 tmux/screen 里操作
- 防止 SSH 断线导致升级中断。
sudo apt install tmux -y tmux之后所有升级命令都在 tmux 里执行。
二、从 Ubuntu 18.04 升级到 20.04 🚀
1. 先把 18.04 自身更新到最新
sudo apt update
sudo apt full-upgrade -y
sudo apt --fix-broken install
sudo apt autoremove --purge -y
apt update:刷新软件包索引。apt full-upgrade:把现有系统升到 18.04 最新小版本,同时处理依赖变更。apt --fix-broken install:如有残缺依赖,先修好再往下走。apt autoremove --purge:删除不再需要的旧包,顺便释放空间。
如果你的 18.04 很老,或者标准支持结束后改过源,记得检查源是否可用;只要 apt update 能正常跑完,就可以继续。(Ubuntu)
2. 关闭第三方源(可选但强烈推荐)
ls /etc/apt/sources.list.d/
如果有很多 PPA 或第三方源,可以先把这些文件里的内容注释掉(前面加 #),防止升级时卡在某个不兼容的仓库。
3. 确保只跟随 LTS 版本
sudo sed -i 's/^Prompt=.*/Prompt=lts/' /etc/update-manager/release-upgrades
- 把
Prompt设为lts,表示只在 LTS 之间跳(18.04 ➜ 20.04,而不是中间非 LTS)。(Ubuntu)
4. 执行大版本升级到 20.04
sudo do-release-upgrade
- 这是官方推荐的大版本升级工具,会自动:
- 检查新版本;
- 计算要安装/删除/替换的包;
- 备份并合并配置文件;
- 处理一些兼容性迁移脚本。(documentation.ubuntu.com)
过程中的提示建议这样处理:
- 远程 SSH:如果提示「通过 SSH 升级有风险」,确认你在 tmux 里,选继续。
- 配置文件冲突:大部分情况可以选择「保留当前版本」,有特殊定制的服务你可以再手工比对。
升级完成后会提示重启:
sudo reboot
重启后确认版本:
lsb_release -a
你应该能看到 Release: 20.04(或 20.04.x 小版本)。
三、从 Ubuntu 20.04 升级到 22.04 ✅
思路完全一样,再走一轮「先小再大」的升级流程。20.04 目前仍在标准支持期,升级路径官方保持可用。(TuxCare)
1. 先把 20.04 升到最新
sudo apt update
sudo apt full-upgrade -y
sudo apt --fix-broken install
sudo apt autoremove --purge -y
逻辑同上:先干净地跑一遍系统级更新,减少大版本升级时的冲突。
2. 再确认一次 LTS 升级策略
sudo sed -i 's/^Prompt=.*/Prompt=lts/' /etc/update-manager/release-upgrades
保证仍然是 LTS 路径(20.04 ➜ 22.04)。
3. 执行升级到 22.04
sudo do-release-upgrade
此时 do-release-upgrade 会从 20.04 直接升级到 22.04(下一代 LTS),而不会跳去更高的开发版。(Reddit)
同样,按提示一路确认,完成后重启:
sudo reboot
lsb_release -a
看到 Release: 22.04 就说明已经完成两级升级链路(18.04 ➜ 20.04 ➜ 22.04)。
四、升级后必要自检(很关键,别偷懒)🧐
-
检查核心服务
- Web 服务器(Nginx/Apache)、数据库(MySQL/MariaDB)、PHP、Redis 等是否正常启动。
- 尤其是 PHP 版本:18.04 ➜ 20.04 ➜ 22.04 过程中,PHP 可能从 7.2 ➜ 7.4 ➜ 8.1,不兼容的老框架要重点测试。
-
检查网络与防火墙
sudo ss -lntp sudo ufw status- 确认关键端口还在监听,防火墙规则没有被意外收紧。
-
看系统日志
sudo journalctl -p 3 -xb- 只看错误级别,快速扫一眼有没有明显的驱动/挂载/服务启动错误。
五、最后的建议
- 生产环境建议先在一台非核心机器上演练完整流程,把业务检查脚本(健康检查、回归脚本)跑顺了,再在核心节点执行。
- 如果你打算长期跑线上业务,可以考虑 22.04 作为当前主力,后面再计划 24.04 的升级周期,这样你整体环境结构就很干净,便于统一维护。(Ubuntu)
一句话总结:
先在每个版本上把系统「打满补丁」再用
do-release-upgrade踩稳两级台阶,18.04 ➜ 20.04 ➜ 22.04,一步一步上楼,不跳楼梯,不改源硬抬,这样稳、可控、可回滚。