rsync用法详细说明
一、rsync 是什么(执行模型)
rsync = 文件同步工具(不是单纯拷贝)
核心特点:
- 增量同步:只传输变化的数据块
- 可断点续传
- 支持本地 / 远程
- 支持权限、时间戳、ACL、xattr
- 可 over SSH(默认)
执行流程(简化):
- 建立连接(本地 / SSH / daemon)
- 扫描源与目标文件列表
- 比较元数据 / 校验
- 传输差异数据
- 校验完成
- 正常退出
二、基本语法结构
rsync [OPTION...] SRC [SRC...] DEST
最常见的三种形式
1️⃣ 本地 → 本地
rsync -av /src/ /dst/
2️⃣ 本地 → 远程(SSH)
rsync -av /src/ user@host:/dst/
3️⃣ 远程 → 本地
rsync -av user@host:/src/ /dst/
三、最核心的一组参数(必须掌握)
1️⃣ -a(archive,生产必用)
-a 等价于:-rlptgoD
包含:
| 参数 | 含义 |
|---|---|
-r |
递归目录 |
-l |
保留软链接 |
-p |
保留权限 |
-t |
保留时间戳 |
-g |
保留属组 |
-o |
保留属主 |
-D |
设备文件 |
👉 生产同步几乎必带 -a
2️⃣ -v(verbose)
-v
- 显示执行过程
- 调试时非常重要
3️⃣ --progress / --info=progress2
--progress # 单文件进度
--info=progress2 # 全局进度(推荐)
👉 大文件 / 镜像同步强烈推荐
四、文件传输控制参数(重点)
1️⃣ --partial(断点续传)
--partial
- 网络中断保留未完成文件
- 下次可继续
2️⃣ --append / --append-verify
--append
--append-verify # 推荐
- 适合大文件(qcow2 / raw)
- 从已写入部分继续
--append-verify会校验安全性
3️⃣ --inplace(谨慎)
--inplace
- 直接写目标文件
- 不生成临时文件
- 文件损坏风险高
👉 仅在明确知道后果时使用
五、删除与镜像同步(非常危险的一类)
1️⃣ --delete
--delete
- 删除目标端多余文件
- 用于“镜像同步”
⚠️ 误用可能导致严重数据丢失
2️⃣ --delete-delay(更安全)
--delete-delay
- 同步完成后再删除
六、过滤与排除规则
1️⃣ 排除文件
--exclude="*.log"
--exclude="/tmp/"
2️⃣ 使用规则文件(推荐)
--exclude-from=exclude.txt
exclude.txt 示例:
*.log
tmp/
.cache/
3️⃣ 包含规则
--include="*.conf"
--exclude="*"
七、性能与网络控制
1️⃣ 限速
--bwlimit=10240 # KB/s
2️⃣ 压缩
-z
- 低带宽适合
- 内网高速一般不需要
3️⃣ 并发(rsync 本身不支持)
- rsync 是单进程
- 目录拆分 / GNU parallel 实现并发
八、校验与一致性
1️⃣ 默认比较规则
- size + mtime
2️⃣ 强制校验(慢)
-c
- 对文件做 checksum
- 非常耗 IO
九、权限 / ACL / 扩展属性
| 参数 | 说明 |
|---|---|
-A |
保留 ACL |
-X |
保留 xattr |
--numeric-ids |
不映射 uid/gid |
十、SSH 相关参数
指定 SSH 方式
-e "ssh -p 2222"
常见组合
rsync -av -e "ssh -o StrictHostKeyChecking=no"
十一、常见“生产级参数组合”
1️⃣ 普通目录同步(推荐模板)
rsync -av --info=progress2 /src/ /dst/
2️⃣ 大文件 / 虚拟机镜像
rsync -av \
--partial \
--append-verify \
--info=progress2 \
/vm-images/ backup:/vm-images/
3️⃣ 镜像备份(慎用)
rsync -av --delete /data/ /backup/data/
十二、最容易踩的坑(非常重要)
1️⃣ 目录结尾 / 的区别
rsync src/ dst/ # 同步内容
rsync src dst/ # 同步目录本身
2️⃣ rsync 没有“全局超时”
- 网络卡死可能一直跑
- 外部用
timeout或 Go context 控制
3️⃣ 不要随便用 --delete
- 先 dry-run
--dry-run
十三、exit code(用于自动化判断)
| code | 含义 |
|---|---|
| 0 | 成功 |
| 10 | socket I/O error |
| 12 | 协议错误(常见网络问题) |
| 23 | 部分文件失败 |
| 24 | 文件消失 |
十四、一句话总结
rsync 是“长期可重复同步工具”,而不是 cp/scp 的简单替代;
掌握-a、--partial、--append-verify、--delete的边界,是生产使用的关键。
如果你需要,我可以:
- 给你 rsync 参数速查表(按场景)
- 或直接结合 Go exec / 自动化 / 虚拟化镜像同步 给你一套标准规范