开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

RHCE系列之备份工具----镜像备份Rsync

简介:
+关注继续查看

    我一哥们最近在搞备份,需要用到rsync。因此,鄙人就简单总结了下rsync,也就有了这篇博文,希望对51的博友们有所帮助!



RSYNC简介:

    Rsync (remote sync)是一款开源、快速,多功能、可实现增量的本地或远程数据镜像同步备份优秀工具。它可通过 LAN/WAN 快速同步多台主机间的文件。Rsync 本来是用以取代rcp 的一个工具,它当前由 Rsync.samba.org 维护。Rsync 使用所谓的“Rsync演算法”来使本地和远程主机之间的文件达到同步,该算法只传送两个文件中的不同部分,而不是每次都整份传送,因此速度相当快。

      Rsync支持大多数的类 Unix 系统,无论是 Linux、Solaris 还是 BSD 上都经过了良好的测试。此外,它在windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS。

 


RSYNC的特性:

1、支持拷贝特殊文件如链接、设备等。

2、可以有排除制定文件或目录同步的功能,相当于打包命令tar。

3、可以做到保持原来文件或目录的权限、时间、软硬连接等所有属性均不改变。

4、可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高。

5、可以使用rcp,rsh,ssh等方式配合传输文件,也可以通过直接的socket连接。

6、支持匿名的或认证的进程模式传输,方便进行数据备份及镜像

7、优化的流程,文件传输效率高

 


RSYNC工作模式:

Rsync有四种工作模式,具体如下:

1、列表模式

      和ls -l相似,负责列出源的内容。不仅可以看本地还可以看远端。

2、shell模式,也称为本地模式

      和cp相似,本地拷贝文件

3、远程shell模式,可以通过通过rcp,ssh等通道传输

      和rcp相似,不过可以实现增量备份,并且能够通过安全的ssh方式进行数据传输。

4、服务器模式

      在这种模式下,rsync 守护进程在一台机器上永久运行,接收文件传输请求。可以把文件发送给守护进程,也可以向它请求文件。服务器模式非常适合创建中心备份服务器或项目存储库。


      以上是对rsync做的一个简单介绍,下面来安装一下rsync,然后再详细介绍我们rsync的四种工作模式!

1
2
3
4
环境
CentOS6.5 x86_64位 采用最小化安装,系统经过了基本优化
selinux为关闭状态,iptables为无限制模式
源码包存放位置:/root

在安装之前,首先让我们看下系统上是否已经安装了rsync。

1
2
[root@rsync-server ~]# rpm -qa|grep rsync
rsync-3.0.6-9.el6_4.1.x86_64

如果出现如上的情况,说明我们的系统已经安装了rsync。如果没有出现,就说明没有安装。

如果系统没有安装,我们就需要自己安装了。安装rsync的方式一共有2种,一种是基于包管理器安装,比如rpm包之类,另外一种是基于源码安装。

1、基于包管理器安装

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


2、基于源码安装

  a、安装缺少的gcc和库文件等

1
[root@rsync-server ~]# yum install -y kernel-headers glibc-headers glibc-devel libgomp gcc  gcc-c++

   b、安装rsync

1
2
3
4
[root@rsync-server ~]# wget  http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz
[root@rsync-server ~]# tar zxvf rsync-3.1.1.tar.gz
[root@rsync-server ~]# cd rsync-3.1.1
[root@rsync-server rsync-3.1.1]# ./configure --prefix=/usr/local/rsync[root@rsync-server rsync-3.1.1]# make && make install

     这样子rsync就安装完成了。

  我们需要注意的是,源码安装的rsync默认是没有加入xinetd的,因此你会发现,在/etc/xinetd.d目录下找不到rsync文件。

 

下面,我就开始带着大家一起来了解下rsync的四种模式!

 

1、列表模式(list mode)

     Rsync的列表模式,即等同于在实现 ls -l 的功能。我们可以通过分别执行rsync和ls命令来观察区别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@rsync-server /]# rsync /rsync
