删除多个 .tar.gz 档案中的重复文件

删除多个 .tar.gz 档案中的重复文件

我每晚都会从我的 Webhosting 服务中备份 .tar.gz 文件。每晚更改的数据很少 (<10MB)。

我想存档这些文件并对多个 .tar.gz 存档中的文件进行重复数据删除(固实压缩),而无需提取每个单独的备份文件。

简化示例:

2013-02-24.tar.gz包含a.pdf 2013-02-25.tar.gz包含a.pdfb.pdf

我想压缩并存档2013-02-24.tar.gz并只2013-02-25.tar.gz存储a.pdf一次。

我让重复数据删除工作的唯一方法是解压两个 .tar.gz 文件并再次打包(使用固实压缩)。但这是一个额外的步骤,并且由于操作系统不同,它可能会删除文件系统信息。简单地 tar/gz 两个 .tar.gz 文件是行不通的,此存档的最终大小将是两个原始 .tar.gz 文件的总和。

有没有办法对多个 .tar.gz 文件的内容使用重复数据删除?

答案1

我迟到了,但要求似乎基本上可以归结为这一点:

  1. 删除重复的 tarball 文件内容
  2. 必须能够恢复原始 gzip 文件

一开始,这似乎是不可能的。重复数据删除通常依赖于能够处理未压缩的文件。但后来我意识到,如果你可以依赖 gunzip/gzip 生成完全相同的文件(最好测试一下),那么你就可以使用备份,它实际上是为了删除重复的 tarball 而设计的。所以:

  1. gunzip你得到的 tarball
  2. gzip再次检查 tarball 以验证它们是否完全匹配(如果 gzip 实现相同则应该如此,但压缩级别可能会有所不同,因此您可能需要找出这一点)
  3. 将 tarball 导入zbackup

答案2

我不认为你能“轻易”地完成你想做的事情

如果 .tgz 文件足够相似,您可能能够使用 xdelta,并完整备份第一个文件,然后备份第一个和第二个文件之间的差异的 xdelta。

另一种部分解决方案是使用 rzip(或 lrzip ??),它旨在对非常大的文件进行压缩 - 虽然不是最理想的,但它可能比您目前使用的要小得多,但会以牺牲 CPU 和内存为代价。

答案3

我使用 squashfs 来实现类似的目的:

mksquashfs dir1 dir2 dir3 backup_file.fs -keep-as-directory

答案4

有一个优秀的解决方案它会执行您所要求的操作,删除多个 TAR 文件中的重复数据块。这不仅可以删除未更改的文件,还可以仅存储类似文件中已更改的部分。

然而,它是一种客户端/服务器解决方案,其中服务器是付费产品。但由于重复数据删除功能,它非常实惠,而且它提供加密功能并为您安全存储文件。

客户端使用普通的 tar 代码,因此该命令使用起来非常简单。

相关内容