Rsync 简介

rsync 是一个Unix系统下的文件同步和传输工具。他本来是用来取代rcp 的工具,随着他的功能的不断完善渐渐的rsync成为比较流行的备份工具,目前由rsync.samba.org 团队维护者。

Rsync使用所谓的"rsync 算法",提供一个非常快速的档案传输,使本地和远端二部主机之间的文件达到同步,它主要是传送二个文件的异动部份,而非每次都整份传送,因此速度相当地快。

它具有以下特性:
1、可以同步整个目录和文件系统
2、有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等
3、对于安装来说,无任何特殊权限要求
4、对于多个文件来说,内部流水线减少文件等待的延时
5、能用 rsh、ssh 或直接端口做为传输入端口
6、支持匿名 rsync 同步文件,是理想的镜像工具;

一、安装rsync

因为rsync使用xinetd方式启动,所以安装rsync之前要先安装xinetd。

1.1  安装rsync
#rpm ivh xinetd*.rpm
#rpm ivh rsync*.rpm

服务端需要打开 rsync 和启动 xinetd 服务,客户端就不需要了
#chkconfig xinetd on
#chkconfig rsync on

2.2  设置Rsync 服务端
Rsync 服务端需要设置如下四项:
1. 规划建立备份目录
2. 设置开启rsync deamon的xinetd服务
(/etc/xinetd.d/rsync)
3. 创建和设置rsync deamon的配置文件(/etc/rsyncd.conf)
4. 设置rsync内建用户和密码
首先确定备份目录,我们使用/home目录作为备份根目录。
然后我们设置rsync deamon的xinetd服务,因为之前我们使用

chkconfig命令已经打开了xinetd和rsync的启动项,所以这里我们只是
验证服务配置文件是否正确配置。

#vi /etc/xinetd.d/rsync
其文件内容如下:
# default: off
# description: The rsync server is a good addition
to an ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = daemon
log_on_failure += USERID
}
接下来,我们创建rsync服务配置文件。

首先是rsync全局配置文件rsyncd.conf
#vi /etc/rsyncd.conf
其文件内容如下:
uid = nobody
gid = nobody
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
hosts allow = 127.0.0.1 192.168.0.0/255.255.255.0
auth users = BackupUser
secrets file = /etc/rsyncd.secrets
[home]
path = /home
comment = ServerHome
read only = true
list = false
uid 和 gid是系统内建用户,必须存在于系统/etc/passwd文件中。这里设置的了最小权限,如果/home目录下的文件和目录nobody用户和组没有读取权限和进入权限,rsync就会报错并不操作权限不够的文件或目录。如果使用 chroot,在传输文件之前,服务器守护程序在将 chroot 到文件系统中的目录中,这样做 的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户root权限。另外对符号链接文件, 将会排除在外。也就是说,你在 rsync 服务器上,如果有符号链接,你在备份服务器上运行客户端的同步Rsync服务器搭建数据时,只会把符号链接名同步下来,并不会同步符号链接的内容。所以我们在这里不使用chroot。

max connections是客户端同时连接数,为了限制多线程同步的。
motd file是定义服务器信息的,要自己写 rsyncd.motd 文件内容。
auth users 是没必要实服务器上存在的真实的系统用户,它们是rsync
服务端内建的用户,如果你想用多个用户,那就以“,”号隔开,比如
auth users = kevin , mandy
secrets file定义密码文件:/etc/rsyncd.secrets ,后面我们会
创建这个文件。
[home]是设置备份目录区域,配置项到下一个[]组合截止。path定义其
在系统中的真实路径,comment定义显示说明,read only定义访问方式,
list定义了Rsync客户端是否可以列出目录结构。
设置好rsyncd.conf文件后,我们要创建另外两个rsync需要的配置文
件,它们是rsyncd.motd和rsyncd.secrets。
#cat >/etc/rsyncd.motd <<END
This is a rsyncserver for XXX
END
将stuXX换为你的设备名,以和其他人的机器作以区分。
#cat > /etc/rsyncd.secrets <<END
BackupUser:bfa994f3dab8ec2eae10362d592b9725
END

secrets文件的格式是:
内建用户名:密码
某些系统不支持长密码,另外这个密码不适加密存放的,之所以你看起来
长,是因为这个密码字符串是一个文件的MD5值。
创建好这些文件后需要设置其正确权限,否则rsync deamon实不会正常
工作的。
#chmod 600 /etc/rsyncd.conf
#chmod 600 /etc/rsyncd.motd
#chmod 600 /etc/rsyncd.secrets
然后重启xinetd服务,rsync 服务器端就开始工作了。
#service xinetd restart

