目录

  • 1. 概念
  • 2. 特性
  • 3. 流程示意图
  • 4. 工作原理
    • (1) 进程和角色
    • (2)进程开始
    • (3)The Files list(文件列表)
    • (4)The Pipeline(管道)
    • (5)The Generator
    • (6)The Sender
    • (7)The Receiver
    • (8)The Daemon

建议结合阅读文章:Rsync核心算法讲解


1. 概念

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。


2. 特性

  1. 可以镜像保存整个目录树和文件系统。
  2. 可以很容易做到保持原来文件的权限、时间、软硬链接等等。
  3. 无须特殊权限即可安装。
  4. 快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
  5. 安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
  6. 支持匿名传输,以方便进行网站镜像。

3. 流程示意图

  • 注:整个流程示意图分为2部分

下图为示意图 Part.1

下图为示意图 Part.2

  • 注:本文中3.部分中流程示意图与4.部分中工作原理相对应,建议合理配合食用,风味更佳。

4. 工作原理

(1) 进程和角色

进程 角色
Client 客户端初始化连接
Server 客户端连接的远端rsync进程或系统;一旦客户端和服务器端的连接被建立,客户端和服务器端就转换为sender和receiver的角色
Daemon 等待着客户端连接的rsync进程,作为守护进程的启动方法: # /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
Remote shell 提供rsync client与远端rsync server间连接的一个或多个进程
Sender 访问将被同步的源文件的Rsync进程
Receiver 作为角色,receiver就是文件同步的目的系统;作用为进程,receiver就是更新并且将更新写入磁盘的进程
Generator Generator进程签别变更的文件并且管理文件级逻辑

(2)进程开始

当rsync客户端启用后,rsync客户端首先与server进程建立一个连接,此连接可通过管道也可以通过网络socket建立。

  1. 当rsync与远端的非deamon server通讯时,远端shell启用的方法是fork the remote shell,它将在远端系统中start一个rsync服务器。Rsync client和server经由管道与远端的shell通讯。直到rsync进程意识到无网络。在此模式下,对于server进程的rsync选项通过命令行传递,这些命令行被用于启动remote shell。

  2. 当rsync与daemon进行通讯时,直接通过网络socket。在此种模式下,rsync选项必须通过socket送出,如下所述:
    当通讯开始时,两端都先发送它们各自支持的最大协议版本号,尔后每一端都使用最小版本号协议传送。假如是daemon模式,rsync的选项从client发送给server,然后exclude list(排除列表)被传送,从这点开始,client-server关系是相对的,仅针对错误和日志消息传递


(3)The Files list(文件列表)

文件列表不只包括路径名,也包括ownership, mode, permissions, size和modtime,假如checksum选项被指定,则文件列表也包括checksums。

  1. Startup结束后的第一件事就是sender将产生文件列表,每一个在文件列表中的条目被传送至接收端。
  2. 文件列表传送完成后,每一端分类(sorts)文件列表,依据传输的相对基目录(具体的排序算法依据传输协议的版本而不同)。
  3. 文件列表在端间分享成功后,所有对文件的引用都将通过文件列表中的索引来完成。
  4. 如果需要,sender将为users and groups根踪文件列表中的id-name 表,receiver将使用它为在文件列表中的每一个文件完成idnameid翻译

(4)The Pipeline(管道)

Rsync是重pipelined的,这意味着它是进程间双向通讯的集合,一旦文件列表被共享,其pipeline的行为如下:

Generator–> sender–>receiver

  • Generator的输出是sender的输入,而sender的输出是receiver的输入,每一个进程独立运行。

(5)The Generator

Generator进程将文件列表与本地目录树相比较,并开始遍历(walking) the files list,每一个文件都将被检查,以便查看是否可以skipped。

  • 在大多数文件操作方式下,假如文件的时间和大小被修改,这些文件都不会被skipped。假如checksum选项被指定,则文件级的checksum将被产生并被比较。目录、设备节点和链接将不会skipped。丢失的目录将被重建。

  • 假如一个文件不被skipped,在接收端任何现存该文件的版本将作为传输的“basis file”,此“basis file”被用作数据源,以减少由sender发送数据的数量(文件中匹配的部分将不被sender传送)。

  • 为了使远端匹配的数据更为有效和可靠,“basis file”的块checksum被产生,并跟随文件的index number发送给the sender。


