linux使用rsync单向同步文件夹

本文最后更新于 2025年10月15日 中午

linux使用rsync单向同步文件夹

一、核心目标

源服务器 192.168.1.100 上的指定文件夹,单向、增量地同步到 目标服务器 192.168.1.200 的目标文件夹。

二、前置条件

  1. 网络连通性:确保源服务器 192.168.1.100 可以通过 SSH 访问目标服务器 192.168.1.200

  2. 权限

    • 192.168.1.100 上,拥有对源文件夹的读取权限。
    • 192.168.1.200 上,拥有对目标文件夹的写入权限,以及通过 SSH 登录的用户(如 user)和密码。
  3. 工具安装

    • 源服务器和目标服务器上都必须安装 rsync 工具。(大多数 Linux 发行版默认安装)
    1
    2
    3
    4
    5
    6
    7
    8
    # 检查是否安装
    rsync --version

    # 如果未安装,则进行安装
    # CentOS/RHEL
    sudo yum install -y rsync
    # Ubuntu/Debian
    sudo apt install -y rsync

三、操作步骤(在源服务器 192.168.1.100 上执行)

1. 配置 SSH 免密登录(关键,用于自动化)

为了让定时任务(如 cron)能自动执行,需要配置从源服务器到目标服务器的免密 SSH 登录。

1
2
3
4
5
6
7
8
9
10
11
# 在源服务器 192.168.1.100 上执行
# 1. 生成 SSH 密钥对(如果还没有)
ssh-keygen -t rsa

# 2. 将公钥复制到目标服务器 192.168.1.200
# 执行后会提示输入目标服务器 user 用户的密码
ssh-copy-id user@192.168.1.200

# 3. 验证免密登录是否成功
# 如果能直接登录,无需输入密码,则配置成功
ssh user@192.168.1.200 "hostname"

2. 执行同步命令

源服务器 192.168.1.100 的命令行中,执行以下核心同步命令。

假设:

  • 源目录/path/to/source_folder/
  • 目标目录/path/to/target_folder/
1
2
# 注意:此命令在源服务器 192.168.1.100 上执行
rsync -avz --delete /path/to/source_folder/ user@192.168.1.200:/path/to/target_folder/

强烈建议在首次执行或修改参数后,先使用 --dry-run 进行模拟运行,确认无误后再去掉该参数执行真实同步。

1
2
# 模拟运行,只显示将要执行的操作,不实际同步
rsync -avz --delete --dry-run /path/to/source_folder/ user@192.168.1.200:/path/to/target_folder/

四、命令参数详解

参数 作用
rsync 同步命令本身。
-a 归档模式 (Archive)。这是一个复合参数,等同于 -rlptgoD。它会递归同步目录,并尽可能保留文件的权限、所有者、时间戳、符号链接等所有属性。这是最常用、最重要的参数
-v 详细模式 (Verbose)。显示同步过程中的详细信息,如正在同步哪些文件。便于监控和调试。
-z 压缩模式 (Compress)。在传输过程中对文件进行压缩,可以减少网络带宽占用,加快同步速度。在内网带宽充足时,可省略此参数以略微提升 CPU 效率
--delete 删除目标端多余文件。这是实现“镜像同步”的关键。它会使目标目录严格与源目录保持一致。如果源目录删除了某个文件,下次同步时,目标目录的对应文件也会被删除。使用前请务必确认目标目录中没有需要保留的额外文件!
--dry-run 模拟运行。显示将要执行的操作,但不会实际复制或删除任何文件。强烈建议在正式执行前使用此参数进行测试
/path/to/source_folder/ 源目录注意末尾的斜杠 /:如果加上斜杠,代表同步该目录内部的所有内容到目标目录;如果不加斜杠,代表将该目录本身同步到目标目录下。
user@192.168.1.200:/path/to/target_folder/ 目标地址。格式为 [用户名]@[IP地址]:[目标路径]

五、重要提示与最佳实践

  1. 路径末尾的斜杠 /:这是 rsync 中一个非常关键的细节。

    • rsync ... /source/ /target/:将 /source 目录下的所有文件和子目录同步到 /target 目录中。
    • rsync ... /source /target/:将 /source 目录本身同步到 /target 目录下,最终形成 /target/source
  2. --delete 参数的危险性--delete 是一个强大但有潜在风险的参数。如果目标目录中存在源目录没有的文件,它们会被无情删除。在对生产环境执行此操作前,务必通过 --dry-run 确认删除列表。

  3. 自动化:此命令非常适合放入 crontab 中,实现周期性同步。例如,每天凌晨 3 点同步一次:

    1
    2
    # 在源服务器 192.168.1.100 上的 crontab
    0 3 * * * /usr/bin/rsync -az --delete /path/to/source_folder/ user@192.168.1.200:/path/to/target_folder/ >> /var/log/rsync_sync.log 2>&1
    • 使用了 rsync 的绝对路径 /usr/bin/rsync,更稳定。
    • 去掉了 -v 参数,避免日志过于冗长。
    • 将所有输出(包括错误)重定向到日志文件,便于排查。
  4. 日志记录:如上面的 cron 示例,建议始终将同步日志记录下来,以便追踪同步历史和问题。



linux使用rsync单向同步文件夹
https://xinhaojin.github.io/2025/10/13/linux使用rsync单向同步文件夹/
作者
xinhaojin
发布于
2025年10月13日
许可协议