2.3  Rsync客户端测试
首先创建密码文件secrets,放在/root目录下
#cat > /root/secrets <<END
bfa994f3dab8ec2eae10362d592b9725
END
密码文件中填入Rsync服务端定义的用户密码,用户名不在这里出现。
使用如下命令测试Rsync客户端是否可以同步Rsync服务端
#rsync -Rav --delete --password-file=/root/secrets
BackupUser@192.168.0.xx::home /tmp
将192.168.0.xx换为Rsync服务端IP地址。

==============================华丽的分割线==================================

Rsync参数参考如下:
v,
verbose
详细模式输出
q,
quiet
精简输出模式
c,
checksum
打开校验开关,强制对文件传输进行校验
a,
archive
归档模式,表示以递归方式传输文件,并保持所有文
件属性,等于rlptgoD
r,
recursive
对子目录以递归模式处理
R,
relative
使用相对路径信息
rsync foo/bar/foo.c remote:/tmp/
则在/tmp目录下创建foo.c文件,而如果使用R
参数:
rsync R
foo/bar/foo.c remote:/tmp/
则会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。
b,
backup
创建备份,也就是对于目的已经存在有同样的文件名
时,将老的文件重新命名为~filename。可以使用suffix
选项来指
定不同的备份文件前缀。
backupdir
将备份文件(如~filename)存放在在目录下。
suffix=
SUFFIX 定义备份文件前缀
8
Rsync服务器搭建
u,
update
仅仅进行更新,也就是跳过所有已经存在于DST,并
且文件时间晚于要备份的文件。(不覆盖更新的文件)
l,
links
保留软链结
L,
copylinks
想对待常规文件一样处理软链结
copyunsafelinks
仅仅拷贝指向SRC路径目录树以外的链结
safelinks
忽略指向SRC路径目录树以外的链结
H,
hardlinks
保留硬链结
p,
perms
保持文件权限
o,
owner
保持文件属主信息
g,
group
保持文件属组信息
D,
devices
保持设备文件信息
t,
times
保持文件时间信息
S,
sparse
对稀疏文件进行特殊处理以节省DST的空间
n,
dryrun
现实哪些文件将被传输
W,
wholefile
拷贝文件,不进行增量检测
x,
onefilesystem
不要跨越文件系统边界
B,
blocksize=
SIZE 检验算法使用的块尺寸,默认是700字节
e,
rsh=
COMMAND 指定替代rsh的shell程序

rsyncpath=
PATH 指定远程服务器上的rsync命令所在路径信息
C,
cvsexclude
使用和CVS一样的方法自动忽略文件,用来排
除那些不希望传输的文件
existing
仅仅更新那些已经存在于DST的文件,而不备份那些新
创建的文件
delete
删除那些DST中SRC没有的文件
deleteexcluded
同样删除接收端那些被该选项指定排除的文件
deleteafter
传输结束以后再删除
ignoreerrors
及时出现IO错误也进行删除
maxdelete=
NUM 最多删除NUM个文件
partial
保留那些因故没有完全传输的文件,以是加快随后的再次
传输
force
强制删除目录,即使不为空
numericids
不将数字的用户和组ID匹配为用户名和组名
timeout=
TIME IP超时时间,单位为秒
I,
ignoretimes
不跳过那些有同样的时间和长度的文件
sizeonly
当决定是否要备份文件时,仅仅察看文件大小而不考虑
文件时间
modifywindow=
NUM 决定文件是否时间相同时使用的时间戳窗口,
默认为0

T
tempdir=
DIR 在DIR中创建临时文件
comparedest=
DIR 同样比较DIR中的文件来决定是否需要备份
P
等同于 partial
progress
显示备份过程
z,
compress
对备份的文件在传输时进行压缩处理
exclude=
PATTERN 指定排除不需要传输的文件模式
include=
PATTERN 指定不排除而需要传输的文件模式
excludefrom=
FILE 排除FILE中指定模式的文件
includefrom=
FILE 不排除FILE指定模式匹配的文件
version
打印版本信息
address
绑定到特定的地址
config=
FILE 指定其他的配置文件,不使用默认的rsyncd.conf
文件
port=
PORT 指定其他的rsync服务端口
blockingio
对远程shell使用阻塞IO
stats
给出某些文件的传输状态
progress
在传输时现实传输过程
logformat=
FORMAT 指定日志文件格式

passwordfile=
FILE 从FILE中得到密码
bwlimit=
KBPS 限制I/O带宽,KBytes per second
h,
help
显示帮助信息