Skip to content

毛俊的博客

使用Rsync上传下载及同步备份

rsync1 min read

平常下载网页资源可以借助一些工具,比如IDM,FDM,上传可以借助各类网盘进行分享。但是到了服务器中,就不能容易借助这些工具直接上传下载了,因为服务器上的资源一般不对外暴露,需要使用特定的传输协议比如SSHSFTP进行上传下载。

全量同步与增量同步

同步上传下载本地和服务器之间资源,现在主流的工具有XFTP,WinScp等。这些工具有个问题是基本上每次都是全量上传,假如一个压缩包有100MB大小,第一次需要全量上传100MB,当我们修改了压缩包里面的一个小文件时,再次压缩上传还是100MB。并且这些同步上传工具中有些不支持断点续传,一旦传输中断就要重新上传。或许可以只上传被修改过的文件到服务器,这是一种思路,但是如果修改的文件有很多,并且目录结构层级非常深,虽然减少了文件上传时间,但是需要手工覆盖替换的时间就多了,并且容易出错。

为了减少上传时间并支持断点续传,可以将全量上传替换成增量差异上传。即每次只同步上传差异的文件部分,如果文件是第一次上传时就使用全量上传。之前提到的比如winScp是支持断点续传,但是并不能差异上传。

GNU/Linux自身附带了一些命令行同步工具,支持全量同步的有scp,可以配置参数-C开启压缩传输。支持增量差异同步的比如Rsync,这如Rsync的名字一样,它的作用就是Remote sync,即远程同步。

使用以上命令行工具时要注意的是要注意的平台支持文件。基本上类*nix都是支持的。Windows上可以通过WSL支持。

上传工具方式断点续传时间消耗
scp每次全量不支持文件大小/上传速率
winscp每次全量支持文件大小/上传速率
rsync首次全量/后续差异增量支持第一次全量时间同上。后续上传:(差异增量大小/上传速率)加上差异算法时间

Rsync命令

Rsync传输效率高,使用同步算法,只比较变化差异部分。使用rsync对比其他全量上传工具如果多次上传一个修改后的文件,比如java打包后的war包,第一次上传war包时各上传工具速度差异不大都是全量上传。但是当第二次上传同一个修改后的war包后,速度差异就非常明显了。

rsync的常用命令:

1-a 包含-rtplgoD
2-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 传输时压缩

如果是上传文件到服务器而言,可以使用如下命令:

1$ rsync -avzP foo.zip [email protected]:/opt

上传foo.zip到xxx服务器的/opt下 支持断点续传和压缩上传并且显示上传进度和过程

根据场景:如果文件只需上传一遍,比如博客的安装程序我们只需要安装一遍,不需要多遍上传,这时可以使用任意的上传工具比如scp -C命令及参数压缩上传。但是如果上传的文件需要经常迭代更新并比较大,第一次上传时可以使用任意工具上传,第二次上传就可以借助rsync -avzp命令参数实现增量差异并压缩上传。

总结

使用rsync用在备份同步上,不必每次全量同步,可以节省大量时间。

(完)

© 2020 by 毛俊的博客. All rights reserved.
Theme by LekoArts