我有大量的相对性小数据文件,但它们占用了大约 50 GB,我需要将它们转移到另一台机器上。我试图想出最有效的方法来做到这一点。
我的想法是 gzip 整个事情,然后 rsync 它并解压缩它,依靠 rsync -z 进行压缩,gzip 然后使用 rsync -z。我不确定哪个最有效,因为我不确定 rsync -z 是如何实现的。关于哪个选项最快的任何想法?
rad*_*ius 11
您不能“gzip 整个内容”,因为 gzip 仅压缩一个文件,您可以创建一个 tar 文件并将其 gzip 以“gzip 整个内容”,但是您将失去仅复制修改过的文件的 rsync 功能。
所以问题是:存储我需要 rsync gziped 的文件还是依赖 rsync 的 -z 选项更好。
答案可能是您不想在服务器上解压缩文件?我想是的,所以我不知道在执行 rsync 之前如何管理 gzip 文件。
可能您不需要仅复制修改过的文件的 rsync 功能吗?在这种情况下,为什么使用 rsync 而不是执行包含您的东西的 tar.gz 文件的 scp ?
无论如何要回答这个问题,rsync 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
Run Code Online (Sandbox Code Playgroud)
这将获得您正在寻找的压缩,只需直接复制而不涉及 rsync。
小智 6
@radius,一个关于如何gzip工作的小问题 -gzip是一种基于块的压缩算法,并且是一个相当简单的算法。压缩表不考虑整个文件 - 仅考虑每个块。其他算法可能使用文件的全部内容,还有一些算法使用多个块甚至可变大小块的内容。一个有趣的例子是lrzip,由同一作者rsync!
因此,总而言之, usingrsync -z可能会产生与gziping first相同的压缩- 如果您正在进行差分传输,则更好,因为rsync的 diffing 算法。
也就是说,我认为人们会发现,对于非差分传输来说,常规方法可以scp轻松击败rsync- 因为它的开销远低于rsync的算法(scp无论如何都会在幕后使用!)
如果您的网络确实成为瓶颈,那么您可能希望在线路上使用压缩。
如果您的磁盘是瓶颈,那么最好将流式传输到压缩文件中。(例如,netcat从一台机器到另一台机器,流入gzip -c)
通常,如果速度是关键,那么事先压缩现有文件是一种浪费。
TIMTOWTDI、YMMV、IANAL 等