本文由秀依林枫提供友情赞助,首发于烂泥行天下

这几天刚好有空就打算开始学习linux下的文件同步软件rsync,在学习rsync时,我们可以分以下几个步骤进行:

1、 rsync是什么

2、 rsync的工作原理

3、 rsync优点

4、 rsync认证方式

5、 安装rsync

6、 rsync命令参数详解

7、 配置rsync

8、 rsync的启动与关闭

9、 rsync同步实例

说明:rsync服务器与客户端使用的OS均为:centos 6.5 64bit。

一、rsync是什么

在开始正式学习rsync之前,我们先来回答这个问题:rsync是什么。

rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。

rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快。

除此之外,rsync可拷贝、显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。

二、rsync的工作原理

1、客户端构造FileList,FileList包含了需要与服务器同步的所有文件信息对name->id(id用来唯一表示文件例如MD5)。

2、客户端将FileList发送到服务器。

3、服务器上rsync处理客户端发过来的FileList,构建新的NewFileList。其中根据MD5值比较,删除服务器上已经存在的文件信息对,只保留服务器上不存在或变化的文件。

4、客户端得到服务器发送过来的NewFileList,然后把NewFileList中的文件重新传输到服务器。

三、rsync优点

rsync有以下几个优点:

1)可以镜像保存整个目录树和文件系统。

2)可以很容易做到保持原来文件的权限、时间、软硬连接等。

3)无需特殊权限即可安装。

4)拥有优化的流程和比较高的文件传输效率。

5)可以使用shell(rsh、ssh)方式来传输文件。

6)支持匿名运行。

7)与scp相比,rsync传输速度绝对远远超过scp的传输速度。

我们在局域网中经常用rsync和scp传输大量mysql数据库文件,发现rsync传输文件速度至少要比scp快20倍以上。

所以如果需要在Liunx/Unix服务器之间互传海量数据时,建议选择rsync进行传输。

四、rsync认证方式

rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。在平时使用过程,我们使用最多的是rsync-daemon方式。

注意:在使用rsync时,服务器和客户端都必须安装rsync程序

4.1 rsync-daemon认证

rsync在rsync-daemon认证方式下,默认监听TCP的873端口。

rsync-daemon认证方式是rsync的主要认证方式,这个也是我们经常使用的认证方式。并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。

注意:rsync-daemon认证方式,需要服务器和客户端都安装rsync服务,并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。客户端启动不启动rsync服务,都不影响同步的正常进行。

4.2 ssh认证

rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传输,类似于scp工具。此时同步操作不在局限于rsync中定义的同步文件夹。

注意:ssh认证方式,不需要服务器和客户端配置rsync配置文件,只需要双方都安装rsync服务,并且也不需要双方启动rsync。

若rsync服务端SSH为标准端口,此时rsync使用方式如下:

rsync -avz /root/test root@192.168.199.248:/root/

若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定。使用方式如下:

rsync -avz /root/test -e 'ssh -p1234' root@192.168.199.248:/root/

五、安装rsync

安装rsync,我们可以分为两种方式:源码方式安装和RPM方式安装。

注意:rsync软件无论是服务器端还是客户端都是同一个软件包。

下面我们就一一讲解,这两种方式的安装方法。

5.1 源码方式安装

源码方式安装rsync,我们需要到其官网下载对应的安装包。rsync官网:rsync.samba.org。如下:

我们使用wget进行下载,如下:

wget http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz

安装包下载完毕后,我们开始解压并安装。如下:

tar -xf rsync-3.1.1.tar.gz

./configure

make &&make install

注意:源码安装rsync时,其编译时所需要的gcc库文件尽量提前安装完毕。

rsync源码安装会把rsync默认安装到/usr/local/目录下,我们可以通过相关帮助进行查看到。如下:

./configure --help

rsync安装完毕后,我们可以查看rsync的使用帮助。我们此时需要切换到/usr/local/bin目录下,如下:

/usr/local/bin

rsync -h

源码方式安装的rsync,要使其开机启动的话。我们可以直接把启动命令放入到rc.local文件中。如下:

echo "/usr/local/bin/rsync --daemon --config=/etc/rsyncd.conf">>/etc/rc.local

也可以写成:

