甲骨文免费 VPS 上如果直接跑 do-release-upgrade,多数情况下能顺利从 20.04 升到 22.04,但这个过程不是光敲一条命令那么简单。免费实例的引导卷容量和回收策略都有限制,升级中断后恢复手段较少,所以我习惯把升级分成“检查、执行、防断、善后”四部分来做。
升级前先确认系统版本和磁盘空间
在开始升级之前,需要先确认当前系统的版本和内核架构。甲骨文免费VPS默认镜像可能是Ubuntu 20.04,但也不排除其他版本。执行 lsb_release -a 查看发行版版本,uname -m 查看架构(通常是x86_64或aarch64)。注意,如果系统是Ubuntu 20.04,可以直接通过do-release-upgrade升级到22.04;如果版本更低(比如18.04),建议先逐步升级,避免跨版本带来的依赖问题。同时,检查磁盘空间,使用 df -h 确认根分区至少留有2GB以上空闲空间,升级过程中需要下载大量软件包,空间不足会导致升级中断。
这里我额外提醒一点:如果根分区是 LVM 或默认只有 40GB,磁盘不足的情况可能在升级解包阶段才暴露,到时候再清理已经有点晚。最好先执行 sudo apt clean,把 /var/cache/apt/archives 里的旧包清掉,再检查一次 df -h。另外,把当前内核版本记下来,万一升级后启动异常,你可以通过 GRUB 菜单选择旧内核进入系统。
更新软件包并运行 do-release-upgrade
升级前先更新现有软件包,执行 sudo apt update && sudo apt upgrade -y,然后安装 update-manager-core(如果没装的话)。确认系统版本后,运行 sudo do-release-upgrade -d 启动升级到22.04。注意,-d参数表示允许开发版或非LTS版本,但当前22.04已经是稳定版,所以可以用 sudo do-release-upgrade 直接升级。升级过程中会提示是否重启服务、是否替换配置文件等,建议选择保留原有配置(通常选N或默认)。整个过程可能需要10到30分钟,取决于网络速度。升级完成后,系统会自动重启或提示手动重启。
需要注意,这里用 -d 只是在源配置或网络较慢的特殊情况下更直接,常规路径不需要加。如果你担心当前源有问题,可以先编辑 /etc/update-manager/release-upgrades 里的 Prompt 值,确认是 normal。升级过程中如果出现“配置文件已修改”的提示,我默认选“保留现有版本”,因为 VPS 上很多改动是你自己加的,覆盖掉容易丢配置。
用 TMUX 保护升级会话
甲骨文免费VPS默认使用密钥登录,升级过程中SSH服务可能会重启,这会导致连接中断。为了降低风险,建议在升级前开启一个备用SSH会话或使用TMUX会话,这样即使连接断开,升级进程也能继续在后台运行。具体做法是:先执行 tmux new -s upgrade,然后在tmux会话中运行升级命令。如果连接断了,重新SSH登录后执行 tmux attach -t upgrade 就能恢复升级界面。另外,确保当前SSH登录用户有sudo权限,并且不要关闭终端窗口直到完全升级完成。
有人会问:如果之前没装 tmux 怎么办?可以先执行 sudo apt install tmux 装好再进会话。已经断连的情况下,只要 do-release-upgrade 进程还活着,重新登录后 tmux attach 能看到界面。哪怕看不到,也别急着开第二个升级进程,否则两个升级任务同时写 dpkg 数据库,系统会锁死。
第三方软件源和防火墙
第三方源是升级过程中最容易卡住的地方。很多 VPS 用户装过 Nginx、MySQL、Docker 这类软件,它们会在 /etc/apt/sources.list.d/ 下写入独立的源文件。升级程序检查到这些源还在用旧版本代号(比如 focal)时,会认为仓库不可用并问是否跳过。最好在升级前把所有指向 focal 的源手动改成 jammy,或者直接注释掉。改完以后执行 sudo apt update 确认没有报错,再开始升级。如果某个第三方源没有对应 22.04 的版本,注释掉通常不影响系统核心升级,等你需要那个软件时再单独处理。
防火墙方面,甲骨文除了实例内部可能有 UFW,还在控制台的安全列表里控制端口。如果升级后重启,SSH 默认 22 端口必须放行。检查 UFW 状态可以用 sudo ufw status,如果之前启用了防火墙,确认 22 端口规则还在。安全列表在控制台的“虚拟云网络”里看,一般默认放行了 22,但如果你改过端口,需要先确认好。
升级后检查什么
升级完成重启后,第一件事是确认系统版本。用 lsb_release -a 看到 Ubuntu 22.04 LTS 才算真正进入新系统。内核版本最好也看一眼,uname -r 通常会是 5.15 或更高,但甲骨文也可能用自研内核,版本号不同不代表失败。接着跑 sudo apt --fix-broken install 修复可能的依赖残留,再执行 sudo apt autoremove --purge -y 清掉旧内核和废弃包。下面这组命令是升级后我通常会快速过一遍的检查项:
lsb_release -a
uname -r
sudo apt --fix-broken install
sudo apt autoremove --purge -y
systemctl --failed
网络是甲骨文 VPS 升级后容易出问题的点。如果 SSH 能连上,但外网不通,多半是 netplan 配置被升级过程重置。打开 /etc/netplan/ 下的配置文件,确认网卡名、IP、网关和之前一致。对照控制台里的实例 IP 信息,必要时重新应用 sudo netplan apply。另外检查一下 systemd 服务里有没有 failed 状态,有的话逐个看日志。
回滚准备与边界
升级前最好在甲骨文控制台创建一个引导卷备份或自定义镜像。do-release-upgrade 本身没有自动回滚功能,一旦新系统起不来,最简单的恢复方式是用备份的引导卷替换当前引导卷。具体路径是:在控制台停掉实例,分离引导卷,用旧备份创建新引导卷,再挂回去。这个操作不保证一定能成功,特别是引导卷的 ID 和启动顺序可能变化,但有备份比没有备份安心很多。如果你用的是免费实例,备份会占用 OCI 存储空间,注意计费。