美文网首页
rsync同步工具

rsync同步工具

作者: Lisong | 来源:发表于2017-05-27 06:02 被阅读817次

    简介:###

    rsync 是Linux系统下的数据镜像备份工具,通过rsync 可以将本地的系统数据通过网络备份到任何远程主机上.
    rsync 主页地址:http:/rsync.samba.org
    rsync特性:

    • 可以镜像保存整个目录树和文件系统
    • 可以增量同步数据,文件传输效率高,因而同步时间很短
    • 可以保持原有文件的权限,时间等属性
    • 加密传输数据,保证了数据的安全性

    安装rsync###

    服务端和客户端都需要安装

    ./configure
    make
    make install
    

    创建rsync 配置文件###

    vi /etc/rsysncd.conf
    
    uid=nobody
    gid=nobody
    max connections=10
    pid file=/var/run/rsyncd.pid
    lock file=/var/run/rsync.lock
    log file=/var/run/rsyncd.log
    
    [webdba]
    path=/webdata
    comment=webdba file
    ignore errors
    read only=true
    list=false
    uid=root
    gid=root
    auth users=backup
    secrets file=/etc/server.pass
    

    创建rsync连接用户和密码文件###

    vi /etc/server.pass
    backup:abc123
    

    配置文件解释
    uid 当模块传输文件时守护进程应该具有的用户ID,默认值时 "nobody"
    gid 当模块传输文件时守护进程应该具有的用户组ID,默认值时 "nobody"
    max connections 最大并发连接数,以保护服务器,超过限制的连接数请求时,将被暂时限制。默认为0(没有限制)
    pid file 用来指定rsync 守护进程对应的PID文件路径
    lock file 用来支持max connections 的锁文件,默认值时/var/run/rsyncd.lock
    log file 指定rsync的日志输出文件路径
    [webdba] 定义一个模块的开始 webdba对应的是模块名称
    path 用来指定需要备份的文件或目录,必须填
    list 当客户端请求可以使用模块列表时,该模块可以被列出。默认为True,如果需要被隐藏,可以设置为false
    auth users 用来定义可以连接到该模块的用户名,多个用户用空格或者逗号分隔(需要注意这里的用户不是Linux的系统用户,没有任何关系)
    secrets file 指定一个包含 "用户名:密码" 格式的文件

    服务端启动 rsync 守护进程###

    /usr/local/bin/rsync --daemon
    
    ps -rf|grep rsync
    root     20278     1  0 16:29 ?        00:00:00 /usr/local/bin/rsync --daemon 
    

    客户端配置rsync###

    创建一个 secrets file,此文件的内容为服务端的 rsyncd.conf 文件中 "auth users"选项指定用户的密码,仅为备份用户的密码,而这个文件的名称以及路径可以随意
    指定,只要在执行 rsync 同步时指定即可。

    vi /etc/server.pass
    abc123
    

    在客户端执行同步命令###

    /usr/local/bin/rsync -vzrtopg --delete --progress backup@192.168.60.253::webdba /webdba  --password-file=/etc/server.pass 
    

    "--vzrtopg" 选项中
    v 是"—verbose",即详细模式输出
    z 表示"--compress" 即对备份的文件在传输时进行压缩处理
    r 表示"--recursive",也就是对子目录以递 归模式处理
    t 即"--times",用来保持文件时间信息
    o 即"--owner"用来保持文 件属主信息
    p 即"--perms"用来保持文件权限
    g 即"--group"用来保持文件的属组信息

    "--delete" 选项指定以 rsync 服务端为基准进行数据镜像同步,也就是要保持 rsync 服务端目录与客户端目录的完全一致性。在这里是以服务器为基准进行同步。

    "--progress" 选项用于显示数据镜像同步的过程。

    "backup@192.168.60.253::webdba" 表示对服务器 192.168.60.253 中的 webdba 模块进行备份,也就是指定备份的模块,backup 表示使用"backup"这个用 户对该模块进行备份。

    "/webdba"用于指定备份文件在客户端机器上的存放路径,也就是将备份的文件 存放在备份机的/webdba 目录下。

    "--password-file=/etc/server.pass" 用来指定客户机上存放的密码文件位置,这样在客户端执行同步命令时就无需输入交互密码了,注意,这个密码文件的名称和位置可以随意指定,但是在客户机上必须存在此文件,文件的内容仅仅为备份用户的密码,这里指的是 backup 的密码。

    rsync+ssh 实现文件备份###

    当在两台计算机之间保持大型、复杂目录结构的同步时候,使用 ssh+rsync 比 tar 或 wget 等方式都要快。而且可以做到精确同步。
    首先需要利用 ssh 客户端密钥建立信任关系,然后直接调用 rsync 命令即可。
    用法如下:

    /usr/bin/rsync -avzPL  --timeout=600  root@IP:/A/B/C  /B/D/F 
    命令              参数      超时时间       远程地址:远程服务器的目录  本地保存的目录
    

    触发同步指令的方式有很多种,例如可以将同步指令放入客户端系统的 crontab 守护进程, 设定同步时间,然后让Linux 去触发同步指令,自动完成数据备份。这种数据备份方式可以用于数据安全性要求不是很高的业务系统上。

    rsync 客户端命令参数

    -v, –verbose 详细模式输出
    -q, –quiet 精简输出模式
    -c, –checksum 打开校验开关,强制对文件传输进行校验
    -a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
    -r, –recursive 对子目录以递归模式处理
    -R, –relative 使用相对路径信息
    -b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新 命名为~filename。可以使用–suffix 选项来指定不同的备份文件前缀。
    –backup-dir 将备份文件(如~filename)存放在在目录下。
    -suffix=SUFFIX 定义备份文件前缀
    -u, –update 仅仅进行更新,也就是跳过所有已经存在于 DST,并且文件时间晚于要备 份的文件。(不覆盖更新的文件)
    -l, –links 保留软链结
    -L, –copy-links 想对待常规文件一样处理软链结
    –copy-unsafe-links 仅仅拷贝指向 SRC 路径目录树以外的链结
    –safe-links 忽略指向 SRC 路径目录树以外的链结
    -H, –hard-links 保留硬链结
    -p, –perms 保持文件权限
    -o, –owner 保持文件属主信息
    -g, –group 保持文件属组信息
    -D, –devices 保持设备文件信息
    -t, –times 保持文件时间信息
    -S, –sparse 对稀疏文件进行特殊处理以节省 DST 的空间
    -n, –dry-run 现实哪些文件将被传输
    -W, –whole-file 拷贝文件,不进行增量检测
    -x, –one-file-system 不要跨越文件系统边界
    -B, –block-size=SIZE 检验算法使用的块尺寸,默认是 700 字节
    -e, –rsh=COMMAND 指定使用 rsh、ssh 方式进行数据同步
    –rsync-path=PATH 指定远程服务器上的 rsync 命令所在路径信息
    -C, –cvs-exclude 使用和 CVS 一样的方法自动忽略文件,用来排除那些不希望传输的文件
    –existing 仅仅更新那些已经存在于 DST 的文件,而不备份那些新创建的文件
    –delete 删除那些 DST 中 SRC 没有的文件
    –delete-excluded 同样删除接收端那些被该选项指定排除的文件
    –delete-after 传输结束以后再删除
    –ignore-errors 及时出现 IO 错误也进行删除
    –max-delete=NUM 最多删除 NUM 个文件
    –partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
    –force 强制删除目录,即使不为空
    –numeric-ids 不将数字的用户和组 ID 匹配为用户名和组名
    –timeout=TIME IP 超时时间,单位为秒
    -I, –ignore-times 不跳过那些有同样的时间和长度的文件
    –size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
    –modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为 0
    -T –temp-dir=DIR 在 DIR 中创建临时文件
    –compare-dest=DIR 同样比较 DIR 中的文件来决定是否需要备份
    -P 等同于 –partial
    –progress 显示备份过程
    -z, –compress 对备份的文件在传输时进行压缩处理
    –exclude=PATTERN 指定排除不需要传输的文件模式
    –include=PATTERN 指定不排除而需要传输的文件模式
    –exclude-from=FILE 排除 FILE 中指定模式的文件
    –include-from=FILE 不排除 FILE 指定模式匹配的文件
    –version 打印版本信息
    –address 绑定到特定的地址
    –config=FILE 指定其他的配置文件,不使用默认的 rsyncd.conf 文件
    –port=PORT 指定其他的 rsync 服务端口
    –blocking-io 对远程 shell 使用阻塞 IO
    -stats 给出某些文件的传输状态
    –log-format=formAT 指定日志文件格式
    –password-file=FILE 从 FILE 中得到密码
    –bwlimit=KBPS 限制 I/O 带宽,KBytes per second
    -h, –help 显示帮助信息

    常见 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
    1. @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 应该差不多就可以了
    1. @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 中的密码, 二端是否一致?
    1. password file must not be other-accessible continuing without password file Password:
      这表示 rsyncd.scrt 的档案权限属性不对, 应设为 600。
    1. @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 开 设好要备份目录
    1. @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 服务,问题解决
    2. @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
    1. rsync: recv_generator: mkdir "/teacherclubBackup/rsync……" failed: No space left on device
      (28)
      *** Skipping any contents from this failed directory ***
      磁盘空间满了
    1. rsync: opendir "/kexue" (in dtsChannel) failed: Permission denied (13)
      同步目录的权限设置不对,改为 755
    1. 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
    1. rsync: unable to open configuration file "/etc/rsyncd.conf": No such file or directory
      xnetid 查找的配置文件位置默认是/etc 下,在/etc 下找不到 rsyncd.conf 文件
    1. 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 测试
    1. 我需要在防火墙上开放哪些端口以适应 rsync?
      rsync 可以直接通过 873 端口的 tcp 连接传文件,也可以通过 22 端口的 ssh 来进行文件传递, 但也可以通过下列命令改变它的端口:
      rsync --port 8730 otherhost:: 或者
      rsync -e 'ssh -p 2002' otherhost:
    1. 如何通过 rsync 只复制目录结构,忽略掉文件呢?
      rsync -av --include '/' --exclude '' source-dir dest-dir
    1. 为什么我总会出现"Read-only file system"的错误呢? 看看是否忘了设"read only = no"了
    1. @ERROR: chroot failed
      rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
      原因:
      服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。
    1. @ERROR: auth failed on module tee
      rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
      原因:
      服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证 失败。提供正确的用户名密码解决此问题。
    2. @ERROR: Unknown module ‘tee_nonexists’
      rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
      原因:
      服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。

    相关文章

      网友评论

          本文标题:rsync同步工具

          本文链接:https://www.haomeiwen.com/subject/kppffxtx.html