echo "/usr/local/bin/rsync --daemon">>/etc/rc.local

cat /etc/rc.local

5.2 RPM方式安装

RPM方式安装rsync比较简单,直接使用yum进行安装即可。如下:

yum -y install rsync

查看rsync安装的位置,如下:

rpm -ql rsync-3.0.6-12.el6.x86_64

通过上图可以看到RPM方式安装的rsync是把rsync安装到/usr/bin目录下的,并且还生成一个/etc/xinetd.d/rsync文件。

查看安装时产生的帮助文档,如下:

more /usr/share/doc/rsync-3.0.6/README

安装结束后,我们可以查看下rsync命令所在的目录以及rsync的帮助。如下:

which rsync

rsync –-help

通过上图可以很明显的看到rsync确实被安装到了/usr/bin目录下。

RPM方式安装的rsync,要使其开机启动的话,我们也可以让其与源码方式安装的一样进行开机启动。

除此之外还有一种方法,可以使其开机启动。如果你注意观察的话,会发现rsync在安装时生成的/etc/xinetd.d/rsync文件。

在centos下rsync默认以xinetd方式运行rsync服务。所以RPM方式安装的话rsync,我们只需启动xinet服务即可。

但是在启动xinetd服务之前,我们还需要配置文件/etc/xinetd.d/rsync,如下:

vi /etc/xinetd.d/rsync

配置完毕后,我们还需要安装xinetd软件包,否则无法启动xinetd服务。如下:

yum -y install xinetd

/etc/init.d/xinetd start

chkconfig xinetd on

netstat -tunlp |grep 873

六、rsync命令参数详解

rsync安装完毕后,我们来查看下rsync命令的帮助,如下:

rsync --help

6.1 rsync几个重要参数

我们先在此大致介绍下经常使用的几个参数:-v,-a,-z,有关这些参数的具体说明详见这篇文章《烂泥:【转】rsync命令参数详解》。

-v, --verbose详细模式输出。

-a, --archive归档模式,表示以递归方式传输文件,并保持所有文件属性不变。

-z, --compress对备份的文件在传输时进行压缩处理。

--delete:删除那些DST中存在而在SRC中没有的文件。

6.2 rsync六种工作模式

除此上述几个参数之外,我们还注意到上图中rsync的七个命令格式:如下:

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

2)rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

3)rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

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

5)rsync [OPTION]... [USER@]HOST:SRC [DEST]

6)rsync [OPTION]... [USER@]HOST::SRC [DEST]

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

这七个命令格式就是代表rsync六种不同的工作模式,其中第四种和第七种模式没有多大的区别。在这几种模式中第三种和第六种模式是我们经常使用的,特别是第三种模式。

这六种模式总体上可以用两个词进行区分:推送、拉取。

推送就是在客户端上执行rsync命令,目的是把客户端需要同步的文件推送到服务器上。

拉取也是在客户端上执行rsync命令,目的是把服务器上的文件拉取到本地。

注意:无论是推送和拉取,rsync命令都是在客户端执行,只是命令的格式不同而已。

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

同步本地文件,从一个目录同步到另外一个目录。如:rsync -avz /data /backup,表示把本地/data目录下的文件同步到本地/backup目录下。

2) rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

使用一个远程shell程序(如rsh、ssh)来实现把本地的文件同步到远程机器上。此种方式属于推送方式。如:rsync -avz /data test@192.168.199.247:/backup,表示把本地/data目录下的文件同步到服务器192.168.199.247的/backup目录下。

3) rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

把本地的文件同步到远程服务器上,其中DEST表示的是rsync服务器的认证模块名。此种方式属于推送方式。如:rsync -avz /data test@192.168.199.247::backup --password-file=/etc/rsyncd.password,表示把本地/data目录下的文件同步到服务器192.168.199.247的backup模块下path路径下。

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

列出远程机器的文件列表。这类似于ls命令,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://test@192.168.199.247/backup,表示在本机列出服务器192.168.199.247的/backup目录下的内容,如下:

5) rsync [OPTION]... [USER@]HOST:SRC [DEST]

把远程机器的文件同步到本地,此种方式属于拉取方式。如:rsync -avz test@192.168.199.247:/backup /data,表示把192.168.199.247的/backup目录下文件同步到本地/data目录下。

