努力
加油

云主机切换CentOS到Ubuntu系统怎么保留文件?

先说结论:云主机(ECS/CVM)本身不支持直接“无损切换”操作系统镜像并保留原有数据盘上的所有文件,尤其是系统盘。

如果你是指重装系统时保留数据盘,或者在两台机器间迁移数据,这是可行的。但如果是想在一台机器上把 CentOS 的根目录(/)换成 Ubuntu,同时保留 /home、/var/www 等数据,原生不支持,必须通过备份-重建-恢复的流程来实现。

下面分场景给你讲清楚怎么做最稳妥、风险最低。


一、核心原则:区分系统盘和数据盘

国内主流云厂商(阿里云 ECS、腾讯云 CVM、华为云 ECS 等)的云主机通常由两块盘组成:

  1. 系统盘:安装 OS 的地方,重装系统时会格式化或覆盖。
  2. 数据盘:独立挂载的磁盘,用于存放业务数据、数据库、网站文件等。

✅ 能保留的:数据盘里的文件(只要你不手动删它)。
❌ 不能直接保留的:系统盘里的文件(/etc, /usr, /bin, /sbin, /home 如果放在系统盘的话)。

⚠️ 注意:很多用户默认把 /home 放在系统盘。如果你的个人文件、项目代码在 /home 下,重装系统后这些数据会丢失!


二、正确操作流程(推荐方案)

步骤 1:确认数据位置

登录当前 CentOS 实例,执行:

df -h
lsblk

查看哪些目录不在 /dev/vda1(通常是系统盘),而是在 /dev/vdb 或其他数据盘上。

  • 如果数据在独立数据盘 → 安全,后续操作只需确保不卸载/格式化该盘即可。
  • 如果数据在系统盘(如 /home, /var/www/html 在 vda1)→ 必须提前备份到对象存储(OSS/COS)或另一台临时机器。

步骤 2:备份关键数据(无论在哪都建议做)

即使数据在数据盘,也建议:

  • 打包重要配置文件(如 Nginx/Apache 配置、MySQL 配置文件)
  • 导出数据库(mysqldump / pg_dump)
  • 上传至云厂商的对象存储(阿里云 OSS、腾讯云 COS),作为最终保险
# 示例:打包网站文件
tar czf /tmp/site_backup.tar.gz /var/www/html

# 示例:导出 MySQL 数据库
mysqldump -u root -p --all-databases > /tmp/db_backup.sql

然后上传到 OSS/COS:

ossutil cp /tmp/site_backup.tar.gz oss://your-bucket/backup/

步骤 3:创建自定义镜像(可选但推荐)

在控制台对当前 CentOS 实例创建自定义镜像。这样即使出错,也能回滚到原状态。

步骤 4:停止实例 → 更换操作系统镜像

  1. 在云控制台停止该实例(必须停机才能换镜像)。
  2. 进入“更换操作系统”或“重装系统”选项。
  3. 选择 Ubuntu 版本(如 Ubuntu 22.04 LTS)。
  4. 关键设置:
    • ✅ 勾选“保留数据盘”或类似选项(不同厂商叫法不同,阿里云叫“保留系统盘数据”,但实际是保留未格式化的数据盘;腾讯云叫“保留数据盘”)。
    • ❌ 不要勾选“格式化数据盘”。
  5. 提交请求,等待重启。

📌 注意:部分云厂商允许“仅更换系统盘”,即只替换系统盘,数据盘不动。请仔细阅读厂商文档中的“是否影响数据盘”说明。

步骤 5:新系统启动后恢复数据

Ubuntu 启动后:

  1. 检查数据盘是否自动挂载:
    lsblk
    mount | grep vdb  # 假设数据盘是 vdb

    如果没有自动挂载,需手动挂载:

    mkdir /data
    mount /dev/vdb1 /data  # 根据实际分区调整
  2. 从对象存储下载备份文件:
    ossutil cp oss://your-bucket/backup/site_backup.tar.gz /tmp/
    tar xzf /tmp/site_backup.tar.gz -C /var/www/html
  3. 重新安装必要软件(Nginx, PHP, MySQL 等):
    apt update && apt install nginx php mysql-server
  4. 导入数据库:
    mysql -u root -p < /tmp/db_backup.sql
  5. 修改权限、重启服务、测试访问。

三、常见误区与避坑指南

误区 正确做法
“重装系统能保留所有文件” 只能保留数据盘,系统盘必丢
“直接 dd 克隆系统盘” 跨发行版内核差异大,极易 boot failure,不推荐
“用 rsync 同步整个系统” 无法处理 bootloader、initramfs、内核模块等底层差异
“忽略文件系统类型” CentOS 默认 ext4/xfs,Ubuntu 也支持,但需注意 UUID 和 fstab 配置

四、进阶方案:使用 Packer + Ansible 实现标准化迁移(适合运维团队)

如果你是企业用户,频繁需要切换 OS,建议:

  1. 用 Packer 构建 Ubuntu 基础镜像,预装常用环境。
  2. 用 Ansible Playbook 定义部署流程(安装依赖、复制配置、导入数据)。
  3. 在新 Ubuntu 实例上运行 Ansible 脚本一键恢复。

这种方式比手动操作更可靠、可审计、可重复。


五、总结

  • 没有“一键切换 OS 保留所有文件”的功能,这是技术限制,不是厂商缺陷。
  • 唯一安全路径:备份 → 停机 → 换镜像(保留数据盘)→ 恢复数据。
  • 务必提前验证备份可用性,别等到新系统跑起来才发现备份打不开。
  • 强烈建议使用对象存储做异地备份,避免单点故障。

如果你能提供具体云厂商(阿里云/腾讯云/华为云等)和当前系统盘/数据盘布局,我可以给出更精确的操作命令和注意事项。