コンテンツへスキップ
HexaTransfer
ブログへ戻る
クラウドとストレージ

クラウドストレージ向けファイル重複排除戦略

ブロックレベル、ファイルレベル、インラインの重複排除技術を解説し、ファイル重複排除でストレージコストを削減する方法を紹介します。

ファイル重複排除はワークロードによってクラウドストレージを20〜90%削減します。3つの技術のいずれかを使います。ファイルレベル(同一ファイルをSHA-256ハッシュをキーとして1回だけ保存)、ブロックレベル(ファイルを4〜128KBのブロックに分割し、ブロックごとに重複排除)、Rabinフィンガープリントを使ったコンテンツ定義チャンキング(CDC)による可変長チャンキングです。VMバックアップは10:1の削減を達成し、一般的なオフィスファイルは2:1、メディアライブラリはほぼ効果なしです。データに合った技術を選んでください。既に固有の.mp4ファイルのライブラリにブロック重複排除を実行してもCPUを無駄に消費するだけです。

ファイルレベルの重複排除:最も簡単な成果

ファイルレベルの重複排除はファイル全体のハッシュを比較します。同じSHA-256を持つ2つのファイルは同一です。1つを保持し、もう一方はそれを参照します。実装は週末で完了します。

  1. バケットコンテンツのインベントリ(S3 Inventory・Azure Inventory・GCSバケットリスト)
  2. 各オブジェクトのSHA-256を計算(または注意事項付きでプロバイダー提供のETagを使用)
  3. ハッシュでグループ化し、グループごとに正規キーを選択し、参照を更新して重複を削除

注意事項:S3のETagは5GB未満の単一パートアップロードのみSHA-256と一致します。マルチパートアップロードは異なる計算式(ハッシュのハッシュ)を使います。確実な重複排除のために、aws s3 cp s3://bucket/key - | sha256sumで自分でハッシュを計算するか、アップロード時に計算してメタデータに保存してください。

ファイルレベルの重複排除は、ユーザーが同じファイルを定期的にアップロードする場合(ベンダーのPDF・会社のテンプレート・共有画像)に効果を発揮します。一般的なオフィスのワークロードでは10〜30%の節約を見込んでください。

ブロックレベルの重複排除:大きな乗数効果

ブロックレベルは各ファイルを固定サイズのチャンク(4KB・16KB・64KB)に分割し、各チャンクをハッシュします。チャンクの80%を共有する2つのファイルは固有の20%と共有ブロックの1コピーのみを保存します。バックアップ製品(Veeam・Rubrik・Commvault)・ファイルシステム(ZFSのdedup=on・Btrfs)・一部のバックアップクラウド(クライアントサイド重複排除付きのBackblaze B2)がこれを使用しています。

利点:大きな範囲を共有するVMイメージ・データベースバックアップ・ログアーカイブで大幅な圧縮。欠点:高いメモリ使用量(重複排除インデックスはRAMに常駐)・書き込み時のCPUコスト・インデックスが破損した場合の壊滅的な増幅。

クラウドオブジェクトストレージでは、ブロック重複排除はネイティブ機能としてではなく、バックアップ製品内部で行われることがほとんどです。S3自体は重複排除しません。Backblaze B2はクライアントがブロックハッシュを先に送信する場合(事前ハッシュ済みパーツを使ったb2_start_large_file)にアップロード時に重複排除します。

コンテンツ定義チャンキング(CDC)

固定サイズのチャンキングはファイルの先頭に1バイトが挿入されると機能しなくなります。すべての後続ブロックのハッシュが変わってしまいます。コンテンツ定義チャンキングはローリングハッシュ(Rabin-Karpフィンガープリント)を使ってコンテンツパターンに基づいてチャンクの境界を定義します。1バイト挿入すると、直近のチャンクのみ変化します。

CDCはrestic・BorgBackup・Duplicacy・Kopiaの基盤です。これらのオープンソースツールは平均1〜4MBの可変チャンクでクライアントサイドの重複排除を行います。増分的に変化する500GBのファイルのバックアップでは、CDCベースのバックアップが50GB未満のユニークストレージを使用することがよくあります。

バックアップまたは同期システムを構築するなら、fastcdc-rschunkyのようなライブラリ経由のCDCが現代的な選択です。独自のローリングハッシュを実装しないでください。エッジケースが複雑です。

インライン重複排除とポストプロセス重複排除

インライン重複排除は書き込み時に実行されます。データがディスクに到達する前に、システムがそのブロックがすでに存在するかチェックします。存在すれば参照を書き込み、存在しなければブロックを書き込みます。ZFS・ほとんどのバックアップアプライアンス・一部のクラウドストレージ層で使用されています。

ポストプロセス重複排除は最初に書き込み、その後バックグラウンドジョブで重複を検出してスペースを回収します。Windows ServerのData Deduplication・NetAppのSnapVault・ほとんどのユーザースペースツールで使用されています。ポストプロセスは書き込みレイテンシが低いですが、より多くのピークストレージが必要です(重複が回収前にしばらく存在します)。