drwxr-xr-x        4096 2014/06/04 00:45:06 rsync
[root@rsync-server /]# rsync /rsync/
drwxr-xr-x        4096 2014/06/04 00:45:06 .
-rw-r--r--           0 2014/06/04 00:45:01 a
-rw-r--r--           0 2014/06/04 00:45:03 b
-rw-r--r--           0 2014/06/04 00:45:05 c
-rw-r--r--           0 2014/06/04 00:45:06 d
[root@rsync-server /]# ls -dl /rsync
drwxr-xr-x. 2 root root 4096 Jun  4 00:45 /rsync
[root@rsync-server /]# ls -l /rsync
total 0
-rw-r--r--. 1 root root 0 Jun  4 00:45 a
-rw-r--r--. 1 root root 0 Jun  4 00:45 b
-rw-r--r--. 1 root root 0 Jun  4 00:45 c
-rw-r--r--. 1 root root 0 Jun  4 00:45 d

     通过上面的输出,可以看出来,rsync后跟文件或目录和ls -l后跟文件和目录的效果大体相同(不一样的细节,这里不多描述)。需要注意的是,如果你身处某个目录,你ll能查看到所在目录下文件列表的详细信息。但是你执行rsync会报错,因此rsync必须后跟文件或目录才能查看相关的详细信息。

     另外,rsync的列表模式是支持对远端的目录进行查看的,而ls -l是不具备这个功能的。

1
[root@rsync-server /]#




2、Shell模式(shell mode)

     在 RSYNC 的 shell 模式(本地模式)中,我会列举rsync命令的用法和常规选项信息。

     首先来看下 RSYNC 的命令语法:

1
 rsync [OPTION]... SRC [SRC]... DEST

执行rsync --help可得到上面输出,当然输出不仅仅只有上面这一条,我仅仅将shell模式的语句摘了出来。下面对该条语句进行拆解。

1
2
3
4
5
 rsync  [OPTION]...  SRC  [SRC]...  DEST
1)rsync为同步的命令
2)[OPTION]... 为同步时的参数选项
3)SRC为源,即需要拷贝的分区,文件或目录等
4)[DEST]为目地分区,文件或目录等



rsync 常用的参数选项有如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-n : 如果担心命令执行不正确,一同步复制,可能这个复制的后果是致命的,那后果可就严重了,这里我们可以加-n先测试一下    
-v :  --verbose,详细输出模式,显示详细过程    
-q : --quiet,静默模式,尽可能输出少的信息    
-c : --checksum,可以对传输的文件进行较验的,强制对文件传输进行校验    
-r  : --recursive,递归复制    
-p : --perms,保存文件的权限    
-t  : --times,保留文件的时间戳    
-l  : --links,保留文件的符号链接    
-g : --group,保留文件的属组    
-o : --owner,保留文件的属主    
-D : --devices,保留设备文件
-A : --acls,保留acl访问控制列表
-a : --archives归档,复制时可以保存原有的属主属主等属性信息,甚至包括一点额外的属性。等同于-rlptgoD    
-e SSH : 远程复制时,表示使用ssh协议作承载。如果ssh端口不是22,可以用-e ‘ssh -p 22’    
-z : 基于网络时使用,对文件压缩后传输   
--progress : 显示压缩进度条的,简写-P   
--stats : 显示如何执行压缩和传输的,也就是显示传输状态的
--


       更多的详细信息,请通过man rsync来进行查看。
    

       需要注意的是:rsync命令在使用中,如果源参数的末尾有斜线,就会复制指定目录内的内容,而不复制目录本身;如果没有斜线,则会复制目录本身。目标参数的末尾有没有斜线都不影响。

    接下来,请看下面两个例子:

1
2
[root@rsync-server /]# rsync -a /rsync /backup  #会把目录rsync直接同步至/backup目录中去
[root@rsync-server /]# rsync -a /rsync/ /backup #会把目录中的data/中的内容同步至/backups目录中

 

 

现在,我们在shell模式下,进行rsync的同步。

实例1:测试本地rsync同步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@rsync-server ~]# mkdir /rsync     #创建rsync测试目录
[root@rsync-server ~]# touch /rsync/test    #在rsync测试目录下建立test.txt文件
[root@rsync-server ~]# chmod -R 700 /rsync     #授权一下以查看同步后是不是保持了权限属性
[root@rsync-server rsync]# ll -a /rsync/
total 8
drwx------.  2 root root 4096 Jun  4 01:01 .
dr-xr-xr-x. 26 root root 4096 Jun  4 01:01 ..
-rwx------.  1 root root    0 Jun  4 01:01 test
[root@rsync-server ~]# rsync -avz /rsync/ /tmp
sending incremental file list
./
test
  
