rsync 工具
rsync 工具
一、rsync 简介
rsync 是 Linux 系统下的数据镜像备份工具,可实现快速增量备份。支持本地复制,也能与其他 SSH、rsync 主机远程同步,具备安全、高效、灵活等特性。
二、rsync 特性
- 全面镜像:可镜像保存整个目录树和文件系统。
- 属性保留:轻松保持原文件权限、时间、软硬链接等。
- 易安装性:无须特殊权限即可完成安装 。
- 高效传输:首次全量复制,后续仅传修改文件;传输中支持压缩解压缩,节省带宽 。
- 安全多样:支持 scp、ssh 等传输方式,也可直接 socket 连接 。
- 匿名传输:支持匿名传输,便于网站镜像场景。
三、rsync 常用命令与格式
(一)常用参数
参数 | 含义 |
-a, --archive | 归档,递归传输文件并保持所有属性 |
-v, --verbose | 显示详细信息,如文件列表、数量等 |
-q, --quiet | 不显示打印信息 |
-r, --recursive | 递归传输,传目录时必选 |
-p, --perms | 保持原有权限属性 |
-z, --compress | 传输时压缩,节省带宽、加快速度 |
--delete | 删除目标端源端没有的文件,同步源端删除操作 |
(二)命令格式
- 本地复制:rsync [OPTION]... SRC DEST,SRC、DEST 无冒号分隔,如[root@sl1 ~]# rsync -a a afile 。
- 本地→远程:rsync [OPTION]... SRC [USER@]HOST:DEST,DEST 含冒号,如[root@sl1 ~]# rsync -avz a root@192.168.100.30:/tmp/b 。
- 远程→本地:rsync [OPTION]... [USER@]HOST:SRC DEST,如[root@sl1 ~]# rsync -avz root@192.168.100.30:/tmp/file1 /tmp/ 。
四、rsync 基础应用实践(以 CentOS7 环境为例)
环境准备
关闭防火墙和 SELinux,确保源、目标服务器网络互通,查看并安装 rsync([root@sl1 ~]# yum -y install rsync )。
(一)本地复制示例
# 清理/tmp,创建测试文件[root@sl1 ~]# rm -rf /tmp/*[root@sl1 ~]# touch /tmp/a# 本地复制[root@sl1 ~]# rsync -a /tmp/a /tmp/afile[root@sl1 tmp]# lsa afile
执行后,/tmp 目录下会新增 afile 文件,与 a 文件内容一致。
(二)远程同步示例(本地→远程)
# 从本地向192.168.100.30服务器同步文件[root@sl1 ~]# rsync -avz /tmp/a root@192.168.100.30:/tmp/b
登录 192.168.100.30 ,可在 /tmp 目录看到 b 文件。
[root@sl2 tmp]# lsb
(三)远程同步示例(远程→本地)
# 在192.168.100.30创建测试文件[root@sl2 ~]# touch /tmp/file1# 从192.168.100.30同步到本地/tmp[root@sl1 ~]# rsync -avz root@192.168.100.30:/tmp/file1 /tmp/
执行后,本地 /tmp 目录会出现 file1 文件。
[root@sl1 tmp]# lsa afile file1
五、rsync + inotify-tools 实时同步方案
(一)组合优势
rsync 可增量同步,但扫描大量文件耗时;inotify 是 Linux 内核文件系统事件监控机制,能实时捕捉文件增删改等操作。二者结合可实现 实时、高效 数据同步,解决 rsync 定时同步的延迟问题。
(二)环境准备(源服务器:192.168.100.20;目标服务器:192.168.100.30 )
- 时钟同步(可选但推荐)
- 目标服务器(192.168.100.30 )同步时间:
[root@sl2 ~]# vim /etc/chrony.conf# 注释原有,添加server 192.168.100.20 iburst[root@sl2 ~]# systemctl restart chronyd && systemctl enable chronyd[root@sl2 ~]# hwclock -w
- 源服务器(192.168.100.20 )配置 chrony 作为时间源:
[root@sl1 ~]# vim /etc/chrony.conf# 添加local stratum 10[root@sl1 ~]# systemctl restart chronyd && systemctl enable chronyd[root@sl1 ~]# hwclock -w
2.目标服务器 rsync 配置
- 编辑 rsync 主配置文件:
[root@sl2 ~]# vim /etc/rsyncd.conf# 添加内容log file = /var/log/rsyncd.log # 日志文件位置,启动rsync后自动产生这个文件,无需提前创建pidfile = /var/run/rsyncd.pid # pid文件的存放位置lock file = /var/run/rsync.lock # 支持max connections参数的锁文件secrets file = /etc/rsync.pass # 用户认证配置文件,里面保存用户名称和密码,必须手动创建这个文件[etc_from_client] # 自定义同步名称path = /tmp/ # rsync服务端数据存放路径,客户端的数据将同步至此目录comment = sync etc from clientuid = root # 设置rsync运行权限为rootgid = root # 设置rsync运行权限为rootport = 873 # 默认端口ignore errors # 表示出现错误忽略错误use chroot = no # 默认为true,修改为no,增加对目录文件软连接的备份read only = no # 设置rsync服务端为读写权限list = no # 不显示rsync服务端资源列表max connections = 200 # 最大连接数timeout = 600 # 设置超时时间auth users = admin # 执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开hosts allow = 192.168.100.10 # 允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开hosts deny = 192.168.1.1 # 禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
- 创建用户认证文件并设置权限:
[root@sl1 ~]# vim /etc/rsync.pass# 添加(格式:用户名:密码)admin:123456[root@sl1 ~]# chmod 600 /etc/rsync*
- 启动 rsync 服务并设置开机自启:
[root@sl1 ~]# rsync --daemon# 配置开机自启(写入rc.local----linux系统启动过程中最后执行的脚本)[root@sl1 ~]# vim /etc/rc.d/rc.local#最后添加---启动和服务的配置文件
rsync --daemon --config=/etc/rsyncd.conf[root@sl1 ~]# chmod +x /etc/rc.d/rc.local
- 验证服务:[root@sl1 ~]# ss -utln 查看 873 端口是否监听。
(三)源服务器配置与测试
- 配置 yum 源与依赖
# 删除原有YUM源配置rm -rf /etc/yum.repos.d/*# 下载阿里云CentOS 7源wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo#安装依赖[root@sl1 ~]# yum -y install epel-release
- 创建认证密码文件
[root@sl1 ~]# vim /etc/rsync.pass# 添加密码(与目标服务器对应)123456[root@sl1 ~]# chmod 600 /etc/rsync.pass
- 创建测试目录并同步
[root@sl1 ~]# mkdir -pv /root/etc/test# 执行同步命令[root@sl1 ~]# rsync -avH --port 873 --progress --delete /root/etc/ admin@192.168.100.20::etc_from_client --password-file=/etc/rsync.pass
登录目标服务器,查看 /tmp 目录,确认文件同步成功。
[root@sl2 ~]# cd /tmp[root@sl2 tmp]# ls
test
(四)inotify-tools 实时同步配置
- 检查内核支持:[root@sl1 ~]# ll /proc/sys/fs/inotify ,存在 max_queued_events 等文件则支持。
- 安装工具:
[root@sl1 ~]# yum -y install make gcc gcc-c++[root@sl1 ~]# yum -y install inotify-tools
- 编写实时同步脚本
[root@sl1 ~]# mkdir /autorsync && touch /autorsync/inotify.sh[root@sl1 ~]# chmod +x /autorsync/inotify.sh[root@sl1 ~]# vim /autorsync/inotify.sh# 添加内容host=192.168.100.20 # 目标服务器IPsrc=/root/etc # 源端监控目录des=etc_from_client # 目标端模块名password=/etc/rsync.pass # 密码文件user=admin # 认证用户inotifywait=/usr/bin/inotifywait$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files;dorsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$desecho "${files} was rsynced" >>/tmp/rsync.log 2>&1done
- 启动脚本并验证
[root@sl1 ~]# nohup bash /autorsync/inotify.sh &# 测试:创建文件[root@sl1 ~]# touch /root/etc/abc# 查看日志[root@sl1 ~]# tail /tmp/rsync.log# 目标服务器查看/tmp目录,确认文件实时同步[root@sl2 ~]# ls /tmp/etc
abc test
六、总结
rsync 是 Linux 下强大的数据同步工具,基础用法可满足本地、远程定时同步需求;结合 inotify-tools 后,能实现文件变化的实时捕捉与同步,适配对数据一致性要求高的场景。通过合理配置服务端、客户端参数,以及脚本编写,可灵活搭建高效、可靠的数据同步方案。