今天简单回顾一下rsync吧

4 阅读5分钟

什么是rsync,它有什么用?

rsync 是一款开源的高效文件同步与备份工具,核心优势是“增量同步”——仅传输源文件与目标文件的差异部分,而非全量复制,能极大节省带宽、提升同步效率。它支持本地同步、跨服务器同步(基于SSH协议)、服务端模式同步,是运维日常必备工具。

它的核心用途包括:

  • 本地文件同步:替代传统cp命令,支持递归同步、权限保留,适合本地目录备份。
  • 跨服务器同步:基于SSH协议实现无感知跨机同步,无需额外部署服务端(轻量场景首选)。
  • 服务端模式同步:搭建rsync服务端,支持多客户端同时同步,适合大规模文件分发(如集群配置同步)。
  • 数据备份:结合定时任务(crontab)实现周期性增量备份,搭配--delete参数可保持源目一致性。

它的优势很明显:

  • 高效增量同步:核心特性,仅传差异数据,带宽占用极低,远快于cp、scp命令。
  • 功能丰富:支持权限保留、符号链接同步、排除指定文件、断点续传等。
  • 灵活部署:可无服务端(SSH模式)快速使用,也可搭建独立服务端支持大规模同步。

怎么安装rsync?

CentOS 7系统下安装极简,默认yum源已包含rsync,直接安装即可:

# 安装rsync
yum install -y rsync

rsync的核心目录与配置文件

rsync默认无需复杂配置即可使用(SSH模式),若搭建服务端,核心配置文件集中在以下路径:

  • /etc/rsyncd.conf(主配置文件) :rsync服务端核心配置文件,定义模块、权限、同步目录等参数,默认无此文件,需手动创建。
  • /etc/rsyncd.secrets(密码文件) :用于服务端身份验证,存储用户名和密码,需严格控制权限(仅属主可读)。
  • /etc/rsyncd.motd(欢迎信息文件) :可选配置,客户端连接服务端时显示的欢迎信息。

SSH模式下无需配置上述文件,仅需确保源主机与目标主机SSH互通即可。

rsync核心命令与常用场景

rsync命令语法:rsync [选项] 源路径 目标路径,核心选项决定同步行为,以下是高频场景实战。

1. 本地文件同步(替代cp)

同步本地目录,保留文件权限、递归同步,同时排除指定文件:

# 递归同步本地dir1到dir2,保留权限
rsync -a /data/dir1/ /data/dir2/

# 同步时排除.log后缀文件
rsync -a --exclude="*.log" /data/dir1/ /data/dir2/

# 同步并删除目标目录中源目录没有的文件
rsync -a --delete /data/dir1/ /data/dir2/

注意:源路径结尾加“/”表示同步目录内内容,不加则同步目录本身。

2. 跨服务器SSH模式同步(最常用有点类似scp)

基于SSH协议同步,无需搭建rsync服务端,适合轻量跨机同步:

# 本地文件同步到远程服务器(格式:用户名@远程IP:远程路径)
rsync -a /data/local/file root@192.168.1.100:/data/remote/

# 远程服务器文件同步到本地
rsync -a root@192.168.1.100:/data/remote/file /data/local/

# 同步目录,同时显示同步进度(-v显示详情,--progress显示进度条)
rsync -av --progress /data/dir root@192.168.1.100:/data/

若远程服务器SSH端口非默认22,需指定端口(-e参数):

rsync -av -e "ssh -p 2222" /data/dir root@192.168.1.100:/data/

3. 服务端模式同步(大规模分发)

适合多客户端同步同一资源(如集群配置文件),需先搭建rsync服务端。

步骤1:配置服务端(/etc/rsyncd.conf)

# 全局配置
uid = root # 运行rsync服务的用户
gid = root # 运行rsync服务的组
use chroot = no # 关闭chroot,避免权限问题
max connections = 10 # 最大并发连接数
pid file = /var/run/rsyncd.pid # PID文件路径
log file = /var/log/rsyncd.log # 日志文件路径

# 定义同步模块(客户端通过模块名访问)
[sync_module]
path = /data/sync_dir # 服务端同步目录
comment = rsync sync module # 模块描述
read only = no # 允许读写(客户端可上传文件)
write only = no # 允许读取
hosts allow = 192.168.1.0/24 # 允许访问的客户端网段
hosts deny = * # 拒绝其他所有网段
auth users = rsync_user # 授权用户名
secrets file = /etc/rsyncd.secrets # 密码文件路径

步骤2:创建密码文件并授权

# 写入用户名:密码
echo "rsync_user:123456" > /etc/rsyncd.secrets

# 严格控制权限,必须600,否则服务启动失败
chmod 600 /etc/rsyncd.secrets

步骤3:启动rsync服务端

# 启动服务
systemctl start rsyncd 

# 设置开机自启
systemctl enable rsyncd

步骤4:客户端同步(服务端模式)

# 客户端从服务端同步数据(格式:授权用户@服务端IP::模块名 本地路径)
rsync -av rsync_user@192.168.1.101::sync_module /data/local/

# 客户端上传数据到服务端
rsync -av /data/local/ rsync_user@192.168.1.101::sync_module

# 免交互同步(避免输入密码,创建密码文件并授权)
echo "123456" > /etc/rsync_client.secrets
chmod 600 /etc/rsync_client.secrets
rsync -av --password-file=/etc/rsync_client.secrets rsync_user@192.168.1.101::sync_module /data/local/

rsync常用命令选项汇总

核心选项组合(-a常用,搭配其他选项满足需求):

  • -a:归档模式,等价于-rlptgoD,递归同步、保留权限、所有者、时间戳等,是最常用选项。
  • -v:显示同步详情,便于排查问题。
  • -z:压缩传输数据,节省带宽(适合跨网同步)。
  • --progress:显示同步进度条,直观查看同步状态。
  • --delete:删除目标目录中源目录没有的文件,保持源目完全一致。
  • --exclude=PATTERN:排除指定文件/目录,支持通配符(如*.log、test/)。
  • --include=PATTERN:与--exclude搭配,优先包含指定文件(排除中例外)。
  • -e "ssh -p 端口":指定SSH端口,适配非默认端口场景。

实战小技巧

  1. 定时备份:结合crontab实现每日增量备份,示例(每天凌晨2点同步远程数据到本地): 0 2 * * * rsync -av --delete root@192.168.1.100:/data/backup /data/local_backup > /var/log/rsync_backup.log 2>&1
  2. 权限问题:同步后文件权限异常,需确保rsync运行用户有源目目录的读写权限,服务端模式注意uid/gid配置。

rsync的核心价值在于“高效增量”,不管是日常备份还是集群运维,都是性价比极高的工具。掌握上述基础用法,就能覆盖很多实际场景。

先写这么多,后面有时间再多写点干货🤭。