sent 78 bytes  received 34 bytes  224.00 bytes/sec
total size is 0  speedup is 0.00
[root@rsync-server ~]# ls -l /tmp/test 
-rwx------. 1 root root 0 Jun  4 01:01 /tmp/test

上面的例子,演示了将本地/rsync目录下的文件,同步到/tmp目录下。其中使用的参数,-avz上面讲过。如果不明白,可以去上面看每个参数的详细介绍。

 

3、远程shell模式(remote shell mode)

远程shell模式的话,和shell模式是异曲同工。只不过,因为是要通过远程,因此我们需要指定远程主机的IP,如果采用ssh我们还需要指定ssh的端口等等。

远程shell模式,常规分为如下两种情况,其语法分别为:

1
2
拉取pull :rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
推送push:rsync [OPTION]... [USER@]HOST:SRC [DEST]

    下面为大家拆解一下命令:

1
2
3
4
5
1)Rsync为同步的命令
2)[OPTION]... 为同步时的参数选项
3)[USER@]HOST... 为Rsync同步的远程的连接用户和主机地址
4)SRC为源,即需要拷贝的分区、文件或目录等,和HOST之间用一个冒号连接
5)[DEST]为目地分区、文件或目录等

大家可以发现,拉取和推送,不一样的地方就是源和目标换了位置。其中拉取,表示从远端主机把数据同步到执行命令的本地主机相应目录。(需要注意,拉取的话,远端主机上一定要安装rsync,不然会拉取失败)。推送,表示从本地主机执行命令把本地的数据同步到远端主机指定目录下

 

    下面我们来看一个案例:

拉取实例:

    老大要求拉取172.16.100.1这台服务器上的etc目录到我们的备份服务器172.16.100.2上的/backup目录下。

操作:

通过ssh连接到172.16.100.1这台服务器上,然后执行如下命令:

1
2
3
4
5
6
7
[root@rsync-server ~]# rsync -vzrtopg --progress -e ‘ssh -p 22’ root@172.16.100.1:/etc /backup
语法说明:
1)-vzrtopg 相当于上文的-avz,表示同步时文件和目录属性不变。
2)--progress 显示同步的过程,可以用-p替换
3)-e ‘ssh -p 22’,表示通过ssh的通道传输数据。如果ssh是默认的22号端口,此处的-p 22可省略。
4)root@192.168.1.111:/etc 远程的主机用户,地址,路径
5)/backup本地(172.16.100.2)的路径


推送实例:

公司内部有一台svn服务器(172.16.100.2),公司站点的更新代码通过后台的测试服务器测试之后,经过svn同步到svn服务器。老大要求你将svn服务器上的代码,推送到前台的服务器(172.16.100.1)上。

操作:通过ssh连接到svn服务器(172.16.100.2)上,然后执行如下命令

1
[root@rsync-server ~]# rsync -avz --progress -e ‘shh -p 22’ /webrepo root@172.16.100.1:/data/web/html

特别说明:

1)上面两个例子中的数据同步都是加密传输的,因为是通过ssh通道进行数据传输的。

2)在传输前需要进行连接用户(一般为系统用户)密码验证,需要手工输入。这里我们可以通过配置ssh互信来实现免验证方式同步。

3)rsync软件必须安装在本地及远程服务器上

 

 

4、服务模式(daemon mode)

RSYNC的服务模式,部署时分为rsync的服务端和rsync的客户端。需要注意的是,rsync 的服务端和客户端都是一个软件包,如果你启用了 rsync 的服务模式,则该主机就变成 rsync 服务器。因此我们需要将 rsync 分别安装于服务端和客户端,服务端和客户端使用同一个 rsync 软件包来实现远程镜像和定期同步更新。

rsync 服务端可同时备份多个客户端的数据,多个服务端备份一个客户端的数据。 rsync 默认端口为 873,服务器在该端口接收客户的匿名或者认证方式的备份请求。

rsync 服务端在使用之前需要进行必要的配置,其配置文件为 /etc/rsyncd.conf,该文件默认没有,需要自己手动创建。Rsync服务端通过/etc/rsyncd.conf进行认证、访问、日志记录等控制,该配置文件包括全局参数、模块参数等设置。

