直接给结论:默认情况下,数据是保留的。
Ubuntu 20.04 到 22.04 属于 LTS(长期支持版)之间的升级,官方机制设计就是允许在保留用户文件、配置和大部分软件的前提下进行版本迭代。但是,“保留”不等于“绝对安全”,也不代表“零风险”。作为运维老手,我得把丑话说在前头:系统升级本质上是高危操作,尤其是生产环境或存有重要数据的服务器。
下面我从实际操作、潜在坑点和建议方案三个维度给你拆解清楚。
1. 怎么升?路径决定生死
你可以通过两种方式升级,结果略有不同:
-
在线升级(do-release-upgrade):
这是最常见的做法。在终端执行sudo do-release-upgrade。它会下载新版本的包并替换旧包。这个过程会保留/home下的个人数据以及/etc下的配置文件(如果发生冲突,可能会生成.dpkg-dist备份文件)。- 优点:方便,一键式。
- 缺点:中间过程不可逆,一旦中断或出错,修复成本极高。
-
最小化安装/全新安装(Clean Install):
备份数据后,格式化重装 22.04。- 优点:系统最干净,无历史包袱,性能最好。
- 缺点:耗时,需要重新配置所有环境和服务。
对于大多数个人用户和中小型企业,推荐走在线升级路径,但必须满足前置条件。
2. 哪些东西会丢?哪些会留?
| 项目 | 是否保留 | 备注 |
|---|---|---|
/home/用户名/ 下的文件 |
✅ 保留 | 你的文档、图片、代码等都在。 |
| 已安装的第三方软件 | ⚠️ 部分保留 | PPA 源添加的软件可能失效或版本不匹配;Snap 包通常保留;Apt 管理的软件会尝试升级到兼容版本。 |
/etc/ 下的配置文件 |
⚠️ 谨慎保留 | 如果新版有默认配置变更,旧配置可能被覆盖或标记为冲突。这是最大的隐患所在。 |
| 数据库数据 | ✅ 保留 | MySQL/PostgreSQL 等只要服务没崩,数据文件通常在 /var/lib/mysql 等目录,会被保留。 |
| Docker 容器/镜像 | ⚠️ 视情况而定 | 如果你用 docker-ce,通常能保留。但如果内核级别变化大,某些基于特定内核模块的驱动可能出问题。 |
3. 真实场景中的“坑”与风险
我在实际运维中见过不少因为盲目升级导致服务起不来的案例,主要集中在以下几点:
-
Python 环境断裂:
Ubuntu 20.04 默认 Python 3.8,22.04 默认 Python 3.10。如果你的业务强依赖python3-venv或系统级 Python 库,升级后虚拟环境可能会损坏,或者某些 C 扩展编译失败。解决方案:尽量使用 Conda、Pyenv 或 Docker 隔离 Python 环境,不要深度绑定系统 Python。 -
Nginx/Apache 配置冲突:
如果你自定义了大量 Nginx 配置,升级过程中可能会遇到nginx.conf被新版本的模板覆盖的情况。解决方案:升级前手动备份/etc/nginx/sites-enabled/和/etc/nginx/conf.d/。 -
显卡驱动问题(特别是 NVIDIA):
如果是桌面版或有 GPU 计算需求的服务器,从 5.4 内核升到 5.15 内核,闭源 NVIDIA 驱动可能需要重新 DKMS 构建。如果自动构建失败,可能导致图形界面黑屏或 CUDA 不可用。解决方案:升级前确认当前驱动版本是否支持新内核,或准备好手动安装步骤。 -
GRUB 引导失败:
极少数情况下,双系统或多磁盘环境下,GRUB 更新可能导致无法启动。解决方案:确保 BIOS/UEFI 设置正确,最好有 Live USB 应急盘在手。
4. 专业建议:如何安全地升级?
别信“没事,直接升”,按以下步骤操作,才能把风险降到最低:
第一步:完整备份(重中之重!)
- 数据备份:将
/home、/var/www、数据库 dump 文件、Docker volume 数据拷贝到外部硬盘或 NAS。 - 系统配置备份:
sudo cp -r /etc /etc_backup_ubuntu20 sudo dpkg --get-selections > packages_list.txt - 快照备份:如果你在云服务器上(如阿里云 ECS、腾讯云 CVM),务必先打系统盘快照。这是最后一道防线,比任何命令都管用。
第二步:检查兼容性
- 运行
sudo apt update && sudo apt upgrade先升级到 20.04 的最新状态,清除残留包。 - 检查是否有未完成的 apt 事务:
sudo dpkg --audit - 清理不再需要的依赖:
sudo apt autoremove
第三步:执行升级
sudo do-release-upgrade
过程中如果出现配置冲突提示(.dpkg-dist),不要盲目选“安装新版本”,先打开对比看看差异。如果不确定,就保持旧配置,手动后续调整。
第四步:升级后验证
- 重启系统。
- 检查关键服务状态:
systemctl status nginx,systemctl status mysql,docker ps等。 - 检查日志:
journalctl -xe看有没有报错。 - 测试核心业务流程。
总结
- 个人电脑/开发机:可以大胆升,但记得备份重要文档。
- 生产服务器:严禁直接在线上裸奔升级! 先在测试环境模拟一遍,或者直接采用“新建 22.04 服务器 -> 迁移数据 -> 切换 DNS”的方案,这才是企业级最佳实践。
记住,数据无价,备份先行。没有快照,就别动系统内核和发行版。
云技术博客