对于大文件先压缩然后传输或rsync -z? 这将是最快的?

我有相当多的小数据文件,但他们占用大约50 GB,我需要他们转移到不同的机器。 我试图想到最有效的方法来做到这一点。

我的想法是gzip整个事情,然后rsync和解压缩,依靠rsync -z进行压缩,gzip然后使用rsync -z。 我不确定哪个是最有效的,因为我不确定rsync -z是如何实现的。 任何想法的select将是最快的?

因为gzip只能压缩一个文件,所以你不能“gzip整个东西”,你可以创build一个tar文件,并将其gzip它“gzip整个事情”,但你会松散rsync复制只修改文件的能力。

所以问题是:存储我需要rsync gziped的文件还是依靠rsync的-z选项。
答案可能是你不想在你的服务器上解压文件? 我想是的,所以我没有看到你怎么能够做rsync之前gzip文件。

可能你不需要复制只修改文件的rsyncfunction? 在这种情况下,为什么使用rsync而不是做一个包含你的东西的tar.gz文件的scp?

无论如何要回答这个问题,rsync gzip的效率会比使用gzip的gziping文件低一点。 为什么? 因为rsync会通过块来gzip数据块,所以一组较小的数据将被用来创buildgzip用来做压缩的表,一个更大的一组数据(gzip会一次使用整个文件)给出一个更好的压缩表。 但是在大多数情况下,这种差别非常小,但是在极less数情况下,这种差别可能更重要(如果你有一个非常大的文件,很长一段时间在文件上重复很长时间,但是彼此远离)(这是一个非常简单的例子)

如果你只是复制一次数据,rsync不会是一个很大的胜利。 如果你喜欢gzip,(或tar + gzip,因为你有很多文件),你可能会尝试这样的:

tar -cz /home/me/source/directory | ssh target tar -xz --directory /home/you/target/directory 

这将得到你正在寻找的压缩,只是直接复制,而不涉及rsync。

@radius是挑选gzip工作原理的小鼻子–gzip是一个基于块的压缩algorithm,在这方面相当简单。 整个文件不考虑压缩表 – 只有每个块。 其他algorithm可以使用文件的全部内容,并且有less数使用多个块的内容甚至可变大小的块。 一个令人着迷的例子是lrzip ,和rsync一样是作者!

gzipalgorithm的瘦身 。

因此,总而言之,使用rsync -z可能会产生 gzip 相同的压缩效果,而且如果您正在进行差分传输,则更好的原因是rsync的差异化algorithm。

也就是说,我认为人们会发现,普通的scp很容易在非差分传输中击败rsync ,因为它的开销比rsync的algorithm要less得多(不pipe怎样,它都会使用scp )!

如果你的networking确实成为一个瓶颈,那么你会想在networking上使用压缩。

如果你的磁盘是瓶颈的话,那么当stream入一个压缩文件是最好的。 (例如,从一台机器到另一台机器的netcat ,stream入gzip -c

通常,如果速度是关键的,那么现有的压缩文件是浪费的。

TIMTOWTDI,YMMV,IANAL等

根据这个家伙,它可能会更快地使用rsync -z ,但我想这将是接近于在传输之前先压缩每个文件的效率。 正如其他人所build议的那样,它应该比压缩tarstream更快。

从手册页:

  Note that this option typically achieves better compression ratios than can be achieved by using a compressing remote shell or a compressing transport because it takes advantage of the implicit information in the matching data blocks that are not explicitly sent over the connection.