rsyncd.conf 文件中 [module] 之前的所有参数为全局参数,也可以在全局参数部分定义模块参数。在这种情况下该参数的值就是所有模块的默认值。全局参数设置程序使用的端口号,指定消息文件、日志文件 pid 文件以及发送日志消息的级别。模块参数主要定义服务端哪个目录需要被同步。用户可根据不同的需要指定多个模块,每个模块对应需要备份的一个目录树,即若有 N 个需要备份的目录树,则需要 N 个模块与之对应。模块中可以定义许多参数。下面,我们拿出来一个rsyncd.conf文件,来给大家做详解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
uid = rsync    # 指定的模块传输文件时所用的用户身份
gid = rsync    # 指定的site模块传输文件时所用的用户组身份
port=873       # 默认端口
use chroot = no # 默认为true,修改为no,增加对目录文件软连接的备份
max connections = 200  # 指定最大并发连接数以保护服务器,超过限制的连接请求将被告知随后再试。默认值为 0,即没有限制。
timeout = 300          # 服务器会话的超时时间
pid file /var/run/rsyncd.pid   # 进程启动后,进程号存放路径
lock file /var/run/rsyncd.lock # 服务启动、停止会用到锁文件
log file /var/log/rsyncd.log   # 指定日志文件的路径
Log fromat = %h %o %f %l %b      # 指定日志记录的格式
motd file /etc/rsyncd.motd     # 登陆消息提示文件,可以不配置。默认为空。
[test]         # 模块名称,名称可以任意写,不过一般是以路径命名,最好见名意
Comment = test # 模块信息描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义
path=/test/    # 指定供备份的目录路径,必须指定该参数。该目录路径是rsync服务端的一个路径,提供给客户端上传或下载
ignore erros   # 忽略错误
read only = false  # 设定是否允许客户上载文件。若为 true 任何上载请求均会失败,若为 false 且客户端拥有服务器目录读写权限则可以上载。默认值为 true 。
write only 设定是否允许客户下载文件。若为 true 任何下载请求均会失败,默认值为 false 
list = false       # 设定当客户请求可以使用的模块列表时,是否列出该模块。若为 false,则创建隐藏的模块。默认值为 true
hosts allow=192.168.137.0/24  # 指定允许客户连接的 IP 地址。可以为单个 IP 地址或整个网段。多个 IP 或网段需要以空格隔开。默认是允许所有主机连接。
hosts deny=*   # 指定拒绝连接的客户IP地址,设置方式和hosts allow相同。
Dont commpress # 指定不进行压缩处理即可传输的文件,默认值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
auth users = rsync_backup  # 该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户不一定是客户端存在的用户。如果"auth users"被设置,那么客户端发出对该模块的连接请求时,需要对用户身份进行验证。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块 ( 也就是匿名方式 )。
secrets file /etc/rsync.password # 虚拟用户的密码文件
exclude = common/   # 用来指定多个由空格隔开的多个文件或目录 ( 相对路径 ),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 --exclude 参数。一个模块只能指定一个 exclude 选项。但是需要注意的一点是该选项有一定的安全性问题,客户端很有可能绕过 exclude 列表,如果希望确保特定的文件不能被访问,那就最好结合 uid/gid 选项一起使用。
pre-xfer exec, post-xfer exec  # 设置可在文件传输前/后执行的命令。若在文件传输前执行的命令失败,则取消本次传输操作。


以上就是,rsyncd.conf的详细配置信息了。我将很多的默认不显示的参数也列举了出来,大家使用的时候可以灵活掌握。

下面,我就带大家来一起配置一个 rsync的服务端和rsync的客户端!

1
2
3
4
5
6
7
环境
CentOS6.5 x86_64位 采用最小化安装,系统经过了基本优化
selinux为关闭状态,iptables为无限制模式
源码包存放位置:/root
服务器架构:
rsync-server:172.16.100.1
rsync-client:172.16.100.2


RSYNC 服务端部署: 

1、安装rsync,并且配置服务端主配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@rsync-server ~]# yum install rsync -y
[root@rsync-server ~]# vim /etc/rsyncd.conf
uid = root
gid = root
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
ignore errors
read only = false
list = false
hosts allow = 172.16.100.0/24
hosts deny = *
auth users = rsync_backup
secrets file /etc/rsync.password
[sunsky]
path = /test


2、创建 rsync.password 作为用户密码文件

1
2
3
4
[root@rsync-server ~]# touch /etc/rsync.passord
[root@rsync-server ~]# chmod 600 /etc/rsyncd.password
[root@rsync-server ~]# vim rsyncd.password  #里面记录条目的格式为“用户 : 密码”
    rsync_backup:redhat


