为什么rsync不对本地文件使用增量传输?


25

我有一个很大的iso映像,该文件当前由torrent客户端下载,并且已启用空间保留:这意味着文件大小没有变化,而(4 Mib)中的某些块由于下载而不断变化。

下载90%时,我会执行初始rsync以节省以后的时间:

$ rsync -Ph DVD.iso / media / another-hdd /
发送增量文件列表

影碟
       2.60G 100%40.23MB / s 0:01:01(xfer#1,to-check = 0/1)

发送2.60G字节接收73字节34.59M字节/秒
总大小为2.60G,加速为1.00

然后,当文件完全下载后,我再次rsync:

total size is 2.60G   speedup is 1.00

Speedup = 1表示未使用增量传输,尽管90%的文件未更改,目标目录位于另一个FS上,并且复制需要几分钟。为什么不尝试加快传输速度?!如何强制rsync使用增量传输?


6
你在做什么没有任何意义。rsync的目的是加快通过网络(而非本地)的文件传输。为了找到差异,它必须同时读取源和目标。在本地读取目标位置以找到差异的时间中,您也可以只进行普通复制。只需首先将文件下载到目标位置即可,而不是复制它。
psusi 2011年

1
因此,它只是不使用delta-xfer,因为在本地工作时,复制比计算哈希更快吗?如果是,请发布答案plz :)
kolypto 2011年

9
在某些情况下,读取可能比写入本地磁盘更快。它还可以减少SSD的磨损。这当然是一个有效的问题,答案对我来说非常有价值。
HRJ

2
@psusi除了上面的HRJ注释外,还请考虑目标文件已被重新链接的情况(例如,在btrfs或ocfs2上)。在同步过程中最小化写入可以对整体空间使用产生巨大的影响。

Answers:


20

按照手册页,psusi是正确的:

-W,--whole-file:当源计算机和目标计算机之间的带宽大于磁盘的带宽时(特别是当“磁盘”实际上是网络文件系统时),如果使用此选项,则传输可能会更快。当将源和目标都指定为本地路径时,这是默认设置,但是仅当没有批写入选项有效时才使用。


10
哦谢谢!我错掉了这一行:)要开启增量传输,请使用-no-W
kolypto 2011年

1
在我的系统-no-W上,只有长选项不起作用-no-whole-file。我需要此开关的原因是,当我设置备份且文件较大(例如图像)没有相同的修改时间时。使用本地文件系统上的增量传输来同步这些文件的速度要快得多,加快速度为163.26。
Jesse the Wind Wanderer

6
@JessetheWindWanderer,长选项为--no-whole-file(请注意--,开头要加倍)。
Eddie C.

谢谢埃迪C。如果我能弄清楚我们的做法,我将编辑我的评论:-(
杰西

17

这个问题的直接答案是:

使用该--no-W标志可以强制增量压缩,无论是本地还是远程。

更新:似乎还有更多故事。在delta compression似乎只启用之间接受和rsync的发射过程。将文件输出到文件系统时rsync,即使启用了增量压缩,仍可能会写出整个文件。

请参阅此处的 “ Wakan Tanka的调查” 。


2
--no-W就我而言,始终传输整个文件。请检查unix.stackexchange.com/questions/291156/…– Wakan
Tanka,

@WakanTanka真有趣!我已经更新了答案。
HRJ

3

默认情况下,出于各种安全原因,rsync首先创建目标文件的新副本,然后将其替换。您可以通过指定--inplace和来覆盖它--no-whole-file。这告诉rsync对目标文件进行就地编辑,接受手册页中记录的各种风险(对于这种情况通常较小)。


0

默认情况下rsync,在目标位置创建文件的副本,然后用新副本自动替换原始副本。出于安全原因这样做。您正在寻找的是该--inplace选项,它将导致rsync仅修改目标文件中相对于源文件已更改的部分。

对于OP的用例,我建议也关闭预分配,以便可以同步稀疏副本,这将更快。对于下载,除非您使用的是VFAT这样的非常古老的文件系统,否则不要担心碎片。特别是无法以存储媒体的最大性能读取媒体文件,因此对它们进行碎片整理是浪费的工作。

要将下载目录稀疏复制到目标卷,我建议按以下顺序进行以下标志和操作:

rsync --ignore-existing -vxaHAXS /source /destination
rsync --inplace -vxaHAX /source /destination

第一遍将稀疏地将新文件复制到目标位置。第二遍将就地更新现有文件,仅复制更改

由于它正在执行稀疏和就地增量复制,因此您可以重复运行此操作而不会产生太多额外的IO。即使您同时运行20个torrent,也不会放大目标位置的写入,也不会破坏源/目标卷。


威尔,您在这里“稀疏”是什么意思?据我所知,它并没有真正反映出单词的实际含义。
朱利叶斯

@Julius:它的含义完全相同-复制文件以完全支持稀疏分配,因此,例如,您的40GB HDR电影在目标位置将不会比在源位置占用更多的空间。与VirtualBox磁盘映像相同。如前所述,OP将需要禁用预分配才能正常工作。
威尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.