本文记录一次 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 原地升级整体过程平稳,关键在于:

  • 升级前系统足够“干净”
  • 明确选择“保守策略”(保留配置)
  • 升级后逐项验证服务状态

对于长期运行、多次跨版本升级的系统而言,稳定性来自克制,而不是激进更新

这份记录既是一次升级总结,也是一份可复用的升级检查清单。

Leave a Reply

Your email address will not be published. Required fields are marked *