Linux备份工具----镜像备份Rsync

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

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的四种工作模式!

环境

CentOS6.5 x86_64位 采用最小化安装,系统经过了基本优化

selinux为关闭状态,iptables为无限制模式

源码包存放位置:/root


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

[root@rsync-server ~]# rpm -qa|grep rsync

rsync-3.0.6-9.el6_4.1.x86_64

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


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

1、基于包管理器安装

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

2、基于源码安装

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

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

b、安装rsync

[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命令来观察区别。

[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是不具备这个功能的。

[root@rsync-server /]#

2、Shell模式(shell mode)

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

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

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

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

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

1)rsync为同步的命令

2)[OPTION]... 为同步时的参数选项

3)SRC为源,即需要拷贝的分区,文件或目录等

4)[DEST]为目地分区,文件或目录等

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

-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命令在使用中,如果源参数的末尾有斜线,就会复制指定目录内的内容,而不复制目录本身;如果没有斜线,则会复制目录本身。目标参数的末尾有没有斜线都不影响。

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

[root@rsync-server /]# rsync -a /rsync /backup  #会把目录rsync直接同步至/backup目录中去

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

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

实例1:测试本地rsync同步

[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模式,常规分为如下两种情况,其语法分别为:

拉取pull :rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

推送push:rsync [OPTION]... [USER@]HOST:SRC [DEST]

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

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这台服务器上,然后执行如下命令:

[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)上,然后执行如下命令

[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软件必须安装在本地及远程服务器上

相关推荐