3、(可选)创建 rsync.motd 作为登录消息文件。该文件为选择性配置文件,生产环境不推荐使用。

1
2
3
4
5
[root@rsync-server ~]# touch /etc/rsyncd.motd
[root@rsync-server ~]# vim rsyncd.conf
============================
This is Critical Data Server
=============================


4、创建模块中指定的文件

1
2
[root@rsync-server ~]# mkdir /test
[root@rsync-server ~]# chown root.root /test   #更改目录的权限为rsyncd.conf中uid和gid指定属主和属組


5、以守护进程方式启动 rsync

 Rsync服务端的启动分2种,一种是交给 xinetd 去管理,另外就是自己手动配置守护进程。

 A、手动配置rsync守护进程

1
[root@rsync-server ~]# /usr/bin/rsync --daemon  --config=/etc/rsyncd.conf  #注意如果你的rsyncd.conf文件在/etc/目录下,就不需要再用--config去指定了。--daemon是以守护进程的方式启动

我们可以将上面的命令写入 /etc/rc.local 中,这样当系统启动时,就会自动以守护进程的方式去运行 rsync。

补充:

          重启rsync的组合命令

1
2
3
[root@rsync-server ~]# pkill rsync  #关闭rsync服务
[root@rsync-server ~]# rsync --daemon #启动rsync服务
[root@rsync-server ~]# ps -ef | grep rsync   #检查是否启动

 

B、交由xinetd管理

1
2
3
4
[root@rsync-server ~]# yum install xinetd  #安装xinetd
[root@rsync-server ~]# vim /etc/xinetd.d/rsync 
     disable= no  # 默认为yes,需要将他设置为no,让xinetd接管rsync服务。注意,如果你使用手动的方式,这里就修改为no,即拒绝xinetd接管rsync服务。
[root@rsync-server ~]# /etc/init.d/xinetd  start # 启动xinetd服务,则默认会以守护进程方式启动rsync 服务


6、检查服务状态

1
2
3
4
[root@rsync-server ~]# netstat -lntup |grep 873
[root@rsync-server test]# netstat -lntup |grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      10234/rsync         
tcp        0      0 :::873                      :::*                        LISTEN      10234/rsync

或者

1
2
3
4
5
[root@rsync-server ~]# lsof -i tcp:873 
[root@a test]# lsof -i tcp:873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   10234 root    3u  IPv4  93239      0t0  TCP *:rsync (LISTEN)
rsync   10234 root    5u  IPv6  93240      0t0  TCP *:rsync (LISTEN)


补充:

    手动启动rsync的常见参数:

     

1
2
3
4
5
6
[root@rsync-server ~]# rsync --daemon   # daemon 表示以守护进程的方式启动rsync服务
常用启动参数:
--daemon   # 表示以守护进程的方式启动rsync服务
--address  # 绑定指定ip地址提供服务,即服务器是多网卡模式或多虚拟IP模式,需要指定某个固定ip提供服务
--config=FILE  # 更改配置文件路径,而不去使用默认的/etc/rsyncd.conf
--port=PORT    # 更改其它端口提供服务,而不去使用模式的873端口。


  

以上即为rsync服务端的整个配置步骤了!

RSYNC 服务端已经部署完毕,接下来如果要使用的话,肯定还需要搭配 rsync 客户端才行!下面就来看,rsync客户端怎么部署!


RSYNC 客户端部署

RSYNC 客户端部署起来非常简单,我们仅仅需要安装 rsync 软件,然后创建一个本地密码文件。该密码文件为对应rsync 服务端配置文件里面每个模块下面的虚拟用户的密码,以此来实现免密码同步!

操作如下:

1、安装rsync

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


2、配置本地密码文件

1
2
3
4
[root@rsync-server ~]# vim /etc/rsync.password   # 该文件里面仅存放密码即可
   redhat
[root@rsync-server ~]# cat /etc/rsync.password   # 配置完毕之后检查
[root@rsync-server ~]# ll /etc/rsync.password    # 配置完毕之后检查

 


OK!!!

RSYNC的服务端和客户端都配置完毕,现在我们可以进行测试了。

我们需要去rsync客户端,来完成下面的测试操作。需要注意,测试同样分为两种情况,每种情况又有两种语法写法,分别为:

1
2
3
4
拉取:①rsync [OPTION...] [USER@]HOST::SRC... [DEST]
      rsync [OPTION...] rsync//[USER@]HOST[:PORT]/SRC... [DEST]