クラウドのワークロードでは、インライン重複排除は通常利用できません。S3は提供していません。スケジュールされたジョブ(日次インベントリ・日次重複排除実行)によるポストプロセスが実用的なパターンです。

重複排除が効果を発揮しない場所

既に圧縮または暗号化されたデータは重複排除の効率が低いです。異なる2つの.mp4ファイルは内容が似ていても、ほぼバイトを共有しません。同じ平文の2つの暗号化された.zipファイルは、暗号化後ゼロバイトを共有します。それが暗号化の目的そのものだからです。

これはエンドツーエンド暗号化ファイルストレージがユーザー間で重複排除できないことを意味します。収束暗号化(平文をハッシュし、そのハッシュを鍵として使用する)はE2EE間の重複排除を可能にしようとした試みですが、セキュリティ上の問題があります。ファイル確認攻撃を可能にします。E2EEファイルサービスでは、重複排除がユーザー間ではなくユーザー自身のファイル内でのみ行われることを受け入れてください。

重複排除のセキュリティ側面

非E2EEシステムでのクロスユーザー重複排除はサイドチャネルを作成します。アップロードしたファイルが既存のブロックと重複排除された場合、サーバーは他の誰かが既にそのファイルを持っていたことを知ります。Dropboxは2011年にこれを公開されました。他のサービスも同様です。共有ビジネスアカウントでは問題ありませんが、プライバシーを主張するサービスには情報漏洩になります。

機密性が重要であれば、システム全体ではなくユーザー自身のデータ内のみで重複排除してください(ユーザー固有のキーでソルト化)。またはE2EEは重複排除なしを意味することを受け入れてそれに応じてストレージをサイジングしてください。プライバシーを優先するツール(例えば暗号化されたアドホック転送向けのHexaTransfer)は、重複排除の効率よりも、サービスを含む誰も2人のユーザーが同じファイルを持っているかどうかを知ることができないという保証を優先します。

重複排除の有効性を測定する

重複排除を有効にして期待するだけにしないでください。比率を測定してください。

dedup_ratio = logical_bytes / physical_bytes

比率2:1は、1物理バイトに対して2論理バイトを保存していることを意味します。レポートツール:ZFSのzpool get dedupratio・Windows ServerのGet-DedupStatus・restic/Borgのリポジトリ統計。

ワークロード別の健全な比率:

  • VMイメージ:8〜20:1
  • データベースバックアップ:10〜30:1
  • ファイルサーバー(オフィス文書):1.5〜3:1
  • メールアーカイブ:2〜5:1
  • メディアライブラリ:1.0〜1.1:1(実施不要)
  • 暗号化アーカイブ:1.0:1(不可能)

ワークロードの比率が1.5:1を下回る場合、重複排除をオフにしてください。CPUとメモリのコストを回収できていません。

バックアップ製品との統合

ほとんどの企業はゼロから重複排除を実装しません。それを行うバックアップ製品を使います。選択時の比較ポイント:

  • Veeam:インラインブロック重複排除、デフォルト512KBチャンク、重複排除後に圧縮
  • Rubrik:コンテンツ定義可変チャンク、サブブロック重複排除
  • Commvault:クライアントサイド重複排除と個別・グローバルプール
  • restic/Borg/Kopia:オープンソースCDC、クライアントサイド、S3/B2/Azureバックエンド
  • BackupPC:ハードリンクベースのファイルレベル、シンプルだが古い

2TBをS3 Glacierにバックアップする中小企業の場合、5:1重複排除でGlacier Instant RetrievalへのresticはGenshi15ドル/月程度です。500TBのエンタープライズデータ資産には、重複排除機能付きの適切なバックアッププラットフォームが最初の1年でストレージ節約により元が取れます。

圧縮を追加するタイミング

重複排除は重複バイトを削除し、圧縮は固有バイト内の冗長性を削除します。両方を重ねられます。重複排除後、テキストが多いデータにzstd圧縮を適用するとさらに1.5〜2倍削減できます。BorgBackupは--compression zstdをサポートし、resticは--compression maxを持ち、AWS EFSはOneZone-IAの透過的圧縮を持ちます。

順序が重要です。まず重複排除(重複ブロックを露出させるため)、次に固有ブロックを圧縮します。先に圧縮すると通常重複排除を無効化します。入力の小さな変化が圧縮出力全体に波及するからです。真剣なバックアップ製品はこれを正しく処理します。適切なパラメーターを選ぶだけです。

重複排除は地味で目立たず、混合ワークロードのストレージコストにおける最大のレバーです。データをインベントリし、コンテンツに合った技術を選択し、比率を測定し、予算を回収してください。

hexatransfer.com で今すぐ試せます — 無料、アカウント不要、最大10GB。

エンドツーエンド暗号化で大容量ファイルを安全に送信

エンドツーエンド暗号化で最大10GBのファイルを無料で転送。アカウント不要。ファイルはアップロード前にブラウザで暗号化されるため、他の誰にも読まれません。

ファイルを送信