我每晚從網站寄存服務備份一個名為 .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
你得到的壓縮包gzip
再次壓縮 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 程式碼,因此該命令易於使用。