支持 增量同步
支持 远程同步
支持 断点续传
支持 权限 / 时间 / 符号链接
几乎 所有 Linux 服务器都内置
但现实是:
90% 工程师只会用
rsync -av src dst
今天这篇文章,我把 rsync 的核心原理 + 实战命令全部讲清楚。
看完你基本可以 把 rsync 用到极致。
传统复制工具:
而 rsync 使用的是著名的:
Delta Encoding
核心思想:
只传输 变化的数据块
流程如下:
源文件││ 计算 checksum▼目标端比较││ 找到不同 block▼只传输差异
例如:
1GB 日志文件只改了 10KBscp 传输:1GBrsync 传输:10KB
这也是为什么:
rsync 可以快 100 倍。
Linux 基本都自带。
如果没有:
Ubuntu / Debian
sudo apt install rsyncCentOS
sudo yum install rsyncMac
brew install rsyncrsync -av src/ dst/参数解释:
示例:
rsync -av ./data ./backup输出:
sending incremental file listfile1.txtfile2.log
rsync -av ./data user@server:/backuprsync 默认使用 SSH 传输。
rsync -av user@server:/data ./backuprsync -av src dst和
rsync -av src/ dst完全不同。
示例:
目录结构:
src/├ file1└ file2
rsync -av src dst结果:
dst/└ src/├ file1└ file2
rsync -av src/ dst结果:
dst/├ file1└ file2
总结:
这是 rsync 最经典的坑。
rsync -av --progress src/ dst/输出:file1.log20% 200MB 10MB/s
rsync -avz src/ server:/backup-z:传输压缩
适合:
跨公网
带宽有限
rsync -av --delete src/ dst/保证:
dst == src用于:
镜像同步
网站部署
rsync -avP bigfile.iso server:/backup-P 等于:
--progress--partial
rsync -av --exclude="*.log" src/ dst/排除日志。rsync -av \--exclude=node_modules \--exclude=.git \src/ dst/
rsync -av -e "ssh -p 2222" src server:/backuprsync -av --bwlimit=1000 src server:/backup单位:KB/s避免占满网络。
rsync -avu src/ dst/-u
skip newer files
rsync -av --dry-run src/ dst/只模拟。生产环境必用。
rsync -av --delete ./dist/ server:/var/www/html常见于:
前端发布
静态站点
rsync -av /data /backup配合 crontab
0 3 * * * rsync -a /data /backup每天凌晨备份。rsync -av server:/var/log ./logsrsync -avP big.tar server:/backup断点续传。rsync -av /var/lib/docker /backup适合容器迁移。很多 CI 系统其实都使用 rsync。
例如:
GitLab CI
Jenkins
发布脚本:
rsync -av --delete build/ prod:/apprsync -aHAX root@old:/ /new保留:权限
xattr
hardlink
rsync -av -f"+ */" -f"- *" src/ dst/rsync -av --delete --info=progress2rsync -av --link-dest实现:快照备份。
当数据规模达到:
10 TB1000 万文件
需要优化。
rsync -azrsync -rtv比 -a 更快。
局域网:
rsync -av --whole-file跳过 delta 算法。
结合:
GNU Parallel
ls data | parallel rsync {} server:/backup/结论:
rsync 几乎完胜。
很多顶级工程师会组合使用:
| ssh | |
| cron | |
| tar |
例如:
tar czf backup.tar.gz datarsync backup.tar.gz server:/backup
如果只允许我推荐一个 Linux 工具:
rsync 必在前三。
因为它解决了工程师三个核心问题:
数据同步服务器备份系统迁移
这也是为什么:20 年过去了,rsync 仍然没有被替代。# 本地同步rsync -av src/ dst/# 远程同步rsync -av src server:/backup# 删除多余文件rsync -av --delete src/ dst/# 断点续传rsync -avP bigfile server:/backup# 排除文件rsync -av --exclude="*.log" src/ dst/# 限速rsync -av --bwlimit=1000 src server:/backup# dry-runrsync -av --dry-run src/ dst/
参考链接:https://linux.die.net/man/1/rsync
文章推荐