🛠️ rsync 全能实战手册 (2026版)
rsync 是一个开源、快速、多功能、可实现本地及远程复制的增量备份工具。
一、 核心同步逻辑:斜杠法则
这是 rsync 最容易出错的地方,请务必记牢:
- 源路径末尾加
/:root@10.0.0.3:/src/ - 含义:只同步
/src/目录下的内容。 - 源路径末尾不加
/:root@10.0.0.3:/src - 含义:同步整个
/src文件夹本身(在目标路径下创建一个 src 目录)。
二、 常用同步参数详解
1. 基础打包类(最常用)
| 参数 | 全称 | 作用描述 |
|---|---|---|
-a |
--archive |
归档模式。最推荐使用。等同于 -rlptgoD,保留权限、所有者、时间戳及软连接。 |
-v |
--verbose |
详细模式。输出当前正在传输的文件名。 |
-z |
--compress |
压缩传输。在网络传输时压缩数据,节省带宽,对文本类文件效果极佳。 |
-h |
--human-readable |
易读格式。以 KB, MB, GB 显示文件大小。 |
2. 传输控制类
| 参数 | 全称 | 作用描述 |
|---|---|---|
-P |
--progress |
显示进度条。包含 -partial,如果传输中断,保留已传输的部分以便断点续传。 |
-u |
--update |
增量更新。如果目标端的文件比源端还要新,则跳过该文件(防止覆盖掉目标端较新的修改)。 |
-c |
--checksum |
校验和比对。默认 rsync 靠文件大小和时间戳判断。加此参数会对比文件内容指纹,更精确但极慢。 |
-r |
--recursive |
递归。同步子目录。注意 -a 已经包含了这个功能。 |
3. 镜像与清理类(慎用!)
| 参数 | 全称 | 作用描述 |
|---|---|---|
--delete |
严格同步。如果源端删除了某个文件,目标端同步时也会把对应文件删掉,保持两端完全一致。 | |
-n |
--dry-run |
演习模式。只显示将要执行的操作,不实际传输任何数据。写错命令的救星。 |
三、 进阶高级参数(解决特殊需求)
1. 排除特定内容
--exclude="PATTERN":排除匹配的文件/目录(支持通配符*)。--exclude-from=FILE:从一个本地文件中读取需要排除的任务列表。
2. SSH 端口与连接
-e "ssh -p 端口号":如果远程服务器修改了默认 SSH 端口,必须加此参数。- 示例:
rsync -avz -e "ssh -p 2222" ./local root@ip:/remote
3. 物理限制
--bwlimit=KBPS:限制带宽消耗。例如--bwlimit=1024限制在 1MB/s。--inplace:直接在原文件上修改,适合超大文件(如数据库/磁盘镜像),减少 IO 损耗。
四、 完整笔记:生产环境常用场景模板
场景 1:最通用的远程备份(拉取远程到本地)
这是你最初的需求:同步远程目录内容到本地当前目录。
Bash
rsync -avzP root@10.0.0.3:/vol2/1000/QB-HDD/TMP/ ./
场景 2:定期全镜像备份(带删除)
保持本地 /backup 和远程 /data 完全一致,远程删了本地也删。
Bash
rsync -avz --delete root@10.0.0.3:/data/ /backup/
场景 3:排除干扰文件(如日志和临时文件)
Bash
rsync -avz --exclude="*.log" --exclude="temp/" /src/ /dest/
场景 4:断点续传特大文件
即使连接断了,下次运行也会从上次停掉的地方继续。
Bash
rsync -avzP --append-verify /local/bigfile.iso root@remote:/path/
五、 避坑指南总结
- 路径测试:执行带有
--delete或复杂的路径前,永远先加-n。 - 权限问题:如果同步后发现文件打不开,检查是否使用了
-a。 - 网络波动:如果网络不稳定,记得带上
-P开启断点续传。 - SSH 密钥:建议配置 SSH 免密登录,这样就可以把
rsync命令写进crontab每天凌晨自动备份了。
六、 模拟运行(Dry Run):后悔药与预防针
在执行任何不确定的 rsync 命令前,只需在参数中加入 -n 或 --dry-run。
1. 模拟运行的核心作用
- 预览结果:它会扫描所有文件,列出哪些文件会被拷贝、哪些目录会被创建。
- 验证删除:如果你用了
--delete,它会明确告诉你哪些本地文件会被删掉,而不会真的动你的硬盘。 - 检查路径:验证你的“斜杠”加对了没有,看看同步的是“文件夹内容”还是“文件夹本身”。
2. 模拟运行的标准用法
建议配合 -v(详细模式)和 -i(输出细致的增量更改信息)使用:
Bash
# 模拟从远程同步到本地(不会产生任何实际传输)
rsync -avzP -n --delete root@10.0.0.3:/vol2/1000/QB-HDD/TMP/ ./local_dir/
3. 如何解读模拟输出中的符号 (-i 参数)
如果你加上了 -i (itemize-changes),输出的文件名前会有一串字符,它们的含义非常专业:
f:代表这是一个文件 (File)。d:代表这是一个目录 (Directory)。>:代表文件正在传送到本地(拉取)。s:代表文件大小 (Size) 发生了变化。t:代表修改时间 (Timestamp) 发生了变化。p:代表权限 (Permissions) 发生了变化。
七、 进阶:对比不同模式的直观差异
为了让笔记更直观,你可以参考下表来选择你的“起手式”:
| 任务类型 | 推荐命令组合 | 核心关注点 |
|---|---|---|
| 首次同步 | rsync -avzP |
关注进度条和传输速度 |
| 日常增量备份 | rsync -avz |
保持静默运行,只传变化部分 |
| 完全镜像备份 | rsync -av --delete |
必须先加 -n 模拟,确认不会误删 |
| 仅同步结构 | rsync -av -f"+ */" -f"- *" |
只同步文件夹层级,不传文件 |
| 远程大文件恢复 | rsync -avzP --append |
支持断点续传,不重新传已有的部分 |
八、 笔记总结:一个标准的 rsync 工作流
在职业运维或开发工作中,操作 rsync 的标准步骤应该是:
- 构造命令:
rsync -avzP [源] [目的] - 安全模拟:加上
-n观察输出列表是否符合预期。 - 正式执行:去掉
-n开始传输。 - 验证结果:传输完成后,再次运行带
-n的命令,如果输出为空(显示发送了很少的字节),说明两端已完全同步。)。**