Linux 服务器怎么用 rsync 迁移文件?权限、增量与校验

在停机窗口内安全同步网站数据并验证源端与目标端一致性

讲解 rsync 服务器迁移的预同步、dry-run、权限与 ACL 保留、最终增量、删除风险、校验、切流和回退。

使用 rsync 迁移 Linux 服务器时,可靠做法不是一次复制后立即切流,而是先预同步大部分数据,再暂停写入执行最终增量同步,随后验证权限、链接、文件数量和业务读写。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

最终同步与切流窗口

  1. 把入口切到维护状态或让源站停止写入;
  2. 停止会修改迁移目录的应用和后台任务;
  3. 完成数据库的一致性迁移;
  4. 再次 dry-run,确认差异范围;
  5. 执行最终增量同步;
  6. 启动目标服务并完成健康检查;
  7. 再修改 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 身份,并限制迁移账号权限。

官方资料

AWS 教程AWS CloudShell 显示账户验证中怎么办?已验证仍无法创建环境的排查2026-09-15云服务器教程Vue、React 单页应用刷新后 404 怎么办?Nginx History 路由与 API 分流2026-09-13云服务器教程Docker 提示 pull access denied 怎么办?镜像名、仓库权限与登录排查2026-09-13

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区