云网牛站
所在位置:首页 > Linux教程 > 使用Rsync复制大文件的说明,以及一些误解

使用Rsync复制大文件的说明,以及一些误解

2019-09-18 10:08:40作者:赖以葵稿源:云网牛站

本文介绍关于使用Rsync复制大文件的说明,以及一些误解的回答。

使用Rsync复制大文件的说明,以及一些误解

 

前言

有一种观念认为,很多在IT行业工作的人经常从互联网上发布文件进行复制和粘贴,我们都这样做,复制粘贴本身不是问题,问题是当我们在不理解它们的情况下运行时。

几年前,一位曾经在我的团队工作过的朋友需要将虚拟机模板从站点A复制到站点B,他们无法理解为什么他们复制的文件在站点A上是10GB但是在现场B变为100GB。

这位朋友认为rsync是一个神奇的工具,应该只是“sync”文件,然而,我们大多数人忘记的是要了解rsync究竟是什么,以及它是如何使用的,而我认为最重要的是它来自哪里,本文提供了有关rsync的更多信息,并解释了该故事中发生的情况。参考在Linux/Unix上安装rsync并通过示例的方式介绍使用rsync命令

 

关于rsync

rsync是由Andrew Tridgell和Paul Mackerras创建的工具。

想象一下,你有两个文件,file_A和file_B,你希望将file_B更新为与file_A相同,显而易见的方法是将file_A复制到file_B上。

现在假设这两个文件位于通过慢速通信链路连接的两个不同服务器上,例如拨号IP链路,如果file_A很大,将它复制到file_B将会很慢,有时甚至不可能,为了提高效率,你可以在发送之前压缩file_A,但这通常只能获得2到4的因子。

现在假设file_A和file_B非常相似,为了加快速度,你可以利用这种相似性,一种常见的方法是仅在链接中发送file_A和file_B之间的差异,然后使用此类差异列表在远程端重建文件。

问题是在两个文件之间创建一组差异的常规方法依赖于能够读取这两个文件,因此,它们要求两个文件事先在链接的一端可用,如果它们不能在同一台机器上同时使用,则无法使用这些算法(复制文件后,你不需要区别对待),这是rsync解决的问题。

rsync算法有效地计算源文件的哪些部分与现有目标文件的部分匹配,然后不需要通过链接发送匹配的部分,所需要的只是对目标文件部分的引用,只需要发送不匹配的源文件部分。

然后,接收器可以使用对现有目标文件和原始材料的部分的引用来构造源文件的副本。

另外,发送到接收器的数据可以使用任何一系列常见压缩算法进行压缩,以进一步提高速度。

rsync算法以一种可爱的方式解决了这个问题,因为我们都知道。

在介绍rsync之后,回到故事。

 

问题1:精简配置

有两件事可以帮助朋友了解正在发生的事情。

文件在其他大小上变得越来越大的问题是由源系统上启用精简配置(TP)引起的,一种优化存储区域网络(SAN)或网络连接存储(NAS)中可用空间效率的方法。

由于TP已启用,源文件仅为10GB,并且在使用rsync进行传输而没有任何其他配置时,目标目标正在接收完整的100GB大小,rsync无法做到这一点,必须进行配置。

执行此工作的Flag是-S或-sparse,它使rsync有效地处理稀疏文件,它只会发送稀疏数据,因此源和目标将具有10GB文件。

 

问题2:更新文件

发送更新文件时出现第二个问题,目标现在只接收10GB,但整个文件(包含虚拟磁盘)始终被传输,即使在该虚拟磁盘上更改了单个配置文件也是如此,换句话说,只有一小部分文件发生了变化。

用于此转移的命令是:

rsync -avS vmdk_file syncuser@host1:/destination

再次,了解rsync如何工作也有助于解决这个问题。

以上是对rsync的最大误解,我们中的许多人认为rsync只会发送文件的增量更新,并且它将自动仅更新需要更新的内容,但这不是rsync的默认行为。

如手册页所述,rsync的默认行为是在目标中创建文件的新副本,并在传输完成时将其移动到正确的位置。

要更改rsync的此默认行为,你必须设置以下参数,然后rsync将仅发送增量:

--inplace               update destination files in-place

--partial               keep partially transferred files

--append                append data onto shorter files

--progress              show progress during transfer

所以完全可以完成朋友想要的命令是:

rsync -av --partial --inplace --append --progress vmdk_file syncuser@host1:/destination

请注意,由于两个原因,必须删除参数-S,第一个是通过线路发送文件时不能一起使用-sparse和-inplace,第二,当你使用-sparse发送文件时,你无法再使用-inplace进行更新。请注意,早于3.1.3的rsync版本将拒绝-sparse和-inplace的组合。

因此,即使朋友最终通过电线复制100GB,也只需要发生一次,以下所有更新仅复制差异,使副本非常高效。

 

相关主题

通过SSH使用Rsync传输文件,复制和同步文件及目录

精选文章
热门文章