努力
加油

更换系统镜像需要备份哪些重要数据?

更换系统镜像(Reimage/Reset OS)本质上是一次破坏性操作。在大多数云平台(如阿里云 ECS、腾讯云 CVM、华为云等)的控制台逻辑里,“更换系统盘”意味着原系统盘会被格式化或覆盖,数据将永久丢失。

因此,备份的核心原则只有一条:除了当前系统盘上的数据,其他所有持久化存储的数据通常不受影响,但必须确认无误。

以下是你需要重点备份和检查的清单,按优先级排序:

1. 核心应用数据与代码(最致命)

这是最容易丢且最难恢复的部分。不要依赖“我本地有一份代码”,因为服务器上的运行态数据和最新提交可能不同步。

  • Web 站点文件:Nginx/Apache 配置的 html 目录、PHP/Java/Python 项目的源代码。
  • 数据库文件:MySQL/MariaDB 的 data 目录(通常是 /var/lib/mysql),MongoDB 的 data/db 目录。
    • 注意:直接拷贝文件可能有锁表风险,建议使用 mysqldump 导出 SQL 文件或启用云厂商提供的“自动备份”功能并下载快照。
  • 配置文件:除了默认配置,你自己修改过的 .conf、.ini、.env 环境变量文件。很多新手重装后忘了备份 .env,导致密钥丢失,服务起不来。

2. 自定义脚本与定时任务

  • Crontab 任务:执行 crontab -l 查看当前用户的定时任务,或者检查 /etc/crontab 以及 /etc/cron.d/ 下的脚本。这些往往包含日志切割、数据同步、监控上报等重要逻辑。
  • 启动脚本:如果你使用了 systemd 管理非标准服务,确保你的 .service 文件有备份。
  • Shell 脚本:放在 /usr/local/bin 或 /home 目录下供手动执行的运维脚本。

3. SSH 密钥与认证信息

  • SSH Key Pair:如果你习惯用私钥登录,确保本地电脑里有备份。如果服务器上存放了用于连接其他服务器的私钥(如 ~/.ssh/id_rsa),务必复制出来。
  • Host Keys:虽然重装后会重新生成,但如果你的客户端(如 Jenkins、CI/CD 工具)绑定了旧服务器的 Host Key,可能需要更新。

4. 软件包列表与环境依赖(可选但推荐)

重装系统后,新系统的内核版本、基础库可能变化,导致你之前编译的二进制程序无法运行。

  • 已安装的软件包:执行 rpm -qa > packages.txt (CentOS/RHEL) 或 dpkg --get-selections > packages.txt (Ubuntu/Debian)。虽然不一定能完全还原,但能帮你快速知道“我之前装了啥”。
  • Python/Node.js 环境依赖:如果是虚拟环境(venv, venv, node_modules),建议直接通过 requirements.txt 或 package.json 重新安装,而不是备份文件夹。

5. 特殊注意事项:关于“数据盘”

这是最大的误区来源。

  • 独立数据盘(Data Disk):在阿里云、腾讯云等平台,系统盘和数据盘是分离的。
    • 结论:更换系统镜像通常不会影响挂载在实例上的独立数据盘(如 /dev/vdb, /mnt/data)。
    • 行动:在点击“更换系统”前,务必去控制台确认哪些盘是“系统盘”,哪些是“数据盘”。只要不勾选“同时删除数据盘”或类似选项,数据盘里的东西是安全的。
    • 但是:为了保险起见,如果数据盘上有重要业务数据,强烈建议先创建数据盘快照。万一操作失误误删,快照是最后的救命稻草。

6. 网络与安全组策略

  • 安全组规则:大部分云平台在更换系统盘时不会重置安全组,但值得检查一下。特别是如果你有特殊的端口开放策略(如仅允许特定 IP 访问 SSH),确认它们还在。
  • 弹性 IP / 公网 IP:更换系统盘不影响 IP 地址绑定,无需担心。

✅ 最佳实践操作流程(SOP)

  1. 创建整机快照(Snapshot):
    • 不管你是否认为需要备份,第一步永远是给当前实例打一个“整机快照”。这是成本最低、速度最快、最可靠的“后悔药”。如果后续操作出错,一键回滚即可。
  2. 导出数据盘内容:
    • 如果有独立数据盘,对其创建快照。
  3. 备份关键配置和代码:
    • 使用 tar 打包网站目录、数据库 dump 文件、crontab 列表,上传到本地或其他对象存储(OSS/COS)。
  4. 记录当前状态:
    • 截图保存当前的安全组规则、监听端口、运行的服务状态。
  5. 执行更换系统镜像:
    • 选择新的镜像(如从 CentOS 7 换到 Ubuntu 22.04,或升级内核版本)。
  6. 重启并验证:
    • 新系统启动后,立即检查磁盘挂载情况、网络连通性、服务是否可启动。
  7. 恢复数据:
    • 将之前备份的代码、配置、数据库导入新系统。

❌ 常见错误提醒

  • 不要相信“云服务商说数据不会丢”:虽然平台架构上数据盘是独立的,但人为操作失误(如选错盘、误点删除)时有发生。快照是你的责任,不是平台的。
  • 不要忽略权限问题:新系统用户 UID/GID 可能与旧系统不同,导致恢复的文件无法被 Web 服务(如 www-data, nginx)读取。恢复后记得 chown。
  • 不要跳过测试:如果是生产环境,先在测试机或同配置机器上演练一遍更换流程。

总结:快照先行,配置归档,代码落盘,数据盘单独保护。