跳转至

🛠️ 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/

五、 避坑指南总结

  1. 路径测试:执行带有 --delete 或复杂的路径前,永远先加 -n
  2. 权限问题:如果同步后发现文件打不开,检查是否使用了 -a
  3. 网络波动:如果网络不稳定,记得带上 -P 开启断点续传。
  4. 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 的标准步骤应该是:

  1. 构造命令rsync -avzP [源] [目的]
  2. 安全模拟:加上 -n 观察输出列表是否符合预期。
  3. 正式执行:去掉 -n 开始传输。
  4. 验证结果:传输完成后,再次运行带 -n 的命令,如果输出为空(显示发送了很少的字节),说明两端已完全同步。)。**