Rsync for Linux:同步、复制和备份文件
9 分钟阅读 - 2025年5月24日

如何在 Linux 上使用 rsync 进行增量传输、通过 SSH 进行远程同步、使用 cron 进行计划备份以及避免尾随斜线陷阱。
Linux 版 Rsync:像专家一样同步、复制和备份文件
Rsync 是用于在 Linux 系统之间复制文件的标准工具。它比 cp 或 scp ,且能从网络中断中恢复,并仅传输实际发生变化的内容。本文将介绍 rsync 的功能、值得了解的参数、最常用的示例,以及如何通过 cron 进行定时任务设置。
什么是 rsync?
rsync 是一款用于在不同位置之间复制和同步文件的命令行工具。它可在本地运行,也可通过 SSH 连接到远程主机,或与 rsync 守护进程交互。它与 cp 或 scp:rsync 会先比较源文件和目标文件,然后仅传输差异部分。例如,在一个 100 GB 的目录中,若仅有 200 MB 发生变化,rsync 仅传输 200 MB。 cp 而 scp 则会移动全部内容。
它随所有现代 Linux 发行版一同提供。如果缺失: apt install rsync 或 dnf install rsync.
为何选择 rsync 而不是 cp 或 scp
对于任何非简单的复制任务,rsync 胜出的三大理由:
- 它支持增量传输。后续运行时仅传输已更改的字节,而非整个文件。对于备份和镜像任务,这将使原本需要一整夜的任务缩短至几分钟。
- 它能恢复中断。借助
--partial,一个传输了一半的50 GB文件将从中断处继续,而非从头开始。 - 它能保留元数据。归档模式 (
-a) 能保留权限、所有权、符号链接和时间戳。这对系统文件、源代码树以及任何需要保留属性的内容至关重要。
对于小文件的一次性复制, scp 即可。对于需要重复传输、占用大量带宽或可能需要恢复传输的任务,请使用 rsync。
常见的 rsync 参数
您实际会用到的选项:
| 选项 | 功能 |
|---|---|
-a | 归档模式。保留权限、所有权、符号链接和时间戳。等同于 -rlptgoD. |
-v | Verbose。列出正在传输的文件。 |
-z | 传输中压缩。适用于网速慢或带宽昂贵的连接,在局域网或传输已压缩内容时作用较小。 |
-P | 结合 --partial 和 --progress。恢复中断的传输,显示实时进度。 |
--delete | 删除目标位置上源位置不存在的文件。这是实现真正镜像所必需的。 |
--exclude | 跳过符合特定模式的文件。 |
--exclude-from=FILE | 从文件中读取排除模式。比串联多个 --exclude 选项。 |
--dry-run | 显示在不传输任何文件的情况下会发生什么。 |
--bwlimit=KBPS | 将带宽使用量限制为每秒千字节。对于在工作时间运行的备份非常有用。 |
--checksum | 通过校验和而非大小和修改时间来比较文件。虽然速度较慢,但能捕获边界情况。 |
-e ssh | 使用 SSH 进行传输。在大多数现代安装中默认启用。 |
默认行为是比较文件大小和修改时间,这种方式速度快且几乎总是正确的。请切换至 --checksum ,例如部署过程重写了时间戳但未更改内容,或者您怀疑存在位级损坏。
rsync 示例
在本地复制一个目录:
rsync -av /source/path/ /destination/path/通过 SSH 同步到远程服务器:
rsync -avz /local/dir/ user@remote:/remote/dir/在执行任何可能导致数据丢失的操作前进行干跑测试:
rsync -avz --dry-run /local/dir/ user@remote:/dir/镜像两个目录,包括目标端已删除的文件:
rsync -av --delete /source/ /destination/排除日志和临时目录:
rsync -av --exclude='*.log' --exclude='tmp/' /src/ /dest/恢复可能中断的大文件传输:
rsync -avP user@remote:/backups/big.img /local/如果 SSH 会话中断,请再次运行相同的命令。使用 -P,rsync 会从中断处继续传输,而非从头开始。
将带宽限制为 50 MB/s 以进行非高峰时段备份,避免上行链路饱和:
rsync -avz --bwlimit=50000 /local/dir/ user@remote:/dir/尾随斜杠的陷阱
最常见的 rsync 错误:
rsync -av /source /destination/ # copies the 'source' directory INTO /destination
rsync -av /source/ /destination/ # copies the CONTENTS of /source into /destination源路径末尾的斜杠表示“此目录内的所有内容”。没有末尾斜杠则表示“此目录本身”。如果不确定,请先使用 --dry-run ,尤其是在与 --delete.
使用 cron 自动化 rsync
要进行定时备份,您需要满足以下三个条件:
目标主机的无密码 SSH 访问权限。cron 任务无法输入密码。生成密钥并将其复制到备份主机:
ssh-keygen -t ed25519 ssh-copy-id user@backup-host使用脚本,而非 crontab 中的单行命令。这样更便于测试和日志记录:
#!/bin/bash LOG=/var/log/rsync-backup.log rsync -az --delete /etc/ user@backup:/backups/$(hostname)/etc/ >> "$LOG" 2>&1使用以下命令使其可执行
chmod +x.一个用于运行它的 cron 任务。编辑如下:
crontab -e:0 2 * * * /usr/local/bin/rsync-backup.sh这将使脚本每晚 02:00 运行。
在生产环境中值得做的两项优化:将脚本包裹在 flock ,以免长时间运行的任务与次日夜间的运行时间重叠,并将输出通过 logger ,使失败信息记录在系统日志中,以便监控系统能够捕获。
结语
Rsync 是为数不多的几款 Linux 工具之一,花时间学习其参数几乎能立竿见影地获得回报。要点如下:
- 增量传输和断点续传功能使 rsync 成为任何需要多次运行任务的理想选择
-a对于归档模式,-z压缩方面,-P恢复和进度跟踪,--delete用于真正的镜像同步- 请注意源路径末尾的斜杠,特别是在
--delete - 配合 cron 和 SSH 密钥,实现无人值守的定时备份
对于在不同设施间传输数据的大型备份任务,在带宽不限的 VPS 上运行 rsync,意味着备份窗口不再受传输配额的限制。
Linux 内存管理:交换、OOM 杀手和 Cgroups
12 分钟阅读 - 2026年5月31日