通过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

posted @ 2017-12-06 13:54  Gringer  阅读(274)  评论(0)    收藏  举报