首页/数据/备份与容灾速查/rsync 文件同步与备份

rsync 文件同步与备份

左右对比、只传差异的同步工具:支持本地与远程复制、增量传输、保留权限与时间戳,是文件级备份脚本的常用核心。

备份与容灾速查数据更新于 2026-10-13

rsync 是什么

rsync 是文件级同步与备份工具,核心是『左右对比、只传差异』的增量算法:先比较两侧文件的大小与修改时间,再只传输发生变化的部分,因此重复执行的开销远低于整目录拷贝。它既支持本地目录之间同步,也能通过 SSH 通道与远程主机互传,是文件级备份脚本最常用的组件。

基本信息

定位文件级同步与备份工具
核心优势增量算法只比较并传输变化部分
常用组合-a 归档模式加 -v 详细输出,按需叠加其他选项
传输通道本地、SSH 远程 shell、rsync 守护进程
适用范围Linux 与 macOS 自带;Windows 可用 cwRsync 或 WSL

本地与远程同步

本地与远程同步
rsync -av /data/ /backup/data/                 # 本地同步
rsync -av /data/ user@10.0.0.5:/backup/data/    # 推送到远程
rsync -av user@10.0.0.5:/data/ /backup/data/    # 从远程拉取
rsync -avz -e ssh /data/ backup@10.0.0.5:/backup/data/   # 走 SSH 通道并压缩

核心选项对照

选项作用注意
-a归档模式,等于 -rlptgoD默认不保留 ACL 与扩展属性
-n预演,只显示将要执行的动作危险同步前的例行步骤
--delete删除目标端多余文件镜像同步不等于备份
--link-dest未变化文件硬链接到基准目录生成空间友好的多份快照
--bwlimit限制传输带宽,单位为 KB/s避免挤占业务链路

典型使用场景

  • 日常目录同步:把站点目录或共享目录定期复制到备份服务器
  • 远程异地传输:通过 SSH 通道把增量推到异地存储,不额外开放服务端口
  • 硬链接快照:配合 --link-dest 生成每天一份完整视图,只占新增数据的空间
  • 限速迁移:用 --bwlimit 在业务高峰约束带宽,把大批量传输摊平到全天
  • 变更前留底:改动配置或升级前先同步一份到临时目录,便于快速回退

rsync 不是备份

容易忽略的一点:rsync 维护的是镜像关系,源端删除会同步到目标端,它本身不产生历史版本,也无法抵御勒索软件对两侧的同时加密。因此 rsync 更适合作为副本传输手段,真正的备份还需要硬链接快照目录或独立归档来保留历史版本。

常见误解

  • 把 rsync 当备份:镜像副本只有当前状态,误删后没有可回退的历史点
  • 以为 -a 会保留一切:ACL、扩展属性与硬链接需要额外的 -A、-X、-H
  • 以为同步一定能传完:中断后未加 -P 会从头再来,大文件尤其明显
  • 以为结果可信:默认按大小与修改时间判断差异,时钟漂移时会漏同步或反复全量
  • 以为退出码 0 就万事大吉:部分源文件在传输中消失会返回 24,需要按语义单独处理

常用组合示例

常用组合示例
rsync -av --delete --exclude-from=/etc/backup-exclude.txt /data/ /backup/data/
rsync -avP --bwlimit=30000 /data/ /backup/data/   # 显示进度并可续传,限速 30MB/s
rsync -avni --delete /data/ /backup/data/         # 执行前预演,核对删除清单
rsync -av -e "ssh -i /root/.ssh/backup_key -o BatchMode=yes" /data/ backup@10.0.0.5:/backup/data/
--delete 会让目标端在源端删除的文件一并消失,且源与目标路径写反时会把备份数据抹掉;执行前先跑 -n 预演并逐行确认删除清单。
源路径结尾的斜杠语义不同:/data/ 表示复制目录内容,/data 表示连同目录本身一起复制,脚本中要固定写法避免层级偏移。

退出码与失败处理

  • 退出码 0 表示传输成功,是脚本里唯一可以按成功处理的情况
  • 退出码 24 表示有源文件在传输期间消失,通常按成功处理但要在日志中留痕
  • 其余非零值都应触发告警,常见原因是权限不足、磁盘写满与网络中断
  • 限速任务在窗口内没跑完时退出码仍可能是 0,需要额外比对耗时趋势发现异常
  • 多数发行版的 cron 不会重复发送相同输出,脚本应主动写日志并接入告警通道

易错点

  • 目标路径写错(少一层目录或多了目录名)会导致数据嵌套或覆盖,执行前先用 -n 预演确认
  • 默认按大小与 mtime 判断差异:时钟漂移的源会漏同步或反复全量,必要时用 -c 校验
  • 源与目标写反时配合 --delete 会删除备份端数据,大目录补传可能因此重跑整夜
  • 同一目标目录被多个源任务同时写入且都带 --delete,互相删对方的文件
  • 无人值守脚本未设置 BatchMode,首次主机指纹确认会让任务挂起而不报错

数据来源与参考

  • rsync 手册(Samba rsync 官方文档)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