Linux 数据同步神器:rsync 核心原理、常用参数与生产环境避坑指南

2026-11-11 8点热度 0人点赞 0条评论

在 Linux/Unix 运维与日常开发工作中,文件与目录的同步是极其高频的需求。从本地备份到远程服务器部署,最强大、最通用的工具非 rsync(Remote Sync)莫属。

rsync 凭借其高效的增量传输算法(只传输差异部分)、丰富的权限保持选项以及对 SSH 的天然支持,成为了服务器数据同步的标准利器。本文总结了 rsync 的核心用法、常用参数细节以及关键踩坑点,方便随时查阅。


一、 rsync 基本语法与命令格式

rsync 的基本调用语法如下:

# 1. 本地文件/目录同步
rsync [OPTION...] SRC... [DEST]

# 2. 通过远程 Shell (如 SSH) 进行同步
rsync [OPTION...] SRC... [USER@]HOST:DEST
rsync [OPTION...] [USER@]HOST:SRC... [DEST]

💡 核心细节:源路径末尾斜杠 / 的区别(极重要!)

  • 源目录以斜杠结尾(如 /src/):只同步该目录下的内容,不会在目标端创建 src 目录本身。
  • 源目录不以斜杠结尾(如 /src):会把 src 目录本身及其下所有内容完整复制到目标路径。
  • 注意:目标路径(DEST)末尾是否有斜杠对结果没有任何影响。

二、 常用核心选项详解

1. 黄金组合参数 -a (Archive Mode)

-a 是 rsync 最常用的选项,代表归档模式,用于递归同步并尽可能保持文件的原始属性。它相当于同时开启了以下 7 个参数组合(即 -rlptgoD):

  • -r (recursive):递归同步子目录。
  • -l (links):保留软链接(符号链接)。
  • -p (perms):保持文件权限。
  • -t (times):保持文件修改时间(modify time)。
  • -g (group):保持属组信息(需要相应权限)。
  • -o (owner):保持属主信息(通常需要 root 权限)。
  • -D (devices):保持设备文件及特殊文件信息。

注意:-a 无法同步“硬链接”,若有硬链接同步需求,需额外加上 -H 参数。

2. 增量对比与时间戳处理 (-t / -I)

  • -t 选项:保持源端时间戳。开启后,rsync 默认开启 Quick Check 策略——在传输前先对比源端与目标端文件的时间戳和文件大小,如果一致则跳过该文件。
  • -I (ignore-times) 选项:放弃 Quick Check 策略。强制对所有文件逐个检查并重新传输。常用于两端文件大小和修改时间相同但内容被破坏/篡改的场景。

3. 链接文件处理 (-l / -L)

  • -l 选项:默认遇到软链接时跳过,加上 -l 才会以软链接形式同步过去。
  • -L (copy-links) 选项:遇到软链接时,像对待普通文件一样复制其指向的实体文件。

4. 删除与同步保持一致 (--delete)

默认情况下,rsync 仅会更新或新增文件,不会删除目标路径中多余的文件。如果需要保持目标端与源端完全一致(镜像),需添加删除选项:

  • --delete:源端没有的文件,目标端也予以删除(传输前或传输中处理)。
  • --delete-after:在所有数据传输完毕后再执行删除操作,更安全。

5. 演练模拟与安全预防 (-n / --dry-run)

使用 --delete 选项时具有一定危险性。推荐配合 -n(即 --dry-run)进行模拟测试,它会打印出将要执行新增、修改和删除的文件列表,但不会真正修改磁盘文件。

rsync -avz --delete -n /data/ /backup/data/

6. 断点续传与进度展示 (-P)

传输大文件或网络环境不稳定时,建议使用 -P 选项。-P 是以下两个参数的缩写:

  • --partial:保留未传输完成的临时文件,下次再次执行时可断点续传。
  • --progress:实时显示当前文件传输的百分比、速率及剩余时间。

7. 排除与包含文件 (--exclude / --include)

在同步大型项目(如 node_modules 或 .git)时,可以通过排除参数优化传输:

# 排除单个目录/规则
rsync -avz --exclude='node_modules' --exclude='*.log' /project/ user@remote:/project/

# 从规则文件中读取排除列表
rsync -avz --exclude-from='exclude-list.txt' /project/ user@remote:/project/

三、 常见实战场景示例

1. 镜像备份本地目录到远程服务器

rsync -avzP --delete /var/www/html/ [email protected]:/var/www/html/

2. 指定非标准 SSH 端口(如 2222)同步

rsync -avzP -e 'ssh -p 2222' /local/dir/ [email protected]:/remote/dir/

提示:若在 ~/.ssh/config 中预先配置了主机别名(如 Host my-server),可直接简化为:rsync -avzP /local/dir/ my-server:/remote/dir/

3. 限制传输带宽(防止网络拥塞)

# 限制传输速率最高为 5000 KB/s (约 5MB/s)
rsync -avzP --bwlimit=5000 /bigdata/ user@remote:/bigdata/

四、 rsync 常用选项对照速查表

参数 全称 / 说明
-a, --archive 归档模式,递归同步并保持文件权限、修改时间、属主属组及链接等属性。
-v, --verbose 详细模式输出,显示同步过程中的文件名。
-z, --compress 传输时启用数据压缩(适合跨网段或低带宽环境)。
-P 等同于 --partial --progress,支持断点续传并实时显示传输进度。
-n, --dry-run 演练模式,仅打印将要发生的操作而不实际修改任何文件。
--delete 删除目标端存在但源端不存在的文件,保持两端绝对一致。
-e COMMAND 指定远程 shell 通信命令,如 -e 'ssh -p 2222'。
-I, --ignore-times 关闭 Quick Check 快速检查,强制对比并传输所有文件。
-u, --update 更新模式,若目标端文件修改时间比源端更新,则跳过覆盖。
--bwlimit=KBPS 限制传输带宽,单位为 KB/s。

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论