对于大文件,请先压缩,然后再传输或rsync -z?哪个最快?


14

我有大量的相对论小数据文件,但它们占用约50 GB的空间,我需要将它们传输到另一台计算机上。我试图考虑最有效的方法。

我以前的想法是先将整个内容压缩为gzip,然后对其进行rsync和解压缩,然后依靠rsync -z进行压缩,然后使用gzip然后使用rsync -z。我不确定哪种方法最有效,因为我不确定rsync -z的实现方式。关于哪种选择最快的任何想法?

Answers:


11

您无法“ gzip全部内容”,因为gzip仅压缩一个文件,您可以创建一个tar文件并将其gzip压缩为“ gzip全部内容”,但是您会失去仅复制修改后的文件的rsync功能。

所以问题是:存储我需要rsync gziped或依靠rsync的-z选项的文件更好吗?
答案可能是您不希望文件在服务器上解压缩?我想是的,因此在执行rsync之前,我看不到如何管理gzip文件。

也许您不需要仅复制已修改文件的rsync功能?在这种情况下,为什么使用rsync而不是对包含您的内容的tar.gz文件进行scp处理?

无论如何回答这个问题,rsync gzip的效率要比使用gzip的gzip压缩文件低一些。为什么呢 因为rsync会逐个块地压缩gzip数据,所以将使用较小的数据集来创建gzip用于进行压缩的表,而较大的数据集(gzip将一次使用整个文件)将提供更好的压缩表。但是,在大多数情况下,差异将非常小,但在极少数情况下,差异可能更为重要(如果您有一个很大的文件,并且在文件上有很长的部分重复很多次但彼此之间距离很远)(这是一个非常简化的示例)


1
根据我对他的问题的理解,他会压缩以使其通过导线,然后再将另一端解压缩。我会通过gzip使用rsync本机压缩,这仅仅是因为压缩和解压缩50GB会花费大量时间。再说一次,如果文件主要是文本的,它们会很好地压缩。第三种选择:将文件复制到USB驱动器。

3
@Randolph Potter:是的,本地压缩50GB的时间损失了,那么rsync会比使用rsync -z高,无论如何,如果他想利用rsync本身(仅复制更改的文件)压缩之前无法完成
半径

很好的一点。为您+1 :-)

还记得gzip是流压缩器。
Falcon Momot

6

如果您只复制一次数据,那么rsync本身并不是一个大赢家。如果您喜欢gzip(或tar + gzip,因为您有很多文件),则可以尝试以下操作:

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

这样就可以得到您想要的压缩,并且可以直接复制而不涉及rsync。


我可能会用--lzop代替gzip ...更快,更低的cpu开销,并且仍然具有良好的文本压缩率
2013年

5

@radius 是一个基于块的压缩算法,它是一个相当简单的算法,可以用来了解其gzip工作原理gzip。压缩表不考虑整个文件-仅考虑每个块。其他算法可能会使用文件的全部内容,还有一些算法会使用多个块或什至大小可变的块的内容。一个令人着迷的例子是lrzip与作者相同rsync

皮包骨头gzip的算法

因此,总而言之,使用rsync -z可能会产生gzip ing 相同的压缩-并且,如果您要进行差分传输,则最好使用rsyncdiffing算法。

就是说,我认为人们会发现常规的scp节拍rsync可以轻松进行非差异传输-因为它的开销要比rsync的算法少得多(scp无论如何,它都将在后台使用!)

如果您的网络确实成为瓶颈,那么您将需要在网络上使用压缩。

如果磁盘是瓶颈,那最好是将其流式传输到压缩文件中。(例如,netcat从一台机器到另一台机器,流进gzip -c

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

TIMTOWTDI,YMMV,IANAL等


2

根据这个家伙的说法,它可能使用起来更快rsync -z,尽管我想它的效率与传输之前首先压缩每个文件的效率差不多。正如其他人所建议的,它应该比压缩tar流更快。

从手册页:

          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.

1
如果网络速度较快,我建议将--compress-level = 1与rsync -z一起使用。您希望网络成为瓶颈,而不是CPU或磁盘IO,以最大程度地缩短总传输时间。如果网络速度较慢,则使用默认的-z(相当于我认为的gzip -6)可能仍会使进程网络受限。
rmalayter

1

由于压缩文件的scp和rsync都将花费非常相似的传输时间,因此“最有效的方式”将是即时压缩,而不是压缩,传输。

除了“牢度”之外,其他注意事项还包括:

如果未传输所有文件,则可以轻松重新启动rsync。

rsync可用于维护远程计算机上的文件。

本地tar或gzip需要本地空间。

目标计算机和防火墙的端口使用注意事项:1)scp使用端口22(默认情况下),这可能是不可接受的。2)rsync用户端口873(默认)

我不确定为什么radius期望原始海报不希望存储解压缩的文件。

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.