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 有许多功能选项,常用的选项如下:
选项 | 描述 |
-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 ibmuser@9.186.110.53::www/查看服务端 www 模块中的目录及文件列表(使用 rsyncd 用户认证方式)
- # rsync ibmuser@9.186.110.53:/var/www/html/查看服务端 /var/www/html 目录中的内容(使用服务端的系统用户进行验证,如 ibmuser)
- 保持客户端与服务端的数据同步
- # rsync -avz ibmuser@9.186.110.53::www/ /backup1/使用后台服务方式将服务端 www 模块下的内容备份到本地 /backup1 目录中,备份时保留原有权限、属性、属主及符号连接等,并使用压缩方式加快数据传输。
- # rsync – avz ibmuser@9.186.110.53:/var/www/html /backup2/使用 ssh 方式将远程的 /var/www/html 目录备份到本地 /backup2/ 目录下
- # rsync -avz –delete ibmuser@9.186.110.53::www/ /backup3/将远程 www 模块备份到本地 /backup3/ 目录中,同时进行同步目录,删除本地目录中多余的文件。
当服务端的数据出现问题时,需要通过客户端的数据对服务端进行恢复,只要客户端有服务端的写入权限,即可通过调换 rsync 命令的 SRC、DEST 参数进行恢复。