AWS EC2 实例如何从 Ubuntu 18.04 无缝升级到 22.04 版本

文章导读
AWS EC2 实例无法直接从 Ubuntu 18.04 升级到 22.04,必须依次经过 20.04 中转。生产环境操作前必须创建 EBS 快照,否则升级失败可能导致实例无法启动且数据丢失。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

AWS EC2 实例无法直接从 Ubuntu 18.04 升级到 22.04,必须依次经过 20.04 中转。生产环境操作前必须创建 EBS 快照,否则升级失败可能导致实例无法启动且数据丢失。

先说结论:原地升级可行但存在中断风险,建议非核心业务在维护窗口期操作,核心业务采用蓝绿部署替换实例。

  • 适合:有维护窗口期、数据已备份的非核心业务实例
  • 先看:实例存储类型是否为 EBS,是否已创建快照
  • 建议:优先测试环境验证,生产环境优先采用替换实例方案

命令速用版

升级过程分为两个阶段,必须先升级到 20.04,完成后再次执行升级命令到 22.04。

# 第一阶段:升级到 20.04
sudo apt update
sudo apt upgrade
sudo do-release-upgrade

# 第二阶段:升级到 22.04
sudo apt update
sudo apt upgrade
sudo do-release-upgrade

为什么会这样

Ubuntu LTS 版本升级策略限制只能逐级升级,不支持跨版本直接跳转。

Ubuntu 长期支持版(LTS)的发布周期为两年,升级工具 do-release-upgrade 默认只允许升级到下一个 LTS 版本。从 18.04 直接指向 22.04 会被官方源拒绝,强制修改源地址会导致依赖库冲突和系统不稳定。AWS EC2 实例涉及网络配置和驱动兼容性,逐级升级能确保内核模块和云初始化脚本正确迁移。

分步处理

按顺序执行备份、升级、验证步骤,每一步完成后需确认系统状态正常再进行下一步。

步骤 1:创建 EBS 快照

在 AWS 控制台选中实例关联的卷,创建快照。这是唯一可靠的回滚手段,升级过程中无法通过命令回退版本。

步骤 2:清理现有包并更新 18.04

移除未使用的内核和包,减少冲突概率。

sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt autoremove

步骤 3:执行第一次升级(18.04 到 20.04)

执行升级命令,按提示确认。

sudo do-release-upgrade

过程中保持 SSH 连接稳定,建议使用 screentmux 会话。重启后登录验证版本是否为 20.04。

AWS EC2 实例如何从 Ubuntu 18.04 无缝升级到 22.04 版本

步骤 4:执行第二次升级(20.04 到 22.04)

重复更新和升级命令。

sudo apt update
sudo apt upgrade
sudo do-release-upgrade

重启实例,等待系统状态检查完成。

怎么验证是否生效

通过系统命令检查版本号和内核状态,确认业务进程正常运行。

  • 检查系统版本:运行 lsb_release -a,确认 Description 显示 Ubuntu 22.04 LTS。
  • 检查内核版本:运行 uname -r,确认内核版本已更新且与 22.04 匹配。
  • 检查网络配置:运行 ip addr 确认私有 IP 未丢失,SSH 端口可连接。
  • 检查业务进程:使用 systemctl status 查看关键服务是否处于 active (running) 状态。

常见坑

网络配置变更和 Python 环境差异是导致升级后服务不可用的主要原因。

  • 网络配置失效:Ubuntu 20.04 及以后版本默认使用 Netplan 管理网络,旧版 networkd 配置可能不兼容,需检查 /etc/netplan/ 目录配置。
  • Python 版本变更:Ubuntu 22.04 默认使用 Python 3.10,依赖 Python 3.6 或 3.8 的脚本可能报错,需验证虚拟环境。
  • 软件源失效:升级后 /etc/apt/sources.list 会自动更新,但第三方源(如 Docker、Nginx 官方源)需手动检查是否支持 22.04。
  • SSH 连接中断:升级过程中 SSH 服务会重启,若网络配置错误可能导致无法远程连接,必须依赖控制台 VNC 修复。

常见问题

能否跳过 20.04 直接升级到 22.04?

不能,官方升级工具不支持跨版本跳转。

强制修改源地址会导致依赖库版本冲突,系统可能无法启动。

升级失败如何回滚?

无法通过命令回滚,必须使用升级前创建的 EBS 快照恢复实例。

原地升级是覆盖操作,没有内置卸载新版本的功能。

升级过程需要停机多久?

公开资料中没有看到可靠的量化数据,取决于实例规格和磁盘 IO 性能。

通常涉及两次重启和多次包安装,建议预留至少 30 分钟维护窗口。

参考来源

  • Ubuntu Official Documentation, "Upgrade from Ubuntu 18.04 LTS to 20.04 LTS", ubuntu.com
  • AWS Documentation, "Create an EBS snapshot", aws.amazon.com
  • Ubuntu Release Notes, "Ubuntu 22.04 LTS (Jammy Jellyfish)", wiki.ubuntu.com