rsync迁移大量文件需用-a保属性、--checksum做内容校验、--dry-run与-v预演验证;-a等价-rlptgoD,确保权限、属主、时间戳等全保留;--checksum强制MD5校验防误判;路径末尾/影响同步逻辑。

用 rsync 迁移大量文件时,校验+权限一致不是附加步骤,而是靠几个关键参数一次到位。核心就三点:用 -a 保全部属性、加 --checksum 做内容级校验、配合 --dry-run 和 -v 预演验证。
用 -a 参数确保权限、属主、时间戳等全部保留
归档模式(-a)是基础,它等价于 -rlptgoD,自动包含:
- -r:递归处理子目录
- -l:保留软链接(不展开)
- -p:保持原始权限(如 755、644)
- -t:保留修改时间(mtime),避免备份后时间全变成当前时间
- -g 和 -o:分别保留属组和属主(需执行用户有相应权限)
- -D:支持设备文件和特殊文件(如 /dev 下的节点)
只要目标端有足够权限(比如你是 root,或目标目录属主是你自己),rsync -a 就能原样还原源端的权限结构,无需额外 chown/chmod。
用 --checksum 强制按内容比对,避免仅靠时间/大小误判
默认 rsync 只比较文件大小和修改时间来判断是否需要同步——如果目标文件被手动 touch 过,或大小巧合相同但内容已变,就会跳过,导致静默不一致。
加上 --checksum 后,rsync 会对每个文件计算校验和(默认 MD5,部分新版支持 xxh128),只传输真正变化的部分,同时保证最终内容 100% 一致:
- 适合迁移数据库导出文件、镜像包、配置快照等对一致性要求高的场景
- 会略微增加 CPU 开销,但对现代服务器影响很小;网络带宽节省更明显(尤其重复迁移时)
- 建议首次全量迁移 + 后续增量都带上,不区分“校验阶段”和“同步阶段”
先用 --dry-run + -v 模拟运行,确认无误再执行
对大量数据直接跑 rsync 风险高,务必先预演:
- rsync -av --checksum --dry-run /src/ user@host:/dst/
- -v 显示每个将被传输/跳过/删除的文件
- --dry-run 不写入任何目标,只输出“如果执行会做什么”
- 重点关注输出里有没有意外的 deleting 行(说明可能误配了 --delete)或大量 skipping(可能是路径末尾 / 缺失导致同步逻辑错位)
路径末尾的 / 很关键:/src/ 同步内容到目标目录,/src 则把 src 整个目录复制进去——差一个斜杠,结果完全不同。
补充建议:断点续传与限速保障稳定性
迁移动辄几十 GB 或上 TB 文件时,网络波动或中断很常见:
- rsync 天然支持断点续传,只要没加 --partial(默认已启用),中断后重跑同一命令即可从断点继续
- 用 --bwlimit=5000 限制带宽(单位 KB/s),避免吃满网卡影响其他服务;本地磁盘 IO 高时可加 --ionice 或 nice 降低优先级
- 若需后台长期运行,建议结合 nohup 或 screen,并重定向日志便于事后核查:
nohup rsync -av --checksum /src/ /dst/ > sync.log 2>&1 &