6) rsync [OPTION]... [USER@]HOST::SRC [DEST]

把远程机器的文件同步到本地,此种方式属于拉取方式。如:rsync -avz test@192.168.199.247::backup --password-file=/etc/rsyncd.password /data,表示把192.168.199.247的backup模块path路径下的文件同步到本地/data目录下。

七、配置rsync

rsync安装完毕后,我们就需要配置rsync。而对于rsync服务器来说,最重要和最复杂的就是它的配置了。

rsync的配置分为服务器端和客户端,下面我们分开一一讲解。

7.1 rsync服务器端配置

rsync服务器端需要两个配置文件:rsyncd.conf、rsyncd.password。

其中rsyncd.conf默认存放在/etc/目录下,同时它也是rsync服务器的主配置文件。该文件配置了rsync服务器的控制认证、访问、日志记录等等。而rsyncd.password主要用于存储rsync用户名和密码。

但是在rsync安装完毕后后是不会生成以上这两个配置文件的,需要我们手工进行创建。

rsyncd.conf配置文件内容如下:

cat /etc/rsyncd.conf

uid = root

gid = root

user chroot = no

max connections = 200

timeout = 600

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/run/rsyncd.log

[backup]

path = /backup/

ignore errors

read only = no

list = no

hosts allow = 192.168.199.0/255.255.255.0

auth users = test

secrets file = /etc/rsyncd.password

[www]

path = /www/

ignore errors

read only = no

list = no

hosts allow = 192.168.199.0/255.255.255.0

auth users = apache

secrets file = /etc/rsyncd.password

有关rsync配置文件的详细讲解,看下篇文章《烂泥:rsync配置文件详解》。

rsync默认是在nobody用户下运行的,但是我们为了以后同步时不为各种权限的事情烦恼,就让其在root用户下运行。

配置文件创建完毕后,我们来创建密码文件。如下:

echo "test:test">>/etc/rsyncd.password

echo "apache:apache">>/etc/rsyncd.password

cat /etc/rsyncd.password

注意:该密码文件中的用户和密码可以进行自定义,同时该用户不一定要在服务器中的系统用户存在。

密码文件创建完毕后,要把其权限要设置为600,否则会在以后同步时提示验证出错。如下:

chmod 600 /etc/rsyncd.password

一个rsync配置文件中可以包含多个认证模块,同时一个密码文件中也可以存放多个用户和其对应的密码。其中每一个认证模块可以对应不同的客户端。

以上两个文件创建完毕后,我们来创建其对应的目录并授权,如下:

mkdir /{backup,www}

chown root:root –R /backup/

chown root:root –R /www/

以上就是rsync服务器端的配置。

7.2 rsync客户端配置

rsync客户端配置与服务器端相比差别还是比较大的。

在客户端安装完毕rsync服务后,是不需要启动rsync服务的。我们只需要在客户端创建连接rsync服务器时,验证码用户所需要的密码文件即可。

该密码文件中的密码要与rsync服务器上的密码文件中的密码对应,并且也要与rsync服务器rsyncd.conf配置文件中的认证模块中的用户匹配。

当然该密码文件不创建也是可以的,不创建的话。我们在执行rsync操作时,就需要输入rsync的对应用户的密码。如下:

echo "apache">>/etc/rsyncd.password

chmod 600 /etc/rsyncd.password

注意:该密码文件中只能存放一个用户的密码,并且该文件与rsync服务器端的密码文件一样也需要把其权限设置为600。

以上就是rsync客户端的配置。

八、rsync的启动与关闭

rsync服务器端与客户端都配置完毕后,我们就可以来启动rsync服务器,并且也可以关闭rsync服务。

8.1 启动rsync服务

在前面我们讲过rsync-daemon认证方式,需要服务器和客户端都安装rsync服务,并且只需要rsync服务器端启动rsync,同时配置rsync配置文件,客户端启动不启动rsync服务。

在此我们只讲解rsync-daemon认证方式的启动。有关rsync使用ssh方式认证,我们就不在此讲解了,如果有想了解的童鞋,可以看看6.2章节的rsync六种工作模式。

