Skip to content

Rsync 远程文件同步

Rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具。Rsync软件适用于unix/linux/windows等多种操作系统平台。可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用。

rsync监听端口:873

Rsync简介

Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似ssh带的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。小提示:利用Rsync还可以实现删除文件何目录的功能,这又相当于rm命令!一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。

  • 高效传输:使用增量传输算法,只传输文件差异部分
  • 保持属性:可保留文件权限、时间、软硬链接等元信息
  • 灵活安全:支持本地复制或通过SSH、rsync协议远程同步
  • 压缩传输:在传输过程中可压缩数据以减少带宽使用

Rsync工作原理

Rsync采用"增量递归差异"(Incremental Recursive Diff)算法:

  • 数据块划分:将文件划分为固定大小的数据块(默认2048字节)
  • 校验和计算:对每个数据块计算32位弱滚动校验码和128位MD5强校验码
  • 差异比较:通过比较校验码确定需要传输的数据块
  • 增量传输:只传输源文件和目标文件不同的部分

Rsync 三种工作模式

Rsync 主要有三种工作模式,每种模式适用于不同的使用场景:

本地模式

特点:

  • 在本地文件系统之间同步文件
  • 不需要网络连接
  • 使用本地文件系统路径

适用场景:

  • 本地磁盘间的文件备份
  • 本地文件系统的同步操作
  • 快速复制大量文件

远程模式

特点:

  • 通过 SSH 协议进行远程同步
  • 使用加密传输,安全性高
  • 需要 SSH 访问权限

适用场景:

  • 需要安全加密传输的场景
  • 临时性的文件同步任务
  • 没有安装 rsync 守护进程的远程服务器

守护进程模式

特点:

  • 使用 rsync 专用协议
  • 需要配置 rsync 守护进程 (rsyncd)
  • 支持模块化配置
  • 可以设置访问控制和权限管理

适用场景:

  • 频繁的大规模文件同步
  • 需要细粒度权限控制的场景
  • 专用文件同步服务器
  • 带宽优化的大文件传输

三种模式对比

特性本地模式Shell访问模式守护进程模式
传输方式本地文件系统SSH加密通道rsync专用协议
安全性高(SSH加密)可配置(需额外安全设置)
性能最高中等(SSH加密开销)高(专用协议优化)
配置复杂度无需配置需SSH访问权限需配置rsyncd服务
适用场景本地备份安全远程同步高效批量同步

应用场景

rsync 支持上传和下载将两端的数据对齐。

  • 数据备份:定期将重要数据备份到远程服务器
  • 网站镜像:在多台服务器间同步网站内容
  • 文件分发:将文件快速分发到多个客户端
  • 系统迁移:迁移大量数据时提高效率

Rsync工作方式

基本语法

bash
rsync [选项] 源文件 目标文件
rsync [选项] 源文件 [用户@]主机:目标文件
rsync [选项] [用户@]主机:源文件 目标文件

常用选项

选项描述示例
-a归档模式(保留权限、时间戳等)rsync -a /src/ /dest/
-v显示详细输出rsync -av /src/ user@host:/dest/
-z压缩传输数据rsync -az /src/ user@host:/dest/
-h人类可读格式输出rsync -ah /src/ /dest/
--delete删除目标端多余文件rsync -a --delete /src/ /dest/
-P显示进度并支持断点续传rsync -aP /src/ user@host:/dest/
-e ssh指定远程shellrsync -av -e "ssh -p 2222" /src/ user@host:/dest/
--exclude=PATTERN排除匹配文件rsync -a --exclude='*.tmp' /src/ /dest/
--bwlimit=RATE限制传输带宽(KB/s)rsync -a --bwlimit=100 /src/ user@host:/dest/
--password-file=FILE指定包含密码的文件路径rsync --password-file=/etc/rsync.pass
--daemon以守护进程模式运行rsync --daemon --password-file=/etc/rsync.pass
--port=PORT指定rsync守护进程端口rsync --port=8730 --password-file=pass.txt
--link-dest保持硬链接关系rsync -avz --link-dest=/backup/previous_backup/

常见用法示例

bash
# 本地目录同步
rsync -av /path/to/source/ /path/to/destination/
# 同步到远程服务器
rsync -avz /local/path user@remote:/remote/path
# 从远程服务器同步
rsync -avz user@remote:/remote/path /local/path
# 保持权限同步
rsync -avz --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r /source/ user@remote:/dest/
# 排除特定文件
rsync -av --exclude '*.tmp' /source/ /dest/

守护模式同步搭建

搭建Rsync服务端

安装服务

bash
# Ubuntu/Debian
sudo apt-get install rsync

# CentOS/RHEL
yum install rsync

配置 rsyncd.conf

ini
# 全局配置
# 允许非root用户在备份目录中创建文件或目录。
fake super = yes
# 用户
uid = rsync
# 组
gid = rsync
# 程序安全设置
use chroot = no
# 客户端连接数
max connections = 200
# 超时时间
timeout = 300
# 进程号文件位置
pid file = /var/run/rsyncd.pid
# 进程锁
lock file = /var/run/rsync.lock
# 日志文件位置
log file = /var/log/rsyncd.log
# 配置更详细的日志
log format = %t %a %m %f %b
syslog facility = local3

# 模块配置
[backup]
	# 同步目录
    path = /data/backup
    # 注释
    comment = Backup Area
    # 有错误时忽略
	ignore errors
	# 可读可写(true或false)
	read only = false
    # 阻止远程列表(不让通过远程方式看服务端有啥)
	list=false
	# 绑定特定IP地址
	address = 192.168.1.100
    # 允许IP
    hosts allow = 192.168.148.0/24
    # 禁止IP
    hosts deny = 0.0.0.0/32
    # 虚拟用户
    auth users = rsync_backup
    # 存放用户和密码的文件
    secrets file = /etc/rsync.passwd
    # 排除文件模式
    exclude = *.tmp ~* .git/
    # 包含文件模式
    include = important/*.dat
    # 传输前/后执行的命令
    pre-xfer exec = /usr/bin/pre-backup.sh
    post-xfer exec = /usr/bin/post-backup.sh
    # 日志格式定制
    transfer logging = yes
    log format = %o %h [%a] %m (%u) %f %l

创建认证文件

bash
echo "backupuser:password123" > /etc/rsyncd.passwd
# 修改文件权限600,否则失败
chmod 600 /etc/rsyncd.passwd

创建Rsync程序用户

bash
useradd -M -s /sbin/nologin rsync

创建备份目录

bash
mkdir /data/backup
# 修改归属为Rsync程序用户
chown -R rsync /data/backup

启动服务

bash
systemctl enable rsyncd --now
# 或
rsync --daemon
# 检测服务端口
ss -antup | grep rsync

搭建客户端

安装服务

bash
# Ubuntu/Debian
sudo apt-get install rsync

# CentOS/RHEL
yum install rsync

创建Rsync密码文件

bash
# 客户端只需要密码,用户名在同步时指定
echo "123456" >> /etc/rsyncd.passwd
# 修改文件权限600,否则失败
chmod 600 /etc/rsyncd.passwd

手动同步

bash
rsync -avz /data/ rsync_backup@192.168.148.241::backup --password-file=/etc/rsyncd.passwd