首页/网络/协议速查/rsync over SSH 增量同步

rsync over SSH 增量同步

备份与发布的默认选择:先对比差异再传差异块,支持断点续传;--delete 方向搞反会删数据,正式跑前先 --dry-run。

协议速查网络更新于 2026-10-13

rsync over SSH 是干什么的

rsync over SSH 是备份与发布的常规方案:rsync 先用滚动校验和比对两端差异,只传变化的数据块,支持压缩与断点续传;传输通道走 SSH,认证与加密由 SSH 承担,因此只需要一个端口。它还能保留权限、属主、时间戳与符号链接。--delete 可让目标与源完全一致,但方向或路径写错会直接删数据。

基本信息

适用平台Linux/Unix 通用,Windows 可用 cwRsync 等移植版
默认通道远程 shell,通常是 ssh,可用 -e 指定端口与参数
核心选项-a 归档、-v 详情、-z 压缩、-P 进度与续传、-n 预演
路径语义源结尾带斜杠复制目录内容;不带则复制目录本身
高危选项--delete 删除目标端多余文件
断点续传--partial 与 -P 保留未传完的临时文件

典型使用场景

  • 增量备份:只传变化的块,大目录也能在维护窗口内跑完
  • 代码发布:把构建产物同步到多台应用服务器
  • 跨机房搬迁:先全量再反复追平差异,最后一次性切换
  • 目录镜像:配合 --delete 让两端完全一致
  • 受限网络传输:SSH 只开一个端口,天然穿过多数防火墙
  • 日志归档:把分散在各节点的日志汇总到中心存储

常用命令

常用命令
# 增量同步,保留权限与时间戳,显示进度
rsync -avz --progress /data/ user@host:/backup/data/
# 指定非默认 SSH 端口
rsync -avz -e 'ssh -p 2222' /data/ user@host:/backup/
# 让目标与源完全一致,方向写反会删数据
rsync -avz --delete /data/ user@host:/backup/data/
# 正式执行前必须预演,-n 只列出将要执行的动作
rsync -avzn --delete /data/ user@host:/backup/data/
# 大文件断点续传
rsync -avzP big.iso user@host:/backup/

核心选项

选项作用注意
-a归档模式:递归、权限、时间戳、符号链接最常用的基础选项
-z传输时压缩同机房内网可去掉以省 CPU
-P显示进度并允许断点续传等同 --partial 加 --progress
-n预演,不做实际改动配 --delete 使用是必备习惯
--delete删除目标端多余文件只在以源为准的方向使用
rsync 判断增量的依据是文件大小与修改时间。加 -a 才能保留 mtime,否则每次都会把文件当成新文件全量重传。
--delete 只作用于目标端。若源与目标位置写反,或用了一个空目录当源,执行结果就是清空线上数据,因此正式执行前先跑 -n 预演并确认路径。

易错点

  • 源路径结尾少一个斜杠:本想同步 /data 的内容,结果在目标下多出一层嵌套目录
  • --delete 与源目标顺序搞反:会清空备份甚至线上目录,执行前必须用 -n 预演
  • 大量小文件不加过滤直接同步:扫描与建连开销远超传输本身,应先用 --exclude 排除缓存与临时目录
  • 忽略时间戳导致增量失效:没加 -a 或目标文件系统不保留 mtime 时,每次都退化为全量传输

数据来源与参考

  • rsync 手册
  • RFC 4253(SSH 传输层)

相关工具

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