推送:①rsync [OPTION...] SRC... [USER@]HOST:DEST
      rsync [OPTION...] SRC...  rsync//[USER@]HOST[:PORT]/DEST


特别值得注意的是,与远程shell模式命令不同的是,第①种语法格式, [USER@]HOST::SRC和 [USER@]HOST::DEST结尾处,均为双冒号连接SRC或DEST。另外,这个SRC或DEST已经不再是路径了,而是守护进程中配置的模块的名称了。

 

下面列举我们在rsync客户端上,对rsync服务端进行拉取或推送的操作范例:

第一种格式:

拉取:

1
rsync -avzP rsync_backup@172.16.100.1::sunsky /test/ --password-file=/etc/rsync.password


推送:

1
rsync -avzP /test rsync_backup@172.16.100.1::sunsky --password-file=/etc/rsync.password


第二种格式:

    拉取:

1
rsync -avzP rsync//rsync_backup@172.16.100.1:/sunsky/ /test/ --password-file=/etc/rsync.password


    推送:

1
rsync -avzP /test/ rsync//resync_backup@192.168.1.111:/sunsky/  --password-file=/etc/rsync.password


 

       以上就是,rsync整个服务端和客户端的配置。

       在生产环境中,我们可以专门部署一台rsync服务器,专门负责接收业务服务器的日志归档和配置文件归档。当然,我们也可以部署在svn服务器之前,来作为网站代码推送的服务器,或者说一台web服务器专门用来做分发的时候。

 但是我们知道,我们的日志归档都是在凌晨,因此我们不可能天天晚上去做向rsync服务端的推送操作。并且,如果日常web内容做分发的次数频繁的话,我们不可能每时每刻都盯着它去做手动推送。因此我们可以借助crontab计划任务来实现定时推送。


1
2
3
4
5
[root@rsync-server ~]# crontab -e
# Automatic synchronization log files at 1 a.m
* 1 * * * /usr/bin/rsync-avzP rsync_nobody@172.16.100.1::weblog /data/log/  --password-file=/etc/rsyncd.passwd /dev/null 2>&1
# Automatic distribution site file points every second of every day
* * * * * /usr/bin/rsync-avzP --delete rsync_nobody@172.16.100.1::webdata /data/web/  --password-file=/etc/rsyncd.passwd /dev/null 2>&1


注意:上面用到的weblog和webdata都是模块的名字,我们在rsyncd.conf里面指定模块所对应的目录路径。

 

但是,我们仍然会发现一个问题,虽然使用计划认为能满足我们的日志归档定时推送到rsync服务端,但是每次都有1分钟的延迟。并且,在某些作为网站发布平台的情况下,rsync每分钟都去检查整体一致性然后做推送,这样子非常耗费资源。因此,我们需要对此种情况进行改良。在后面一篇博文,我会带大家一起了解rsync+inotify,借助rsync+inotify来实现实时同步文件。

 

在本文最后面,我贴上rsync的--delete和--exclude的操作效果!


--delete操作如下:

1
2
3
4
[root@rsync-server ~]# ls /test/  #查看rsync服务端,sunsky模块下的/test目录的文件列表
e
[root@rsync-client ~]# ls /test/   #查看rsync客户端本地/test目录的文件列表
a  b  c  d


以上为操作前的环境,请保持这个环境一致,然后做如下操作:(下面的推送和拉取都是基于此环境做的)

在rsync客户端做拉取操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@rsync-client ~]# rsync -avzP --delete rsync_backup@172.16.100.1::sunsky /test/ --password-file=/etc/rsync.password
receiving incremental file list
deleting d
deleting c
deleting b
deleting a
./
e
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/2)
  
sent 86 bytes  received 143 bytes  458.00 bytes/sec
total size is 0  speedup is 0.00
[root@rsync-client ~]# ls /test/
[root@rsync-server ~]# ls /test/
e


 我们发现,rsync客户端本身的a,b,c,d文件都消失了,取而代之的是e文件,并且我们在rsync的拉取过程中,也能看到删除操作!

在rsync客户端做推送操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@rsync-client ~]# rsync -avzP --delete /test/ rsync_backup@172.16.100.1::sunsky --password-file=/etc/rsync.password
sending incremental file list
./
deleting e
a
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=3/5)
b
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=2/5)
c
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=1/5)
d
           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=0/5)
  
