1. 什么是 rsync ?

rsync (Remote Sync) 是 Linux 系统中一个功能强大的文件同步工具,它能够高效地在本地或远程系统之间同步文件和目录。rsync 以其"增量传输"算法著称,只传输源文件和目标文件之间的差异部分,大大提高了文件传输效率。


1.1 rsync 的核心特点

  1. 增量同步:仅传输变化的文件部分,节省带宽和时间

  2. 保留属性:可以保持文件权限、时间戳等元数据

  3. 压缩传输:支持数据传输时压缩,减少网络负载

  4. 灵活排除:可以排除特定文件或目录

  5. 远程支持:通过 SSH 安全地同步远程服务器文件

1.2 rsync 的基本语法

rsync [选项] 源文件 目标文件

1.3 rsync 常用选项

选项

全称

说明

-a

--archive

归档模式,保留所有文件属性(相当于 -rlptgoD)

-v

--verbose

显示详细传输信息

-z

--compress

传输时压缩数据

-r

--recursive

递归复制目录

-l

--links

保留符号链接

-p

--perms

保留文件权限

-t

--times

保留文件修改时间

-g

--group

保留文件所属组

-o

--owner

保留文件所有者

-D

--devices

保留设备文件(仅限超级用户)

-h

--human-readable

以人类可读格式输出数字

--progress

显示传输进度

--delete

删除目标中源没有的文件

--exclude=PATTERN

排除匹配 PATTERN 的文件

--include=PATTERN

包含匹配 PATTERN 的文件

2. rsync 应用实例

2.1 本地目录同步

# 将 /home/user/docs 同步到 /backup/docs,保留所有属性
rsync -av /home/user/docs/ /backup/docs/

注意:源目录后的斜杠 / 很重要:

  • 有斜杠:同步目录内容

  • 无斜杠:同步目录本身

2.2 远程服务器同步

# 将本地目录同步到远程服务器,使用压缩
rsync -avz /data/backups/ user@example.com:/remote/backups/

2.3 使用排除选项同步

# 同步但排除 .tmp 文件和 log 目录
rsync -av --exclude='*.tmp' --exclude='log/' /source/ /destination/

24 保持双端一致(会删除目标端多余文件)

rsync -av --delete /source/ /destination/

3. rsync 高级用法

3.1 指定 ssh 端口

rsync -avz -e 'ssh -p 2222' /local/path/ user@host:/remote/path/

3.2 带宽限制(小于500k/s)

rsync -avz --bwlimit=500 /source/ /destination/

3.3 文件大小限制(只传输100k以上文件)

rsync -av --min-size=100K /source/ /destination/

3.4 定时备份

#!/bin/bash
rsync -avz --delete /important/data/ backup@server:/backups/data/
echo "Backup completed at $(date)" >> /var/log/backup.log

3.5 恢复中断的 rsync 传输

# 使用 --partial 选项保留部分传输的文件
rsync -av --partial /source/ /destination/

3.6 实际执行前预演

# 使用 -n (dry-run) 选项
rsync -avn /source/ /destination/

3.7 提升 rsync 传输速度

  • 使用 -z 选项启用压缩

  • 使用 --compress-level=N 调整压缩级别(1-9)

  • 禁用校验和计算(仅限可信网络):--no-checksum

4. 最佳建议

  1. 测试先行:使用 -n 选项先进行模拟运行

  2. 日志记录:添加 --log-file=rsync.log 记录操作

  3. 权限管理:考虑使用 --chmod 统一文件权限

  4. 定时任务:结合 crontab 实现自动备份

  5. 安全传输:始终通过 SSH 进行远程传输