ニコール・ハミルトンは gzip
を正しく指摘しています 辞書のサイズが小さいため、遠い重複データを見つけることはできません。
bzip2
メモリが 900 KB に制限されているため、同様です。
代わりに、以下を試してください:
LZMA/LZMA2 アルゴリズム (xz
、 7z
)
LZMA アルゴリズムは Deflate と同じファミリに属しますが、はるかに大きな辞書サイズを使用します (カスタマイズ可能。デフォルトは 384 MB 程度です)。 xz
最近の Linux ディストリビューションにデフォルトでインストールされるはずのユーティリティは、gzip
に似ています。 LZMA を使用します。
LZMA は長距離の冗長性を検出するため、ここでデータを重複排除できます。ただし、Gzip よりも低速です。
別のオプションは 7-zip (7z
、p7zip
これは、デフォルトで LZMA を使用するアーカイバ (シングルストリーム圧縮ではなく) です (LZMA の作成者によって作成されました)。 7-zip アーカイバは、.7z
にアーカイブするときに、ファイル レベルで (同じ拡張子のファイルを調べて) 独自の重複排除を実行します。 フォーマット。これは、 tar
を置き換えたい場合に、 7z
で 、重複排除された同一のファイルを取得します。ただし、7z はナノ秒のタイムスタンプ、権限、または xattrs を保持しないため、ニーズに合わない可能性があります。
lrzip
lrzip
Gzip/Deflate、bzip2、lzop、または LZMA などの従来のアルゴリズムにデータを供給する前に、データを前処理して長距離冗長性を除去する圧縮プログラムです。ここで提供するサンプル データについては、必須ではありません。入力データがメモリに収まりきらないほど大きい場合に便利です。
この種のデータ (重複した非圧縮チャンク) には、 lzop
を使用する必要があります lrzip
による圧縮 (非常に高速) 、重複排除されたデータを完全にランダムに圧縮しようとしても、何のメリットもありません。
バップとオブナム
質問のバックアップにタグを付けたので、ここでの目標がデータのバックアップである場合は、Bup や Obnam などの重複排除バックアップ プログラムの使用を検討してください。
gzip gzip は、LZ77 とハフマン コーディングを組み合わせた DEFLATE アルゴリズムに基づいています。これは、オンザフライで構築された辞書を使用して重複を監視し、入力ストリームを圧縮シンボルに変換することによって機能するロスレス データ圧縮アルゴリズムです。ただし、32K を超えて区切られた重複を見つけることはできません。 1MB 離れた重複を見つけることを期待するのは現実的ではありません。
gzip
xz
であっても、重複は検出されません 巨大な辞書サイズではそうではありません。あなたができることは mksquashfs
を使うことです - これにより、重複のスペースが節約されます。
xz
での簡単なテスト結果 と mksquashfs
3 つのランダムなバイナリ ファイル (64MB) のうち 2 つが同じ:
セットアップ:
mkdir test
cd test
dd if=/dev/urandom of=test1.bin count=64k bs=1k
dd if=/dev/urandom of=test2.bin count=64k bs=1k
cp test{2,3}.bin
cd ..
スカッシュ:
mksquashfs test/ test.squash
> test.squash - 129M
xz:
XZ_OPT='-v --memlimit-compress=6G --memlimit-decompress=512M --lzma2=preset=9e,dict=512M --extreme -T4 ' tar -cJvf test.tar.xz test/
> test.tar.xz - 193M