回滚思路
Ubuntu 的 do-release-upgrade 不支持原生降级。如果升级后出现严重问题,需要依赖事先准备的回滚方案。本文介绍几种实用的回滚策略。
回滚方案对比
| 方案 | 恢复速度 | 准备复杂度 | 适用场景 |
|---|---|---|---|
| Timeshift | 快(分钟级) | 低 | 桌面和小型服务器 |
| LVM 快照 | 快(分钟级) | 中 | 使用 LVM 的系统 |
| Btrfs 快照 | 极快 | 中 | Btrfs 文件系统 |
| dd 磁盘镜像 | 慢(取决于磁盘大小) | 低 | 通用方案 |
| 备份恢复 + 重装 | 慢 | 高 | 最后手段 |
| 云平台快照 | 快 | 低 | 云服务器 |
Timeshift 快照恢复
Timeshift 是最易用的系统快照工具,支持 RSYNC 和 Btrfs 两种模式。
升级前创建快照
# 安装 Timeshift
sudo apt install timeshift -y
# 创建快照
sudo timeshift --create --comments "升级前备份" --tags D
# 列出快照
sudo timeshift --list从快照恢复
方法 1:系统仍可启动
# 列出可用快照
sudo timeshift --list
# 恢复指定快照
sudo timeshift --restore --snapshot "2026-03-24_10-00-00"
# 恢复时会提示确认,选择要恢复的内容
# 恢复完成后重启
sudo reboot方法 2:系统无法启动
- 使用 Ubuntu Live USB 启动
- 在 Live 环境中安装并运行 Timeshift:
# 在 Live 环境中
sudo apt update
sudo apt install timeshift -y
# Timeshift 会自动检测磁盘上的快照
sudo timeshift --list
# 恢复快照
sudo timeshift --restore --snapshot "2026-03-24_10-00-00"
sudo rebootTimeshift 注意事项
- Timeshift 默认不备份
/home目录(RSYNC 模式),需要单独备份用户数据 - 快照存储需要足够的磁盘空间
- RSYNC 模式快照占用空间随时间递增(增量)
- Btrfs 模式更高效,但需要 Btrfs 文件系统
LVM 快照回滚
如果系统使用 LVM(Ubuntu Server 安装时默认选项),可以利用 LVM 快照实现快速回滚。
升级前创建 LVM 快照
# 查看现有逻辑卷
sudo lvs
sudo vgs # 确认卷组有足够的空闲空间
# 为根分区创建快照(需要卷组有空闲空间)
sudo lvcreate -L 10G -s -n root-snap /dev/ubuntu-vg/ubuntu-lv
# 如果有单独的 /var 分区
sudo lvcreate -L 5G -s -n var-snap /dev/ubuntu-vg/var-lv
# 验证快照
sudo lvs从 LVM 快照回滚
# 方法 1:合并快照(需要卸载或从 Live USB 操作)
# 如果可以进入系统
# 标记快照合并(下次激活时生效)
sudo lvconvert --merge /dev/ubuntu-vg/root-snap
# 重启后合并自动执行
sudo reboot
# 方法 2:从 Live USB 操作
# 启动 Live USB
sudo apt install lvm2 -y
sudo vgchange -ay # 激活卷组
# 执行合并
sudo lvconvert --merge /dev/ubuntu-vg/root-snap
sudo reboot如果没有预留空闲空间
# 查看当前 LVM 使用情况
sudo vgs
# 如果 VFree 为 0,可以缩小现有逻辑卷(危险操作,需谨慎)
# 先缩小文件系统,再缩小逻辑卷
# 建议从 Live USB 执行
# 检查文件系统
sudo e2fsck -f /dev/ubuntu-vg/ubuntu-lv
# 缩小文件系统到 15G
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv 15G
# 缩小逻辑卷到 16G(留余量)
sudo lvreduce -L 16G /dev/ubuntu-vg/ubuntu-lv
# 现在有空间创建快照了
sudo lvcreate -L 10G -s -n root-snap /dev/ubuntu-vg/ubuntu-lvBtrfs 快照回滚
如果使用 Btrfs 文件系统,快照操作几乎是即时的。
创建 Btrfs 快照
# 查看 Btrfs 子卷
sudo btrfs subvolume list /
# 创建只读快照
sudo btrfs subvolume snapshot -r / /snapshots/pre-upgrade-$(date +%Y%m%d)
# 列出快照
sudo btrfs subvolume list / | grep snapshot从 Btrfs 快照恢复
# 从 Live USB 启动
# 挂载 Btrfs 分区
sudo mount /dev/sda2 /mnt
# 查看子卷
sudo btrfs subvolume list /mnt
# 重命名当前根子卷
sudo mv /mnt/@ /mnt/@broken
# 从快照创建新的根子卷
sudo btrfs subvolume snapshot /mnt/snapshots/pre-upgrade-20260324 /mnt/@
# 重启
sudo rebootdd 磁盘镜像恢复
最简单粗暴但通用的方案,适合任何文件系统。
创建磁盘镜像
# 建议从 Live USB 创建,确保分区未挂载
# 完整磁盘镜像
sudo dd if=/dev/sda of=/mnt/external/full-disk.img bs=4M status=progress
# 压缩镜像
sudo dd if=/dev/sda bs=4M status=progress | gzip > /mnt/external/full-disk.img.gz
# 仅备份特定分区
sudo dd if=/dev/sda2 of=/mnt/external/root-partition.img bs=4M status=progress从 dd 镜像恢复
# 从 Live USB 启动
# 恢复完整磁盘
sudo dd if=/mnt/external/full-disk.img of=/dev/sda bs=4M status=progress
# 恢复压缩镜像
gunzip -c /mnt/external/full-disk.img.gz | sudo dd of=/dev/sda bs=4M status=progress
# 恢复单个分区
sudo dd if=/mnt/external/root-partition.img of=/dev/sda2 bs=4M status=progress
# 恢复后更新 GRUB
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
grub-install /dev/sda
update-grub
exit
sudo reboot云服务器快照恢复
各云平台操作
# 阿里云 - 使用 CLI 创建快照
aliyun ecs CreateSnapshot --DiskId d-xxx --SnapshotName pre-upgrade
# 腾讯云
tccli cbs CreateSnapshot --cli-input-json '{"DiskId":"disk-xxx","SnapshotName":"pre-upgrade"}'
# AWS
aws ec2 create-snapshot --volume-id vol-xxx --description "pre-upgrade"
# 恢复:在各平台控制台中操作"回滚磁盘"或"从快照创建磁盘"不完全回滚:修复升级问题
有时不需要完全回滚,修复特定问题即可。
修复损坏的包
# 配置未完成的包
sudo dpkg --configure -a
# 修复依赖
sudo apt --fix-broken install
# 重新安装有问题的包
sudo apt install --reinstall package-name
# 强制重新安装
sudo dpkg -i --force-overwrite /var/cache/apt/archives/package-name*.deb使用旧内核启动
# 在 GRUB 菜单中选择 "Advanced options for Ubuntu"
# 选择旧内核版本启动
# 如果 GRUB 菜单不显示(倒计时太短)
# 启动时按住 Shift 键(BIOS)或 Esc 键(UEFI)
# 进入系统后修复内核问题
sudo apt install --reinstall linux-image-$(uname -r)
sudo update-grubRecovery Mode
# 在 GRUB 中选择 Recovery Mode
# 可用选项:
# - dpkg 修复损坏的包
# - fsck 检查文件系统
# - network 启用网络
# - root 进入 root shell
# 在 root shell 中
mount -o remount,rw /
apt --fix-broken install
dpkg --configure -a
reboot预防措施总结
升级前的准备直接决定了回滚的可行性:
- 必须做:完整数据备份(数据库、配置、用户文件)
- 强烈建议:系统快照(Timeshift、LVM、Btrfs)
- 云服务器:创建磁盘快照
- 虚拟机:创建虚拟机快照
- 关键系统:在测试环境先行升级验证
回滚决策流程
升级后发现问题
|-- 问题可修复?
| |-- 是 -> 修复特定问题(包修复、配置调整)
| +-- 否 -> 继续评估
|
|-- 有系统快照?
| |-- 是 -> 恢复快照(Timeshift/LVM/Btrfs)
| +-- 否 -> 继续评估
|
|-- 有磁盘镜像?
| |-- 是 -> dd 恢复
| +-- 否 -> 继续评估
|
+-- 最后手段
+-- 重新安装系统 + 从备份恢复数据和配置最重要的是:升级前务必做好备份,不要寄希望于回滚。
Last updated on