首页 系统相关 正文
  • 本文约1869字,阅读需9分钟
  • 56
  • 0

rsync用法详细说明

摘要

一、rsync 是什么(执行模型) rsync = 文件同步工具(不是单纯拷贝) 核心特点: 增量同步:只传输变化的数据块 可断点续传 支持本地 / 远程 支持权限、时间戳、ACL、xattr 可 over SSH(默认) 执行流程(简化): 建立连接(本地 / SSH / daemon) 扫描源与目标文件列表 比较元数据 / 校验 传输差异数据 校验完成 ...

一、rsync 是什么(执行模型)

rsync = 文件同步工具(不是单纯拷贝)

核心特点:

  • 增量同步:只传输变化的数据块
  • 可断点续传
  • 支持本地 / 远程
  • 支持权限、时间戳、ACL、xattr
  • 可 over SSH(默认)

执行流程(简化):

  1. 建立连接(本地 / SSH / daemon)
  2. 扫描源与目标文件列表
  3. 比较元数据 / 校验
  4. 传输差异数据
  5. 校验完成
  6. 正常退出

二、基本语法结构

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 / 自动化 / 虚拟化镜像同步 给你一套标准规范
标签:linux
    评论
    友情链接