前段日子在网上找rsync daemon的filter等过滤规则的详解,怎么也找不到,哥一怒之下,决定自己动手翻译,于是有了本文…
    本文内容翻译自rsync的官方文档:http://rsync.samba.org/ftp/rsync/rsync.html,以及http://rsync.samba.org/ftp/rsync/rsyncd.conf.html,非完整的全文翻译,并且按照我的需要,对原文的相关章节或条目进行了适当的重新编排。官方文档发布日期:26 Mar 2011。

rsync是Unix/Linux系统中一款优秀高效的镜像同步和远程数据备份工具,它可以把本地文件拷贝到远程主机,或从远程主机拷贝文件到本地,也可以在本地的两个目录之间进行拷贝,但不支持两个远程主机之间的互相拷贝。

关于rsync的工作方式:
    rsync连接远程主机进行同步或备份时有两种途径:使用远程shell程序(如ssh或rsh)进行连接,或使用TCP直接连接rsync daemon。
    当源路径或目的路径的主机名后面包含一个冒号分隔符时,rsync使用远程shell传输;当源路径或目的路径的主机名后面包含两个冒号,或使用rsync://URL时,rsync使用TCP直接连接rsync daemon。
    特别的,如果只指定了源路径,而没有指定目的路径,rsync将会显示源路径中的文件列表,类似于使用命令ls -l。

 rsync把本地端看作client,把远程端当成server。注意:不要把server与rsync daemon混淆!daemon一定是server,而server却不一定是daemon,也可能是远程shell的衍生进程。
    至于什么是daemon,以及远程shell衍生daemon,下文会有说明。

 关于rsync的安装:
    rsync安装方式是最常规的./configure && make && make install,只是要注意:源机器和目标机器都要安装。

关于rsync的启动:
    前面说过rsync在进行同步或备份时,有两种途经连接远程主机:使用远程shell,或使用TCP连接远程daemon,可以把它们分别称之为shell模式和daemon模式。只有daemon模式才有启动rsync一说。
    如果使用shell模式,rsync安装完成后就可以直接使用了,无所谓启动,也不需要任何配置文件。远程传输时一般使用ssh作为传输工具,当然,也可以使用参数-e来指定一个远程shell。
    如果使用daemon模式,就无需远程shell了,但必须在一台机器上启动rsync daemon,默认端口873.

你可以经由inetd启动daemon,或者作为一个独立进程启动daemon,或者由rsync client通过远程shell启动daemon。
     1)如果把它作为一个独立进程来启动,只需要运行命令:rsync --daemon即可;
     2)如果通过inetd来运行,要修改两个文件:/etc/services和/etc/inetd.conf:
      在/etc/services文件中添加如下行:rsync 873/tcp
      在/etc/inetd.conf中添加:rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon
  注意把/usr/bin/rsync换成你的rsync安装目录!然后重启inetd服务,使配置文件生效。

关于由client通过远程shell启动daemon,官方文档中有一个条目:USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION。
    条目中说,rsync支持这种用法:使用远程shell连接host,然后衍生出一个single-use “daemon”服务器,来读取远程用户家目录下的配置文件。从用户的角度看,通过远程shell连接而启用的daemon传输,它的命令行语法跟正常的rsync daemon传输是一样的,唯一不同的是,你必须在命令中使用--rsh=COMMAND来明确远程shell程序。如下例:
    rsync -av --rsh=ssh host::module /dest
  译者注:虽然官方文档中说这种用法在某些情况下很有用,但我觉得很别扭。

当rsync作为daemon运行时,它需要一个用户身份。如果你希望启用chroot,则必须以root的身份来运行daemon,监听端口(1024以下,默认873),或设定文件属主;如果不启用chroot,也可以不使用root用户来运行daemon,但该用户必须对相应的模块拥有读写数据、日志和lock file的权限。
    当rsync以daemon模式运行时,它还需要一个配置文件:rsyncd.conf。修改这个配置后不必重启rsync daemon,因为每一次的client连接都会去重新读取该文件。
    译者注:关于配置文件rsyncd.conf的设定,后面会有详细的参数解释。

