首页/系统/Linux 运维命令速查/rsync 增量同步与备份
文件与目录76 条

rsync 增量同步与备份

增量传输的同步利器:本地/远程、断点续传、排除规则、--delete 保持镜像一致,备份与发布场景标配。

Linux 运维命令速查系统更新于 2026-10-13

rsync 是什么

rsync 的核心是差异传输:它先在两端比较文件,只把变化的部分传过去,源与目标都在远端时也只传输一次数据。默认的判断依据是大小与修改时间(mtime),满足这两项就跳过,所以用 -a 保留时间戳对增量效果至关重要;如果 mtime 因为文件系统精度或复制方式被改掉,rsync 会反复重传同样的文件,这时才需要 -c 用校验和判断。本地同步与远程同步共用一套语法,走 SSH 通道时不需要在服务端额外部署 rsync 守护进程。

基本信息

适用平台Linux、macOS、BSD 通用(rsync 3.x);两端都要安装 rsync,版本差异过大会导致选项不兼容
命令语法rsync [选项] 源 目标;远程写法 用户@主机:路径,或 rsync:// 模块协议
归档选项-a 等于 -rlptgoD:递归、保留链接、权限、时间、属组、属主、设备文件
常用选项-v 详细、-z 传输压缩、-P 等于 --partial --progress、-n 干跑、--delete 镜像删除、--exclude 排除、--bwlimit 限速、-i 显示变更明细
权限要求保留属主与属组需要 root;非 root 执行 -a 会报权限错误,需加 --no-owner --no-group 或改用 --chown

典型使用场景

  • 定时增量备份:配合 cron 每小时把数据目录同步到备份盘,只传变化部分,带宽与时间都可控
  • 目录镜像:用 --delete 让目标端与源端逐字节一致,适合发布机到多台应用机的分发
  • 跨机迁移:先做一次全量,再反复跑增量直到切换窗口内只差最后一点数据
  • 断点续传大文件:--partial 保留未传完的临时文件,网络中断后不必从头再来
  • 受控带宽传输:--bwlimit 限制速率,避免备份任务挤占生产链路
  • 验证与排错:-n 加 -i 打印每个文件将被如何处理,先看清再执行

常用示例

常用示例
rsync -avn --delete /data/site/ /backup/site/        # 干跑:先看会删会传什么
rsync -av --delete /data/site/ /backup/site/         # 确认无误再实跑
rsync -avz -e 'ssh -p 2222' /data/site/ deploy@10.0.0.8:/srv/site/
rsync -av --exclude-from=/etc/rsync-exclude /data/ /backup/data/
rsync -avP --bwlimit=5000 /data/big/ /backup/big/    # 进度 + 断点续传 + 限速
rsync -avi /data/site/ /backup/site/ | head -30      # 看每个文件的变更原因

关键选项对照

选项作用注意
-a归档模式,保留权限、时间、属主、链接非 root 会因属主属组报错
-n干跑,只显示要做什么与 --delete 搭配使用是标准动作
--delete删除目标端多余的文件,保持镜像源填错会清空目标,务必先 -n 核对
--exclude按模式排除文件或目录模式相对传输根目录,用 --exclude-from 管理长列表
--partial中断时保留已传部分,下次续传配合 --progress 或 -P 使用
-c用校验和判断差异,忽略时间戳准确但要把两端文件都读完,大目录明显变慢
重复传输的常见原因不是 rsync 坏了,而是 mtime 精度:FAT、部分网络存储与某些复制方式只保留到秒甚至两秒,导致两端时间戳总差一点,rsync 每次都判定需要传。可用 --modify-window=2 放宽比较精度,或直接信任内容用 -c。
保留硬链接要用 -H,默认会把每个硬链接当成独立文件分别传输,占用额外空间;-H 需要在两端维护链接映射,大目录上内存与时间开销都明显上升,只在确实使用硬链接的场景开启。
源路径结尾的斜杠改变语义:/data/site/ 表示同步目录内容,/data/site 表示在目标下再建一层 site 目录。--delete 会把这条语义差异放大成「删多一层」或「多建一层」,执行前用 -n 看清清单是最低成本的自保。

易错点

  • 源目录结尾有无斜杠语义不同(内容 vs 目录本身),脚本里只差一个字符,结果可能是在目标多建一层目录或误删
  • --delete 会删除目标端多余文件,源路径写错就是数据丢失;必须先用 -n 干跑核对,或加 --backup 保留被删文件的副本
  • 两端 rsync 版本差异大时选项不兼容,老版本没有 --info=progress2 等新选项,跨版本脚本要按低版本能力写
  • mtime 精度问题导致每次都重传同一批文件,应先确认时间戳是否被复制过程改掉,再用 --modify-window 或 -c 处理,不要盲目加带宽
  • 非 root 执行 -a 时属主属组无法保留并会刷出错误输出,用 --no-owner --no-group 或目标端加 --chown 指定归属

数据来源与参考

  • man 1 rsync(rsync 官方手册)
  • rsync 官方文档(samba.org)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