一、命令介绍

  rsync(remote synchronizetion)主要用于本地和远程主机之间数据的同步,支持增量和全量的两种同步方式。
  在同步数据的时候,默认情况下,rsync 通过其独特的“quick check”算法快速检查文件或目录的大小、最后修改时间对比是否要同步,当然我们也可以通过一些选项来自定义检查模式。

rsync 有本地、远程、守护进程3种传输方式,格式如下:

rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

注:
":"  表示使用通过远程shell连接
"::"和"rsync://"  表示连接到rsync守护进程,并要求SRC或DEST以模块名称开头。

常用选项:

选项 含义
-a 归档模式传输,等于-tropgDl
-v 详细模式输出、打印速率、文件数量等
-z 传输时进行压缩以提高效率
-r 递归传输目录及子目录,即目录下得所有目录都同样传输。
-t 保持文件时间信息
-o 保持文件属主信息
-p 保持文件权限
-g 保持文件属组信息
-l 保留软连接
-P 显示同步的过程及传输时的进度等信息
-D 保持设备文件信息
-L 保留软连接指向的目标文件
-e 使用的信道协议,指定替代rsh的shell程序
–exclude=PATTERN 指定排除不需要传输的文件模式,详细请参阅man帮助手册筛选规则部分
–exclude-from=file 文件名所在的目录文件
–bwlimit=100 限速传输
–partial 断点续传
–delete 让目标目录和源目录数据保持一致
–progress 在传输过程中显示进度

检查模式相关选项:

选项 含义
-I 关闭默认的“quick check”算法检查,更新所有文件
-c 改变默认检查模式,使用校验
–size-only 改变默认检查模式,只检查文件大小

二、使用示例

安装:

1、centos
# 配置文件:/etc/rsyncd.conf,服务名称:syncd
[root@cp1 ~]# yum install -y rsync

2、ubuntu
# 默认已安装rsync,rsync服务默认不是启动的,我们要修改配置文件。
root@cp2:~# sed -i '/^RSYNC_ENABLE=/c RSYNC_ENABLE=true' /etc/default/rsync

# 拷贝模板配置文件,服务名称:rsync
root@cp2:~# cp /usr/share/doc/rsync/examples/rsyncd.conf /etc 

示例1,利用 rsync 拷贝显示进度:

[root@cp1 ~]# rsync --progress -av test.file /tmp/
sending incremental file list
test.file
    674,791,424   6%  161.00MB/s    0:01:01 

示例2,从本地同步文件到远程服务器:

# 将本地的 test1 同步到远程 172.16.1.11 的主机上。
[root@cp1 ~]# rsync -avz test1 root@172.16.1.11:/root/

# 如果端口不是22,使用以下命令
[root@cp1 ~]# rsync -avz '-e ssh -p 2222' test1 root@172.16.1.11:/root/

示例3,利用 rsync 限速同步:

[root@nfs ~]# rsync -avz --bwlimit 1m -P /opt/1.txt rsync_backup@172.16.1.11::backup

示例4,rsync 实现数据无差异同步:

# 推: 客户端推送到服务端,服务端必须与客户端保持一致。
[root@nfs ~]# rsync -avz --delete  -P /opt/ rsync_backup@172.16.1.11::backup

# 拉: 客户端拉取服务端数据,服务端有什么,客户端就有什么,客户端必须与服务端完全一致。
[root@nfs opt]# rsync -avz --delete  rsync_backup@172.16.1.11::backup /opt/

示例5,无需输入密码实现 rsync 推送和拉取:

# 方式一: --password-file
[root@nfs opt]# echo "123456" > /etc/rsync.pass
[root@nfs opt]# chmod 600 /etc/rsync.pass
[root@nfs opt]# rsync -avz --delete  rsync_backup@172.16.1.11::backup /opt/ --password-file=/etc/rsync.pass

