如何通过自动恢复和仅传输已更改的内容将大文件从本地传输到远程框?

时间:2010-12-18 15:26:11

标签: linux networking

我尝试以下命令 rsync -av --progress --inplace --rsh ='ssh'/home/tom/workspace/myapp.war root@172.241.181.124:/ home / rtom / uploads

但是当我在应用程序中进行一次重新生成myapp.war的小改动时,它似乎每次执行命令时都会再次传输整个文件。

如果连接丢失,我还希望连接自动恢复。我认为这部分正在发挥作用。

转移应通过ssh进行。

连接速度非常慢并且可能会中断,因此仅传输已更改的内容非常重要。当然,它还必须确保文件被正确传输。

1 个答案:

答案 0 :(得分:3)

rsync可以有效地处理文件中相对较小的更改和部分上传。 rsync algorithm朝着这个方向付出了巨大的努力。

问题是WAR文件是“扩展”的JAR文件,它们本质上是ZIP arhives,因此被压缩。

未压缩文件中的一个小变化将改变该文件所属的整个压缩段,并且 - 最重要的是 - 它还可以显着改变其大小。这可以克服rsync检测和处理最终压缩文件中的更改的能力。

在ZIP存档上,每个未压缩的文件都有自己的压缩段。因此,将文件放置在存档中的 order 对于实现与先前版本的相似程度也是重要的。根据WAR文件的创建方式,只需添加新文件或重命名文件就可以导致段移动,从而使WAR文件无法识别。换句话说:

您的应用程序中的一个小变化通常意味着您的WAR文件发生了相当大的变化。

rsync不是为处理压缩文件中的更改而设计的。但是,它可以处理应用程序中的更改。一种解决方案是使用它来上传您的应用程序文件,然后在远程主机上创建WAR文件。

稍微不同的方法 - 在远程主机上不需要任何开发工具 - 将在本地解压缩(即解压缩)WAR文件,上传其内容,然后在远程主机上再次打包(即压缩)。此解决方案仅需要远程主机上的zipjar实现。