(57)【要約】【課題】  重複排除の効果を高めることができるストレージシステムを実現する。【解決手段】  実施形態によれば、ストレージシステムは、複数のノードと第１制御部とを具備する。複数のノードは、各々が一つ以上の物理ディスクを備える。第１制御部は、前記複数のノードから第１ノードを選択する。前記第１ノードは、一つ以上の第１物理ディスクと、前記第１ノードにおける重複排除に関する第１テーブルと、前記一つ以上の第１物理ディスクに対して設定された一つ以上の論理ディスクの各々における重複排除に関する一つ以上の第２テーブルとを用いて、前記一つ以上の論理ディスクから第１論理ディスクを選択する第２制御部とを具備する。前記第１制御部は、前記複数のノードから前記第１ノードを除いた一つ以上のノードから第２ノードを選択し、前記第１論理ディスク内のデータを前記第２ノードに移動する。【選択図】図１
2019074912.tif 000002
【特許請求の範囲】
【請求項１】
各々が一つ以上の物理ディスクを備える複数のノードと、
前記複数のノードから第１ノードを選択する第１制御部とを具備し、
前記第１ノードは、
一つ以上の第１物理ディスクと、
前記第１ノードにおける重複排除に関する第１テーブルと、前記一つ以上の第１物理ディスクに対して設定された一つ以上の論理ディスクの各々における重複排除に関する一つ以上の第２テーブルとを用いて、前記一つ以上の論理ディスクから第１論理ディスクを選択する第２制御部とを具備し、
前記第１制御部は、前記複数のノードから前記第１ノードを除いた一つ以上のノードから第２ノードを選択し、前記第１論理ディスク内のデータを前記第２ノードに移動するストレージシステム。
【請求項２】
前記第１制御部は、
前記第１テーブルと、前記一つ以上の第２テーブルの内の前記第１論理ディスクに対応するテーブルと、前記一つ以上のノードの各々における重複排除に関する一つ以上の第３テーブルとを用いて、前記ストレージシステム全体でデータ格納に使用される物理容量が削減されるように、前記第２ノードを選択する請求項１記載のストレージシステム。
【請求項３】
前記第１ノードは、前記複数のノードの内で、リードおよびライトの少なくとも一方に関する性能が最も低いノード、または空き領域のサイズもしくは割合が最も小さいノードである請求項１記載のストレージシステム。
【請求項４】
前記第２制御部は、
前記第１テーブルと前記一つ以上の第２テーブルとを用いて、前記第１ノードにおける重複排除に対する、前記一つ以上の論理ディスクの各々の貢献度を算出し、
前記一つ以上の論理ディスクの各々の貢献度を用いて、前記一つ以上の論理ディスクの内で、前記第１ノードにおける重複排除に対する貢献度が最も低い前記第１論理ディスクを選択する請求項１記載のストレージシステム。
【請求項５】
前記第１テーブルは、前記一つ以上の第１物理ディスク内の、第１データが格納されている第１物理アドレスと、前記一つ以上の論理ディスク内の、前記第１物理アドレスに関連付けられた論理アドレスの総数とを含み、
前記一つ以上の第２テーブルの内の第４テーブルは、前記第１論理ディスクに対応し、前記第１論理ディスク内の、前記第１物理アドレスに関連付けられた論理アドレスの数を含み、
前記第１テーブルに含まれる前記論理アドレスの総数と、前記第４テーブルに含まれる前記論理アドレスの数とが等しい場合に算出される前記第１論理ディスクの前記貢献度は、前記第１テーブルに含まれる前記論理アドレスの総数と、前記第４テーブルに含まれる前記論理アドレスの数とが異なる場合に算出される前記第１論理ディスクの前記貢献度よりも低い請求項４記載のストレージシステム。
【請求項６】
前記第１制御部は、前記第２ノードに第２論理ディスクを新たに作成させ、前記第１ノードの前記第１論理ディスクから全てのデータを読み出し、前記読み出された全てのデータを前記第２論理ディスクに格納し、前記第１ノードに前記第１論理ディスク内の全てのデータを削除させる請求項１記載のストレージシステム。
【請求項７】
前記第１制御部は、前記一つ以上の第１物理ディスクを結合することによりストレージプールを作成し、
前記一つ以上の論理ディスクは、前記ストレージプールに対して設定される請求項１記載のストレージシステム。
【請求項８】
各々が一つ以上の物理ディスクを備える複数のノードから第１ノードを選択し、
前記第１ノードにおける重複排除に関する第１テーブルと、前記第１ノード内の一つ以上の第１物理ディスクに対して設定された一つ以上の論理ディスクの各々における重複排除に関する一つ以上の第２テーブルとを用いて、前記一つ以上の論理ディスクから、第１論理ディスクを選択し、
前記複数のノードから前記第１ノードを除いた一つ以上のノードから第２ノードを選択し、前記第１論理ディスク内のデータを前記第２ノードに移動する制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データを格納するストレージシステムおよび制御方法に関する。
【背景技術】
【０００２】
ストレージ装置では重複排除の技術が利用されることがある。この技術は、ストレージ装置に保存されるデータから重複するデータを検知し、それを排除する。これにより、ストレージ装置を効率良く利用することができる。
【０００３】
重複排除の処理では、データがチャンク単位に分割され、チャンク同士が比較される。この比較には、例えば、チャンク毎のハッシュ値が用いられ、二つのチャンクのハッシュ値が同一であれば、これら二つのチャンクが同一のデータであると判定される。
【０００４】
ストレージ装置内の既存のチャンクと同一のデータであると判定されたあるチャンクは、ストレージ装置に書き込まれない、あるいはストレージ装置から削除される。そして、そのチャンクのデータ自体をストレージ装置に格納する代わりに、既存のチャンクへの参照が作成される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１７９０９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データセンターのように膨大なデータが扱われるストレージシステムにおいて、全てのデータ（チャンク）に対して重複排除の処理を施すことは、必要な時間、ＣＰＵ資源等といったコストの点で現実的ではない。そのため、ストレージシステムを複数のグループ（例えば、ノード単位）に分割し、各グループ内で重複排除を行う場合がある。
【０００７】
しかし、グループ内に類似度の低いデータが多く格納される場合には重複排除を行うことによる効果が低く、ストレージの使用量の削減が十分に達成されない可能性がある。そのため、重複排除の効果を高めることができる新たな機能の実現が必要とされる。
【０００８】
本発明は、重複排除の効果を高めることができるストレージシステムおよび制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
実施形態によれば、ストレージシステムは、複数のノードと第１制御部とを具備する。複数のノードは、各々が一つ以上の物理ディスクを備える。第１制御部は、前記複数のノードから第１ノードを選択する。前記第１ノードは、一つ以上の第１物理ディスクと、前記第１ノードにおける重複排除に関する第１テーブルと、前記一つ以上の第１物理ディスクに対して設定された一つ以上の論理ディスクの各々における重複排除に関する一つ以上の第２テーブルとを用いて、前記一つ以上の論理ディスクから第１論理ディスクを選択する第２制御部とを具備する。前記第１制御部は、前記複数のノードから前記第１ノードを除いた一つ以上のノードから第２ノードを選択し、前記第１論理ディスク内のデータを前記第２ノードに移動する。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態に係るストレージシステムを含む情報処理システムの構成を示す図。
【図２】第１実施形態のストレージシステムに設けられるノードのシステム構成を示すブロック図。
【図３】図２のノード内の論理ディスクと物理ディスクとの間のアドレスのマッピングの例を示す図。
【図４】図２のノードによって用いられる論理−物理マップテーブルの一構成例を示す図。
【図５】図２のノードによって用いられるノード重複排除テーブルの一構成例を示す図。
【図６】図２のノードによって用いられる論理ディスク重複排除テーブルの一構成例を示す図。
【図７】図２のノードによって貢献度が算出される例を示す図。
【図８】図２のノードによって貢献度が算出される別の例を示す図。
【図９】図２のノードによって算出される論理ディスク毎の貢献度の例を示す図。
【図１０】第１実施形態のストレージシステムに設けられる中央コントローラによって、移動先候補のノードにおいて増加するデータ格納のための物理容量が算出される例を示す図。
【図１１】図１０の中央コントローラによって、移動先候補のノードにおいて増加するデータ格納のための物理容量が算出される別の例を示す図。
【図１２】図２のノードによって実行されるリード処理の手順の例を示すフローチャート。
【図１３】図２のノードによって実行される削除処理の手順の例を示すフローチャート。
【図１４】図２のノードによって実行されるライト処理の手順の例を示すフローチャート。
【図１５】図１０の中央コントローラによって実行される移動制御処理の手順の例を示すフローチャート。
【図１６】図１０の中央コントローラによって実行されるデータ移動処理の手順の例を示すフローチャート。
【図１７】図２のノードによって実行される論理ディスク選択処理の手順の例を示すフローチャート。
【図１８】図２のノードによって実行される貢献度算出処理の手順の例を示すフローチャート。
【図１９】第２実施形態に係るストレージシステムを含む情報処理システムの構成を示す図。
【図２０】第２実施形態のストレージシステムに設けられるノードのシステム構成を示すブロック図。
【発明を実施するための形態】
【００１１】
以下、実施の形態について図面を参照して説明する。
【００１２】
（第１実施形態）
まず、図１を参照して、第１実施形態に係るストレージシステムを含む情報処理システム１の構成を説明する。
【００１３】
このストレージシステムは、例えば、分散ストレージシステムとして実現され得る。このストレージシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成されたストレージとしてそれぞれ機能する複数のノード４と、これらノード４を管理する中央コントローラ３とを備える。各ノード４は、ストレージシステム全体のデータ格納領域を任意に分割した領域を管理する。
【００１４】
各ノード４は、一つ以上の物理ディスクを備える。この物理ディスクは、データを格納可能な不揮発性メモリを備え、例えば、ハードディスクドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＳＤ）等として実現される。各ノード４は、例えば、筐体、ラック、あるいはフロアのような特定の範囲内に配置される多数の物理ディスクを含み得る。また、各ノード４では、一つ以上の物理ディスクの記憶領域を論理的に分割または結合することにより、一つ以上の論理ディスク（論理ユニット：ＬＵ）が設定（作成）される。
【００１５】
図１に示す例では、ストレージシステムにＮ個のノードが設けられている。
【００１６】
第１ノード４Ａは、第１物理ディスク４７１Ａと第２物理ディスク４７２Ａとを備える。そして、第１ノード４Ａでは、これら物理ディスク４７１Ａ，４７２Ａの領域を論理的に分割または結合することにより、第１論理ディスク４３１Ａと第２論理ディスク４３２Ａとが作成されている。
【００１７】
第２ノード４Ｂは、第１物理ディスク４７１Ｂと第２物理ディスク４７２Ｂとを備える。そして、第２ノード４Ｂでは、これら物理ディスク４７１Ｂ，４７２Ｂの領域を論理的に分割または結合することにより、第１論理ディスク４３１Ｂと第２論理ディスク４３２Ｂとが作成されている。
【００１８】
また、第Ｎノード４Ｃは、第１物理ディスク４７１Ｃと第２物理ディスク４７２Ｃとを備える。そして、第Ｎノード４Ｃでは、これら物理ディスク４７１Ｃ，４７２Ｃの領域を論理的に分割または結合することにより、第１論理ディスク４３１Ｃと第２論理ディスク４３２Ｃとが作成されている。
【００１９】
ここでは、各ノード４Ａ，４Ｂ，４Ｃに、二つの物理ディスクと二つの論理ディスクとが設けられる例を示したが、各ノード４Ａ，４Ｂ，４Ｃには、任意の数の物理ディスクと、任意の数の論理ディスクとを設けることができる。
【００２０】
情報処理システム１は、クライアント２と中央コントローラ３と複数のノード４とによって構成される。クライアント２と中央コントローラ３と各ノード４とは、ケーブルまたはネットワーク５を介して相互に接続されている。クライアント２は、ノード４にアクセスする情報処理装置（コンピューティングデバイス）である。
【００２１】
クライアント２および中央コントローラ３は、各ノード４に対して、データの書き込み、読み出し、および削除のような各種のアクセスを行うことができる。
【００２２】
データの書き込み、読み出し、および削除を行う場合に、クライアント２および中央コントローラ３から各ノード４に送信される情報は、例えば、以下の通りである。  
【００２３】
（１）読み出し（リード要求）：  論理ディスク番号および論理アドレス  
（２）書き込み（ライト要求）：  論理ディスク番号、論理アドレス、およびデータ  
（３）削除（削除要求）：  論理ディスク番号および論理アドレス  
なお、論理アドレスには、例えば、論理ブロックアドレス（ＬＢＡ）が用いられる。
【００２４】
また、クライアント２から各ノード４に対して、データの書き込み、読み出し、および削除を行う場合には、例えば、以下のいずれかの方法が用いられる。  
【００２５】
（１）クライアント２は、中央コントローラ３に対して、対象のデータがどのノード４の論理ディスクに存在しているのか、あるいはどのノード４の論理ディスクに保存すべきかを問い合わせ、以降は、対象のノード４の論理ディスクに直接、読み出し、書き込み、または削除を行う。  
【００２６】
（２）クライアント２は、対象のデータがどのノード４の論理ディスクに存在しているのか、あるいはどのノード４の論理ディスクに保存すべきかを、当該クライアント２内で決定し、対象のノード４の論理ディスクに直接、読み出し、書き込み、または削除を行う。  
【００２７】
（３）クライアント２は、中央コントローラ３内の論理ディスクに対して、対象のデータの読み出し、書き込み、または削除を行う。その後、中央コントローラ３は、対象のノード４の論理ディスクにその対象のデータの読み出し、書き込み、または削除を行い、その結果をクライアント２に返す。
【００２８】
いずれの場合においても、中央コントローラ３は、あるデータがどのノード４のどの論理ディスク（ＬＵ）に存在しているか、あるいはどのノード４に保存されるべきかを計算するアルゴリズム、あるいはその情報を含むテーブルを有している。
【００２９】
また、ノード４の各々は、そのノード４内に重複したデータが格納されないように制御する重複排除機能を有する。各ノード４は、重複排除機能により、クライアント２（または中央コントローラ３）から新たに受信された書き込みデータと一致するデータ（以下、重複データとも称する）が既に物理ディスクに格納されている場合、この書き込みデータを物理ディスクに書き込まず、代わりに、この書き込みデータの論理アドレスに、重複データが格納されている物理アドレスを関連付ける。これにより、ノード内に重複したデータが格納されず、したがって重複排除を実現することができる。なお、本ストレージシステムでは、各ノード４内で重複排除のための処理が行われるが、複数のノード４に跨った重複排除処理は行われないことを想定する。
【００３０】
重複排除機能による制御の対象は、例えば、チャンク単位のデータである。チャンクのサイズには任意のサイズを用いることができ、例えば４ｋＢである。各ノード４は、例えば、クライアント２から新たに受信された書き込みデータをチャンク単位に分割し、分割されたチャンク単位の書き込みデータに対して、上述した重複排除のための処理を行う。
【００３１】
このように、ノード４の各々では、重複排除処理によりストレージ効率が向上する。しかし、各ノード４に類似度が低いデータが多く格納される場合には、重複排除を行うことによる効果が低く、ストレージ効率が十分に向上しない可能性がある。
【００３２】
そのため、本実施形態では、あるノード４において重複排除に対する貢献度が低い論理ディスクを別のノード４に移動することにより、重複排除の効果を高め、ストレージシステム全体でのストレージ効率を向上させる。中央コントローラ３とノード４とは、連携して、移動元のノードから移動対象の論理ディスクを選択し、その移動対象の論理ディスクを移動する移動先のノードを選択し、移動対象の論理ディスクを移動元のノードから移動先のノードに移動するように構成される。なお、中央コントローラ３とノード４とは、複数の移動先候補ノードの各々に移動対象の論理ディスクを移動した場合に増加するデータ格納のための物理容量を試算し、重複排除の効果がより高くなる移動先候補のノードを移動先のノードとして選択することができる。これにより、ストレージシステム全体で重複排除の効果を高めることができる。
【００３３】
中央コントローラ３は、ストレージシステム全体でのストレージ効率を向上させるように、各ノード４における重複排除を管理する。中央コントローラ３は、管理部３１と管理テーブル３２とを備える。中央コントローラ３は、例えば、ＣＰＵ、主メモリ、および不揮発性メモリを備え、ＣＰＵが不揮発性メモリから主メモリにロードされた特定のプログラムを実行することにより、管理部３１として機能し得る。また、中央コントローラ３は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現されていてもよい。
【００３４】
管理部３１は、ストレージシステム全体でのストレージ効率を向上させるために、あるノード４に含まれる論理ディスクを別のノード４に移動する処理を行う。
【００３５】
より具体的には、管理部３１は、ストレージシステム内の複数のノード４から、移動対象となる論理ディスクの移動元のノード（以下、移動元ノードとも称する）を選択し、その移動元ノードに、移動対象の論理ディスクを選択させる。管理部３１は、性能と容量の少なくとも一方に余裕がないノードを移動元ノードとして選択する。管理部３１は、例えば、複数のノード４の内で、リードおよびライトの少なくとも一方に関する性能が最も低いノード、または空き領域のサイズもしくは割合が最も小さいノードを移動元ノードとして選択する。性能は、例えば、リード性能とライト性能の少なくとも一方であり、物理ディスクに対するリード時間やライト時間を統計処理した値で表される。また、容量は、物理ディスクの空き領域の大きさや割合に基づく値で表される。管理部３１は、性能と容量の少なくとも一方を表す値が最も低いノードを移動元ノードとして選択するようにしてもよい。このような移動元ノードの選択により、ノード４間で容量または性能を平均化することができる。
【００３６】
管理部３１は、移動元ノードを除く複数のノード４（以下、移動先候補ノードとも称する）から、移動対象の論理ディスクが移動される移動先のノード（以下、移動先ノードとも称する）を選択する。具体的には、管理部３１は、移動対象の論理ディスクがいずれかの移動先候補ノードに移動されることによって、移動元ノードで削減されるデータ格納のための物理容量（削減量）を算出する。また、管理部３１は、移動対象の論理ディスクが移動先候補ノードに移動されることによって、当該移動先候補ノードで増加するデータ格納のための物理容量（増加量）を、移動先候補ノード毎に算出する。管理部３１は、算出された削減量と増加量とを用いて、論理ディスクの移動によるストレージシステム全体での削減量が最大となる移動先候補ノードを、移動先ノードとして選択する。
【００３７】
そして、管理部３１は、移動元ノードから移動先ノードに、移動対象の論理ディスク内の全データを移動するための処理を行う。この処理に応じて、移動元ノードでは、移動対象の論理ディスク内の全データが削除され、移動先ノードでは、それら全データが格納される論理ディスクが新たに作成される。
【００３８】
また、管理テーブル３２は、あるデータが、どのノードのどの論理ディスク（ＬＵ）に存在しているか、あるいはどのノードに保存されるべきかを管理する。したがって、管理部３１は、この管理テーブル３２を用いることにより、あるデータが、どのノードのどの論理ディスクに存在しているか、あるいはどのノードに保存されるべきかを決定することができる。なお、管理テーブル３２を用いる代わりに、管理部３１に、あるデータが、どのノードのどの論理ディスクに存在しているか、あるいはどのノードに保存されるべきかを決定するためのアルゴリズムが組み込まれていてもよい。
【００３９】
図２はノード４（各ノード４Ａ，４Ｂ，４Ｃ）の構成を示す。ノード４は、ノードコントローラ４１と一つ以上の物理ディスク４７とを備える。ノードコントローラ４１は、ＳｏＣのような回路によって実現され得る。ノード４は主メモリ４２を備えていてもよい。主メモリ４２は、揮発性メモリであるランダムアクセスメモリ、例えば、ＤＲＡＭである。
【００４０】
ノードコントローラ４１は、中央コントローラ３、クライアント２および他のノードの各々との間で各種の要求（コマンド）やデータを入出力（送受信）するための通信機能を有している。ノードコントローラ４１は、データの書き込み、読み出しおよび削除のような各種のアクセスのために物理ディスク４７を制御する。また、ノードコントローラ４１は、クライアント２や中央コントローラ３から受信されたデータのバッファや、物理ディスク４７から読み出されたデータのキャッシュ等のために、主メモリ４２を制御する。
【００４１】
図２に示すように、主メモリ４２には、アドレス変換テーブルとして機能する論理−物理マップテーブル４２１のキャッシュ領域が設けられている。論理−物理マップテーブル４２１は、論理ディスク４３の論理アドレスそれぞれと、物理ディスク４７の物理アドレスそれぞれとの間のマッピングを管理する。
【００４２】
主メモリ４２にはさらに、処理中に用いられる各種の値や、各種のテーブル（例えば、ノード重複排除テーブル４２２と論理ディスク重複排除テーブル４２３）の格納領域が設けられてもよい。ノード重複排除テーブル４２２は、ノード４毎に設けられ、各ノード４における重複排除を管理する。論理ディスク重複排除テーブル４２３は、論理ディスク４３毎に設けられ、各論理ディスク４３における重複排除を管理する。
【００４３】
図３は、重複排除機能を有するノード４における、論理ディスク４３１，４３２にそれぞれ対応する論理アドレス空間６１，６２と、物理ディスク４７１，４７２に対応する物理アドレス空間６５との関係を示す。
【００４４】
図３に示す例では、第１論理ディスク４３１に対応する第１論理アドレス空間６１において、第１論理アドレス６１１および第３論理アドレス６１３の各々に第１データが論理的に格納され、第２論理アドレス６１２に第２データが論理的に格納され、第４論理アドレス６１４に第３データが論理的に格納されている。第２論理ディスク４３２に対応する第２論理アドレス空間６２において、第１論理アドレス６２１および第４論理アドレス６２４の各々に第１データが論理的に格納され、第２論理アドレス６２２に第２データが論理的に格納され、第３論理アドレス６２３に第４データが論理的に格納されている。
【００４５】
また、物理ディスク４７１，４７２に対応する物理アドレス空間６５では、第１物理アドレス６５１に第１データが格納され、第２物理アドレス６５２に第２データが格納され、第３物理アドレス６５３に第３データが格納され、第４物理アドレスに６５４に第４データが格納されている。
【００４６】
上述した重複排除機能により、第１論理アドレス空間６１における第１論理アドレス６１１および第３論理アドレス６１３と、第２論理アドレス空間６２における第１論理アドレス６２１および第４論理アドレス６２４とはいずれも、第１データを格納する第１物理アドレス６５１にマッピングされている。つまり、四つの論理アドレス６１１，６１３，６２１，６２４に対して同一の第１データ（重複データ）を書き込むことが要求された場合には、物理ディスク４７１，４７２に書き込まれた一つの第１データの物理アドレス６５１に対して、それら四つの論理アドレス６１１，６１３，６２１，６２４がマッピングされる。
【００４７】
同様に、上述した重複排除機能により、第１論理アドレス空間６１における第２論理アドレス６１２と、第２論理アドレス空間６２における第２論理アドレス６２２とはいずれも、第２データを格納する第２物理アドレス６５２にマッピングされている。つまり、二つの論理アドレス６１２，６２２に対して同一の第２データを書き込むことが要求された場合には、物理ディスク４７１，４７２に書き込まれた一つの第２データの物理アドレス６５２に対して、それら二つの論理アドレス６１２，６２２がマッピングされる。
【００４８】
なお、第１論理アドレス空間６１における第４論理アドレス６１４は、第３データを格納する第３物理アドレス６５３にマッピングされている。また、第２論理アドレス空間６２における第３論理アドレス６２３は、第４データを格納する第４物理アドレス６５４にマッピングされている。
【００４９】
このように、各論理ディスク４３１，４３２には、同一である複数のデータ（重複データ）が論理的に格納され得る。つまり、同一である複数のデータのそれぞれが、論理ディスク内の複数のアドレスのそれぞれに関連付けられる。一方、ノード内の一つ以上の物理ディスク４７１，４７２には、その同一である複数のデータが、一つのデータとして一つの物理アドレスに格納される。そして、その一つのデータが格納された一つの物理アドレスに対して、複数の論理アドレスがマッピングされる。
【００５０】
つまり、論理ディスク４３１，４３２は、物理ディスク４７１，４７２へのポインタの集合体となっている。これにより、例えば既存のチャンク（データ）と全く同一のチャンク（データ）が論理ディスク４３１，４３２に書き込まれようとした際には、物理ディスク４７１，４７２へ書き込むのではなく、既に書き込まれている物理ディスク４７１，４７２へのポインタを該当論理ディスク４３１，４３２に記録することで、重複したデータの保存を防ぐことができる。
【００５１】
図４は、論理−物理マップテーブル４２１の一構成例を示す。論理−物理マップテーブル４２１は、論理ディスク４３１，４３２の論理アドレスそれぞれと、物理ディスク４７１，４７２の物理アドレスそれぞれとの間のマッピングを管理するための複数のエントリを含む。各エントリは、論理ディスク番号と論理アドレスと物理アドレスとを含む。あるエントリは、論理ディスク番号と論理アドレスとで特定される論理的なデータ格納位置が、物理アドレスで特定される物理的なデータ格納位置にマッピングされていることを示す。この論理−物理マップテーブル４２１を用いることにより、論理ディスク番号および論理アドレスの組を、物理アドレスに変換することができる。
【００５２】
図４に示すように、論理ディスク番号が“０”である論理ディスクにおける論理アドレス“１００００”は、物理アドレス“０００１”にマッピングされている。また、論理ディスク番号が“１”である論理ディスクにおける論理アドレス“１００００”も、物理アドレス“０００１”にマッピングされている。このように、論理ディスク番号が“０”である論理ディスクにおける論理アドレス“１００００”と、論理ディスク番号が“１”である論理ディスクにおける論理アドレス“１００００”とは、いずれも物理アドレス“０００１”にマッピングされている。つまり、これらの論理ディスク番号および論理アドレスの二つの組は、重複排除機能により、重複データが格納された一つの物理アドレスに関連付けられている。なお、複数の物理アドレスが、論理ディスク番号および論理アドレスの一つの組に関連付けられることはない。
【００５３】
図５は、ノード重複排除テーブル４２２の一構成例を示す。ノード重複排除テーブル４２２は、対応する一つのノード４内の物理ディスク４７１，４７２に格納されるチャンク単位の複数のデータに対応する複数のエントリを含む。各エントリは、例えば、ハッシュ値と物理アドレスと被参照数とを含む。
【００５４】
あるデータ（チャンク）に対応するエントリにおいて、「ハッシュ値」は、そのデータを用いて算出されたハッシュ値を示す。「物理アドレス」は、そのデータが格納されている物理アドレスを示す。「被参照数」は、全ての論理ディスク４３１，４３２内の、この物理アドレスに関連付けられた（マッピングされた）論理アドレスの総数（すなわち、全ての論理ディスク４３１，４３２内の、この物理アドレスを参照する論理アドレスの総数）を示す。
【００５５】
図５に示す例において、第１のエントリは、ハッシュ値が“０ｘ１２３４”であるデータが物理アドレス“０００１”の領域に格納され、この物理アドレス“０００１”に関連付けられた、全論理ディスク４３１，４３２内の論理アドレスの総数が“３”であることを示している。また、第２のエントリは、ハッシュ値が“０ｘＦＦＦＦ”であるデータが物理アドレス“０００２”の領域に格納され、この物理アドレス“０００２”に関連付けられた、全論理ディスク４３１，４３２内の論理アドレスの総数が“７”であることを示している。
【００５６】
あるノード４において、あるデータ（チャンク）が物理ディスク４７１，４７２に既に書き込まれているかどうかは、そのデータから算出されたハッシュ値に対応するエントリがノード重複排除テーブル４２２内にあるかどうかによって決定することができる。つまり、データから算出されたハッシュ値に対応するエントリがノード重複排除テーブル４２２内にある場合、そのデータは物理ディスク４７１，４７２に既に書き込まれている。一方、データから算出されたハッシュ値に対応するエントリがノード重複排除テーブル４２２内にない場合、そのデータは物理ディスク４７１，４７２にまだ書き込まれていない。
【００５７】
図６は、論理ディスク重複排除テーブル４２３の一構成例を示す。論理ディスク重複排除テーブル４２３は、論理ディスク４３１，４３２毎に設けられる。論理ディスク重複排除テーブル４２３は、対応する一つの論理ディスクに論理的に格納されたデータのハッシュ値毎に、複数のエントリを含む。各エントリは、ハッシュ値とカウントとを含む。
【００５８】
あるハッシュ値に対応するエントリにおいて、「カウント」は、当該ハッシュ値が算出されたデータが、対応する論理ディスクに論理的に格納されている数を示す。つまり、この「カウント」は、このハッシュ値が算出されたデータが格納されている物理アドレスに関連付けられた（マッピングされた）、対応する一つの論理ディスク内の論理アドレスの数を示していると云える。
【００５９】
図６に示す例において、第１のエントリは、ハッシュ値が“０ｘ１２３４”であるデータが、対応する論理ディスクに論理的に格納されている数が“１”であることを示す。つまり、ハッシュ値が“０ｘ１２３４”であるデータが第１物理アドレスに格納されているとすると、第１のエントリのカウントは、対応する論理ディスク内の、第１物理アドレスに関連付けられた論理アドレスの数が“１”であることを示す。
【００６０】
また、第２のエントリは、ハッシュ値が“０ｘＦＦＦＦ”であるデータが、対応する論理ディスクに論理的に格納されている数が“３”であることを示す。つまり、ハッシュ値が“０ｘＦＦＦＦ”であるデータが第２物理アドレスに格納されているとすると、第２のエントリのカウントは、対応する論理ディスク内の、第２物理アドレスに関連付けられた論理アドレスの数が“３”であることを示す。
【００６１】
図２に戻り、ノードコントローラ４１は、リード制御部４１１、ライト制御部４１２、削除制御部４１３、および論理ディスク管理部４１４として機能することができる。
【００６２】
リード制御部４１１は、クライアント２または中央コントローラ３からリード要求を受け付けた場合、論理−物理マップテーブル４２１から、リード要求に指定された論理ディスク番号および論理アドレスに対応するエントリを検索し、そのエントリ内の物理アドレス（すなわち、指定された論理ディスク番号および論理アドレスにマッピングされた物理アドレス）を取得する。リード制御部４１１は、その物理アドレスに基づいて物理ディスク４７からデータを読み出す。そして、リード制御部４１１は、読み出されたデータを要求したクライアント２または中央コントローラ３に送信する。
【００６３】
削除制御部４１３は、クライアント２または中央コントローラ３から削除要求を受け付けた場合、論理−物理マップテーブル４２１から、その削除要求に指定された論理ディスク番号および論理アドレスに対応するエントリを検索し、そのエントリ内の物理アドレス（すなわち、指定された論理ディスク番号および論理アドレスにマッピングされた物理アドレス）を取得する。そして、削除制御部４１３は、論理−物理マップテーブル４２１から、その取得されたエントリを削除する。
【００６４】
さらに、削除制御部４１３は、ノード重複排除テーブル４２２および論理ディスク重複排除テーブル４２３を以下のように更新する。
【００６５】
（１）ノード重複排除テーブルの更新：  削除制御部４１３は、ノード重複排除テーブル４２２内の、取得された物理アドレスに対応するエントリにおいて、被参照数から１を引く。この被参照数が０になった場合、削除制御部４１３は、ノード重複排除テーブル４２２から当該エントリを削除する。
【００６６】
（２）論理ディスク重複排除テーブルの更新：  削除制御部４１３は、取得された物理アドレスからデータを読み出し、そのデータのハッシュ値を算出する。削除制御部４１３は、削除要求に指定された論理ディスク番号の論理ディスク４３に対応する論理ディスク重複排除テーブル４２３内の、算出されたハッシュ値に対応するエントリにおいて、カウントから１を引く。このカウントが０になった場合、削除制御部４１３は、この論理ディスク重複排除テーブル４２３から当該エントリを削除する。
【００６７】
なお、以上の削除処理は、クライアント２または中央コントローラ３から削除要求を受け付けた場合だけでなく、後述するように、ライト制御部４１２等の、ノードコントローラ４１内の他の構成による削除要求を受け付けた場合にも行われ得る。
【００６８】
ライト制御部４１２は、クライアント２または中央コントローラ３からライト要求を受け付けた場合、そのライト要求に指定された論理ディスク番号および論理アドレスに基づいて、論理−物理マップテーブル４２１を検索する。検索の結果、論理−物理マップテーブル４２１内に、指定された論理ディスク番号および論理アドレスに対応するエントリがあった場合、ライト制御部４１２は、この論理ディスク番号および論理アドレスを指定した削除要求を削除制御部４１３に送る。これによって、削除制御部４１３により、この論理ディスク番号および論理アドレスに対する削除処理が行われる。つまり、ライト要求に指定された論理ディスク番号および論理アドレスにデータが既に格納されていて、そのデータが上書きされようとする場合には、その論理ディスク番号および論理アドレスに対する削除処理が行われる。
【００６９】
そして、ライト制御部４１２は、ライト要求に応じて受信された書き込みデータと一致するデータ（重複データ）が既に物理ディスク４７に格納されているならば、この書き込みデータを物理ディスク４７に書き込まず、代わりに、ライト要求に指定された論理ディスク番号および論理アドレスを、重複データが格納されている物理アドレスに関連付ける。一方、ライト制御部４１２は、ライト要求に応じて受信された書き込みデータと一致するデータ（重複データ）が物理ディスク４７にまだ格納されていないならば、物理ディスク４７内の領域を新たに割り当て、この領域に書き込みデータを書き込み、ライト要求で指定された論理ディスク番号および論理アドレスに、書き込みデータが書き込まれた物理アドレスを関連付ける。
【００７０】
より具体的には、ライト制御部４１２は、まず、書き込みデータのハッシュ値を算出する。そして、ライト制御部４１２は、ハッシュ値を用いてノード重複排除テーブル４２２を検索し、このハッシュ値に対応するエントリがある場合、当該エントリに含まれる物理アドレス（すなわち、重複データが格納されている物理アドレス）と、ライト要求に指定された論理ディスク番号および論理アドレスとを含むエントリを、論理−物理マップテーブル４２１に追加する。
【００７１】
さらに、ライト制御部４１２は、ノード重複排除テーブル４２２および論理ディスク重複排除テーブル４２３を以下のように更新する。
【００７２】
（１）ノード重複排除テーブルの更新：  ライト制御部４１２は、ノード重複排除テーブル４２２内の、書き込みデータのハッシュ値に対応するエントリにおいて、被参照数に１を加える。
【００７３】
（２）論理ディスク重複排除テーブルの更新：  ライト制御部４１２は、ライト要求に指定された論理ディスク番号の論理ディスク４３に対応する論理ディスク重複排除テーブル４２３内に、書き込みデータのハッシュ値に対応するエントリがある場合、そのエントリのカウントに１を加え、書き込みデータのハッシュ値に対応するエントリがない場合、当該ハッシュ値と１が設定されたカウントとを含むエントリを、その論理ディスク重複排除テーブル４２３に追加する。
【００７４】
一方、ノード重複排除テーブル４２２内に、書き込みデータのハッシュ値に対応するエントリがない場合、物理ディスク４７内の領域を新たに割り当てて、書き込みデータ（チャンク）を書き込み、当該領域の物理アドレスと、ライト要求に指定された論理ディスク番号および論理アドレスとを含むエントリを、論理−物理マップテーブル４２１に追加する。
【００７５】
さらに、ライト制御部４１２は、ノード重複排除テーブル４２２および論理ディスク重複排除テーブル４２３を以下のように更新する。
【００７６】
（１）ノード重複排除テーブルの更新：  ライト制御部４１２は、書き込みデータのハッシュ値と、書き込みデータが書き込まれた物理アドレスと、１が設定された被参照数とを含むエントリをノード重複排除テーブル４２２に追加する。
【００７７】
（２）論理ディスク重複排除テーブルの更新：  ライト制御部４１２は、書き込みデータのハッシュ値と、１が設定されたカウントとを含むエントリを、ライト要求に指定された論理ディスク番号に対応する論理ディスク重複排除テーブル４２３に追加する。
【００７８】
また、論理ディスク管理部４１４は、新たな論理ディスク４３を作成（設定）することができる。論理ディスク管理部４１４は、例えば、中央コントローラ３による要求に応じて、新たな論理ディスク４３を作成する。
【００７９】
論理ディスク管理部４１４は、中央コントローラ３による要求に応じて、移動対象の論理ディスクを選択することができる。上述したように、中央コントローラ３は、例えば、性能と容量の少なくとも一方に余裕がないノードを移動元ノードとして選択し、この移動元ノードに、移動対象の論理ディスクを選択することを要求する。
【００８０】
移動元ノード内の論理ディスク管理部４１４は、一つ以上の論理ディスク４３から、当該ノード４における重複排除に対する貢献度が最も低い論理ディスクを、移動対象の論理ディスクとして選択する。例えば、重複排除に対する貢献度が最も低い論理ディスクは、全てのデータ（チャンク）がオリジナルのデータ（すなわち、全てのデータが他の論理ディスクには格納されていないデータ）である論理ディスクである。この論理ディスクが別のノード４に移動されることにより、当該論理ディスク内のデータを格納するために使用されていた物理容量の分だけ、移動元ノードでは使用可能な物理容量が増加する。
【００８１】
これに対して、重複排除に対する貢献度が最も高い論理ディスクは、全てのデータ（チャンク）が、他の論理ディスクに格納されているデータと重複している論理ディスクである。この論理ディスクを別のノードに移動したとしても、移動元ノードで使用可能な物理容量は全く変わらない。
【００８２】
以下では、図７から図１１を参照して、移動元ノードとして第１ノード４Ａが選択された場合を例として、ストレージシステムにおいて、移動対象の論理ディスクと移動先ノードとが決定される動作を説明する。ここでは、第１ノード４Ａ内に三つの論理ディスク４３が設けられ、また移動先候補ノードが第２ノード４Ｂおよび第３ノード４Ｃであることを想定する。
【００８３】
第１ノード４Ａの論理ディスク管理部４１４は、この第１ノード４Ａ内の複数の論理ディスク４３から移動対象の論理ディスクを選択する。論理ディスク管理部４１４は、各論理ディスクの重複排除に対する貢献度に基づいて、貢献度が低い論理ディスクを移動対象の論理ディスクとして選択する。この貢献度は、第１ノード４Ａにおける重複排除に対して、各論理ディスク４３が貢献している度合いを示す。この貢献度は、例えば、０から１までの値を取る。貢献度が０であれば、その論理ディスクが、ノード４における重複排除に全く貢献していない（論理ディスクに存在するデータ全てがオリジナルデータのある）ことを示す。また、貢献度が１であれば、その論理ディスクに存在する全てのデータ（チャンク）について、同一のデータがノード４内の別のいずれかの論理ディスクにも存在していることを示す。
【００８４】
図７は、第１ノード４Ａにおける重複排除に対する第１論理ディスク４３１Ａの貢献度が算出される例を示す。
【００８５】
論理ディスク管理部４１４は、第１ノード４Ａのノード重複排除テーブル４２２Ａと、第１論理ディスク４３１Ａの論理ディスク重複排除テーブル４２３Ａとを用いて、第１ノード４Ａにおける重複排除に対する第１論理ディスク４３１Ａの貢献度を算出する。より具体的には、論理ディスク管理部４１４は、ノード重複排除テーブル４２２Ａの各エントリと論理ディスク重複排除テーブル４２３Ａの各エントリとの間で、ハッシュ値が同一であり、且つノード重複排除テーブル４２２Ａのエントリにおける被参照数と、論理ディスク重複排除テーブル４２３Ａのエントリにおけるカウントとが異なるエントリ（つまり、被参照数＝カウントでないエントリ）を検出して、検出されたエントリの数をカウントする。カウントされたエントリに対応するデータ（チャンク）は、第１論理ディスク４３１Ａだけでなく、別の論理ディスクにも存在するので、重複排除に貢献していると云える。そのため、論理ディスク管理部４１４は、カウントされたエントリ数を、論理ディスク重複排除テーブル４２３Ａの総エントリ数で除した値を、第１論理ディスク４３１Ａの貢献度として算出する。
【００８６】
図７に示す例では、ハッシュ値が“０ｘ１２３４”、“０ｘＦＦＦＦ”、“０ｘ３７１２”、および“０ｘ１０１４”である四つのエントリが、ハッシュ値が同一であり、且つ被参照数とカウントとが異なるエントリに該当する。したがって、論理ディスク管理部４１４によってカウントされるエントリ数は４である。論理ディスク管理部４１４は、カウントされたエントリ数である４を、論理ディスク重複排除テーブル４２３Ａの総エントリ数である５で除した値である０．８（＝４／５）を、第１論理ディスク４３１Ａの貢献度として算出する。
【００８７】
また、図８は、第１ノード４Ａにおける重複排除に対する第２論理ディスク４３２Ａの貢献度が算出される例を示す。
【００８８】
論理ディスク管理部４１４は、第１ノード４Ａのノード重複排除テーブル４２２Ａと、第２論理ディスク４３２Ａの論理ディスク重複排除テーブル４２３Ｂとを用いて、第１ノード４Ａにおける重複排除に対する第２論理ディスク４３２Ａの貢献度を算出する。より具体的には、論理ディスク管理部４１４は、ノード重複排除テーブル４２２Ａの各エントリと論理ディスク重複排除テーブル４２３Ｂの各エントリとの間で、ハッシュ値が同一であり、且つノード重複排除テーブル４２２Ａのエントリにおける被参照数と、論理ディスク重複排除テーブル４２３Ｂのエントリにおけるカウントとが異なるエントリ（つまり、被参照数＝カウントでないエントリ）を検出して、検出されたエントリの数をカウントする。そして、論理ディスク管理部４１４は、カウントされたエントリ数を、論理ディスク重複排除テーブル４２３Ｂの総エントリ数で除した値を、第２論理ディスク４３２Ａの貢献度として算出する。
【００８９】
図８に示す例では、ハッシュ値が“０ｘ１２３４”および“０ｘ４１８２”である二つのエントリが、ハッシュ値が同一であり、且つ被参照数とカウントとが異なるエントリに該当する。したがって、論理ディスク管理部４１４によってカウントされるエントリ数は２である。論理ディスク管理部４１４は、カウントされたエントリ数である２を、論理ディスク重複排除テーブル４２３Ｂの総エントリ数である５で除した値である０．４（＝２／５）を、第２論理ディスク４３２Ａの貢献度として算出する。
【００９０】
このように、ノード重複排除テーブル４２２の被参照数（すなわち、一つ以上の論理ディスク４３内の、ある第１物理アドレスに関連付けられた論理アドレスの総数）と、論理ディスク重複排除テーブル４２３のカウント（すなわち、ある一つの論理ディスク内の、第１物理アドレスに関連付けられた論理アドレスの数）とが等しい場合に算出される貢献度は、ノード重複排除テーブル４２２の被参照数と、論理ディスク重複排除テーブルのカウントとが異なる場合に算出される貢献度よりも低くなる。
【００９１】
論理ディスク管理部４１４は、同様にして他の各論理ディスクの貢献度を算出する。
【００９２】
図９は、論理ディスク管理部４１４により算出された論理ディスク毎の貢献度の例を示す。図９では、論理ディスク番号が“１”である第１論理ディスク４３１Ａの貢献度が０．８であり、論理ディスク番号が“２”である第２論理ディスク４３２Ａの貢献度が０．４であり、論理ディスク番号が“３”である第３論理ディスクの貢献度が０．５５であることが示されている。
【００９３】
論理ディスク管理部４１４は、算出された論理ディスク毎の貢献度に基づいて、これら三つの論理ディスク４３から移動対象の論理ディスクを選択する。論理ディスク管理部４１４は、三つの論理ディスク４３の内、例えば、貢献度が最も低い第２論理ディスク４３２Ａを移動対象の論理ディスクとして選択する。
【００９４】
論理ディスク管理部４１４は、中央コントローラ３に、移動対象の論理ディスクが第２論理ディスク４３２Ａであることを通知する（例えば、第２論理ディスク４３２Ａの論理ディスク番号を通知する）。そして、論理ディスク管理部４１４は、この第２論理ディスク４３２Ａに対応する論理ディスク重複排除テーブル４２３を中央コントローラ３に送信する。
【００９５】
中央コントローラ３の管理部３１は、第１ノード４Ａ（論理ディスク管理部４１４）から、第２論理ディスク４３２Ａが移動対象であることを示す通知を受け、この第２論理ディスク４３２Ａに対応する論理ディスク重複排除テーブル４２３を受信する。また、管理部３１は、移動先候補のノードである第２ノード４Ｂおよび第Ｎノード４Ｃの各々から、ノード重複排除テーブル４２２を受信する。
【００９６】
管理部３１は、移動対象の第２論理ディスク４３２Ａが移動先候補のいずれかのノードに移動されることによる効果を試算する。中央コントローラ３は、この効果の指標として、ストレージシステム全体での物理容量の増減を用い、移動の結果、ストレージシステム全体でデータ格納に使用される物理容量が削減されるほど、効果が高いものと判別する。
【００９７】
管理部３１は、移動対象の論理ディスクが移動された前後において、ストレージシステム全体で使用される物理容量の増減を試算するために、以下の二つの量を比較する。
【００９８】
（１）移動元ノードにおいて、移動前と比較して削減される、データ格納に使用される物理容量（削減量）
（２）移動先ノードにおいて、移動前と比較して増加する、データ格納に使用される物理容量（増加量）
管理部３１は、上記の（１）削減量と（２）増加量とを用いて、ストレージシステム全体でデータ格納に使用される物理容量が削減されるように、移動先ノードを選択する。削減量が増加量よりも小さい場合、あるいは削減量と増加量とが等しい場合、ストレージシステム全体での物理容量が増加するか、変わらないので、移動対象の論理ディスクが移動されるメリットがない。一方、削減量が増加量よりも大きい場合、ストレージシステム全体での物理容量が減少するので、移動対象の論理ディスクが移動されるメリットがある。
【００９９】
したがって、管理部３１は、増加量から削減量を引いた値を、ストレージシステム全体での物理容量の増減を示す値として移動先候補ノード毎に算出し、算出された値が最大である移動先候補ノードを移動先ノードとして選択する。
【０１００】
より具体的には、まず、管理部３１は、移動元ノードである第１ノード４Ａ内の物理ディスク４７において削減されるデータ格納のための物理容量（削減量）を推定する。中央コントローラ３は、例えば、第１ノード４Ａから第２論理ディスク４３２Ａの貢献度を受信し、この貢献度と第２論理ディスク４３２Ａに対応する論理ディスク重複排除テーブル４２３に含まれる総エントリ数とを用いて、下記の式により削減量を算出する。  
【０１０１】
削減量＝（１−貢献度）×論理ディスク重複排除テーブルに含まれる総エントリ数  
この削減量は、移動対象の論理ディスクの移動によって、移動元ノードの物理ディスク４７から削除されるデータの数（チャンク数）に相当するので、移動元ノードにおいて削減されるデータ格納のための物理容量を表す指標として用いることができる。なお、第１ノード４Ａの論理ディスク管理部４１４がこの削減量を算出し、算出された削減量を中央コントローラ３に送信するようにしてもよい。
【０１０２】
例えば、図８に示した例のように、第２論理ディスク４３２Ａの貢献度が０．４であり、第２論理ディスク４３２Ａに対応する論理ディスク重複排除テーブル４２３に含まれる総エントリ数が５である場合、  
削減量＝（１−０．４）×５＝３  
が算出される。
【０１０３】
また、中央コントローラ３の管理部３１は、移動対象の第２論理ディスク４３２Ａが移動されることによって、移動先候補のノードである第２ノード４Ｂおよび第Ｎノード４Ｃの各々の物理ディスク４７において増加するデータ格納のための物理容量（増加量）を推定する。より具体的には、中央コントローラ３の管理部３１は、移動対象の論理ディスクの論理ディスク重複排除テーブル４２３の各エントリのハッシュ値を、移動先候補のノードのノード重複排除テーブル４２２の各エントリのハッシュ値と比較することにより、論理ディスク重複排除テーブル４２３に含まれる全てのエントリの内、ノード重複排除テーブル４２２に同一のハッシュ値のエントリがないエントリの数をカウントする。このエントリの数は、移動対象の論理ディスクの移動によって、移動先候補のノードの物理ディスクに新たに格納されるデータの数（チャンク数）に相当するので、移動先候補のノードにおいて増加するデータ格納のための物理容量（増加量）を表す指標として用いることができる。
【０１０４】
図１０は、移動対象の第２論理ディスク４３２Ａ内のデータが第２ノード４Ｂに移動されることによって、第２ノード４Ｂ内の物理ディスク４７において増加するデータ格納のための物理容量（増加量）が算出される例を示す。
【０１０５】
管理部３１は、移動対象の第２論理ディスク４３２Ａに対応する論理ディスク重複排除テーブル４２３Ｂの各エントリのハッシュ値を、第２ノード４Ｂのノード重複排除テーブル４２２Ｂの各エントリのハッシュ値と比較し、論理ディスク重複排除テーブル４２３Ｂに含まれる全てのエントリの内、ノード重複排除テーブル４２２Ｂに同一のハッシュ値のエントリがないエントリを検出して、検出されたエントリの数をカウントする。図１０に示す例では、論理ディスク重複排除テーブル４２３Ｂに含まれる五つのエントリの内、ハッシュ値が“０ｘ１２３４”であるエントリのみが、ノード重複排除テーブル４２２Ｂに同一のハッシュ値のエントリがあるエントリであり、他の四つのエントリは、ノード重複排除テーブル４２２Ｂに同一のハッシュ値のエントリがないエントリである。そのため、管理部３１は、増加量として４を算出する。
【０１０６】
図１１は、移動対象の第２論理ディスク４３２Ａが第Ｎノード４Ｃに移動されることによって、第Ｎノード４Ｃ内の物理ディスク４７において増加するデータ格納のための物理容量（増加量）が算出される例を説明する。
【０１０７】
管理部３１は、移動対象の第２論理ディスク４３２Ａに対応する論理ディスク重複排除テーブル４２３Ｂの各エントリのハッシュ値を、第Ｎノード４Ｃのノード重複排除テーブル４２２Ｃの各エントリのハッシュ値と比較し、論理ディスク重複排除テーブル４２３Ｂに含まれる全てのエントリの内、ノード重複排除テーブル４２２Ｃに同一のハッシュ値のエントリがないエントリを検出して、検出されたエントリの数をカウントする。図１１に示す例では、論理ディスク重複排除テーブル４２３Ｂに含まれる五つのエントリの内、ハッシュ値が“０ｘ１２３４”、“０ｘＡ０１０”、“０ｘ４１８２”、および“０ｘ３１１０”である四つのエントリが、ノード重複排除テーブル４２２Ｃに同一のハッシュ値のエントリがあるエントリであり、他の一つのエントリが、ノード重複排除テーブル４２２Ｃに同一のハッシュ値のエントリがないエントリである。そのため、管理部３１は、増加量として１を算出する。
【０１０８】
管理部３１は、上記の削減量および増加量の算出結果を用いて、ストレージシステム全体でデータ格納に使用される物理容量（データ格納量）が削減されるように、移動先ノードを選択する。管理部３１は、移動先候補ノードにおける増加量から、移動元ノードにおける削減量を引いた値を、ストレージシステム全体での物理容量の増減を示す値として移動先候補ノード毎に算出し、算出された値が最大である移動先候補ノードを移動先ノードとして選択する。
【０１０９】
上述したように、図７から図１１に示した例において、移動対象の第２論理ディスク４３２Ａが移動されることによる物理容量の増減は以下の通りである。  
【０１１０】
（１）移動元ノードである第１ノード４Ａにおける削減量：  ３  
（２−１）移動先候補ノードである第２ノード４Ｂにおける増加量：  ４  
（２−２）移動先候補ノードである第Ｎノード４Ｃにおける増加量：  １  
第２論理ディスク４３２Ａが第２ノード４Ｂに移動される場合、ストレージシステム全体で使用される物理容量の増減を示す値は、−１（＝３−４）である。つまり、第２論理ディスク４３２Ａが第２ノード４Ｂに移動される場合には、ストレージシステム全体で使用される物理容量が増加してしまう。
【０１１１】
一方、第２論理ディスク４３２Ａが第Ｎノード４Ｃに移動される場合、ストレージシステム全体で使用される物理容量の増減を示す値は、２（＝３−１）である。つまり、第２論理ディスク４３２Ａが第Ｎノード４Ｃに移動される場合には、ストレージシステム全体で使用される物理容量を削減することができる。
【０１１２】
以上の結果に基づき、管理部３１は、ストレージシステム全体で使用される物理容量の増減を示す値が最大である第Ｎノード４Ｃを、移動先ノードとして選択する。管理部３１は、移動対象の論理ディスクを移動元ノードから移動先ノードに移動するための処理を行うか、あるいは管理者またはユーザに移動の提案を行う。
【０１１３】
管理部３１により、移動対象の論理ディスクを移動元ノードから移動先ノードに移動するための処理は以下の通りである。
【０１１４】
まず、管理部３１は、移動先ノードに新たな論理ディスクの作成を要求する。移動先ノードの論理ディスク管理部４１４は、この要求に応じて新たな論理ディスクを作成する。
【０１１５】
次いで、管理部３１は、移動元ノードに、移動対象の論理ディスク内の全データの読み出しを要求する。より具体的には、管理部３１は、例えば、移動対象の論理ディスクの論理ディスク番号と、この論理ディスクに対応する論理アドレスの内、物理アドレス空間にマッピングされている全論理アドレスのそれぞれとを指定したリード要求を移動元ノードに送信する。移動元ノードのリード制御部４１１は、このリード要求に応じて、移動対象の論理ディスク内の全データを読み出し、読み出されたデータを中央コントローラ３に送信する。管理部３１は、移動元ノードから、移動対象の論理ディスク内の全データを受信する。
【０１１６】
そして、管理部３１は、移動先ノードに、受信した移動対象の論理ディスク内の全データの書き込みを要求する。より具体的には、管理部３１は、作成された新たな論理ディスクの論理ディスク番号と、データを書き込む論理アドレス（論理アドレス範囲）とが指定されたライト要求を移動先ノードに送信する。移動先ノードのライト制御部４１２は、このライト要求に応じて、作成された新たな論理ディスクにデータを書き込む。
【０１１７】
管理部３１は、移動先ノードにおけるデータの書き込みが完了したことに応じて、管理テーブル３２を更新する。上述したように、管理テーブル３２は、あるデータが、どのノードのどの論理ディスクに存在しているかを示す。そのため、管理部３１は、移動元ノードの移動対象の論理ディスクに存在していたデータが、移動先ノードの新たに作成された論理ディスクに存在していることを示すように、管理テーブル３２を更新する。
【０１１８】
そして、管理部３１は、移動元ノードに、移動対象の論理ディスク内の全データの削除を要求する。より具体的には、管理部３１は、例えば、移動対象の論理ディスクの論理ディスク番号と、この論理ディスクに対応する全論理アドレス（論理アドレス範囲）とを指定した削除要求を移動元ノードに送信する。移動元ノードの削除制御部４１３は、この削除要求に応じて、移動対象の論理ディスク内の全データを削除する（すなわち、全論理アドレスをアンマップ状態にする）。
【０１１９】
図１２のフローチャートを参照して、ノード４によって実行されるリード処理の手順の例を説明する。
【０１２０】
まず、各ノード４に設けられるノードコントローラ４１は、クライアント２からリード要求（リードコマンド）を受け付けたか否かを判定する（ステップＳ１１）。リード要求では、例えば、データが読み出される論理ディスク番号と論理アドレスとが指定されている。ノードコントローラ４１は、リード要求を、クライアント２から直接受け付けてもよいし、中央コントローラ３を介して受け付けてもよい。リード要求を受け付けていない場合（ステップＳ１１のＮＯ）、ステップＳ１１に戻り、リード要求を受け付けたか否かが再度判定される。
【０１２１】
リード要求を受け付けた場合（ステップＳ１１のＹＥＳ）、ノードコントローラ４１は、リード要求で指定された論理ディスク番号と論理アドレスとを用いて論理−物理マップテーブル４２１を検索し、対応するエントリを取得する（ステップＳ１２）。ノードコントローラ４１は、取得されたエントリから物理アドレスを取得する（ステップＳ１３）。そして、ノードコントローラ４１は、物理ディスク４７１，４７２から、取得された物理アドレスのデータを読み出し（ステップＳ１４）、読み出されたデータをクライアント２に返却（送信）する（ステップＳ１５）。
【０１２２】
以上により、読み出しが要求されたデータを、クライアント２に返却することができる。
【０１２３】
図１３のフローチャートは、ノード４によって実行される削除処理の手順の例を示す。ここでは、説明を分かりやすくするために、削除要求（例えば、アンマップコマンドまたはトリムコマンド）が、チャンク単位のデータを削除するための要求であることを想定する。
【０１２４】
まず、ノードコントローラ４１は、削除要求を受け付けたか否かを判定する（ステップＳ２０１）。削除要求では、例えば、データが削除される論理ディスク番号と論理アドレスとが指定されている。ノードコントローラ４１は、削除要求を、クライアント２から直接受け付けてもよいし、中央コントローラ３を介して受け付けてもよい。さらに、ノードコントローラ４１は、当該ノードコントローラ４１によって他の処理中に生成された削除要求を受け付けてもよい。削除要求を受け付けていない場合（ステップＳ２０１のＮＯ）、ステップＳ２０１に戻り、削除要求を受け付けたか否かが再度判定される。
【０１２５】
削除要求を受け付けた場合（ステップＳ２０１のＹＥＳ）、ノードコントローラ４１は、削除要求で指定された論理ディスク番号と論理アドレスとを用いて、論理−物理マップテーブル４２１を検索し、対応するエントリを取得する（ステップＳ２０２）。そして、ノードコントローラ４１は、取得されたエントリを論理−物理マップテーブル４２１から削除する（ステップＳ２０３）。
【０１２６】
次いで、ノードコントローラ４１は、物理ディスク４７１，４７２から、取得されたエントリに含まれる第１物理アドレスのデータを読み出し（ステップＳ２０４）、読み出されたデータのハッシュ値を算出する（ステップＳ２０５）。ノードコントローラ４１は、算出されたハッシュ値を用いて、削除要求で指定された論理ディスク番号の論理ディスクに対応する論理ディスク重複排除テーブル４２３を検索し、このハッシュ値に対応するエントリにおいて、カウントから１を引く（ステップＳ２０６）。
【０１２７】
そして、ノードコントローラ４１は、このエントリのカウントが０になったか否かを判定する（ステップＳ２０７）。カウントが０になった場合（ステップＳ２０７のＹＥＳ）、ノードコントローラ４１は、このエントリを論理ディスク重複排除テーブル４２３から削除する（ステップＳ２０８）。カウントが０でない場合（ステップＳ２０７のＮＯ）、すなわち、カウントが１以上である場合、ステップＳ２０８がスキップされる。
【０１２８】
次いで、ノードコントローラ４１は、第１物理アドレスを用いてノード重複排除テーブル４２２を検索し、第１物理アドレスに対応するエントリにおいて、被参照数から１を引く（ステップＳ２０９）。そして、ノードコントローラ４１は、このエントリの被参照数が０になったか否かを判定する（ステップＳ２１０）。被参照数が０になった場合（ステップＳ２１０のＹＥＳ）、このエントリをノード重複排除テーブル４２２から削除する（ステップＳ２１１）。被参照数が０でない場合（ステップＳ２１０のＮＯ）、すなわち、被参照数が１以上である場合、ステップＳ２１１がスキップされる。
【０１２９】
以上により、削除要求に応じて、論理−物理マップテーブル４２１から対応するエントリが削除される（アンマップ）と共に、ノード重複排除テーブル４２２および論理ディスク重複排除テーブル４２３内の対応するエントリも更新することができる。
【０１３０】
図１４のフローチャートは、ノード４によって実行されるライト処理の手順の例を示す。ここでは、説明を分かりやすくするために、クライアント２からのライト要求（ライトコマンド）が、チャンク単位のデータを書き込むための要求であることを想定する。
【０１３１】
まず、ノードコントローラ４１は、クライアント２からライト要求（ライトコマンド）を受け付けたか否かを判定する（ステップＳ３０１）。ライト要求では、データが書き込まれる論理ディスク番号と論理アドレスとが指定されている。ノードコントローラ４１は、ライト要求をクライアント２から直接受け付けてもよいし、中央コントローラ３を介して受け付けてもよい。ライト要求を受け付けていない場合（ステップＳ３０１のＮＯ）、ステップＳ３０１に戻り、クライアント２からライト要求を受け付けたか否かが再度判定される。
【０１３２】
クライアント２からライト要求を受け付けた場合（ステップＳ３０１のＹＥＳ）、ノードコントローラ４１は、ライト要求で指定された論理ディスク番号と論理アドレスとを用いて、論理−物理マップテーブル４２１を検索する（ステップＳ３０２）。この検索により、論理−物理マップテーブル４２１から、指定された論理ディスク番号および論理アドレスに該当するエントリが見つかった場合（ステップＳ３０３のＹＥＳ）、ノードコントローラ４１は、この論理ディスクおよび論理アドレスを指定した削除処理を行う（ステップＳ３０４）。ノードコントローラ４１が、例えば、論理ディスクおよび論理アドレスを指定した削除要求を生成することにより、この削除要求に応じて削除処理が実行される。削除処理の手順については、図１３を参照して上述した通りである。一方、論理−物理マップテーブル４２１に該当するエントリがない場合（ステップＳ３０３のＮＯ）、ステップＳ３０４がスキップされる。
【０１３３】
次いで、ノードコントローラ４１は、ライト要求に応じてクライアント２から受信された書き込みデータのハッシュ値を算出する（ステップＳ３０５）。ノードコントローラ４１は、算出されたハッシュ値を用いてノード重複排除テーブル４２２を検索する（ステップＳ３０６）。この検索により、ノード重複排除テーブル４２２から、ハッシュ値に該当するエントリ（以下、第１エントリとも称する）が見つかった場合（ステップＳ３０７のＹＥＳ）、ノードコントローラ４１は、その第１エントリに含まれる物理アドレスを取得し（ステップＳ３０８）、ライト要求で指定された論理ディスク番号および論理アドレスと、取得された物理アドレスとを含む新たなエントリを、論理−物理マップテーブル４２１に追加する（ステップＳ３０９）。また、ノードコントローラ４１は、ノード重複排除テーブル４２２において、第１エントリの被参照数に１を加える（ステップＳ３１０）。
【０１３４】
そして、ノードコントローラ４１は、ライト要求で指定された論理ディスク番号の論理ディスクに対応する論理ディスク重複排除テーブル４２３に、算出されたハッシュ値に該当するエントリがあるか否かを判定する（ステップＳ３１１）。論理ディスク重複排除テーブル４２３に、算出されたハッシュ値に該当するエントリがある場合（ステップＳ３１１のＹＥＳ）、ノードコントローラ４１は、第２エントリのカウントに１を加える（ステップＳ３１２）。一方、論理ディスク重複排除テーブル４２３に、算出されたハッシュ値に該当する第２エントリがない場合（ステップＳ３１１のＮＯ）、ノードコントローラ４１は、論理ディスク重複排除テーブル４２３に、算出されたハッシュ値と１が設定されたカウントとを含む新たなエントリを追加する（ステップＳ３１６）。
【０１３５】
また、ステップＳ３０６における検索の結果、ノード重複排除テーブル４２２に、書き込みデータのハッシュ値に該当するエントリがない場合（ステップＳ３０７のＮＯ）、ノードコントローラ４１は、物理ディスク４７１，４７２内の領域を新たに割り当て、その領域の書き込みデータを書き込む（ステップＳ３１３）。ノードコントローラ４１は、ライト要求で指定された論理ディスク番号および論理アドレスと、データが書き込まれた領域の物理アドレスとを含む新たなエントリを、論理−物理マップテーブル４２１に追加する（ステップＳ３１４）。ノードコントローラ４１は、ノード重複排除テーブル４２２に、算出されたハッシュ値と、データが書き込まれた領域の物理アドレスと、１が設定された被参照数とを含む新たなエントリを追加する（ステップＳ３１５）。そして、ノードコントローラ４１は、論理ディスク重複排除テーブル４２３に、算出されたハッシュ値と１が設定されたカウントとを含む新たなエントリを追加する（ステップＳ３１６）。
【０１３６】
以上により、ライト要求に応じてクライアント２から受信された書き込みデータが、物理ディスク４７１，４７２に既に格納されているデータと重複する場合、書き込みデータは物理ディスク４７１，４７２に書き込まれず、既に格納されているデータへの参照を示すエントリが論理−物理マップテーブル４２１に追加される。したがって、データをストレージに効率良く保存することができる。
【０１３７】
図１５のフローチャートを参照して、中央コントローラ３によって実行される移動制御処理の手順の例を説明する。
【０１３８】
まず、中央コントローラ３は、複数のノード４から移動元ノードを選択する（ステップＳ４０１）。中央コントローラ３は、性能と容量の少なくとも一方に余裕がないノードを移動元ノードとして選択する。
【０１３９】
中央コントローラ３は、移動元ノードに、移動対象の論理ディスクの選択を要求する（ステップＳ４０２）。移動元ノードが移動対象の論理ディスクを選択する処理の手順については、図１７のフローチャートを参照して後述する。中央コントローラ３は、移動元ノードによって移動対象の論理ディスクが選択されたか否かを判定する（ステップＳ４０３）。中央コントローラ３は、例えば、移動元ノードから、移動対象の論理ディスクが選択されたことを示す通知や移動対象の論理ディスクの論理ディスク番号を受け取った場合に、移動対象の論理ディスクが選択されたと判定する。移動対象の論理ディスクが選択されていない場合（ステップＳ４０３のＮＯ）、ステップＳ４０３に戻り、移動対象の論理ディスクが選択されたか否かが再度判定される。
【０１４０】
移動対象の論理ディスクが選択された場合（ステップＳ４０３のＹＥＳ）、中央コントローラ３は、移動元ノードから、移動対象の論理ディスクの論理ディスク重複排除テーブル４２３と、この論理ディスクの移動元ノード内での重複排除に関する貢献度とを取得（受信）する（ステップＳ４０４）。貢献度は、移動対象の論理ディスクを選択するための処理において算出される。貢献度を算出するための処理の手順については、図１８のフローチャートを参照して後述する。また、中央コントローラ３は、ストレージシステムに含まれる複数のノード４の内の、移動元ノード以外のノードである移動先候補の各ノードから、ノード重複排除テーブル４２２を取得（受信）する（ステップＳ４０５）。
【０１４１】
次いで、中央コントローラ３は、移動対象の論理ディスクの論理ディスク重複排除テーブル４２３と貢献度とを用いて、移動対象の論理ディスクがいずれかの移動先候補のノードに移動されることによる、移動元ノードでの削減量（削減される使用量）を算出する（ステップＳ４０６）。
【０１４２】
また、中央コントローラ３は、移動対象の論理ディスクの論理ディスク重複排除テーブル４２３と、ある移動先候補のノードのノード重複排除テーブル４２２とを用いて、移動対象の論理ディスクが当該移動先候補のノードに移動されることによる、当該移動先候補のノードでの増加量（増加する使用量）を算出する（ステップＳ４０７）。中央コントローラ３は、別の移動先候補のノードがあるか否かを判定する（ステップＳ４０８）。別の移動先候補のノードがある場合（ステップＳ４０８のＹＥＳ）、ステップＳ４０７に戻り、その別の移動先候補のノードでの増加量を算出する。別の移動先候補のノードがない場合（ステップＳ４０８のＮＯ）、すなわち、全ての移動先候補のノードについて、移動対象の論理ディスクが移動されることによる増加量が算出された場合、ステップＳ４０９に進む。
【０１４３】
ステップＳ４０９において、中央コントローラ３は、算出された移動元ノードでの削減量と移動先候補の各ノードでの増加量とを用いて、移動先候補のノード毎に、ストレージシステム全体での使用量の増減を算出する。例えば、移動元ノードでの削減量とある移動先候補のノードでの増加量とを比較して、増加量よりも削減量が大きいならば、システム全体での使用量は減少し、移動対象の論理ディスクをその移動先候補のノードに移動するメリットがある。一方、削減量よりも増加量が大きいならば、システム全体での使用量は増加し、移動対象の論理ディスクをその移動先候補のノードに移動するメリットはない。
【０１４４】
中央コントローラ３は、移動先候補のノード毎に算出された、システム全体での使用量の増減に基づいて、使用量が削減される移動先候補のノードがあるか否かを判定する（ステップＳ４１０）。使用量が削減される移動先候補のノードがある場合（ステップＳ４１０のＹＥＳ）、中央コントローラ３は、削減される使用量が最大となる移動先候補のノードを移動先ノードとして選択する（ステップＳ４１１）。そして、中央コントローラ３は、移動対象の論理ディスク（移動対象の論理ディスク内の全データ）を移動先ノードに移動するためのデータ移動処理を行い（ステップＳ４１２）、処理を終了する。データ移動処理の手順については、図１６のフローチャートを参照して後述する。なお、中央コントローラ３は、データ移動処理を行う代わりに、移動対象の論理ディスクを移動先ノードに移動することを管理者またはユーザに提案してもよい。中央コントローラ３は、例えば、移動対象の論理ディスクを移動先ノードに移動することを薦めるメッセージを管理者またはユーザに通知する。この場合、管理者またはユーザにより、移動対象の論理ディスクを移動先ノードに移動することを指示する操作が行われた場合に、データ移動処理を行うようにしてもよい。
【０１４５】
一方、使用量が削減される移動先候補のノードがない場合（ステップＳ４１０のＮＯ）、処理を終了する。なお、中央コントローラ３は、移動対象の論理ディスクを移動しようとしたものの、使用量が削減される移動先候補のノードがなかったことを管理者またはユーザに通知するようにしてもよい。
【０１４６】
図１６のフローチャートは、図１５のフローチャートのステップＳ４１１に相当するデータ移動処理の手順の例を示す。データ移動処理は、上述した通り、移動対象の論理ディスク（移動対象の論理ディスク内の全データ）を移動先ノードに移動するための処理であり、中央コントローラ３によって実行される。
【０１４７】
中央コントローラ３は、まず、移動先ノードに新たな論理ディスクの作成を要求する（ステップＳ５１）。移動先ノードのノードコントローラ４１は、この要求に応じて、当該ノード内に新たな論理ディスクを作成する。中央コントローラ３は、作成された新たな論理ディスクの論理ディスク番号を取得する。
【０１４８】
次いで、中央コントローラ３は、移動元ノードに、移動対象の論理ディスク内の全データの読み出しを要求する（ステップＳ５２）。移動元ノードのノードコントローラ４１は、この要求に応じて、移動対象の論理ディスク内の全データを読み出し、読み出されたデータを中央コントローラ３に送信する。ノードコントローラ４１によるリード処理の手順は、図１２を参照して上述した通りである。
【０１４９】
中央コントローラ３は、移動元ノードから、移動対象の論理ディスク内の全データを受信する（ステップＳ５３）。中央コントローラ３は、移動先ノードに、受信した移動対象の論理ディスク内の全データの書き込みを要求する（ステップＳ５４）。移動先ノードのノードコントローラ４１は、この要求に応じて、ステップＳ５１によって作成された新たな論理ディスクにデータを書き込む。ノードコントローラ４１によるライト処理の手順は、図１４を参照して上述した通りである。
【０１５０】
中央コントローラ３は、移動先ノードによるデータの書き込みが完了したか否かを判定する（ステップＳ５５）。中央コントローラ３は、例えば、移動先ノードから全データについて書き込みが完了したことを示す通知を受け取った場合に、移動先ノードによるデータの書き込みが完了したと判定する。移動先ノードによるデータの書き込みが完了していない場合（ステップＳ５５のＮＯ）、ステップＳ５５に戻る。
【０１５１】
一方、移動先ノードによるデータの書き込みが完了した場合（ステップＳ５５のＹＥＳ）、中央コントローラ３は管理テーブル３２を更新する（ステップＳ５６）。中央コントローラ３は、移動元ノードの移動対象の論理ディスクに存在していたデータが、移動先ノードの新たに作成された論理ディスクに存在していることを示すように、管理テーブル３２を更新する。
【０１５２】
そして、中央コントローラ３は、移動元ノードに、移動対象の論理ディスク内の全データの削除を要求する（ステップＳ５７）。ノードコントローラ４１による削除処理の手順は、図１３を参照して上述した通りである。
【０１５３】
図１７のフローチャートは、ノード４によって実行される論理ディスク選択処理の手順の例を示す。
【０１５４】
ノードコントローラ４１は、中央コントローラ３から移動対象の論理ディスクの選択が要求されたか否かを判定する（ステップＳ６１）。この中央コントローラ３による要求は、図１５のフローチャートを参照して上述したステップＳ４０２に相当する。したがって、ノード４の内の、中央コントローラ３が移動元ノードとして選択したいずれかのノードがこの要求を受信する。移動対象の論理ディスクの選択が要求されていない場合（ステップＳ６１のＮＯ）、ステップＳ６１に戻る。
【０１５５】
移動対象の論理ディスクの選択が要求された場合（ステップＳ６１のＹＥＳ）、ノードコントローラ４１は、物理ディスク４７１，４７２から主メモリ４２に、ノード内に存在する各論理ディスク４３１，４３２に対応する論理ディスク重複排除テーブル４２３を読み出す（キャッシュする）（ステップＳ６２）。また、ノードコントローラ４１は、物理ディスク４７１，４７２から主メモリ４２にノード重複排除テーブル４２２を読み出す（キャッシュする）（ステップＳ６３）。
【０１５６】
次いで、ノードコントローラ４１は、ノード内の論理ディスク４３１，４３２から、貢献度の算出対象である一つの論理ディスクを選択する（ステップＳ６４）。ノードコントローラ４１は、算出対象の論理ディスクに対応する論理ディスク重複排除テーブル４２３とノード重複排除テーブル４２２とを用いて、その論理ディスクの重複排除に対する貢献度を算出するための貢献度算出処理を行う（ステップＳ６５）。貢献度算出処理の手順については、図１８を参照して後述する。
【０１５７】
そして、ノードコントローラ４１は、ノード内に貢献度の算出対象となる別の論理ディスクがあるか否かを判定する（ステップＳ６６）。算出対象となる別の論理ディスクがある場合（ステップＳ６６のＹＥＳ）、ステップＳ６４に戻り、別の論理ディスクの重複排除に対する貢献度を算出するための処理が行われる。
【０１５８】
一方、算出対象となる別の論理ディスクがない場合（ステップＳ６６のＮＯ）、すなわち、ノード内の全ての論理ディスク４３１，４３２について、重複排除に対する貢献度がそれぞれ算出された場合、ノードコントローラ４１は、ノード内に存在する全ての論理ディスク４３１，４３２の内、貢献度が最小である論理ディスクを移動対象の論理ディスクとして選択する（ステップＳ６７）。ノードコントローラ４１は、選択された移動対象の論理ディスクを中央コントローラ３に通知する（ステップＳ６８）。ノードコントローラ４１は、例えば、選択された移動対象の論理ディスクの論理ディスク番号を中央コントローラ３に通知する。また、ノードコントローラ４１は、この移動対象の論理ディスクに対応する論理ディスク重複排除テーブル４２３を中央コントローラ３に送信する（ステップＳ６９）。
【０１５９】
図１８のフローチャートを参照して、図１７のフローチャートに示したステップＳ６５に相当する貢献度算出処理の手順の例を説明する。貢献度算出処理は、上述した通り、各論理ディスク４３１，４３２の重複排除に対する貢献度を算出するための処理であり、ノード４によって実行される。この処理では、貢献度を算出する対象の一つの論理ディスクに対応する一つの論理ディスク重複排除テーブル４２３と、ノード重複排除テーブル４２２とが用いられる。
【０１６０】
まず、ノードコントローラ４１は、貢献度を算出する対象の論理ディスク４３１，４３２に対応する論理ディスク重複排除テーブル４２３に含まれる一つ以上のエントリの内で、重複排除に貢献しているエントリをカウントするためのヒットカウンタを初期化する、すなわち、ヒットカウンタに０を設定する（ステップＳ７１）。
【０１６１】
次に、ノードコントローラ４１は、論理ディスク重複排除テーブル４２３から一つのエントリを選択する（ステップＳ７２）。ノードコントローラ４１は、例えば、論理ディスク重複排除テーブル４２３に含まれる一つ以上のエントリを先頭から順に選択してもよい。
【０１６２】
ノードコントローラ４１は、選択されたエントリのハッシュ値で、ノード重複排除テーブル４２２を検索する（ステップＳ７３）。この検索により、ノード重複排除テーブル４２２において、ハッシュ値が同一であるエントリがヒットした場合（ステップＳ７４のＹＥＳ）、ノードコントローラ４１は、論理ディスク重複排除テーブル４２３から選択されたエントリのカウントと、ノード重複排除テーブル４２２においてヒットしたエントリの被参照数とが等しいかどうかを判定する（ステップＳ７５）。カウントと被参照数とが等しくない場合（ステップＳ７５のＮＯ）、ノードコントローラ４１はヒットカウンタに１を加える（ステップＳ７６）。カウントと被参照数とが等しい場合（ステップＳ７５のＹＥＳ）、ステップＳ７６がスキップされる。また、ステップＳ７３の検索により、ノード重複排除テーブル４２２において、ハッシュ値が同一であるエントリがヒットしなかった場合（ステップＳ７４のＮＯ）、ステップＳ７５およびステップＳ７６がスキップされる。
【０１６３】
次いで、ノードコントローラ４１は、論理ディスク重複排除テーブル４２３に、重複排除に対する貢献がまだ判定されていない別のエントリが存在するか否かを判定する（ステップＳ７７）。重複排除に対する貢献がまだ判定されていない別のエントリが存在する場合（ステップＳ７７のＹＥＳ）、ステップＳ７２に戻り、別のエントリに関する処理が続行される。
【０１６４】
一方、重複排除に対する貢献がまだ判定されていない別のエントリが存在しない場合（ステップＳ７７のＮＯ）、すなわち、論理ディスク重複排除テーブル４２３に含まれる全てのエントリについて、重複排除に対する貢献が判定された場合、ノードコントローラ４１は、ヒットカウンタの値を、論理ディスク重複排除テーブル４２３に含まれる総エントリ数で除した値を、貢献度として返す（ステップＳ７８）。
【０１６５】
以上により、ある論理ディスク４３１，４３２の重複排除に対する貢献度を算出することができる。
【０１６６】
以上説明したように、本実施形態によれば、重複排除の効果を高めることができる。中央コントローラ３は、複数のノード４から第１ノードを選択する。第１ノードは、一つ以上の物理ディスク４７と、第１ノードにおける重複排除に関するノード重複排除テーブル４２２と、一つ以上の物理ディスク４７に対して設定された一つ以上の論理ディスク４３の各々における重複排除に関する一つ以上の論理ディスク重複排除テーブル４２３とを用いて、一つ以上の論理ディスク４３から第１論理ディスクを選択するノードコントローラ４１とを備える。中央コントローラ３は、複数のノード４から第１ノードを除いた一つ以上のノードから第２ノードを選択し、第１論理ディスク内のデータを第２ノードに移動する。
【０１６７】
これにより、ストレージシステム全体での重複排除の効果を高めることができ、ストレージシステム全体でデータ格納に使用される物理容量を削減することができる。
【０１６８】
（第２実施形態）
第１実施形態では、複数のノードの各々で重複排除処理が行われ、重複排除の効果を高めるために二つのノード間で論理ディスクが移動される。これに対して、第２実施形態では、一つのノード内に複数のストレージプールが設けられ、複数のストレージプールの各々で重複排除処理が行われ、重複排除の効果を高めるために二つのストレージプール間で論理ディスクが移動される。第２実施形態では、複数のストレージプールを備える一つのノード内における、重複排除の効果を高めるための構成を示す。
【０１６９】
以下では、このような構成として、一つのノード内に複数のストレージプールノードが設けられる場合を例示する。各ストレージプールノードは、一つのストレージプールと、そのストレージプール内で重複排除処理を行い、別のストレージプールノードとの間で論理ディスクを移動するためのコントローラとを備える。第２実施形態では、第１実施形態のノードを、ストレージプールノードに置き換えることにより、複数のストレージプールを備える一つのノード内において、第１実施形態と同様に重複排除の効果を高めることができる。
【０１７０】
第２実施形態に係るストレージプールノードの構成は第１実施形態のノード４の構成と同様であり、また第２実施形態に係るノードコントローラの構成は第１実施形態の中央コントローラ３の構成と同様である。以下では、図１９および図２０を参照して、第２実施形態に係る情報処理システム１Ａの構成を説明するが、各構成の具体的な動作は、第１実施形態に係る情報処理システム１内の対応する構成の動作と同様である。
【０１７１】
まず、図１９は、第２実施形態に係るストレージシステムを含む情報処理システム１Ａの構成を示す。このストレージシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成されたストレージとして機能するノード４Ｄを備える。
【０１７２】
ノード４Ｄは、一つ以上のストレージプールノード８を備える。図１９に示す例では、ノード４ＤにＮ個のストレージプールノード８が設けられている。各ストレージプールノード８は、一つ以上の物理ディスクを備える。この物理ディスクは、データを格納可能な不揮発性メモリを備え、例えば、ハードディスクドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＳＤ）等として実現される。各ストレージプールノード８は、例えば、筐体、ラック、あるいはフロアのような特定の範囲内に配置される多数の物理ディスクを含み得る。また、各ストレージプールノード８では、一つ以上の物理ディスクを結合することによりストレージプール（仮想ディスク）を作成し、このストレージプールの記憶領域を論理的に分割または結合することにより、一つ以上の論理ディスクが設定（作成）される。
【０１７３】
図１９に示す例では、ノード４ＤにＮ個のストレージプールノード（ストレージプール）が設けられている。
【０１７４】
第１ストレージプールノード８Ａは、第１物理ディスク８７１Ａと第２物理ディスク８７２Ａとを備える。そして、第１ストレージプールノード８Ａでは、これら物理ディスク８７１Ａ，８７２Ａの領域を結合することによりストレージプール（仮想ディスク）８８Ａを作成し、このストレージプール８８Ａの記憶領域を論理的に分割または結合することにより、第１論理ディスク８３１Ａと第２論理ディスク８３２Ａとが作成されている。
【０１７５】
第２ストレージプールノード８Ｂは、第１物理ディスク８７１Ｂと第２物理ディスク８７２Ｂとを備える。そして、第２ストレージプールノード８Ｂでは、これら物理ディスク８７１Ｂ，８７２Ｂの領域を結合することによりストレージプール８８Ｂを作成し、このストレージプール８８Ｂの記憶領域を論理的に分割または結合することにより、第１論理ディスク８３１Ｂと第２論理ディスク８３２Ｂとが作成されている。
【０１７６】
また、第Ｎストレージプールノード８Ｃは、第１物理ディスク８７１Ｃと第２物理ディスク８７２Ｃとを備える。そして、第Ｎストレージプールノード８Ｃでは、これら物理ディスク８７１Ｃ，８７２Ｃの領域を結合することによりストレージプール８８Ｃを作成し、このストレージプール８８Ｃの記憶領域を論理的に分割または結合することにより、第１論理ディスク８３１Ｃと第２論理ディスク８３２Ｃとが作成されている。
【０１７７】
ここでは、各ストレージプールノード８Ａ，８Ｂ，８Ｃに、二つの物理ディスクと二つの論理ディスクとが設けられる例を示したが、各ストレージプールノード８Ａ，８Ｂ，８Ｃには、任意の数の物理ディスクと、任意の数の論理ディスクとを設けることができる。
【０１７８】
情報処理システム１Ａは、クライアント２とノード４Ｄとによって構成される。クライアント２とノード４Ｄとは、ケーブルまたはネットワーク５を介して相互に接続されている。クライアント２は、ノード４Ｄにアクセスする情報処理装置（コンピューティングデバイス）であり、第１実施形態において記載した構成を有している。
【０１７９】
ストレージプールノード８の各々は、第１実施形態のノード４と同様に、ストレージプールノード内に重複したデータが格納されないように制御する重複排除機能を有する。各ストレージプールノード８は、重複排除機能により、クライアント２から新たに受信された書き込みデータと一致するデータ（重複データ）が既に物理ディスクに格納されている場合、この書き込みデータを物理ディスクに書き込まず、代わりに、この書き込みデータの論理アドレスに、重複データが格納されている物理アドレスを関連付ける。これにより、ストレージプールノード内に重複したデータが格納されず、したがって重複排除を実現することができる。なお、本ストレージシステムでは、各ストレージプールノード８内で重複排除のための処理が行われるが、複数のストレージプールノード８に跨った重複排除処理は行われないことを想定する。
【０１８０】
ストレージプールノード８の各々では、重複排除処理によりストレージ効率が向上する。しかし、各ストレージプールノード８に類似度の低いデータが多く格納される場合には、重複排除を行うことによる効果が低く、ストレージ効率が十分に向上しない可能性がある。
【０１８１】
そのため、本実施形態では、あるストレージプールノードにおいて重複排除に対する貢献度が低い論理ディスクを別のストレージプールノードに移動することにより、重複排除の効果を高め、ノード４Ｄ全体でのストレージ効率を向上させる。ノードコントローラ７とストレージプールノード８とは、連携して、移動元ストレージプールノードから移動対象の論理ディスクを選択し、その移動対象の論理ディスクを移動する移動先ストレージプールノードを選択し、移動対象の論理ディスクを移動元ストレージプールノードから移動先ストレージプールノードに移動するように構成される。
【０１８２】
ノードコントローラ７は、ノード４Ｄ全体でのストレージ効率を向上させるように、各ストレージプールノード８における重複排除を管理する。ノードコントローラ７は、管理部７１と管理テーブル７２とを備える。ノードコントローラ７は、ＳｏＣのような回路によって実現され得る。
【０１８３】
管理部７１は、ノード４Ｄ全体でのストレージ効率を向上させるために、あるストレージプールノード８に含まれる論理ディスクを別のストレージプールノード８に移動する処理を行う。
【０１８４】
より具体的には、管理部７１は、ノード４Ｄ内の複数のストレージプールノード８から、移動対象となる論理ディスクの移動元のストレージプールノード（以下、移動元ストレージプールノードとも称する）を選択し、その移動元ストレージプールノードに、移動対象の論理ディスクを選択させる。管理部７１は、性能と容量の少なくとも一方に余裕がないストレージプールノードを移動元ストレージプールノードとして選択する。性能は、例えば、リード性能とライト性能の少なくとも一方であり、物理ディスクに対するリード時間やライト時間を統計処理した値で表される。また、容量は、物理ディスクの空き領域の大きさや割合に基づく値で表される。管理部７１は、例えば、性能と容量の少なくとも一方を表す値が最も低いストレージプールノードを移動元ストレージプールノードとして選択する。
【０１８５】
管理部７１は、移動元ストレージプールノードを除く複数のストレージプールノード８（以下、移動先候補ストレージプールノードとも称する）から、移動対象の論理ディスクが移動される移動先のストレージプールノード（以下、移動先ストレージプールノードとも称する）を選択する。具体的には、管理部７１は、移動対象の論理ディスクがいずれかの移動先候補ストレージプールノードに移動されることによる、移動元ストレージプールノードで削減されるデータ格納のための物理容量（削減量）を算出する。また、管理部７１は、移動対象の論理ディスクが移動先候補ストレージプールノードに移動されることによる、当該移動先候補ストレージプールノードで増加するデータ格納のための物理容量（増加量）を、移動先候補ストレージプールノード毎に算出する。管理部７１は、論理ディスクの移動によるノード４Ｄ全体での削減量が最大となる移動先候補ストレージプールノードを、移動先ストレージプールノードとして選択する。
【０１８６】
そして、管理部７１は、移動元ストレージプールノードから移動先ストレージプールノードに、移動対象の論理ディスク内の全データを移動するための処理を行う。この処理に応じて、移動元ストレージプールノードでは、移動対象の論理ディスク内の全データが削除され、移動先ストレージプールノードでは、それら全データが格納される論理ディスクが新たに作成される。
【０１８７】
また、管理テーブル７２は、あるデータが、どのストレージプールノード（ストレージプール）のどの論理ディスク（ＬＵ）に存在しているか、あるいはどのストレージプールノードに保存されるべきかを管理する。したがって、管理部７１は、この管理テーブル７２を用いることにより、あるデータが、どのストレージプールノードのどの論理ディスクに存在しているか、あるいはどのストレージプールノードに保存されるべきかを決定することができる。なお、管理テーブル７２を用いる代わりに、管理部７１に、あるデータが、どのストレージプールノードのどの論理ディスクに存在しているか、あるいはどのストレージプールノードに保存されるべきかを決定するためのアルゴリズムが組み込まれていてもよい。
【０１８８】
図２０は、ストレージプールノード８の構成を示す。ストレージプールノード８は、ストレージプールコントローラ８１と一つ以上の物理ディスク８７とを備える。ストレージプールコントローラ８１は、ＳｏＣのような回路によって実現され得る。ストレージプールノード８は主メモリ８２を備えていてもよい。主メモリ８２は、揮発性メモリであるランダムアクセスメモリ、例えば、ＤＲＡＭである。
【０１８９】
ストレージプールコントローラ８１は、ノードコントローラ７、クライアント２および他のストレージプールノードの各々との間で各種の要求（コマンド）やデータを送受信するための通信機能を有している。ストレージプールコントローラ８１は、データの書き込みおよび読み出しのような各種のアクセスのために物理ディスク８７を制御する。また、ストレージプールコントローラ８１は、クライアント２やノードコントローラ７から受信されたデータのバッファや、物理ディスク８７から読み出されたデータのキャッシュ等のために、主メモリ８２を制御する。
【０１９０】
図２０に示すように、主メモリ８２には、アドレス変換テーブルとして機能する論理−物理マップテーブル８２１のキャッシュ領域が設けられている。論理−物理マップテーブル８２１は、論理ディスク８３の論理アドレスそれぞれと、物理ディスク８７の物理アドレスそれぞれとの間のマッピングを管理する。
【０１９１】
主メモリ８２にはさらに、処理中に用いられる各種の値や、各種のテーブル（例えば、ストレージプール重複排除テーブル８２２と論理ディスク重複排除テーブル８２３）の格納領域が設けられてもよい。ストレージプール重複排除テーブル８２２は、ストレージプールノード８毎に設けられ、各ストレージプールノード８における重複排除を管理する。論理ディスク重複排除テーブル８２３は、論理ディスク８３毎に設けられ、各論理ディスク８３における重複排除を管理する。
【０１９２】
重複排除機能を有するストレージプールノード８における、論理アドレス空間６１，６２と物理アドレス空間６５との関係は、図３を参照して上述した通りである。
【０１９３】
論理−物理マップテーブル８２１は、論理ディスク８３１，８３２の論理アドレスそれぞれと、物理ディスク８７１，８７２の物理アドレスそれぞれとの間のマッピングを管理するための複数のエントリを含む。論理−物理マップテーブル８２１は、図４に示した論理−物理マップテーブル４２１と同様の構成を有する。
【０１９４】
ストレージプール重複排除テーブル８２２は、対応する一つのストレージプールノード８内の物理ディスク８７１，８７２に格納されるチャンク単位の複数のデータに対応する複数のエントリを含む。ストレージプール重複排除テーブル８２２は、図５に示したノード重複排除テーブル４２２と同様の構成を有する。
【０１９５】
論理ディスク重複排除テーブル８２３は、論理ディスク８３１，８３２毎に設けられる。論理ディスク重複排除テーブル８２３は、対応する一つの論理ディスクに論理的に格納されたデータのハッシュ値毎に、複数のエントリを含む。論理ディスク重複排除テーブル８２３は、図６に示した論理ディスク重複排除テーブル４２３と同様の構成を有する。
【０１９６】
ストレージプールコントローラ８１は、リード制御部８１１、ライト制御部８１２、削除制御部８１３、および論理ディスク管理部８１４として機能することができる。
【０１９７】
リード制御部８１１は、クライアント２またはノードコントローラ７からリード要求を受け付けた場合、論理−物理マップテーブル８２１から、リード要求に指定された論理ディスク番号および論理アドレスに対応するエントリを検索し、そのエントリ内の物理アドレス（すなわち、指定された論理ディスク番号および論理アドレスにマッピングされた物理アドレス）を取得する。リード制御部８１１は、その物理アドレスに基づいて物理ディスク８７からデータを読み出す。そして、リード制御部８１１は、読み出されたデータを要求したクライアント２またはノードコントローラ７に送信する。
【０１９８】
削除制御部８１３は、クライアント２またはノードコントローラ７から削除要求を受け付けた場合、論理−物理マップテーブル８２１から、その削除要求に指定された論理ディスク番号および論理アドレスに対応するエントリを検索し、そのエントリ内の物理アドレス（すなわち、指定された論理ディスク番号および論理アドレスにマッピングされた物理アドレス）を取得する。そして、削除制御部８１３は、論理−物理マップテーブル８２１から、その取得されたエントリを削除する。
【０１９９】
さらに、削除制御部８１３は、ストレージプール重複排除テーブル８２２および論理ディスク重複排除テーブル８２３を以下のように更新する。
【０２００】
（１）ストレージプール重複排除テーブルの更新：  削除制御部８１３は、ストレージプール重複排除テーブル８２２内の、取得された物理アドレスに対応するエントリにおいて、被参照数から１を引く。この被参照数が０になった場合、削除制御部８１３は、ストレージプール重複排除テーブル８２２から当該エントリを削除する。
【０２０１】
（２）論理ディスク重複排除テーブルの更新：  削除制御部８１３は、取得された物理アドレスからデータを読み出し、そのデータのハッシュ値を算出する。削除制御部８１３は、削除要求に指定された論理ディスク番号の論理ディスク８３に対応する論理ディスク重複排除テーブル８２３内の、算出されたハッシュ値に対応するエントリにおいて、カウントから１を引く。このカウントが０になった場合、削除制御部８１３は、この論理ディスク重複排除テーブル８２３から当該エントリを削除する。
【０２０２】
なお、以上の削除処理は、クライアント２またはノードコントローラ７から削除要求を受け付けた場合だけでなく、後述するように、ライト制御部８１２等の、ストレージプールコントローラ８１内の他の構成による削除要求を受け付けた場合にも行われ得る。
【０２０３】
ライト制御部８１２は、クライアント２またはノードコントローラ７からライト要求を受け付けた場合、そのライト要求に指定された論理ディスク番号および論理アドレスに基づいて、論理−物理マップテーブル８２１を検索する。検索の結果、論理−物理マップテーブル８２１内に、指定された論理ディスク番号および論理アドレスに対応するエントリがあった場合、ライト制御部８１２は、この論理ディスク番号および論理アドレスを指定した削除要求を削除制御部８１３に送る。これによって、削除制御部８１３により、この論理ディスク番号および論理アドレスに対する削除処理が行われる。つまり、ライト要求に指定された論理ディスク番号および論理アドレスにデータが既に格納されていて、そのデータが上書きされようとする場合には、その論理ディスク番号および論理アドレスに対する削除処理が行われる。
【０２０４】
そして、ライト制御部８１２は、ライト要求に応じて受信された書き込みデータと一致するデータ（重複データ）が既に物理ディスク８７に格納されているならば、この書き込みデータを物理ディスク８７に書き込まず、代わりに、ライト要求に指定された論理ディスク番号および論理アドレスを、重複データが格納されている物理アドレスに関連付ける。一方、ライト制御部８１２は、ライト要求に応じて受信された書き込みデータと一致するデータ（重複データ）が物理ディスク８７にまだ格納されていないならば、物理ディスク８７内の領域を新たに割り当て、この領域に書き込みデータを書き込み、ライト要求で指定された論理ディスク番号および論理アドレスに、書き込みデータが書き込まれた物理アドレスを関連付ける。
【０２０５】
より具体的には、ライト制御部８１２は、まず、書き込みデータのハッシュ値を算出する。そして、ライト制御部８１２は、ハッシュ値を用いてストレージプール重複排除テーブル８２２を検索し、このハッシュ値に対応するエントリがある場合、当該エントリに含まれる物理アドレス（すなわち、重複データが格納されている物理アドレス）と、ライト要求に指定された論理ディスク番号および論理アドレスとを含むエントリを、論理−物理マップテーブル８２１に追加する。
【０２０６】
さらに、ライト制御部８１２は、ストレージプール重複排除テーブル８２２および論理ディスク重複排除テーブル８２３を以下のように更新する。
【０２０７】
（１）ノード重複排除テーブルの更新：  ライト制御部８１２は、ストレージプール重複排除テーブル８２２内の、書き込みデータのハッシュ値に対応するエントリにおいて、被参照数に１を加える。
【０２０８】
（２）論理ディスク重複排除テーブルの更新：  ライト制御部８１２は、ライト要求に指定された論理ディスク番号の論理ディスク８３に対応する論理ディスク重複排除テーブル８２３内に、書き込みデータのハッシュ値に対応するエントリがある場合、そのエントリのカウントに１を加え、書き込みデータのハッシュ値に対応するエントリがない場合、当該ハッシュ値と、１が設定されたカウントとを含むエントリを、その論理ディスク重複排除テーブル８２３に追加する。
【０２０９】
一方、ストレージプール重複排除テーブル８２２内に、書き込みデータのハッシュ値に対応するエントリがない場合、物理ディスク８７内の領域を新たに割り当てて、書き込みデータを書き込み、当該領域の物理アドレスと、ライト要求に指定された論理ディスク番号および論理アドレスとを含むエントリを、論理−物理マップテーブル８２１に追加する。
【０２１０】
さらに、ライト制御部８１２は、ストレージプール重複排除テーブル８２２および論理ディスク重複排除テーブル８２３を以下のように更新する。
【０２１１】
（１）ノード重複排除テーブルの更新：  ライト制御部８１２は、書き込みデータのハッシュ値と、書き込みデータが書き込まれた物理アドレスと、１が設定された被参照数とを含むエントリをストレージプール重複排除テーブル８２２に追加する。
【０２１２】
（２）論理ディスク重複排除テーブルの更新：  ライト制御部８１２は、書き込みデータのハッシュ値と１が設定されたカウントとを含むエントリを、ライト要求に指定された論理ディスク番号に対応する論理ディスク重複排除テーブル８２３に追加する。
【０２１３】
論理ディスク管理部８１４は、新たな論理ディスク８３を作成（設定）することができる。論理ディスク管理部８１４は、例えば、ノードコントローラ７による要求に応じて、新たな論理ディスク８３を作成する。論理ディスク管理部８１４は、ストレージプールの作成（設定）を行うこともできる。
【０２１４】
また、論理ディスク管理部８１４は、ノードコントローラ７による要求に応じて、移動対象の論理ディスクを選択することができる。上述したように、ノードコントローラ７は、例えば、性能と容量の少なくとも一方に余裕がないノードを移動元ストレージプールノードとして選択し、この移動元ストレージプールノードに、移動対象の論理ディスクを選択することを要求する。
【０２１５】
移動元ストレージプールノード内の論理ディスク管理部８１４は、一つ以上の論理ディスク８３から、当該ストレージプールノード８内での重複排除に対する貢献度が低い論理ディスクを、移動対象の論理ディスクとして選択する。
【０２１６】
第１実施形態において図７から図１１を参照して説明した、移動対象の論理ディスクと移動先ノードとが決定される動作を、第２実施形態の構成に適用することにより、移動対象の論理ディスクと移動先ストレージプールノードとを決定することができる。また、図１２から図１８のフローチャートに示した手順も、第２実施形態に示した構成に適用することにより、ノードコントローラ７が移動制御処理およびデータ移動処理を実行し、またストレージプールコントローラ８１がリード処理、削除処理、ライト処理、論理ディスク選択処理、および貢献度算出処理を実行することができる。
【０２１７】
以上説明したように、第２実施形態では、第１実施形態のノードを、ストレージプール（ストレージプールノード）に置き換えた構成により、複数のストレージプールを備える一つのノード内において重複排除の効果を高めることができる。ノードコントローラ７は、複数のストレージプールノード８から第１ストレージプールノードを選択する。第１ストレージプールノードは、一つ以上の物理ディスク８７と、第１ストレージプールノードにおける重複排除に関するストレージプール重複排除テーブル８２２と、一つ以上の物理ディスク８７に対して設定された一つ以上の論理ディスク８３の各々における重複排除に関する一つ以上の論理ディスク重複排除テーブル８２３とを用いて、一つ以上の論理ディスク８３から第１論理ディスクを選択するストレージプールコントローラ８１とを備える。ノードコントローラ７は、複数のストレージプールノード８から第１ストレージプールノードを除いた一つ以上のストレージプールノードから第２ストレージプールノードを選択し、第１論理ディスク内のデータを第２ストレージプールノードに移動する。
【０２１８】
これにより、ノード内での重複排除の効果を高めることができ、ノード全体でデータ格納に使用される物理容量を削減することができる。
【０２１９】
なお、第２実施形態におけるストレージプールノード８間での論理ディスクの移動と、第１実施形態におけるノード４間での論理ディスクの移動とが併用されてもよい。例えば、第１実施形態のノード４Ａを第２実施形態のノード４Ｄに置き換えて、ノード４Ｄにおいてストレージプールノード（ストレージプール）８間で論理ディスクが移動されると共に、ノード４Ｄと、ノード４Ｂまたはノード４Ｃとの間で論理ディスクが移動されるようにしてもよい。これにより、複数のストレージプールを備える一つのノード４Ｄ内で重複排除の効果を高めながら、複数のノード４を備えるストレージシステム全体でも重複排除の効果を高めることができる。
【０２２０】
また、本実施形態に記載された様々な機能の各々は、回路（処理回路）によって実現されてもよい。処理回路の例には、中央処理装置（ＣＰＵ）のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム（命令群）を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたＣＰＵ以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【０２２１】
また、本実施形態の各種処理はコンピュータプログラムによって実現することができるので、このコンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのコンピュータプログラムをコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
【０２２２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２２３】
１…情報処理システム、２…クライアント、３…中央コントローラ、４…ノード、５…ネットワーク、３１…管理部、３２…管理テーブル、４１…ノードコントローラ、４２…主メモリ、４３…論理ディスク、４７…物理ディスク、４１１…リード制御部、４１２…ライト制御部、４１３…削除制御部、４１４…論理ディスク管理部、４２１…論理−物理マップテーブル、４２２…ノード重複排除テーブル、４２３…論理ディスク重複排除テーブル。
【図１】
2019074912.tif 000003
【図２】
2019074912.tif 000004
【図３】
2019074912.tif 000005
【図４】
2019074912.tif 000006
【図５】
2019074912.tif 000007
【図６】
2019074912.tif 000008
【図７】
2019074912.tif 000009
【図８】
2019074912.tif 000010
【図９】
2019074912.tif 000011
【図１０】
2019074912.tif 000012
【図１１】
2019074912.tif 000013
【図１２】
2019074912.tif 000014
【図１３】
2019074912.tif 000015
【図１４】
2019074912.tif 000016
【図１５】
2019074912.tif 000017
【図１６】
2019074912.tif 000018
【図１７】
2019074912.tif 000019
【図１８】
2019074912.tif 000020
【図１９】
2019074912.tif 000021
【図２０】
2019074912.tif 000022
【手続補正書】
【提出日】平成31年1月10日(2019.1.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
各々が一つ以上の物理ディスクを備える複数のノードと、
前記複数のノードから第１ノードを選択する第１制御部とを具備し、
前記第１ノードは、
一つ以上の第１物理ディスクと、
前記第１ノードにおける重複排除に関する第１テーブルと、前記一つ以上の第１物理ディスクに対して設定された一つ以上の論理ディスクの各々における重複排除に関する一つ以上の第２テーブルとを用いて、前記第１ノードにおける重複排除に対する、前記一つ以上の論理ディスクの各々の貢献度を算出し、前記一つ以上の論理ディスクの各々の貢献度を用いて、前記一つ以上の論理ディスクの内で、前記第１ノードにおける重複排除に対する貢献度が最も低い第１論理ディスクを選択する第２制御部とを具備し、
前記第１制御部は、前記複数のノードから前記第１ノードを除いた一つ以上のノードから第２ノードを選択し、前記第１論理ディスク内のデータを前記第２ノードに移動するストレージシステム。
【請求項２】
前記第１制御部は、
前記第１テーブルと、前記一つ以上の第２テーブルの内の前記第１論理ディスクに対応するテーブルと、前記一つ以上のノードの各々における重複排除に関する一つ以上の第３テーブルとを用いて、前記ストレージシステム全体でデータ格納に使用される物理容量が削減されるように、前記第２ノードを選択する請求項１記載のストレージシステム。
【請求項３】
前記第１ノードは、前記複数のノードの内で、リードおよびライトの少なくとも一方に関する性能が最も低いノード、または空き領域のサイズもしくは割合が最も小さいノードである請求項１記載のストレージシステム。
【請求項４】
前記第１テーブルは、前記一つ以上の第１物理ディスク内の、第１データが格納されている第１物理アドレスと、前記一つ以上の論理ディスク内の、前記第１物理アドレスに関連付けられた論理アドレスの総数とを含み、
前記一つ以上の第２テーブルの内の第４テーブルは、前記第１論理ディスクに対応し、前記第１論理ディスク内の、前記第１物理アドレスに関連付けられた論理アドレスの数を含み、
前記第１テーブルに含まれる前記第１物理アドレスに関連付けられた前記論理アドレスの総数と、前記第４テーブルに含まれる前記第１物理アドレスに関連付けられた前記論理アドレスの数とが等しい場合に算出される前記第１論理ディスクの前記貢献度は、前記第１テーブルに含まれる前記第１物理アドレスに関連付けられた前記論理アドレスの総数と、前記第４テーブルに含まれる前記第１物理アドレスに関連付けられた前記論理アドレスの数とが異なる場合に算出される前記第１論理ディスクの前記貢献度よりも低い請求項１記載のストレージシステム。
【請求項５】
前記第１制御部は、前記第２ノードに第２論理ディスクを新たに作成させ、前記第１ノードの前記第１論理ディスクから全てのデータを読み出し、前記読み出された全てのデータを前記第２論理ディスクに格納し、前記第１ノードに前記第１論理ディスク内の全てのデータを削除させる請求項１記載のストレージシステム。
【請求項６】
前記第１制御部は、前記一つ以上の第１物理ディスクを結合することによりストレージプールを作成し、
前記一つ以上の論理ディスクは、前記ストレージプールに対して設定される請求項１記載のストレージシステム。
【請求項７】
各々が一つ以上の物理ディスクを備える複数のノードと第１制御部とを具備するストレージシステムの制御方法であって、
前記第１制御部によって、前記複数のノードから第１ノードを選択し、
前記第１ノードに設けられる第２制御部によって、前記第１ノードにおける重複排除に関する第１テーブルと、前記第１ノード内の一つ以上の第１物理ディスクに対して設定された一つ以上の論理ディスクの各々における重複排除に関する一つ以上の第２テーブルとを用いて、前記第１ノードにおける重複排除に対する、前記一つ以上の論理ディスクの各々の貢献度を算出し、
前記第２制御部によって、前記一つ以上の論理ディスクの各々の貢献度を用いて、前記一つ以上の論理ディスクの内で、前記第１ノードにおける重複排除に対する貢献度が最も低い第１論理ディスクを選択し、
前記第１制御部によって、前記複数のノードから前記第１ノードを除いた一つ以上のノードから第２ノードを選択し、前記第１論理ディスク内のデータを前記第２ノードに移動する制御方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
実施形態によれば、ストレージシステムは、複数のノードと第１制御部とを具備する。複数のノードは、各々が一つ以上の物理ディスクを備える。第１制御部は、前記複数のノードから第１ノードを選択する。前記第１ノードは、一つ以上の第１物理ディスクと、前記第１ノードにおける重複排除に関する第１テーブルと、前記一つ以上の第１物理ディスクに対して設定された一つ以上の論理ディスクの各々における重複排除に関する一つ以上の第２テーブルとを用いて、前記第１ノードにおける重複排除に対する、前記一つ以上の論理ディスクの各々の貢献度を算出し、前記一つ以上の論理ディスクの各々の貢献度を用いて、前記一つ以上の論理ディスクの内で、前記第１ノードにおける重複排除に対する貢献度が最も低い第１論理ディスクを選択する第２制御部とを具備する。前記第１制御部は、前記複数のノードから前記第１ノードを除いた一つ以上のノードから第２ノードを選択し、前記第１論理ディスク内のデータを前記第２ノードに移動する。