我肯定不是唯一一个有此问题的人——我正在 rsyncing .tar.gz 文件,注意到每次 rsyncing 的都是完整文件,而不是差异文件。仔细阅读后发现,早在 1999 年,就有人创建了一种算法来解决这个问题http://svana.org/kleptog/rgzip.html(仅需传输 5% 的数据)
从那以后,这个问题有出现过吗?我该如何创建 rsync 友好的 .tar.gz 文件?
答案1
我的 gzip(在 ubuntu 和 fedora 上)有 --rsyncable 选项。因此使用以下命令创建 tarball:
tar -c whatever/ | gzip --rsyncable > file.tar.gz
答案2
BeezNest 对此有很好的解释gzip 的 rsyncable 选项在作者的测试中,此选项使文件大小增加了约 1%,但使得 rsync 将更新传输到 gzip 压缩文件的速度提高了 1,300 倍以上。
欲了解血腥细节,请参阅这次讨论(具体来说,是第 4.4.2 节),他们引用了它。其要点如下:
修改很简单:
- 针对未压缩文件中当前点周围的小窗口计算快速滚动签名;
- 流压缩照常进行;
- 当滚动签名等于预定值时,压缩表将被重置,并且发出一个令牌来指示新的压缩区域开始。
答案3
我喜欢这个,因为我想将其压缩为 tar.gz,而不仅仅是 .gz
GZIP='--rsyncable' tar cvzf bobsbackup.tar.gz /home/bob
答案4
我知道 Ubuntu Linux 采用修补(gzip 文件)到 gzip 源以允许--rsyncable
标记。您可以下载该补丁并自行使用,或者查看您的发行版是否包含该补丁。