目录
- rsync 传输备份工作原理详解
- 一、核心算法:差异传输
- 二、传输流程
- 三、关键技术
- 四、与cp/scp复制的本质区别
- rsync的使用
- 基本语法
- 常用选项
- 常用组合案例
- 1. **本地目录同步**
- 2. **远程同步(SSH协议)**
- 3. **删除目标端多余文件**
- 4. **排除特定文件**
- 5. **限速传输(避免占用带宽)**
- 6. **仅同步修改时间不同的文件**
- 关键注意事项
- rsync 同步方式
- 1. 完整备份 (Full Backup)
- 2. 差量备份 (Differential Backup)
- 3. 增量备份 (Incremental Backup)
- 常见问题
- rsync实现远程增量备份的方案
- rsync + inotify 实时同步案例
- 1. 安装 inotify-tools
- 2. 实时同步脚本 (rsync_inotify.sh)
- 3. 启动脚本(后台运行)
- 4. 系统服务配置(可选)
rsync 传输备份工作原理详解
rsync是一个快速和非常方便的文件复制工具。 它能本地复制,远程复制,或者远程守护进程方式复制 ,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。
rsync监听端口:873
。
其核心工作原理可以分为以下几个关键方面:
一、核心算法:差异传输
-
分块校验机制:
- rsync 将文件分割成固定大小的块(默认约700字节)
- 对每个块计算两个校验值:
- 弱校验(rolling checksum):32位的快速校验
- 强校验(MD5):128位的精确校验
-
差异检测过程:
- 发送方计算源文件的校验值
- 接收方计算目标文件的校验值
- 双方比较校验值,仅传输不匹配的块
二、传输流程
扫描:扫描需要传输的文件列表。
检查:对比源和目标文件的时间戳和大小。
分块:将文件分割成固定大小的数据块。
校验:通过滚动校验算法计算数据块的特征值。
传输:仅传输变化的数据块。
重组:在目标端重组完整文件。
三、关键技术
-
双通道设计:
- 控制通道:传输命令和元数据
- 数据通道:实际文件数据传输
-
滚动校验算法:
/* 简化版滚动校验计算 */ uint16_t weak_checksum(char *buf, int len) {uint16_t s1 = 0, s2 = 0;for (int i = 0; i < len; i++) {s1 += buf[i];s2 += s1;}return (s2 << 16) | s1; }
这种算法可以高效计算滑动窗口的校验值
-
三次文件处理:
- 文件列表生成
- 差异比较
- 文件更新
四、与cp/scp复制的本质区别
操作 | cp/scp | rsync |
---|---|---|
文件比较 | 无 | 校验和比较 |
传输单位 | 整个文件 | 文件块 |
网络使用 | 高 | 优化 |
CPU使用 | 低 | 较高 |
适合场景 | 简单复制 | 重复同步 |
rsync的使用
基本语法
rsync [选项] 源文件 目标文件
常用选项
选项 | 作用解释 |
---|---|
-a (–archive) | 归档模式,保留所有文件属性(权限、时间、所有者等),等同于 -rlptgoD |
-v (–verbose) | 显示详细传输过程 |
-z (–compress) | 压缩传输,节省带宽(适合远程同步) |
-h (–human-readable) | 以易读格式(KB/MB/GB)显示文件大小 |
-n (–dry-run) | 模拟运行,只显示会做什么但不实际执行 |
-e | 指定远程 shell 命令 (如 -e "ssh -p 2222",默认为ssh ) |
-P | 组合选项,等同于 --partial --progress (显示进度 + 支持断点续传) |
--exclude | 排除特定文件或目录 |
--include | 包含特定文件或目录 |
--delete | 删除目标目录中存在但源目录中不存在的文件(保持严格同步) |
常用组合案例
1. 本地目录同步
rsync -av /source/ /destination/
- 作用:将
/source/
下的内容同步到/destination/
(保留所有属性) - 注意:源路径末尾的
/
表示同步目录内容(不含目录本身),不加/
会同步目录本身。
2. 远程同步(SSH协议)
rsync -avzP -e "ssh -p 22" /local/path/ user@remote:/remote/path/
-e "ssh -p 22"
:指定 SSH 端口(默认 22 可省略)-z
:压缩传输加速
3. 删除目标端多余文件
rsync -av --delete /source/ /destination/
- 危险操作:确保目标路径正确,否则可能误删数据!
4. 排除特定文件
rsync -av --exclude='*.tmp' --exclude='logs/' /source/ /destination/
--exclude
:排除匹配的文件或目录(支持通配符)*
:匹配零个或多个字符,例如,*.txt
匹配所有以 .txt 结尾的文件。?
:匹配一个字符,例如,file?.txt
匹配file1.txt、file2.txt
等。[abc]
:匹配方括号内的任意字符,例如,file[1-3].txt
匹配file1.txt、file2.txt、file3.txt
。
5. 限速传输(避免占用带宽)
rsync -avz --bwlimit=