ブロックレベルの重複排除のために 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 ファイルの日付/名前スタンプの切り取りに関する質問の前半に回答します。いいえ、まだ既製のコードを見つけていませんが、ビジュアル バイナリ diff ツールである vbindiff をインストールする時間は見つけました。ヘッダーが圧縮されていないため、実際の圧縮ストリームは および と同一でありgzip、残っているのは、圧縮ファイルの先頭の数バイトを操作して統合バージョンを取得することだけです。バイナリ用の をgzip -n知っている人がいなければ、小さな C プログラムで問題は解決します :-)sed

2 番目の部分については、大量のデータで実験する必要があります。明確な結果が出たら、ここに投稿します。

関連情報