(57)【特許請求の範囲】
【請求項１】
第１の仮想ボリュームと第２の仮想ボリュームとを展開するストレージ装置に備えられる制御装置であって、
第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているかを判定する第１判定部と、
前記第１判定部によって前記第１のデータが重複して書き込まれていないと判定された場合に、前記第１又は第２の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第１のデータが前記第１又は第２の仮想ボリュームに書き込まれているかを判定する第２判定部と、
前記第２判定部によって前記第１のデータが前記第１及び第２の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第１のデータについての情報を登録する個別データ登録部と、
を備える、制御装置。
【請求項２】
前記個別データ登録部によって登録された前記情報に係る前記第１のデータを、前記第１又は第２仮想ボリュームに書き込む書き込み部を更に備える、
請求項１に記載の制御装置。
【請求項３】
前記ストレージ装置は、前記第１及び第２の仮想ボリュームとは異なる第３の仮想ボリュームを更に展開し、
前記第１判定部によって前記第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれていると判定された場合には、前記第２判定部による前記判定と前記個別データ登録部による前記登録とを行なわずに、前記第１のデータを、前記第１のデータの格納先である前記第３の仮想ボリュームに書き込む書き込み部を更に備える、
請求項１に記載の制御装置。
【請求項４】
前記第１判定部は、前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているデータを示す共通データ情報を用いて、前記判定を行なう、
請求項１〜３のいずれか１項に記載の制御装置。
【請求項５】
前記第１及び第２の仮想ボリュームに亘って重複して書き込まれるデータは、前記ストレージ装置の全体の動作を制御するオペレーティングシステムによって使用されるデータであり、
前記第１及び第２の仮想ボリュームのいずれか一方に書き込まれるデータは、前記ストレージ装置において動作する個別のアプリケーションによって使用されるデータである、
請求項４に記載の制御装置。
【請求項６】
前記アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する共通データ登録部を更に備える、
請求項５に記載の制御装置。
【請求項７】
前記アプリケーションが起動している状態において、前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する共通データ登録部を更に備える、
請求項５に記載の制御装置。
【請求項８】
第１の仮想ボリュームと第２の仮想ボリュームとを展開するストレージ装置であって、
第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているかを判定する第１判定部と、
前記第１判定部によって前記第１のデータが重複して書き込まれていないと判定された場合に、前記第１又は第２の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第１のデータが前記第１又は第２の仮想ボリュームに書き込まれているかを判定する第２判定部と、
前記第２判定部によって前記第１のデータが前記第１及び第２の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第１のデータについての情報を登録する個別データ登録部と、
を備える、ストレージ装置。
【請求項９】
第１の仮想ボリュームと第２の仮想ボリュームとを展開するストレージ装置に備えられるコンピュータに、
第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているかを判定し、
前記第１のデータが重複して書き込まれていないと判定された場合に、前記第１又は第２の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第１のデータが前記第１又は第２の仮想ボリュームに書き込まれているかを判定し、
前記第１のデータが前記第１及び第２の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第１のデータについての情報を登録する、
処理を実行させる、データ管理プログラム。
【請求項１０】
第１の仮想ボリュームと第２の仮想ボリュームとを展開するストレージ装置において、
第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているかを判定し、
前記第１のデータが重複して書き込まれていないと判定された場合に、前記第１又は第２の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第１のデータが前記第１又は第２の仮想ボリュームに書き込まれているかを判定し、
前記第１のデータが前記第１及び第２の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第１のデータについての情報を登録する、
データ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置、ストレージ装置、データ管理プログラム及びデータ管理方法に関する。
【背景技術】
【０００２】
ストレージ装置の機能として、同一の内容のデータ（「ブロック」と称されてもよい。）が複数含まれている場合には、複数の同一の内容のデータを１つにまとめて記憶する重複除去技術が知られている。
【０００３】
重複除去技術においては、例示的に、どのようなブロックが書き込まれたかを記憶するため、ハッシュ値管理テーブルが使用される。ハッシュ値管理テーブルは、書き込まれたブロックの値から算出されるハッシュ値と、書き込まれたブロックを実際に書き込んだ物理的な場所を示すインデックス（「書き込み物理アドレス」と称されてもよい。）とを含んでよい。
【０００４】
ハッシュ値管理テーブルは、ブロックの書き込み時に毎回参照される。そこで、ハッシュ値管理テーブルに関する情報は、高速に動作可能なメモリに格納されてよい。
【０００５】
しかしながら、新たなブロックが書き込まれるとハッシュ値管理テーブルのエントリ数が増加していくため、メモリの容量が不足するおそれがある。
【０００６】
そこで、ハッシュ値管理テーブルに関する情報の大きさをメモリに格納可能な大きさに抑えつつ、重複しているブロックをできるだけ検出することが考えられる。別言すれば、全てのハッシュ値を記憶するのではなく、例えば、重複しないブロックのハッシュ値と物理アドレスとの関係をメモリに格納しないことが考えられる。
【０００７】
ハッシュ値管理テーブルの大きさを抑える技術のひとつとして、ハッシュ値管理テーブルをＬＲＵ（Least Recently Used）を用いて管理する技術が知られている。ＬＲＵを用いた技術では、ブロックの書き込み時にハッシュ値管理テーブルを参照した際、ヒットしたエントリの優先度を最高に設定してよい。そして、新たなハッシュ値を有するブロックが書き込まれる際には、優先度が最低のエントリの内容を、新たなハッシュ値の内容に書き換えてよい。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−７９３９１号公報
【特許文献２】特開２０１０−１８２３０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、ＬＲＵを用いてハッシュ値管理テーブルを用いて管理する技術においては、一時的に新たなハッシュ値を有するブロックが大量に書き込まれた場合に、長期間に亘って使用されるブロックのエントリが消去されてしまうおそれがある。また、ハッシュ値管理テーブルのエントリが特定のアプリケーションで特異的に使用されるブロックによって占有されるおそれがある。例えば、動画を編集するアプリケーションでは、編集された動画のブロックが大量に書き込まれることによって、ハッシュ値管理テーブルが動画のブロックで占有されるおそれがある。
【００１０】
１つの側面では、本発明は、重複除去に関する情報をメモリに効率的に格納することを目的とする。
【課題を解決するための手段】
【００１１】
このため、この制御装置は、第１の仮想ボリュームと第２の仮想ボリュームとを展開するストレージ装置に備えられる制御装置であって、第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているかを判定する第１判定部と、前記第１判定部によって前記第１のデータが重複して書き込まれていないと判定された場合に、前記第１又は第２の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第１のデータが前記第１又は第２の仮想ボリュームに書き込まれているかを判定する第２判定部と、前記第２判定部によって前記第１のデータが前記第１及び第２の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第１のデータについての情報を登録する個別データ登録部と、を備える。
【発明の効果】
【００１２】
開示の制御装置によれば、重複除去に関する情報をメモリに効率的に格納することができる。
【図面の簡単な説明】
【００１３】
【図１】実施形態の一例としてのストレージシステムの構成を模式的に示す図である。
【図２】重複除去技術を適用する前のオリジナルファイルを模式的に例示する図である。
【図３】重複除去技術を適用した後のファイルを模式的に例示する図である。
【図４】ハッシュ値管理テーブルの第１の例を示す図である。
【図５】仮想アドレス空間テーブルの第１の例を示す図である。
【図６】管理テーブルの第１の例を示す図である。
【図７】ハッシュ値管理テーブルの第２の例を示す図である。
【図８】仮想アドレス空間テーブルの第２の例を示す図である。
【図９】管理テーブルの第２の例を示す図である。
【図１０】実施形態の一例としてのストレージシステムの機能を模式的に示す図である。
【図１１】実施形態の一例としての第１段の重複除去部の機能を模式的に示す図である。
【図１２】実施形態の一例としての第２段の重複除去部の機能を模式的に示す図である。
【図１３】実施形態の一例としての第１段の重複除去動作を説明するフローチャートである。
【図１４】実施形態の一例としての第２段の重複除去動作を説明するフローチャートである。
【図１５】実施形態の一例としての第１ハッシュ値管理テーブルの作成動作の第１の例を説明するフローチャートである。
【図１６】実施形態の一例としての第１ハッシュ値管理テーブルの作成動作の第２の例を説明するフローチャートである。
【図１７】関連技術としてのハッシュ値管理テーブルの使用例を説明する図である。
【図１８】実施形態の一例としてのハッシュ値管理テーブルの使用例を説明する図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。
【００１５】
また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００１６】
以下、図中において、同一の各符号は同様の部分を示しているので、その説明は省略する。
【００１７】
〔Ａ〕実施形態の一例
〔Ａ−１〕システム構成
図１は、実施形態の一例としてのストレージシステム１００の構成を模式的に示す図である。
【００１８】
ストレージシステム１００は、図１に例示するように、ストレージ装置１及び複数（図示する例では３つ）のサーバ装置４を備える。
【００１９】
サーバ装置４は、サーバ機能を備えたコンピュータ（「情報処理装置」と称されてもよい。）である。
【００２０】
ストレージ装置１は、後述する記憶装置３０を搭載し、サーバ装置４に対して記憶領域を提供する装置であり、例えばＲＡＩＤ（Redundant Arrays of Inexpensive Disks）を用いて記憶装置３０にデータを分散又は冗長化した状態で保存する。
【００２１】
ストレージ装置１は、重複除去技術を利用して、ファイルに含まれる同じ内容のデータの重複を除去した状態で、ファイルを記憶装置３０に格納してよい。また、ストレージ装置１は、図１０等を用いて後述するように、複数の仮想ボリューム３０ａを展開して、展開した仮想ボリューム３０ａにファイルを格納してよい。
【００２２】
本明細書において、「ファイル」とは、複数の「データ」の集合を指す。また、「データ」は、「ブロック」と称されてもよい。
【００２３】
ストレージ装置１は、図１に例示するように、ＣＰＵ（Central Processing Unit）１０，メモリ２０及び記憶装置３０を備える。
【００２４】
ＣＰＵ１０及びメモリ２０は、例示的に、ＣＭ（Controller Module）１ａに備えられる。「ＣＭ」は、「制御装置」と称されてもよい。
【００２５】
ＣＭ１ａは、種々の制御を行なう制御装置であり、サーバ装置４からのストレージアクセス要求（「アクセス制御信号」や「ホストＩ／Ｏ」と称されてもよい。）に従って、各種制御を行なう。
【００２６】
なお、図１に示す例においストレージ装置１は１つのＣＭ１ａを備えることとしたが、これに限定されるものではない。ストレージ装置１に備えられるＣＭ１ａの数は、種々変更することができる。
【００２７】
記憶装置３０は、例示的に、データを読み書き可能に記憶する装置であり、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）が用いられてよい。記憶装置３０には、図１１及び図１２を用いて後述する第１ハッシュ値管理テーブル，第２ハッシュ値管理テーブル，仮想アドレス空間テーブル及び管理テーブルに関する情報が格納されてよい。
【００２８】
なお、図１に示す例においてストレージ装置１には便宜上１つの記憶装置３０を示しているが、これに限定されるものではない。ストレージ装置１に備えられる記憶装置３０の数は、種々変更することができる。
【００２９】
実施形態の一例としてのストレージ装置１は、例示的に、大容量の記憶装置３０（「ボリューム」と称されてもよい。）を用途毎等に分割して管理して使用する。ボリュームが分割される単位をＬＵ（Logical Unit）という。
【００３０】
メモリ２０は、例示的に、ＲＯＭ（Read Only Memory）及びＲＡＭ（Random Access Memory）を含む記憶装置である。メモリ２０のＲＯＭには、ＢＩＯＳ（Basic Input/Output System）等のプログラムが書き込まれてよい。メモリ２０のソフトウェアプログラムは、ＣＰＵ１０に適宜に読み込まれて実行されてよい。また、メモリ２０のＲＡＭは、一次記録メモリあるいはワーキングメモリとして利用されてよい。
【００３１】
ＣＰＵ１０は、例示的に、種々の制御や演算を行なう処理装置であり、メモリ２０のそれぞれに格納されたＯＳ（Operating System）やプログラムを実行することにより、種々の機能を実現する。すなわち、ＣＰＵ１０は、共通データ登録部１１，第１データ入力部１２，第１判定部１３，通信部１４，第２データ入力部１５，第２判定部１６，個別データ登録部１７，書き込み部１８として機能してよい。
【００３２】
なお、これらの共通データ登録部１１，第１データ入力部１２，第１判定部１３，通信部１４，第２データ入力部１５，第２判定部１６，個別データ登録部１７，書き込み部１８としての機能を実現するためのプログラムは、例えばフレキシブルディスク、ＣＤ（ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等）、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ、ＤＶＤ＋Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ、ＨＤ  ＤＶＤ等）、ブルーレイディスク、磁気ディスク、光ディスク、光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供されてよい。そして、コンピュータ（本実施形態ではＣＰＵ１０）は上述した記録媒体から図示しない読取装置を介してプログラムを読み取って内部記録装置または外部記録装置に転送し格納して用いてよい。また、プログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、記憶装置から通信経路を介してコンピュータに提供してもよい。
【００３３】
共通データ登録部１１，第１データ入力部１２，第１判定部１３，通信部１４，第２データ入力部１５，第２判定部１６，個別データ登録部１７，書き込み部１８としての機能を実現する際には、内部記憶装置（本実施形態ではメモリ２０）に格納されたプログラムがコンピュータ（本実施形態ではＣＰＵ１０）によって実行されてよい。また、記録媒体に記録されたプログラムをコンピュータが読み取って実行してもよい。
【００３４】
共通データ登録部１１，第１データ入力部１２，第１判定部１３，通信部１４，第２データ入力部１５，第２判定部１６，個別データ登録部１７，書き込み部１８の機能の詳細について説明する前に、図２〜図９を参照して、重複除去技術について説明する。
【００３５】
図２〜図９を参照して説明される重複除去技術は、実施形態の一例としてのストレージシステム１００によって実現されてもよい。
【００３６】
図２は重複除去技術を適用する前のオリジナルファイルを模式的に例示する図であり、図３は重複除去技術を適用した後のファイルを模式的に例示する図である。
【００３７】
重複除去技術は、複数のファイルにおいて、同一の内容のブロックが複数含まれている場合に、同一の内容のブロックを１つにまとめる技術である。
【００３８】
図２に示すように、オリジナルファイルとしてのファイルＡ及びファイルＢが記憶装置に書き込まれる例を考える。ファイルＡには青，赤，紫，黄及び緑の画像データのブロックが含まれ、ファイルＢには緑，茶，赤，紫及び黄の画像データのブロックが含まれる。また、各ブロックのデータサイズは４ＫＢ（キロバイト）であり、ファイルＡ及びファイルＢの合計データサイズは４０ＫＢである。
【００３９】
ファイルＡ及びファイルＢに重複除去を適用する場合には、各ブロックにインデックスが付与される。
【００４０】
図３に示す例において、ファイルＡの青，赤，紫，黄及び緑の画像データのブロックには、インデックス０１，０２，０３，０４及び０５がそれぞれ付与される。また、ファイルＢの緑，茶，赤，紫及び黄の画像データのブロックには、インデックス０５，０６，０２，０３及び０４がそれぞれ付与される。別言すれば、ファイルＡ及びファイルＢにおいて、同一の色の画像データのブロックには、同一のインデックスが付与される。
【００４１】
ストレージ装置１は、重複除去したファイルを管理するために、図３に示すような管理テーブルに関する情報を記憶する。管理テーブルには、インデックスとポインタとが対応付けられている。
【００４２】
ストレージ装置１は、管理テーブルにおいて、インデックスを参照することにより、ポインタを介してファイルに含まれるブロックを参照することができる。図３に示す例においては、インデックス０１，０２，０３，０４，０５及び０６に対して、青，赤，紫，黄，緑及び茶の各画像データのブロックを示すポインタがそれぞれ対応づけられている。
【００４３】
図４はハッシュ値管理テーブルの第１の例を示す図であり、図５は仮想アドレス空間テーブルの第１の例を示す図であり、図６は管理テーブルの第１の例を示す図である。
【００４４】
図１に示したファイルＡを記憶装置３０の仮想アドレス０ｘ００００から書き込んだ場合のハッシュ値管理テーブルと仮想アドレス空間テーブルと管理テーブルとは、図４〜図６にそれぞれ示すようになる。
【００４５】
ハッシュ値管理テーブルには、ハッシュ値と書き込み物理アドレス（「ページ」と称されてもよい。）とが関連付けられている。ハッシュ値は、ブロックの内容に基づいて作成され、ブロックを一意に特定するための情報である。物理アドレスは、ブロックが記憶装置３０において実際に書き込まれている位置を示す。
【００４６】
図４に示す例において、ハッシュ値管理テーブルには、ファイルＡの青，赤，紫，黄及び緑の画像データのブロックに対して、ハッシュ値ｂｌｕｅ，ｒｅｄ，ｐｕｒｐｌｅ，ｙｅｌｌｏｗ及びｇｒｅｅｎがそれぞれ関連付けられている。また、図４に示す例において、ハッシュ値管理テーブルには、ファイルＡの青，赤，紫，黄及び緑の画像データのブロックに対して、書き込み物理アドレス０１，０２，０３，０４及び０５がそれぞれ関連付けられている。
【００４７】
仮想アドレス空間テーブルは、仮想アドレスと物理アドレスとが関連付けられている。仮想アドレスは、ストレージ装置１が展開する仮想ボリューム３０ａ（図１０等を用いて後述）においてブロックが書き込まれる位置を示す。
【００４８】
図５に示す例において、仮想アドレス０ｘ００００，０ｘ１０００，０ｘ２０００，０ｘ３０００及び０ｘ４０００に対して、書き込み物理アドレス０１，０２，０３，０４及び０５がそれぞれ関連付けられている。
【００４９】
図７はハッシュ値管理テーブルの第２の例を示す図であり、図８は仮想アドレス空間テーブルの第２の例を示す図であり、図９は管理テーブルの第２の例を示す図である。
【００５０】
図４〜図６に示した状態から、更に、図２に示したファイルＢを記憶装置３０の仮想アドレス０ｘ６０００から書き込んだ後のハッシュ値管理テーブルと仮想アドレス空間テーブル管理テーブルとは、図７〜図９にそれぞれ示すようになる。
【００５１】
ハッシュ値管理テーブルは、ブロックの書き込み時に毎回参照される。そこで、ハッシュ値管理テーブルに関する情報は、高速に動作可能なメモリに格納されてよい。
【００５２】
しかしながら、新たなブロックが書き込まれるとハッシュ値管理テーブルのエントリ数が増加していくため、メモリの容量が不足するおそれがある。
【００５３】
そこで、ハッシュ値管理テーブルに関する情報の大きさをメモリに格納可能な大きさに抑えつつ、重複しているブロックをできるだけ検出することが考えられる。別言すれば、全てのハッシュ値を記憶するのではなく、例えば、重複しないブロックのハッシュ値と書き込み物理アドレスとの関係をメモリに格納しないことが考えられる。
【００５４】
ハッシュ値管理テーブルの大きさを抑える技術のひとつとして、ハッシュ値管理テーブルをＬＲＵを用いて管理する技術が知られている。ＬＲＵを用いた技術では、ブロックの書き込み時にハッシュ値管理テーブルを参照した際、ヒットしたエントリの優先度を最高に設定してよい。そして、新たなハッシュ値を有するブロックが書き込まれる際には、優先度が最低のエントリの内容を、新たなハッシュ値の内容に書き換えてよい。
【００５５】
しかしながら、ＬＲＵを用いてハッシュ値管理テーブルを用いて管理する技術においては、一時的に新たなハッシュ値を有するブロックが大量に書き込まれた場合に、長期間に亘って使用されるブロックのエントリが消去されてしまうおそれがある。また、ハッシュ値管理テーブルのエントリが特定のアプリケーションで特異的に使用されるブロックによって占有されるおそれがある。
【００５６】
図１０は、実施形態の一例としてのストレージシステム１００の機能を模式的に示す図である。
【００５７】
ストレージ装置１は、図１０に例示するように、複数（図示する例ではｎ＋１個）の仮想ボリューム３０ａ（ＬＵＮ０〜ｎ）を展開してよい。なお、「ＬＵＮ」は、Logical Unit Numberの略称である。複数の仮想ボリューム３０ａは、記憶装置３０の記憶領域を使用することによって展開されてよい。
【００５８】
ボリュームに書き込まれるデータは、ＬＵ毎に特徴がある場合がある。例えば、文字ドキュメントを扱うアプリケーションＡ用にＬＵＮ０を割り当て、画像を扱うアプリケーションＢ用にＬＵＮ１を割り当てた場合を想定する。この場合には、ＬＵＮ０には文字ドキュメントデータが多く記録され、ＬＵＮ１には画像データが多く記録されることになり、文字ドキュメントデータと画像データとの間では重複が起きにくい。
【００５９】
しかしながら、アプリケーションによらずに記録されるデータも存在する。例えば、ファイルシステムやＯＳが書き込むデータは、複数のアプリケーション間で共通に使用され、各アプリケーションに対応する複数の仮想ボリューム３０ａに同じように格納される場合がある。
【００６０】
つまり、ストレージ装置１が記憶するデータには、ＬＵＮ間に亘って重複するデータと、ＬＵＮに固有のデータとが存在する。実施形態の一例としてのストレージシステム１００は、ＬＵＮ間に亘って重複するデータと、ＬＵＮに固有のデータとの重複管理のための機能を分離することで、ハッシュ値管理テーブルの大きさを抑えつつ、高い重複除去率を達成する。
【００６１】
そこで、実施形態の一例としてのストレージ装置１は、図１０に例示するように、第１段の重複除去部１０ａ及び複数（図示する例ではｎ＋１個）の第２段の重複除去部１０ｂとして機能する。複数の第２段の重複除去部１０ｂは、複数の仮想ボリューム３０ａのそれぞれに対応して備えられてよい。
【００６２】
第１段の重複除去部１０ａは、例示的に、ＬＵＮ間に亘った重複除去を行なう。第１段の重複除去部１０ａは、図１に示した共通データ登録部１１，第１データ入力部１２，第１判定部１３，通信部１４として機能してよい。
【００６３】
第２段の重複除去部１０ｂは、例示的に、ＬＵＮ毎に重複除去を行なう。第２段の重複除去部１０ｂは、図１に示した第２データ入力部１５，第２判定部１６，個別データ登録部１７及び書き込み部１８として機能してよい。
【００６４】
図１１は、実施形態の一例としての第１段の重複除去部１０ａの機能を模式的に示す図である。
【００６５】
図１１に示す例においては、第１段の重複除去部１０ａが備える機能のうち、一部の機能が示されている。
【００６６】
共通データ登録部１１（図１１には不図示）は、例示的に、第１ハッシュ値管理テーブルを作成する。共通データ登録部１１は、ストレージ装置１の運用前に、予め第１ハッシュ値管理テーブルを作成してよい。また、共通データ登録部１１は、作成した第１ハッシュ値管理テーブルに関する情報を例えば記憶装置３０の所定の領域に格納してよい。
【００６７】
第１ハッシュ値管理テーブルは、例示的に、複数の仮想ボリューム３０ａに亘って重複して書き込まれるデータに関する情報を示す。別言すれば、第１ハッシュ値管理テーブルは、ストレージ装置１の全体の動作を制御するＯＳによって使用されるデータのハッシュ値を示してよい。更に別言すれば、第１ハッシュ値管理テーブルは、ストレージ装置１によって実行されるアプリケーションによらずに重複して使用されるデータのハッシュ値を示してよい。
【００６８】
第１ハッシュ値管理テーブルには、ハッシュ値と書き込み物理アドレスとが関連付けられてよい。図１１に示す例において、ハッシュ値ｂｌｕｅ及びｒｅｄには、書き込み物理アドレスｌｕｎ０−０１及びｌｕｎ２−０５が関連付けられている。
【００６９】
共通データ登録部１１は、ストレージシステム１００を事前に所定時間動作させて、ＬＵＮ間に亘って書き込まれたデータに関する情報を収集してよい。そして、共通データ登録部１１は、収集した情報に基づいて、書き込み回数が上位のデータに関する情報を所定の個数（例えば、１０万個）登録した第１ハッシュ値管理テーブルを作成してよい。
【００７０】
共通データ登録部１１は、アプリケーションを起動させずにストレージシステム１００を動作させた状態で、重複して使用されたデータを第１ハッシュ値管理テーブルに収集してよい。共通データ登録部１１は、例えば、ＯＳやファイルシステム、ストレージシステム１００の運用環境デフォルトで実行されているプロセスによって書き込まれるデータを、第１ハッシュ値管理テーブルに登録してよい。
【００７１】
別言すれば、共通データ登録部１１は、ストレージ装置１によって実行させるアプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を第１ハッシュ値管理テーブルに登録してよい。これにより、共通データ登録部１１は、第１ハッシュ値管理テーブルを生成してよい。
【００７２】
また、共通データ登録部１１は、アプリケーションを起動させてストレージシステム１００を動作させた状態で、重複して使用されたデータを第１ハッシュ値管理テーブルに収集してよい。共通データ登録部１１は、例えば、ＯＳ等によって書き込まれるデータに加えて、複数のアプリケーション間で共通に使用されるデータを、第１ハッシュ値管理テーブルに登録してよい。共通データ登録部１１は、複数の第２段の重複除去部１０ｂに対して各仮想ボリューム３０ａに書き込まれているデータを問い合わせることにより、複数のアプリケーション間で共通に使用されるデータを特定してよい。ここで、「ＯＳ等によって書き込まれるデータ」とは、例えば、ＯＳやファイルシステム、ストレージシステム１００の運用環境デフォルトで実行されているプロセスによって書き込まれるデータである。
【００７３】
別言すれば、共通データ登録部１１は、ストレージ装置１によって実行されるアプリケーションが動作している状態において、複数の仮想ボリューム３０ａに亘って重複して書き込まれるデータについての情報を第１ハッシュ値管理テーブルに登録してよい。これにより、共通データ登録部１１は、第１ハッシュ値管理テーブルを生成してよい。
【００７４】
第１データ入力部１２は、例示的に、サーバ装置４から送信された入力データ（別言すれば、「書き込みデータ」）を受信する。別言すれば、第１データ入力部１２は、サーバ装置４から送信された書き込みアドレス（別言すれば、「ＬＵＮ及びアドレス」）とデータとの入力を受け付けてよい。
【００７５】
また、第１データ入力部１２は、入力データを所定サイズのブロック（以下、「入力ブロック」と称する場合がある。）に分割して、それぞれの入力ブロックと入力ブロックの書き込みアドレスとを計算してよい。そして、第１データ入力部１２は、第１判定部１３に対して、入力ブロックと書き込みアドレスとの組を入力してよい。
【００７６】
第１判定部１３は、例示的に、入力ブロックが複数の仮想ボリューム３０ａに亘って重複して書き込まれているかを判定する。別言すれば、第１判定部１３は、入力ブロックが、ＯＳに使用されるブロックであるのか、個別のアプリケーションによって使用されるブロックであるのかを判定してよい。更に別言すれば、第１判定部１３は、入力ブロックのハッシュ値を計算し、第１ハッシュ値管理テーブルを検索して、同じハッシュ値のエントリが登録されているかを調べてよい。
【００７７】
第１判定部１３は、第１ハッシュ値管理テーブルを用いて、入力ブロックが複数の仮想ボリューム３０ａに亘って重複して書き込まれているかを判定してよい。第１判定部１３は、第１ハッシュ値管理テーブルに登録されているブロックについては、複数の仮想ボリューム３０ａに亘って重複して書き込まれていると判定してよい。また、第１判定部１３は、第１ハッシュ値管理テーブルに登録されていないブロックについては、複数の仮想ボリューム３０ａに亘って重複して書き込まれていないと判定してよい。
【００７８】
通信部１４は、例示的に、第１判定部１３による判定結果に基づき、第２段の重複除去部１０ｂに対して、入力ブロックに関する情報を入力する。
【００７９】
具体的には、通信部１４は、入力ブロックに関する情報が第１ハッシュ値管理テーブルに登録されている場合には、入力ブロックについてのエントリの書き込み物理アドレスを読み出してよい。そして、通信部１４は、入力ブロックのヘッダ等の情報から調べた仮想アドレスのＬＵＮに対応づけられた第２段の重複除去部１０ｂに対して、入力ブロックの仮想アドレスと書き込み物理アドレスとの組を通知してよい。
【００８０】
また、通信部１４は、入力ブロックに関する情報が第１ハッシュ値管理テーブルに登録されていない場合には、入力ブロックのヘッダ等の情報から仮想アドレスを調べて、入力ブロックを書き込むべきＬＵＮを特定してよい。そして、通信部１４は、特定したＬＵＮに対応づけられた第２段の重複除去部１０ｂに対して、入力ブロックの仮想アドレスと内容とを通知してよい。
【００８１】
図１２は、実施形態の一例としての第２段の重複除去部１０ｂの機能を模式的に示す図である。
【００８２】
図１２に示す例においては、第２段の重複除去部１０ｂが備える機能のうち、一部の機能が示されている。
【００８３】
図１２に示される第２ハッシュ値管理テーブルに関する情報は、例示的に、複数の第２段の重複除去部１０ｂ毎に、例えば記憶装置３０の所定の領域に格納される。第２ハッシュ値管理テーブルは、第２段の重複除去部１０ｂに対応するＬＵＮに閉じてデータに重複を管理するためのテーブルであり、ＬＲＵによって管理される所定数（例えば１０万個）のエントリを含んでよい。
【００８４】
第２ハッシュ値管理テーブルには、ハッシュ値と書き込み物理アドレスとが関連付けられてよい。図１２に示す例において、ハッシュ値ｂｒｏｗｎには、書き込み物理アドレス０６が関連付けられている。
【００８５】
第２データ入力部１５は、例示的に、第１段の重複除去部１０ａから入力された入力ブロックに関する情報を受け取る。
【００８６】
具体的には、第２データ入力部１５は、入力ブロックが複数の仮想ボリューム３０ａに亘って重複して書き込まれていない場合には、第１段の重複除去部１０ａから、入力ブロックの仮想アドレスと内容との組を受け取ってよい。また、第２データ入力部１５は、入力ブロックが複数の仮想ボリューム３０ａに亘って重複して書き込まれている場合には、第１段の重複除去部１０ａから、入力ブロックの仮想アドレスと書き込み物理アドレスとの組を受け取ってよい。
【００８７】
第２データ入力部１５は、入力ブロックの仮想アドレスと内容との組を受け取った場合には、第２判定部１６に対して、受け取った入力ブロックの仮想アドレスと内容との組を入力してよい。また、第２データ入力部１５は、入力ブロックの仮想アドレスと書き込み物理アドレスとの組を受け取った場合には、書き込み部１８に対して、受け取った入力ブロックの仮想アドレスと書き込み物理アドレスとの組を入力してよい。
【００８８】
第２判定部１６は、例示的に、第２ハッシュ値管理テーブルを用いて、対応する仮想ボリューム３０ａにおける入力ブロックの重複を判定する。
【００８９】
具体的には、第２判定部１６は、入力ブロックに関する情報が既に第２ハッシュ値管理テーブルに登録されている場合には、第２ハッシュ値管理テーブルから、書き込み物理アドレスを読み出してよい。そして、第２判定部１６は、書き込み部１８に対して、入力ブロックの仮想アドレスと、読み出した書き込み物理アドレスとの組を入力してよい。
【００９０】
第２判定部１６は、入力ブロックに関する情報が既に第２ハッシュ値管理テーブルに登録されていない場合には、個別データ登録部１７に対して、入力ブロックの仮想アドレスと内容との組を入力してよい。
【００９１】
個別データ登録部１７（図１２には不図示）は、例示的に、第２ハッシュ値管理テーブルに入力ブロックについての情報を登録する。
【００９２】
具体的には、個別データ登録部１７は、入力ブロックに関する情報が第２ハッシュ値管理テーブルに登録されていない場合には、第２ハッシュ値管理テーブルの複数のエントリのうち、最もＬＲＵの優先度が低いエントリを選択してよい。個別データ登録部１７は、選択したエントリに入力ブロックのハッシュ値を書き込み（別言すれば、上書きし）、書き込み部１８に対して、入力ブロックの仮想アドレスと内容との組を入力してよい。
【００９３】
書き込み部１８は、例示的に、対応する仮想ボリューム３０ａに対して、入力ブロックを書き込む。
【００９４】
具体的には、書き込み部１８は、入力ブロックの仮想アドレスと書き込み物理アドレスとの組を受け取った場合には、仮想アドレス空間テーブルの対応する仮想アドレスに対して、入力ブロックの書き込み物理アドレスを関連付けて登録してよい。これにより、入力ブロックの仮想アドレスの値は、書き込み物理アドレスに記録されているブロックの内容となる。
【００９５】
書き込み部１８は、入力ブロックの仮想アドレスと内容との組を受け取った場合には、受け取った入力ブロックの内容を記憶装置３０に書き込んでよい。また、書き込み部１８は、管理テーブルに新たな１エントリを追加して、追加したエントリに入力ブロックについての書き込み物理アドレスを登録してよい。更に、書き込み部１８は、仮想アドレス空間テーブルの対応する仮想アドレスに対して、書き込み物理アドレスを関連付けて登録してよい。
【００９６】
個別データ登録部１７（図１２には不図示）は、書き込み部１８によって管理テーブルに登録された書き込み物理アドレスを、第２ハッシュ値管理テーブルの入力ブロックについてのエントリの書き込み物理アドレスのカラムに登録してよい。
【００９７】
入力ブロックの仮想アドレスと内容との組を受け取った場合の、書き込み部１８及び個別データ登録部１７の機能により、入力ブロックの値は、書き込み物理アドレスに記録されているブロックの内容となる。
【００９８】
〔Ａ−２〕動作
上述の如く構成された実施形態の一例としての第１段の重複除去動作（ステップＳ１〜Ｓ５）を、図１３に示すフローチャートに従って説明する。
【００９９】
第１データ入力部１２は、サーバ装置４から送信された書き込みデータを受け取る（ステップＳ１）。
【０１００】
第１判定部１３は、書き込みデータのハッシュ値を算出する（ステップＳ２）。
【０１０１】
第１判定部１３は、書き込みデータのハッシュ値が第１ハッシュ値管理テーブルに登録されているかを判定する（ステップＳ３）。
【０１０２】
書き込みデータのハッシュ値が第１ハッシュ値管理テーブルに登録されていない場合には（ステップＳ３のＮｏルート参照）、通信部１４は、書き込みデータの仮想アドレスから書き込むべき仮想ボリューム３０ａを特定する。そして、通信部１４は、特定した仮想ボリューム３０ａに対応する第２段の重複除去部１０ｂに対して、書き込みデータの仮想アドレスと内容とを通知し（ステップＳ４）、処理は終了する。
【０１０３】
一方、書き込みデータのハッシュ値が第１ハッシュ値管理テーブルに登録されている場合には（ステップＳ３のＹｅｓルート参照）、通信部１４は、対応する第２段の重複除去部１０ｂに対して、書き込みデータの仮想アドレスと書き込み物理アドレスとの組を通知する（ステップＳ５）。そして、処理は終了する。
【０１０４】
次に、実施形態の一例としての第２段の重複除去動作（ステップＳ１１〜Ｓ１６）を、図１４に示すフローチャートに従って説明する。
【０１０５】
第２データ入力部１５は、第１段の重複除去部１０ａから入力された書き込みデータを受け取る（ステップＳ１１）。
【０１０６】
第２判定部１６は、書き込みデータのハッシュ値を算出する（ステップＳ１２）。
【０１０７】
第２判定部１６は、書き込みデータのハッシュ値が第２ハッシュ値管理テーブルに登録されているかを判定する（ステップＳ１３）。
【０１０８】
書き込みデータのハッシュ値が第２ハッシュ値管理テーブルに登録されている場合には（ステップＳ１３のＹｅｓルート参照）、処理は終了する。
【０１０９】
一方、書き込みデータのハッシュ値が第２ハッシュ値管理テーブルに登録されていない場合には（ステップＳ１３のＮｏルート参照）、個別データ登録部１７は、第２ハッシュ値管理テーブルを更新する。具体的には、個別データ登録部１７は、第２ハッシュ値管理テーブルにおいて最も使われていないエントリの内容を、書き込みデータのハッシュ値で書き換える（ステップＳ１４）。
【０１１０】
書き込み部１８は、書き込みデータを記憶装置３０に書き込む。また、書き込み部１８は、書き込みデータの仮想アドレスを管理テーブルに登録し、書き込みデータのインデックスを作成する（ステップＳ１５）。
【０１１１】
個別データ登録部１７は、第２ハッシュ値管理テーブルの対応するエントリにおける書き込み物理アドレスの内容を、作成されたインデックスに書き換える（ステップＳ１６）。そして、処理は終了する。
【０１１２】
次に、実施形態の一例としての第１ハッシュ値管理テーブルの作成動作（ステップＳ２１〜Ｓ２９）の第１の例を、図１５に示すフローチャートに従って説明する。図１５においては、アプリケーションを起動させずにストレージシステム１００を動作させた状態での第１ハッシュ値管理テーブルの作成動作を説明する。
【０１１３】
共通データ登録部１１は、第１ハッシュ値管理テーブルと同じエントリ数を有する作業用ハッシュ値管理テーブルを作成する（ステップＳ２１）。ステップＳ２１の状態において、第１ハッシュ値管理テーブル及び作成された作業用ハッシュ値管理テーブルの各エントリは空である。
【０１１４】
共通データ登録部１１は、アプリケーションを起動させずにストレージシステム１００を動作させる（ステップＳ２２）。
【０１１５】
第１データ入力部１２は、サーバ装置４から送信された書き込みデータを受け取る（ステップＳ２３）。
【０１１６】
第１判定部１３は、書き込みデータのハッシュ値を算出する（ステップＳ２４）。
【０１１７】
第１判定部１３は、書き込みデータのハッシュ値が第１ハッシュ値管理テーブルに登録されているかを判定する（ステップＳ２５）。
【０１１８】
書き込みデータのハッシュ値が第１ハッシュ値管理テーブルに登録されていない場合には（ステップＳ２５のＮｏルート参照）、共通データ登録部１１は、第１ハッシュ値管理テーブルを更新する。具体的には、共通データ登録部１１は、第１ハッシュ値管理テーブルの最も使われていないエントリを、書き込みデータのハッシュ値で書き換える（ステップＳ２６）。そして、処理はステップＳ２３へ戻る。
【０１１９】
一方、書き込みデータのハッシュ値が第１ハッシュ値管理テーブルに登録されている場合には（ステップＳ２５のＹｅｓルート参照）、共通データ登録部１１は、作業用ハッシュ値管理テーブルを参照する。そして、共通データ登録部１１は、書き込みデータのハッシュ値が作業用ハッシュ値管理テーブルに未だ登録されていなければ、書き込みデータのハッシュ値を作業用ハッシュ値管理テーブルに登録する（ステップＳ２７）。
【０１２０】
共通データ登録部１１は、作業用ハッシュ値管理テーブルの全てのエントリにハッシュ値が登録されたかを判定する（ステップＳ２８）。
【０１２１】
全てのエントリにハッシュ値が登録されていない場合には（ステップＳ２８のＮｏルート参照）、処理はステップＳ２３へ戻る。
【０１２２】
一方、全てのエントリにハッシュ値が登録されている場合には（ステップＳ２８のＹｅｓルート参照）、共通データ登録部１１は、作業用ハッシュ値管理テーブルの内容を第１ハッシュ値管理テーブルにコピー（別言すれば、上書き）する。また、共通データ登録部１１は、作業用ハッシュ値管理テーブルを破棄する（ステップＳ２９）。そして、処理は終了する。
【０１２３】
次に、実施形態の一例としての第１ハッシュ値管理テーブルの作成動作（ステップＳ３１〜Ｓ３９）の第２の例を、図１６に示すフローチャートに従って説明する。図１６においては、アプリケーションを起動させてストレージシステム１００を動作させた状態での第１ハッシュ値管理テーブルの作成動作を説明する。
【０１２４】
共通データ登録部１１は、第１ハッシュ値管理テーブルと同じエントリ数を有する作業用ハッシュ値管理テーブルを作成する（ステップＳ３１）。ステップＳ３１の状態において、第１ハッシュ値管理テーブル及び作成された作業用ハッシュ値管理テーブルの各エントリは空である。
【０１２５】
共通データ登録部１１は、アプリケーションを起動させてストレージシステム１００を動作させる（ステップＳ３２）。
【０１２６】
第１データ入力部１２は、サーバ装置４から送信された書き込みデータを受け取る（ステップＳ３３）。
【０１２７】
第１判定部１３は、書き込みデータのハッシュ値を算出する（ステップＳ３４）。
【０１２８】
通信部１４は、書き込みデータの仮想アドレスから、書き込みデータを書き込むべき仮想ボリューム３０ａを特定する。そして、通信部１４は、特定した仮想ボリューム３０ａに対応する第２段の重複除去部１０ｂに対して、書き込みデータの仮想アドレスとブロックの内容とを通知する（ステップＳ３５）。
【０１２９】
第１判定部１３は、複数の第２段の重複除去部１０ｂの第２判定部１６による判定結果により、書き込みデータのハッシュ値について、複数の第２ハッシュ値管理テーブルに共通のエントリがあるかを判定する（ステップＳ３６）。
【０１３０】
書き込みデータのハッシュ値について複数の第２ハッシュ値管理テーブルに共通のエントリがない場合には（ステップＳ３６のＮｏルート参照）、処理はステップＳ３３へ戻る。
【０１３１】
一方、書き込みデータのハッシュ値について、複数の第２ハッシュ値管理テーブルに共通のエントリがある場合には（ステップＳ３６のＹｅｓルート参照）、共通データ登録部１１は、作業用ハッシュ値管理テーブルを参照する。そして、共通データ登録部１１は、書き込みデータのハッシュ値が作業用ハッシュ値管理テーブルに未だ登録されていなければ、書き込みデータのハッシュ値を作業用ハッシュ値管理テーブルに登録する（ステップＳ３７）。
【０１３２】
共通データ登録部１１は、作業用ハッシュ値管理テーブルの全てのエントリにハッシュ値が登録されたかを判定する（ステップＳ３８）。
【０１３３】
全てのエントリにハッシュ値が登録されていない場合には（ステップＳ３８のＮｏルート参照）、処理はステップＳ３３へ戻る。
【０１３４】
一方、全てのエントリにハッシュ値が登録されている場合には（ステップＳ３８のＹｅｓルート参照）、共通データ登録部１１は、作業用ハッシュ値管理テーブルの内容を第１ハッシュ値管理テーブルにコピー（別言すれば、上書き）する。また、共通データ登録部１１は、作業用ハッシュ値管理テーブルを破棄する（ステップＳ３９）。そして、処理は終了する。
【０１３５】
以下、図１７及び図１８を参照しながら、関連技術としてのハッシュ値管理テーブルの使用例と、実施形態の一例としてのハッシュ値管理テーブルの使用例とを比較する。
【０１３６】
図１７は関連技術としてのハッシュ値管理テーブルの使用例を説明する図であり、図１８は実施形態の一例としてのハッシュ値管理テーブルの使用例を説明する図である。
【０１３７】
ストレージ装置１において、２つのアプリケーションＡ及びアプリケーションＢが実行され、アプリケーションＡ及びアプリケーションＢがＬＵＮ０及びＬＵＮ１をそれぞれ使用する場合を考える。
【０１３８】
アプリケーションＡによって書き込まれるデータが時刻順に、Ｃ−０，Ａ−０，Ａ−１，Ｃ−１，Ａ−０，Ｃ−１，・・・であると仮定する。また、アプリケーションＢによって書き込まれるデータが時刻順に、Ｃ−１，Ｂ−０，Ｂ−１，Ｂ−２，Ｂ−３，Ｃ−０，Ｂ−３，Ｂ−４，Ｃ−１，・・・であると仮定する。なお、Ａで始まるデータはアプリケーションＡでのみ使用されるデータであり、Ｂで始まるデータはアプリケーションＢでのみ使用されるデータであり、Ｃで始まるデータはアプリケーションＡ及びアプリケーションＢの両方で使用されるデータとする。
【０１３９】
そして、アプリケーションＡ及びアプリケーションＢによって書き込まれるデータが混ざって、図１７及び図１８に示すように、以下の順番で記憶装置３０に書き込まれると仮定する。
【０１４０】
（１）Ｃ−０，（２）Ｃ−１，（３）Ａ−０，（４）Ａ−１，（５）Ｂ−０，（６）Ｂ−１，（７）Ｂ−２，（８）Ｂ−３，（９）Ｃ−１，（１０）Ａ−０，（１１）Ｃ−０，（１２）Ｂ−３，（１３）Ｃ−１，（１４）Ｂ−４，（１５）Ｃ−１，・・・
【０１４１】
図１７に示す例においては、関連技術において使用する１つのハッシュ値管理テーブルが示されている。図１７に示すハッシュ値管理テーブルは、６つのエントリを有しており、初期状態では全てのエントリが空である（符号Ａ１）。
【０１４２】
なお、実際のストレージ装置１においてはハッシュ値管理テーブルは例えば数十万個以上のエントリを有してよいが、本例においては説明のためにハッシュ値管理テーブルのエントリ数を少なくしている。
【０１４３】
図１７に示す関連技術におけるハッシュ値管理テーブルは、実施形態の一例としてのストレージ装置１によって使用されてもよい。
【０１４４】
以下、図１７を参照して、上記の（１）〜（１０）のデータが順番に記憶装置３０に書き込まれる際の、ハッシュ値管理テーブルの内容の変化をシミュレートする。記憶装置３０に新たなデータが書き込まれた際に書き込まれた新たなデータがハッシュ値管理テーブルに登録されていない場合には、最も使用されていないエントリの内容が破棄されて、内容が破棄されたエントリに新たなデータが登録されてよい。
【０１４５】
まず、上記（１）〜（６）のデータが順番に、ハッシュ値管理テーブルの６つのエントリに書き込まれる（符号Ａ２）。別言すれば、（１）Ｃ−０，（２）Ｃ−１，（３）Ａ−０，（４）Ａ−１，（５）Ｂ−０及び（６）Ｂ−１が順番に、ハッシュ値管理テーブルの６つのエントリに書き込まれる。
【０１４６】
（７）及び（８）のデータの書き込みがされると、ハッシュ値管理テーブルにおいて最も使われていないデータＣ−０及びＣ−１は、データＢ−２及びＢ−３でそれぞれ上書きされる（符号Ａ３）。
【０１４７】
（９）のデータの書き込みがされると、ハッシュ値管理テーブルにおいて最も使われていないデータＡ−０が破棄され、データＣ−１が登録される（符号Ａ４）。
【０１４８】
（１０）のデータの書き込みがされると、ハッシュ値管理テーブルにおいて最も使われていないデータＡ−１が破棄され、データＡ−０が登録される（符号Ａ５）。
【０１４９】
このように、関連技術におけるハッシュ値管理テーブルの使用例においては、上記（１）〜（１０）のデータの書き込みで、データＣ−１及びＡ−１がそれぞれ２回書き込まれたにもかかわらず、データの重複関係が見つけられていない。
【０１５０】
図１８に示す例においては、実施形態の一例において使用する１つの第１ハッシュ値管理テーブル及び２つの第２ハッシュ値管理テーブルが示されている。また、２つの第２ハッシュ値管理テーブルのうち、一方はＬＵＮ０に対応し、他方はＬＵＮ１に対応する。以下、ＬＵＮ０に対応する第２ハッシュ値管理テーブルを「ＬＵＮ０用第２ハッシュ値管理テーブル」といい、ＬＵＮ１に対応する第２ハッシュ値管理テーブルを「ＬＵＮ１用第２ハッシュ値管理テーブル」という場合がある。図１８に示す第１ハッシュ値管理テーブル及び第２ハッシュ値管理テーブルは、いずれも２つのエントリを有している。
【０１５１】
なお、実際のストレージ装置１においては第１ハッシュ値管理テーブル及び第２ハッシュ値管理テーブルは例えば数十万個以上のエントリを有してよいが、本例においては説明のためにハッシュ値管理テーブルのエントリ数を少なくしている。
【０１５２】
以下、図１８を参照して、上記の（１）〜（１０）のデータが順番に記憶装置３０に書き込まれる際の、ハッシュ値管理テーブルの内容の変化をシミュレートする。記憶装置３０に新たなデータが書き込まれた際に書き込まれた新たなデータが第１又は第２ハッシュ値管理テーブルに登録されていない場合には、最も使用されていないエントリの内容が破棄されて、内容が破棄されたエントリに新たなデータが登録されてよい。
【０１５３】
まず、初期状態において、第１ハッシュ値管理テーブルにはデータＣ−０及びＣ−１が登録されており、２つの第２ハッシュ値管理テーブルは空である（符号Ｂ１）。
【０１５４】
（１）及び（２）のデータが書き込まれても、データＣ−０及びＣ−１は第１ハッシュ値管理テーブルに登録されているため、いずれの第２ハッシュ値管理テーブルの内容も符号Ｂ１の状態から変化しない。
【０１５５】
（３）及び（４）のデータが書き込まれると、第１ハッシュ値管理テーブルが参照されるが、データＡ−０及びＡ−１は登録されていない。そこで、ＬＵＮ０用第２ハッシュ値管理テーブルが参照されるが、データＡ−０及びＡ−１は登録されていないため、ＬＵＮ０用第２ハッシュ値管理テーブルにデータＡ−０及びＡ−１が登録される（符号Ｂ２）。
【０１５６】
（５）及び（６）のデータが書き込まれると、第１ハッシュ値管理テーブルが参照されるが、データＢ−０及びＢ−１は登録されていない。そこで、ＬＵＮ１用第２ハッシュ値管理テーブルが参照されるが、データＢ−０及びＢ−１は登録されていないため、ＬＵＮ１用第２ハッシュ値管理テーブルにデータＢ−０及びＢ−１が登録される（符号Ｂ３）。
【０１５７】
（７）及び（８）のデータが書き込まれると、第１ハッシュ値管理テーブルが参照されるが、データＢ−２及びＢ−３は登録されていない。そこで、ＬＵＮ１用第２ハッシュ値管理テーブルが参照されるが、データＢ−２及びＢ−３は登録されていないため、データＢ−０及びＢ−１が破棄されて、ＬＵＮ１用第２ハッシュ値管理テーブルにデータＢ−２及びＢ−３が登録される（符号Ｂ４）。
【０１５８】
（９）のデータが書き込まれても、データＣ−１は第１ハッシュ値管理テーブルに登録されている（別言すれば、第１ハッシュ値管理テーブルで重複を発見できた）ため、いずれの第２ハッシュ値管理テーブルの内容も符号Ｂ４の状態から変化しない。
【０１５９】
（１０）のデータが書き込まれると、第１ハッシュ値管理テーブルが参照されるが、データＡ−０は登録されていない。そこで、ＬＵＮ０用第２ハッシュ値管理テーブルが参照され、データＡ−０が登録されている（別言すれば、第２ハッシュ値管理テーブルの重複が発見できた）ため、いずれの第２ハッシュ値管理テーブルの内容も符号Ｂ４の状態から変化しない。
【０１６０】
このように、実施形態の一例におけるハッシュ値管理テーブルの使用例においては、上記（１）〜（１０）のデータの書き込みで、Ｃ−１及びＡ−１がそれぞれ２回書き込まれて、重複関係を発見できた。
【０１６１】
例えば、動画や画像を書き込むアプリケーションでは、上記のアプリケーションＢのように重複しない大量のデータを書き込むため、図１８の符号Ｂ１〜Ｂ４に示した状況が頻繁に発生する可能性がある。
【０１６２】
図１７に示した関連技術としてのハッシュ値管理テーブルの使用例と、図１８に示した実施形態の一例としてのハッシュ値管理テーブルの使用例との間で、上述のような重複データの発見に相違が発生した原因の一例としては、次のようなことが考えられる。
【０１６３】
第一に、アプリケーションＢが重複しないデータを連続して大量に書き込んだため、関連技術としてのハッシュ値管理テーブルでは、それまでにハッシュ値管理テーブルに登録されていたエントリが書き換えられてしまったということである。
【０１６４】
第二に、関連技術としてのハッシュ値管理テーブルでは、全てのアプリケーションの書き込みを１つのハッシュ値管理テーブルで管理する。そのため、アプリケーションＢの書き込みによって、アプリケーションＡの書き込みにより登録されたエントリが影響を受けて消去されてしまったということである。
【０１６５】
例えば、第一の原因は関連技術としてのハッシュ値管理テーブルでデータＣ−１の重複が発見できなかった原因であり、第二の原因は関連技術としてのハッシュ値管理テーブルでデータＡ−１の重複が発見できなかった原因である。
【０１６６】
実施形態の一例としての第１及び第２ハッシュ値管理テーブルを使用することにより、ＬＵＮ間に亘って使われるデータのエントリがハッシュ値管理テーブルから消去されることを防止できる。また、或るＬＵＮで使われるデータのハッシュ値管理テーブルにおけるエントリが、他のＬＵＮで使われるデータの影響で消去されることを防止できる。
【０１６７】
〔Ａ−３〕まとめ
上述した実施形態の一例としてのストレージ装置１によれば、例えば、以下の効果を奏することができる。
【０１６８】
第１判定部１３は、入力データが複数の仮想ボリューム３０ａに亘って重複して書き込まれているかを判定する。また、第２判定部１６は、第１判定部１３によって入力データが重複して書き込まれていないと判定された場合に、第２ハッシュ値管理テーブルを用いて、入力データが対応する仮想ボリューム３０ａに書き込まれているかを判定する。そして、個別データ登録部１７は、第２判定部１６によって入力データが対応する仮想ボリューム３０ａに書き込まれていないと判定された場合に、第２ハッシュ値管理テーブルに入力データについての情報を登録する。
【０１６９】
これにより、重複除去に関する情報をメモリに効率的に格納することができる。
【０１７０】
書き込み部１８は、個別データ登録部１７によって登録された情報に係る入力データを、対応する仮想ボリューム３０ａに書き込む。
【０１７１】
書き込み部１８は、入力データが複数の仮想ボリューム３０ａに亘って重複して書き込まれている場合には、第２判定部１６による判定と個別データ登録部１７による登録とを行なわずに、入力データを、対応する仮想ボリューム３０ａに書き込む。
【０１７２】
これらにより、重複除去を行ないつつ、必要なデータを記憶させることができるため、ストレージ装置１の効率を向上させることができる。
【０１７３】
第１判定部１３は、第１ハッシュ値管理テーブルを用いて判定を行なう。
【０１７４】
これにより、第１ハッシュ値管理テーブルと第２ハッシュ値管理テーブルとの２つのハッシュ値管理テーブルを使用することで、重複するブロックの情報をブロックの特性に合わせて効率的に管理することができる。そして、所定の領域サイズにおいて高い重複除去率を達成することができる。
【０１７５】
複数の仮想ボリューム３０ａに亘って重複して書き込まれるデータは、ＯＳによって使用されるデータである。また、複数の仮想ボリューム３０ａのいずれかに書き込まれるデータは、個別のアプリケーションによって使用されるデータである。
【０１７６】
これにより、データの使用目的に合わせた、効率的な重複除去を行なうことができる。
【０１７７】
共通データ登録部１１は、アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を第１ハッシュ値管理テーブルに登録することによって、第１ハッシュ値管理テーブルを生成する。
【０１７８】
共通データ登録部１１は、アプリケーションが起動している状態において、複数の仮想ボリューム３０ａに亘って重複して書き込まれているデータについての情報を第１ハッシュ値管理テーブルに登録することによって、第１ハッシュ値管理テーブルを生成する。
【０１７９】
これらにより、ストレージシステム１００で共通に使用されるデータについての情報を、適切に第１ハッシュ値管理テーブルに登録することができる。
【０１８０】
〔Ｂ〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０１８１】
〔Ｃ〕付記
（付記１）
第１の仮想ボリュームと第２の仮想ボリュームとを展開するストレージ装置に備えられる制御装置であって、
第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているかを判定する第１判定部と、
前記第１判定部によって前記第１のデータが重複して書き込まれていないと判定された場合に、前記第１又は第２の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第１のデータが前記第１又は第２の仮想ボリュームに書き込まれているかを判定する第２判定部と、
前記第２判定部によって前記第１のデータが前記第１及び第２の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第１のデータについての情報を登録する個別データ登録部と、
を備える、制御装置。
【０１８２】
（付記２）
前記個別データ登録部によって登録された前記情報に係る前記第１のデータを、前記第１又は第２仮想ボリュームに書き込む書き込み部を更に備える、
付記１に記載の制御装置。
【０１８３】
（付記３）
前記ストレージ装置は、前記第１及び第２の仮想ボリュームとは異なる第３の仮想ボリュームを更に展開し、
前記第１判定部によって前記第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれていると判定された場合には、前記第２判定部による前記判定と前記個別データ登録部による前記登録とを行なわずに、前記第１のデータを、前記第１のデータの格納先である前記第３の仮想ボリュームに書き込む書き込み部を更に備える、
付記１に記載の制御装置。
【０１８４】
（付記４）
前記第１判定部は、前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているデータを示す共通データ情報を用いて、前記判定を行なう、
付記１〜３のいずれか１項に記載の制御装置。
【０１８５】
（付記５）
前記第１及び第２の仮想ボリュームに亘って重複して書き込まれるデータは、前記ストレージ装置の全体の動作を制御するオペレーティングシステムによって使用されるデータであり、
前記第１及び第２の仮想ボリュームのいずれか一方に書き込まれるデータは、前記ストレージ装置において動作する個別のアプリケーションによって使用されるデータである、
付記４に記載の制御装置。
【０１８６】
（付記６）
前記アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する共通データ登録部を更に備える、
付記５に記載の制御装置。
【０１８７】
（付記７）
前記アプリケーションが起動している状態において、前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する共通データ登録部を更に備える、
付記５に記載の制御装置。
【０１８８】
（付記８）
第１の仮想ボリュームと第２の仮想ボリュームとを展開するストレージ装置であって、
第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているかを判定する第１判定部と、
前記第１判定部によって前記第１のデータが重複して書き込まれていないと判定された場合に、前記第１又は第２の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第１のデータが前記第１又は第２の仮想ボリュームに書き込まれているかを判定する第２判定部と、
前記第２判定部によって前記第１のデータが前記第１及び第２の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第１のデータについての情報を登録する個別データ登録部と、
を備える、ストレージ装置。
【０１８９】
（付記９）
前記個別データ登録部によって登録された前記情報に係る前記第１のデータを、前記第１又は第２仮想ボリュームに書き込む書き込み部を更に備える、
付記８に記載のストレージ装置。
【０１９０】
（付記１０）
当該ストレージ装置は、前記第１及び第２の仮想ボリュームとは異なる第３の仮想ボリュームを更に展開し、
前記第１判定部によって前記第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれていると判定された場合には、前記第２判定部による前記判定と前記個別データ登録部による前記登録とを行なわずに、前記第１のデータを、前記第１のデータの格納先である前記第３の仮想ボリュームに書き込む書き込み部を更に備える、
付記８に記載のストレージ装置。
【０１９１】
（付記１１）
前記第１判定部は、前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているデータを示す共通データ情報を用いて、前記判定を行なう、
付記８〜１０のいずれか１項に記載のストレージ装置。
【０１９２】
（付記１２）
前記第１及び第２の仮想ボリュームに亘って重複して書き込まれるデータは、当該ストレージ装置の全体の動作を制御するオペレーティングシステムによって使用されるデータであり、
前記第１及び第２の仮想ボリュームのいずれか一方に書き込まれるデータは、当該ストレージ装置において動作する個別のアプリケーションによって使用されるデータである、
付記１１に記載のストレージ装置。
【０１９３】
（付記１３）
前記アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する共通データ登録部を更に備える、
付記１２に記載のストレージ装置。
【０１９４】
（付記１４）
前記アプリケーションが起動している状態において、前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する共通データ登録部を更に備える、
付記１２に記載のストレージ装置。
【０１９５】
（付記１５）
第１の仮想ボリュームと第２の仮想ボリュームとを展開するストレージ装置に備えられるコンピュータに、
第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているかを判定し、
前記第１のデータが重複して書き込まれていないと判定された場合に、前記第１又は第２の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第１のデータが前記第１又は第２の仮想ボリュームに書き込まれているかを判定し、
前記第１のデータが前記第１及び第２の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第１のデータについての情報を登録する、
処理を実行させる、データ管理プログラム。
【０１９６】
（付記１６）
前記登録された前記情報に係る前記第１のデータを、前記第１又は第２仮想ボリュームに書き込む、
処理を前記コンピュータに実行させる、付記１５に記載のデータ管理プログラム。
【０１９７】
（付記１７）
前記ストレージ装置は、前記第１及び第２の仮想ボリュームとは異なる第３の仮想ボリュームを更に展開し、
前記第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれている場合には、前記個別データ情報を用いた前記判定と前記個別データ情報への前記登録とを行なわずに、前記第１のデータを、前記第１のデータの格納先である前記第３の仮想ボリュームに書き込む、
処理を前記コンピュータに実行させる、付記１５に記載のデータ管理プログラム。
【０１９８】
（付記１８）
前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているデータを示す共通データ情報を用いて、前記判定を行なう、
処理を前記コンピュータに実行させる、付記１５〜１７のいずれか１項に記載のデータ管理プログラム。
【０１９９】
（付記１９）
前記第１及び第２の仮想ボリュームに亘って重複して書き込まれるデータは、前記ストレージ装置の全体の動作を制御するオペレーティングシステムによって使用されるデータであり、
前記第１及び第２の仮想ボリュームのいずれか一方に書き込まれるデータは、前記ストレージ装置において動作する個別のアプリケーションによって使用されるデータである、
付記１８に記載のデータ管理プログラム。
【０２００】
（付記２０）
前記アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する、
処理を前記コンピュータに実行させる、付記１９に記載のデータ管理プログラム。
【０２０１】
（付記２１）
前記アプリケーションが起動している状態において、前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する、
処理を前記コンピュータに実行させる、付記１９に記載のデータ管理プログラム。
【０２０２】
（付記２２）
第１の仮想ボリュームと第２の仮想ボリュームとを展開するストレージ装置において、
第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているかを判定し、
前記第１のデータが重複して書き込まれていないと判定された場合に、前記第１又は第２の仮想ボリュームに書き込まれているデータを示す個別データ情報を用いて、前記第１のデータが前記第１又は第２の仮想ボリュームに書き込まれているかを判定し、
前記第１のデータが前記第１及び第２の仮想ボリュームのいずれにも書き込まれていないと判定された場合に、前記個別データ情報に前記第１のデータについての情報を登録する、
データ管理方法。
【０２０３】
（付記２３）
前記登録された前記情報に係る前記第１のデータを、前記第１又は第２仮想ボリュームに書き込む、
付記２２に記載のデータ管理方法。
【０２０４】
（付記２４）
前記ストレージ装置は、前記第１及び第２の仮想ボリュームとは異なる第３の仮想ボリュームを更に展開し、
前記第１のデータが前記第１及び第２の仮想ボリュームに亘って重複して書き込まれている場合には、前記個別データ情報を用いた前記判定と前記個別データ情報への前記登録とを行なわずに、前記第１のデータを、前記第１のデータの格納先である前記第３の仮想ボリュームに書き込む、
付記２２に記載のデータ管理方法。
【０２０５】
（付記２５）
前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているデータを示す共通データ情報を用いて、前記判定を行なう、
付記２２〜２４のいずれか１項に記載のデータ管理方法。
【０２０６】
（付記２６）
前記第１及び第２の仮想ボリュームに亘って重複して書き込まれるデータは、前記ストレージ装置の全体の動作を制御するオペレーティングシステムによって使用されるデータであり、
前記第１及び第２の仮想ボリュームのいずれか一方に書き込まれるデータは、前記ストレージ装置において動作する個別のアプリケーションによって使用されるデータである、
付記２５に記載のデータ管理方法。
【０２０７】
（付記２７）
前記アプリケーションが起動していない状態において、重複して書き込まれるデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する、
付記２６に記載のデータ管理方法。
【０２０８】
（付記２８）
前記アプリケーションが起動している状態において、前記第１及び第２の仮想ボリュームに亘って重複して書き込まれているデータについての情報を前記共通データ情報に登録することによって、前記共通データ情報を生成する、
付記２６に記載のデータ管理方法。
【符号の説明】
【０２０９】
１００  ストレージシステム
１      ストレージ装置
１ａ    制御装置
１０    ＣＰＵ
１０ａ  第１段の重複除去部
１０ｂ  第２段の重複除去部
１１    共通データ登録部
１２    第１データ入力部
１３    第１判定部
１４    通信部
１５    第２データ入力部
１６    第２判定部
１７    個別データ登録部
１８    書き込み部
２０    メモリ
３０    記憶装置
３０ａ  仮想ボリューム
４      サーバ装置
【図１】
0006572775.tif 000002
【図２】
0006572775.tif 000003
【図３】
0006572775.tif 000004
【図４】
0006572775.tif 000005
【図５】
0006572775.tif 000006
【図６】
0006572775.tif 000007
【図７】
0006572775.tif 000008
【図８】
0006572775.tif 000009
【図９】
0006572775.tif 000010
【図１０】
0006572775.tif 000011
【図１１】
0006572775.tif 000012
【図１２】
0006572775.tif 000013
【図１３】
0006572775.tif 000014
【図１４】
0006572775.tif 000015
【図１５】
0006572775.tif 000016
【図１６】
0006572775.tif 000017
【図１７】
0006572775.tif 000018
【図１８】
0006572775.tif 000019