迁移指南

使用 rsync 安全迁移 VPS 数据

使用 rsync 经 SSH 将普通文件系统数据从源 VPS 分阶段复制到目标;随后短暂停止写入,执行最后同步,验证应用,再以可回退的方式切换流量。Rsync 不是通用在线迁移工具;数据库、容器、启动文件、设备、秘密与活动队列需要按应用处理。

关键信息

传输方式
通过已认证 SSH 使用 Rsync
第一步
清点数据并试运行
一致性
最终同步时停止或静默写入方
安全默认值
第一次迁移不要使用 `--delete`

复制前先清点

列出应用文件、所有权、ACL、扩展属性、数据库、秘密、计划任务、服务、防火墙规则、DNS、证书和外部存储。确认目标有足够容量,并且用户、文件系统、操作系统软件包与应用版本兼容。只有符合 DNS 方案时才在切换前降低 TTL;缓存记录仍可能比预期存活更久。

为源系统创建并验证独立备份。首次传输期间保持源系统不变且可用。宣布维护窗口前先定义成功检查与回退决策。

  • 不要把 /proc/sys/dev/run 等虚拟文件系统当作普通数据复制。
  • 适当时使用数据库原生备份、复制或导出工具。
  • 绝不要把私钥留在命令历史或共享笔记中。

先试运行,再分阶段复制应用数据

对于 /srv/app/ 这类目录,可在源端试运行:sudo rsync -aHAX --numeric-ids --info=progress2 --dry-run -e "ssh -i /root/.ssh/migration_key" /srv/app/ admin@DESTINATION:/srv/app/。替换用户、密钥路径、目标与数据路径。末尾斜杠表示复制源目录内容,而不是再创建一层目录。

逐一检查路径与错误。确保远程账户可安全写入目标;root 登录并非必需,而且经常被关闭。试运行结果正确后,去掉 --dry-run 重复命令。不要只为目录完全相同便加入 --delete;错误的源或目标可能删除重要数据。

  • 大型传输应在持久终端会话内运行。
  • 如果复制可能影响生产流量,请限制带宽。
  • 在迁移记录中保存命令选项与工具版本。

静默写入并执行最终同步

将应用切换到有记录的维护或只读状态。按受支持流程停止准确的写入服务,再完成最终数据库备份或复制。重新运行同一 rsync 命令,只传输变化的文件数据。验证完成前保持维护状态。

按预定配置在目标启动服务,可能时先限制公开访问,并测试健康、登录、写入、队列、证书、日志与依赖。只有测试通过后才更新 DNS 或路由。除非明确接受组合风险,不要在同一窗口同时更换应用版本与托管位置。

  • 记录最终停止写入时间与同步结果。
  • 验证文件所有权与强制访问控制。
  • DNS 过渡期间同时监控新旧端点。

验证、观察并保留回退

若需更深入比较文件,可在合适窗口对原 rsync 命令加入 --checksum --dry-run;校验会读取两组数据,开销可能很大。数据库和对象存储应优先使用应用级完整性检查。切换后监控错误、延迟、资源、后台任务与外部回调。

回退窗口结束前保持源系统完整,同时避免新旧两端分别写入。随后按保留与安全删除方案处理。只有备份、监控、文档与恢复流程都指向目标时,迁移才算完成。

来源

  1. rsync 官方手册页
常见问题

常见问题

rsync 能安全复制正在运行的数据库吗?

活动数据库的文件副本可能不一致。请使用数据库支持的导出、备份、快照协调或复制流程。

是否应该使用 `--delete`?

首次迁移不要使用。以后确有需要时,先运行 --delete --dry-run,核实两端路径并保留可恢复备份。

权限为何改变?

目标用户可能权限不足、数字 ID 不同,或目标文件系统不支持相同 ACL 或属性。切换前请检查兼容性。