# 方式二: 设定环境变量方式
[root@nfs opt]# export RSYNC_PASSWORD=123456    #只当前窗口有用,换一个窗口就没用了(放到脚本中使用,非常的方便)
[root@nfs opt]# rsync -avz --delete  rsync_backup@172.16.1.11::backup /opt/

三、rsync守护进程配置

1、环境

172.16.1.10 作为我们的 rsync 服务端,172.16.1.11 作为我们的 rsync 客户端

[root@server~]# yum install rsync -y
[root@client ~]# yum install rsync -y

2、配置文件

[root@server ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log

[backup]
comment = welcome to oldboyedu backup!
path = /backup

配置文件注解:(官方文档:https://rsync.samba.org/ftp/rsync/rsyncd.conf.html

uid = rsync                        # 指定用户
gid = rsync                        # 指定用户组
port = 873                         # 监听端口
fake super = yes                   # 不需要rsync已root身份运行,就可以存储文件的完整属性
use chroot = no                    # 禁锢推送的数据至某个目录, 不允许跳出该目录
max connections = 10               # 最大同时连接数
timeout = 600                      # 超时时间
ignore errors                      # 忽略错误信息
read only = false                  # 关闭只读,默认yes
list = false                       # 当客户端请求可用模块列表时是否列出此模块
auth users = rsync_backup          # 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd   # 定义rsync服务用户连接认证密码文件路径
log file = /var/log/rsyncd.log     # 指定日志文件
pid file = /var/run/rsyncd.pid     # 指定pid文件
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz      # 不压缩这些后缀的文件

[backup]                 # 定义模块信息,模块名称
comment = commit         # 模块注释信息
path = /backup           # 定义可用目录

3、准备

# 创建rsync进程运行的用户  ( rsync )
[root@server ~]# useradd -M -s /sbin/nologin rsync

# 定义虚拟用户名rsync_bakcup的密码
[root@server ~]# echo "rsync_backup:123456" > /etc/rsync.passwd
[root@server ~]# chmod 600 /etc/rsync.passwd  

# 创建存储的数据的目录/backup
[root@server  ~]# mkdir /backup
[root@server  ~]# chown -R rsync.rsync /backup/

# 启动服务
[root@server  ~]# systemctl restart rsyncd

4、selinux

一般来说都会关闭的,如果是一定要开启,执行以下操作:

[root@server ~]# seinfo -t | grep rsync
   rsync_server_packet_t
   rsync_data_t
   rsync_exec_t
   rsync_t
   rsync_tmp_t
   rsync_var_run_t
   rsync_client_packet_t
   rsync_port_t
   rsync_etc_t
   rsync_log_t
[root@server ~]# semanage fcontext -a -t rsync_data_t /backup
[root@server ~]# restorecon -Rv /backup
[root@server /]# getsebool -a | grep rsync
postgresql_can_rsync --> off
rsync_anon_write --> off
rsync_client --> off
rsync_export_all_ro --> off
rsync_full_access --> off
[root@server /]# setsebool -P rsync_client on

注意:使用seinfo和semanage命令,要安装先setools-console和policycoreutils-python。

5、测试

使用客户端推送 client.txt 文件至服务端的 backup 模块:

[root@client ~]# rsync -avz client.txt rsync_backup@172.16.1.10::backup
Password: 
sending incremental file list
client.txt

sent 93 bytes  received 43 bytes  38.86 bytes/sec
total size is 0  speedup is 0.00

拉取服务端 backup 模块下的数据:

[root@client ~]# rsync -avz rsync_backup@172.16.1.10::backup /opt
Password: 
receiving incremental file list
./
client.txt

sent 50 bytes  received 139 bytes  42.00 bytes/sec
total size is 0  speedup is 0.00
[root@client ~]# cd /opt/
[root@client opt]# ll
total 0
-rw-r--r--. 1 root root 0 Apr 15 03:58 client.txt

发表回复

验证码: − 1 = 1