Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

rsync

1. 什么是 rsync?

rsync(remote sync)是一款增量同步工具,用于在本地和远程之间高效传输文件,支持:

  • 增量传输(只传变化部分)
  • 断点续传
  • 权限/时间戳/软硬链接同步
  • 校验模式
  • 传输压缩

常用于:服务器备份、日志同步、web 集群部署、镜像同步等。

2. rsync 传输模式

2.1 本地同步(local -> local)

rsync -av /src/ /dst/

2.2 本地 -> 远程

rsync -av /src/ user@remote:/dst/

2.3 远程 -> 本地

rsync -av user@remote:/src/ /dst/

2.4 Daemon 模式(服务端守护进程)

适合大量客户端同步固定目录,速度最快。

3. rsync 最常用参数(核心)

参数 作用
-a 归档模式(递归 + 权限 + 时间 + 链接)最常用
-v 显示详细信息
-z 压缩传输(对大量小文件效果巨大)
-P 显示进度 + 断点续传
-h 数字友好显示
–delete 删除目标中源不存在的文件(慎用)
–exclude 排除文件
–exclude-from 批量排除
–bwlimit=KB 限速

组合常用命令:

rsync -avzP /data/ app@10.0.0.1:/data/

4. rsync 源路径末尾 / 的含义

这点非常重要,很多线上事故由此引发。

4.1 有 /:同步目录内容

rsync -av /src/ /dst/

效果:dst 中获得 src 的内容。

4.2 无 /:同步目录本身

rsync -av /src /dst/

效果:dst 目录中会出现 /dst/src/

5. exclude 排除规则

5.1 单个排除

rsync -av --exclude "node_modules" src/ dest/

5.2 正则批量排除

rsync -av --exclude "*.log" src/ dest/

5.3 从文件排除

node_modules
*.log
tmp/
rsync -av --exclude-from=exclude.txt src/ dest/

6. –delete 的三种删除策略

参数 行为
–delete 删除目标中源不存在文件
–delete-before 传输前删除,提高效率
–delete-after 传输后删除(更安全)
–delete-excluded 把 exclude 过滤掉的文件也删除

☢️ 生产建议:一定测试后再加 –delete,否则会删库跑路级事故。

7. rsync 加速技巧

7.1 使用 -z 压缩

日志类文件非常受益。

7.2 限制 CPU + 带宽

rsync -avz --bwlimit=50000 ...

7.3 使用 –whole-file

本地局域网传输更快,不做差异算法。

7.4 跳过校验(速度更快)

rsync -av --size-only src/ dest/

8. rsync 典型使用场景

8.1 网站代码发布

rsync -avz --delete /var/www/ root@web01:/var/www/

8.2 日志文件增量备份

rsync -avzP /var/log/ backup:/backup/log/

8.3 定时(mysql、pg)备份目录

配合 cron:

0 3 * * * rsync -avz /data/backup/ backup:/data/backup/

8.4 大型文件断点续传

rsync -avP big.iso remote:/root/

8.5 集群内同步配置文件

rsync -av --exclude ".git" /etc/nginx/ web02:/etc/nginx/

9. rsync Daemon 模式(生产级)

9.1 配置 /etc/rsyncd.conf

uid = root
gid = root
max connections = 10
use chroot = no
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
read only = no

[data]
path = /data
auth users = backup
secrets file = /etc/rsyncd.secrets

9.2 设置密码

backup:123456

9.3 启动

rsync --daemon

9.4 客户端使用

rsync -avz backup@server::data /local/data/

10. rsync vs scp(哪个更好?)

场景 选择
大量小文件 rsync
大文件断点续传 rsync
单次简单传文件 scp
保持时间戳/权限/链接 rsync
增量同步、持续同步 rsync

11. rsync 最佳实践

  • 使用 -a 归档模式
  • 使用 -P 方便断点续传
  • 跨机器强制用 -z 压缩
  • .git / .cache / node_modules 一律排除
  • 使用 –delete-after 代替 –delete
  • 用 rsync 代替 scp 部署/同步
  • 重要目录先 dry-run 测试
rsync -avP --dry-run src/ dest/