本文记录一次 Ubuntu 22.04 LTS → Ubuntu 24.04 LTS 的原地升级过程,适用于已经长期运行、承载多项服务的系统。供后续参考。
一、升级背景与原则
这台系统最早安装于 Ubuntu 16.04,随后经历了 18.04 → 20.04 → 22.04 的多次大版本升级。系统上运行着多个长期服务,因此本次升级遵循以下原则:
- 不重装系统(避免服务与数据迁移成本)
- 原地升级,最小变更
- 保留现有配置文件
- 可回滚 / 可恢复优先
升级目标版本为:
Ubuntu 24.04 LTS
二、升级前准备(关键)
1. 确认当前系统版本
lsb_release -a
确认输出为:
Ubuntu 22.04 LTS
2. 将 22.04 更新到“绝对干净状态”
apt update
apt full-upgrade -y
autoremove --purge -y
reboot
必须确保在一个完全更新、无残留错误的 22.04 系统上升级。
3. 检查 LTS 升级策略
编辑升级策略文件:
vim /etc/update-manager/release-upgrades
确认内容为:
Prompt=lts
4. 数据与系统备份(不可省略)
至少满足以下任一条件:
- 虚拟机:创建完整快照
- 物理机:系统级备份(如 rsync / 镜像)
- 服务器:已有独立备份节点或自动备份系统
示例(脱敏):
rsync -aAXHv /home /etc /var/lib /root /path/to/backup/
⚠️ 大版本升级不可逆,备份是底线。
三、正式升级流程
使用官方升级工具(推荐)
do-release-upgrade
若提示:
No new release found
可使用:
do-release-upgrade -d
对 LTS 来说,
-d只是触发升级,不代表使用测试版系统。
四、升级过程中的关键选择
1. 配置文件冲突
当出现如下提示时(ssh、nginx、systemd 等):
- 选择保留本地配置(keep local version)
这是对已有服务最安全的策略。
2. 服务自动重启
- 允许自动重启
- systemd 会按需重载服务
3. 移除废弃软件包
- 建议同意移除(Y)
- 避免历史包在新系统中制造隐患
五、升级完成后的检查
1. 重启系统
reboot
2. 确认系统版本
lsb_release -a
应显示:
Ubuntu 24.04 LTS
3. 清理残留包
autoremove --purge -y
autoclean
4. 核心服务状态检查
systemctl --failed
ss -lntup
如有容器服务:
docker ps
docker info
六、升级后的注意事项(经验总结)
1. Docker / 容器服务
- 22 → 24 对 Docker 影响很小
- 建议确认:
docker compose version
2. 网络与防火墙变化
- iptables 与 nftables 的过渡更加明显
- 如果有自定义规则,建议同时检查:
iptables -L
nft list ruleset
3. 老脚本与运行环境
- Python 2 已完全移除
- systemd 对 unit 文件更严格
- 老路径、老依赖需留意
七、哪些情况不建议原地升级
以下场景,更推荐 新装系统 → 迁移服务:
- 高可用 / 核心生产服务器
- 无法停机
- 无完整备份
- 使用自编译内核或特殊驱动
八、结语
本次 Ubuntu 22.04 → 24.04 LTS 原地升级整体过程平稳,关键在于:
- 升级前系统足够“干净”
- 明确选择“保守策略”(保留配置)
- 升级后逐项验证服务状态
对于长期运行、多次跨版本升级的系统而言,稳定性来自克制,而不是激进更新。
这份记录既是一次升级总结,也是一份可复用的升级检查清单。