(57)【要約】【課題】データ毎に異なる情報が付与されるデータの重複排除をより簡易に実現すること。【解決手段】データＤ１と、データＤ１に対するチェック符号３２ａと、論理領域２１内の位置に関する第１の情報３２ｂとを含む第１のデータブロック３０が物理領域２２にある場合、データＤ１と、チェック符号４２ａと、論理領域２１内の位置に関する第２の情報４２ｂとを含む第２のデータブロック４０を論理領域２１に書き込むとき、第１のデータブロック３０のメタ情報を用いて取得した、第１のデータブロック３０がある物理領域２２の位置を、第２のデータブロック４０のメタ情報における物理領域２２の位置として、第２のデータブロック４０が書き込まれる論理領域２１の位置に対応付け、第２のデータブロック４０から取得される第２の情報４２ｂを記憶部１１に格納するストレージ制御装置１０が提供される。【選択図】図１
2018181171.tif 000002
【特許請求の範囲】
【請求項１】
論理領域の位置と物理領域の位置とを対応付けるメタ情報が格納される記憶部と、
データと、前記データに対するチェック符号と、前記論理領域内の位置に関する第１の情報とを含む第１のデータブロックが前記物理領域にある場合、
前記データと、前記チェック符号と、前記論理領域内の位置に関する第２の情報とを含む第２のデータブロックを前記論理領域に書き込むとき、
前記メタ情報のうち前記第１のデータブロックのメタ情報を用いて取得した、前記第１のデータブロックがある前記物理領域の位置を、前記メタ情報のうち前記第２のデータブロックのメタ情報における前記物理領域の位置として、前記第２のデータブロックが書き込まれる前記論理領域の位置に対応付け、前記第２のデータブロックから取得される前記第２の情報を前記記憶部に格納する制御部と
を有する、ストレージ制御装置。
【請求項２】
前記制御部は、前記第２のデータブロックを前記論理領域から読み出すとき、前記メタ情報のうち前記第２のデータブロックのメタ情報を参照して前記物理領域から前記第１のデータブロックを読み出し、前記論理領域内の位置に関する第２の情報と前記第１のデータブロックに含まれる前記チェック符号とに基づいて前記第２のデータブロックを復元する
請求項１に記載のストレージ制御装置。
【請求項３】
前記データは、複数の分割データを有し、
前記第２の情報は、前記複数の分割データにそれぞれ対応する複数の付加情報を有し、
前記複数の付加情報のそれぞれは、前記複数の分割データのうち、対応する分割データが前記データの先頭から何番目の位置にあるかを示すカウンタ値を含み、
前記制御部は、
前記第２の情報を前記記憶部に格納するとき、前記複数の付加情報のうち、前記データの先頭にある分割データに対応する付加情報を前記記憶部に格納し、前記第２のデータブロックを復元する際には、前記複数の付加情報のうち、前記記憶部にある付加情報を用いて残りの付加情報を生成する
請求項２に記載のストレージ制御装置。
【請求項４】
前記制御部は、前記第２の情報を、前記メタ情報のうち前記第２のデータブロックのメタ情報に保存する
請求項３に記載のストレージ制御装置。
【請求項５】
前記制御部は、前記第１のデータブロックを前記物理領域に書き込むとき、それぞれが前記物理領域に設定される単位区画と同じサイズになるように前記第１のデータブロックを複数のデータ要素に分割し、前記複数のデータ要素を前記物理領域に書き込む
請求項４に記載のストレージ制御装置。
【請求項６】
論理領域の位置と物理領域の位置とを対応付けるメタ情報が格納される記憶部を参照し、
データと、前記データに対するチェック符号と、前記論理領域内の位置に関する第１の情報とを含む第１のデータブロックが前記物理領域にある場合、
前記データと、前記チェック符号と、前記論理領域内の位置に関する第２の情報とを含む第２のデータブロックを前記論理領域に書き込むとき、
前記メタ情報のうち前記第１のデータブロックのメタ情報を用いて取得した、前記第１のデータブロックがある前記物理領域の位置を、前記メタ情報のうち前記第２のデータブロックのメタ情報における前記物理領域の位置として、前記第２のデータブロックが書き込まれる前記論理領域の位置に対応付け、前記第２のデータブロックから取得される前記第２の情報を前記記憶部に格納する
処理をコンピュータに実行させる、ストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、及びストレージ制御プログラムに関する。
【背景技術】
【０００２】
業務サーバなどのサーバ装置が扱う大量のデータは、例えば、記憶容量の大きなストレージ装置を有するストレージシステムにより管理される。ストレージシステムでは、論理的な記憶領域（論理領域）と、ストレージ装置に搭載される記憶装置の記憶領域（物理領域）とを利用してデータのＩ／Ｏ（Input/Output）が処理される。
【０００３】
記憶装置としては、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの記録媒体や、複数の記録媒体を組み合わせて利用するＲＡＩＤ（Redundant Arrays of Inexpensive Disks）装置などがある。複数の記憶装置の物理領域を纏めて１つの仮想的な物理領域（ストレージプール／ディスクプール）として利用する技術もある。キャッシュを搭載するストレージ装置の場合、物理領域として一時的にキャッシュが利用される場合もある。
【０００４】
サーバ装置によるデータへのアクセスは論理領域に対して実施される。ある論理領域に対するデータの書き込みがあると、ストレージ装置は、データが書き込まれる論理領域のアドレス（論理アドレス）に対応する物理領域のアドレス（物理アドレス）にデータを書き込む。このとき、新たに書き込まれるデータと同じ内容の他のデータが物理領域に存在しても、書き込み先の論理アドレスと、他のデータの論理アドレスとが異なる場合、他のデータとは異なる物理アドレスにデータが書き込まれる。
【０００５】
ＨＤＤやＳＳＤなどのハードウェア資源により提供される物理領域の容量は有限であるため、同じ内容のデータが複数の論理アドレスに書き込まれる場合に、これら複数の論理アドレスを同じ物理アドレスに対応付けて物理領域を有効利用する方法がある。この方法は重複排除と呼ばれる。
【０００６】
例えば、Ｉ／Ｏ処理の対象となるデータブロックを単位として重複排除を実施する場合、複数のデータブロックが同一である場合には重複排除の対象となる。一方、データブロック間で僅かでも異なるデータがある場合には対象から漏れる。
【０００７】
ストレージシステムでは、Ｉ／Ｏ処理時の誤り検出などに用いるチェックコードがユーザデータに付与されることがある。また、ユーザデータ毎に内容が異なる保証コードがユーザデータに付与される場合もある。この場合、保証コードの部分がユーザデータ毎に異なる内容となるため、同じ内容のユーザデータが存在しても重複排除の対象とならないリスクがある。このリスクに対処するため、ユーザデータと保証コードとを分けて保証コードを記憶領域に格納する方法が提案されている。
【０００８】
なお、複数の保証コードをまとめてセクタ長で管理すると共に、保証コードとデータとを対応付ける方法が提案されている。また、論理データブロック毎に保証コードを付加し、読み出し時にチェックするディスクアレイ装置が提案されている。このディスクアレイ装置では、重複排除の対象となるデータ間で保証コードが一致するように、一方のデータに固有の属性を、他のデータに固有の属性へと変更する方法が採用されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１４−２２５２９７号公報
【特許文献２】特開２００４−２８８０７８号公報
【特許文献３】特開２００９−８０６９６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
データの内容に基づいて生成されるチェックコードなどの情報は、データの内容が同じであれば同じ内容になることが多い。また、上記の提案方式のようにデータに固有の属性を変更して保証コードの内容を一致させれば重複排除が可能になる。但し、重複排除の対象となるデータ間で保証コードが一致するように保証コードを変更する処理が生じる。
【００１１】
１つの側面によれば、本発明の目的は、データ毎に異なる情報が付与されるデータの重複排除をより簡易に実現することが可能なストレージ制御装置、及びストレージ制御プログラムを提供することにある。
【課題を解決するための手段】
【００１２】
一態様によれば、論理領域の位置と物理領域の位置とを対応付けるメタ情報が格納される記憶部と、データと、データに対するチェック符号と、論理領域内の位置に関する第１の情報とを含む第１のデータブロックが物理領域にある場合、データと、チェック符号と、論理領域内の位置に関する第２の情報とを含む第２のデータブロックを論理領域に書き込むとき、メタ情報のうち第１のデータブロックのメタ情報を用いて取得した、第１のデータブロックがある物理領域の位置を、メタ情報のうち第２のデータブロックのメタ情報における物理領域の位置として、第２のデータブロックが書き込まれる論理領域の位置に対応付け、第２のデータブロックから取得される第２の情報を記憶部に格納する制御部とを有する、ストレージ制御装置が提供される。
【発明の効果】
【００１３】
データ毎に異なる情報が付与されるデータの重複排除をより簡易に実現できる。
【図面の簡単な説明】
【００１４】
【図１】第１実施形態に係るストレージ制御装置の一例を示した図である。
【図２】第２実施形態に係るストレージシステムの一例を示した図である。
【図３】第２実施形態に係るサーバの機能を実現可能なハードウェアの一例を示したブロック図である。
【図４】第２実施形態に係るノードの機能を実現可能なハードウェア及びソフトウェアスタックの一例を示したブロック図である。
【図５】複数のノードに対するデータの分散配置について説明するための図である。
【図６】ストレージプールに書き込まれるユーザデータ及びメタ情報の管理方法について説明するための図である。
【図７】メタアドレス情報の構造及び内容について説明するための図である。
【図８】メタ情報の構造及び内容について説明するための図である。
【図９】メタアドレス情報及びメタ情報のキャッシュ及びストレージプールへの書き込み方法について説明するための図である。
【図１０】書き込み処理の流れ（重複なしの場合）について説明するためのシーケンス図である。
【図１１】書き込み処理の流れ（重複ありの場合）について説明するためのシーケンス図である。
【図１２】読み出し処理の流れについて説明するためのシーケンス図である。
【図１３】重複排除について説明するための図である。
【図１４】ＢＣＣの構造及び内容について説明するための図である。
【図１５】ＷＲＩＴＥ  Ｉ／Ｏ時の処理の流れについて説明するためのフロー図である。
【図１６】ＲＥＡＤ  Ｉ／Ｏ時の処理の流れについて説明するためのフロー図である。
【図１７】ＷＲＩＴＥ  Ｉ／Ｏ時の処理のうち、データ分割、ＢＣＣ付加、及びＢＩＤの保存などについて説明するための図である。
【図１８】ＷＲＩＴＥ  Ｉ／Ｏ時の処理のうち、データ分割、ＢＣＣ付加、及びＢＩＤの保存などに関する処理の流れについて説明するためのフロー図である。
【図１９】ＷＲＩＴＥ  Ｉ／Ｏ時の処理のうち、サイズ変換などについて説明するための図である。
【図２０】ＷＲＩＴＥ  Ｉ／Ｏ時の処理のうち、サイズ変換などに関する処理の流れについて説明するためのフロー図である。
【図２１】ＲＥＡＤ  Ｉ／Ｏ時の処理のうち、サイズ変換などに関する処理の流れについて説明するためのフロー図である。
【図２２】ＲＥＡＤ  Ｉ／Ｏ時の処理のうち、ＢＩＤの復元などに関する処理の流れについて説明するためのフロー図である。
【発明を実施するための形態】
【００１５】
以下に添付図面を参照しながら、本発明の実施形態について説明する。なお、本明細書及び図面において実質的に同一の機能を有する要素については、同一の符号を付することにより重複説明を省略する場合がある。
【００１６】
＜１．第１実施形態＞
図１を参照しながら、第１実施形態について説明する。第１実施形態は、重複排除機能を提供するストレージ制御装置に関する。
【００１７】
図１は、第１実施形態に係るストレージ制御装置の一例を示した図である。なお、図１に示したストレージ制御装置１０は、第１実施形態に係るストレージ制御装置の一例である。
【００１８】
図１に示すように、ストレージ制御装置１０は、記憶部１１及び制御部１２を有する。
記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置、或いは、ＨＤＤやフラッシュメモリなどの不揮発性記憶装置である。制御部１２は、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などのプロセッサである。制御部１２は、例えば、記憶部１１又は他のメモリに記憶されたプログラムを実行する。
【００１９】
記憶部１１には、論理領域２１の位置と物理領域２２の位置とを対応付けるメタ情報１１ａが格納される。
物理領域２２は、ＨＤＤやＳＳＤなどの記録媒体や、複数の記録媒体を組み合わせたＲＡＩＤ装置などの記憶装置が有する物理的な記憶領域、或いは、複数の記憶装置が有する物理的な記憶領域を纏めたストレージプールなどである。論理領域２１は、物理領域２２の少なくとも一部に対応付けられる論理的な記憶領域である。
【００２０】
論理領域２１の位置は、例えば、論理アドレスにより表現されうる。物理領域２２の位置は、例えば、物理アドレスにより表現されうる。図１（Ａ）のように、メタ情報１１ａは、論理アドレスＬ０、Ｌ１、Ｌ２と、物理アドレスＰ０、Ｐ１とを対応付ける。また、図１の例では、位置に関する情報１１ｂが記憶部１１に格納される。位置に関する情報１１ｂは、論理領域２１におけるデータの位置毎に異なる情報である。
【００２１】
図１の例では、データ３１（データＤ１）と、データＤ１に対するチェック符号３２ａと、論理領域２１内の位置（論理アドレスＬ１）に関する第１の情報３２ｂとを含む第１のデータブロック３０が物理領域２２に存在している。チェック符号３２ａは、データ３１に基づいて生成されるＣＲＣ（Cyclic Redundancy Check）などの符号である。第１の情報３２ｂは、論理領域２１にあるデータ３１の位置に依存して変わる情報である。
【００２２】
なお、この段階ではメタ情報１１ａの論理アドレスＬ２に物理アドレスＰ１が対応付けられておらず、位置に関する情報１１ｂのうち、論理アドレスＬ２にあるデータに対応する欄にＬ２の情報が登録されていない。
【００２３】
上記の状態で、データ４１（データＤ１）と、チェック符号４２ａと、論理領域２１内の位置Ｌ２に関する第２の情報４２ｂとを含む第２のデータブロック４０を論理領域２１に書き込む場合、制御部１２は、データＤ１に関する重複排除を実施する。
【００２４】
データ４１は、データ３１と同じ内容（データＤ１）のデータである。チェック符号４２ａは、データ４１に基づいて生成されるＣＲＣなどの符号である。データ３１、４１は同じデータＤ１であるから、チェック符号３２ａ、４２ａは同じ符号になる。一方、第２の情報４２ｂは、論理領域２１にあるデータ４１の位置に依存して変わる情報である。そのため、第１の情報３２ｂと第２の情報４２ｂとは異なる情報である。
【００２５】
上記の場合、第１のデータブロック３０と第２のデータブロック４０とは大部分（データ３１、４１、チェック符号３２ａ、４２ａ）が同じであるが、一部（第１の情報３２ｂ、第２の情報４２ｂ）が異なるデータブロックである。また、論理領域２１におけるデータ４１の位置を示す第２の情報４２ｂは、データ４１の読み出し時に利用される。
【００２６】
制御部１２は、メタ情報１１ａを用いて、第２のデータブロック４０が書き込まれる論理領域２１の位置（論理アドレスＬ２）と、第１のデータブロック３０がある物理領域２２の位置（物理アドレスＰ１）とを対応付ける（（Ａ）の状態）。この段階で、２つの論理アドレスＬ１、Ｌ２が、データＤ１のある１つの物理アドレスＰ１に対応付けられ、データＤ１に対する重複排除が適用された状態になる。
【００２７】
但し、論理アドレスＬ２に対応付けられる物理アドレスＰ１には、第２の情報４２ｂとは異なる第１の情報３２ｂを含む第１のデータブロック３０が格納されている。そのため、メタ情報１１ａに基づいて第２のデータブロック４０を読み出すと、物理アドレスＰ１にある第１のデータブロック３０が物理領域２２から読み出される。そのため、制御部１２は、第２のデータブロック４０から第２の情報４２ｂを取得し、取得した第２の情報４２ｂを位置に関する情報１１ｂとして記憶部１１に格納する。
【００２８】
第２のデータブロック４０を読み出す場合、制御部１２は、物理領域２２から第１のデータブロック３０を読み出すと共に、記憶部１１から取得した第２の情報４２ｂを用いて第２のデータブロック４０を復元する。例えば、制御部１２は、第１のデータブロック３０に含まれる第１の情報３２ｂを削除し、データ３１及びチェック符号３２ａに第２の情報４２ｂを付加して第２のデータブロック４０を復元する。
【００２９】
上記のように、論理領域２１におけるデータの位置に依存して変わる情報が含まれるデータブロック間で重複排除を実施する際に、その情報を記憶部１１に格納しておくことで、記憶部１１にある情報を利用して元のデータブロックを復元することが可能になる。この方法では、データブロックの書き込み時に、データブロック間で異なる情報の書き換えがなく、メタ情報１１ａの更新により重複排除が完了する。そのため、重複排除の処理が簡易になると共に、重複排除の処理にかかる時間や負荷の軽減に寄与する。
【００３０】
以上、第１実施形態について説明した。
＜２．第２実施形態＞
次に、第２実施形態について説明する。第２実施形態は、重複排除機能を有するストレージシステムに関する。
【００３１】
［２−１．システム］
図２を参照しながら、第２実施形態に係るストレージシステムについて説明する。図２は、第２実施形態に係るストレージシステムの一例を示した図である。なお、図２に示したストレージシステム５０は、第２実施形態に係るストレージシステムの一例である。
【００３２】
図２に示すように、ストレージシステム５０は、サーバ５１と、ノードブロック１０１、１０２とを有する。サーバ５１は、例えば、ホストコンピュータである。ノードブロック１０１、１０２は、例えば、それぞれ１つの筐体に収容されるストレージ装置である。以下では、説明の都合上、ノードブロック１０１、１０２をそれぞれＮｏｄｅＢｌｏｃｋ＃０、＃１と表記する場合がある。
【００３３】
ノードブロック１０１は、ノード１１１、１１３、及びドライブグループ１１２、１１４を有する。ノード１１１、１１３は、サーバ５１から受け付けるＩ／Ｏ要求を処理するコンピュータである。なお、ノード１１１、１１３は、ストレージ制御装置の一例である。ドライブグループ１１２、１１４は、例えば、ＨＤＤ、ＳＳＤ、ＲＡＩＤ装置などの記憶装置、或いは、複数の記憶装置を接続した記憶装置の集合である。
【００３４】
ノードブロック１０２は、ノード１２１、１２３、及びドライブグループ１２２、１２４を有する。ノード１２１、１２３は、サーバ５１から受け付けるＩ／Ｏ要求を処理するコンピュータである。なお、ノード１２１、１２３は、ストレージ制御装置の一例である。ドライブグループ１２２、１２４は、例えば、ＨＤＤ、ＳＳＤ、ＲＡＩＤ装置などの記憶装置、或いは、複数の記憶装置を接続した記憶装置の集合である。
【００３５】
以下では、説明の都合上、ノード１１１、１１３、１２１、１２３をそれぞれＮｏｄｅ＃０、＃１、＃２、＃３と表記する場合や、ドライブグループ１１２、１１４、１２２、１２４をそれぞれＤｒｉｖｅＧ＃０、＃１、＃２、＃３と表記する場合がある。
【００３６】
サーバ５１とノード１１１、１１３、１２１、１２３とは、例えば、ＦＣ（Fibre Channel）やｉＳＣＳＩ（Internet Small Computer System Interface）などを利用して接続される。ノードブロック１０１、１０２は、例えば、ＦＣ、ｉＳＣＳＩ、ＬＡＮ（Local Area Network）などを利用して接続される。ノード１１１、１１３、１２１、１２３とドライブグループ１１２、１１４、１２２、１２４とは、それぞれ、ＦＣ、ｉＳＣＳＩ、ＳＡＴＡ（Serial Advanced Technology Attachment）などを利用して接続される。なお、これらの接続方法は一例であり、上記の例に限定されない。
【００３７】
（サーバのハードウェア）
図３を参照しながら、サーバ５１のハードウェアについて説明する。図３は、第２実施形態に係るサーバの機能を実現可能なハードウェアの一例を示したブロック図である。
【００３８】
図３に示すように、サーバ５１は、メモリ５１ａ、プロセッサ５１ｂ、及びホストＩ／Ｆ（Interface）５１ｃを有する。
メモリ５１ａは、ＲＡＭなどの揮発性記憶装置、或いは、ＨＤＤやフラッシュメモリなどの不揮発性記憶装置である。プロセッサ５１ｂは、１つ又は複数のＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどの演算回路である。ホストＩ／Ｆ５１ｃは、ホストコンピュータ（この例ではサーバ５１）と他の機器（ストレージ装置やネットワーク機器）とを接続するためのＨＢＡ（Host Bus Adapter）や、通信インターフェースである。
【００３９】
プロセッサ５１ｂは、入出力Ｉ／Ｆ５１ｄに接続される。入出力Ｉ／Ｆ５１ｄは、例えば、キーボード、マウス、タッチパッドなどの入力装置や、ＥＬＤ（electroluminescent display）、ＬＣＤ（liquid crystal display）などの表示装置である。プロセッサ５１ｂは、例えば、メモリ５１ａに格納されたプログラムを実行する。
【００４０】
なお、プログラムは、予めメモリ５１ａに格納されるか、或いは、プロセッサ５１ｂにより、光ディスク、磁気ディスク、半導体メモリなどの可搬記録媒体５１ｅから読み出されてメモリ５１ａに格納される。サーバ５１と、ノード１１１、１１３、１２１、１２３とはホストＩ／Ｆ５１ｃを介して接続される。
【００４１】
（ノードのハードウェア及びソフトウェアスタック）
図４を参照しながら、ノード１１１のハードウェア及びソフトウェアスタック（基本機能）について説明する。図４は、第２実施形態に係るノードの機能を実現可能なハードウェア及びソフトウェアスタックの一例を示したブロック図である。なお、ノード１１１、１１３、１２１、１２３のハードウェア及びソフトウェアスタックは実質的に同じであるため、ノード１１３、１２１、１２３についての説明は省略する。
【００４２】
図４に示すように、ノード１１１は、メモリ１１１ａ、プロセッサ１１１ｂ、ホストＩ／Ｆ１１１ｃ、通信Ｉ／Ｆ１１１ｄ、及び接続Ｉ／Ｆ１１１ｅを有する。
メモリ１１１ａは、ＲＡＭなどの揮発性記憶装置、或いは、ＨＤＤやフラッシュメモリなどの不揮発性記憶装置である。プロセッサ１１１ｂは、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどの演算回路である。ホストＩ／Ｆ１１１ｃは、例えば、ＨＢＡである。図４の例では、プロセッサ１１１ｂを含む複数のプロセッサ、及びホストＩ／Ｆ１１１ｃを含む複数のホストＩ／Ｆがノード１１１に搭載されている。
【００４３】
通信Ｉ／Ｆ１１１ｄは、ノードブロック１０２との間の通信に利用される通信インターフェース（ＦＣアダプタ、ｉＳＣＳＩアダプタなど）である。接続Ｉ／Ｆ１１１ｅは、ドライブグループ１１２と接続するための接続インターフェース（ＦＣアダプタ、ＳＡＴＡアダプタなど）である。
【００４４】
プロセッサ１１１ｂは、例えば、メモリ１１１ａに格納されたプログラムを実行する。プログラムは、予めメモリ１１１ａに格納されるか、或いは、プロセッサ１１１ｂにより、光ディスク、磁気ディスク、半導体メモリなどの可搬記録媒体５２から読み出されてメモリ１１１ａに格納される。サーバ５１とノード１１１とはホストＩ／Ｆ１１１ｃを介して接続される。ノード１１１とノードブロック１０２とは通信Ｉ／Ｆ１１１ｄを介して接続される。
【００４５】
ノード１１１により提供される基本機能は、主に、メモリ１１１ａ及びプロセッサ１１１ｂによるソフトウェアの処理により実現される。図４に示すように、ノード１１１は、基本機能の要素として、上位接続部２０１、Ｉ／Ｏ制御部２０２、重複排除部２０３、データ管理部２０４、及びデバイス管理部２０５を有する。なお、専用のハードウェアを利用して少なくとも一部の要素を実現する変形が可能である。
【００４６】
上位接続部２０１は、サーバ５１からＩ／Ｏ要求（ＷＲＩＴＥ  Ｉ／Ｏ要求、ＲＥＡＤ  Ｉ／Ｏ要求）を受け付ける。Ｉ／Ｏ制御部２０２は、上位接続部２０１が受け付けたＩ／Ｏ要求に応じてＩ／Ｏ処理を制御する。重複排除部２０３は、重複データの有無を判定する。データ管理部２０４は、データの圧縮及び伸張、バッファリング、後述するメタ情報（論理アドレスと物理アドレスとを対応付ける情報）の管理などを実施する。デバイス管理部２０５は、ドライブグループ１１２に対するデータの読み書きを実施する。
【００４７】
（データの書き込み方法）
ここで、データの書き込み方法について説明する。
まず、図５を参照する。図５は、複数のノードに対するデータの分散配置について説明するための図である。
【００４８】
ストレージシステム５０では、ノード間の負荷分散を図るために書き込み対象のデータ（ＷＲＩＴＥ  Ｉ／Ｏデータ）が複数のデータ（実データ）に分割され、ノード１１１、１１３、１２１、１２３に分散配置される。そして、ノード１１１、１１３、１２１、１２３に分散配置された複数の実データは、それぞれドライブグループ１１２、１１４、１２２、１２４に書き込まれる。
【００４９】
なお、ストレージシステム５０では、データが書き込まれる物理領域としてドライブグループ１１２、１１４、１２２、１２４を束ねたストレージプール２０６が利用される。ストレージプール２０６内に書き込まれるデータの位置は、ストレージプール２０６のアドレス（物理アドレス）により管理される。
【００５０】
図５の例では、０番目の論理領域（以下、ＬＵＮ（Logical Unit Number）＃０）のＷＲＩＴＥ  Ｉ／Ｏデータがストレージプール２０６に書き込まれる。ＷＲＩＴＥ  Ｉ／Ｏデータは、例えば、実データＤ０、Ｄ１、…、Ｄ１９に分割される。そして、Ｄｋ（ｋ＝ｐ＋４ｑ；ｐ＝０，１，２，３、ｑ＝０，１，２，３，４）がＮｏｄｅ＃ｐに割り当てられる。この分散配置を適用することで、ノード１１１、１１３、１２１、１２３、及びドライブグループ１１２、１１４、１２２、１２４に対する負荷が分散される。
【００５１】
なお、ノード数が増加した場合にはデータの再配置が実施される。
次に、図６を参照する。図６は、ストレージプールに書き込まれるユーザデータ及びメタ情報の管理方法について説明するための図である。
【００５２】
図６（Ａ）に示すように、実データＤ０をストレージプール２０６に書き込むとき、データ管理部２０４は、実データＤ０に参照情報２０７を付加してユーザデータ２０８を生成する。参照情報２０７は、ＳＢ（Super Block）２０７ａと、参照ＬＵＮ／ＬＢＡ（Logical Block Addressing）情報２０７ｂとを含む。
【００５３】
ＳＢ２０７ａは、例えば、３２バイトに設定され、参照情報２０７の長さを示すヘッダ長（Header length）や実データＤ０のハッシュ値（Hash Value）などを含む。参照ＬＵＮ／ＬＢＡ情報２０７ｂは、例えば、８バイトに設定され、実データＤ０が格納される論理領域のＬＵＮ、及びその格納位置を示すＬＢＡを含む。つまり、参照ＬＵＮ／ＬＢＡ情報２０７ｂは、実データＤ０の論理的な格納先に関する情報を含む。
【００５４】
実データＤ０と同じ内容の実データＤｘを書き込む場合、データ管理部２０４は、実データＤｘの格納先となる論理領域のＬＵＮ、及びその格納位置を示すＬＢＡを含む参照ＬＵＮ／ＬＢＡ情報２０７ｂを生成する。また、データ管理部２０４は、実データＤｘの参照ＬＵＮ／ＬＢＡ情報２０７ｂを実データＤ０のユーザデータ２０８に追加する。
【００５５】
データ管理部２０４は、図６（Ｂ）のように、ユーザデータ２０８をメモリ１１１ａに一時的に格納する。なお、ユーザデータ２０８の格納先はメモリ１１１ａとは異なるキャッシュメモリ（非図示）でもよい。データ管理部２０４は、複数の実データのそれぞれに対応する複数のユーザデータをメモリ１１１ａに追記し、所定量（例えば、２４ＭＢ）のデータブロックを単位としてストレージプール２０６に書き出す制御を実施する。
【００５６】
以下では、説明の都合上、書き出されるデータの単位をＲＡＩＤユニットと呼ぶ場合がある。図６（Ｃ）の例では、ユーザデータＵＤ＃１、ＵＤ＃２、…、ＵＳ＃ｍを結合したデータがストレージプール２０６に書き込まれている。なお、図６（Ｃ）の矢印（ａ）、（ｂ）、（ｃ）は、参照ＬＵＮ／ＬＢＡ情報２０７ｂと実データとの対応関係を示している。ストレージプール２０６には、ユーザデータ２０８の他に、後述するメタアドレス情報２０９及びメタ情報２１０が書き込まれる。
【００５７】
メタ情報２１０は、論理アドレスと物理アドレスとを対応付ける情報である。メタアドレス情報２０９は、ストレージプール２０６におけるメタ情報２１０の位置を示す情報である。メタアドレス情報２０９及びメタ情報２１０もＲＡＩＤユニット単位でストレージプール２０６に書き込まれる。
【００５８】
メタアドレス情報２０９が書き込まれる領域は、例えば、ストレージプール２０６の先頭から所定範囲に予め確保される。他方、ユーザデータ２０８及びメタ情報２１０は、ＲＡＩＤユニット単位のデータが集まったタイミングでストレージプール２０６に順次追記される。つまり、図６（Ｃ）に示すように、メタアドレス情報２０９がストレージプール２０６の所定範囲（この例では先頭から所定範囲）に並んで書き込まれ、ユーザデータ２０８及びメタ情報２１０は混在する。
【００５９】
メタアドレス情報２０９は、図７のような構造及び内容を有する。図７は、メタアドレス情報の構造及び内容について説明するための図である。
図７に示すように、メタアドレス情報２０９は、ストレージプール２０６の識別情報（Disk Pool No.）を含む。また、メタアドレス情報２０９は、対応するメタ情報２１０のＲＡＩＤユニットを特定するための識別情報（RAID Unit No.）を含む。また、メタアドレス情報２０９は、対応するメタ情報２１０があるＲＡＩＤユニット内の位置情報（RAID Unit Offset LBA）を含む。メタアドレス情報２０９を参照することで、ストレージプール２０６に格納されているメタ情報２１０を検索することができる。
【００６０】
メタ情報２１０は、図８に示すような構造及び内容を有する。図８は、メタ情報の構造及び内容について説明するための図である。
図８に示すように、メタ情報２１０は、論理アドレス情報２１０ａ、物理アドレス情報２１０ｂ、及びＢＩＤ領域２１０ｃ（破線枠内）などを含む。
【００６１】
論理アドレス情報２１０ａには、ユーザデータ２０８が格納される論理領域のＬＵＮ及びその格納位置を示すＬＢＡが含まれる。また、物理アドレス情報２１０ｂには、ユーザデータ２０８が格納されるストレージプール２０６の識別情報（Disk Pool No.）、そのストレージプール２０６におけるＲＡＩＤユニットの識別情報（RAID Unit No.）、そのＲＡＩＤユニット内の位置情報（RAID Unit LBA）が含まれる。ＢＩＤ領域２１０ｃは、ＢＣＣ（Block Check Code）に含まれるＢＩＤ（Block Identifier）を格納するために確保される領域である。
【００６２】
メタアドレス情報２０９及びメタ情報２１０は、図９に示す方法でメモリ１１１ａにキャッシュされ、ＲＡＩＤユニット単位でストレージプール２０６に書き込まれる。図９は、メタアドレス情報及びメタ情報のキャッシュ及びストレージプールへの書き込み方法について説明するための図である。
【００６３】
図９に示すように、メモリ１１１ａには、キャッシュ領域として、メタアドレス情報２０９が一時的に格納されるメタアドレスキャッシュ２１１と、メタ情報２１０が一時的に格納されるメタ情報キャッシュ２１２とが設定される。メタアドレスキャッシュ２１１には、メタアドレス情報２０９が蓄積される。メタ情報キャッシュ２１２には、メタ情報２１０が蓄積される。なお、メタアドレスキャッシュ２１１及びメタ情報キャッシュ２１２のサイズは、ＲＡＩＤユニットのサイズ（例えば、２４ＭＢ）に設定される。
【００６４】
メタ情報キャッシュ２１２のデータ（メタ情報２１０）がキャッシュフル（充填状態）になると、そのデータはストレージプール２０６へ書き込まれ、メタ情報キャッシュ２１２はリセットされる。つまり、ＲＡＩＤユニット分のメタ情報２１０が集まると、ストレージプール２０６への書き込みが実施される。
【００６５】
例えば、ストレージプール２０６内の１７番目にあるＲＡＩＤユニット（ＲＵ＃１７）までが格納済の場合、１８番目のＲＡＩＤユニット（ＲＵ＃１８）にメタ情報キャッシュ２１２のデータが書き込まれる。
【００６６】
この場合、ＲＵ＃１８にメタ情報２１０が格納されていることを示すメタアドレス情報２０９が生成され、メタアドレスキャッシュ２１１に格納される。
メタアドレスキャッシュ２１１のデータ（メタアドレス情報２０９）がキャッシュフル（充填状態）になると、そのデータはストレージプール２０６に書き込まれ、メタアドレスキャッシュ２１１はリセットされる。つまり、ＲＡＩＤユニット分のメタアドレス情報２０９が集まると、ストレージプール２０６への書き込みが実施される。
【００６７】
なお、メタアドレスキャッシュ２１１のデータは、メタアドレス情報２０９用に確保されているＲＡＩＤユニット（例えば、ストレージプール２０６の先頭から所定範囲の領域）のうち空きのＲＡＩＤユニットに書き込まれる。
【００６８】
（書き込み処理の流れ）
ノード１１１における書き込み処理の流れは図１０及び図１１のようになる。
まず、図１０を参照する。図１０は、書き込み処理の流れ（重複なしの場合）について説明するためのシーケンス図である。
【００６９】
（Ｓ１０１）Ｉ／Ｏ制御部２０２は、上位接続部２０１を介してサーバ５１から実データの書き込み要求（ＷＲＩＴＥ要求）を受け付け、実データと共にＷＲＩＴＥ要求を重複排除部２０３へと出力する。
【００７０】
（Ｓ１０２）重複排除部２０３は、ＷＲＩＴＥ要求の対象となる実データが重複排除の対象になるか否かを判定する。例えば、重複排除部２０３は、メモリ１１１ａ又はストレージプール２０６にあるユーザデータ２０８のＳＢ２０７ａからハッシュ値を抽出し、ＷＲＩＴＥ要求の対象となる実データのハッシュ値と比較する。ハッシュ値が一致する場合、重複排除部２０３は、重複する実データがあると判定する。図１０の例では重複排除部２０３により重複がないと判定される。
【００７１】
（Ｓ１０３）重複排除部２０３は、データ管理部２０４にユーザデータ２０８を新規に書き込むように依頼する（ＵＤ  ＷＲＩＴＥ）。
（Ｓ１０４）データ管理部２０４は、ＷＲＩＴＥ要求の書き込み先となるＲＡＩＤユニットの識別情報（ＲＵ＃）をデバイス管理部２０５に要求する。
【００７２】
（Ｓ１０５）デバイス管理部２０５は、ＷＲＩＴＥ要求の書き込み先となるＲＡＩＤユニットの識別情報（ＲＵ＃）及びそのＲＡＩＤユニットがあるストレージプール２０６の識別情報（ＤＰ＃）をデータ管理部２０４へと出力する。
【００７３】
（Ｓ１０６）データ管理部２０４は、ＷＲＩＴＥ要求の対象となる実データを圧縮する。なお、非圧縮の状態でストレージプール２０６へ書き込む設定に変形してもよい。
（Ｓ１０７、Ｓ１０８）データ管理部２０４は、デバイス管理部２０５から出力されたＤＰ＃及びＲＵ＃を用いて参照ＬＵＮ／ＬＢＡ情報２０７ｂを生成し、ＳＢ２０７ａと組み合わせて参照情報２０７を生成する。そして、データ管理部２０４は、圧縮後の実データに参照情報２０７を組み合わせたユーザデータ２０８をメモリ１１１ａに格納する（バッファリング）。
【００７４】
（Ｓ１０９）データ管理部２０４は、メモリ１１１ａにあるユーザデータ２０８をＲＡＩＤユニット単位でストレージプール２０６に書き出せるか否かを判定する。書き出せる場合にはストレージプール２０６への書き出し処理が実行される。図１０の例では、メモリ１１１ａにあるユーザデータ２０８のデータ量がＲＡＩＤユニットの単位に達しておらず、書き出さないと判定されている（ＮＯ）。
【００７５】
（Ｓ１１０、Ｓ１１１）データ管理部２０４は、デバイス管理部２０５から出力されたＤＰ＃及びＲＵ＃を重複排除部２０３へ出力する。ＤＰ＃及びＲＵ＃を受信した重複排除部２０３は、ユーザデータ２０８の書き込み先及び書き込み完了を認識し、データ管理部２０４に対してメタ情報２１０の更新を要求する。
【００７６】
（Ｓ１１２）データ管理部２０４は、デバイス管理部２０５から出力されたＤＰ＃及びＲＵ＃に基づいてメタ情報２１０を更新する。
（Ｓ１１３、Ｓ１１４）データ管理部２０４は、バッファリングしたユーザデータ２０８に対応するメタ情報２１０の書き込み先となるＲＡＩＤユニットの識別情報（ＲＵ＃）をデバイス管理部２０５に要求する。この要求を受信したデバイス管理部２０５は、メタ情報２１０の書き込み先となるストレージプール２０６の識別情報（ＤＰ＃）及びＲＡＩＤユニットの識別情報（ＲＵ＃）をデータ管理部２０４に出力する。
【００７７】
（Ｓ１１５、Ｓ１１６）データ管理部２０４は、バッファリングしたユーザデータ２０８に対応するメタ情報２１０をメタ情報キャッシュ２１２（メモリ１１１ａ）に格納する（バッファリング）。そして、データ管理部２０４は、メタ情報キャッシュ２１２がキャッシュフルか否かを判定する（書き出し判定）。キャッシュフルの場合にはメタ情報キャッシュ２１２のデータをストレージプール２０６へ書き出す制御が実施される。図１０の例では、書き出さないと判定されている（ＮＯ）。
【００７８】
（Ｓ１１７、Ｓ１１８）データ管理部２０４は、デバイス管理部２０５から受信したＤＰ＃及びＲＵ＃を用いてメタアドレス情報２０９を更新する。そして、データ管理部２０４は、ＷＲＩＴＥ要求に対する応答としてユーザデータ２０８の書き込み完了をＩ／Ｏ制御部２０２に通知する。Ｉ／Ｏ制御部２０２は、上位接続部２０１を介してサーバ５１に書き込み完了の応答を返す。Ｓ１１８の処理が完了すると、図１０に示した一連の処理は終了する。
【００７９】
次に、図１１を参照する。図１１は、書き込み処理の流れ（重複ありの場合）について説明するためのシーケンス図である。
（Ｓ１２１）Ｉ／Ｏ制御部２０２は、上位接続部２０１を介してサーバ５１から実データの書き込み要求（ＷＲＩＴＥ要求）を受け付け、実データと共にＷＲＩＴＥ要求を重複排除部２０３へと出力する。
【００８０】
（Ｓ１２２）重複排除部２０３は、ＷＲＩＴＥ要求の対象となる実データが重複排除の対象になるか否かを判定する。
例えば、重複排除部２０３は、メモリ１１１ａ又はストレージプール２０６にあるユーザデータ２０８のＳＢ２０７ａからハッシュ値を抽出し、ＷＲＩＴＥ要求の対象となる実データのハッシュ値と比較する。ハッシュ値が一致する場合、重複排除部２０３は、重複する実データがあると判定する。図１１の例では重複排除部２０３により重複があると判定される。
【００８１】
（Ｓ１２３）重複排除部２０３は、データ管理部２０４に対して重複のあるユーザデータ２０８の書き込みを指示する（ＵＤ  ＷＲＩＴＥ）。
（Ｓ１２４）データ管理部２０４は、ＷＲＩＴＥ要求の対象となる実データと同じデータを含むユーザデータ２０８をストレージプール２０６から読み出す処理をデバイス管理部２０５に要求する（ＲＥＡＤ要求）。
【００８２】
なお、読み出し対象のユーザデータ２０８がメモリ１１１ａにある場合、データ管理部２０４は、デバイス管理部２０５へのＲＥＡＤ要求を省略してメモリ１１１ａからユーザデータ２０８を読み出してもよい。
【００８３】
（Ｓ１２５）デバイス管理部２０５は、ＲＥＡＤ要求に応じてユーザデータ２０８を読み出し、読み出したユーザデータ２０８をデータ管理部２０４に出力する。
（Ｓ１２６）データ管理部２０４は、デバイス管理部２０５から受信したユーザデータ２０８に含まれるＳＢ２０７ａのハッシュ値と、ＷＲＩＴＥ要求の対象となる実データから生成されるハッシュ値とを比較する。ハッシュ値が一致しない場合、データ管理部２０４は、エラー処理を実行する。図１１の例ではハッシュ値が一致している。
【００８４】
（Ｓ１２７）データ管理部２０４は、ＷＲＩＴＥ要求の対象となる実データに対応する参照ＬＵＮ／ＬＢＡ情報２０７ｂを生成し、デバイス管理部２０５から受信したユーザデータ２０８の参照情報２０７に追加する（参照情報更新）。
【００８５】
（Ｓ１２８）データ管理部２０４は、ＷＲＩＴＥ要求の書き込み先となるＲＡＩＤユニットの識別情報（ＲＵ＃）をデバイス管理部２０５に要求する。
（Ｓ１２９）デバイス管理部２０５は、ＷＲＩＴＥ要求の書き込み先となるＲＡＩＤユニットの識別情報（ＲＵ＃）及びそのＲＡＩＤユニットがあるストレージプール２０６の識別情報（ＤＰ＃）をデータ管理部２０４へと出力する。
【００８６】
（Ｓ１３０、Ｓ１３１）データ管理部２０４は、デバイス管理部２０５から出力されたＤＰ＃及びＲＵ＃を重複排除部２０３へ出力する。ＤＰ＃及びＲＵ＃を受信した重複排除部２０３は、ユーザデータ２０８の書き込み先及び書き込み完了を認識し、データ管理部２０４に対してメタ情報２１０の更新を要求する。
【００８７】
（Ｓ１３２）データ管理部２０４は、デバイス管理部２０５から出力されたＤＰ＃及びＲＵ＃に基づいてメタ情報２１０を更新する。
（Ｓ１３３、Ｓ１３４）データ管理部２０４は、バッファリングしたユーザデータ２０８に対応するメタ情報２１０の書き込み先となるＲＡＩＤユニットの識別情報（ＲＵ＃）をデバイス管理部２０５に要求する。この要求を受信したデバイス管理部２０５は、メタ情報２１０の書き込み先となるストレージプール２０６の識別情報（ＤＰ＃）及びＲＡＩＤユニットの識別情報（ＲＵ＃）をデータ管理部２０４に出力する。
【００８８】
（Ｓ１３５、Ｓ１３６）データ管理部２０４は、バッファリングしたユーザデータ２０８に対応するメタ情報２１０をメタ情報キャッシュ２１２（メモリ１１１ａ）に格納する（バッファリング）。そして、データ管理部２０４は、メタ情報キャッシュ２１２がキャッシュフルか否かを判定する（書き出し判定）。キャッシュフルの場合にはメタ情報キャッシュ２１２のデータをストレージプール２０６へ書き出す制御が実施される。図１１の例では、書き出さないと判定されている（ＮＯ）。
【００８９】
（Ｓ１３７、Ｓ１３８）データ管理部２０４は、デバイス管理部２０５から受信したＤＰ＃及びＲＵ＃を用いてメタアドレス情報２０９を更新する。そして、データ管理部２０４は、ＷＲＩＴＥ要求に対する応答としてユーザデータ２０８の書き込み完了をＩ／Ｏ制御部２０２に通知する。Ｉ／Ｏ制御部２０２は、上位接続部２０１を介してサーバ５１に書き込み完了の応答を返す。Ｓ１３８の処理が完了すると、図１１に示した一連の処理は終了する。
【００９０】
（読み出し処理の流れ）
ノード１１１における読み出し処理の流れは図１２のようになる。図１２は、読み出し処理の流れについて説明するためのシーケンス図である。
【００９１】
（Ｓ１４１）Ｉ／Ｏ制御部２０２は、上位接続部２０１を介してサーバ５１から実データの読み出し要求（ＲＥＡＤ要求）を受け付け、ＲＥＡＤ要求をデータ管理部２０４へと出力する。
【００９２】
（Ｓ１４２、Ｓ１４３）データ管理部２０４は、メタ情報２１０があるストレージプール２０６及びＲＡＩＤユニットなどの情報を含むメタアドレス情報２０９を探索する。そして、データ管理部２０４は、メタアドレス情報２０９をデバイス管理部２０５に通知してメタ情報２１０の読み出しを要求する（ＲＥＡＤ要求）。
【００９３】
（Ｓ１４４）デバイス管理部２０５は、データ管理部２０４から受け付けたＲＥＡＤ要求に応じてメタ情報２１０をストレージプール２０６から読み出し、データ管理部２０４に出力する。なお、該当するメタ情報２１０がメタアドレスキャッシュ２１１にある場合、デバイス管理部２０５は、メタアドレスキャッシュ２１１から読み出したメタ情報２１０をデータ管理部２０４に出力する。
【００９４】
（Ｓ１４５、Ｓ１４６）データ管理部２０４は、メタ情報２１０を解析し、Ｉ／Ｏ制御部２０２から受け付けたＲＥＡＤ要求の対象となるデータがあるストレージプール２０６、ＲＡＩＤユニット、及び物理アドレスなどを含む物理アドレス情報２１０ｂを特定する。そして、データ管理部２０４は、物理アドレス情報２１０ｂをデバイス管理部２０５に通知してユーザデータ２０８の読み出しを要求する（ＲＥＡＤ要求）。
【００９５】
（Ｓ１４７）デバイス管理部２０５は、データ管理部２０４から受け付けたＲＥＡＤ要求に応じてユーザデータ２０８をストレージプール２０６から読み出し、データ管理部２０４に出力する。なお、該当するユーザデータ２０８がメモリ１１１ａにキャッシュされている場合、デバイス管理部２０５は、メモリ１１１ａから読み出したユーザデータ２０８をデータ管理部２０４に出力する。
【００９６】
（Ｓ１４８、Ｓ１４９）ユーザデータ２０８が圧縮されている場合、データ管理部２０４は、ユーザデータ２０８を伸張する。また、データ管理部２０４は、ユーザデータ２０８に付与されている参照情報２０７を削除して実データを復元する。
【００９７】
（Ｓ１５０）データ管理部２０４は、ＲＥＡＤ要求に対する応答として、復元した実データをＩ／Ｏ制御部２０２に出力する。Ｉ／Ｏ制御部２０２は、上位接続部２０１を介してサーバ５１に実データを出力する。Ｓ１５０の処理が完了すると、図１２に示した一連の処理は終了する。
【００９８】
上記の説明では、説明の都合上、ノード１１１の基本機能をソフトウェアスタックとして表現し、ソフトウェアスタックの要素を単位としてデータの書き込み及び読み出しの動作について述べた。また、ユーザデータ２０８、メタ情報２１０がＲＡＩＤユニット単位でストレージプール２０６に追記書き込みされる仕組みについて説明してきた。なお、メタアドレス情報２０９の書き込みは上書きでもよい。
【００９９】
上記のような仕組みを適用することで、ストレージプール２０６を形成する記録媒体への書き込み頻度を低減するシステムの実現に寄与し、ＳＳＤなどの書き込み回数に制約のある記録媒体を利用する際のコスト低減や運用効率の向上などに繋がると期待されうる。但し、上述したストレージシステム５０は、第２実施形態の技術を適用可能なシステムの一例であり、一部の機能を省略する変形や他の機能を追加する変形も可能である。
【０１００】
（補足：重複排除について）
ここで、図１３を参照しながら、重複排除の機能（重複排除部２０３）について、さらに説明する。図１３は、重複排除について説明するための図である。なお、図１３の例では、説明の都合上、論理アドレス情報２１０ａと物理アドレス情報２１０ｂとを対応付けるメタ情報２１０の集合を表形式（メタ情報テーブル）で表現している。
【０１０１】
図１３（Ａ）において、ＬＵＮ＃０のメタ情報テーブルでは、ＬＵＮ＃０の論理アドレスｌｇＡｄｄ＃００、＃０１と、ストレージプール２０６の物理アドレスｐｈＡｄｄ＃０、＃１とがそれぞれ対応付けられている。ＬＵＮ＃１のメタ情報テーブルでは、ＬＵＮ＃１の論理アドレスｌｇＡｄｄ＃１０、＃１１と、ストレージプール２０６の物理アドレスｐｈＡｄｄ＃０、＃２とがそれぞれ対応付けられている。
【０１０２】
ＬＵＮ＃０、＃１のメタ情報テーブルを参照すると、論理アドレスｌｇＡｄｄ＃００、＃１０に同じ物理アドレスｐｈＡｄｄ＃０が対応付けられている。つまり、物理アドレスｐｈＡｄｄ＃０にあるデータについて重複排除が適用されており、論理アドレスｌｇＡｄｄ＃００、＃１０のデータを読み出す場合、いずれの場合も物理アドレスｐｈＡｄｄ＃０のデータが読み出される。
【０１０３】
上記の状態で、（ａ）のように、論理アドレスｌｇＡｄｄ＃００に新たなデータが書き込まれると（新データＷＲＩＴＥ）、重複排除部２０３は、（Ｂ）のように、ＬＵＮ＃１のメタ情報テーブルを更新する。例えば、新たなデータの書き込み先が物理アドレスｐｈＡｄｄ＃１０である場合、重複排除部２０３は、論理アドレスｌｇＡｄｄ＃００を物理アドレスｐｈＡｄｄ＃１０に対応付ける。デバイス管理部２０５は、新たなデータをストレージプール２０６の物理アドレスｐｈＡｄｄ＃１０に書き込む。
【０１０４】
上記のように、メタ情報テーブル（メタ情報２１０の集合）を書き換えることで重複排除を実施し、新データＷＲＩＴＥの際に、重複データの参照元となる論理アドレス（論理アドレスｌｇＡｄｄ＃１０）があるデータを残すことで書き込み処理を効率化できる。上記の方法を適用すると、例えば、ストレージプール２０６に重複データを一旦書き込んだ後で削除する場合に比べ、ストレージプール２０６への書き込み回数を減らすことができ、ＳＳＤなどの書き込み回数に制約のある記録媒体の長寿命化に寄与する。
【０１０５】
以上、第２実施形態に係るストレージシステムについて説明した。
［２−２．ＢＣＣの管理］
上述したストレージシステム５０では、Ｉ／Ｏ処理の単位となるブロック毎にデータの誤りをチェックするためのチェックコード（ＢＣＣ）が付与される。ＢＣＣを付与することで、ノード１１１内で実施するコピー処理や、ストレージプール２０６に対するＲＥＡＤ／ＷＲＩＴＥ処理の際に生じうるデータの誤りをチェックできるようになる。
【０１０６】
Ｉ／Ｏ処理の単位となるブロックのサイズは、例えば、ストレージプール２０６を形成する記録媒体（ＨＤＤやＳＳＤなど）のセクタサイズ（例えば、５１２バイト、４０９６バイト）を基準に設定される。Ｉ／Ｏ処理の対象となるデータのサイズが５１２バイト、ＢＣＣのサイズが８バイトの場合、ＢＣＣを含むデータブロックは５２０バイトブロックになる。以下、サイズがＸバイトのデータブロックをＸバイトブロックと呼ぶ場合がある。
【０１０７】
ＢＣＣは、図１４のような構造及び内容を有する。図１４は、ＢＣＣの構造及び内容について説明するための図である。図１４には、複数の５１２バイトブロックにそれぞれ８バイトのＢＣＣを付与して複数の５２０バイトブロックを生成する方法が例示されている。ＷＲＩＴＥ  Ｉ／Ｏ処理の対象となるデータ（例えば、管理単位となる８ＫＢブロック）は、５１２バイトブロックに分割され、図１４に示すようにＢＣＣが付与される。そして、５２０バイトブロックの集合が実データ（図１４の例では実データＤ０）となる。
【０１０８】
ＢＣＣは、ブロックＣＲＣ２１３ａ及びＢＩＤ２１３ｂを有する。ブロックＣＲＣ２１３ａの領域には、例えば、付与先の５１２バイトブロックから生成される１６ビットのＣＲＣが格納される。ＢＩＤ２１３ｂは、論理領域内のデータ位置をチェックするための情報を含む。ＢＩＤ２１３ｂの領域は、ＬＢＡに対応するカウント値（ＬＢＡをBig Endianで表現した場合の下位３２ビットに相当）が格納されるカウンタ領域（後１６ビット）と、カウント値以外のデータが格納される非固有データ領域（前１６ビット）とを有する。
【０１０９】
上記の非固有データ領域のデータは、８ＫＢブロックに含まれる５２０バイトブロックに共通のデータである。他方、上記のカウント値は、５１２バイトブロックのデータ位置に応じて異なる。そのため、上記のカウント値は、個々の５１２バイトブロックに固有のデータとなる。また、上記のカウント値は、８ＫＢブロックの先頭にある５２０バイトブロックのカウント値を基準に、順次１ずつインクリメントされた値になる。
【０１１０】
例えば、先頭の５２０バイトブロックのＢＣＣにあるカウント値がｎの場合、次の５２０バイトブロックのＢＣＣにあるカウント値は（ｎ＋１）になる。つまり、先頭の５２０バイトブロックを０番目として、ｍ番目の５２０バイトブロックのＢＣＣにあるカウント値は（ｎ＋ｍ）になる。そのため、先頭の５２０バイトブロックのＢＣＣにあるカウント値が分かれば、ｍ番目の５２０バイトブロックのＢＣＣにあるカウント値を計算により復元することができる。
【０１１１】
上記のように、５１２バイトブロックに付与されるＢＣＣは、その５１２バイトブロックに固有のデータを含む。そのため、ＢＣＣを付与後のデータブロック（５２０バイトブロック）を対象に重複排除を実施すると、重複排除の対象となるデータブロックが少なくなる。そのため、重複排除部２０３は、５１２バイトブロック、或いは、５２０バイトブロックのうちＢＩＤ２１３ｂ以外のデータを対象に重複排除を実施する。そして、重複排除部２０３は、ＢＩＤ２１３ｂをメタ情報２１０のＢＩＤ領域２１０ｃに格納する。
【０１１２】
なお、上述したメタ情報２１０は、例えば、８ＫＢブロック毎に生成される。重複排除部２０３は、ＷＲＩＴＥ  Ｉ／Ｏ処理時に重複排除を実施するとき、８ＫＢブロックの先頭に位置する５２０バイトブロックのＢＣＣにあるＢＩＤ２１３ｂを抽出し、抽出したＢＩＤ２１３ｂをメタ情報２１０のＢＩＤ領域２１０ｃに格納する。
【０１１３】
ＲＥＡＤ  Ｉ／Ｏ処理時には、重複排除部２０３が、メタ情報２１０のＢＩＤ領域２１０ｃからＢＩＤ２１３ｂを読み出し、読み出したＢＩＤ２１３ｂを利用して、８ＫＢブロックの先頭以外に位置する５２０バイトブロックのＢＣＣを復元する。８ＫＢブロックの先頭以外に位置する５２０バイトブロックのカウント値は計算により復元することができる。そのため、重複排除部２０３は、計算により復元したカウント値と、読み出したＢＩＤ２１３ｂのブロックＣＲＣ２１３ａ及びＢＩＤ２１３ｂの非固有データ領域とを用いて各５２０バイトブロックのＢＣＣを復元する。
【０１１４】
上記のように、８ＫＢブロックの先頭に位置する５２０バイトブロックのＢＩＤ２１３ｂだけをメタ情報２１０に格納し、他の５２０バイトブロックのＢＣＣを計算により復元することで、メモリ１１１ａの使用量を節約することができる。また、メタ情報２１０に格納することでＢＩＤの管理が容易になる。
【０１１５】
なお、説明の都合上、８ＫＢなどのデータサイズを例示しているが、データサイズの設定は変形可能である。また、上記の説明では実データＤ０に対応する５１２バイトブロックのＢＣＣについて述べたが、実データＤ０に参照情報２０７を付与したユーザデータ２０８についても上記と同様の方法でＢＣＣの管理及び重複排除を実施することができる。
【０１１６】
ところで、上記のように５１２バイトブロックにＢＣＣが付加されると、ＨＤＤやＳＳＤなどの記録媒体が採用するフォーマットのセクタサイズと、書き込み対象のデータサイズ（５２０バイト）とに差が生じ、アクセスに支障が生じうる。そのため、ストレージシステム５０では、データ管理部２０４により５２０バイトブロックの集合を５１２バイトブロックの集合にサイズ変換する処理が実行される。
【０１１７】
上記のサイズ変換により、記録媒体のセクタサイズと、書き込み対象のデータサイズ（５１２バイト）との差が解消され、ストレージプール２０６を形成する記録媒体へのアクセスに支障が生じるリスクを回避することができる。以下では、上述したＢＣＣの管理及びサイズ変換の処理を含むＷＲＩＴＥ  Ｉ／Ｏ時の処理及びＲＥＡＤ  Ｉ／Ｏ時の処理について、さらに説明する。
【０１１８】
（ＷＲＩＴＥ  Ｉ／Ｏ時の処理）
図１５を参照しながら、ＷＲＩＴＥ  Ｉ／Ｏ時の処理について、さらに説明する。図１５は、ＷＲＩＴＥ  Ｉ／Ｏ時の処理の流れについて説明するためのフロー図である。なお、ここでは一例としてノード１１１による処理について説明する。
【０１１９】
（Ｓ２０１）上位接続部２０１は、サーバ５１からＷＲＩＴＥ  Ｉ／Ｏ要求を受け付け、ＷＲＩＴＥ  Ｉ／Ｏ処理の対象となるデータ（ＷＲＩＴＥ  Ｉ／Ｏデータ）に含まれる複数の８ＫＢブロックをそれぞれ５１２バイト単位で分割して複数の５１２バイトブロックを生成する。また、上位接続部２０１は、複数の５１２バイトブロックのそれぞれにＢＣＣを付加して５２０バイトブロックを生成する（図１４を参照）。
【０１２０】
（Ｓ２０２）Ｉ／Ｏ制御部２０２は、上位接続部２０１により生成された５２０バイトブロックの書き込みを重複排除部２０３に要求する（ＷＲＩＴＥ  Ｉ／Ｏ  Ｒｅｑ．）。
（Ｓ２０３）重複排除部２０３は、書き込み対象の５２０バイトブロックからＢＩＤを抽出し、その５２０バイトブロックに対応する８ＫＢブロックの格納位置を示すメタ情報２１０のＢＩＤ領域２１０ｃ（図８を参照）に、抽出したＢＩＤを保存する。このとき、重複排除部２０３は、８ＫＢブロックの先頭にある５１２バイトブロックに対応するＢＩＤをＢＩＤ領域２１０ｃに保存する。８ＫＢブロックが重複排除の対象である場合、重複排除部２０３は、メタ情報２１０を用いて重複排除を実施する（図１３を参照）。
【０１２１】
（Ｓ２０４）データ管理部２０４は、書き込み対象の８ＫＢブロックから生成される複数の５２０バイトブロックを複数の５１２バイトブロックに変換する（サイズ変換）。例えば、データ管理部２０４は、複数の５２０バイトブロックを結合したビット列から５１２バイト単位でデータブロックを切り出して複数の５１２バイトブロックを生成する。
【０１２２】
（Ｓ２０５）デバイス管理部２０５は、データ管理部２０４により生成された複数の５１２バイトブロックをストレージプール２０６に書き込む。なお、書き込み対象の８ＫＢブロックをキャッシュする場合、複数の５１２バイトブロックは、一旦、メモリ１１１ａに書き込まれる。Ｓ２０５の処理が完了すると、図１５に示した一連の処理は終了する。
【０１２３】
（ＲＥＡＤ  Ｉ／Ｏ時の処理）
図１６を参照しながら、ＲＥＡＤ  Ｉ／Ｏ時の処理について、さらに説明する。図１６は、ＲＥＡＤ  Ｉ／Ｏ時の処理の流れについて説明するためのフロー図である。なお、ここでは一例としてノード１１１による処理について説明する。
【０１２４】
（Ｓ２１１）デバイス管理部２０５は、ストレージプール２０６から読み出し対象の８ＫＢブロックに対応する複数の５１２バイトブロックを読み出す。
（Ｓ２１２）データ管理部２０４は、デバイス管理部２０５により読み出された複数の５１２バイトブロックをそれぞれ５２０バイトブロックに変換する（サイズ変換）。例えば、データ管理部２０４は、複数の５１２バイトブロックを結合したビット列から５２０バイト単位でデータブロックを切り出して複数の５２０バイトブロックを生成する。
【０１２５】
（Ｓ２１３）重複排除部２０３は、読み出し対象の８ＫＢブロックに対応するメタ情報２１０のＢＩＤ領域２１０ｃからＢＩＤを取得する。メタ情報２１０のＢＩＤ領域２１０ｃから取得されるＢＩＤは、８ＫＢブロックの先頭に位置する５１２バイトブロックに対応するＢＩＤである。そのため、重複排除部２０３は、取得したＢＩＤに基づいて８ＫＢブロックの先頭以外に位置する５１２バイトブロックに対応するＢＩＤを復元する。
【０１２６】
例えば、重複排除部２０３は、ＢＩＤ領域２１０ｃから取得したＢＩＤのカウンタ領域にあるカウンタ値を１つずつインクリメントしたＢＩＤを生成し、８ＫＢブロック内の位置に応じたＢＩＤを各５２０バイトブロックのＢＣＣに設定する。８ＫＢブロックの先頭を０番目とする場合、先頭からｍ番目の位置にある５１２バイトブロックに対応するＢＩＤは、ＢＩＤ領域２１０ｃから取得されるＢＩＤのカウント値にｍを加えた値になる。
【０１２７】
（Ｓ２１４）Ｉ／Ｏ制御部２０２は、重複排除部２０３により復元された５２０バイトブロックを上位接続部２０１に転送する。
（Ｓ２１５）上位接続部２０１は、Ｉ／Ｏ制御部２０２から受け付けた５２０バイトブロックのＢＣＣを利用して、５１２バイトブロックの誤りをチェックする（ＢＣＣチェック）。そして、上位接続部２０１は、５２０バイトブロックからＢＣＣを削除して５１２バイトブロックを復元し、復元した５１２バイトブロックを結合した８ＫＢブロックをサーバ５１に送信する。Ｓ２１５の処理が完了すると、図１６に示した一連の処理は終了する。
【０１２８】
なお、図１５及び図１６の説明では、説明の都合上、データの圧縮・伸張や、参照情報２０７の付加・削除などの処理について説明を省略した。データ圧縮・伸張を含む処理の流れについては、後段においてさらに説明する。他方、参照情報２０７の付与・削除については、既に示した図６及び図１０から図１２の説明を参照されたい。
【０１２９】
（ＷＲＩＴＥ：データ分割、ＢＣＣ付加、及びＢＩＤの保存など）
ここで、図１７及び図１８を参照しながら、ＷＲＩＴＥ  Ｉ／Ｏ時の処理のうち、データ分割、ＢＣＣ付加、及びＢＩＤの保存などの処理について、さらに説明する。
【０１３０】
図１７は、ＷＲＩＴＥ  Ｉ／Ｏ時の処理のうち、データ分割、ＢＣＣ付加、及びＢＩＤの保存などについて説明するための図である。図１８は、ＷＲＩＴＥ  Ｉ／Ｏ時の処理のうち、データ分割、ＢＣＣ付加、及びＢＩＤの保存などに関する処理の流れについて説明するためのフロー図である。
【０１３１】
図１７に示すように、サーバ５１からＷＲＩＴＥ  Ｉ／Ｏデータを取得すると、上位接続部２０１は、ＷＲＩＴＥ  Ｉ／Ｏデータを８ＫＢブロックに分割する。このとき、ＷＲＩＴＥ  Ｉ／Ｏデータのサイズによっては、８ＫＢのサイズに満たないデータブロックが生じうる（データＤ３の部分）。このような場合、上位接続部２０１は、データブロックが８ＫＢとなるようにパディング処理を実行する。例えば、上位接続部２０１は、８ＫＢのサイズになるまでデータＤ３の後にビット値０を追加する。
【０１３２】
８ＫＢブロックを生成すると、上位接続部２０１は、８ＫＢブロックを複数の５１２バイトブロックに分割する。また、上位接続部２０１は、複数の５１２バイトブロックのそれぞれにＢＣＣを付加して５２０バイトブロックを生成する。重複排除部２０３は、８ＫＢブロックの先頭に対応する５２０バイトブロックのＢＩＤ２１３ｂを抽出し、メタ情報２１０のＢＩＤ領域２１０ｃに保存する。そして、サイズ変換により５２０バイトブロックから生成される５１２バイトブロックがストレージプール２０６に書き込まれる。
【０１３３】
上記のようなデータ分割、ＢＣＣ付加、及びＢＩＤの保存などの処理は、例えば、図１８の流れに沿って実行される。なお、図１８に示した処理は、上述したＳ２０１、２０３の処理に対応する。
【０１３４】
（Ｓ２２１、Ｓ２２２）上位接続部２０１は、ＷＲＩＴＥ  Ｉ／Ｏデータを８ＫＢ単位に分割して複数の８ＫＢブロックを生成する。８ＫＢブロックの一部にデータがない領域（未割り当て領域）がある場合（図１７のデータＤ３の部分を参照）、上位接続部２０１は、未割り当て領域にビット値０を充填するパディング処理を実行する。
【０１３５】
（Ｓ２２３）上位接続部２０１は、処理対象の８ＫＢブロックを選択する。そして、上位接続部２０１は、選択した８ＫＢブロックを複数の５１２バイトブロックに分割し、各５１２バイトブロックにＢＣＣを付加して５２０バイトブロックを生成する。
【０１３６】
（Ｓ２２４）重複排除部２０３は、上位接続部２０１により選択された８ＫＢブロックが重複排除の対象であるか否かを判定する。
例えば、重複排除部２０３は、選択された８ＫＢブロックのハッシュ値を計算し、計算したハッシュ値と同じハッシュ値を参照情報２０７（ＳＢ２０７ａ）に含むユーザデータ２０８を探索する。ハッシュ値が同じユーザデータ２０８がある場合、重複排除部２０３は、選択された８ＫＢブロックが重複排除の対象であると判定する。
【０１３７】
選択された８ＫＢブロックが重複排除の対象である場合、処理はＳ２２５へと進む。一方、選択された８ＫＢブロックが重複排除の対象でない場合、処理はＳ２２７へと進む。
（Ｓ２２５）重複排除部２０３は、８ＫＢブロックの先頭にある５１２バイトブロックに対応する５２０バイトブロック（先頭５２０バイトブロック）のＢＣＣからＢＩＤ２１３ｂを抽出する。そして、重複排除部２０３は、抽出したＢＩＤ２１３ｂを、選択された８ＫＢブロックに対応するメタ情報２１０のＢＩＤ領域２１０ｃに格納する。
【０１３８】
（Ｓ２２６）重複排除部２０３は、各５２０バイトブロックのＢＣＣにあるＢＩＤを初期化する。例えば、重複排除部２０３は、各５２０バイトブロックのＢＣＣにあるＢＩＤをビット値０で書き換える。
【０１３９】
（Ｓ２２７、Ｓ２２８）重複排除部２０３は、選択された８ＫＢブロック（該当８ＫＢブロック）のデータをデータ管理部２０４へ出力する。上位接続部２０１は、ＷＲＩＴＥ  Ｉ／Ｏデータから生成された全ての８ＫＢブロックを選択し終えたか否かを判定する。全ての８ＫＢブロックを選択し終えている場合、図１８に示した一連の処理は終了する。一方、未選択の８ＫＢブロックがある場合、処理はＳ２２３へと進む。
【０１４０】
（ＷＲＩＴＥ：サイズ変換など）
次に、図１９及び図２０を参照しながら、ＷＲＩＴＥ  Ｉ／Ｏ時の処理のうち、サイズ変換などの処理について、さらに説明する。
【０１４１】
図１９は、ＷＲＩＴＥ  Ｉ／Ｏ時の処理のうち、サイズ変換などについて説明するための図である。図２０は、ＷＲＩＴＥ  Ｉ／Ｏ時の処理のうち、サイズ変換などに関する処理の流れについて説明するためのフロー図である。
【０１４２】
これまでは、説明の都合上、８ＫＢブロックの圧縮について説明を省略していた。しかし、８ＫＢブロックを圧縮する場合も上記と同様に処理を進めることができる。例えば、８ＫＢブロックから上述した方法で複数の５２０バイトブロックを生成すると、図１９に示すように、８３２０バイト（５２０バイト×１６）のデータが得られる。
【０１４３】
この場合、記録媒体のセクタサイズにデータサイズを合わせるため、データ管理部２０４は、（Ａ）のように、複数の５２０バイトブロックを５１２バイト単位で分割すると共に、パディング処理により未割り当て領域にビット値０を充填する。この処理により、１７個の５１２バイトブロックが得られる。他方、８ＫＢブロックを圧縮する場合、（Ｂ）に示すように、データ管理部２０４は、圧縮後のデータを５１２バイト単位で分割して複数の５１２バイトブロックを生成する。
【０１４４】
上記のようなサイズ変換などの処理は、例えば、図２０の流れに沿って実行される。なお、図２０に示した処理は、上述したＳ２０４の処理に対応する。
（Ｓ２３１）データ管理部２０４は、重複排除部２０３から出力された８ＫＢブロックの圧縮を実施する。このとき、データ管理部２０４は、８ＫＢブロックの圧縮率を検出する。圧縮率は、例えば、圧縮前のデータサイズと圧縮後のデータサイズとの比率である。圧縮によりデータサイズが１／２になった場合、圧縮率は５０％である。
【０１４５】
（Ｓ２３２）データ管理部２０４は、圧縮率が１００％より大きいか否かを判定する。つまり、データ管理部２０４は、圧縮後のデータサイズが圧縮前のデータサイズより小さいか否かを判定する。圧縮率が１００％より大きい場合、処理はＳ２３３へと進む。一方、圧縮率が１００％より小さい場合、処理はＳ２３４へと進む。
【０１４６】
（Ｓ２３３）データ管理部２０４は、圧縮前の８ＫＢブロック（非圧縮ブロック）を５１２バイト単位に分割して各セクタに割り当てる。つまり、データ管理部２０４は、図１９の（Ａ）に示すように、非圧縮ブロックを分割して複数の５１２バイトブロックを生成する。Ｓ２３３の処理が完了すると、処理はＳ２３５へと進む。
【０１４７】
（Ｓ２３４）データ管理部２０４は、圧縮後の８ＫＢブロック（圧縮ブロック）を５１２バイト単位に分割して各セクタに割り当てる。つまり、データ管理部２０４は、図１９の（Ｂ）に示すように、圧縮ブロックを分割して複数の５１２バイトブロックを生成する。
【０１４８】
（Ｓ２３５、Ｓ２３６）データ管理部２０４は、分割により生成された５１２バイトブロックのうち終端（最終セクタ部分）の５１２バイトブロックに未割り当て領域がある場合、パディング処理により未割り当て領域にビット値０を充填する。そして、データ管理部２０４は、各セクタのデータ（各５１２バイトブロック）をデバイス管理部２０５へ出力する。Ｓ２３６の処理が完了すると、図２０に示した一連の処理は終了する。
【０１４９】
（ＲＥＡＤ：サイズ変換など）
次に、図２１を参照しながら、ＲＥＡＤ  Ｉ／Ｏ時の処理のうち、サイズ変換などに関する処理について、さらに説明する。図２１は、ＲＥＡＤ  Ｉ／Ｏ時の処理のうち、サイズ変換などに関する処理の流れについて説明するためのフロー図である。なお、図２１に示した処理は、上述したＳ２１５の処理に対応する。
【０１５０】
（Ｓ２４１）データ管理部２０４は、デバイス管理部２０５に８ＫＢブロック分のデータをストレージプール２０６から読み出すように読み出し依頼を行う。
（Ｓ２４２）データ管理部２０４は、デバイス管理部２０５により読み出された８ＫＢブロック分のデータが圧縮データであるか否かを判定する。圧縮データである場合、処理はＳ２４３へと進む。一方、圧縮データでない場合（非圧縮データである場合）、処理はＳ２４４へと進む。
【０１５１】
（Ｓ２４３）データ管理部２０４は、複数の５１２バイトブロックを結合して圧縮データを復元し、復元した圧縮データを伸張する。
（Ｓ２４４、Ｓ２４５）データ管理部２０４は、各セクタの５１２バイトブロックを結合して５２０バイトブロックのデータを復元する。つまり、データ管理部２０４は、ＷＲＩＴＥ  Ｉ／Ｏ時にセクタサイズに合わせて５１２バイトブロックにサイズ変換したデータを逆変換して５２０バイトブロックのデータを復元する。そして、データ管理部２０４は、復元したデータを重複排除部２０３へ出力する。
【０１５２】
（ＲＥＡＤ：ＢＩＤの復元など）
次に、図２２を参照しながら、ＲＥＡＤ  Ｉ／Ｏ時の処理のうち、ＢＩＤの復元などに関する処理について、さらに説明する。図２２は、ＲＥＡＤ  Ｉ／Ｏ時の処理のうち、ＢＩＤの復元などに関する処理の流れについて説明するためのフロー図である。なお、図２２の処理は、上述したＳ２１３、Ｓ２１５の処理に対応する。
【０１５３】
（Ｓ２５１、Ｓ２５２）重複排除部２０３は、データ管理部２０４から出力された８ＫＢブロックのデータ（５２０バイトブロックの集合）を取得する。また、重複排除部２０３は、取得した８ＫＢブロックに対応するメタ情報２１０をストレージプール２０６又はメタ情報キャッシュ２１２から読み出す。
【０１５４】
（Ｓ２５３）重複排除部２０３は、取得した８ＫＢブロックが重複排除の対象か否かを判定する。例えば、取得した８ＫＢブロックに対応するメタ情報２１０の論理アドレス情報２１０ａと同じ論理領域のデータ位置を指す他のメタ情報がある場合、重複排除部２０３は、取得した８ＫＢブロックが重複排除の対象であると判定する。
【０１５５】
取得した８ＫＢブロックが重複排除の対象である場合、処理はＳ２５４へと進む。一方、取得した８ＫＢブロックが重複排除の対象でない場合、処理はＳ２５６へと進む。
（Ｓ２５４）重複排除部２０３は、メタ情報２１０のＢＩＤ領域２１０ｃからＢＩＤ２１３ｂを取得する。このＢＩＤ２１３ｂは、８ＫＢブロックの先頭に位置する５１２バイトブロックに付加されたＢＣＣのＢＩＤ２１３ｂである。
【０１５６】
（Ｓ２５５）重複排除部２０３は、８ＫＢブロックの先頭に対応する５２０バイトブロックのＢＣＣに、取得したＢＩＤ２１３ｂを設定する。また、重複排除部２０３は、取得したＢＩＤ２１３ｂに含まれるカウンタ値をインクリメントして、８ＫＢブロックの先頭以外にある各５２０バイトブロックのＢＣＣに設定するＢＩＤを復元する。
【０１５７】
（Ｓ２５６）重複排除部２０３は、復元したＢＩＤを各５２０バイトブロックのＢＣＣに設定することで、８ＫＢブロックに対応する全ての５２０バイトブロックを復元する。また、重複排除部２０３は、読み出し対象の全ての８ＫＢブロックを取得し終えたか否かを判定する。全ての８ＫＢブロックを取得し終えている場合、処理はＳ２５７へと進む。一方、未取得の８ＫＢブロックがある場合、処理はＳ２５１へと進む。
【０１５８】
（Ｓ２５７）重複排除部２０３は、ＢＣＣ付ＲＥＡＤ  Ｉ／Ｏデータ（各８ＫＢブロックに対応する５２０バイトブロックの集合）をＩ／Ｏ制御部２０２へ出力する。各５２０バイトブロックはＩ／Ｏ制御部２０２を介して上位接続部２０１に入力され、上位接続部２０１によりＢＣＣチェック及びＢＣＣの削除後、サーバ５１へ送信される。Ｓ２５７の処理が完了すると、図２２に示した一連の処理は終了する。
【０１５９】
上記のように、ＢＣＣに含まれるＢＩＤ２１３ｂをメタ情報２１０に保持し、５１２バイトブロックについて重複排除を実施することで重複排除の効率改善に寄与する。また、メタ情報２１０にＢＩＤ２１３ｂを格納することで、ＢＩＤ２１３ｂを格納する領域をメモリ１１１ａ又はストレージプール２０６に確保せずに済むため、記憶容量の節約に寄与する。また、先頭５２０バイトブロックのＢＩＤ２１３ｂをメタ情報２１０に保存し、残りの５２０バイトブロックのＢＩＤを計算により復元するため、記憶容量のさらなる節約に寄与する。
【０１６０】
以上、第２実施形態について説明した。
＜３．付記＞
以上説明した実施形態に関し、さらに以下の付記を開示する。
【０１６１】
（付記１）  論理領域の位置と物理領域の位置とを対応付けるメタ情報が格納される記憶部と、
データと、前記データに対するチェック符号と、前記論理領域内の位置に関する第１の情報とを含む第１のデータブロックが前記物理領域にある場合、
前記データと、前記チェック符号と、前記論理領域内の位置に関する第２の情報とを含む第２のデータブロックを前記論理領域に書き込むとき、
前記メタ情報のうち前記第１のデータブロックのメタ情報を用いて取得した、前記第１のデータブロックがある前記物理領域の位置を、前記メタ情報のうち前記第２のデータブロックのメタ情報における前記物理領域の位置として、前記第２のデータブロックが書き込まれる前記論理領域の位置に対応付け、前記第２のデータブロックから取得される前記第２の情報を前記記憶部に格納する制御部と
を有する、ストレージ制御装置。
【０１６２】
（付記２）  前記制御部は、前記第２のデータブロックを前記論理領域から読み出すとき、前記メタ情報のうち前記第２のデータブロックのメタ情報を参照して前記物理領域から前記第１のデータブロックを読み出し、前記論理領域内の位置に関する第２の情報と前記第１のデータブロックに含まれる前記チェック符号とに基づいて前記第２のデータブロックを復元する
付記１に記載のストレージ制御装置。
【０１６３】
（付記３）  前記データは、複数の分割データを有し、
前記第２の情報は、前記複数の分割データにそれぞれ対応する複数の付加情報を有し、
前記複数の付加情報のそれぞれは、前記複数の分割データのうち、対応する分割データが前記データの先頭から何番目の位置にあるかを示すカウンタ値を含み、
前記制御部は、
前記第２の情報を前記記憶部に格納するとき、前記複数の付加情報のうち、前記データの先頭にある分割データに対応する付加情報を前記記憶部に格納し、前記第２のデータブロックを復元する際には、前記複数の付加情報のうち、前記記憶部にある付加情報を用いて残りの付加情報を生成する
付記２に記載のストレージ制御装置。
【０１６４】
（付記４）  前記制御部は、前記第２の情報を、前記メタ情報のうち前記第２のデータブロックのメタ情報に保存する
付記３に記載のストレージ制御装置。
【０１６５】
（付記５）  前記制御部は、前記第１のデータブロックを前記物理領域に書き込むとき、それぞれが前記物理領域に設定される単位区画と同じサイズになるように前記第１のデータブロックを複数のデータ要素に分割し、前記複数のデータ要素を前記物理領域に書き込む
付記４に記載のストレージ制御装置。
【０１６６】
（付記６）  論理領域の位置と物理領域の位置とを対応付けるメタ情報が格納される記憶部を参照し、
データと、前記データに対するチェック符号と、前記論理領域内の位置に関する第１の情報とを含む第１のデータブロックが前記物理領域にある場合、
前記データと、前記チェック符号と、前記論理領域内の位置に関する第２の情報とを含む第２のデータブロックを前記論理領域に書き込むとき、
前記メタ情報のうち前記第１のデータブロックのメタ情報を用いて取得した、前記第１のデータブロックがある前記物理領域の位置を、前記メタ情報のうち前記第２のデータブロックのメタ情報における前記物理領域の位置として、前記第２のデータブロックが書き込まれる前記論理領域の位置に対応付け、前記第２のデータブロックから取得される前記第２の情報を前記記憶部に格納する
処理をコンピュータに実行させる、ストレージ制御プログラム。
【０１６７】
（付記７）  前記第２のデータブロックを前記論理領域から読み出すとき、前記メタ情報のうち前記第２のデータブロックのメタ情報を参照して前記物理領域から前記第１のデータブロックを読み出し、前記論理領域内の位置に関する第２の情報と前記第１のデータブロックに含まれる前記チェック符号とに基づいて前記第２のデータブロックを復元する
処理を前記コンピュータに実行させる、付記６に記載のストレージ制御プログラム。
【０１６８】
（付記８）  前記データは、複数の分割データを有し、
前記第２の情報は、前記複数の分割データにそれぞれ対応する複数の付加情報を有し、
前記複数の付加情報のそれぞれは、前記複数の分割データのうち、対応する分割データが前記データの先頭から何番目の位置にあるかを示すカウンタ値を含み、
前記ストレージ制御プログラムは、
前記第２の情報を前記記憶部に格納するとき、前記複数の付加情報のうち、前記データの先頭にある分割データに対応する付加情報を前記記憶部に格納し、前記第２のデータブロックを復元する際には、前記複数の付加情報のうち、前記記憶部にある付加情報を用いて残りの付加情報を生成する
処理を前記コンピュータに実行させる、付記７に記載のストレージ制御プログラム。
【０１６９】
（付記９）  前記第２の情報を、前記メタ情報のうち前記第２のデータブロックのメタ情報に保存する
処理を前記コンピュータに実行させる、付記８に記載のストレージ制御プログラム。
【０１７０】
（付記１０）  前記第１のデータブロックを前記物理領域に書き込むとき、それぞれが前記物理領域に設定される単位区画と同じサイズになるように前記第１のデータブロックを複数のデータ要素に分割し、前記複数のデータ要素を前記物理領域に書き込む
処理を前記コンピュータに実行させる、付記９に記載のストレージ制御プログラム。
【符号の説明】
【０１７１】
１０  ストレージ制御装置
１１  記憶部
１１ａ  メタ情報
１１ｂ  位置に関する情報
１２  制御部
２１  論理領域
２２  物理領域
３０  第１のデータブロック
３１、４１、Ｄ１  データ
３２、４２  コード情報
３２ａ、４２ａ  チェック符号
３２ｂ  第１の情報
４０  第２のデータブロック
４２ｂ  第２の情報
Ｌ０、Ｌ１、Ｌ２  論理アドレス
Ｐ０、Ｐ１  物理アドレス
【図１】
2018181171.tif 000003
【図２】
2018181171.tif 000004
【図３】
2018181171.tif 000005
【図４】
2018181171.tif 000006
【図５】
2018181171.tif 000007
【図６】
2018181171.tif 000008
【図７】
2018181171.tif 000009
【図８】
2018181171.tif 000010
【図９】
2018181171.tif 000011
【図１０】
2018181171.tif 000012
【図１１】
2018181171.tif 000013
【図１２】
2018181171.tif 000014
【図１３】
2018181171.tif 000015
【図１４】
2018181171.tif 000016
【図１５】
2018181171.tif 000017
【図１６】
2018181171.tif 000018
【図１７】
2018181171.tif 000019
【図１８】
2018181171.tif 000020
【図１９】
2018181171.tif 000021
【図２０】
2018181171.tif 000022
【図２１】
2018181171.tif 000023
【図２２】
2018181171.tif 000024
【手続補正書】
【提出日】平成30年8月22日(2018.8.22)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
一態様によれば、論理領域の位置と物理領域の位置とを対応付けるメタ情報が格納される記憶部と、データと、データに対するチェック符号と、論理領域内にある当該データの位置に関する第１の情報とを含む第１のデータブロックがメタ情報のうち第１のデータブロックのメタ情報によって示される物理領域にある場合であって、データと、チェック符号と、論理領域内にある当該データの位置に関する第２の情報とを含む第２のデータブロックを論理領域に書き込むとき、データの重複排除処理によって、メタ情報のうち第１のデータブロックのメタ情報を用いて取得した、第１のデータブロックがある物理領域の位置を、第２のデータブロックの論理領域に対応する物理領域の位置として対応付け、第２のデータブロックから取得される第２の情報を記憶部の第２のデータブロックのメタ情報の格納領域に格納する制御部と、を有する、ストレージ制御装置が提供される。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
論理領域の位置と物理領域の位置とを対応付けるメタ情報が格納される記憶部と、
データと、前記データに対するチェック符号と、論理領域内にある当該データの位置に関する第１の情報とを含む第１のデータブロックが前記メタ情報のうち前記第１のデータブロックのメタ情報によって示される物理領域にある場合であって、
前記データと、前記チェック符号と、論理領域内にある当該データの位置に関する第２の情報とを含む第２のデータブロックを論理領域に書き込むとき、
前記データの重複排除処理によって、前記メタ情報のうち前記第１のデータブロックのメタ情報を用いて取得した、前記第１のデータブロックがある前記物理領域の位置を、前記第２のデータブロックの前記論理領域に対応する物理領域の位置として対応付け、前記第２のデータブロックから取得される前記第２の情報を前記記憶部の前記第２のデータブロックのメタ情報の格納領域に格納する制御部と、
を有する、ストレージ制御装置。
【請求項２】
前記制御部は、前記第２のデータブロックを前記論理領域から読み出すとき、前記メタ情報のうち前記第２のデータブロックのメタ情報を参照して前記物理領域から前記第１のデータブロックを読み出し、前記論理領域内の位置に関する第２の情報と前記第１のデータブロックに含まれる前記チェック符号とに基づいて前記第２のデータブロックを復元する、
請求項１に記載のストレージ制御装置。
【請求項３】
前記データは、複数の分割データを有し、
前記第２の情報は、前記複数の分割データにそれぞれ対応する複数の付加情報を有し、
前記複数の付加情報のそれぞれは、前記複数の分割データのうち、対応する分割データが前記データの先頭から何番目の位置にあるかを示すカウンタ値を含み、
前記制御部は、
前記第２の情報を前記記憶部のメタ情報の格納領域に格納するとき、前記複数の付加情報のうち、前記データの先頭にある分割データに対応する付加情報を前記メタ情報の格納領域に格納し、前記第２のデータブロックを復元する際には、前記複数の付加情報のうち、前記メタ情報にある付加情報を用いて残りの付加情報を生成する、
請求項２に記載のストレージ制御装置。
【請求項４】
前記制御部は、重複排除の対象ではないと判定された前記第１のデータブロックを前記物理領域に書き込むとき、前記第１の情報を抽出して前記記憶部の前記第１のデータブロックのメタ情報の格納領域に格納し、前記第１のデータブロックの前記第１の情報を所定のビット値で書き換える、
請求項１乃至３のいずれか１項に記載のストレージ制御装置。
【請求項５】
前記制御部は、前記第１のデータブロックを前記物理領域に書き込むとき、それぞれが前記物理領域に設定される単位区画と同じサイズになるように前記第１のデータブロックを複数のデータ要素に分割し、前記複数のデータ要素を前記物理領域に書き込む、
請求項４に記載のストレージ制御装置。
【請求項６】
論理領域の位置と物理領域の位置とを対応付けるメタ情報が格納される記憶部を参照し、
データと、前記データに対するチェック符号と、論理領域内にある当該データの位置に関する第１の情報とを含む第１のデータブロックが前記メタ情報のうち前記第１のデータブロックのメタ情報によって示される物理領域にある場合であって、
前記データと、前記チェック符号と、論理領域内にある当該データの位置に関する第２の情報とを含む第２のデータブロックを論理領域に書き込むとき、
前記データの重複排除処理によって、前記メタ情報のうち前記第１のデータブロックのメタ情報を用いて取得した、前記第１のデータブロックがある前記物理領域の位置を、前記第２のデータブロックの前記論理領域に対応する物理領域の位置として対応付け、前記第２のデータブロックから取得される前記第２の情報を前記記憶部の前記第２のデータブロックのメタ情報の格納領域に格納する、
処理をコンピュータに実行させる、ストレージ制御プログラム。