Rsync for Linux:同步、复制和备份文件

9 分钟阅读 - 2025年5月24日

hero section cover
目录
  • Linux 版 Rsync:像专家一样同步、复制和备份文件
  • 什么是 rsync?
  • 为何选择 rsync 而不是 cp 或 scp
  • 常见的 rsync 参数
  • rsync 示例
  • 使用 cron 自动化 rsync
  • 结语
分享

如何在 Linux 上使用 rsync 进行增量传输、通过 SSH 进行远程同步、使用 cron 进行计划备份以及避免尾随斜线陷阱。

Linux 版 Rsync:像专家一样同步、复制和备份文件

Rsync 是用于在 Linux 系统之间复制文件的标准工具。它比 cpscp ,且能从网络中断中恢复,并仅传输实际发生变化的内容。本文将介绍 rsync 的功能、值得了解的参数、最常用的示例,以及如何通过 cron 进行定时任务设置。


 

什么是 rsync?

rsync 是一款用于在不同位置之间复制和同步文件的命令行工具。它可在本地运行,也可通过 SSH 连接到远程主机,或与 rsync 守护进程交互。它与 cpscp:rsync 会先比较源文件和目标文件,然后仅传输差异部分。例如,在一个 100 GB 的目录中,若仅有 200 MB 发生变化,rsync 仅传输 200 MB。 cpscp 则会移动全部内容。

它随所有现代 Linux 发行版一同提供。如果缺失: apt install rsyncdnf install rsync.

为何选择 rsync 而不是 cp 或 scp

对于任何非简单的复制任务,rsync 胜出的三大理由:

  • 它支持增量传输。后续运行时仅传输已更改的字节,而非整个文件。对于备份和镜像任务,这将使原本需要一整夜的任务缩短至几分钟。
  • 它能恢复中断。借助 --partial,一个传输了一半的50 GB文件将从中断处继续,而非从头开始。
  • 它能保留元数据。归档模式 (-a) 能保留权限、所有权、符号链接和时间戳。这对系统文件、源代码树以及任何需要保留属性的内容至关重要。

对于小文件的一次性复制, scp 即可。对于需要重复传输、占用大量带宽或可能需要恢复传输的任务,请使用 rsync。

常见的 rsync 参数

您实际会用到的选项:

选项功能
-a归档模式。保留权限、所有权、符号链接和时间戳。等同于 -rlptgoD.
-vVerbose。列出正在传输的文件。
-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

要进行定时备份,您需要满足以下三个条件:

  1. 目标主机的无密码 SSH 访问权限。cron 任务无法输入密码。生成密钥并将其复制到备份主机:

    ssh-keygen -t ed25519
    ssh-copy-id user@backup-host
  2. 使用脚本,而非 crontab 中的单行命令。这样更便于测试和日志记录:

    #!/bin/bash
    LOG=/var/log/rsync-backup.log
    rsync -az --delete /etc/ user@backup:/backups/$(hostname)/etc/ >> "$LOG" 2>&1

    使用以下命令使其可执行 chmod +x.

  3. 一个用于运行它的 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,意味着备份窗口不再受传输配额的限制。

博客

本周特色

更多文章
为什么必须拥有功能强大且不计量的 VPS

为什么必须拥有功能强大且不计量的 VPS

非计费 VPS 以固定端口速度提供固定费率带宽。它与计费计划有何不同,什么时候会有回报,以及购买前需要检查什么。

7 分钟阅读 - 2025年5月9日

Linux 内存管理:交换、OOM 杀手和 Cgroups

12 分钟阅读 - 2026年5月31日

更多文章