zoukankan      html  css  js  c++  java
  • rsync实现文件同步

    rsync是类unix系统下的数据镜像备份工工具,一般linux系统都自带了 [可以确认一下:shell>rpm -qa|grep rsync]

    服务端:192.168.1.2  同步目录:/home/source

    客户端:192.168.1.3  同步目录:/home/receive

    1、服务端配置

    shell>vi /etc/rsyncd.conf   #创建配置文件rsyncd.conf

    配置文件内容:

    uid=nobody
    gid=nobody
    use chroot = no
    max connections = 10
    pid file = /var/run/rsyncde.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    Timeout = 300
    Log format = %t %a %m %f %b
    [backup]
    path=/a/system_build/leia/
    ignore errors
    read only = yes
    list = no
    auth users = rsync
    secrets file = /etc/rsyncd.secrets
    hosts allow = 9.115.249.158
    hosts deny = 0.0.0.0/0
    

      

    shell>vi etc/rsyncd.secrets #创建密码文件

    内容:

    rsync:rsync //这里用户名和密码都定义为rsync

    shell>chmod 0600 /etc/rsyncd.secrets  #更改密码文件权限

    shell>rsync --daemon;  #启动服务,默认在873端口监听(可以自己修改)  or  /usr/bin/rsync --daemon

    检查进程是否存在,

    ps -aux |grep rsync
    root      4406  0.0  0.0   4228   588 ?        Ss   May14   0:00 /usr/local/bin/rsync --daemon
    netstat -an |grep 873
    tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN
    

    出现以上结果,表明rsync服务器端已经启动。

    打开防火墙

    iptables -i INPUT -p tcp --dport 873 -j ACCEPT
    iptables -L
    结果如下
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT tcp -- anywhere anywhere tcp dpt:rsync

    rsync开机启动
    echo "/usr/bin/rsync --daemon" >> /etc/rc.local

    (开机自动启动rsync服务)

    注意事项
    1) 提示密码文件不能读,需要手工输入密码时,可能就是密码文件权限不是600,或者格式不对,或者是路径不对。
    2) 提示要创建新目录或文件传输失败时,可能是欲同步的目录没有权限,最好把欲同步的目录权限修改为744。
    3) 从客户端同步文件到服务端时,最好单个文件目录传输,否则易出错。


    2、客户端

    客户端就不用启动rsync服务了

    shell>vi /etc/rsyncd.secrets #这里也是创建密码文件,文件名字自定义,但内容只需要填目标服务授权密码

    内容:

    rsync //这里是服务端rsync服务授权密码

    shell>chmod 0600 /etc/rsyncd.secrets #更改文件权限

    测试:(在服务端/home/source/ 先创建test文件 )

    shell>rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.secrets rsync@192.168.1.2::backup /home/receive

    v:传输时的进度等信息, z:表示压缩, r:是递归, t:保持文件原有时间, o:保持文件原有属主, P:传输进度, g:保持文件原有用户组
    --progress 指显示

    --delete 指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致

    --password-file=/etc/rsyncd.secrets 认证密码

    rsync 认证用户

    backup 认证模块

    如果客户端/home/receive/下产生了test文件代表同步成功

    下一步写一个脚本文件实现真正的同步......

    启动脚本:rsync.sh 

    shell>vi /home/rsync.sh

    #!/bin/sh
    rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.secrets rsync@192.168.1.2::backup /home/receive

    关闭脚本:killrsync.sh

    shell>vi /home/killrsync.sh

    #!/bin/sh
    RSYNC_PID=`ps auxww|grep rsync |grep -v grep|awk '{print $2}'`
    kill -9 $RSYNC_PID

    设置定时任务 (crontab?google can help you!)

    shell>crontab -e

    SHELL=/bin/sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    0 3 * * * /home/rsync.sh //每天晚上3点执行一次同步
    0 6 * * * /home/killrsync.sh //每天早上6点强制终止同步(如果还没完成)

    shell>crontab -l #可以查看任务设置情况

    shell>service crond status #查看crond是否已启动,若启动了能看到PID

    shell>service crond start #启动crond服务


    --------------------------------------------------------
    rsync常见错误排错
    1.
    rsync: failed to connect to 118.244.216.177: No route to host (113)
    rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]
    原因:防火墙屏蔽了端口
    解决:打开873段考
    iptables -i INPUT -p tcp --dport 873 -j ACCEPT
    iptables -L
    如果以上指令不行,可以直接停掉防火墙
    /etc/init.d/iptables stop

    2.
    @ERROR: auth failed on module backup
    rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
    那估计是密码文件没有设置权限哦: chmod 600 /home/admin/security/rsync.pass
    应该差不多就可以了

    3.@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)
    这是因为密码设错了, 无法登入成功, 请检查一下 rsyncd.scrt 中的密码, 二端是否一致?

    4.password file must not be other-accessible
    continuing without password file
    Password:
    这表示 rsyncd.scrt 的档案权限属性不对, 应设为 600。

    5.@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)
    这通常是您的 rsyncd.conf 中的 path 路径所设的那个目录并不存在所致.请先用 mkdir开设好要备份目录

    6.@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)
    最后原因终于找到了。因为有两个网段都需要同步该文件夹内容,但没有在hosts allow 后面添加另一个IP段
    hosts allow = 192.168.1.0/24
    改为
    hosts allow = 192.168.1.0/24 192.168.2.0/24
    重新启动rsync服务,问题解决

    7.@ERROR: auth failed on module backup
    rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
    client端没有设置/etc/rsync.pas这个文件,而在使用rsync命令的时候,加了这个参数--password-file=/etc/rsync.scrt

    8.rsync: recv_generator: mkdir "/teacherclubBackup/rsync……" failed: No space left on device (28)
    *** Skipping any contents from this failed directory ***
    磁盘空间满了

    9.rsync: opendir "/kexue" (in dtsChannel) failed: Permission denied (13)
    同步目录的权限设置不对,改为755

    10.rsync: read error: Connection reset by peer (104)
    rsync error: error in rsync protocol data stream (code 12) at io.c(759) [receiver=3.0.5]
    未启动xinetd守护进程
    [root@CC02 /]# service xinetd start

    11.rsync: unable to open configuration file "/etc/rsyncd.conf": No such file or directory
    xnetid查找的配置文件位置默认是/etc下,在/etc下找不到rsyncd.conf文件

    12.rsync: failed to connect to 203.100.192.66: Connection timed out (110)
    rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]
    连接服务器超时,检查服务器的端口netstat –tunlp,远程telnet测试

    13.我需要在防火墙上开放哪些端口以适应rsync?
    视情况而定。rsync可以直接通过873端口的tcp连接传文件,也可以通过22端口的ssh来进行文件传递,但你也可以通过下列命令改变它的端口:
    rsync --port 8730 otherhost::
    或者
    rsync -e 'ssh -p 2002' otherhost:

    14.我如何通过rsync只复制目录结构,忽略掉文件呢?
    rsync -av --include '*/' --exclude '*' source-dir dest-dir

    15.为什么我总会出现"Read-only file system"的错误呢?
    看看是否忘了设"read only = no"了

    16.@ERROR: chroot failed
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:
    服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。

    17.@ERROR: auth failed on module tee
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:
    服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。提供正确的用户名密码解决此问题。

    18.@ERROR: Unknown module ‘tee_nonexists’
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:
    服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。

    19.权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)

  • 相关阅读:
    ORA12560: TNS: 协议适配器错误
    eclipse无法识别Web项目的问题
    搭建eclipse+tomcat开发环境
    初探弹出层的实现原理
    样式可控的左右选择组件
    在TSQL中用队列来遍历层级数据
    复利计算工具 wpf
    浏览WPF中内置颜色名对应的颜色
    原创:通过VS 2010+SVN为SQL Server提供数据库版本管理
    原创:学习英语小助手(阅读粘贴的英文,使用MVVM)
  • 原文地址:https://www.cnblogs.com/WayneZeng/p/9290737.html
Copyright © 2011-2022 走看看