关于rsync的两种模式:
    该部分额外的内容来自IBM官方网站上的一篇文章。该文章把rsync的运行模式扩展成了四种,但我认为rsync官方文档的两种模式的划分更加合理一些。
    所谓rsync daemon,就是在一台机器上永久运行的rsync进程。在任何一台安装rsync的机器上运行rsync --daemon,则这台机器上运行的rsync就是rsync daemon。我们可以把文件发送给daemon,也可以向daemon请求文件。
    daemon模式非常适合创建中心备份服务器,或项目存储库。
    两种模式的区别前面已经说过,shell模式在源路径和目的路径中使用一个冒号,而daemon模式使用两个冒号。

关于rsync命令的语法:

本地拷贝:    rsync [选项] SRC… DEST,在本地进行复制操作 shell模式:    rsync [选项] [user@]Host:SRC… [DEST],拉动作,从远程主机拉文件到本地    rsync [选项] SRC… [user@]Host:DEST,推动作,把本地文件推送到远程主机 daemon模式:    rsync [选项] [user@]Host::SRC… [DEST],拉动作    rsync [选项] rsync://[user@]Host [:port]/SRC… [DEST],仍然是拉动作    rsync [选项] SRC... [user@]Host::DEST,推动作    rsync [选项] SRC...rsync://[user@]Host [:port]/DEST,仍然是推动作

官方文档的举例:
    1)rsync -t *.c foo:src/
        把当前目录中所有以.c结尾的文件传输到机器名为foo的src目录中。如果某些文件已经在远程主机中存在,则跳过该文件。
    2)rsync -avz foo:src/bar /data/tmp
         从机器名为foo的远程主机上把/src/bar目录及其下所有文件传输到本地机器的/data/tmp目录中。注意:源路径src/bar的最后没有斜杠”/”!
        源路径的最后是否有斜杠有不同的含义:有斜杠,只是复制目录中的文件;没有斜杠的话,不但要复制目录中的文件,还要复制目录本身!
        目的路径的最后有没有斜杠,对传输没有影响。
    3)rsync -av host:file1 :file2 host:file{3,4} /dest/
         rsync -av host::mod/file{1,2} host::mod/file3 /dest/
         rsync -av host::mod/file1 ::mod/file{3,4}
        这个例子是rsync更高级一点的用法,使用rsync同时传输多个指定文件。
    rsync可以一次传输多个指定的文件,方法是添加多个远程主机参数,或忽略主机名。如上例。

关于rsync命令中的选项:
    上面例子中提到了一些选项,rsync的选项有很多,请参考官方文档。常用的选项如下:

-a:归档模式,保持文件的所有属性,相当于-rlptgoD -r:递归模式 -e:指定一个远程shell -z:文件传输时进行压缩处理 --delete:镜像中常用,删除DEST中那些SRC中不存在的文件

 daemon也有一些常用选项,下面会有介绍。

 client如何连接rsync daemon:
    上面第3个例子已经给出了client连接daemon的语法示例。但是官方文档又把本条目单独列了出来,提醒我们在连接rsync daemon时要注意的几点:
    1) daemon模式中的源路径,即SRC,实际上是模块的名称
    2) 如果未在双冒号::后面指定源路径,则rsync会列出daemon上所有可能的模块
    3) 不要使用--rsh(-e)参数
    4) 有些模块可能需要密码认证,你可以使用--password-file选项,来指定密码文件

 启用一个rsync daemon来接受client的连接:
    除--daemon外,rsync daemon启动时还有其它一些常用选项:
    --daemon:
      使rsync作为一个daemon运行。daemon有两种启动方式,前面已经说过。对client发出的每一次连接请求,daemon会读取配置文件rsyncd.conf,然后做出相应的回应。
    --bwlimit=KBPS:
      指定daemon每秒传输的最大千字节。client在请求连接时也可以指定一个--bwlimit值,但该值不能大于daemon端的设置。
    --config=FILE:
      指定daemon的配置文件。只有当rsync以daemon模式运行的时候,该选项才有效。默认的配置文件为/etc/rsyncd.conf,除非daemon是通过远程shell运行,并且远程user非超级用户,这种情况下,配置文件rsyncd.conf默认存在于当前目录(在$HOME目录中比较典型)。关于通过远程shell启用daemon,见上文。
    --port=PORT:
      指定daemon监听的端口。
    --log-file=FILE:
      该选项告诉daemon不要使用rsyncd.conf中指定的log文件,而要使用此处指定的文件。此选项很少用到。

