一、特性简介
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。它的特性如下:
1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3、无须特殊权限即可安装。
4、优化的流程,文件传输效率高。
5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
6、支持匿名传输。
算法介绍:
假定在名为α和β的两台计算机之间同步相似的文件 A 与 B ,其中α对文件 A 拥有访问权,β对文件 B 拥有访问权。并且假定主机α与
β之间的网络带宽很小。那么 rsync 算法将通过下面的五个步骤来完成:
1.β将文件 B 分割成一组不重叠的固定大小为 S 字节的数据块。最后一块可能会比 S 小。
2.β对每一个分割好的数据块执行两种校验:一种是 32 位的滚动弱校验,另一种是 128 位的 MD4 强校验。
3.β将这些校验结果发给α。
4.α通过搜索文件 A 的所有大小为 S 的数据块 ( 偏移量可以任选,不一定非要是 S 的倍数 ) ,来寻找与文件 B 的某一块有着相同的弱
校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。
5.α发给β一串指令来生成文件 A 在β上的备份。这里的每一条指令要么是对文件 B 经拥有某一个数据块而不须重传的证明,要么是一个
数据块,这个数据块肯定是没有与文件 B 的任何一个数据块匹配上的。
二、配置步骤
1、系统环境
server: Debian 5.0.5 ip: 192.168.206.120
client: Debian 5.0.5 ip: 192.168.206.200
rsync版本
# rsync –version
rsync version 3.0.3 protocol version 30
安装
server和client端都需要安装rsync,只不过client端不需要配置:
# apt-get install rsync
2、配置server端的/etc/rsyncd.conf文件
拷贝示例配置文件到/etc目录
# cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/
查看rsyncd.conf文件,按需要修改即可
# more /etc/rsyncd.conf
# sample rsyncd.conf configuration file
# GLOBAL OPTIONS
#motd file=/etc/motd
log file=/var/log/rsyncd.log
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
pid file=/var/run/rsyncd.pid
#syslog facility=daemon
#socket options=
# MODULE OPTIONS
[www] # 这里是认证的模块名,在client端需要指定
comment = source high app archive
path = /data/webroot/rsynctest # 需要同步的目录
use chroot = yes
# max connections=10
lock file = /var/lock/rsyncd
# the default for read only is yes…
read only = no
list = yes
uid = www-data
gid = www-data
# exclude =
# exclude from =
# include =
# include from =
auth users = appbackup # 认证的用户名,如果没有这行,则表明是匿名
secrets file = /etc/rsyncd.secrets # 认证密码文件
strict modes = yes
hosts allow = 192.168.206.200 #充许任何主机连接
# hosts deny =
ignore errors = no # 可以忽略一些无关的IO错误
ignore nonreadable = yes
transfer logging = yes
# log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
3、在server端创建密码文件/etc/rsyncd.secrets
# vi /etc/rsyncd.secrets
1 ;username:password
2 appbackup:123456
4、在server端将rsync以守护进程形式启动
# vi /etc/default/rsync
RSYNC_ENABLE=true
启动srync
# /etc/init.d/rsync start
查看监听端口
# netstat -anp|grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2533/rsync
tcp6 0 0 :::873 :::* LISTEN 2533/rsync
日志信息
# tail -f /var/log/rsyncd.log
2011/01/25 16:40:36 [30371] name lookup failed for 192.168.206.200: Name or service not known
2011/01/25 16:40:36 [30371] connect from UNKNOWN (192.168.206.200)
2011/01/25 08:40:36 [30371] rsync on www/ from appbackup@unknown (192.168.206.200)
2011/01/25 08:40:36 [30371] building file list
2011/01/25 08:40:36 [30371] sent 263 bytes received 66 bytes total size 2313891
2011/01/27 08:45:05 [2533] rsyncd version 3.0.3 starting, listening on port 873
5、client端测试
创建密码文件,只填密码即可,密码要与server端的一致。
debian-vm:~# vi /etc/rsyncd.secrets
123456
同步
debian-vm:~# /usr/bin/rsync -vzrtopg –delete –progress appbackup@192.168.206.120::www /data/webroot –password-
file=/etc/rsyncd.secrets
receiving incremental file list
deleting 20101129.csv
./
ip.txt
2358 100% 2.25MB/s 0:00:00 (xfer#1, to-check=2/7)
sent 81 bytes received 886 bytes 1934.00 bytes/sec
total size is 2375 speedup is 2.46
参数说明:
-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数。
–progress是指显示出详细的进度情况
–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除
6、crontab定期更新脚本
# more rsync.sh
#!/bin/bash
#列表显示远程的目录
/usr/bin/rsync -vzrtopg –delete –progress appbackup@192.168.206.120::www –password-file=/etc/rsyncd.secrets
/usr/bin/rsync -vzrtopg –delete –progress appbackup@192.168.206.120::www /data/webroot –password-
file=/etc/rsyncd.secrets