-
1 rsync简述
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了--remote sync。它的特性如下:
可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
无须特殊权限即可安装。
优化的流程,文件传输效率高。
可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜象。
-
2 rsync安装
1.从原始网站下载:[url]http://rsync.samba.org/ftp/rsync/[/url]
2.[jack@localhost bin]#sudo ./configure
[jack@localhost bin]#sudo make
[jack@localhost bin]#sudo make install
说明一点,客户机和服务器都要安装rsync。客户机以客户端方式运行rsync,服务器端以服务器方式运行rsync,它监听873端口。
3.运行rsync
/usr/local/bin/rsync --daemon
验证启动是否成功:
netstat -na|grep 873
3 rsync应用案例
-
3.1 案例说明
需把服务器A的/home/jack/data目录下的所有内容,备份到服务器B上去 .
-
3.2 rsync配置
-
3.2.1 主服务器A
修改默认配置文件(/etc/rsyncd.conf,若初次安装 rsync ,可能不存在文件,需手工创建),在服务A#sudo vi /etc/rsyncd.conf 添加如下内容 :
port = 873 //rsync的端口 use chroot = no max connections = 3 //允许客户端的最大连接数 strict modes = yes //是否需要密码验证文件 注:这里为yes时,密码文件权限要改为600 pid file = /var/run/rsync.pid lock file = /var/run/rsync.lock log file = /var/log/rsync.log // 日志文件 [upload] //模块一. 自定义的模块,不需密码 path = /home/looming/rsync-databack/upload/ comment = used for user upload data read only = no list = no uid = root //用于同步的属主和属组(必须的,且有时候会涉及到权限问题) gid = root //用于同步的属主和属组 [upload2] //模块二 自定义的模块,需密码 path = /home/looming/rsync-databack/upload2/ comment = used for user upload2 data read only = no //允许客户端上传文件 list = no uid = root gid = root ignore = errors auth users=looming //客户端用来验证的用户名 secrets file = /etc/rsync.pas //密码文件,明文保存密码,如 ming
建立密码文件
#vim /etc/rsync.pas //这个密码文件是要和配置文件中的一致的。 ming #chmod 600 /etc/rsync.pas //修改权限为600
-
3.2.2 从服务器 B
默认配置文件
(作为客户端,不需要修改配置,且也没用上)
建立密码文件
#vim /etc/rsync.pas //这个密码文件是要和配置文件中的一致的。 ming #chmod 600 /etc/rsync.pas //修改权限为600
-
3.3 rsync服务启动
进入主服务器A
#/usr/local/rsync/bin/rsync --daemon //启动守护进程 #ps -ef | grep rsync //查看进程是否启动
-
3.4 rsync测试
在客户端(即服务器B上) $sudo rsync -vzrtopg –progress /home/looming/data looming@master::upload 输出: $sudo rsync -vzrtopg –progress –password-file=/etc/rsyncd.pas /home/looming/data2 looming@master::upload2 输出:
-v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -r, --recursive 对子目录以递归模式处理 -p, --perms 保持文件权限 -o, --owner 保持文件属主信息 -g, --group 保持文件属组信息 --delete 删除那些DST中SRC没有的文件 --progress 显示备份过程 -t, --times 保持文件时间信息 编写脚本并建立定时任务让定时执行备份 #vim /home/bakrsync.sh #!/bin/bash sudo rsync -vzrtopg –progress –password-file=/etc/rsyncd.pas /home/luming/data2 luming@master::upload2 #chmod +x /home/bakrsync.sh #contab -e 01 01 * * * /home/basrsync.sh & //每天凌晨放在后台自动执行
-
4 Rsync常见问题
rsync中常见错误如下(转自http://blog.chinaunix.net/uid-13954085-id-158637.html)
配置一:
ignore errors
说明:这个选项最好加上,否则再很多crontab的时候往往发生错误你也未可知,因为你不可能天天去看每时每刻去看log,不加上这个出现错误的几率相对会很高,因为任何大点的项目和系统,磁盘IO都是一个瓶颈
Rsync error:
错误一:
@ERROR: auth failed on module xxxxx
rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
说明:这是因为密码设置错了,无法登入成功,检查一下rsync.pwd,看客服是否匹配。还有服务器端没启动rsync 服务也会出现这种情况。
错误二:
password file must not be other-accessible
continuing without password file
Password:
说明:这是因为rsyncd.pwd rsyncd.sec的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd
错误三:
@ERROR: chroot failed
rsync: connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
说明:这是因为你在 rsync.conf 中设置的 path 路径不存在,要新建目录才能开启同步
错误四:
rsync: failed to connect to 218.107.243.2: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
说明:防火墙问题导致,这个最好先彻底关闭防火墙,排错的基本法就是这样,无论是S还是C,还有ignore errors选项问题也会导致
错误五:
@ERROR: access denied to www from unknown (192.168.1.123)
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(359)
说明:此问题很明显,是配置选项host allow的问题,初学者喜欢一个允许段做成一个配置,然后模块又是同一个,致使导致
错误六:
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(244) [generator=2.6.9]
rsync error: received SIGUSR1 (code 19) at main.c(1182) [receiver=2.6.9]
说明:导致此问题多半是服务端服务没有被正常启动,到服务器上去查查服务是否有启动,然后查看下 /var/run/rsync.pid 文件是否存在,最干脆的方法是杀死已经启动了服务,然后再次启动服务或者让脚本加入系统启动服务级别然后shutdown -r now服务器
错误七:
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(604) [sender=2.6.9]
说明:原数据目录里没有数据存在
错误八:
rsync: recv_generator: mkdir "test" (in dest) failed: Permission denied (13)
*** Skipping everything below this failed directory ***
说明:找了些资料,发现引起这个问题的原因是因为远程rsync的权限不够,不足以在目标目录下创建文件。
目前知道两个解决办法:
1.将目标目录dest的权限修改:chmod 777 dest;
2.在rsyncd.conf文件中加入uid = root和gid = root。