努力
加油

系统从Ubuntu 20.04升级到22.04数据会保留吗?

直接给结论:默认情况下,数据是保留的。

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. 真实场景中的“坑”与风险

我在实际运维中见过不少因为盲目升级导致服务起不来的案例,主要集中在以下几点:

  1. Python 环境断裂:
    Ubuntu 20.04 默认 Python 3.8,22.04 默认 Python 3.10。如果你的业务强依赖 python3-venv 或系统级 Python 库,升级后虚拟环境可能会损坏,或者某些 C 扩展编译失败。解决方案:尽量使用 Conda、Pyenv 或 Docker 隔离 Python 环境,不要深度绑定系统 Python。

  2. Nginx/Apache 配置冲突:
    如果你自定义了大量 Nginx 配置,升级过程中可能会遇到 nginx.conf 被新版本的模板覆盖的情况。解决方案:升级前手动备份 /etc/nginx/sites-enabled/ 和 /etc/nginx/conf.d/。

  3. 显卡驱动问题(特别是 NVIDIA):
    如果是桌面版或有 GPU 计算需求的服务器,从 5.4 内核升到 5.15 内核,闭源 NVIDIA 驱动可能需要重新 DKMS 构建。如果自动构建失败,可能导致图形界面黑屏或 CUDA 不可用。解决方案:升级前确认当前驱动版本是否支持新内核,或准备好手动安装步骤。

  4. 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”的方案,这才是企业级最佳实践。

记住,数据无价,备份先行。没有快照,就别动系统内核和发行版。