對多個 .tar.gz 檔案內的重複檔案進行刪除

對多個 .tar.gz 檔案內的重複檔案進行刪除

我每晚從網站寄存服務備份一個名為 .tar.gz 的檔案。每晚更改的數據非常少(<10MB)。

我想對這些檔案進行存檔,並在多個 .tar.gz 檔案中對檔案進行重複資料刪除(固體壓縮),而無需提取每個單獨的備份檔案。

簡化範例:

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

我只想壓縮、存檔2013-02-24.tar.gz2013-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你得到的壓縮包
  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 程式碼,因此該命令易於使用。

相關內容