原文地址:

http://share.blog.51cto.com/278008/560742

转载于:https://blog.51cto.com/caduke/1654507

rsync的原理——转载相关推荐

  1. linux+mmap父子通信_linux库函数mmap()原理?转载

    linux库函数mmap()原理 转载 1.mmap基本概念 2.mmap内存映射原理 3.mmap和常规文件操作的区别 4.mmap优点总结 5.mmap相关函数 6.mmap使用细节 7.mmap ...

  2. rsync算法原理及使用

    如果服务器之间需要保持某些文件的一致,我们可以使用scp来复制,如果需要长期保持一致,可以配合crontab脚本来使用.但是此时我们有更优的方式,就是rsync+crontab来实现定时增量传输保持文 ...

  3. ConcurrentHashMap实现原理--转载

    原文地址:http://ajax-xu.iteye.com/blog/1104649 ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现.在这之前我对C ...

  4. java原子操作的实现原理--转载

    原文地址:http://www.infoq.com/cn/articles/atomic-operation 1. 引言 原子(atom)本意是"不能被进一步分割的最小粒子",而原 ...

  5. JDK动态代理实现原理--转载

    之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了.  ...

  6. jQuery UI Widget(1.8.1)工作原理--转载

    先看下代码的相关注释: /*!* jQuery UI Widget 1.8.1** Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) ...

  7. 深度剖析:CDN内容分发网络技术原理--转载

    1.前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因 ...

  8. 深入分析 iBATIS 框架之系统架构与映射原理--转载

    http://www.ibm.com/developerworks/cn/java/j-lo-ibatis-principle/ iBATIS 通过 SQL Map 将 Java 对象映射成 SQL ...

  9. linux rsync 原理,rsync 同步原理和类别

    前言 在電腦裡,我們可能存放了工作上的資料或是生活上的回憶.這些資料對我們來說,都是極為重要的.因此,需要有效的方法來保護這些資料,避免資料損毀,造成損失與遺憾. 為了保護資料的完整性,可以採用硬體或 ...

最新文章

  1. Navicat新建查询快捷键
  2. cdh4.6.0升级测试1
  3. python导出数据找不到csv_python – 将数据从neo4j导出到csv而不是json
  4. Springboot遇到的问题
  5. gulp不生成打包文件_命令行输入gulp 无法生成压缩文件
  6. 关于东南亚互联网市场的现状,有些问题得搞清楚
  7. NNI speedup_model()代码笔记
  8. substratum android8,substratumlite主题管理
  9. Luogu P1850换教室【期望dp】By cellur925
  10. java 根据pdf模板表单生成对应pdf(用于荣誉证书等生成)
  11. MetaAI的融合怪:BlenderBot
  12. WIN10和Ubuntu共享蓝牙连接配对
  13. BootStrap 导航栏实现下滑消失,上滑出现
  14. itertools.groupby与pandas.groupby的异同
  15. 我为什么要学习openCV,什么是openCV
  16. OSPF的不规则区域和LSA数据包
  17. 【全文翻译】How to Backdoor Federated Learning
  18. 更方便、更实用的IDC机房服务器监控软件UNNOC
  19. 达内C语言试题,(达内培训2013年计算机等考二级C语言模拟试题四及参考答案.doc...
  20. Manacher(马拉车算法)

热门文章

  1. 逻辑回归和线性回归的区别_机器学习简介之基础理论- 线性回归、逻辑回归、神经网络...
  2. ue的xml格式转换_VCARD格式
  3. mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)
  4. linux 阶段作业领导者,Linux入职基础-5.22_命令ps显示进程状态(应用实战6)
  5. 服务器怎么查看性能,查看服务器进程性能查看
  6. 笔记-信息化与系统集成技术-区块链的技术架构
  7. 笔记-项目立项管理-项目建议书
  8. Android Studio一直Download fastutil-x.x.x.jar
  9. Android中通过ImageSwitcher实现相册滑动查看照片功能(附代码下载)
  10. Winform中对DevExpress的RadopGroup的Description、Value、Tag、Text的理解与使用