讲解 rsync 服务器迁移的预同步、dry-run、权限与 ACL 保留、最终增量、删除风险、校验、切流和回退。
使用 rsync 迁移 Linux 服务器时,可靠做法不是一次复制后立即切流,而是先预同步大部分数据,再暂停写入执行最终增量同步,随后验证权限、链接、文件数量和业务读写。rsync 能减少重复传输,但不会自动迁移数据库内存状态、系统服务、密钥和外部依赖。

先划定迁移对象和一致性要求
静态文件、上传目录和构建产物适合直接 rsync。正在写入的数据库目录、消息队列数据和运行时 socket 不应在服务运行时当作普通文件复制。数据库优先使用官方备份、复制或导出工具,再把备份文件通过 rsync 传输。
| 数据类型 | 迁移方式 | 关键检查 |
|---|---|---|
| 网站代码 | rsync 或重新部署 | 版本、环境文件、权限 |
| 用户上传 | 预同步 + 最终增量 | 停写窗口、数量、抽样校验 |
| 数据库 | 数据库原生工具 | 事务一致性、版本兼容 |
| 日志与缓存 | 按保留需求决定 | 通常不作为切流必要数据 |
迁移前检查两端环境
rsync --version
ssh target.example.com 'rsync --version; df -hT /srv; id'
du -sh /srv/www
findmnt /srv/www
rsync 需要在两端可用。确认目标磁盘空间、文件系统特性、用户和组 ID、符号链接、ACL、扩展属性以及大小写规则。只比较用户名不够,跨主机保留所有者时数字 UID/GID 必须有清晰映射。
先用 dry-run 检查命令含义
rsync -aHAXn --numeric-ids --itemize-changes \
--exclude='.cache/' \
/srv/www/ target.example.com:/srv/www/
源路径末尾的斜杠很重要:/srv/www/ 表示同步目录内容,而 /srv/www 可能在目标端再创建一层 www。-a 不包含 ACL、扩展属性和硬链接,所以需要时显式加入 -A、-X、-H。目标不支持对应特性时不要机械添加。
执行第一次预同步
rsync -aHAX --numeric-ids --info=progress2,stats2 \
--partial \
--exclude='.cache/' \
/srv/www/ target.example.com:/srv/www/
网络已加密压缩时,-z 不一定更快,尤其是图片、视频和压缩包。迁移期间保留日志,并观察磁盘 I/O、带宽和业务延迟。不要在第一次命令中直接加入 --delete。
最终同步与切流窗口
- 把入口切到维护状态或让源站停止写入;
- 停止会修改迁移目录的应用和后台任务;
- 完成数据库的一致性迁移;
- 再次 dry-run,确认差异范围;
- 执行最终增量同步;
- 启动目标服务并完成健康检查;
- 再修改 DNS、负载均衡或上游路由。
sudo systemctl stop APP.service
rsync -aHAXn --numeric-ids --delete-delay /srv/www/ target.example.com:/srv/www/
rsync -aHAX --numeric-ids --delete-delay /srv/www/ target.example.com:/srv/www/
--delete-delay 会删除目标端源目录已经不存在的文件,只能在确认目标目录是受控副本后使用。目标端有独立生成或人工上传的文件时,不应启用删除。
怎样验证迁移结果
rsync -aHAXnc --numeric-ids --delete-delay /srv/www/ target.example.com:/srv/www/
find /srv/www -xdev -type f | wc -l
ssh target.example.com 'find /srv/www -xdev -type f | wc -l'
ssh target.example.com 'systemctl --failed; curl -fsS http://127.0.0.1/health'
-c 会读取两端文件计算校验和,适合最终核验,但会增加磁盘 I/O,不应默认用于每次大规模预同步。rsync 自身会校验传输文件是否正确重建,这与 --checksum 用于判断“是否需要传输”是两件事。
回退方案
切流后暂时保留源服务器和原始数据,不立即删除。若目标环境出现权限、依赖或数据一致性问题,把入口切回源端,并避免两端同时接受写入。回退窗口结束前,持续记录新增数据的去向。
操作边界
rsync 不是应用一致性协议。对数据库目录、活跃邮件队列、虚拟机磁盘镜像和持续写入的大文件,必须结合应用原生快照或停写机制。包含密钥和环境变量的数据应使用受控 SSH 身份,并限制迁移账号权限。

