通过rsync客户端来同步数据
一、语法详解
在配置完rsync服务器后,就可以从客户端发出rsync命令来实现各种同步的操作。rsync有很多功能选项,下面就对介绍一下常用的选项:
rsync的命令格式可以为: 1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST 2. rsync [OPTION]... [USER@]HOST:SRC DEST 3. rsync [OPTION]... SRC [SRC]... DEST 4. rsync [OPTION]... [USER@]HOST::SRC [DEST] 5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST 6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] rsync有六种不同的工作模式: 1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。 2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。 3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。 4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。 5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。 6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。 -a 以archive模式操作、复制目录、符号连接 相当于-rlptgoD rsync中的参数 -r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件; -z 传输时压缩; -P 传输进度; -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档; -e ssh的参数建立起加密的连接。 -u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时 --progress是指显示出详细的进度情况 --delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致 --password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。
二、基础示例
1、列出rsync 服务器上的所提供的同步模块
rsync --list-only www@192.168.1.160:: --port 3873
2、列出test模块的同步文件.
rsync --list-only www@192.168.1.160::test --port 3873
3、rsync客户端同步数据
rsync -avzP www@192.168.1.160::test tool --port 3873
注:如果在客户端当前操作的目录下没有tool这个目录时,系统会自动为你创建一个;当存在tool这个目录中,你要注意它的写权限。
4、同步数据时引入一个--delete 选项
rsync -avzP --delete www@192.168.1.160::test tool --port 3873
注:加--delete 选项,表示客户端上的数据要与服务器端完全一致,如果tool目录中有服务器上不存在的文件,则删除。最终目的是让tool目录上的数据完全与服务器上保持一致,用的时候要小心点。
5、同步数据时引入一个-exclude-from,不删除文件
rsync -avz -L --progress --port=3873 --exclude-from '/tmp/exclude.txt' --password-file=rsyncd.secrets www@192.168.1.160::test tool
注意:加--exclude-from 排除FILE中指定模式的文件
6、設定rsync client,设定密码文件
rsync -avzP --delete --password-file=rsyncd.secrets www@192.168.1.160::test tool --port 3873
加了一个选项 --password-file=rsyncd.secrets,这是当我们以root用户登录rsync服务器同步数据时,密码将读取rsyncd.secrets这个文件。这个文件内容只是root用户的密码。我们要如下做;
# touch rsyncd.secrets # chmod 600 rsyncd.secrets # echo "www123"> rsyncd.secrets
注:这里需要注意的是这份密码文件权限属性要设得只有属主可读,这样就不需要密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的。
错误整理
1、错误 :
rsync: failed to connect to 192.168.1.151: Connection refused (111) rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]
解决: 网上找了一遍,selinux 和iptables防火墙关闭后,telnet可以通,但一直报错,发觉rsync端口不对,加--port 指定端口后成功。建议使用xinetd启动。
2、错误 :
@ERROR: chdir failed
解决: 网上说是服务端指定模块没有对应目录,实际rsyncd.conf文件中path中有多余的空格、空行;
3、错误:
@ERROR: auth failed on module test
解决: 服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。服务端/etc/rsync.password 配置文件是否有问题 比如:多余的空格 空行 我是在删除一下等号后面的空格解决的 。auth users=www secrets file =/etc/rsyncd.pass

浙公网安备 33010602011771号