rsync
rsync(remote sync)是一款增量同步工具,用于在本地和远程之间高效传输文件,支持:
- 增量传输(只传变化部分)
- 断点续传
- 权限/时间戳/软硬链接同步
- 校验模式
- 传输压缩
常用于:服务器备份、日志同步、web 集群部署、镜像同步等。
rsync -av /src/ /dst/
rsync -av /src/ user@remote:/dst/
rsync -av user@remote:/src/ /dst/
适合大量客户端同步固定目录,速度最快。
| 参数 | 作用 |
|---|---|
| -a | 归档模式(递归 + 权限 + 时间 + 链接)最常用 |
| -v | 显示详细信息 |
| -z | 压缩传输(对大量小文件效果巨大) |
| -P | 显示进度 + 断点续传 |
| -h | 数字友好显示 |
| –delete | 删除目标中源不存在的文件(慎用) |
| –exclude | 排除文件 |
| –exclude-from | 批量排除 |
| –bwlimit=KB | 限速 |
组合常用命令:
rsync -avzP /data/ app@10.0.0.1:/data/
这点非常重要,很多线上事故由此引发。
rsync -av /src/ /dst/
效果:dst 中获得 src 的内容。
rsync -av /src /dst/
效果:dst 目录中会出现 /dst/src/
rsync -av --exclude "node_modules" src/ dest/
rsync -av --exclude "*.log" src/ dest/
node_modules
*.log
tmp/
rsync -av --exclude-from=exclude.txt src/ dest/
| 参数 | 行为 |
|---|---|
| –delete | 删除目标中源不存在文件 |
| –delete-before | 传输前删除,提高效率 |
| –delete-after | 传输后删除(更安全) |
| –delete-excluded | 把 exclude 过滤掉的文件也删除 |
☢️ 生产建议:一定测试后再加 –delete,否则会删库跑路级事故。
日志类文件非常受益。
rsync -avz --bwlimit=50000 ...
本地局域网传输更快,不做差异算法。
rsync -av --size-only src/ dest/
rsync -avz --delete /var/www/ root@web01:/var/www/
rsync -avzP /var/log/ backup:/backup/log/
配合 cron:
0 3 * * * rsync -avz /data/backup/ backup:/data/backup/
rsync -avP big.iso remote:/root/
rsync -av --exclude ".git" /etc/nginx/ web02:/etc/nginx/
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
backup:123456
rsync --daemon
rsync -avz backup@server::data /local/data/
| 场景 | 选择 |
|---|---|
| 大量小文件 | rsync |
| 大文件断点续传 | rsync |
| 单次简单传文件 | scp |
| 保持时间戳/权限/链接 | rsync |
| 增量同步、持续同步 | rsync |
- 使用 -a 归档模式
- 使用 -P 方便断点续传
- 跨机器强制用 -z 压缩
- .git / .cache / node_modules 一律排除
- 使用 –delete-after 代替 –delete
- 用 rsync 代替 scp 部署/同步
- 重要目录先 dry-run 测试
rsync -avP --dry-run src/ dest/