優化 gzip 壓縮檔案以進行區塊級重複資料刪除

優化 gzip 壓縮檔案以進行區塊級重複資料刪除

我在雲卷上有大約 100TiB 的壓縮 gzip 資料。在執行區塊級重複資料刪除(btrfs 的 duperemove)的過程中,我發現它是在沒有 的情況下進行壓縮的-n,這會導致其他相同檔案的壓縮輸出出現區塊級差異。

除了使用 重新壓縮之外gzip -n,還有其他快捷方式可以讓數億個 gzip 壓縮檔案「遺失」該標頭嗎?如果我已經必須將它們全部重新壓縮,我是否還應該研究其他優化,例如--rsyncable最大化重複資料刪除的機會?

(數據很有可能包含大量重複內容,我們正在談論大型資料庫表的每日完整轉儲)

答案1

您可以使用 zcat 提取文件,然後計算每個文件的校驗和:

for x in *.gz
do
    zcat $x | sha256sum > $x.sum
done

然後檢查這些 *.gz.sum 檔案是否有重複。每次刪除名為“something.gz.sum”的重複項目時,也會刪除對應的“something.gz”

答案2

回答我的問題的前半部分:切割 gzip 檔案的日期/名稱標記。不,我還沒有找到現成的程式碼,但是我確實抽出時間安裝了vbindiff,一個可視化的二進位diff工具,發現頭沒有被壓縮,因此實際的壓縮流與 和gzip相同gzip -n,剩下的就是操作壓縮檔開頭的幾個位元組以獲得統一版本。一個小小的 C 程式將解決我的問題,除非有人知道sed二進位檔案的 a :-)

至於第二部分,我只需要對一堆數據進行實驗。如果我有任何明確的結果,我會將其發佈在這裡。

相關內容