(57)【要約】【課題】重複排除における処理負荷を低減できるようにする。【解決手段】ストレージにおいて、格納対象データは、複数のブロック５００を含むコンテンツを含み、ブロック５００は、取引データと、直前のブロックのハッシュ値とを対応付けた構造となっており、ストレージは、記憶デバイスと、プロセッサを有し、プロセッサを、（１）コンテンツにおけるブロックを含むチャンクの１以上のブロックに対応付けられたハッシュ値を取得し、チャンクに対するフィンガプリントを、取得した１以上のブロックのハッシュ値に基づいて特定させ、（２）チャンクに対応するフィンガプリントが、記憶デバイス２３０に格納されている格納済みチャンクと同じであるか否かを判定させ、（３）同じであると判定された場合には、チャンクを記憶デバイス２３０に格納せず、同じでないと判定された場合には、チャンクを記憶デバイス２３０に格納させるようにする。【選択図】図１
2020047107.tif 000002
【特許請求の範囲】
【請求項１】
格納対象データについて重複を排除して保存用記憶デバイスに格納させるデータ重複排除装置であって、
前記格納対象データは、時系列に管理されている複数のデータ群を含むデータ集合を含み、
前記データ群は、１以上の管理データを含み、前記データ群のハッシュ値は、前記データ群と所定の関係を有する他のデータ群に対応付けられて記憶されるようになっており、
前記データ重複排除装置は、前記データ集合を記憶する記憶デバイスと、プロセッサ部を有し、
前記プロセッサ部は、
（１）前記データ集合における１以上のデータ群を含む格納単位データの前記１以上のデータ群のハッシュ値を取得し、前記格納単位データに対するフィンガプリントを、取得した前記１以上のデータ群のハッシュ値に基づいて特定し、
（２）前記格納単位データに対応するフィンガプリントが、前記保存用記憶デバイスに格納されている格納済み格納単位データと同じフィンガプリントであるか否かを判定し、
（３）前記格納単位データに対応するフィンガプリントが前記格納済み格納単位データと同じフィンガプリントであると判定された場合には、前記格納単位データを前記保存用記憶デバイスに格納せず、前記格納単位データに対応するフィンガプリントが前記格納済み格納単位データと同じフィンガプリントでないと判定された場合には、前記格納単位データを前記保存用記憶デバイスに格納させる
データ重複排除装置。
【請求項２】
前記データ集合における前記データ群は、１以上の前記管理データと、直前のデータ群のハッシュ値とを含むブロックとして形成されており、前記データ群の前記管理データと前記ハッシュ値に基づいて生成されるハッシュ値が他のデータ群に格納されている
請求項１に記載のデータ重複排除装置。
【請求項３】
前記格納単位データは、複数のデータ群を含み、
前記プロセッサ部は、前記格納単位データに含まれる各データ群のハッシュ値について、排他的論理和をとった値を、前記格納単位データに対応するフィンガプリントとする
請求項１又は請求項２に記載のデータ重複排除装置。
【請求項４】
前記記憶デバイスは、
前記保存用記憶デバイスに格納されている１以上の前記格納済み格納単位データのフィンガプリントを含むフィンガプリント情報を記憶する
請求項１から請求項３のいずれか一項に記載のデータ重複排除装置。
【請求項５】
前記記憶デバイスは、
前記データ集合の格納先として設定されているデータ集合格納先情報を記憶し、
前記プロセッサ部は、
前記格納対象データについて、前記データ集合格納先情報が示す格納先に格納されているか否かによりデータ集合であるか否かを判定し、データ集合である場合には、前記（１）〜（３）を実行する
請求項１から請求項４のいずれか一項に記載のデータ重複排除装置。
【請求項６】
前記格納対象データは、前記データ集合と、前記データ集合以外のデータとを含み、
前記プロセッサ部は、
前記データ集合以外のデータについて、所定のサイズに分割して他種格納単位データを生成し、
前記他種格納単位データのフィンガプリントを生成し、
前記他種格納単位データに対応するフィンガプリントが、前記保存用記憶デバイスに格納されている格納済み格納単位データと同じフィンガプリントであるか否かを判定し、
前記他種格納単位データに対応するフィンガプリントが前記格納済み格納単位データと同じフィンガプリントであると判定された場合には、前記他種格納単位データを前記保存用記憶デバイスに格納せず、前記他種格納単位データに対応するフィンガプリントが前記格納済み格納単位データと同じフィンガプリントでないと判定された場合には、前記他種格納単位データを前記保存用記憶デバイスに格納させる
請求項１から請求項５のいずれか一項に記載のデータ重複排除装置。
【請求項７】
前記格納単位データと、前記他種格納単位データとのサイズを異ならせる
請求項６に記載のデータ重複排除装置。
【請求項８】
前記記憶デバイスは、
前記保存用記憶デバイスに格納されている前記格納単位データに対応する前記格納済み格納単位データのフィンガプリントを含む第１フィンガプリント情報と、前記保存用記憶デバイスに格納されている前記他種格納単位データに対応する前記格納済み格納単位データのフィンガプリントを含む第２フィンガプリント情報と、を記憶する
請求項６又は請求項７に記載のデータ重複排除装置。
【請求項９】
前記データ重複排除装置は、
前記保存用記憶デバイスを備えるストレージシステムであり、
前記記憶デバイスは、前記保存用記憶デバイスに格納されている１以上の格納済み格納単位データのフィンガプリントを含むフィンガプリント情報を格納し、
前記プロセッサ部は、
他のデータ重複排除装置から格納単位データ及び前記格納単位データのフィンガプリントを受信した場合に、前記フィンガプリント情報に前記受信したフィンガプリントと同じフィンガプリントの格納済み格納単位データが格納されている場合には、前記格納済み格納単位データとの関連性が強い他の格納済み格納単位データのフィンガプリントを、前記他のデータ重複排除装置に送信する
請求項１から請求項８のいずれか一項に記載のデータ重複排除装置。
【請求項１０】
前記プロセッサ部は、
前記格納単位データのフィンガプリントが、前記格納単位データと同一のデータ群を含む格納済み格納単位データのフィンガプリントと一致しないことを検出した場合に、アラートを発する
請求項１から請求項９のいずれか一項に記載のデータ重複排除装置。
【請求項１１】
格納対象データについて重複を排除して保存用記憶デバイスに格納させるデータ重複排除装置によるデータ重複排除方法であって、
前記格納対象データは、時系列に管理されている複数のデータ群を含むデータ集合を含み、
前記データ群は、１以上の管理データを含み、前記データ群のハッシュ値は、前記データ群と所定の関係を有する他のデータ群に対応付けられて記憶されるようになっており、
前記データ重複排除装置は、
前記データ集合における１以上のデータ群を含む格納単位データの前記１以上のデータ群のハッシュ値を取得し、前記格納単位データに対するフィンガプリントを、取得した前記１以上のデータ群のハッシュ値に基づいて特定し、
前記格納単位データに対応するフィンガプリントが、前記保存用記憶デバイスに格納されている格納済み格納単位データと同じフィンガプリントであるか否かを判定し、
前記格納単位データに対応するフィンガプリントが前記格納済み格納単位データと同じフィンガプリントであると判定された場合には、前記格納単位データを前記保存用記憶デバイスに格納せず、前記格納単位データに対応するフィンガプリントが前記格納済み格納単位データと同じフィンガプリントでないと判定された場合には、前記格納単位データを前記保存用記憶デバイスに格納させる
データ重複排除方法。
【請求項１２】
格納対象データについて重複を排除して保存用記憶デバイスに格納させるデータ重複排除装置を構成するコンピュータにより実行されるデータ重複排除プログラムであって、
前記格納対象データは、時系列に管理されている複数のデータ群を含むデータ集合を含み、
前記データ群は、１以上の管理データを含み、前記データ群のハッシュ値は、前記データ群と所定の関係を有する他のデータ群に対応付けられて記憶されるようになっており、
前記データ重複排除プログラムは、
前記コンピュータを、
前記データ集合における１以上のデータ群を含む格納単位データの前記１以上のデータ群のハッシュ値を取得し、前記格納単位データに対するフィンガプリントを、取得した前記１以上のデータ群のハッシュ値に基づいて特定し、
前記格納単位データに対応するフィンガプリントが、前記保存用記憶デバイスに格納されている格納済み格納単位データと同じフィンガプリントであるか否かを判定し、
前記格納単位データに対応するフィンガプリントが前記格納済み格納単位データと同じフィンガプリントであると判定された場合には、前記格納単位データを前記保存用記憶デバイスに格納せず、前記格納単位データに対応するフィンガプリントが前記格納済み格納単位データと同じフィンガプリントでないと判定された場合には、前記格納単位データを前記保存用記憶デバイスに格納させる
ように機能させるデータ重複排除プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、格納対象データについて重複を排除して格納させるデータ重複排除装置等に関する。
【０００２】
ブロックチェーン（ＢＣ）技術は、複数の取引主体間で合意をとったトランザクションのみを受領し、また取引データをブロックチェーンと呼ばれるデータ構造で管理することでデータの改竄を困難にする。ＢＣ技術の適用により、第三者機関による取引の管理なしに、利用者間での直接取引が可能なシステムが構築可能となる。これにより、取引の迅速化やコストの低減が見込まれる。ＢＣ技術は金融や産業など多くの分野での活用が期待される。
【０００３】
ブロックチェーン（ＢＣ）システムでは、取引データの改竄を困難とするため、ＢＣブロックという単位に、複数の取引データと一つ前のブロックから算出したハッシュ値とを合わせて格納するデータ構造をとる。このＢＣブロックは取引を重ねる毎に数が増え続ける上、ＢＣシステムに参加している全てのＢＣサーバへとデータが複製される。このようなＢＣシステムでの増大するデータの格納や管理を低コストで行うためには、ストレージシステムでのティアリングが有効である。また、操作ミスなどにより生じるデータ不正への対策としてストレージシステムへのバックアップも必要となる。
【０００４】
ＢＣサーバのデータを高速にストレージシステムへティアリングしたり、またはバックアップしたりする方法として、特許文献１の技術が知られている。特許文献１は、事前にサーバでデータ重複排除を行い、非重複データのみをリモートのストレージシステムに転送する技術を開示する。重複排除は、ストレージシステムの格納データのうち、内容が重複するデータ（重複データ）の存在を検知し、この重複データを削減することでデータの転送量や格納量を減らす技術である。特許文献１の技術では、重複排除に必要な情報の一部を、ストレージシステムがサーバからの要求に応じて配布し、各サーバで重複排除処理を分散実行することにより性能向上を図っている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第９９５２９３６号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
重複排除では格納データを複数に分割し、この分割したデータ間の内容の重複を判定する。以降、重複判定するデータの単位を「チャンク」と呼ぶ。チャンクのサイズは、例えば、数キロバイト以上であるので、重複判定のためチャンク同士を比較するには多くの時間とコストを要する。そこで、各チャンクからメッセージダイジェストを算出し、このメッセージダイジェストの値を比較することで、重複判定を代替することにより、処理時間やコストを低減する。ここで、メッセージダイジェストの出力結果を「ＦＰ（Finger Print）」と呼ぶ。ＦＰには、例えば、ＳＨＡ（Secure Hash Algorithm）−２、ＳＨＡ−３といった強い衝突耐性を持つハッシュ関数のハッシュ値が用いられる。格納済みデータのＦＰを登録したテーブル（ＦＰＴ：Finger Print Table）を作成しておき、このテーブルから対象データのＦＰを検索することで、重複判定を行う。
【０００７】
例えば、特許文献１に記載の技術によると、重複排除のためにサーバでハッシュ計算を行う必要があり、このハッシュ計算による処理負荷が大きいためティアリングやバックアップの性能低下を招く問題がある。
【０００８】
本発明は、上記事情に鑑みなされたものであり、その目的は、重複排除における処理負荷を低減することのできる技術を提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、一観点に係るデータ重複排除装置は、格納対象データについて重複を排除して保存用記憶デバイスに格納させるデータ重複排除装置であって、格納対象データは、時系列に管理されている複数のデータ群を含むデータ集合を含み、データ群は、１以上の管理データを含み、前記データ群のハッシュ値は、前記データ群と所定の関係を有する他のデータ群に対応付けられて記憶されるようになっており、データ重複排除装置は、データ集合を記憶する記憶デバイスと、プロセッサ部を有し、プロセッサ部は、（１）データ集合における１以上のデータ群を含む格納単位データの１以上のデータ群のハッシュ値を取得し、格納単位データに対するフィンガプリントを、取得した１以上のデータ群のハッシュ値に基づいて特定し、（２）格納単位データに対応するフィンガプリントが、保存用記憶デバイスに格納されている格納済み格納単位データと同じフィンガプリントであるか否かを判定し、（３）格納単位データに対応するフィンガプリントが格納済み格納単位データと同じフィンガプリントであると判定された場合には、格納単位データを保存用記憶デバイスに格納せず、格納単位データに対応するフィンガプリントが格納済み格納単位データと同じフィンガプリントでないと判定された場合には、格納単位データを保存用記憶デバイスに格納させる。
【発明の効果】
【００１０】
本発明によれば、重複排除における処理負荷を低減することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１実施形態の概要を説明する図である。
【図２】図２は、第１実施形態に係るブロックチェーンシステムの全体構成図である。
【図３】図３は、第１実施形態に係るＢＣサーバとストレージシステムとの構成図である。
【図４】図４は、第１実施形態に係る重複排除を説明する図である。
【図５】図５は、第１実施形態に係るＢＣブロックを説明する図である。
【図６】図６は、第１実施形態に係るＦＰの算出方法を説明する図である。
【図７】図７は、第１実施形態に係るコンテンツ索引表の構成図である。
【図８】図８は、第１実施形態に係る通常ＦＰＴの構成図である。
【図９】図９は、第１実施形態に係るＢＣ用ＦＰＴの構成図である。
【図１０】図１０は、第１実施形態に係るＢＣブロック格納先設定画面の構成図である。
【図１１】図１１は、第１実施形態に係るバックアップ処理のフローチャートである。
【図１２】図１２は、第１実施形態に係るチャンク分割／チャンク管理情報作成処理のフローチャートである。
【図１３】図１３は、第１実施形態に係るストレージ側重複排除処理のフローチャートである。
【図１４】図１４は、第１実施形態に係るリストア処理のフローチャートである。
【図１５】図１５は、第２実施形態に係るＢＣサーバとストレージシステムとの構成図である。
【図１６】図１６は、第２実施形態に係るバックアップ処理のフローチャートである。
【発明を実施するための形態】
【００１２】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１３】
以下の説明では、「ＡＡＡテーブル」、「ＡＡＡ表」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ＡＡＡテーブル」、「ＡＡＡ表」を「ＡＡＡ情報」と呼ぶことができる。
【００１４】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサを含む。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサである。１以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１５】
また、以下の説明では、「プログラム」を動作の主体として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部及びインターフェース部のうちの少なくとも１つを用いながら行うため、処理の動作主体が、プロセッサ部（或いは、プロセッサ部を有する計算機又は計算機システム）とされてもよい。プログラムは、プログラムソースから計算機にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な記憶メディアであってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。また、プログラムが実行されることによって実現される処理のうちの少なくとも一部が、ハードウェア回路（例えばＡＳＩＣ（Application Specific Integrated Circuit）又はＦＰＧＡ（Field-Programmable Gate Array））によって実現されてもよい。
【００１６】
まず、第１実施形態の概要について説明する。
【００１７】
図１は、第１実施形態の概要を説明する図である。
【００１８】
第１実施形態に係るブロックチェーンシステム（ＢＣシステム）１のストレージシステム（単にストレージともいう）２００は、ＦＰＴとして通常チャンク３００用の通常ＦＰＴ９００と、ＢＣチャンクブロック４００用のＢＣ用ＦＰＴ８００とを保有する。ストレージ２００は、重複判定時に、複数のＢＣブロック５００を含むチャンクであるＢＣブロックチャンク４００を検知し、ＢＣブロックチャンク４００を構成するＢＣブロック５００のそれぞれの次のＢＣブロック５００から各ＢＣブロック５００についてのハッシュ値を取得し、取得したこれらハッシュ値に基づいて、ＢＣブロックチャンク４００に対応するＦＰ４１０を生成する。ストレージ２００は、ＢＣ用ＦＰＴ８００を参照して、生成したＦＰ４１０を検索して、同じＦＰ４１０が登録されているかにより、重複判定を行う。また、ストレージ２００は、ＢＣブロックチャンク４００として検知されなかった通常チャンク３００については、通常チャンク３００を入力として所定のハッシュ関数による出力値を算出して、通常ＦＰ３１０とし、通常ＦＰＴ９００を参照して、通常ＦＰ３１０が登録されているかにより、重複判定を行う。そして、ストレージ２００は、重複判定の結果に応じてデータの格納等を行う。
【００１９】
次に、第１実施形態について詳細に説明する。
【００２０】
図２は、第１実施形態に係るブロックチェーンシステムの全体構成図である。
【００２１】
ＢＣシステム１は、１つ以上のクライアント１１と、１つ以上のデータ重複排除装置の一例としてのＢＣサーバ１００と、データ重複排除装置の一例としてのストレージ２００と、管理端末１２とを備えている。クライアント１１、ＢＣサーバ１００、ストレージ、管理端末１２は、ネットワーク１０を介して相互に接続されている。ネットワーク１０は、例えばＷＡＮ（Wide Area Network）、ＬＡＮ（Local Area Network）、インターネットなどを含む通信回線により構成してもよい。
【００２２】
クライアント１１は、例えば、ＰＣ（Personal Computer）で構成されており、例えばプロセッサ、メモリ、入出力装置、ネットワークインタフェース等のハードウェアを有する。クライアント１１は、ＢＣブロック（データ群の一例）を利用可能なＢＣサービスを活用するアプリケーションプログラムを実行する。クライアント１１は、アプリケーションプログラムを実行することにより、トランザクションを生成し、ＢＣサーバ１００へトランザクションを発行する。なお、アプリケーションプログラムをＢＣサーバ１００で動作させるようにして、ＢＣサーバ１００と、クライアント１１とを同一の装置で実現してもよく、また、アプリケーションプログラムを管理端末１２で動作させるようにして、管理端末１２と、クライアント１１とを同一の装置で実現するようにしてもよい。なお、複数のＢＣサーバ１００は、複数の組織に分散されて管理されていてもよい。
【００２３】
管理端末１２は、例えば、ＰＣにより構成され、ストレージ２００や、ＢＣサーバ１００などへの管理操作を行うための計算機である。管理端末１２は、キーボード及びディスプレイなどの入出力装置を備え、管理者は、入出力装置を介して、ストレージ２００やＢＣサーバ１００へ設定の指示を行うことができる。また，管理端末１２は、ストレージ２００やＢＣサーバ１００の状態を出力装置に表示することができる。なお、管理端末１２は、ストレージ２００に内蔵されてもよい。
【００２４】
図３は、第１実施形態に係るＢＣサーバとストレージシステムとの構成図である。
【００２５】
ＢＣサーバ１００は、クライアント１１に対してＢＣサービスを提供する計算機である。ＢＣサーバ１００は、例えば、プロセッサ部の一例としてのプロセッサ１１０と、メモリ１２０と、記憶デバイス１３０と、ネットワークインタフェース１４０とを有する。プロセッサ１１０、メモリ１２０、記憶デバイス１３０、及びネットワークインタフェース１４０は、バス１５０を介して相互接続されている。
【００２６】
プロセッサ１１０は、例えば、ＣＰＵ等を含む演算装置として機能し、メモリ１２０に格納されるプログラム、演算パラメータ等に従って、ＢＣサーバ１００の動作を制御する。
【００２７】
メモリ１２０は、例えばＲＡＭ（Random Access Memory）であり、ＢＣサーバ１００がクライアント１１にＢＣサービスを提供するためのＢＣプログラム１２１を格納する。また、メモリ１２０は、バックアッププログラム１２２と、リストアプログラム１２３とを格納する。また、メモリ１２０は、記憶デバイス１３０から読み出された各種情報を記憶したり、プロセッサ１１０のワークメモリとして用いられたりする。
【００２８】
また、メモリ１２０は、バックアッププログラム１２２、及びリストアプログラム１２３の実行時に重複判定情報として参照される、コンテナ索引表９２０、８２０を格納する。なお、コンテナ索引表９２０、８２０は、記憶デバイス１３０に格納しておき、バックアッププログラム１２２及びリストアプログラム１２３が参照する際に必要に応じてメモリ１２０にロールインするようにしてもよい。
【００２９】
記憶デバイス１３０は、例えば、ＨＤＤ（Hard Disk Drive）や、ＳＳＤ（Solid State Drive）等であり、各種ソフトウェアや管理情報、バックアップの対象となりうるコンテンツのデータ（格納対象データ）などが格納されている。なお、ＢＣプログラム１２１、バックアッププログラム１２２、及びリストアプログラム１２３を記憶デバイス１３０に格納しておき、これらのプログラムをプロセッサ１１０が実行する際に記憶デバイス１３０からメモリ１２０に読み出すようにしてもよい。
【００３０】
ＢＣプログラム１２１は、プロセッサ１１０に実行されることにより、クライアント１１から取引データ（管理データの一例）であるトランザクションを受領し、ＢＣシステム１に参加する他のＢＣサーバ１００と、トランザクションの受領に関する合意形成を行い、トランザクションを含むＢＣブロック（データ群）５００を生成して、トランザクションをＢＣシステム１のデータベースへコミットする処理を実施し、クライアント１１へトランザクションの処理結果を通知する。
【００３１】
バックアッププログラム１２２は、プロセッサ１１０に実行されることにより、バックアップ対象のデータ（バックアップデータ）の決定や重複判定処理などのデータ処理を行う機能を提供し、ネットワークインタフェース１４０を介して、ストレージ２００へバックアップデータを送信する。また、バックアッププログラム１２２は、ネットワークインタフェース１４０を介してストレージ２００から重複判定に必要な情報を受信する。
【００３２】
リストアプログラム１２３は、プロセッサ１１０に実行されることにより、ネットワークインタフェース１４０を介して，ストレージ２００からリストア処理に必要なバックアップデータを受信して、元データの復元（リストア）を行う。
【００３３】
ストレージ２００は、データを格納する装置（計算機）であり、プロセッサ部の一例としてもプロセッサ２１０と、メモリ２２０と、保存用記憶デバイスの一例としての記憶デバイス２３０と、ネットワークインタフェース２４０とを有する。プロセッサ２１０、メモリ２２０、記憶デバイス２３０、及びネットワークインタフェース２４０は、バス２５０を介して相互接続されている。
【００３４】
プロセッサ２１０は、ＣＰＵなどを含む演算装置として機能し、メモリ２２０に記憶されているプログラム、演算パラメータに従ってストレージ２００を制御する。
【００３５】
メモリ２２０は、例えばＲＡＭ（Random Access Memory）であり、ストレージ２００側のバックアッププログラム２２１と、リストアプログラム２２２とを格納する。メモリ２２０は、記憶デバイス２３０から読み出された各種情報を記憶するために用いられたり、プロセッサ２１０のワークメモリとして用いられたりする。
【００３６】
メモリ２２０は、バックアッププログラム２２１及びリストアプログラム２２２の実行時に参照される重複判定情報として参照されるＦＰＴ９００、８００や、バックアップデータを復元するために利用されるコンテンツ索引表６００を格納する。ＦＰＴ９００、８００やコンテンツ索引表６００は、記憶デバイス２３０に格納しておき、バックアッププログラム２２１及びリストアプログラム２２２が参照する際に必要に応じてメモリ２２０にロールインしてもよい。
【００３７】
記憶デバイス２３０は、例えば、ＨＤＤ（Hard Disk Drive）や、ＳＳＤ（Solid State Drive）等であり、各種ソフトウェアや管理情報、バックアップ処理後のデータであるコンテナ３１、ＢＣブロックコンテナ４１のデータなどを格納する。
【００３８】
バックアッププログラム２２１は、プロセッサ２１０に実行されることにより、ＢＣサーバ１００から受領したバックアップ対象データを対象に重複排除処理を行い、重複排除処理後のデータを記憶デバイス２３０に格納する。またバックアッププログラム２２１は、プロセッサ２１０に実行されることにより、ネットワークインタフェース２４０を介して重複判定処理に必要な情報をＢＣサーバ１００へ送信する。
【００３９】
リストアプログラム２２２は、プロセッサ２１０に実行されることにより、ＢＣサーバ１００からのリストア要求を受領して、対応するデータを記憶デバイス２３０から読み出し、ネットワークインタフェース２４０を介してＢＣサーバ１００へ転送する。
【００４０】
次に、本実施形態に係る重複排除機能の概要を説明する。
【００４１】
本実施形態においては、ＢＣサーバ１００のバックアッププログラム１２２、及びストレージ２００のバックアッププログラム２２１に，バックアップ対象データのデータ量を削減する処理機能が搭載される。データ量を削減する処理機能には、例えばファイル圧縮処理や重複排除処理がある。ファイル圧縮処理は、１ファイル内に含まれる同一内容のデータセグメント(単位データ)を縮約して、データ量を削減する処理である。一方、重複排除処理は、複数ファイル（コンテンツ）間で検出される同一データセグメントを縮約することにより、ファイルシステムやストレージシステムに格納されるデータの総量を削減する処理である。
【００４２】
図４は、第１実施形態に係る重複排除を説明する図である。図４では、バックアップ対象データと、重複排除処理によって縮約された後のデータとの関係を示している。
【００４３】
本実施形態では、バックアップ対象データについての重複排除を行う単位となるデータセグメント（格納単位データの一例）を「チャンク」といい、複数のチャンクをまとめたデータを「コンテナ」という。また、記憶デバイス１３０，２３０に格納する単位である論理的にまとまったデータを「コンテンツ」（データ集合の一例）という。コンテンツには、通常のファイルに加え、アーカイブファイル、バックアップファイル、仮想ボリュームファイルなどの通常のファイルを縮約したファイルを含む。
【００４４】
本実施形態では、１つのコンテナには、互いに関連性の高いチャンクが集約されるように作成している。例えば、コンテナへの格納可能なチャンク数を定め、同一コンテンツから生成されるチャンクを、許容する数だけまとめて同一のコンテナに含めることで、関連性の高いチャンクを含むコンテナを作成できる。例えば、図４に示すように、ＢＣブロックコンテンツ４０Ｂの各ＢＣブロックチャンク（４００Ｂ１〜４００Ｂ３）は、ＢＣブロックコンテナ４１ｂに格納される。このように関連性の高いチャンクによりコンテナを構成することで、例えばリストア処理においてコンテンツを復元する際、単一のコンテナを読み出すことにより、コンテンツを構成する複数のチャンクを取得できるため、記憶デバイス２３０からの読み出し回数の削減が期待でき、リストア処理を迅速に行うことができる。
【００４５】
本実施形態では，重複判定処理の効率化のため、コンテンツについて、ＢＣブロック５００を含むＢＣブロックコンテンツ４０と、その他の通常コンテンツ３０とに分けて処理している。また、チャンクについてもＢＣブロック５００を含むＢＣブロックチャンク４００と、その他のチャンクである通常チャンク（他種格納単位データ）３００とにわけ、ＢＣブロックチャンク４００を含むコンテナをＢＣブロックコンテナ４１とし、通常チャンク３００を含むコンテナを通常コンテナ３１としている。
【００４６】
本実施形態では、図４に示すように、複数のＢＣブロックコンテンツ４０（４０Ｂと４０Ｂ’）における同一のＢＣブロックチャンク４００（４００Ｂ１〜４００Ｂ３）は、同一のＢＣブロックコンテナ４１ｂにそれぞれ１つずつ格納されるようになっている。したがって、同一のＢＣブロックチャンク４００を重複して記憶デバイス２３０に格納しないようにできる。また、通常コンテンツ３０（３０Ａ、３０Ａ’）における同一の通常チャンク３００（３００Ａ１〜３００Ａ３）についても同様に１つずつ通常コンテナ３１ａに格納されるようになっている。したがって、同一の通常チャンク３００を重複して記憶デバイス２３０に格納しないようにできる。
【００４７】
次に、記憶デバイス１３０に格納されるＢＣブロックコンテンツ４０及びＢＣブロック５００のデータ構造を説明する。
【００４８】
図５は、第１実施形態に係るＢＣブロックを説明する図である。
【００４９】
ＢＣブロック５００は、ＢＣシステム１における取引データ（管理データの一例）５１０の改竄を困難化するためのデータ構造であり、１以上の取引データ５１０と、１つ前に生成されたＢＣブロック５００から算出されたハッシュ（ハッシュ値）５２０を含んだデータである。この構造によると、或るＢＣブロック５００のハッシュ５２０は、次のＢＣブロック５００に含まれるため、ＢＣブロック５００で改竄が生じた場合には、そのＢＣブロック５００から算出されるハッシュ５２０と、後続するＢＣブロック５００中のハッシュ５２０との整合性が取れなくなり、改竄されたことの検知が可能となる。このような、他のＢＣブロック５００のハッシュ５２０をＢＣブロック５００内に保持することにより改竄が困難となるＢＣブロック５００の集合を「チェーン」と呼ぶ。チェーン４においては、全てのＢＣブロック５００はＢＣシステム１を構成する全てのＢＣサーバ１００へ複製されるため、１つのＢＣサーバ１００でＢＣブロック５００の改竄が生じた場合に、他のＢＣサーバ１００からＢＣブロック５００を取得することで復旧が可能である。ＢＣブロック５００には、生成した順序で連続した識別子が付与されており、この識別子により、ＢＣブロック５００の生成順序の判別が可能である。
【００５０】
ＢＣブロック５００は、ＢＣブロック５００を１以上含むファイルとして記憶デバイス１３０に格納される。このファイルがＢＣブロックコンテンツ４０である。重複排除処理では、ＢＣブロックコンテンツ４０を重複排除の単位となるチャンク（ＢＣブロックチャンク４００）へ分割するが、ＢＣブロックチャンク４００への分割時には、ＢＣブロック５００の境界に合わせて分割する。具体的には、ＢＣブロックチャンク４００には、１以上の整数個のＢＣブロック５００が格納されるように分割される。ＢＣブロックコンテンツ４０から生成されるチャンク４００は、ＢＣブロック５００のみから構成されるＢＣブロックチャンク４００と、ＢＣブロック５００以外のデータから構成される通常チャンク３００とが含まれる場合がある。ＢＣブロックコンテンツ４０におけるＢＣブロック５００以外のデータとしては、例えば、ヘッダ、フッタ等に該当するデータがある。
【００５１】
一般的にチャンクのサイズは、数キロバイト以上である。そのため、重複判定処理でチャンク全体の比較を、全てのチャック同士で行うには、大きな処理時間とコストを要する。そこで、本実施形態のストレージ２００では、チャンクのメッセージダイジェストを利用し、処理時間とコストとを削減する。メッセージダイジェストとは、任意の長さのデータ入力に対して、所定の固定長のダイジェストを出力する技術である。ここで、メッセージダイジェストによる出力結果を「ＦＰ(Finger Print)：フィンガプリント)」と呼ぶ。本実施形態では、通常チャンク３００から算出する通常ＦＰと、ＢＣブロックチャンク４００から算出するＦＰ４１０とを使い分けるようにしている。
【００５２】
図６は、第１実施形態に係るＦＰの算出方法を説明する図である。
【００５３】
まず、通常ＦＰ３１０を生成する方法を説明する。本実施形態では、通常ＦＰ３１０は、通常チャンク３００（例えば、所定のデータ長以下）のデータを入力として、強い衝突耐性を持つハッシュ関数（例えば、ＳＨＡ−２、ＳＨＡ−３）により得られた出力としている。このように強い衝突耐性を持つハッシュ関数をメッセージダイジェストに利用することで、異なる内容のチャンクに対して誤って重複判定を下すことを防ぐことができる。
【００５４】
次に、ＦＰ４１０を生成する方法を説明する。上述したように、ＢＣブロックチャンク４００は、１以上のＢＣブロック５００から構成されており、それぞれのＢＣブロック５００のハッシュ５２０は、次の順番のＢＣブロック５００中に格納されている。
【００５５】
そこで、ＢＣブロックチャンク４００を構成する全ＢＣブロック５００のハッシュ５２０を、それぞれのＢＣブロック５００の次のＢＣブロック５００から取得し、取得した複数のハッシュ５２０に基づいて、ＢＣブロックチャンク４００のＦＰ４１０を決定（算出）する。例えば、図６のＢＣブロックチャンク４００Ｂ１のＦＰ４１０Ｂ１を算出する場合には、ＢＣブロック５００−１，５００−２，５００−３のそれぞれの次のＢＣブロック、すなわち、ＢＣブロック５００−２，５００−３，５００−４からハッシュ５２０−２，５２０−３、５２０−４を取得して、これら取得したハッシュ５２０−２，５２０−３、５２０−４に基づいて、ＦＰ４１０Ｂ１を生成する。
【００５６】
取得した複数のハッシュ５２０からＢＣブロックチャンク４００のＦＰ４１０を生成する方法としては、例えば、複数のハッシュ５２０について排他的論理和を取った結果をＦＰ４１０としてもよく、複数のハッシュ５２０を入力として、所定のハッシュ関数により１つのハッシュを算出してＦＰ４１０としてもよく、複数のハッシュの所定の部分（例えば、最初から所定バイトの範囲）の値を繋ぎ合わせた結果をＦＰ４１０としてもよい。
【００５７】
ここで、或るＢＣブロックの次のＢＣブロック５００の格納場所は、ＢＣプログラム１２１により決まっており、例えば、或るＢＣブロック５００が含まれるＢＣブロックコンテンツ４０における記憶領域に連続する次の記憶領域に格納されている。なお、次のＢＣブロック５００が未作成などの理由でハッシュ値が未算出である場合には、そのＢＣブロック５００については、そのＢＣブロック５００を入力として所定のハッシュ関数により、ハッシュを算出して、そのハッシュをＦＰ４１０としてもよい。
【００５８】
なお、通常チャンク３００と、ＢＣブロックチャンク４００とで、チャンクサイズを変更してもよい。例えば，通常チャンク３００を４ＫＢ以下とし、ＢＣブロックチャンク４００を１２８ＫＢ以下として、上限を異なるサイズに設定してもよい。一般的に重複排除処理では、チャンクのサイズが小さいほど重複データが生じやすく、データ削減効果が大きい。例えば、格納済みコンテンツから一部分を変更したコンテンツについて重複判定処理を行う場合に、変更部分を含むチャンクだけが非重複データとして扱われるが、このときにチャンクのサイズが小さいほど非重複データとして扱うデータのサイズは小さくなる。しかし、ＢＣブロックチャンク４００は、ノード間で複製されたＢＣブロック５００の完全一致が期待されるため、一部分が異なるコンテンツが生じづらく、チャンクサイズを大きくしたとしても、データ削減効果が低下しないことが期待される。
【００５９】
次に、本実施形態におけるＦＰＴの構成について説明する。
【００６０】
本実施形態のＦＰＴとしては、通常チャンク３００の重複判定処理に使用する通常ＦＰＴ９００と、ＢＣブロックチャンク４００の重複判定処理に使用するＢＣ用ＦＰＴ８００との２つがある。
【００６１】
図８は、第１実施形態に係る通常ＦＰＴの構成図である。
【００６２】
通常ＦＰＴ９００は、通常チャンク索引表９１０と、１以上の通常コンテナ索引表９２０（９２０ａ、９２０ｃ）とを含む。通常コンテナ索引表９２０は、通常コンテナ３１単位で作成され、記憶デバイス２３０に格納された通常コンテナ３１中の通常チャンク３００（格納済み格納単位データ）を管理するためのテーブルである。通常チャンク索引表９１０は、記憶デバイス２３０に格納された通常チャンク３００の格納先の通常コンテナ３１を管理するためのテーブルである。ここで、通常チャンク索引表９１０及び通常コンテナ索引表９２０は、第２フィンガプリント情報の一例である。
【００６３】
通常コンテナ索引表９２０は、記憶デバイス２３０に格納された通常コンテナ中の通常チャンク３００毎に対応するエントリを格納する。通常コンテナ索引表９２０のエントリは、ＦＰ９２１と、オフセット値９２２と、チャンク長９２３との項目を有する。ＦＰ９２１には、エントリに対応する通常チャンク３００のフィンガプリントが格納される。オフセット値９２２には、エントリに対応するチャンクの通常コンテナ内における先頭位置を示すオフセット値が格納される。チャンク長９２３には、エントリに対応する通常チャンク３００の長さを表す値が格納される。
【００６４】
通常チャンク索引表９１０は、記憶デバイス２３０に格納された通常チャンク３００毎に対応するエントリを格納する。通常チャンク索引表９１０のエントリは、ＦＰ９１１と、コンテナＩＤ９１２との項目を有する。ＦＰ９１１には、エントリに対応する通常チャンク３００の通常ＦＰ３１０が格納される。コンテナＩＤ９１２には、エントリに対応する通常チャンク３００が格納されている通常コンテナ３１を表す識別子（コンテナＩＤ）が格納される。コンテナＩＤ９１２に格納される識別子は、対応するコンテナの通常コンテナ索引表９２０を参照するためのポインタ情報としての機能を持つ。例えば、コンテナＩＤ９１２のコンテナＩＤと対応する通常コンテナ索引表９２０をＵＵＩＤ（Universally Unique Identifier）と呼ばれる共通な識別子によって管理する。
【００６５】
図９は、第１実施形態に係るＢＣ用ＦＰＴの構成図である。
【００６６】
ＢＣ用ＦＰＴ８００は、ＢＣ用チャンク索引表８１０と、ＢＣ用コンテナ索引表８２０とを有する。ＢＣ用コンテナ索引表８２０は、記憶デバイス２３０に格納されたＢＣブロックコンテナ４１単位で作成され、ＢＣブロックコンテナ４１中のＢＣブロックチャンク４００を管理するためのテーブルである。ＢＣ用チャンク索引表８１０は、記憶デバイス２３０に格納されたＢＣブロックチャンク４００の格納先のＢＣブロックコンテナ４１を管理するためのテーブルである。ここで、ＢＣ用チャンク索引表８１０及びＢＣ用コンテナ索引表８２０は、フィンガプリント情報及び第１フィンガプリント情報の一例である。
【００６７】
ＢＣ用コンテナ索引表８２０は、記憶デバイス２３０に格納されたＢＣブロックチャンク４００（格納済み格納単位データ）毎に対応するエントリを格納する。ＢＣ用コンテナ索引表８２０のエントリは、チェーンＩＤ８２１と、先頭ＢＣブロックＩＤ８２２と、末尾ＢＣブロックＩＤ８２３と、ＦＰ８２４と、オフセット値８２５と、チャンク長８２６との項目を有する。チェーンＩＤ８２１には、エントリに対応するＢＣブロックチャンク４００を構成するＢＣブロック５００が属するチェーン４の識別子（チェーンＩＤ）が格納される。先頭ＢＣブロックＩＤ８２２には、エントリに対応するＢＣブロックチャンク４００を構成するＢＣブロック５００のうちの先頭のＢＣブロック５００の識別子（ＢＣブロックＩＤ）が格納される。末尾ＢＣブロックＩＤ８２３には、エントリに対応するＢＣブロックチャンク４００を構成するＢＣブロック５００のうちの末尾のＢＣブロック５００の識別子が格納される。ＢＣブロック５００の識別子としては、ＢＣブロック５００が生成された順序で連続した値を付与するようにしているため、先頭と末尾との識別子によって、ＢＣブロックチャンク４００を構成する全てのＢＣブロック５００の識別子を特定することができる。ＦＰ８２４には、ＢＣブロックチャンク４００に対応するＦＰが格納される。オフセット値８２５には、エントリに対応するＢＣブロックチャンク４００のＢＣブロックコンテナ４１内における先頭位置を示すオフセット値が格納される。チャンク長８２６には、エントリに対応するＢＣブロックチャンク４００の長さを表す値が格納される。
【００６８】
ＢＣ用チャンク索引表８１０は、記憶デバイス２３０に格納されたＢＣブロックチャンク４００（格納済み格納単位データ）毎に対応するエントリを格納する。ＢＣ用チャンク索引表８１０のエントリは、チェーンＩＤ８１１と、先頭ＢＣブロックＩＤ８１２と、末尾ＢＣブロックＩＤ８１３と、ＦＰ８１４と、コンテナＩＤ８１５との項目を有する。チェーンＩＤ８１１には、エントリに対応するＢＣブロックチャンク４００を構成するＢＣブロック５００が属するチェーン４の識別子（チェーンＩＤ）が格納される。先頭ＢＣブロックＩＤ８１２には、エントリに対応するＢＣブロックチャンク４００を構成するＢＣブロック５００のうちの先頭のＢＣブロック５００の識別子（ＢＣブロックＩＤ）が格納される。末尾ＢＣブロックＩＤ８１３には、エントリに対応するＢＣブロックチャンク４００を構成するＢＣブロック５００のうちの末尾のＢＣブロック５００の識別子が格納される。ＦＰ８１４には、ＢＣブロックチャンク４００に対応するＦＰが格納される。コンテナＩＤ８１５には、エントリに対応するＢＣブロックチャンク４００が格納されているＢＣブロックコンテナ４１を表す識別子（コンテナＩＤ）が格納される。
【００６９】
本実施形態のＢＣ用ＦＰＴ８００においては、チェーンＩＤと、先頭ＢＣブロックＩＤと、末尾ＢＣブロックＩＤとを含み、ＢＣブロックチャンク４００を構成するＢＣブロック５００を識別可能としている。ＢＣブロック５００は、生成順序に準じた識別子が付与されるため、先頭ＢＣブロックＩＤと末尾ＢＣブロックＩＤを使い、構成するＢＣブロック５００の識別子の連続するＢＣブロックチャンク４００とその管理情報とをまとめて格納することで、局所性による記憶デバイス２３０へのアクセス頻度の低減効果が見込まれる。例えば、ＢＣ用チャンク索引表８１０のエントリを、チェーンＩＤ８１１と先頭ＢＣブロックＩＤ８１２と末尾ＢＣブロックＩＤ８１３との値でソートして格納することで、連続したＢＣブロック５００に関するＢＣ用チャンク索引表８１０の参照を、連続した領域への１回のアクセスで済ませることができる。なお、ＢＣ用ＦＰＴ８００として通常ＦＰＴ９００と同様の構成をとり、ＢＣ用ＦＰＴ８００と通常ＦＰＴ９００とを結合した単一のＦＰＴとしてもよい。
【００７０】
次に、リストア処理実行時に使用するコンテンツ索引表６００と、ＢＣブロックコンテンツ索引表７００について説明する。
【００７１】
図７は、第１実施形態に係るコンテンツ索引表の構成図である。
【００７２】
コンテンツ索引表６００（６００Ａ、６００Ｂ）は、コンテンツ毎に作成されるテーブルであり、コンテンツに含まれるチャンクを管理するテーブルである。コンテンツ索引表６００は、チャンク毎に対応するエントリを格納する。
【００７３】
コンテンツ索引表６００のエントリは、チャンクＩＤ６０１と、ＦＰ６０２と、コンテナＩＤ６０３と、オフセット６０４と、チャンク長６０５と、ＢＣブロックチャンク判定６０６との項目を有する。
【００７４】
チャンクＩＤ６０１には、エントリに対応するチャンクの識別子（チャンクＩＤ）が格納される。ＦＰ６０２には、エントリに対応するチャンクのＦＰが格納される。コンテナＩＤ６０３には、エントリに対応するチャンクが含まれるコンテナの識別子が格納される。オフセット６０４には、エントリに対応するチャンクのコンテンツ内での位置（オフセット）を示す情報（オフセット値）が格納される。チャンク長６０５には、エントリに対応するチャンクの長さを表す情報が格納される。ＢＣブロックチャンク判定フラグ６０６には、エントリに対応するチャンクがＢＣブロックチャンク４００であるか、通常チャンク３００であるかを示す情報（チャンク判定フラグ）が格納される。ＢＣブロックチャンク判定フラグ６０６には、エントリに対応するチャンクがＢＣブロックチャンク４００であれば、「True」が格納され、通常チャンク３００あれば、「False」が格納される。
【００７５】
上記実施形態では、通常コンテンツ３０とＢＣブロックコンテンツ４０とを、同一フォーマットのコンテンツ索引表６００により管理するようにしているが、通常コンテンツ３０と、ＢＣブロックコンテンツ４０とで異なるフォーマットのコンテンツ索引表により管理するようにしてもよい。例えば、ＢＣブロックコンテンツ４０のコンテンツ索引表として、上記したコンテンツ索引表６００のエントリに、ＢＣブロックコンテンツ４０を構成するＢＣブロックチャンク４００に含まれるＢＣブロック５００の識別子を格納する項目を追加してもよい。
【００７６】
次に、ＢＣブロックコンテンツ４０のＢＣサーバ１００における格納場所について管理するためのＢＣブロック格納先設定画面１０００について説明する。
【００７７】
図１０は、第１実施形態に係るＢＣブロック格納先設定画面の構成図である。
【００７８】
ＢＣブロック格納先設定画面１０００は、例えば、ＢＣシステム１のシステム設定時に、管理端末１２により管理端末１２の出力装置に表示される。ＢＣブロック格納先設定画面１０００は、ＢＣ基盤ソフトウェア１００１と、バージョン１００２と、チェーンＩＤ１００３と、非重複時アラート１００４と、サーバＩＤ１００５と、格納ディレクトリ１００６と、ファイル名１００７との設定項目を含む。ＢＣ基盤ソフトウェア１００１は、ＢＣシステム１で使用されるＢＣプログラムの種類を設定するための項目である。バージョン１００２は、ＢＣシステム１で使用されるＢＣプログラムのバージョンを設定するための項目である。チェーンＩＤ１００３は、格納先を設定するＢＣブロックコンテンツ４０に含まれるＢＣブロック５００が属するチェーン４の識別子を設定するための項目である。非重複時アラート１００４は、非重複時のアラートを有効とするか否かを設定するための項目である。サーバＩＤ１００５、格納ディレクトリ１００６、ファイル名１００７は、ＢＣブロックコンテンツ４０の格納先を設定する項目である。ここで、サーバＩＤ１００５、格納ディレクトリ１００６、及びファイル名１００７に設定された値が、データ集合格納先情報の一例である。サーバＩＤ１００５は、格納先のＢＣサーバ１００の識別子を設定する項目であり、格納ディレクトリ１００６は、格納先のディレクトリを設定する項目であり、ファイル名１００７は、格納先のファイル名を設定する項目である。格納ディレクトリ１００６や、ファイル名１００７には、正規表現による記述を設定してもよい。図１０のファイル名１００７の設定例では、「blockfile_」に６桁の数字（正規表現：［０−９］｛６｝）を付与したファイル名である設定となっている。なお、ＢＣブロックコンテンツ４０の格納先を、ディレクトリやファイル名ではなく、ストレージ２００が提供する格納先の識別子、例えば、ストレージ２００がオブジェクトストレージであれば、バケットの識別子で設定してもよい。
【００７９】
次に、本実施形態に係るＢＣシステム１の処理動作について説明する。
【００８０】
まず、ＢＣシステム１におけるバックアップ処理について説明する。
【００８１】
図１１は、第１実施形態に係るバックアップ処理のフローチャートである。図１１は、１つのコンテンツに対するバックアップ処理を示している。
【００８２】
バックアップ処理は、例えば、ＢＣサーバ１００が管理端末１２からのバックアップ処理開始指示を受信したことや、ＢＣサーバ１００が記憶デバイス１３０の使用量が所定の閾値を超過したことを検知したことを契機として開始される。
【００８３】
ステップＳ１０１では、ＢＣサーバ１００のバックアッププログラム１２２（厳密には、バックアッププログラム１２２を実行するプロセッサ１１０）は、バックアップ対象のコンテンツ（対象コンテンツ）の識別子をストレージ２００から取得する。ここで、対象コンテンツの識別子は、複数のＢＣサーバ１００から対象コンテンツが格納されるストレージ２００内で固有の値を付ける必要があり、ストレージ２００内にて管理するため、ＢＣサーバ１００は、ストレージ２００へ要求を送り、対象コンテンツの識別子を取得する必要がある。
【００８４】
次に、ステップＳ１０２では、ＢＣサーバ１００のバックアッププログラム１２２は、対象コンテンツを複数のチャンクに分割し、それぞれのチャンクからのＦＰの導出と、各チャンクの管理情報の生成を行うためのチャンク分割／チャンク管理情報作成処理（図１２参照）を実行する。管理情報には、チャンクが属するコンテンツの識別子、チャンクのＦＰ、コンテンツ内でのチャンクの位置、チャンク長、ＢＣブロックチャンク４００であるか否かを示す判定フラグ、さらに、ＢＣブロックチャンク４００の場合には、チェーンＩＤ、先頭ＢＣブロックＩＤ、末尾ＢＣブロックＩＤなどを含む。なお、ステップＳ１０２での対象コンテンツのチャンク分割数は、バックアッププログラム１２２中で管理される。ここで、図１１及び図１１の説明においては、チャンク分割数をnとする。
【００８５】
次に、ステップＳ１０３では、ＢＣサーバ１００のバックアッププログラム１２２は、以下のループ処理（Ｓ１０４〜Ｓ１０９）の実行回数を格納するカウンタｉの値を０に初期化する。カウンタｉの値は、ループ処理の実施回数とともにループで処理対象とするチャンクを表し、カウンタｉ＝ｋとなっているループ処理では、コンテンツの先頭からｋ＋１番目のチャンクを処理対象としていることを表す。
【００８６】
次に、ステップＳ１０４では、ＢＣサーバ１００のバックアッププログラム１２２は、ループ処理での処理対象のチャンク（処理対象チャンク）がＢＣブロックチャンク４００であるか否かを判定する。例えば、チャンク分割／チャンク管理情報作成処理（Ｓ１０２）で作成したチャンクの管理情報内の、ＢＣブロックチャンク４００であるか否かを示す判定フラグに基づいて判定する。
【００８７】
この判定の結果、処理対象チャンクがＢＣブロックチャンク４００である場合（Ｓ１０４：Ｙｅｓ）には、ステップＳ１０５へ処理を移行する一方、処理対象チャンクがＢＣブロックチャンク４００でない場合（Ｓ１０４：Ｎｏ）には、処理をステップＳ１０６へ移行する。
【００８８】
ステップＳ１０５では、ＢＣサーバ１００のバックアッププログラム１２２は、ステップＳ１０２で作成したチャンクの管理情報に基づいて、ＢＣ用コンテナ索引表８２０を検索し、一致するエントリが存在するか否かを判定する。具体的には、バックアッププログラム１２２は、ＢＣ用コンテナ索引表８２０を参照し、チャンクの管理情報と、チェーンＩＤ８２１、先頭ＢＣブロックＩＤ８２２、末尾ＢＣブロックＩＤ８２３、ＦＰ８２４、及びチャンク長８２６の値が一致するエントリが存在するか否かを判定する。
【００８９】
この結果、管理情報と値が一致するエントリが存在する場合（ステップＳ１０５：Ｙｅｓ）には、重複するデータがあることを示しているので、ＢＣサーバ１００のバックアッププログラム１２２は、一致したエントリの情報を重複するデータの情報としてストレージ２００に転送し、処理をステップＳ１０９へ移行する。一方、管理情報と値が一致するエントリが存在しない場合（ステップＳ１０５：Ｎｏ）には、重複するデータがないことを示しているので、処理をステップＳ１０７に移行する。なお、本実施形態では、ＢＣ用コンテナ索引表８２０に、ＢＣブロックチャンク４００の固有の情報であるチェーンＩＤ８２１、先頭ＢＣブロックＩＤ８２２、及び末尾ＢＣブロックＩＤ８２３を含ませておき、これをもとに処理対象チャンクと対応するエントリを探索するようにしているが、ＢＣ用コンテナ索引表にＢＣブロックチャンク４００固有の情報を含まないようにしている場合には、後述するステップＳ１０６と同様に、ＦＰとチャンク長とが一致することをＦＰ８２４とチャンク長８２６との値から確認することにより、重複データがあるか否かを判定するようにしてもよい。
【００９０】
ステップＳ１０６では、ＢＣサーバ１００のバックアッププログラム１２２は、ステップＳ１０２で作成したチャンクの管理情報に基づいて、通常コンテナ索引表９２０を検索し、一致するエントリが存在するか否かを判定する。具体的には、バックアッププログラム１２２は、通常コンテナ索引表９２０を参照し、チャンクの管理情報と、ＦＰ９２１及びチャンク長９２３の値が一致するエントリが存在するか否かを判定する。
【００９１】
この結果、管理情報と値が一致するエントリが存在する場合（ステップＳ１０６：Ｙｅｓ）には、重複するデータがあることを示しているので、ＢＣサーバ１００のバックアッププログラム１２２は、処理をステップＳ１０９へ移行する一方、管理情報と値が一致するエントリが存在しない場合（ステップＳ１０６：Ｎｏ）には、重複するデータがないことを示しているので、処理をステップＳ１０７に移行する。
【００９２】
ステップＳ１０７では、ＢＣサーバ１００のバックアッププログラム１２２は、処理対象チャンクの管理情報をストレージ２００へ転送する。
【００９３】
次に、ステップＳ１０８では、ステップＳ１０７において処理対象チャンクの管理情報が転送されたストレージ２００のバックアッププログラム２２１は、処理対象チャンクについての重複排除を行うストレージ側重複排除処理（図１３参照）を実行する。ステップＳ１０８によると、ストレージ２００には、処理対象チャンクの重複データの格納先に関する情報、または新たに記憶デバイス２３０へ書き込まれたライトデータの格納先に関する情報が生成される。ステップＳ１０８の完了後に、バックアッププログラム２２１は、処理をステップＳ１０９に移行する。
【００９４】
ステップＳ１０９では、バックアッププログラム２２１は、処理対象チャンクの格納先に関する情報をコンテンツ索引表６００に登録する。具体的には、ストレージ２００のバックアッププログラム２２１は、処理対象チャンクの管理情報から、コンテンツ索引表６００のチャンクＩＤ６０１、ＦＰ６０２、オフセット６０４、チャンク長６０５に設定する値を取得し、また、重複データまたはライトデータの格納先情報よりコンテナＩＤ６０３に設定する値を取得して、これらの値を含む新たなエントリをコンテンツ索引表６００に登録する。ストレージ２００のバックアッププログラム２２１は、ステップＳ１０９の完了後、処理をステップＳ１１０へ移行する。
【００９５】
ステップＳ１１０では、ＢＣサーバ１００のバックアッププログラム１２２が処理対象コンテンツ内の全てのチャンクに対する処理を完了したか確認する。具体的には、カウンタｉの値がｎ−１未満の場合（Ｓ１１０：Ｙｅｓ）は、未処理のチャンクがあることを意味しているので、ＢＣサーバ１００のバックアッププログラム１２２は、バックアップ処理を継続するために、処理をステップＳ１１１へ移行する一方、カウンタｉがｎ−１以上である場合（Ｓ１１０：Ｎｏ）には、全てのチャンクの処理を完了したことを意味しているので、ＢＣサーバ１００のバックアッププログラム１２２は、処理をステップＳ１１２へ移行する。
【００９６】
ステップＳ１１１では、ＢＣサーバ１００のバックアッププログラム１２２は、処理対象チャンクを処理対象コンテンツ内の次のチャンクへ変更し、処理をステップＳ１０４に移行する。具体的には、バックアッププログラム１２２は、カウンタｉの値に１を加算し、処理対象チャンクを変更する。例えば、カウンタｉ＝ｋである場合には、ｉ＝ｉ＋１に更新することにより、処理対象チャンクを処理対象コンテンツの先頭からｋ＋２番目のチャンクに変更する。
【００９７】
ステップＳ１１２では、ＢＣサーバ１００のバックアッププログラム１２２は、リストア用のスタブファイルを記憶デバイス１３０のファイルに対応する格納位置に格納する。スタブファイルは、リストア処理実行時に、リストアするコンテンツに対応するコンテンツ索引表６００を特定するために必要なコンテンツ識別子などを含む。なお、ステップＳ１１２は、リストア時に必要なコンテンツ識別子などの情報を記憶デバイス１３０へ格納して保持することが目的であり、情報の格納形態はスタブファイルに限定されず、例えばコンテンツ識別子の管理テーブルに格納するようにしてもよい。
【００９８】
ステップＳ１１２の完了後、ＢＣサーバ１００のバックアッププログラム１２２は、バックアップ処理を終了する。
【００９９】
次に、チャンク分割／チャンク管理情報作成処理（図１１のステップＳ１０２）について詳細に説明する。
【０１００】
図１２は、第１実施形態に係るチャンク分割／チャンク管理情報作成処理のフローチャートである。なお、図１２は、１コンテンツに対する処理のフローチャートを示している。
【０１０１】
ステップＳ２０１では、ＢＣサーバ１００のバックアッププログラム１２２は、処理対象コンテンツがＢＣブロックコンテンツ４０であるか否かを判定する。具体的には、バックアッププログラム１２２は、まず、ＢＣブロック格納先設定画面１０００での設定に基づき、処理対象コンテンツがＢＣブロックコンテンツ４０の候補であるかを判断する。例えば、バックアッププログラム１２２は、サーバＩＤ１００５に指定されたサーバＩＤのＢＣサーバ１００において格納ディレクトリ１００６に指定されたディレクトリに格納され、ファイル名１００７に指定されたルールに従うファイル名のコンテンツを、ＢＣブロックコンテンツ４０の候補とする。次に、バックアッププログラム１２２は、コンテンツがＢＣブロックコンテンツ４０であるかを、ＢＣブロック格納先設定画面１０００に基づき、コンテンツのデータを確認して判定する。例えば、コンテンツに含まれる各ＢＣブロック５００について、ＢＣブロック５００の先頭に含まれる固定値の有無や、ＢＣブロック５００に付与される電子証明の正しさの検証により、ＢＣブロック５００が正しいフォーマットとなっていることを確認することにより判定する。コンテンツがＢＣブロックコンテンツ４０であると判定された場合（Ｓ２０１：Ｙｅｓ）には、バックアッププログラム１２２は、処理をステップＳ２０２に移行する一方、コンテンツがＢＣブロックコンテンツでない、すなわち、通常コンテンツ３０であると判定した場合（Ｓ２０１：Ｎｏ）には、処理をステップＳ２０３に移行する。
【０１０２】
ステップＳ２０２では、ＢＣサーバ１００のバックアッププログラム１２２は、ＢＣブロックコンテンツ４０をＢＣブロックチャンク４００に分割する。バックアッププログラム１２２は、ＢＣブロックコンテンツ４０の分割時には、ＢＣブロックコンテンツ４０に含まれるＢＣブロック５００を認識し、ＢＣブロック５００の境界に合わせてＢＣブロックチャンク４００に分割する、すなわち、ＢＣブロックチャンク４００に１以上の整数のＢＣブロック４００が含まれるように分割する。例えば、あるサイズ以内のチャンクサイズとなる範囲で最大数のＢＣブロック５００を含むようにＢＣブロックチャンク４００を決定する。なお、ＢＣブロックコンテンツ４０がＢＣブロック５００以外のヘッダやメタデータを含む場合には、例えば、ＢＣブロック５００以外のデータを通常チャンク３００となるように分割してもよい。ＢＣブロックコンテンツ４０の分割後、バックアッププログラム１２２は、各チャンクがＢＣブロックチャンク４００であるか、通常チャンク３００であるかを示す情報を生成して保持する。
【０１０３】
ステップＳ２０３では、ＢＣサーバ１００のバックアッププログラム１２２は、通常コンテンツ３０を通常チャンク３００に分割する。バックアッププログラム１２２は、例えば、通常コンテンツ３０を、設定されたサイズ毎の通常チャンク３００に分割する。
【０１０４】
ここで、ステップＳ２０２又はステップＳ２０３でのコンテンツのチャンクへの分割数は、バックアッププログラム１２２中で管理される。なお、図１２及び図１２の説明においては、チャンクの分割数をｎとする。
【０１０５】
ステップＳ２０４では、ＢＣサーバ１００のバックアッププログラム１２２は、以下のループ処理（Ｓ２０５〜Ｓ２１０）の実行回数を格納するカウンタｉの値を０に初期化する。カウンタｉの値は、ループ処理の実施回数とともにループで処理対象とするチャンクを表し、カウンタｉ＝ｋとなっているループ処理では、コンテンツの先頭からｋ＋１番目のチャンクを処理対象としていることを表す。
【０１０６】
次に、ステップＳ２０５では、ＢＣサーバ１００のバックアッププログラム１２２は、ループ処理での処理対象のチャンク（処理対象チャンク）がＢＣブロックチャンク４００であるか否かを判定する。例えば、ステップＳ２０２で作成した情報（ＢＣブロックチャンクであることを示す情報）に基づいて判定する。
【０１０７】
この判定の結果、処理対象チャンクがＢＣブロックチャンク４００である場合（Ｓ２０５：Ｙｅｓ）には、バックアッププログラム１２２は、ステップＳ２０６へ処理を移行する一方、処理対象チャンクがＢＣブロックチャンク４００でない場合（Ｓ２０５：Ｎｏ）には、処理をステップＳ２０７へ移行する。
【０１０８】
ステップＳ２０６では、ＢＣサーバ１００のバックアッププログラム１２２は、処理対象チャンクのＦＰを算出する。ステップＳ２０６における処理対象チャンクは、ＢＣブロックチャンク４００に該当するため、バックアッププログラム１２２は、例えば、図６に示したＦＰ４１０の算出方法によりＦＰを算出する。具体的には、バックアッププログラム１２２は、まず、ＢＣブロックチャンク４００を構成するＢＣブロック５００単位に切り分ける。次に、バックアッププログラム１２２は、切り分けた各ＢＣブロック５００の次のＢＣブロック５００から、各ＢＣブロック５００に対応するハッシュ５２０を取得する。なお、ＢＣブロック５００がＢＣブロックコンテンツ４０の終端に位置するため、次のＢＣブロック５００の取得が困難である場合や、次のＢＣブロック５００の作成前に処理を実施している場合には、該当するＢＣブロック５００のハッシュ５２０を計算により算出してもよい。次に、バックアッププログラム１２２は、各ＢＣブロック５００に対応するハッシュ５２０の排他的論理をとり、その結果を処理対象チャンクのＦＰとする。
【０１０９】
ステップＳ２０７では、ＢＣサーバ１００のバックアッププログラム１２２は、処理対象チャンクのＦＰ（通常ＦＰ）を算出する。ステップＳ２０７における処理対象チャンクは、通常チャンク３００に該当するため、バックアッププログラム１２２は、例えば、図６に示した通常ＦＰ３１０の算出方法により通常ＦＰを算出する。具体的には、バックアッププログラム１２２は、処理対象チャンク（通常チャンク３００）の全体をハッシュ関数の入力として、ハッシュ関数による出力値を通常ＦＰとする。
【０１１０】
次に、ステップＳ２０８では、ＢＣサーバ１００のバックアッププログラム１２２は、処理対象チャンクの管理情報を生成する。管理情報は、処理対象チャンクが属するコンテンツの識別子、処理対象チャンクのＦＰ、コンテンツ内での処理対象チャンクの位置、チャンク長、ＢＣブロックチャンク４００であるか否かを示す情報、更に、処理対象チャンクがＢＣブロックチャンク４００である場合には、チェーンＩＤ、先頭ＢＣブロックＩＤ、末尾ＢＣブロックＩＤ等を含む。
【０１１１】
次に、ステップＳ２０９では、ＢＣサーバ１００のバックアッププログラム１２２は、処理対象コンテンツ内の全てのチャンクに対する処理を完了したか確認する。具体的には、カウンタｉの値がｎ−１未満の場合（Ｓ２０９：Ｙｅｓ）は、未処理のチャンクがあることを意味しているので、ＢＣサーバ１００のバックアッププログラム１２２は、バックアップ処理を継続するために、処理をステップＳ２１０へ移行する。一方、カウンタｉがｎ−１以上である場合（Ｓ２０９：Ｎｏ）には、全てのチャンクの処理を完了したことを意味しているので、ＢＣサーバ１００のバックアッププログラム１２２は、チャンク分割及びチャンク管理情報生成処理を終了する。
【０１１２】
ステップＳ２１０では、ＢＣサーバ１００のバックアッププログラム１２２は、処理対象チャンクを処理対象コンテンツ内の次のチャンクへ変更し、処理をステップＳ２０５に移行する。具体的には、バックアッププログラム１２２は、カウンタｉの値に１を加算し、処理対象チャンクを変更する。例えば、カウンタｉ＝ｋである場合には、ｉ＝ｉ＋１に更新することにより、処理対象チャンクを処理対象コンテンツの先頭からｋ＋２番目のチャンクに変更する。
【０１１３】
次に、ストレージ側重複排除処理（図１１のステップＳ１０８）について詳細に説明する。
【０１１４】
図１３は、第１実施形態に係るストレージ側重複排除処理のフローチャートである。なお、図１３は、１チャンクに対する処理のフローチャートを示している。
【０１１５】
ステップＳ３０１では、ストレージ２００のバックアッププログラム２２１は、処理対象チャンクがＢＣブロックチャンク４００であるか否かを判定する。具体的には、バックアッププログラム２２１は、例えば、ステップＳ１０７でＢＣサーバ１００からストレージ２００が受信したチャンクの管理情報内のＢＣブロックチャンク４００であるか否かを示す判定フラグに基づき判定する。判定の結果、処理対象チャンクがＢＣブロックチャンク４００である場合（Ｓ３０１：Ｙｅｓ）には、バックアッププログラム２２１は、処理をステップＳ３０２に移行する一方、コンテンツがＢＣブロックコンテンツでない、すなわち、通常コンテンツ３０であると判定した場合（Ｓ３０１：Ｎｏ）には、処理をステップＳ３０３に移行する。
【０１１６】
ステップＳ３０２では、ストレージ２００のバックアッププログラム２２１は、ＢＣ用ＦＰＴ８００を検索し、処理対象チャンクと重複するデータ（重複データ）が存在するか否かを判定する。具体的には、バックアッププログラム２２１は、まず、ＢＣサーバ１００から受信したチャンクの管理情報に基づき、ＢＣ用チャンク索引表８１０を参照し、チェーンＩＤ８１１、先頭ＢＣブロックＩＤ８１２、末尾ＢＣブロックＩＤ８１３、ＦＰ８１４の値が管理情報と一致するエントリを検索する。一致するエントリが見つかった場合に、バックアッププログラム２２１は、このエントリのコンテナＩＤ８１５に格納された値に対応するＢＣ用コンテナ索引表８２０を読み出す。次に、バックアッププログラム２２１は、読み出したＢＣ用コンテナ索引表８２０を参照し、チェーンＩＤ８２１、先頭ＢＣブロックＩＤ８２２、末尾ＢＣブロックＩＤ８２３、ＦＰ８２４、チャンク長８２６の値が処理対象チャンクの管理情報と一致するエントリを検索する。バックアッププログラム２２１は、一致するエントリが見つかった場合には、処理対象チャンクに対する重複データが存在すると判定し、一致するエントリが見つからなかった場合には、処理対象チャンクに対する重複データが存在しないと判定する。
【０１１７】
ストレージ２００のバックアッププログラム２２１は、処理対象チャンクに対する重複データが存在すると判定した場合（Ｓ３０２：Ｙｅｓ）には、一致したエントリを重複データの情報として自身が保持し、ステップＳ３０４に処理を移行する一方、処理対象チャンクに対する重複データが存在しないと判定した場合（Ｓ３０２：Ｎｏ）、すなわち、ＢＣ用チャンク索引表８１０の検索またはＢＣ用コンテナ索引表８２０の検索において、一致するエントリが見つからなかった場合には、ステップＳ３０５に処理を移行する。
【０１１８】
なお、本実施形態では、ＢＣ用チャンク索引表８１０とＢＣ用コンテナ索引表８２０とにＢＣブロックチャンク４００固有の情報であるチェーンＩＤ８２１、先頭ＢＣブロックＩＤ８２２、末尾ＢＣブロックＩＤ８２３を含むようにし、処理対象チャンクと情報の一致するエントリを検索して、重複データが存在するか否かを判定するようにしていたが、ＢＣ用チャンク索引表とＢＣ用コンテナ索引表とにＢＣブロックチャンク４００の固有の情報を含まないようにしてもよく、この場合には、ＢＣ用ＦＰＴからチャンク長が一致するエントリを検索し、一致するエントリが見つかった場合に重複データが存在すると判定するようにしてもよい。
【０１１９】
ステップＳ３０３では、ストレージ２００のバックアッププログラム２２１は、通常コンテナ索引表９２０を検索し、処理対象チャンクと重複するデータ（重複データ）が存在するか否かを判定する。具体的には、バックアッププログラム２２１は、まず、ＢＣサーバ１００から受信したチャンクの管理情報に基づき、通常チャンク索引表９１０を参照し、ＦＰ９１１の値が管理情報と一致するエントリを検索する。一致するエントリが見つかった場合には、バックアッププログラム２２１は、このエントリのコンテナＩＤ９１２に格納された値に対応する通常コンテナ索引表９２０を読み出す。次に、バックアッププログラム２２１は、読み出した通常コンテナ索引表９２０を参照し、処理対象チャンクの管理情報と、ＦＰ９２１及びチャンク長９２３の値が一致するエントリを検索する。一致するエントリが見つかった場合には、バックアッププログラム２２１は、処理対象チャンクに対する重複データが存在すると判定し、一致するエントリが見つからなかった場合には，重複データが存在しないと判定する。
【０１２０】
ストレージ２００のバックアッププログラム２２１は、この判定の結果、処理対象チャンクに対する重複データが存在すると判定した場合（Ｓ３０３：Ｙｅｓ）には、一致したエントリを重複データの情報として自身が保持し、ステップＳ３０４に処理を移行する一方、処理対象チャンクに対する重複データが存在しないと判定した場合（Ｓ３０３：Ｎｏ）、すなわち、通常チャンク索引表９１０の検索または通常コンテナ索引表９２０の検索において、一致するエントリが見つからなかった場合には、ステップＳ３０７に処理を移行する。
【０１２１】
ステップＳ３０４では、ストレージ２００のバックアッププログラム２２１は、ステップＳ３０２で一致するとされたエントリが含まれるＢＣ用コンテナ索引表８２０、又はステップＳ３０３で一致するとされたエントリが含まれる通常コンテナ索引表９２０を、ＢＣサーバ１００へ転送し、ストレージ側重複排除処理を終了する。ここで、同一のコンテナには関連性の高いデータが含まれるため、連続して重複排除処理されるチャンクが同じコンテナ内の含まれる可能性が高い。
【０１２２】
このため、一致するエントリが含まれるＢＣ用コンテナ索引表８２０または通常コンテナ索引表９２０が転送されたＢＣサーバ１００においては、転送されたＢＣ用コンテナ索引表８２０または通常コンテナ索引表９２０を用いて、バックアップ処理におけるステップＳ１０５、ステップＳ１０６の処理を実行することにより、重複データが存在することを高精度に判定できる。これにより、ＢＣサーバ１００からストレージ２００への重複データが存在するチャンクの転送を低減することができる。
【０１２３】
なお、バックアッププログラム２２１は、一致するエントリが含まれたＢＣ用コンテナ索引表８２０または通常コンテナ索引表９２０と関連性高いＢＣ用コンテナ索引表８２０または通常コンテナ索引表９２０を読み出して、ＢＣサーバ１００へ転送するようにしてもよい。例えば、ステップＳ３０４において、処理対象チャンクがＢＣブロックチャンク４００である場合に、このＢＣブロックチャンク４００に含まれるＢＣブロック５００の識別子以降の連続する識別子のＢＣブロック５００に関する重複判定用の情報を含んだＢＣ用コンテナ索引表８２０をＢＣサーバ１００に転送するようにしてもよく、この場合にも、同様な効果が期待できる。また、バックアッププログラム２２１は、関連性の強いＢＣ用コンテナ索引表８２０をストレージ２００の記憶デバイス２３０からメモリ２２０に読み出しておくようにしてもよく、このようにすると、以降のＢＣブロックチャンク４００の重複排除処理において、記憶デバイス２３０からメモリ２２０に対して、ＢＣ用コンテナ索引表８２０を読み出さずに済むので応答性能の向上が期待できる。
【０１２４】
ステップＳ３０５では、バックアッププログラム２２１は、ＢＣブロックチャンク４００の非重複時のアラートが有効であるか、又は無効であるかを確認し、また、処理対象のＢＣブロックチャンク４００と同一のＢＣブロック５００を含むＢＣブロックチャンク４００のエントリがＢＣ用ＦＰＴ８００に存在するか否かを確認する。ここで、ＢＣブロックチャンク４００の非重複時のアラートの設定が有効であるか、又は無効であるかについては、ブロック格納先設定画面１０００の非重複時アラート設定１００４に設定された値に基づいて確認することができる。また、処理対象のＢＣブロックチャンク４００と同一のＢＣブロック５００を含むＢＣブロックチャンク４００のエントリが存在するか否かについては、ＢＣ用チャンク索引表８１０内に、チェーンＩＤ８１１、先頭ＢＣブロックＩＤ８１２、及び末尾ＢＣブロックＩＤ８１３の値が、処理対象チャンクの情報と一致するエントリが存在するか否かにより判断することができる。一致するエントリが存在する場合には、同一のＢＣブロック５００を含むＢＣブロックチャンク４００がＢＣ用ＦＰＴ８００に登録済みであると判断できる。
【０１２５】
アラートの設定が有効であり、かつ処理対象のＢＣブロックチャンク４００と同一のＢＣブロック５００を含むＢＣブロックチャンク４００のエントリが存在する場合（Ｓ３０５：Ｙｅｓ）には、バックアッププログラム２２１は、処理をステップＳ３０６に移行する一方、それ以外の場合（Ｓ３０５：Ｎｏ）には、処理をステップＳ３０７に移行する。
【０１２６】
ステップＳ３０６では、ストレージ２００のバックアッププログラム２２１は、同一のチェーン４の同一のＢＣブロック５００を含む、複数のＢＣサーバ１００で複製されているＢＣブロックチャンク４００のデータが不一致であるという状況が見込まれ、データ改竄などＢＣシステム１で問題が発生した可能性があるため、アラートを上げる（通知する）。ここで、アラートの通知先としては、例えば、ＢＣサーバ１００や管理端末１２である。
【０１２７】
ステップＳ３０７では、ストレージ２００のバックアッププログラム２２１は、処理対象チャンクのデータを記憶デバイス２３０へ書き込む。処理対象チャンクのデータの記憶デバイス２３０への書き込みは、例えば、空き領域のあるコンテナへの追記や、新規コンテナを作成し、その先頭から書きこむなどの方法で行う。バックアッププログラム２２１は、ライトしたデータ（ライトデータ）の格納先情報として、格納先のコンテナＩＤやコンテナのオフセットを保持する。
【０１２８】
次に、ステップＳ３０８では、ストレージ２００のバックアッププログラム２２１は、ステップＳ３０７におけるライトデータの情報をＦＰＴ（８００，９００）に追加する。
【０１２９】
具体的には、バックアッププログラム２２１は、まず、コンテナ索引表（８２０，９２０）にエントリを追加する。バックアッププログラム２２１は、処理対象チャンクがＢＣブロックチャンク４００の場合には、ＢＣ用コンテナ索引表８２０にエントリを追加し、処理対象チャンクが通常チャンク３００の場合には、通常コンテナ索引表９２０にエントリを追加する。次に、ストレージ２００のバックアッププログラム２２１は、チャンク索引表（８１０，９１０）にエントリを追加する。ストレージ２００のバックアッププログラム２２１は、処理対象チャンクがＢＣブロックチャンク４００の場合には、ＢＣ用チャンク索引表８１０にエントリを追加し、処理対象チャンクが通常チャンク３００の場合には、通常チャンク索引表９１０にエントリを追加する。コンテナ索引表（８２０，９２０）とチャンク索引表（８１０，９１０）に追加するエントリの情報は、ＢＣサーバ１００から受信した処理対象チャンクの管理情報と、ステップＳ３０７で作成したライトデータの格納先情報とに基づいて決定する。ステップＳ３０８の完了後に、ストレージ２００のバックアッププログラム２２１は、ストレージ側重複排除処理を終了する。
【０１３０】
以上説明したように、本実施形態に係るバックアップ処理によると、ＢＣブロックチャンク４００の重複排除処理におけるハッシュの計算が不要となる又は低減されるため、バックアップ処理の処理負荷を軽減でき、処理性能が向上する。上記実施形態では、バックアップ処理における重複排除処理について説明していたが、本発明はこれに限られず、ＢＣサーバ１００上のコンテンツのデータを重複排除してストレージ２００に書き込むケースであれば、本処理を適用することができる。例えば、ティアリング時のコンテンツデータをＢＣサーバ１００からストレージ２００へ移動させるケースや、ＢＣサーバ１００からのライトリクエストによるコンテンツデータをストレージ２００へ書き込みケースにも適用することができる。
【０１３１】
次に、本実施形態に係るＢＣシステム１におけるリストア処理を説明する。
【０１３２】
図１４は、第１実施形態に係るリストア処理のフローチャートである。なお、図１４のリストア処理は、１つのコンテンツに対するＢＣシステム１の処理のフローチャートである。
【０１３３】
リストア処理は、例えば管理端末１２からのリストア処理開始指示や、ＢＣサーバ１００でのバックアップしたコンテンツの読み出し要求を契機として開始される。
【０１３４】
ステップＳ４０１では、ＢＣサーバ１００のリストアプログラム１２３が、リストア対象のコンテンツの識別子を取得し、コンテンツ識別子を含んだコンテンツのリストア要求をストレージ２００に通知する。リストアプログラム１２３は、例えば、バックアップ処理におけるステップＳ１１２で生成したスタブファイルからコンテンツの識別子を取得する。
【０１３５】
次に、ステップＳ４０２では、ストレージ２００のリストアプログラム２２２がＢＣサーバ１００から受領したリストア要求に含まれるコンテンツ識別子に対応するコンテンツ索引表６００を読み出す。そして、リストアプログラム２２２は、コンテンツ索引表６００のエントリに記載されるリストア処理対象のコンテンツを構成するチャンクの管理情報を取得して保持する。
【０１３６】
次に、ステップＳ４０３では、ＢＣサーバ１００のリストアプログラム２２２は、以下のループ処理（Ｓ４０４〜Ｓ４０７）の実行回数を格納するカウンタｉの値を０に初期化する。カウンタｉの値は、ループ処理の実施回数とともにループで処理対象とするチャンクを表し、カウンタｉ＝ｋとなっているループ処理では、コンテンツの先頭からｋ＋１番目のチャンクを処理対象としていることを表す。
【０１３７】
次に、ステップＳ４０４では、ストレージ２００のリストアプログラム２２２は、コンテナ索引表（８２０，９２０）から、処理対象のチャンク（処理対象チャンク）の情報を取得する。まず、リストアプログラム２２２は、処理対象チャンクに対応したコンテンツ索引表６００のエントリのコンテナＩＤ６０３の値に基づいて、対応するコンテナのコンテナ索引表（８２０，９２０）を取得する。なお、リストアプログラム２２２は、コンテンツ索引表６００のエントリのＢＣブロックチャンク判定６０６が「True」の場合には、ＢＣ用コンテナ索引表８２０を取得し、ＢＣブロックチャンク判定６０６が「False」の場合には、通常コンテナ索引表９２０を取得する。
【０１３８】
次に、リストアプログラム２２２は、取得したコンテナ索引表から、コンテンツ索引表６００のエントリのＦＰ及びチャンク長の値が一致するエントリを検索し、検索により得られた一致したエントリの情報を処理対象チャンクの管理情報として保持する。
【０１３９】
次に、ステップＳ４０５では、ストレージ２００のリストアプログラム２２２は、記憶デバイス２３０から処理対象チャンクのデータを読み出す。具体的には、リストアプログラム２２２は、ステップＳ４０２でコンテンツ索引表より取得したコンテナＩＤ及びチャンク長と、ステップＳ４０４でコンテナ索引表より取得したオフセットとに基づいて、記憶デバイス２３０における処理対象チャンクの格納場所を特定し、特定した格納場所のデータを読み出して保持する。
【０１４０】
次に、ステップＳ４０６では、ストレージ２００のリストアプログラム２２２は、処理対象コンテンツ内の全てのチャンクに対する処理を完了したか確認する。具体的には、カウンタｉの値がｎ−１未満の場合（Ｓ４０６：Ｙｅｓ）は、未処理のチャンクがあることを意味しているので、ストレージ２００のリストアプログラム２２２は、リストア処理を継続するために、処理をステップＳ４０７へ移行する。一方、カウンタｉがｎ−１以上である場合（Ｓ４０６：Ｎｏ）には、全てのチャンクの処理を完了したことを意味しているので、ストレージ２００のリストアプログラム２２２は、処理をステップＳ４０８に移行する。
【０１４１】
ステップＳ４０７では、ストレージ２００のリストアプログラム２２２は、処理対象チャンクを処理対象コンテンツ内の次のチャンクへ変更し、処理をステップＳ４０４に移行する。具体的には、ストレージ２００のリストアプログラム２２２は、カウンタｉの値に１を加算し、処理対象チャンクを変更する。例えば、カウンタｉ＝ｋである場合には、ｉ＝ｉ＋１に更新することにより、処理対象チャンクを処理対象コンテンツの先頭からｋ＋２番目のチャンクに変更する。
【０１４２】
ステップＳ４０８では、ストレージ２００のリストアプログラム２２２は、読み出したチャンクを結合してリストア対象のコンテンツを復元する。具体的には、リストアプログラム２２２は、ステップＳ４０５で取得した各チャンクをコンテンツ索引表６００のオフセット６０４と、チャンク長６０５とに指定される位置に配置することにより、コンテンツを復元する。
【０１４３】
次に、ステップＳ４０９では、ストレージ２００のリストアプログラム２２２は、復元したコンテンツをＢＣサーバ１００へ転送し、コンテンツの転送が完了した後にリストア処理を終了する。
【０１４４】
なお、バックアップ処理に対応するリストア処理について説明したが、ＢＣサーバ１００からストレージ２００に格納したコンテンツを、ＢＣサーバ１００から取得する処理であれば、リストア処理と同様な処理で実現することができる。具体的には、例えば、ティアリング時のコンテンツデータのＢＣサーバ１００への移動や、ＢＣサーバ１００からのリードリクエストに対応するコンテンツデータのストレージ２００からの取得などに同様な処理を行うことができる。
【０１４５】
以上説明したように、上記実施形態に係るＢＣシステム１によると、ＢＣブロック５００のデータ構造を活用し、コンテンツデータの重複排除処理におけるハッシュの計算処理を削減することで、効率的な重複排除処理を実現することができる。
【０１４６】
また、上記実施形態では、複数のＢＣブロック５００を含むチャンク４００に対するＦＰ４１０を管理するようにしたので、ＢＣ用ＦＰＴ８００のエントリ数を抑制することができ、ＢＣ用ＦＰＴ８００のサイズの肥大化や検索処理負荷の増大を防止することができる。このため、ＢＣ用ＦＰＴ８００に関わる記憶デバイスの使用量、Ｉ／Ｏ負荷、ネットワーク帯域負荷等を低減することができる。
【０１４７】
次に、第２実施形態に係るＢＣシステム１Ａについて説明する。
【０１４８】
本実施形態に係るＢＣシステム１Ａは、図２に示す第１実施形態に係るＢＣシステム１と同様な構成をしている。
【０１４９】
図１５は、第２実施形態に係るＢＣサーバとストレージシステムとの構成図である。なお、図１５においては、第１実施形態に係る構成と同様な部分については、同一の符号を付し、重複する説明を省略する。
【０１５０】
第２実施形態に係るＢＣサーバ１００Ａは、第１実施形態に係るＢＣサーバ１００において、コンテナ索引表９２０，８２０を備えないようにするとともに、バックアップ処理時に重複判定処理を実施しないようにしたものである。
【０１５１】
図１６は、第２実施形態に係るバックアップ処理のフローチャートである。
【０１５２】
ステップＳ５０１〜Ｓ５０３は、ストレージ２００のバックアッププログラム２２１が実行する処理であり、処理内容は、図１１のステップＳ１０１〜Ｓ１０３と同様である。ステップＳ５０４〜Ｓ５１０は、図１３のステップＳ３０２、Ｓ３０３、Ｓ３０５〜Ｓ３０８と同様である。ステップＳ５１１〜Ｓ５１３は、ストレージ２００のバックアッププログラム２２１が実行する処理であり、処理内容は、図１１のステップＳ１０９〜Ｓ１１１と同様である。ステップＳ５１４は、図１１のステップＳ１１２と同様である。
【０１５３】
第２実施形態に係るバックアップ処理においては、ＢＣサーバ１００Ａは、重複排除処理を実行しないで、ストレージ２００が実行することとなる。
【０１５４】
第２実施形態に係るＢＣシステム１Ａにおけるリストア処理は、図１４に示す第１実施形態に係るリストア処理と実質的には同様である。
【０１５５】
上記した第２実施形態によると、ＢＣサーバ１００Ａに重複排除機能を有していなくても、サーバ２００によりデータの重複排除を適切に行うことができる。このため、ＢＣサーバ１００Ａの処理負荷の増加を低減しつ、データの重複排除を行うことができる。
【０１５６】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【０１５７】
例えば、上記実施形態では、ＢＣシステム１の全てのＢＣサーバ１００を対象に重複排除を行うようにしていたが、本発明はこれに限れず、例えば、ＢＣシステム１を複数の組織のＢＣサーバ１００で構成する場合において、或る１つの組織に属するＢＣサーバ１００で管理するデータ（コンテンツ）を対象に重複排除を行うようにしてもよい。
【０１５８】
また、上記実施形態では、１つのＢＣブロックチャンク４００に複数のＢＣブロック５００を含めるようにしていたが、本発明はこれに限られず、１つのＢＣブロックチャンク４００に１つのＢＣブロック５００を含めるようにしてもよい。
【０１５９】
また、上記実施形態では、１以上の取引データ５１０と直前のブロック５００のハッシュ値とをブロック５００として構成したブロックチェーン４を例に挙げていたが、本発明はこれに限られず、例えば、奇数番目のブロックを１以上の取引データと１つ前の奇数番目のブロックのハッシュ値とで構成し、偶数番目のブロックを１以上の取引データと１つ前の偶数番目のブロックのハッシュ値とで構成するようにしてもよく、また、奇数番目のブロックを１以上の取引データで構成し、偶数番目のブロックを１以上の取引データと１つ前のブロックのハッシュ値と２つの前のブロックのハッシュ値とで構成してもよく、要は、或るブロックについて、そのハッシュ値を格納した他のブロックを特定できるように管理していればよく、換言すれば、或るブロックと、所定の関係を有する他のブロックがその或るブロックのハッシュ値を管理していればよい。また、例えば、１以上の取引データ（取引データ群）と、直前のブロックに相当するデータ群（ブロック相当データ群：取引データ群及び直前のブロック相当データ群のハッシュ値）のハッシュ値とをブロック化せずに対応付けて管理するようにし、各ブロック相当データ群を発生順に従ってチェーン化した構造としてもよく、要は、ブロック相当データ群から、対応するハッシュ値を特定して取得できるデータ構造であればよい。
【０１６０】
また、上記実施形態において、プロセッサが行っていた処理の一部又は全部を、ハードウェア回路で行うようにしてもよい。また、上記実施形態におけるプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
【符号の説明】
【０１６１】
１、１Ａ…ＢＣシステム、１０…ネットワーク、１１…クライアント、１２…管理端末、３０，４０…コンテンツ、３１，４１…コンテナ、１００，１００Ａ…ＢＣサーバ、２００…ストレージ、４００…ＢＣブロックチャンク、４１０…ＢＣ用ＦＰ、５００…ＢＣブロック、８００…ＢＣ用ＦＰＴ、９００…通常ＦＰＴ
【図１】
2020047107.tif 000003
【図２】
2020047107.tif 000004
【図３】
2020047107.tif 000005
【図４】
2020047107.tif 000006
【図５】
2020047107.tif 000007
【図６】
2020047107.tif 000008
【図７】
2020047107.tif 000009
【図８】
2020047107.tif 000010
【図９】
2020047107.tif 000011
【図１０】
2020047107.tif 000012
【図１１】
2020047107.tif 000013
【図１２】
2020047107.tif 000014
【図１３】
2020047107.tif 000015
【図１４】
2020047107.tif 000016
【図１５】
2020047107.tif 000017
【図１６】
2020047107.tif 000018