(6)The Sender

  1. The Sender进程每一次都读取一组来自于generator的文件的index number和与此相联系的块checksum集合。对于每一个generator发送来的文件id,都存储着块checksum和一个hash index,以便于快速查询。

  2. 然后,本地文件被读取,本地文件块的第一个字节的checksum被计算出来。并与由generator发送过来的此文件的第一个字节的checksum进行比较,

  3. 假如不匹配被发现,则不匹配的字节将被对应到不匹配的数据中,再开始此块中的下一个字节的比较,以此类推,这就是所谓的“rolling checksum”。

  4. 假如一个块的checksum匹配被发现,那么此匹配的块 和任何累计的不匹配数据跟随偏移量和接收端文件的匹配块的长度被发送给receiver。

【 不匹配的块就是以这种方式被鉴别出来,此进程就是rsync算法的核心 】

  • 采用这种方式,the sender将给the receiver作出提示 —— 如何在新的目的文件中重建源文件。

  • 这些提示详细地给出了:
    可被直接由“basis file”复制过来的匹配数据(假如此“base file”存在),并且这些提示也包含着在本地的“base file”尚不存在的raw data。

最后,每一个文件的whole-file checksum被处理完,并被发送给the receiver,the sender处理下一个文件。

  • 以此种方式工作,发送者是CPU高度密集型的。

(7)The Receiver

  1. The receiver读取由The sender发送过来由文件index number标识的每一个文件的数据,
  2. The receiver打开本地文件(被称为“basis file”),
  3. 并且The receiver也生成一个临时文件。

The receiver希望读到最终文件内容的按序排列的所有非匹配数据和或匹配记录。

  • 当非匹配数据被读到后:
    the receiver将其写入临时文件;

  • 当块的匹配记录被读到时:
    The receiver将从basis file中搜询到此块的偏移量,并将它们复制到临时文件中;

以此方式,临时文件被从头至尾重建。

  • 临时文件被重建后,此文件的checksum被计算出来,

  • 在此文件的最后,此文件的checksum与来自于the sender的checksum相比较,假如不匹配,则该临时文件将被删除,文件重建失败两次后,错误将被报告。

  • 在临时文件重建完成后,此文件的ownership、permissions及modification time将被设置,然后将此临时文件重命名,以替代原basis file。

  • 将数据由“basis file”拷贝至临时文件,在所有rsync进程中,接收器是磁盘高度密集型的。


(8)The Daemon

The Daemon进程,类似于其它daemon,为每一个连接产生一个子进程,在进程启动时,它读取并解释/etc/rsyncd.conf文件,以确定何种模块存在 ,并设置全局选项。

  • daemon进程又称为守护 进程,是在系统启动就运行,系统关闭才停止的进程,独立于终端之外,不与客户端交互。一般进程在关闭终端后就停止了,而daemon进程不会停止。

当一个连接请求被接收,daemon fork一个子进程以处理此连接,该子进程读取rsyncd.conf文件以设置请求模块的选项,这些选项可能是chroot to the module,也可能是drop setuid或setgid for the process,此后,其行为类似于任何其它rsync服务器进程,要么扮演sender角色,要么扮演receiver角色。


嗝 ~~~

下一篇将是Linux下Rsync数据镜像同步的基本实现,链接稍后奉上!

