我们专注服务于当下互联网基础设施建设与云计算、大数据时代的各种需求!

Rsync原理以及使用

Rsync使用的Rsync演算法来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 核心算法 假定在名为和的两台计算机之间同步相似的文件A与B,其中对文件A拥有访问权,对文件B拥有访问权

Rsync使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

算法核心部分:

假定在名为α和β的两台计算机之间同步相似的文件A与B,其中α对文件A拥有访问权,β对文件B拥有访问权。并且假定主机α与β之间的网络带宽很小。那么rsync算法将通过下面的五个步骤来完成:

1.β将文件B分割成一组不重叠的固定大小为S字节的数据块。最后一块可能会比S 小。

2.β对每一个分割好的数据块执行两种校验:一种是32位的滚动弱校验,另一种是128位的MD4强校验。

3.β将这些校验结果发给α。

4.α通过搜索文件A的所有大小为S的数据块(偏移量可以任选,不一定非要是S的倍数),来寻找与文件B的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。

5.α发给β一串指令来生成文件A在β上的备份。这里的每一条指令要么是对文件B经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件B的任何一个数据块匹配上的。

Rsync的优点如下:

1.可以镜像保存整个目录树和文件系统;

2.可以很容易做到保持原来文件的权限、时间、软硬链接等;

3.无须特殊权限即可安装;

4.优化的流程,文件传输效率高;

5.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;

6.支持匿名传输。

 

 

 

基本语法

  • 通过远程 shell 方式:
  • rsync [OPTION] [USER@]HOST:SRC DEST
  • 使用远程 shell(如 ssh, rsh)实现将远程机器的内容拷贝到本地机器。 SRC 地址路径中以单个冒号 “:” 进行分隔。
  • rsync [OPTION] SRC [USER@]HOST:DEST
  • 使用远程 shell(如 rsh、ssh)实现本地机器的内容拷贝到远程机器。 DEST 地址路径中以单个冒号 “:” 进行分隔。
  • 通过 rsync daemon 方式:
  • rsync [OPTION] [USER@]HOST::SRC DEST 或
  • rsync [OPTION] rsync://[USER@]HOST[:PORT]/SRC [DEST]
  • 从远程 rsync 服务器中拷贝文件到本地机。 SRC 地址路径中以双冒号 “::” 进行分隔。
  • rsync [OPTION] SRC [USER@]HOST::DEST 或
  • rsync [OPTION] SRC rsync://[USER@]HOST[:PORT]/DEST
  • 从本地机器拷贝文件到远程 rsync 服务器中。 DEST 地址路径中以双冒号 “::” 进行分隔。

如果 rsync 命令中只指定 SRC 参数而不指定 DEST 参数,则意为显示源文件列表而非进行同步拷贝。 rsync 有许多功能选项,常用的选项如下:

 

 

rsync 常用参数

 

选项 描述
-a, –archive 归档模式,保持所有文件属性,等同于 -rlptgoD
-v, –verbose 详细信息输出
-r, –recursive 对子目录进行递归处理
-R, –relative 使用相对路径信息
-b, –backup 创建备份
-z, –compress 对备份的文件在传输时进行压缩处理
–delete 用于同步目录,从 DEST 中将 SRC 不存在的文件进行删除
–progress 显示备份过程

 

 

rsync模式

rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST

rsync [OPTION]… [USER@]HOST:SRC DEST

rsync [OPTION]… SRC [SRC]… DEST

rsync [OPTION]… [USER@]HOST::SRC [DEST]

rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST

rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

 

rsync有六种不同的工作模式:

拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。

使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。

使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。

从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。

从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。

列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。

 

 

 

使用实例:

  • 查看服务端文件及列表
    • # rsync 9.186.110.53::查看服务端可用的模块列表以及注释信息
    • # rsync [email protected]::www/查看服务端 www 模块中的目录及文件列表(使用 rsyncd 用户认证方式)
    • # rsync [email protected]:/var/www/html/查看服务端 /var/www/html 目录中的内容(使用服务端的系统用户进行验证,如 ibmuser)
  • 保持客户端与服务端的数据同步
    • # rsync -avz [email protected]::www/ /backup1/使用后台服务方式将服务端 www 模块下的内容备份到本地 /backup1 目录中,备份时保留原有权限、属性、属主及符号连接等,并使用压缩方式加快数据传输。
    • # rsync – avz [email protected]:/var/www/html /backup2/使用 ssh 方式将远程的 /var/www/html 目录备份到本地 /backup2/ 目录下
    • # rsync -avz –delete [email protected]::www/ /backup3/将远程 www 模块备份到本地 /backup3/ 目录中,同时进行同步目录,删除本地目录中多余的文件。

当服务端的数据出现问题时,需要通过客户端的数据对服务端进行恢复,只要客户端有服务端的写入权限,即可通过调换 rsync 命令的 SRC、DEST 参数进行恢复。