tarはブロックレベルでデータの重複を削除できますか?

tarはブロックレベルでデータの重複を削除できますか?

簡単に言えば、tarファイルがディスクに作成されたときにtarの内部および/または外部範囲の重複を削除できますか?理論的に尋ねるので、tar内のデータ範囲が等しい場合(圧縮範囲内で移動や分割がない場合)、理論的には、その範囲はtar外部のデータ範囲と同じであるため、重複排除が発生する可能性があります。

たとえば、ディレクトリをtarしてからブロックレベルの重複排除を使用すると、tarの有効サイズは、追加されたヘッダー、メタデータ、およびアーカイブ表示の終了サイズになります。

明らかに私は圧縮されていないtar、特にGNU tarについて話しています。私は見たことがないGNU tar 標準私が読んでいる内容の元のブロックデータを保存しているように見えますが、おそらく私が読んでいる内容を誤解している可能性があります。

答え1

一般的に言えばそうではありません。この種の重複排除機能を提供するファイルシステムを設計することは可能ですが、コストが非常に高く、実質的な利点がほとんどないため、実際に実装されたことがあるかどうか疑問です。問題は、重複排除が次にのみ集中することです。調整範囲。

ファイルシステムの重複排除は通常ブロックレベルで行われます。ファイルシステムドライバは、ブロックを保存しようとすると、ブロック内容のチェックサムを計算し、テーブル内のチェックサムを探します。テーブルにこのチェックサムを含むブロックが存在しないとマークされている場合は、ブロックが保存され、チェックサムがテーブルに追加されます。テーブルにチェックサムがある場合、ドライバはそのチェックサムを含むブロックが保存するブロックと同じであることを確認します。その場合、そのブロックへの新しい参照が生成され、そうでない場合はブロックが追加されます。

ご覧のとおり、ブロックを作成するたびにコストが発生します。ただし、少なくともこの費用は、ブロックが記録されるたびに一度だけ支払う必要があります。ファイル1にが含まれていてaaaabbbbccccファイル2にが含まれていて、aabbbbccccブロックサイズが4の場合、ファイルに同じブロックが含まれていないため、重複排除は発生しません。ファイル2がファイル1に含まれているかどうかを検出するには、ソートされたブロックのチェックサムを計算する必要があります。これは高価です。

通常、tarファイルのファイルブロックはファイルシステムのブロックと整列しません。 tarアーカイブのファイルは、512(tarブロックサイズ)の倍数である任意のオフセットから開始できますが、ほとんどのファイルシステムはより大きなブロックサイズを使用します。アーカイブ内のファイルの先頭がファイルシステムブロックの先頭と一致する場合、機会が与えられると、そのファイルは重複排除されます。一般的なファイルシステムのブロックサイズはこれよりも大きいが、512の倍数であるため、時には重複排除が発生する。たとえば、均一なファイルサイズ分布が4096であると仮定すると、4096バイトブロックの重複排除は約8個(1:1)になります。これは完全に正確ではないため、確率は実際には小さいです。)

重複排除の一般的なユースケースは、同じまたはほぼ同じファイル(バックアップコピー、以前のバージョンのファイルなど)です。変換されたファイルは一般的ではありません。圧縮されていないアーカイブは特に非定型です。

関連情報