【问题标题】:Is there a way to merge rsync and tar (compress)?有没有办法合并 rsync 和 tar(压缩)?
【发布时间】:2018-08-15 15:47:41
【问题描述】:

注意:我在这里松散地使用术语tar。我的意思是压缩它是tar.gz、tar.bz2、zip等。

rsync 是否有一个标志可以在源/目标之间协商更改的文件,对更改的源文件进行 tar,将单个 tar 文件发送到目标计算机并在更改的文件到达后解压?

我有数百万个文件,并且通过互联网远程rsyncing 到 AWS 似乎很慢。

我知道rsync 有一个压缩选项 (z),但据我了解,它会按每个文件压缩更改的文件。如果有很多小文件,发送 1KB 文件而不是 50KB 文件的开销仍然是瓶颈。

另外,简单地对整个目录进行 tar 也不是很有效,因为归档需要一个小时

【问题讨论】:

  • 请务必提及您投反对票的原因,以便用户将来可以写出格式更好的问题

标签: compression tar rsync


【解决方案1】:

您可以使用gzippigz 的rsyncable 选项将tar 文件压缩为.gz 格式。 (您可能必须找到 gzip 的补丁才能添加它。它已经是 pigz 的一部分。)

该选项对生成的 gzip 文件进行分区,以允许 rsync 在仅更改 .tar.gz 文件中的某些文件时仅查找修改的部分以便更有效地传输。

【讨论】:

    【解决方案2】:

    我一直在寻找与你完全相同的东西,然后我开始使用 borg。

    tar cf - -C $DIR . | borg create $REPO::$NAME

    tar 仍将读取整个文件夹,因此与仅 rsync 两个目录相比,您不会避免读取惩罚(因为我相信 rsync 使用技巧来避免读取每个文件进行更改),但您将避免写入惩罚,因为 borg 只会写它以前没有遇到过的块。 borg 也自动压缩,所以不需要 xz/gzip。另外,如果两端都安装了 borg,它也不会发送多余的数据,因为两个 borg 可以让彼此知道他们有什么和没有什么。

    如果避免读取惩罚对您来说至关重要,您可以使用 rsync 来使用它的技巧来告诉您哪些文件已更改,创建一个 difftar 并将其发送给 borg,但是让 borg 合并档案是第二个令人头疼的问题.您最终可能会创建一个过滤器来删除从原始存档中删除的路径,然后创建一个仅包含文件添加/更改的新存档。然后您必须递归地为每个存档执行此操作。最后,它会通过按顺序提取每个版本来创建原始存档,但就像我说的那样令人头疼。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多