クラウド ボリュームに約 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 番目の部分については、大量のデータで実験する必要があります。明確な結果が出たら、ここに投稿します。