如果是源码方式安装的rsync,我们可以使用rsync –daemon来启动rsync。如下:

echo PATH=$PATH:/usr/local/bin/>>/etc/profile

source /etc/profile

rsync --daemon

ps aux |grep rsync

netstat -tunlp |grep 873

注意:上述命令行中,只有rsync --daemon才是启动rsync的命令。并且该命令启动时,会默认加载/etc/rsyncd.conf文件。

所以如果rsync的配置文件不在/etc目录下或者rsync配置文件名不为rsyncd.conf,那么我们在启动rsync服务时,就要手工加上该配置文件的完整路径。方法如下:

rsync --daemon --config=/etc/rsyncd.conf

有关如何加载该配置文件,我们可以通过rsync --daemon --help进行查看。如下:

rsync --daemon --help

如果是RPM方式安装的rsync,我们在5.2章节RPM方式安装rsync中已经讲解过了,可以通过启动xinetd服务来启动rsync。如下:

/etc/init.d/xinetd start

以上就是rsync服务的启动,下面我们开始介绍如何关闭rsync服务。

8.2 关闭rsync服务

要关闭rsync服务,如果是源码方式安装的,我们可以直接通过pkill rsync命令进行关闭。如下:

pkill rsync

如果是通过yum方式进行安装的,我们可以通过关闭xinetd服务来达到关闭rsync服务的目的。如下:

/etc/init.d/xinetd stop

除了以上两种方法之外,我们还可以通过比较暴力的方法关闭rsync服务。如下:

kill -9 6780

九、rsync同步实例

rsync服务正常启动后,我们就要切换到客户端来实际同步一个文件。

现在rsync服务器是192.168.199.247,rsync客户端为192.168.199.248。

首先在rsync服务器192.168.199.247的www模块下/www/目录下新建一个文件ilanni247,内容如下:

ifconfig eth1|grep "inet addr"|awk '{print $2}'|cut -d: -f2

vi /www/ilanni247

this is server 247 www.

然后在rsync客户端192.168.199.248的/root下新建一个www目录,并在此目录下创建一个文件ilanni248,内容如下:

ifconfig eth1|grep "inet addr"|awk '{print $2}'|cut -d: -f2

mkdir www

vi /www/ilanni248

this is client 248 www.

9.1 把248文件推送到247上

要把rsync客户端192.168.199.248文件推送到rsync服务器192.168.199.247上,我们需要使用到rsync帮助命令中的第三种命令,如下:

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

有关这个命令的作用,我们在前面已经介绍过了,就是把本地的文件同步到远程服务器上。

具体使用方法,如下:

