Rsync 使用所谓的“Rsync 算法来使本

地和远程两个主机之间的文件达到同步,这个

算法只传送两个文件的不同部分,而不是每次

都整份传送,因此速度相当快。

rsync 的优点

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

可以很容易做到保持原来文件的权限、时

间、软硬链接等;

无须特殊权限即可安装;

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

可以使用 rshssh 等方式来传输文件,

当然也可以通过直接的 socket 连接;

支持匿名传输

服务器端的配置

具体的就不多说了,重要的地方说一下。首

先检查 rsync 是否安装:

rpm –q rsync

rsync-2.6.8-3.1

rsync

package rsync is not installed  

说明这个软件报没有安装大家可以使用 yum

行安装

另外,关闭防火墙和 SElinux,因为是内

网中传输,所以这些没必要

service iptables stop && chkconfig

iptables off

setenforce 0

/etc/rsyncd.conf。文件我先贴出来,方

便线上环境的朋友直接复制,后面再写上详细

注释。

uid = nobody

gid = nobody

user chroot = no

max connections = 200

timeout = 600

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/log/rsyncd.log

[backup]

path=/backup/

ignore errors

read only = no

list = no

hosts allow =

192.168.21.0/255.255.255.0

auth users = test

secrets file = /etc/rsyncd.password

注释:

uid = nobody

进行备份的用户,nobody 为任何用户

gid = nobody

进行备份的组,nobody 为任意组

use chroot = no

"use chroot" true

rsync 在传输文件以前首先 chroot path

参数所指定的目录下。这样做的原因是实现额

外的安全防护,但是缺点是需要以 root 权限,

并且不能备份指向外部的符号连接所指向的目

录文件。默认情况下 chroot 值为 true.但是

这个一般不需要,我选择 no false

list = no

不允许列清单

max connections = 200

最大连接数

timeout = 600

盖客 户指 定的 IP 时时 间, 也就 是说

rsync 服务器不会永远等待一个崩溃的客户端。

pidfile = /var/run/rsyncd.pid 

pid 文件的存放位置

lock file = /var/run/rsync.lock 

锁文件的存放位置

log file = /var/log/rsyncd.log  

日志文件的存放位置

[backup] 

这里是认证模块名,即跟 samba 语法一样,

是对外公布的名字

path = /backup/

这里是参与同步的目录

ignore errors 

可以忽略一些无关的 IO 错误

read only = no

允许可读可写

list = no

不允许列清单

hosts allow =

192.168.21.0/255.255.255.0

samba

192.168.21.0/24 的网段进行同步,拒绝其

它一切

auth users = test

认证的用户名

secrets file = /etc/rsyncd.password 

密码文件存放地址

注意:对于这个地方的配置文件,虽然解释

的很清楚,可是一些朋友始终还会在这里出错

这里我提亮点易错点:

1 [backup]     path =

/backup/ 参与同步的目录

这里的 path 大家要记好了,这里不要随便

的一设置就直接完事,要知道这里是认证模块

的,以后从客户机备份的数据会存储在这里。

2auth users = redhat 认证的用户名

这个名字是服务器端实实在在存在用户,大

家不要直接跟步骤走却忽略了这点。如果服务

器端少了这个的话我估计你的数据同步就实现

不了,大家要谨记。

3path = /backup/ 参与同步的目录

这个需要稍后自己要在根目录下自己建

cd /

mkdir backup

chmod –R 777 /backup

echo “test:test” > /etc/rsyncd.password

(这里我设置的是用户名和密码一致)

为了安全起见,我设置他的权限为 600

chmod 600 /etc/rsync.password

客户端配置:

echo “test” > /etc/rsyncd.password

这里仅仅只需要密码,不需要用户了,免得

要同步时还要手动互动

chmod 600 /etc/rsync.password

配置完了之后,可能会遇到一些权限问题:

问题一:

@ERROR: chroot failed

rsync error: error starting clientserver protocol (code 5) at

main.c(1522) [receiver=3.0.3]

原因:

服务器端的目录不存在或无权限。

创建目录并修正权限可解决问题。

问题二:

@ERROR: auth failed on module tee

rsync error: error starting clientserver protocol (code 5) at

main.c(1522) [receiver=3.0.3]

原因:

服务器端该模块(tee)需要验证用户名密

码,但客户端没有提供正确的用户名密码,认

证失败。

提供正确的用户名密码解决此问题。

问题三:

@ERROR: Unknown module ‘tee_nonexists’

rsync error: error starting clientserver protocol (code 5) at

main.c(1522) [receiver=3.0.3]

原因:

服务器不存在指定模块。

提供正确的模块名或在服务器端修改成你要

的模块以解决问题。

测试

都配置完毕之后就是测试了。在 FreeBSD

机器上,输入命令

rsync -vzrtop --delete

/home/andrewy/etc

test@192.168.21.41::backup --passwordfile=/etc/rsyncd.password

查看同步效果。

root

rsync delete 操作时要注意,它会完全同

步这边的目录与服务器的目录中的文件,这样

会产生一个后果,它会删掉服务器中多余的文

件。如果是线上机器,请慎之又慎,切记!