我有大量的相对论小数据文件,但它们占用约50 GB的空间,我需要将它们传输到另一台计算机上。我试图考虑最有效的方法。
我以前的想法是先将整个内容压缩为gzip,然后对其进行rsync和解压缩,然后依靠rsync -z进行压缩,然后使用gzip然后使用rsync -z。我不确定哪种方法最有效,因为我不确定rsync -z的实现方式。关于哪种选择最快的任何想法?
我有大量的相对论小数据文件,但它们占用约50 GB的空间,我需要将它们传输到另一台计算机上。我试图考虑最有效的方法。
我以前的想法是先将整个内容压缩为gzip,然后对其进行rsync和解压缩,然后依靠rsync -z进行压缩,然后使用gzip然后使用rsync -z。我不确定哪种方法最有效,因为我不确定rsync -z的实现方式。关于哪种选择最快的任何想法?
Answers:
您无法“ 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将一次使用整个文件)将提供更好的压缩表。但是,在大多数情况下,差异将非常小,但在极少数情况下,差异可能更为重要(如果您有一个很大的文件,并且在文件上有很长的部分重复很多次但彼此之间距离很远)(这是一个非常简化的示例)
如果您只复制一次数据,那么rsync本身并不是一个大赢家。如果您喜欢gzip(或tar + gzip,因为您有很多文件),则可以尝试以下操作:
tar -cz /home/me/source/directory | ssh target tar -xz --directory /home/you/target/directory
这样就可以得到您想要的压缩,并且可以直接复制而不涉及rsync。
@radius 是一个基于块的压缩算法,它是一个相当简单的算法,可以用来了解其gzip
工作原理gzip
。压缩表不考虑整个文件-仅考虑每个块。其他算法可能会使用文件的全部内容,还有一些算法会使用多个块或什至大小可变的块的内容。一个令人着迷的例子是lrzip
与作者相同rsync
!
因此,总而言之,使用rsync -z
可能会产生与gzip
ing 相同的压缩-并且,如果您要进行差分传输,则最好使用rsync
diffing算法。
就是说,我认为人们会发现常规的scp
节拍rsync
可以轻松进行非差异传输-因为它的开销要比rsync
的算法少得多(scp
无论如何,它都将在后台使用!)
如果您的网络确实成为瓶颈,那么您将需要在网络上使用压缩。
如果磁盘是瓶颈,那最好是将其流式传输到压缩文件中。(例如,netcat
从一台机器到另一台机器,流进gzip -c
)
通常,如果速度是关键,那么事先压缩现有文件是浪费的。
TIMTOWTDI,YMMV,IANAL等
根据这个家伙的说法,它可能使用起来更快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.