![删除多个 .tar.gz 档案中的重复文件](https://linux22.com/image/1353009/%E5%88%A0%E9%99%A4%E5%A4%9A%E4%B8%AA%20.tar.gz%20%E6%A1%A3%E6%A1%88%E4%B8%AD%E7%9A%84%E9%87%8D%E5%A4%8D%E6%96%87%E4%BB%B6.png)
我每晚都会从我的 Webhosting 服务中备份 .tar.gz 文件。每晚更改的数据很少 (<10MB)。
我想存档这些文件并对多个 .tar.gz 存档中的文件进行重复数据删除(固实压缩),而无需提取每个单独的备份文件。
简化示例:
2013-02-24.tar.gz
包含a.pdf
2013-02-25.tar.gz
包含a.pdf
和b.pdf
我想压缩并存档2013-02-24.tar.gz
并只2013-02-25.tar.gz
存储a.pdf
一次。
我让重复数据删除工作的唯一方法是解压两个 .tar.gz 文件并再次打包(使用固实压缩)。但这是一个额外的步骤,并且由于操作系统不同,它可能会删除文件系统信息。简单地 tar/gz 两个 .tar.gz 文件是行不通的,此存档的最终大小将是两个原始 .tar.gz 文件的总和。
有没有办法对多个 .tar.gz 文件的内容使用重复数据删除?
答案1
我迟到了,但要求似乎基本上可以归结为这一点:
- 删除重复的 tarball 文件内容
- 必须能够恢复原始 gzip 文件
一开始,这似乎是不可能的。重复数据删除通常依赖于能够处理未压缩的文件。但后来我意识到,如果你可以依赖 gunzip/gzip 生成完全相同的文件(最好测试一下),那么你就可以使用备份,它实际上是为了删除重复的 tarball 而设计的。所以:
gunzip
你得到的 tarballgzip
再次检查 tarball 以验证它们是否完全匹配(如果 gzip 实现相同则应该如此,但压缩级别可能会有所不同,因此您可能需要找出这一点)- 将 tarball 导入
zbackup
答案2
我不认为你能“轻易”地完成你想做的事情
如果 .tgz 文件足够相似,您可能能够使用 xdelta,并完整备份第一个文件,然后备份第一个和第二个文件之间的差异的 xdelta。
另一种部分解决方案是使用 rzip(或 lrzip ??),它旨在对非常大的文件进行压缩 - 虽然不是最理想的,但它可能比您目前使用的要小得多,但会以牺牲 CPU 和内存为代价。
答案3
我使用 squashfs 来实现类似的目的:
mksquashfs dir1 dir2 dir3 backup_file.fs -keep-as-directory
答案4
有一个优秀的解决方案它会执行您所要求的操作,删除多个 TAR 文件中的重复数据块。这不仅可以删除未更改的文件,还可以仅存储类似文件中已更改的部分。
然而,它是一种客户端/服务器解决方案,其中服务器是付费产品。但由于重复数据删除功能,它非常实惠,而且它提供加密功能并为您安全存储文件。
客户端使用普通的 tar 代码,因此该命令使用起来非常简单。