sent 201 bytes  received 87 bytes  576.00 bytes/sec
total size is 0  speedup is 0.00
[root@rsync-client ~]# ls /test/
a  b  c  d
[root@rsync-server ~]# ls /test/
a  b  c  d


我们发现,rsync服务端本身的e文件消失了,取而代之的是a,b,c,d文件,并且我们在rsync的推送过程中,也能看到删除操作!



--exclude操作如下:

1
2
3
4
5
6
7
8
9
10
11
12
[root@rsync-server ~]# tree /test/
/test/
0 directories, 0 files
[root@rsync-client ~]# tree /test/
/test/
├── a
├── b
├── c.txt
├── x
│   └── xxx.txt
└── x.txt
2 directories, 4 files


以上为操作前的环境,请保持这个环境一致,然后做如下操作:

在rsync客户端做推送操作:


1
2
3
4
5
6
7
8
9
[root@rsync-client ~]# rsync -avz --exclude=*.txt /test/ root@172.16.100.1:/test/
root@172.16.100.1's password: 
sending incremental file list
./
a
b
x/
sent 154 bytes  received 57 bytes  60.29 bytes/sec
total size is 0  speedup is 0.00


在rsync服务端进行查看同步效果:


1
2
3
4
5
6
[root@rsync-server ~]# tree /test/
/test/
├── a
├── b
└── x
1 directory, 2 files


我们可以发现,只要是能被*.txt匹配到的都没有被推送过去!

如果说,你有很多需要排除的目录或者文件,不希望他们被同步过去,此时你可以使用--exclude-from参数,该参数后面跟一个文件,你可以将需要匹配排除的项写到该文件里面!

例子:

在rsync客户端做推送操作:


1
2
3
4
5
6
7
8
9
10
11
12
[root@rsync-client ~]# cat /tmp/exclude 
x
*.txt
[root@rsync-client ~]# rsync -avz --exclude-from=/tmp/exclude /test/ root@172.16.100.1:/test/
root@172.16.100.1's password: 
sending incremental file list
./
a
b
xx/
sent 151 bytes  received 57 bytes  59.43 bytes/sec
total size is 0  speedup is 0.00


在rsync服务端进行查看同步效果:   

  

1
2
3
4
5
6
[root@rsync-server ~]# tree /test/
/test/
├── a
├── b
└── xx
1 directory, 2 files


以上就是我们的--exclude和--exclude-from的详细用法!










本文转自 aaao 51CTO博客,原文链接:http://blog.51cto.com/nolinux/1431426,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JVM系列之:深入学习方法内联
JVM系列之:深入学习方法内联
36 0
深入学习SAP UI5框架代码系列之一:UI5 Module的懒加载机制
深入学习SAP UI5框架代码系列之一:UI5 Module的懒加载机制
91 0
深入学习SAP UI5框架代码系列之八:谈谈 SAP UI5 的视图控件 ID,以及 SAP UI5 视图和 Angular 视图的异同
深入学习SAP UI5框架代码系列之八:谈谈 SAP UI5 的视图控件 ID,以及 SAP UI5 视图和 Angular 视图的异同
32 0
深入学习SAP UI5框架代码系列之二:UI5 控件的渲染器
深入学习SAP UI5框架代码系列之二:UI5 控件的渲染器
48 0
深入学习SAP UI5框架代码系列之五:SAP UI5控件的实例数据修改和读取逻辑
深入学习SAP UI5框架代码系列之五:SAP UI5控件的实例数据修改和读取逻辑
94 0
深入学习SAP UI5框架代码系列之五:SAP UI5控件的实例数据修改和读取逻辑
这是Jerry 2021年的第6篇文章,也是汪子熙公众号总共第277篇原创文章。 系列目录 (0) SAP UI5应用开发人员了解UI5框架代码的意义 (1) SAP UI5 module懒加载机制 (2) SAP UI5 控件渲染机制 (3) HTML原生事件 VS SAP UI5 Semantic事件 (4) SAP UI5控件元数据的元数据实现 (5) SAP UI5控件的实例数据修改和读取逻辑(本文) (6) SAP UI5控件数据绑定的实现原理
60 0
rsync 简单使用 非默认ssh端口 分别从远程获取及推送本地的文件到远程
rsync: did not see server greetingrsync error: error starting client-server protocol (code 5) at main.
1881 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载