Ubuntu 18.04 升级至 22.04 LTS 完整指南


Ubuntu 18.04 升级至 22.04 LTS 完整指南

升级路径:18.04 → 20.04 → 22.04(Ubuntu 不支持跨版本直接升级)


一、升级前准备

1.1 确认当前版本
bash 复制代码
lsb_release -a

预期输出:

复制代码
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.x LTS
Release:        18.04
Codename:       bionic
1.2 备份数据
bash 复制代码
# 导出已安装软件包清单
dpkg --get-selections > ~/installed-packages-$(date +%Y%m%d).txt

# 备份 /etc 配置文件
sudo tar czvf ~/etc-backup-$(date +%Y%m%d).tar.gz /etc

# 备份业务数据到外部存储
1.3 检查磁盘空间
bash 复制代码
df -h /
# 确保根分区 / 至少有 20GB 可用空间
1.4 确保电源和网络稳定
  • 笔记本/虚拟机请连接电源
  • 建议使用有线网络
  • 关闭休眠:
bash 复制代码
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

二、更新 18.04 到最新

bash 复制代码
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y
sudo apt autoclean

三、配置升级策略

bash 复制代码
sudo apt install update-manager-core -y
sudo sed -i 's/^Prompt=.*/Prompt=lts/' /etc/update-manager/release-upgrades
grep "^Prompt=" /etc/update-manager/release-upgrades
# 预期输出:Prompt=lts

四、第一阶段:18.04 → 20.04

bash 复制代码
sudo do-release-upgrade

如果提示 "No new release found":

bash 复制代码
sudo do-release-upgrade -d
交互提示处理
提示 操作
Do you want to start the upgrade? y
Continue [yN] y
Third party sources disabled 回车
配置文件冲突 没改过 → Y;改过 → N
Remove obsolete packages? y
Restart required y

等待完成,系统自动重启。

验证
bash 复制代码
lsb_release -a
# 预期:Ubuntu 20.04.x LTS

五、第二阶段:20.04 → 22.04

bash 复制代码
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y
sudo do-release-upgrade

按同样规则处理交互提示。

验证
bash 复制代码
lsb_release -a
# 预期:Ubuntu 22.04.x LTS
uname -r
# 预期:5.15.x

六、升级后清理

bash 复制代码
sudo apt autoremove --purge -y
sudo apt autoclean

# 恢复第三方源(如需)
ls /etc/apt/sources.list.d/

# 恢复休眠(如需)
sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target

七、常见问题

7.1 SSH 升级时连接断开

do-release-upgrade 自动在 1022 端口开启备用 SSH:

bash 复制代码
sudo ufw allow 1022/tcp
# 升级完成后:
sudo ufw delete allow 1022/tcp
7.2 升级卡住

确认是否真卡死:

bash 复制代码
ps aux | grep dpkg
top -bn1 | head -5

若卡死,强制恢复:

bash 复制代码
sudo killall -9 do-release-upgrade
sudo rm -f /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a
sudo apt -f install -y
sudo do-release-upgrade
7.3 dpkg 配置弹对话框卡住

设置非交互模式:

bash 复制代码
export DEBIAN_FRONTEND=noninteractive
echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections
sudo dpkg --configure -a
7.4 重启后黑屏

GRUB 启动界面按 e,在 quiet splash 后加 nomodeset,Ctrl+X 启动。


八、阿里云镜像源配置(可选)

bash 复制代码
sudo tee /etc/apt/sources.list << 'EOF'
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
EOF

sudo apt update
相关推荐
天天喝旺仔40 分钟前
Linux 性能排查实战:用 perf、strace 与火焰图定位 CPU、内存与 IO 瓶颈
linux·性能优化·运维开发
LuminousCPP1 小时前
Linux系统编程(二):从目录树到命令执行|路径、环境变量、alias 与文件操作入门
linux·经验分享·笔记
第十人i1 小时前
Linux 系统初始化配置清单:新服务器快速部署
linux·服务器
LongRunning1 小时前
【Linux】RK3568-OpenCV+YOLO(七)
linux
j7~1 小时前
【Linux】三十八.C++ 手写 HTTP 服务器:裸 socket + fork 多进程,从 HTTP 报文解析到浏览器打开网页
linux·网络·网络协议·学习·http·网络编程
傲世仙尊2 小时前
设计者的取舍-路径fork的诞生与全局文件队列
linux
逐流人2 小时前
Containerd容器管理实战:从架构原理到nerdctlcrictl工具链
linux·运维·云原生·容器·云计算·containerd
Tairitsu_H2 小时前
[Linux] 编辑器vim、编译器和动静态链接
linux·vim·gcc·g++·动态链接·静态链接
lzx_0022 小时前
Linux指令(一) 简单了解部分指令
linux
小则又沐风a2 小时前
深入理解TCP协议----滑动窗口,流量控制
linux·网络协议·tcp