Rsync镜像备份工作原理(含流程示意图)相关推荐

  1. ARKit从入门到精通-ARKit工作原理及流程介绍

    2017-06-15 坤小 Cocoa开发者社区 转载请注明出处:http://www.jianshu.com/p/0492c7122d2f 1.1-写在前面的话 1.2-ARKit与SceneKit ...

  2. ARKit从入门到精通(2)-ARKit工作原理及流程介绍

    转载请注明出处:ARKit从入门到精通(2)-ARKit工作原理及流程介绍 1.1-写在前面的话 1.2-ARKit与SceneKit的关系 1.3-ARKit工作原理 1.3.1-ARSCNView ...

  3. springmvc工作流程_springMVC工作原理及流程详细讲解

    简述 本文主要介绍springMVC工作原理. 工作原理 客户端发送HTTP请求,DispatcherServlet控制器拦截到请求,调用HandlerMapping 解析请求对应的Handler,H ...

  4. Spark SQL架构工作原理及流程解析

    Spark SQL架构工作原理及流程解析,spark sql从shark发展而来,Shark为了实现Hive兼容,在HQL方面重用了Hive中HQL的解析.逻辑执行计划翻译.执行计划优化等逻辑. Sp ...

  5. 身份证OCR识别工作原理及流程

    随着互联网科技.移动互联科技的发展和云端计算服务.移动智能设备的普及(性能提升),智能OCR识别技术在云端.服务器端及移动端的应用也得到了长足的发展.今天为大家介绍下身份证OCR识别如何快捷.准确的识 ...

  6. SSM三大框架+SpringMVC的工作原理及其流程

    SSM三大框架+SpringMVC的工作原理及其流程 一.SSM中各层作用及关系 1.持久层:DAO层(mapper层)(属于mybatis模块)     DAO层(Mapper层):主要负责与数据库 ...

  7. JVM 工作原理和流程

    转 Java 详解 JVM 工作原理和流程 <div class="article-info-box"><div class="article-bar- ...

  8. lvs,dhcp,dns,lnmp,lamp,zabbix,nagios,hadoop,openstack,rsync等工作原理

    一.客户端获取DHCP的过程 1.客服端通过广播发送    DHCPdiscovery包,寻找DHCP服务器数据包 源IP:0.0.0.0    目的地址:255.255.255.0 无响应:等待1秒 ...

  9. struts2、hibernate工作原理和流程

    2019独角兽企业重金招聘Python工程师标准>>> struts2原理 在struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,包含了许多组件如:Control ...

最新文章

  1. SQL assistant
  2. Keras【Deep Learning With Python】更优模型探索Keras实现RNN
  3. 一些VR延迟优化方法
  4. 汇编语言学习工具Dosbox的安装与配置(一)
  5. c#中去掉字符串空格方法
  6. 23种设计模式之适配器模式
  7. synchronized锁升级_synchronized详解以及锁的膨胀升级过程
  8. 软件测试入坑建议:新手零基础怎么入门软件测试?你还缺这几份资料!
  9. oracle怎么定位效率,oracle查询效率,该怎么解决
  10. 算法和数据结构---排序---插入排序
  11. android uid变化,在Android中安装期间确定应用的UID如何?
  12. VC学习笔记:状态栏
  13. SpringBoot酒店管理系统 hotel.liuyanzhao.com
  14. ubuntu1604安装网卡驱动 联想g510
  15. 通过CImageList加载图标 报错
  16. 文本框里面加删除按钮
  17. 流媒体高清视频校园直播点播
  18. mysql中having的意思_正确理解MySQL中的where和having的区别
  19. Android系统HMDI音量无法梯度调节,只能0或者max
  20. 论文翻译解读:Translating Embeddings for Modeling Multi-relational Data【TransE】

热门文章

  1. python超额累进税率_python
  2. realme真我X7和X7Pro的区别 哪个好
  3. CD20嵌合单克隆抗体丨Cayman Chemical方案
  4. 向量的点乘(内积、点积)
  5. 同一个局域网中,ping不通其他电脑
  6. 使用Python爬取华尔街日报(WALL STREET JOURNAL)全文
  7. APS系列问题之选型注意事项
  8. C语言实现判断素数的功能
  9. Android 10 根文件系统和编译系统(一):根文件系统目录结构
  10. 海外的 SEO 网站如何进行优化