Rsync以及Rsync算法
rsync 使用
当我还在使用 pycharm 做开发的时候,经常会使用 rsync 来同步本地和服务器上的代码,因为比传统的 scp 更为节省流量,只上传有改动的部分。
Usage
只简单介绍,毕竟文档是最好的老师。rsync 包括服务器端和客户端,服务器可以指定相应配置文件。
rsync –daemon –config=/path/to/rsyncd.conf
可以配置权限以及应用的启动信息。使用默认配置即可。
rsync 支持 ssh、scp 等文件传输方式,也可以直接使用 socket 连接来传输。那么举个例子(Unix 环境下)
rsync -avz -e “ssh -p $portNumber” user@remoteip:/path/to/ /local/path/
我使用 ssh 协议,将本地的 /local/path/ 同步到 远端服务器 /patg/to/ 下。
- a 相当于 rlptgoD,r 是递归、l 是链接文件、p 表示保持文件原有权限、t 保持文件原有时间、g 保持文件原有用户组、o 保持文件原有属主、D 相当于块设备文件
- z 传输时压缩
- v 传输时的进度信息
- e 制定使用 rsh,ssh 方式进行数据传输
rsync 算法
rsync 核心算法是 rolling checksum,核心在 rolling 上,把文件按照相同大小分块,然后分块 checksum,来比较每一块的 checksum 有没有改变。
如果这样,改变文件中间的一个字节,后面的每块都会改变。所以关键在意 rolling 上。当找不到匹配时,算法就要向后移一个字节。知道找到匹配为止。
不盗图了,传送门 https://coolshell.cn/articles/7425.html
如果是这样的话,当文件越多时,所需要花费的时间越长。同步代码使用还是可以的。如果是需要发布的代码还是建议使用 git hook。