— rsync — 1 min read
平常下载网页资源可以借助一些工具,比如IDM
,FDM
,上传可以借助各类网盘进行分享。但是到了服务器中,就不能容易借助这些工具直接上传下载了,因为服务器上的资源一般不对外暴露,需要使用特定的传输协议比如SSH
,SFTP
进行上传下载。
同步上传下载本地和服务器之间资源,现在主流的工具有XFTP
,WinScp
等。这些工具有个问题是基本上每次都是全量上传,假如一个压缩包有100MB
大小,第一次需要全量上传100MB
,当我们修改了压缩包里面的一个小文件时,再次压缩上传还是100MB
。并且这些同步上传工具中有些不支持断点续传,一旦传输中断就要重新上传。或许可以只上传被修改过的文件到服务器,这是一种思路,但是如果修改的文件有很多,并且目录结构层级非常深,虽然减少了文件上传时间,但是需要手工覆盖替换的时间就多了,并且容易出错。
为了减少上传时间并支持断点续传,可以将全量上传替换成增量差异上传。即每次只同步上传差异的文件部分,如果文件是第一次上传时就使用全量上传。之前提到的比如winScp
是支持断点续传,但是并不能差异上传。
GNU/Linux
自身附带了一些命令行同步工具,支持全量同步的有scp
,可以配置参数-C
开启压缩传输。支持增量差异同步的比如Rsync
,这如Rsync
的名字一样,它的作用就是Remote sync
,即远程同步。
使用以上命令行工具时要注意的是要注意的平台支持文件。基本上类*nix
都是支持的。Windows
上可以通过WSL支持。
上传工具 | 方式 | 断点续传 | 时间消耗 |
---|---|---|---|
scp | 每次全量 | 不支持 | 文件大小/上传速率 |
winscp | 每次全量 | 支持 | 文件大小/上传速率 |
rsync | 首次全量/后续差异增量 | 支持 | 第一次全量时间同上。后续上传:(差异增量大小/上传速率)加上差异算法时间 |
Rsync
传输效率高,使用同步算法,只比较变化差异部分。使用rsync
对比其他全量上传工具如果多次上传一个修改后的文件,比如java
打包后的war
包,第一次上传war
包时各上传工具速度差异不大都是全量上传。但是当第二次上传同一个修改后的war
包后,速度差异就非常明显了。
rsync的常用命令:
1-a 包含-rtplgoD2-r 同步目录时要加上,类似cp时的-r选项3-v 同步时显示一些信息,让我们知道同步的过程4-l 保留软连接5-L 加上该选项后,同步软链接时会把源文件给同步6-p 保持文件的权限属性7-o 保持文件的属主8-g 保持文件的属组9-D 保持设备文件信息10-t 保持文件的时间属性11-P 显示同步过程,比如速率,比-v更加详细12-u 加上该选项后,如果DEST中的文件比SRC新,则不同步13-z 传输时压缩
如果是上传文件到服务器而言,可以使用如下命令:
上传foo.zip到xxx服务器的
/opt
下 支持断点续传和压缩上传并且显示上传进度和过程
根据场景:如果文件只需上传一遍,比如博客的安装程序我们只需要安装一遍,不需要多遍上传,这时可以使用任意的上传工具比如scp -C
命令及参数压缩上传。但是如果上传的文件需要经常迭代更新并比较大,第一次上传时可以使用任意工具上传,第二次上传就可以借助rsync -avzp
命令参数实现增量差异并压缩上传。
使用rsync
用在备份同步上,不必每次全量同步,可以节省大量时间。
(完)