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 | 指定远程shell | rsync -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