什么是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端口,适配非默认端口场景。
实战小技巧
- 定时备份:结合crontab实现每日增量备份,示例(每天凌晨2点同步远程数据到本地):
0 2 * * * rsync -av --delete root@192.168.1.100:/data/backup /data/local_backup > /var/log/rsync_backup.log 2>&1 - 权限问题:同步后文件权限异常,需确保rsync运行用户有源目目录的读写权限,服务端模式注意uid/gid配置。
rsync的核心价值在于“高效增量”,不管是日常备份还是集群运维,都是性价比极高的工具。掌握上述基础用法,就能覆盖很多实际场景。
先写这么多,后面有时间再多写点干货🤭。