1.rsync简介
rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,还可以把它作为不同主机网络备份工具之用。rsync使用"rsync算法"来使源端和目的端两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
2.rsync命令的使用格式是:
rsync [option] source destination #其中source是数据源,destination是数据备份的目的地址
具体使用方式有:
rsync [OPTION] SRC DEST #本地目录同步
rsync [OPTION] SRC [USER@]HOST:DEST #使用ssh协议将本地文件同步到远程主机上,使用的是:
rsync [OPTION] [USER@]HOST:SRC DEST #使用ssh协议将远程文件同步到本地主机上,使用的是:
rsync [OPTION] [USER@]HOST::SRC DEST #将rsync服务器上的文件同步到本地主机上,使用的是::
rsync [OPTION] SRC [USER@]HOST::DEST #将本地的文件同步到rsync服务器上,使用的::
3.rsync同步算法简介
rsync的同步算法描述如下:
假定在SRC端有文件A,DEST端有文件B,使用rsync工具来同步这两端,具体算法描述如下:
1、DEST将文件B分割成一组不重叠的固定大小为S字节的数据块,最后一块可能会比S小。
2、DEST对每一个分割好的数据块执行两种校验:一种是32位的滚动弱校验,另一种是128位的MD4强校验。
3、DEST将这些校验结果发给SRC。
4、SRC通过搜索文件A的所有大小为S的数据块,来寻找与文件B的某一块有着相同的弱校验码和强校验码的数据块。
5、SRC发给DEST一串指令来生成文件A在DEST上的备份。这里的每一条指令要么是对文件B已经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件B的任何一个数据块匹配上的。
4.rsync的使用方法
rsync有三种使用方式:
(1)本地同步
rsync可以在同一台主机上进行文件夹的同步。使用方法和cp命令几乎一样。举例如下:
rsync -av /etc /tmp #将/etc的数据备份到/tmp/etc中 (2)使用其他的协议(例如ssh,rsh等)进行主机间的数据网络同步
rsync可以通过ssh或rsh的协议通道在server和client之间进行数据的同步传输。举例如下:
rsync -av -e ssh user@remotehost:/etc /tmp #将远程主机remotehost的/etc数据备份到本地主机的/tmp内
rsync -av -e ssh /etc user@remotehost:/tmp #将本地的/etc数据备份到远程主机remotehost的/tmp内备注:如果不加上-e选项也可以,默认使用的ssh的协议通道。
(3)使用rsync自身的server/client的结构来实现不同主机上的数据同步
我们可以直接使用rsync自身搭建起来的server/client结构来同步数据,但是我们需要配置rsync的服务端和客户端。详细的配置步骤如下:
A)rsync服务端的配置
步骤一:安装rsync工具
步骤二:创建/etc/rsyncd.conf文件,并作一定的配置填写,配置信息类似如下:
uid = root
gid = root
use chroot = no
strict modes = yes
address = 10.8.5.25 //指定本机IP地址,可以不设
port = 873 //指定rsync服务端口,默认是873
max connections = 10 //最大连接数
pid file = /var/run/rsyncd.pid //告诉进程,写到/var/run/rsyncd.pid中
motd file=/etc/rsyncd.motd //服务器信息文件,需算自行创建,可不设
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[home] //模块名称,即同步或备份的目录,客户端用这个关键字连接
path=/home //指定文件目录所在位置
comment = this is a test
ignore errors //忽略IO错误
read only = yes //只读,不让客户端上传文件到服务器端
list = no
auth users = root //登录用户,必须是服务器上存在的真实用户,多个用户用逗号隔开
secrets file = /etc/rsyncd.pas //密码文件,需自行创建
hosts allow = 10.8.5.24 //允许访问的客户端
hosts deny=* //禁止访问的客户端 步骤三:创建/etc/rsyncd.pas文件,并作一定的配置填写,配置信息类似如下:
root:123456 #配置客户端登录服务端的用户密码值得注意的是,需要将
/etc/rsyncd.pas的权限修改为600,这一步很重要,要是不修改,客户端尝试连接时会报错。
步骤四:创建并编辑/etc/rsyncd.motd文件,该文件是定义服务器信息的,用于标识服务器,用户登录时会看到该信息,类似于欢迎信息。
步骤五:启动rsync服务器, 参见<<linux中的daemon进程>>
B)rsync客户端的配置
步骤一:安装rsync工具
步骤二:创建/etc/rsyncd.conf,内容为空也是可以的。否则会报错。
步骤三:创建并编辑rsyncd.pas文件,用于存放登录用户的登录密码,这样可以在使用rsync客户端的时候无需交互式地输入验证密码。如果没有此文件,每次使用rsync命令时,都会提示输入用户密码。
备注,rsync客户端发起同步的命令举例:
rsync -azvr --progress –delete --password-file=/etc/rsyncd.pas root@10.8.5.25::home /home/backup
#其中home是服务端/etc/rsyncd.conf文件中配置的模块名称,注意主机名和模块名中间的2个冒号
#此命令表示将远程主机10.8.5.25的home模块同步到本地的/home/backup目录中。
当rsync服务器上的数据被毁坏后,可以使用本地的备份的数据来恢复远程rsync服务器的数据。命令使用方法是:
rsync -azvr --progress --password-file=/etc/rsyncd.pas /home/backup root@10.8.5.25::home
值得注意的是,rsync的三种同步用法,不管是第一次同步还是之后的增量同步,都要手动的触发rsync同步命令。在实际的同步备份任务中,我们需要配合例行化调度任务来实现定时增量备份的工作。因此,如果要实时地同步,就可以考虑inotify+rsync解决方案,见下。
5.rsync命令常用的选项:
-v 打印rsync命令执行的过程信息
-q 与-v相反
-r 目录递归复制
-a 相当于rysnc命令的-rlptgoD的综合体,表示递归同步,并保持所有文件和目录的权限和属性等。
--delete 如果rsync服务端删除了某一文件,那么rsync客户端也会删除这一文件。
--progress 类似于-v选项
-z 将上此选项,rsync服务端和客户端在传输数据时会进行数据压缩
--bwlimit=num rsync的传输限速,默认单位是KBps
-l 对于软链接文件,rsync同步之后还是软链接
-L 对于软链接文件,rsync会将软链接指向的文件,直接同步过来。
6.inotify+rsync实时同步解决方案
inotify(inode notify),inotify是一种文件变化通知机制,Linux内核从2.6.13开始引入。inotify为用户态应用程序提供了文件系统通告机制,通过inotify可以实时了解文件系统发生的所有变化。例如它可以监控文件访问事件、文件修改事件、文件打开事件以及文件删除事件等等。然后inotify仅是内核提供的一种系统功能,用户如果需要使用该功能,还需要安装用户态应用软件。在centos系统中可以使用inotify-tools来实现文件系统的实时监控,inotify-tools提供了两个应用程序可以使用,即inotifywait和inotifywatch。
如下为一个用inotify+rsync配合的一个实时同步的脚本:
#!/bin/bash
export PATH=/bin:/usr/bin:/usr/local/bin
SRC=/web_data/
DEST1=web1
DEST2=web2
Client1=192.168.0.102
Client2=192.168.0.103
User=tom
Passfile=/root/rsync.pass
[ ! -e $Passfile ] && exit 2
#wait for change
inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' --event modify,create,move,delete,attrib, $SRC | while read line
do
echo "$line" > /var/log/inotify_web 2>&1
/usr/bin/rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@Client1::$DEST1 >> /var/log/sync_web1 2&>1
/usr/bin/rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@Client2::$DEST2 >> /var/log/sync_web2 2&>1
done
学习资料来源于:
http://sunshyfangtian.blog.51cto.com/1405751/484945
本文深入解析rsync命令的使用方法、同步算法及其实例应用,包括本地同步、网络同步与服务器间数据同步,同时介绍rsync的常用选项与inotify+rsync实时同步解决方案,提供详细的操作指南与配置步骤。
1046

被折叠的 条评论
为什么被折叠?



