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 预演并确认路径。