Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录。 

  Rsync 是用于取代rcp的一个工具,Rsync使用所谓的 “Rsync 算法” 来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。您可以参考 How Rsync Works A Practical Overview 进一步了解 rsync 的运作机制。

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

  Rsync 的初始作者是 Andrew Tridgell 和 Paul Mackerras,它当前由 http://rsync.samba.org维护。

  Rsync的基本特点如下:

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

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

  3. 无须特殊权限即可安装;

  4. 优化的流程,文件传输效率高;

  5. 可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;

  6. 支持匿名传输,以方便进行网站镜像。

  在使用 rsync 进行远程同步时,可以使用两种方式:远程 Shell 方式(建议使用 ssh,用户验证由 ssh 负责)和 C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。

  无论本地同步目录还是远程同步数据,首次运行时将会把全部文件拷贝一次,以后再运行时将只拷贝有变化的文件(对于新文件)或文件的变化部分(对于原有文件)。

  rsync 在首次复制时没有速度优势,速度不如 tar,因此当数据量很大时您可以考虑先使用 tar 进行首次复制,然后再使用 rsync 进行数据同步。


1、 检查rsync 是否已经安装

# rpm -qa|grep rsync

   如果需要安装

# wget http://pkgs.repoforge.org/rsync/rsync-3.0.9-2.el6.rfx.x86_64.rpm

# rpm -ivh rsync-3.0.9-2.el6.rfx.x86_64.rpm

2、配置rsync服务器

  • 首先要选择服务器启动方式

    • 对于负荷较重的 rsync 服务器应该使用独立运行方式

    • 对于负荷较轻的 rsync 服务器可以使用 xinetd 运行方式

  • 创建配置文件 rsyncd.conf

  • 对于非匿名访问的 rsync 服务器还要创建认证口令文件

3、以 xinetd 运行 rsync 服务

      CentOS 默认以 xinetd 方式运行 rsync 服务。rsync 的 xinetd 配置文件
 在 /etc/xinetd.d/rsync。要配置以 xinetd 运行的 rsync 服务需要执行如下的命令:

# chkconfig rsync on

# service xinetd restart

4、配置文件 rsyncd.conf

两种 rsync 服务运行方式都需要配置 rsyncd.conf,其格式类似于 samba 的主配置文件。

配置文件 rsyncd.conf 默认在 /etc 目录下。为了将所有与 rsync 服务相关的文件放在单独的目录下,可以执行如下命令:

 # mkdir /etc/rsyncd

 # touch /etc/rsyncd/rsyncd.conf

 # ln -s  /etc/rsyncd/rsyncd.conf  /etc/rsyncd.conf

5、在服务器上配置rsync服务

# vi /etc/rsyncd/rsyncd.conf

# Minimal configuration file for rsync daemon

# See rsync(1) and rsyncd.conf(5

# This line is required by the /etc/init.d/rsyncd script) man pages for help

# GLOBAL OPTIONS

uid = root                     //运行RSYNC守护进程的用户

gid = root                  //运行RSYNC守护进程的组


use chroot = no           //不使用chroot

read only = no


#limit access to private LANs

hosts allow=192.168.1.110      //允许主机        //不允许主机  hosts  deny = 

max connections = 5            // 最大并发连接数


pid file = /var/run/rsyncd.pid      //rsync 的守护进程将其 PID 写入指定的文件


secrets file = /etc/rsyncd/rsyncd.secrets       //rsync 认证口令文件

#lock file = /var/run/rsync.lock


motd file = /etc/rsyncd/rsyncd.motd      //指定一个消息文件,当客户连接服务器时该文件的内容显示给客户


#This will give you a separate log file

log file = /var/log/rsync.log      //指定 rsync 守护进程的日志文件,而不将日志发送给 syslog


#This will log every file transferred - up to 85,000+ per user, per sync

transfer logging = yes        //使 rsync 服务器将传输操作记录到传输日志文件。


log format = %t %a %m %f %b   //指定传输日志文件的字段

syslog facility = local3      //指定 rsync 发送日志消息给 syslog 时的消息级别

timeout = 300  //该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。对于匿名 rsync 服务器来说,理想的数字是 600(单位为秒)


# MODULE OPTIONS

[zhenghome]

path = /home/zheng/    //指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的

list=yes      // 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块

ignore errors              //指定在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。一般来说 rsync 在出现 I/O 错误时将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题。

auth users = zheng        //指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。用户名和口令以明文方式存放在 secrets file 参数指定的文件中

comment = Zheng home          //给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户

exclude = important/            //指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式。


[chinatmp]

path = /tmp/china/

list=no

ignore errors

auth users = china

comment = tmp_china


6、 建立/etc/rsyncd/rsyncd.secrets文件

# vi /etc/rsyncd/rsyncd.secrets

  zheng:asdfghj           #格式   用户名:口令
  china:jk               #该用户不要求是系统用户

 为了密码的安全性,我们把权限设为600

 # chown root:root /etc/rsyncd/rsyncd.secrets

 # chmod 600 /etc/rsyncd/rsyncd.secrets

 建立连接到服务器的客户端看到的欢迎信息文件/etc/rsyncd/rsyncd.motd

# vi /etc/rsyncd/rsyncd.motd

+++++++++++++++++++++++++++
+                       zheng                       +
+++++++++++++++++++++++++++

7、 启动rsync

# /etc/init.d/xinetd restart

    查看873端口是否起来

# netstat -an | grep 873

如果rsync启动成功的话可以看到873端口已经在监听了。


8、客户端安装rsync

# yum -y install rsync

通过rsync客户端来同步数据

# rsync -avzP zheng@172.16.1.135::zhenghome  /tmp/david/         //这个命令的意思就是说,用zheng 用户登录到服务器上,把zhenghome数据,同步到本地目录/tmp/zheng/上。当然本地的目录是可以你自己定义的,比如 dave也是可以的;当你在客户端上,当前操作的目录下没有zhenghome这个目录时,系统会自动为你创建一个;当存在zhenghome这个目录中,你要注意它的写权限

# rsync -avzP  --delete zheng@172.16.1.135::zhenghome  /tmp/zheng/           //这回我们引入一个 --delete 选项,表示客户端上的数据要与服务器端完全一致,如果 /tmp/zheng/目录中有服务器上不存在的文件,则删除。最终目的是让/tmp/zheng/目录上的数据完全与服务器上保持一致;用的时候要小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除;

# touch /tmp/rsync.password
# chmod 600 /tmp/rsync.password
# echo "asdfghj"> /tmp/rsync.password
# rsync -avzP  --delete  --password-file=/tmp/rsync.password  zheng@172.16.1.135::zhenghome  /tmp/zheng/             //这次我们加了一个选项 –password-file=rsync.password ,这时当我们以zheng用户登录rsync服务器同步数据时,密码将读取 /tmp/rsync.password 这个文件。这个文件内容只是zheng用户的密码.

 这样就不需要密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的


9、rsync 客户端自动与服务器同步数据

# crontab -e

10 0 * * * rsync -avzP  --delete  --password-file=/tmp/rsync.password  zheng@172.16.1.135::zhenghome  /tmp/david/                                    //表示每天0点10分执行后面的命令