rsync -avz /root/www/* apache@192.168.199.247::www --password-file=/etc/rsyncd.password

这条命令的作用是把/root/www目录下的所有文件同步到192.168.199.247服务器的www模块下。

如果要把/root/www/ilannidir目录本身同步到192.168.199.247服务器的www模块下的话,命令如下:

rsync -azv /root/www/ilannidir apache@192.168.199.247::www --password-file=/etc/rsyncd.password

或者:

rsync -azv /root/www/ilannidir apache@192.168.199.247::www --password-file=/etc/rsyncd.password

通过上图,我们可以看到本地确实已经把文件与目录同步到rsync服务器上了。

9.2 把247文件拉取到248上

要把rsync服务器192.168.199.247的文件拉取到rsync客户端192.168.199.248上,我们需要使用到rsync帮助命令中的第六个命令,如下:

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

有关这个命令的作用,我们在前面已经介绍过了,就是把远程机器的文件同步到本地。

具体使用方法,如下:

rsync -avz apache@192.168.199.247::www --password-file=/etc/rsyncd.password /root/www/

这条命令的作用是把192.168.199.247服务器的www模块下所有文件同步到本机的/root/www/目录下。

烂泥:linux文件同步之rsync学习(一)的更多相关文章

  1. Linux文件同步工具之rsync

    学习背景 1.最近公司的项目在使用jenkins做自动化构建,因为jenkins在构建时是比较耗性能的,便单独使用了一台服务器做构建服务器.但是个人觉得这样成本过高,单独拿一台服务器来构建并且该服务器 ...

  2. Linux文件同步

    简介 文件实时同步对于运维是个很常见的需求. 如集群的机器,需要上传个文件,之前的步骤是每台服务器分别上传. 做文件同步以后,只上传一台,其他机器自动同步. 目前实现实时同步的主流方案有 rsync+ ...

  3. Linux 远程同步:rsync

    rsync 简介: (1) rsync 是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件(2) rsync 使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步 ...

  4. 文件同步 单向rsync 双向unison 监控inotifywait 免密登录

    1.负载均衡中文件同步必不可少,我这边选择rsync来实现文件同步 rsync同步文件机制更适用于单向文件同步,可配合unison实现双向同步功能. 实现同步的两种方法 一:ssh方法 rsync - ...

  5. Linux文件与目录管理(学习笔记)

    本笔记为<鸟哥linux私房菜>第六章学习笔记 一.目录与路径 相对路径与绝对路径 绝对路径:一定由根目录 / 写起              正确度比较好 相对路径:不是由 / 写起  ...

  6. Linux——文件处理命令简单学习总结

    linux中一共有三种用户: 1: 所有者u(User) 2: 所属组g(group) 3: 其他用户o(other) linux中权限一共分三种: 1: r read 读权限 2: w write ...

  7. Qt linux文件同步写入

    因为linux 系统机制问题,文件的创建和写入并不会直接写入硬盘.而是先写入缓存,当系统要关闭或须要时才写入硬盘.为防止突然掉电,应将缓存中的文件及时同步到硬盘上去. linux 下的sync 命令具 ...

  8. linux文件的通用操作方法学习

    2014-07-29 23:36:10 在linux下用文件描述符来表示设备文件和普通文件.文件描述符是一个整型的数据,所有对文件的操作都通过文件描述符实现. 文件描述符示文件系统中连接用户空间和内核 ...

  9. linux文件权限命令chmod学习

    Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...

随机推荐

  1. python问题记录

    今天才python群里看到一个问题 python2.7: L = [x for x in 'hello'] print L print x python3.4: L = [ x for x in 'h ...

  2. 【FOL】第一周

    本来打算按计划做下去的,发现原来那个sprite虽然功能强大,但是对我想要做的东西来说,冗余似乎有些多,决定自己写一个. 之前做了一段时间的h5游戏,用的是panda.js,发现这个引擎封装的还不错, ...

  3. 【FOL】万里长征第一步

    准备了好久了,中间断断续续看了些资料,也写了几个小demo练手,今天正式开始. 因为要模拟debug和release环境,手上资源又很缺,必须把一些已经拼好的图片进行切割,网络上找了半天倒是有几个切图 ...

  4. CentOS6.5下安装PostgreSQL

    一.配置 YUM 仓库 修改原始的 yum 仓库配置: vim /etc/yum.repos.d/CentOS-Base.repo 在[base]和[updates] 节(section)部分的尾部插 ...

  5. android自动化之monkeyrunner

    一.使用CMD命令打开模拟器 运行monkeyrunner之前必须先运行相应的模拟器或连上设备,不然monkeyrunner无法连接设备. 1.1  用Elipse打开Android模拟器或在CMD中 ...

  6. Python实现装饰模式的一段代码

    # 实现装饰模式的一段代码 import functools def log(func): @functools.wraps(func) def wrapper(*args,**kw): print( ...

  7. GJM : 安装SqlServer遇到问题的解决方案 [原创]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  8. Masonry – 实现 Pinterest 模式的网格砌体布局

    Masonry 是一款 JavaScript 网格布局插件,可以实现类似 Pinterest 模式的砌体布局效果.通过把元素自动填充在垂直的空白区域,就像墙上堆砌的石头一样.这个库还可以作为 jQue ...

  9. 使用 Promises 编写更优雅的 JavaScript 代码

    你可能已经无意中听说过 Promises,很多人都在讨论它,使用它,但你不知道为什么它们如此特别.难道你不能使用回调么?有什么了特别的?在本文中,我们一起来看看 Promises 是什么以及如何使用它 ...

  10. HTML 表单

    HTML 表单包含表单元素. <form> 元素定义 HTML 表单 表单元素指的是不同类型的 input 元素.复选框.单选按钮.提交按钮等等. HTML 表单用于搜集不同类型的用户输入 ...