(57)【要約】【課題】ノード構成が変更された場合に、パリティのノード間移動およびストライプの再構成を行うストレージシステムを提供する。【解決手段】複数のノードを含んで構成されるストレージシステムであって、ノードは、データのライト及びリード要求のターゲットとなっており、異なるノードに格納される複数のデータ及びこの複数のデータに基づいて生成されたパリティによりストライプを形成し、ライト要求のデータが属するストライプのパリティを、複数のデータを格納する複数のノードとは異なるノードに格納して冗長化を行い、管理部は、ノード構成が変更された場合に、パリティのノード間移動及びストライプの再構成を行う配置変更要求をノードに送信するようにした。【選択図】図１
2020107082.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードを含んで構成されるストレージシステムであって、
前記ノードは、
データのライト及びリード要求のターゲットとなっており、
異なるノードに格納される複数のデータ及びこの複数のデータに基づいて生成されたパリティによりストライプを形成し、
前記ライト要求のデータが属する前記ストライプのパリティを、前記複数のデータを格納する複数のノードとは異なるノードに格納して冗長化を行い、
管理部は、ノード構成が変更された場合に、前記パリティのノード間移動及び前記ストライプの再構成を行う配置変更要求を前記ノードに送信する
ことを特徴とするストレージシステム。
【請求項２】
前記ノードは、受信したライト要求にかかるデータを自ノードのボリュームに格納する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記配置変更要求は、前記データをノード間で移動させない
ことを特徴とする請求項２に記載のストレージシステム。
【請求項４】
前記ノードは、受信したライト要求にかかるデータと、複数の他のノードが格納しているデータとストライプを形成しているパリティとを格納しており、
前記構成の変更は、ノードを増設する変更であり、
前記配置変更要求により、前記増設したノード内に、いずれかのノードに格納されたパリティを移動させるとともに、前記増設したノード内のデータと既存のノードに格納されたデータ及びパリティによりストライプを形成する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項５】
前記パリティを移動させるストライプと、新たに形成するストライプとは、別のストライプである
ことを特徴とする請求項１に記載のストレージシステム。
【請求項６】
前記ストライプの再構成は、増設されたノード内のデータを所定のデータとして、前記ストライプに加えてパリティを計算する
ことを特徴とする請求項４に記載のストレージシステム。
【請求項７】
前記増設したノードに移動させたパリティを格納していたノードに、新たに形成した前記ストライプのパリティを格納する
ことを特徴とする請求項４に記載のストレージシステム。
【請求項８】
複数のノードの物理領域を含んで冗長化グループが構築され、構築された冗長化グループから論理的に切り出された論理領域がストレージプールとして割り当てられ、
前記管理部は、前記ストレージプールに割り当てられている論理領域に紐づく物理領域が処理対象である場合、前記配置変更要求を送信する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項９】
複数のノードの物理領域を含んで冗長化グループが構築され、構築された冗長化グループから論理的に切り出された論理領域がストレージプールとして割り当てられ、
前記管理部は、一または複数の冗長化グループを処理単位として前記配置変更要求を送信する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項１０】
前記管理部は、データの保護ポリシがｍＤｎＰとして設定されている場合、各ノードに配置するデータの個数がｍ、パリティの個数がｎの比率となるように配置情報を生成する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項１１】
前記管理部は、前記構成の変更前の配置情報と前記構成の変更後の配置情報とを比較し、パリティの配置が変更されている領域に対してパリティが計算されるように前記配置変更要求を送信する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項１２】
前記管理部は、前記構成の変更がドライブを変更するものである場合、ドライブが変更されたノードに対して、前記ドライブにデータとパリティとを移動する配置変更要求または前記ドライブからデータとパリティとを移動する配置変更要求を送信する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項１３】
ライト要求のデータを受けたノードは、前記データを自ノードに格納し、前記データと前記データの旧データとの差分を示す中間データを生成し、配置情報に基づいて冗長化先のノードを特定し、特定したノードに前記中間データを送信し、
前記中間データを受信したノードは、前記中間データと、前記旧データのパリティとから前記データのパリティを計算することを、１のパリティに対して複数のノードから受信した前記中間データを用いて行う
ことを特徴とする請求項２に記載のストレージシステム。
【請求項１４】
複数のノードの物理領域を含んで冗長化グループが構築され、構築された冗長化グループから論理的に切り出された論理領域がストレージプールとして割り当てられ、
前記管理部は、構成の変更に応じて、新たな冗長化グループを含めて配置情報を生成し、前記配置情報に従ってパリティを構築する配置変更要求を各ノードに送信する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項１５】
第１のノードに格納される複数のデータより生成される一次符号と、前記第１のノードとは異なる第２のノードに格納されるデータと、に基づいて生成される二次符号をパリティとして前記第１のノードおよび前記第２のノードとは異なる第３のノードに格納することで冗長化が行われ、
前記配置変更要求を受信した前記第１のノードは、格納している複数のデータから前記一次符号を計算し、配置情報より前記一次符号を用いた冗長化に係るパリティを格納するノードを特定して前記一次符号を送信する
ことを特徴とする請求項２に記載のストレージシステム。
【請求項１６】
複数のノードを含んで構成されるストレージシステムにおける構成変更方法であって、
前記ノードは、
データのライト及びリード要求のターゲットとなっており、
異なるノードに格納される複数のデータ及びこの複数のデータに基づいて生成されたパリティによりストライプを形成し、
前記ノードが、前記ライト要求のデータが属する前記ストライプのパリティを、前記複数のデータを格納する複数のノードとは異なるノードに格納して冗長化を行う第１のステップと、
管理部が、ノード構成が変更された場合に、前記パリティのノード間移動及び前記ストライプの再構成を行う配置変更要求を前記ノードに送信する第２のステップと、
を備えることを特徴とする構成変更方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージシステムに関し、例えば冗長化を行うストレージシステムに適用して好適なものである。
【背景技術】
【０００２】
従来、ストレージシステムにおける複数のストレージ装置により、ＲＡＩＤ（Redundant Array of Independent Disks）グループを構成し、ＲＡＩＤグループに基づいて作成された論理ボリュームを、上位装置（例えば、ホストコンピュータ）に提供することが行われている。
【０００３】
例えば、ＲＡＩＤに関する技術として、分散ＲＡＩＤが知られている。分散ＲＡＩＤとは、データと、データを復元するための冗長データとを含むストライプ列をデータ保護ポリシ（ｍＤｎＰ）で定義されるｍ＋ｎよりも多くの複数のストレージ装置に分散させて管理する技術である。
【０００４】
近年、ＳＤＳ（Software Defined Storage）の市場が拡大している。この点、ＳＤＳにおけるノード間のデータ保護方式として、データの自ノードでの格納（データローカリティ）を維持したＥＣ（Erasure Coding）方式が開示されている（特許文献１参照）。かかるデータ保護方式によれば，高容量効率と高信頼性との並立を図ることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１６／０５２６６５号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
近時、ストレージ装置、デバイスなどのノードの増設に対するニーズが高まっている。
【０００７】
従来の分散ＲＡＩＤでは、現在のストライプ列に対して増設後のストライプ列を生成し、生成したストライプ列に合わせてデータを移動することでノードの増設が実現される。しかしながら、増設したノードの空き容量を使用するためには，既存のノードから増設したノードへのデータの移動が必要となり、データの格納先が変わることで、ストレージシステムに悪影響を及ぼすおそれがある。
【０００８】
また、特許文献１に記載の技術に基づいて冗長化グループを形成している場合、既存のノードからデータを移動すると，データローカリティを消失し、ストレージ性能が低下してしまう問題がある。
【０００９】
本発明は以上の点を考慮してなされたもので、ノード構成が変更された場合に、パリティのノード間移動およびストライプの再構成を行うストレージシステムを提案しようとするものである。
【課題を解決するための手段】
【００１０】
かかる課題を解決するため本発明においては、複数のノードを含んで構成されるストレージシステムであって、前記ノードは、データのライト及びリード要求のターゲットとなっており、異なるノードに格納される複数のデータ及びこの複数のデータに基づいて生成されたパリティによりストライプを形成し、前記ライト要求のデータが属する前記ストライプのパリティを、前記複数のデータを格納する複数のノードとは異なるノードに格納して冗長化を行い、管理部は、ノード構成が変更された場合に、前記パリティのノード間移動及び前記ストライプの再構成を行う配置変更要求を前記ノードに送信するようにした。
【００１１】
上記構成によれば、例えば、構成の変更に応じて組み替えられたストライプのパリティを計算することで構成の変更を行うことが可能となる。
【発明の効果】
【００１２】
本発明によれば、適応性の高いストレージシステムを実現することができる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態によるストレージシステムの概要を示すイメージ図である。
【図２】第１の実施の形態によるストレージシステムに係る物理構成の一例を示す図である。
【図３】第１の実施の形態によるストレージシステムに係る論理構成の一例を示す図である。
【図４】第１の実施の形態によるメモリ内の情報の一例を示す図である。
【図５】第１の実施の形態によるクラスタ構成管理テーブルの一例を示す図である。
【図６】第１の実施の形態によるストレージプール構成管理テーブルの一例を示す図である。
【図７】第１の実施の形態によるチャンク構成管理テーブルの一例を示す図である。
【図８】第１の実施の形態によるチャンクマッピング管理テーブルの一例を示す図である。
【図９】第１の実施の形態によるチャンクグループ内マッピング管理テーブルの一例を示す図である。
【図１０】第１の実施の形態によるマッピング変更の概要を示すイメージ図である。
【図１１】第１の実施の形態によるマッピング変更の特徴的構成を示すイメージ図である。
【図１２】第１の実施の形態によるマッピング変更の特徴的構成を示すイメージ図である。
【図１３】第１の実施の形態によるリード処理に係るフローチャートの一例を示す図である。
【図１４】第１の実施の形態によるライト処理に係るフローチャートの一例を示す図である。
【図１５】第１の実施の形態によるストレージプール拡張処理に係るフローチャートの一例を示す図である。
【図１６】第１の実施の形態による構成変更処理に係るフローチャートの一例を示す図である。
【図１７】第１の実施の形態によるマッピング変更処理に係るフローチャートの一例を示す図である。
【図１８】第１の実施の形態によるデータ冗長化先変更処理に係るフローチャートの一例を示す図である。
【図１９】第２の実施の形態によるマッピング変更の特徴的構成を示すイメージ図である。
【図２０】第３の実施の形態によるＭＥＣの概要を示すイメージ図である。
【図２１】第３の実施の形態によるマッピング変更の特徴的構成を示すイメージ図である。
【図２２】第４の実施の形態によるマッピング変更の特徴的構成を示すイメージ図である。
【図２３】第５の実施の形態によるマッピング変更の概要を示すイメージ図である。
【図２４】第５の実施の形態によるマッピング変更処理に係るフローチャートの一例を示す図である。
【発明を実施するための形態】
【００１４】
以下図面について、本発明の一実施の形態を詳述する。本実施の形態は、データの移動を行うことなく、ストレージシステムの構成の変更を行うことができる技術に関する。本実施の形態に示すストレージシステムは、１以上の特徴的な構成を有する。例えば、本ストレージシステムは、データを読み出して、新規グルーピングでのパリティ生成先のノードに転送し、新規グルーピングのパリティを生成し、さらに旧グルーピングについても別のデータ格納領域と新規のパリティを生成することを特徴とする。また、例えば、本ストレージシステムは、各ノードのデータの個数とパリティの個数との比率が均一になるようにグルーピングを決めることを特徴とする。また、例えば、本ストレージシステムは、増設対象がノードであるかデバイスであるかを判定し、デバイスの増設であると判定した場合、ノード内のデバイス間でのデータの移動により、再グルーピングすることを特徴とする。以下では、これら以外の特徴的な構成についても示されている。
【００１５】
なお、以下の説明では、同種の要素を区別しないで説明する場合には、枝番を含む参照符号のうちの共通部分（枝番を除く部分）を使用し、同種の要素を区別して説明する場合は、枝番を含む参照符号を使用することがある。例えば、ノードを特に区別しないで説明する場合には、「ノード１００」と記載し、個々のノードを区別して説明する場合には、「ノード１００−０」、「ノード１００−１」のように記載することがある。
【００１６】
（１）第１の実施の形態
図１において、１は全体として第１の実施の形態によるストレージシステムを示す。
【００１７】
図１は、ストレージシステム１の概要を示すイメージ図である。ストレージシステム１は、１以上のノード１００（例えば、サーバ装置）を含んで構成される。
【００１８】
ユーザは、ストレージシステム１に係る構成の変更の指示（ノード１００を増設する指示など）を図示は省略するクライアントノード（例えば、クライアント装置）を介して管理プログラム１０１に出す。管理プログラム１０１は、各ノード１００上のストレージ制御プログラム１０２に構成の変更に伴うマッピング変更要求を出す。マッピング変更要求は、データを格納するノード１００を変更すること（例えば、データを移動すること）なく、当該データの冗長化に係るパリティの配置（ストライプ）を変更する要求である。ストレージ制御プログラム１０２は、マッピング変更要求に従って、パリティを計算し、パリティを書き変える。
【００１９】
管理プログラム１０１（コーディネータ：調停プログラムとも呼ぶ）は、何れかのノードに設けられてよいし、全てのノード１００に設けられてもよいし、一部のノード１００に設けられてもよいし、ストレージ制御プログラム１０２が存在しない独立したノードに設けられてもよい。
【００２０】
管理プログラム１０１は、例えば、論理領域１０３に割り当てられている物理領域１０４を処理対象として、マッピング変更処理によるパリティの計算を実行するようにマッピング変更要求を出す。かかる構成によれば、未使用の物理領域１０４に対しての無駄な計算、計算に必要なデータの転送が削減される。
【００２１】
以下では、構成を変更（増設または減設）する記憶資源としては、主にノード１００を例に挙げて説明するが、データセンタといったサイト、ドライブといった記憶デバイスなどの他の記憶資源であってもよく、同様に処理できる。
【００２２】
図２は、ストレージシステム１に係る物理構成の一例を示す図である。
【００２３】
ストレージシステム１には、１以上のサイト２１０が設けられてもよい。サイト２１０は、ネットワーク２２０を介して通信可能に接続される。ネットワーク２２０は、例えば、ＷＡＮ（Wide Area Network）であるが、ＷＡＮに限定するものではない。
【００２４】
サイト２１０は、データセンタ等であり、１以上のノード１００を含んで構成される。
【００２５】
ノード１００は、一般的なサーバ計算機の構成を備えてよい。ノード１００は、例えば、プロセッサ２１１、メモリ２１２等を含む１以上のプロセッサパッケージ、１以上のドライブ２１３、１以上のポート２１４を含んで構成される。各構成要素は、内部バス２１５を介して接続されている。
【００２６】
プロセッサ２１１は、例えば、ＣＰＵ（Central Processing Unit）であり、各種の処理を行う。
【００２７】
メモリ２１２は、ノード１００の機能を実現する上で必要な制御用の情報を格納したり、キャッシュデータを格納したりする。また、メモリ２１２は、例えば、プロセッサ２１１により実行されるプログラムを格納する。メモリ２１２は、揮発性のＤＲＡＭ（Dynamic Random Access Memory）であってもよいし、不揮発のＳＣＭ（Storage Class Memory）であってもよいし、その他の記憶デバイスであってもよい。
【００２８】
ドライブ２１３は、各種のデータ、プログラムなどを記憶する。ドライブ２１３は、ＳＡＳ（Serial Attached SCSI）またはＳＡＴＡ（Serial Advanced Technology Attachment）接続のＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）、ＮＶＭｅ（Non-Volatile Memory Express）接続のＳＳＤの他、不揮発メモリ（ＳＣＭ：Storage Class Memory）等であってもよく、記憶装置の一例である。
【００２９】
ポート２１４は、ネットワーク２１６に接続され、サイト２１０内の他のノード１００と通信可能に接続されている。ネットワーク２１６は、例えば、ＬＡＮ（Local Area Network）であるが、ＬＡＮに限定するものではない。
【００３０】
ストレージシステム１に係る物理構成は、上述の内容に限定されるものではない。例えば、ネットワーク２１６，２２０については、冗長化されていてもよい。また、例えば、ネットワーク２１６は、管理用のネットワークとストレージ用のネットワークとで分離してもよく、接続規格は、Ethernet（登録商標）、Infiniband、無線でもよく、接続トポロジも図２に示す構成に限定しない。
【００３１】
図３は、ストレージシステム１に係る論理構成の一例を示す図である。ストレージシステム１では、ストレージ仮想化が行われ、複数の物理領域が仮想的に統合され、１つのストレージプールとして利用される。さらに、ストレージシステム１では、シンプロビジョニングにより、各ホストノード３００が現在利用している容量だけが割り当てられている。
【００３２】
より具体的には、図３に示すように、ドライブ２１３は、データ、パリティ等を格納する物理的な領域であるデータ格納領域を有する。データ格納領域のうちの全部または一部の領域であり、連続した領域である物理チャンク３０１は、チャンクグループ３０２に割り当てられる。
【００３３】
チャンクグループ３０２は、複数のノード１００のドライブ２１３の物理チャンク３０１から構成される。例えば、データ保護ポリシが４Ｄ１Ｐである場合、異なるノード１００のドライブ２１３から確保した５つの物理チャンク３０１でチャンクグループ３０２が構成される。
【００３４】
ここで、データ保護ポリシとしては、例えば、ＥＣ（Erasure Coding）、ＭＥＣ（Multi-stage Erasure Coding）などがある。なお、ＥＣとしては、データローカリティを保持しない第１の方式と、データローカリティを保持する第２の方式（例えば、国際公開第２０１６／５２６６５号に記載の方式）とがあるが、ストレージシステム１には、何れの方式も適用可能である。なお、本実施の形態では、第２の方式を適用したケースを例に挙げて主に説明する。
【００３５】
付言するならば、例えば、第１の方式の２Ｄ１ＰのＥＣでは、ライト要求のデータを第１のデータと第２のデータとに分け、第１のデータを第１のノード１００に格納し、第２のデータを第２のノード１００に格納し、第１のデータおよび第２のデータのパリティを第３のノード１００に格納することで冗長化が行われる。また、例えば、第２の方式の２Ｄ１ＰのＥＣでは、ライト要求のデータを第１のデータと第２のデータとに分け、第１のデータおよび第２のデータを第１のノード１００（自ノード１００）に格納し、第１のデータのパリティを第２のノード１００に格納し、第２のデータのパリティを第３のノード１００に格納することで冗長化が行われる。なお、ＭＥＣについては、図２０を用いて後述する。
【００３６】
チャンクグループ３０２からは、論理チャンク３０３が切り出される。論理チャンク３０３は、各ノード１００のストレージプール３０５に容量を割り当てる単位である。１つのチャンクグループ３０２から１つの論理チャンク３０３が切り出されてもよいし、複数の論理チャンク３０３が切り出されてよい。
【００３７】
付言するならば、例えば、データ保護ポリシが４Ｄ１Ｐである場合、データの格納領域として利用できるのは、チャンクグループ３０２に割り当てられた物理チャンク３０１の総量の４／５となり、パリティの格納領域として利用できるのは、チャンクグループ３０２に割り当てられた物理チャンク３０１の総量の１／５となる。つまり、論理チャンク３０３として切り出せる最大の容量は、データ保護ポリシに応じて異なる。
【００３８】
切り出された論理チャンク３０３は、プールボリューム３０４としてストレージプール３０５にアタッチされる。ストレージプール３０５は、１以上のプールボリューム３０４を含んで構成される。ストレージプール３０５からは、アプリケーション３１１により利用される仮想ボリューム３０６が切り出される。つまり、ストレージ制御プログラム１０２は、利用者の要求に応じた容量を、ドライブ２１３に割り当てず、仮想ボリューム３０６として割り当てる。
【００３９】
例えば、ストレージ制御プログラム１０２は、アプリケーション３１１からライト要求を受信した場合、新規のライトであるときは、仮想ボリューム３０６のページ３０７（より詳細には、ページ３０７に紐づく物理チャンク３０１の物理領域）を割り当てる。なお、ページ３０７には、プールボリューム３０４のページ３０８が対応付けられている。更新のライトであるときは、ストレージ制御プログラム１０２は、割り当てたページ３０７に紐づく物理チャンク３０１の物理領域を特定してデータを更新する。なお、ライト要求のデータ（または後述の中間データ）は、データの冗長化に係る他のノード１００に転送されてパリティが更新される。
【００４０】
このように、ストレージ制御プログラム１０２は、ドライブ２１３を共有のストレージプール３０５として管理し、仮想ボリューム３０６に書き込まれたデータ量に応じてドライブ２１３に容量を割り当てる。これにより、使用されないドライブ２１３の無駄をなくし、効率的な運用が行わる。
【００４１】
以下では、データを更新するにあたり、当該データは、ライト要求を受領したノード１００のドライブ２１３（ローカルドライブ）に格納される構成（データローカリティを維持し、リード時のネットワークオーバヘッドを排除する構成）を例に挙げて主に説明する。
【００４２】
なお、データにアクセスするアプリケーション３１１は、ホストノード３００に設けられて動作するものであってもよいし、ストレージ制御プログラム１０２と同一ノード１００に設けられて動作するものであってもよいし、別のノード１００に設けられて動作するものであってもよい。
【００４３】
図４は、メモリ２１２内の情報（ドライブ２１３からメモリ２１２に読み出される情報）の一例を示す図である。なお、制御情報テーブル４１０、各種のプログラム（管理プログラム１０１、ストレージ制御プログラム１０２等）は、実行中はメモリ２１２上に展開されるが、停電等に備えてドライブ２１３等の不揮発な領域に格納されている。
【００４４】
制御情報テーブル４１０には、クラスタ構成管理テーブル４１１、ストレージプール構成管理テーブル４１２、チャンク構成管理テーブル４１３、チャンクマッピング管理テーブル４１４、およびチャンクグループ内マッピング管理テーブル４１５が含まれる。各テーブルについては、図５〜図９を用いて後述する。
【００４５】
管理プログラム１０１は、管理部の一例であり、増減設管理処理部４２１および論理チャンク割当処理部４２２を備える。
【００４６】
ストレージ制御プログラム１０２は、ストレージ制御部の一例であり、リード処理部４３１、ライト処理部４３２、およびマッピング変更処理部４３３を備える。
【００４７】
ノード１００の機能（増減設管理処理部４２１、論理チャンク割当処理部４２２、リード処理部４３１、ライト処理部４３２、マッピング変更処理部４３３など）は、例えば、プロセッサ２１１がドライブ２１３に格納されたプログラムをメモリ２１２に読み出して実行すること（ソフトウェア）により実現されてもよいし、専用の回路などのハードウェアにより実現されてもよいし、ソフトウェアとハードウェアとが組み合わされて実現されてもよい。また、ノード１００の機能の一部は、ノード１００と通信可能な他のコンピュータにより実現されてもよい。
【００４８】
図５は、クラスタ構成管理テーブル４１１の一例を示す図である。
【００４９】
クラスタ構成管理テーブル４１１は、サイト２１０、ノード１００、ドライブ２１３の構成を管理するための情報を格納する。
【００５０】
クラスタ構成管理テーブル４１１は、サイト構成管理テーブル５１０、ノード構成管理テーブル５２０、およびドライブ構成管理テーブル５３０を含んで構成される。なお、ストレージシステム１は、サイト構成管理テーブル５１０を管理し、サイト２１０は、サイト２１０内の複数のノード構成管理テーブル５２０を管理し、ノード１００は、ノード１００内の複数のドライブ構成管理テーブル５３０を管理する。
【００５１】
サイト構成管理テーブル５１０は、サイト２１０に係る構成（サイト２１０とノード１００との関係など）を示す情報を格納する。より具体的には、サイト構成管理テーブル５１０は、サイトＩＤ（identification）５１１と、状態５１２と、関連ノードＩＤ５１３とが対応付けられた情報を格納する。
【００５２】
サイトＩＤ５１１は、サイト２１０を識別可能な識別情報（例えば、ＩＤ）である。状態５１２は、サイト２１０の状態を示す状態情報（ＮＯＲＭＡＬ、ＷＡＲＮＩＮＧ、ＦＡＩＬＵＲＥ等）である。関連ノードＩＤ５１３は、サイト２１０に設けられるノード１００を識別可能な識別情報（例えば、ＩＤ）である。
【００５３】
ノード構成管理テーブル５２０は、サイト２１０ごとに設けられ、サイト２１０に設けられるノード１００に係る構成（ノード１００とドライブ２１３との関係など）を示す情報を格納する。より具体的には、ノード構成管理テーブル５２０は、ノードＩＤ５２１と、状態５２２と、関連ドライブＩＤ５２３とが対応付けられた情報を格納する。
【００５４】
ノードＩＤ５２１は、ノード１００を識別可能な識別情報（例えば、ＩＤ）である。状態５２２は、ノード１００の状態を示す状態情報（ＮＯＲＭＡＬ、ＷＡＲＮＩＮＧ、ＦＡＩＬＵＲＥ等）である。関連ドライブＩＤ５２３は、ノード１００に設けられるドライブ２１３を識別可能な識別情報（例えば、ＩＤ）である。
【００５５】
ドライブ構成管理テーブル５３０は、ノード１００ごとに設けられ、ノード１００に設けられるドライブ２１３に係る構成を示す情報を格納する。より具体的には、ドライブ構成管理テーブル５３０は、ドライブＩＤ５３１と、状態５３２と、サイズ５３３（ブロック）とが対応付けられた情報を格納する。
【００５６】
ドライブＩＤ５３１は、ドライブＩＤ５３１を識別可能な識別情報（例えば、ＩＤ）である。状態５３２は、ドライブ２１３の状態を示す状態情報（ＮＯＲＭＡＬ、ＷＡＲＮＩＮＧ、ＦＡＩＬＵＲＥ等）である。サイズ５３３は、ドライブ２１３の容量を示す情報（例えば、ブロックの数）である。例えば、ブロックは、固定サイズ（５１２ｋｂｙｔｅ等）である。
【００５７】
図６は、ストレージプール構成管理テーブル４１２の一例を示す図である。
【００５８】
ストレージプール構成管理テーブル４１２は、ストレージプール３０５が提供するシンプロビジョニング機能のための制御情報を格納する。
【００５９】
ストレージプール構成管理テーブル４１２は、ストレージプール情報テーブル６１０、仮想ボリューム管理テーブル６２０、ページマッピングテーブル６３０、およびプールボリューム管理テーブル６４０を含んで構成される。
【００６０】
ストレージプール情報テーブル６１０は、ストレージプール３０５に係る情報を格納する。より具体的には、ストレージプール情報テーブル６１０は、ストレージプールＩＤ６１１と、総容量６１２（ブロック）と、消費容量６１３（ブロック）と、枯渇閾値６１４とが対応付けられた情報を格納する。
【００６１】
ストレージプールＩＤ６１１は、ストレージプール３０５を識別可能な識別情報（例えば、ＩＤ）である。総容量６１２は、ストレージプール３０５の総容量を示す情報（例えば、ブロックの数）である。消費容量６１３は、ストレージプール３０５で消費されている容量を示す情報（例えば、ブロックの数）である。枯渇閾値６１４は、ストレージプール３０５の容量が枯渇しているか否かを判定するための閾値（不足を監視するための閾値）である。枯渇と判断した場合は、図１５にて説明するストレージプール拡張処理により、ストレージプールを拡張する。
【００６２】
仮想ボリューム管理テーブル６２０は、仮想ボリューム３０６に係る情報（仮想ボリューム３０６と仮想ボリューム３０６を割り当てたストレージプール３０５との対応関係を示す情報など）を格納する。より具体的には、仮想ボリューム管理テーブル６２０は、仮想ボリュームＩＤ６２１、サイズ６２２（ブロック）、およびストレージプールＩＤ６２３が対応付けられた情報を格納する。
【００６３】
仮想ボリュームＩＤ６２１は、仮想ボリューム３０６を識別可能な識別情報（例えば、ＩＤ）である。サイズ６２２（ブロック）は、仮想ボリューム３０６の容量を示す情報（例えば、ブロックの数）である。ストレージプールＩＤ６２３は、仮想ボリューム３０６が属するストレージプール３０５を識別可能な識別情報（例えば、ＩＤ）である。
【００６４】
ページマッピングテーブル６３０は、仮想ボリューム３０６に割り当てたページ３０７に係る情報（仮想ボリューム３０６とプールボリューム３０４との対応関係を示す情報など）を格納する。より具体的には、ページマッピングテーブル６３０は、仮想ボリュームＩＤ６３１、ＬＢＡ（Logical Block Addressing）６３２、サイズ６３３（ブロック）、プールボリュームＩＤ６３４、およびＬＢＡ６３５が対応付けられた情報を格納する。
【００６５】
仮想ボリュームＩＤ６３１は、仮想ボリューム３０６を識別可能な識別情報（例えば、ＩＤ）である。ＬＢＡ６３２は、仮想ボリューム３０６の最初のページ３０７から何番目であるかを示す情報（例えば、数値）である。なお、ページ３０７は、ストレージ制御プログラム１０２が仮想ボリューム３０６にアクセスする単位である。サイズ６３３（ブロック）は、ページ３０７（ページ３０８）の容量を示す情報（ブロックの数）である。プールボリュームＩＤ６３４は、プールボリューム３０４を識別可能な識別情報（例えば、ＩＤ）である。ＬＢＡ６３５は、プールボリューム３０４の最初のページ３０８から何番目であるかを示す情報（例えば、数値）である。なお、ページ３０８は、ストレージ制御プログラム１０２がプールボリューム３０４にアクセスする単位であり、ページ３０７と同じサイズである。
【００６６】
なお、サイズ６３３は、全てのページ３０７で同じであってもよいし、ページ３０７ごとに異なっていてもよい。
【００６７】
付言するならば、ストレージ制御プログラム１０２は、仮想ボリューム３０６のアドレスからプールボリューム３０４のアドレスへの変換を行う際にページマッピングテーブル６３０を参照する。また、ストレージ制御プログラム１０２は、新規ライトを受領する度に、ページ３０７の割当て（ページマッピングテーブル６３０へのレコードの追加）を行う。
【００６８】
プールボリューム管理テーブル６４０は、プールボリューム３０４に係る情報（プールボリューム３０４と論理チャンク３０３との対応関係を示す情報）を格納する。より具体的には、プールボリューム管理テーブル６４０は、プールボリュームＩＤ６４１と、サイズ６４２（ブロック）と、論理チャンクＩＤ６４３とが対応付けられた情報を格納する。
【００６９】
プールボリュームＩＤ６４１は、プールボリューム３０４を識別可能な識別情報（例えば、ＩＤ）である。サイズ６４２（ブロック）は、プールボリューム３０４の容量を示す情報（例えば、ブロックの数）である。論理チャンクＩＤ６４３は、プールボリューム３０４にアタッチされている論理チャンク３０３を識別可能な識別情報（例えば、ＩＤ）である。
【００７０】
なお、サイズ６４２は、全てのプールボリューム３０４で同じであってもよいし、プールボリューム３０４ごとに異なっていてもよい。
【００７１】
図７は、チャンク構成管理テーブル４１３の一例を示す図である。
【００７２】
チャンク構成管理テーブル４１３は、物理チャンク３０１と複数の物理チャンク３０１を組み合わせて構成したチャンクグループ３０２（冗長化グループ）の構成を管理するための制御情報を格納する。
【００７３】
チャンク構成管理テーブル４１３は、論理チャンク管理テーブル７１０、チャンクグループ管理テーブル７２０、および物理チャンク管理テーブル７３０を含んで構成される。
【００７４】
論理チャンク管理テーブル７１０は、チャンクグループ３０２から切り出された論理チャンク３０３に係る情報（論理チャンク情報）を格納する。より具体的には、論理チャンク管理テーブル７１０は、論理チャンクＩＤ７１１と、サイズ７１２（ブロック）と、チャンクグループＩＤ７１３とが対応付けられた情報を格納する。
【００７５】
論理チャンクＩＤ７１１は、チャンクグループ３０２から切り出された論理チャンク３０３を識別可能な識別情報（例えば、ＩＤ）である。サイズ７１２は、論理チャンク３０３の容量を示す情報（例えば、ブロックの数）である。チャンクグループＩＤ７１３は、論理チャンク３０３が属するチャンクグループ３０２を識別可能な識別情報（例えば、ＩＤ）である。
【００７６】
チャンクグループ管理テーブル７２０は、チャンクグループ３０２に係る情報（チャンクグループ情報）を格納する。より具体的には、チャンクグループ管理テーブル７２０は、チャンクグループＩＤ７２１と、データ保護ポリシ７２２と、関連物理チャンクＩＤ７２３と、マッピング変更進捗情報７２４とが対応付けられた情報を格納する。
【００７７】
チャンクグループＩＤ７２１は、チャンクグループ３０２を識別可能な識別情報（例えば、ＩＤ）である。データ保護ポリシ７２２は、チャンクグループ３０２のデータ保護ポリシである。関連物理チャンクＩＤ７２３は、チャンクグループ３０２に割り当てられた物理チャンク３０１を識別可能な識別情報（例えば、ＩＤ）である。マッピング変更進捗情報７２４は、マッピング変更の進捗を示す情報（例えば、アドレス）である。マッピング変更進捗情報７２４は、データ７２５と、パリティ７２６とが対応付けられた情報を含んで構成される。データ７２５は、データについてのマッピング変更の進捗を示す情報（例えば、アドレス）である。パリティ７２６は、パリティについてのマッピング変更の進捗を示す情報（例えば、アドレス）である。
【００７８】
物理チャンク管理テーブル７３０は、物理チャンク３０１に係る情報（開始オフセットからサイズ分だけドライブ２１３の領域を切り出して物理チャンク３０１として管理するための情報）を格納する。より具体的には、物理チャンク管理テーブル７３０は、物理チャンクＩＤ７３１と、開始オフセット７３２と、サイズ７３３（ブロック）と、サイトＩＤ/ノードＩＤ/ドライブＩＤ７３４とが対応付けられた情報を格納する。
【００７９】
物理チャンクＩＤ７３１は、物理チャンク３０１を識別可能な識別情報（例えば、ＩＤ）である。開始オフセット７３２は、ドライブ２１３から物理チャンク３０１を切り出すときの開始位置を示す。サイズ７３３（ブロック）は、物理チャンク３０１の容量を示す情報（ブロックの数）である。サイトＩＤ/ノードＩＤ/ドライブＩＤ７３４は、物理チャンク３０１が切り出されている記憶資源を識別可能な識別情報（物理チャンク３０１がどのサイト２１０のどのノード１００のどのドライブ２１３から切り出されているかを示す情報）である。
【００８０】
図８は、チャンクマッピング管理テーブル４１４の一例を示す図である。
【００８１】
図８では、チャンクマッピング管理テーブル４１４の概念をイメージ８００として示している。イメージ８００に示すように、チャンクグループ３０２が３つ（「Ｇｒｏｕｐ０」、「Ｇｒｏｕｐ１」、および「Ｇｒｏｕｐ２」）まとめてマッピング変更されることが示されている。例えば、第１の列（カラム０）に「ｎｏｄｅ０」のノード１００が配置され、第２の列（カラム１）に「ｎｏｄｅ１」のノード１００が配置され、第３の列（カラム２）に「ｎｏｄｅ２」のノード１００が配置されることがわかる。また、「Ｇｒｏｕｐ０」のチャンクグループ３０２が全て第１のオフセット（Ｏｆｆｓｅｔ０）に設定され、「Ｇｒｏｕｐ１」のチャンクグループ３０２が全て第２のオフセット（Ｏｆｆｓｅｔ１）に設定され「Ｇｒｏｕｐ２」のチャンクグループ３０２が全て第３のオフセット（Ｏｆｆｓｅｔ２）に設定されていることがわかる。付言するならば、データ保護ポリシが変わっても、設定済みのチャンクグループ３０２の配置（チャンクマッピング管理テーブル４１４）は変わらない。
【００８２】
なお、まとめてマッピング変更されるチャンクグループ３０２の数は、３つに限られるものではなく、１つであってもよいし、２つであってもよいし、４以上であってもよい。また、以下では、一のチャンクグループ３０２が全て同じオフセットで設定される場合を例に挙げて説明するが、これに限られるものではない。また、マッピング変更の処理単位としてチャンクグループ３０２が複数設けられている場合、全て同じオフセットで設定される必要はなく、異なるオフセットを含んで設定されてもよい。
【００８３】
チャンクマッピング管理テーブル４１４は、マッピング変更の単位を規定するためのチャンクマッピング管理情報（複数のノード１００内の物理チャンク３０１に対して、チャンクグループ３０２をどの組合せで組むかを決めるための制御情報など）が格納される。チャンクマッピング管理テーブル４１４は、チャンクグループマッピング情報８１０と、ノード内チャンクオフセット管理テーブル８２０と、フリー物理チャンクリスト８３０とを含んで構成される。
【００８４】
チャンクグループマッピング情報８１０は、グループＩＤ８１１と、マッピングリスト８１２（カラムＩＤ，ノードＩＤ，オフセット)とが対応付けられた情報を格納する。
【００８５】
グループＩＤ８１１は、チャンクグループ３０２を識別可能な識別情報（例えば、ＩＤ）である。マッピングリスト８１２は、ノード１００の配列を特定するためのカラムＩＤと、各列に配置するノード１００を特定するためのノードＩＤと、チャンクグループ３０２の相対位置を示すオフセットとが対応付けられた情報である。
【００８６】
なお、チャンクグループマッピング情報８１０は、あくまで一例であり、サイト２１０の構成、ノード１００の構成に応じて算出される。
【００８７】
ノード内チャンクオフセット管理テーブル８２０は、ノード１００内の物理チャンク３０１の位置を特定するための情報を格納する。ノード内チャンクオフセット管理テーブル８２０は、ノード１００ごとに、ドライブ２１３の構成に応じて管理される。
【００８８】
より具体的には、ノード内チャンクオフセット管理テーブル８２０は、オフセット８２１と、物理チャンクＩＤ８２２と、状態８２３とが対応付けられた情報を格納する。オフセット８２１は、チャンクグループ３０２に割り当てられている物理チャンク３０１の位置を示す情報である。物理チャンクＩＤ８２２は、チャンクグループ３０２に割り当てられている物理チャンク３０１を識別可能な識別情報（例えば、ＩＤ）である。状態８２３は、チャンクグループ３０２に割り当てられている物理チャンク３０１の状態（ＮＯＲＭＡＬ、ＡＬＴＥＲＩＮＧなど）を示す情報である。
【００８９】
フリー物理チャンクリスト８３０は、ノード１００内のドライブ２１３の物理チャンク３０１のうち、チャンクグループ３０２に割り当てられていない物理チャンク３０１を識別可能な識別情報（例えば、ＩＤ）のリストである。フリー物理チャンクリスト８３０では、物理チャンク３０１の消費容量が少ないドライブ２１３の先頭の物理チャンク３０１から並べられている。換言するならば、ノード１００内の物理チャンク３０１の選定は、ドライブ２１３あたりの消費容量が少ないものから行われる。
【００９０】
図９は、チャンクグループ内マッピング管理テーブル４１５の一例を示す図である。
【００９１】
チャンクグループ内マッピング管理テーブル４１５は、チャンクグループ３０２内のデータとパリティとの配置を管理するための情報を格納する。より具体的には、チャンクグループ内マッピング管理テーブル４１５には、列（Ｃｏｌｕｍｎ）と、行（Ｒｏｗ）とにより識別される各セグメント（要素）に、チャンクグループ３０２のデータとパリティとの何れが格納されるかを示す情報が格納される。
【００９２】
例えば、「Ｃｏｌｕｍｎ０」と「Ｒｏｗ０」とにより識別されるセグメント９０１「Ａ１」には、チャンクグループ３０２が「ＧｒｏｕｐＡ」のデータが格納されることが示されている。「Ｃｏｌｕｍｎ１」と「Ｒｏｗ０」とにより識別されるセグメント９０２「Ａ２」には、チャンクグループ３０２が「ＧｒｏｕｐＡ」のデータが格納されることが示されている。「Ｃｏｌｕｍｎ３」と「Ｒｏｗ０」とにより識別されるセグメント９０３「ＡＰ」には、チャンクグループ３０２が「ＧｒｏｕｐＡ」のパリティが格納されることが示されている。なお、チャンクグループ３０２「ＧｒｏｕｐＡ」を示すセグメント９０１「Ａ１」と、セグメント９０２「Ａ２」と、セグメント９０３「ＡＰ」との組合せを「ストライプ」と適宜称する。
【００９３】
ここで、構成単位９１０に示すように、マッピング変更の処理の単位を「フレーム」と称する。構成単位９２０に示すように、一のオフセットが一のチャンクグループ３０２で構成される場合、当該一のオフセットを示す単位を「チャンク」と称する。構成単位９３０に示すように、一のオフセットが一のチャンクグループ３０２で構成される場合、チャンクグループ内マッピング管理テーブル４１５で管理される単位を「サイクル」と称する。
【００９４】
また、チャンクグループ内マッピング管理テーブル４１５は、データ保護ポリシが「２Ｄ１Ｐ」である場合の例を示し、データ保護ポリシが変わると、チャンクグループ内マッピング管理テーブル４１５の内容が変更される。
【００９５】
また、あるチャンクグループ３０２における物理チャンク３０１あたりのデータとパリティとの格納比率は、データ保護ポリシがｍＤｎＰのとき、データ：パリティ＝ｍ：ｎとなるように、チャンクグループ内マッピング管理テーブル４１５が設定されるのが好適である。パリティは、頻繁に更新されるので、あるノード１００にパリティが偏って格納されると、当該ノード１００に負荷が偏ってしまう。しかしながら、上述したように格納比率を決定することで、各ノード１００における負荷を均一化することができるようになる。
【００９６】
ここで、チャンクグループ内マッピング管理テーブル４１５では、あるデータ領域の物理ＬＢＡに対して、パリティ領域の物理ＬＢＡ（冗長化先）を特定するために使用される。冗長化先を特定する方法としては、例えば、次のような方法が挙げられる。
【００９７】
・チャンクグループマッピング情報８１０のリストの先頭からカラムＩＤ＝０を採番
・アクセス先のグループＩＤとノードＩＤとから対応するカラムＩＤを取得
・アクセス先のＬＢＡからＲｏｗを算出
Row ID = LBA mod Rowmax
（Rowmaxは、チャンクグループ内マッピング管理テーブル４１５では「３」）
・データ側のＲｏｗおよびＣｏｌｕｍｎが特定できたら、対応するｘＰ（パリティ側）のＲｏｗおよびＣｏｌｕｍｎを取得
・パリティ側のノードＩＤと物理ＬＢＡを算出
LBAp ＝ LBAd ＋ Ssize × Row ID
（Ssizeは、セグメントのサイズ）
なお、データの修復処理におけるパリティ位置からデータ位置を特定する方法は、上記の逆手順となる。
【００９８】
図１０は、マッピング変更の概要を示すイメージ図である。ここでは、構成の変更前のチャンクマッピング管理情報１０１０および構成の変更後のチャンクマッピング管理情報１０２０に示すように、「Ｎ３」のノード１００（ノード１００−３）が追加（ノード増設）されるケースを例に挙げて説明する。
【００９９】
チャンクマッピング管理情報１０２０では、「Ｎ３」のノード１００に対して、オフセット「♯１」にチャンクグループ３０２のグループ「Ｇ０」が設定され、オフセット「♯１」にグループ「Ｇ１」が設定され、オフセット「♯２」にグループ「Ｇ３」が設定されている。
【０１００】
なお、各チャンクグループ３０２の各ノード１００でデータとパリティとが偏らないように、チャンクグループ内マッピング管理テーブル４１５が作成（変更）されている。付言するならば、構成の変更後も、各ノード１００におけるデータとパリティとの格納比率は、ｍＤｎＰに応じて均一となっている（ノード１００ごとにデータまたはパリティが偏ったりしない）。
【０１０１】
マッピング変更では、フレーム１０３０の単位にマッピング変更要求が管理プログラム１０１から各ノード１００に送信され、各ノード１００において、チャンクグループ３０２に割り当てられた物理チャンク３０１が先頭から順番に処理（データまたは中間データの転送、パリティの計算など）される。
【０１０２】
図１１は、マッピング変更の特徴的構成（フレーム内の動作の概要）を示すイメージ図である。ここでは、一のチャンクの一のサイクルを例に挙げて説明する。
【０１０３】
ノード１００が増設された場合、データはノード１００間で移動することなく、パリティを組み替えて、追加されたノード１００を含めたストライプが組まれる。その際、例えば、データとパリティとが偏らないようにチャンクグループ内マッピング管理テーブル４１５が変更され、変更されたチャンクグループ内マッピング管理テーブル４１５に従ってマッピング変更が行われる。
【０１０４】
マッピング変更の主な処理は、下記のようになる。
＜処理Ａ＞
既存のノード１００の一部のパリティを増設されたノード１００に再構築する。
＜処理Ｂ＞
新規のストライプのパリティを生成する。
＜処理Ｃ＞
既存のストライプでデータの組合せが変わるストライプについてパリティを生成する。
【０１０５】
本例では、マッピング変更前および処理Ａについてはイメージ１１１０として示し、処理Ｂおよび処理Ｃについてはイメージ１１２０として示し、マッピング変更後についてはイメージ１１３０として示す。本例において、「Ａ１−Ａ２−ＡＰ」、「Ｂ１−Ｂ２−ＢＰ」、「Ｃ１−Ｃ２−ＣＰ」は、既存のストライプを示し、「Ｄ１−Ｄ２−ＤＰ」は、新規のストライプを示す。
【０１０６】
また、イメージ１１１０とイメージ１１３０とを比較するとわかるように、既存のストライプのうち、「Ｂ１−Ｂ２−ＢＰ」は、パリティの格納位置が変更されたストライプ（移動ストライプ）であり、「Ｃ１−Ｃ２−ＣＰ」は、データの組合せが変更されたストライプ（変更ストライプ）である。
【０１０７】
なお、「Ａ１，Ａ２，Ｂ１，Ｂ２，Ｃ１，Ｃ２，Ｄ１，Ｄ２」は、データを格納するセグメントを示し、「ＡＰ，ＢＰ，ＣＰ，ＤＰ」は、パリティを格納するセグメントを示す。
【０１０８】
イメージ１１１０では、ストレージシステム１は、イメージ１１３０をもとに、既存の「ノード０」の「ＢＰ」のパリティを増設された「ノード３」に再構築（ここでは、「Ｂ１」のデータ１１１１と「Ｂ２」のデータ１１１２との排他的論理和１１１３を計算して「ＢＰ」のパリティ１１１４として格納）し、既存の「ノード０」に空き領域を設ける。
【０１０９】
イメージ１１２０では、ストレージシステム１は、イメージ１１３０をもとに、設けた空き領域に、新規のストライプを構成する「Ｄ１」のデータ１１２１（「ノード２」に格納されている「Ｃ１」のデータ１１２１）と「Ｄ２」のデータ１１２２との排他的論理和１１２３を計算して「ＤＰ」のパリティ１１２４を生成する。
【０１１０】
また、イメージ１１２０では、ストレージシステム１は、イメージ１１３０をもとに、既存のストライプでデータの組合せが変更される「Ｃ１−Ｃ２−ＣＰ」について、変更後のストライプを構成する「Ｃ１」のデータ１１２５と「Ｃ２」のデータ１１２６との排他的論理和１１２７を計算して変更後の「ＣＰ」のパリティ１１２８を生成する。
【０１１１】
イメージ１１３０では、データを移動することなく、パリティを構築（移動、計算など）することで、ノード１００−３の増設に対応したストライプに組み替えられたことが示される。
【０１１２】
図１２は、マッピング変更の特徴的構成（フレーム内動作の概要）を示すイメージ図である。図１１とは、ノード１００間のデータ転送の最適化が行われている点が異なり、その点について主に説明する。
【０１１３】
本例では、処理Ａについてはイメージ１２１０として示し、処理Ｂおよび処理Ｃについてはイメージ１２２０として示し、マッピング変更後についてはイメージ１２３０として示す。
【０１１４】
イメージ１２１０に示すように、ストレージシステム１は、空き領域を設けるために移動する既存のパリティ１２１１の計算に用いるデータを転送するのではなく、既存のパリティ１２１１そのものを転送して「Ｂ１−Ｂ２−ＢＰ」のパリティ１２１２とする。かかる転送によれば、ノード１００間の転送量を削減することが可能になる。
【０１１５】
イメージ１２２０に示すように、ストレージシステム１は、増設するノード１００−３内のデータを「０（ゼロ）」として扱い、変更するストライプの「Ｃ１」のデータ１２２１を転送することで、新規のパリティ１２２２を生成し、既存のパリティ１２２３を再生成する。かかる転送によれば、ノード１００間の転送量を削減することが可能になる。
【０１１６】
例えば、パリティ１２２２（新ＤＰ）は、次のように変形して生成される。旧ＤＰについては、旧ＤＰ＝０＝０  ＸＯＲ  ０のように考え、新ＤＰについては、新ＤＰ＝Ｄ１（＝旧Ｃ１）  ＸＯＲ  ０であるので、旧ＤＰにＤ１をＸＯＲ演算すると、旧ＤＰ  ＸＯＲ  Ｄ１＝０  ＸＯＲ  Ｄ１＝新ＤＰとして生成される。つまり、Ｄ２を用いる（転送する）ことなく、Ｃ１を用いて新ＤＰを生成できる。
【０１１７】
例えば、パリティ１２２３は、次のように変形して再生成される。旧ＣＰについては、旧ＣＰ＝Ｃ１  ＸＯＲ  Ｃ２であり、新ＣＰについては、新ＣＰ＝０  ＸＯＲ  Ｃ２であるので、旧ＣＰにＣ１をＸＯＲ演算すると、旧ＣＰ  ＯＸＲ  Ｃ１＝（Ｃ１  ＸＯＲ  Ｃ２）  ＸＯＲ  Ｃ１＝（Ｃ１  ＸＯＲ  Ｃ１）  ＯＸＲ  Ｃ２＝  ０  ＸＯＲ  Ｃ２＝新ＣＰとして生成される。つまり、Ｃ２を用いる（転送する）ことなく、Ｃ１を用いて新ＤＰを生成できる。
【０１１８】
次に、ストレージシステム１に係る処理について説明する。
【０１１９】
図１３は、リード処理に係るフローチャートの一例を示す図である。リード処理では、アプリケーション３１１からのリード要求を受けて、自ノード１００のドライブ２１３からデータが読み出される。アクセス先の領域（ドライブ２１３）が障害状態である場合、冗長データからリード対象のデータが修復されて応答される。また、マッピング変更中における修復処理では、チャンクグループ内マッピング管理テーブル４１５（以下では、適宜、マッピング情報と称する。）が新面（構成変更後のマッピング情報）であるか旧面（構成変更前のマッピング情報）であるかが判定されて、修復対象の冗長データ位置が決定される。以下、詳細について説明する。
【０１２０】
ステップＳ１３０１では、リード処理部４３１は、リード要求のデータについて、ストレージプール３０５にはページ３０７が未割当てであるか否かを判定する。リード処理部４３１は、未割当てであると判定した場合、ステップＳ１３０２に処理を移し、未割当てでないと判定した場合、ステップＳ１３０３に処理を移す。
【０１２１】
ステップＳ１３０２では、リード処理部４３１は、データがないことを示す０データをホストノード３００に返却し、リード処理を終了する。
【０１２２】
ステップＳ１３０３では、リード処理部４３１は、割当先のアドレスを取得する。
【０１２３】
ステップＳ１３０４では、リード処理部４３１は、排他取得を行う。排他取得では、アクセス先のＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）に対して、ミューテクス等の排他アルゴリズムを用いて、複数の処理が同時に同じ領域へアクセスしないように制御する。以降の排他処理についても同様の処理を行う。
【０１２４】
ステップＳ１３０５では、リード処理部４３１は、アクセス先のドライブ２１３が障害状態であるか否かを判定する。リード処理部４３１は、障害状態であると判定した場合、ステップＳ１３０６に処理を移し、障害状態でないと判定した場合、ステップＳ１３２０に処理を移す。
【０１２５】
ステップＳ１３０６では、リード処理部４３１は、マッピング変更中であるか否かを判定する。リード処理部４３１は、マッピング変更中であると判定した場合、ステップＳ１３０７に処理を移し、マッピング変更中でないと判定した場合、ステップＳ１３１０に処理を移す。例えば、リード処理部４３１は、チャンクマッピング管理テーブル４１４のノード内チャンクオフセット管理テーブル８２０を確認し、更新中「ＡＬＴＥＲＩＮＧ」である場合、マッピング変更中であると判定する。
【０１２６】
ステップＳ１３０７では、リード処理部４３１は、リード要求のデータについて、マッピング変更が済んでいるか否かを判定する。リード処理部４３１は、済んでいると判定した場合、ステップＳ１３０８に処理を移し、済んでいないと判定した場合、ステップＳ１３０９に処理を移す。例えば、リード処理部４３１は、ノード１００内チャンクグループ管理テーブル７２０のマッピング変更進捗情報７２４を確認し、「アクセス先のＬＢＡ＜進捗情報」である場合、マッピング変更が済んでいると判定する。
【０１２７】
ステップＳ１３０８では、リード処理部４３１は、変更後のマッピング情報（新マッピング情報）から、リード要求のデータのパリティを格納する冗長化先のノード１００（冗長化先ノード）を決定する。なお、以下では、冗長化先のノード１００としては、リード要求のデータのパリティを格納するノード１００が決定されるものとして説明する。
【０１２８】
ステップＳ１３０９では、リード処理部４３１は、変更前のマッピング情報（旧マッピング情報）から冗長化先のノード１００を決定する。
【０１２９】
ステップＳ１３１０では、リード処理部４３１は、現行のマッピング情報から冗長化先のノード１００を決定する。
【０１３０】
ステップＳ１３１１では、リード処理部４３１は、決定した冗長化先のノード１００にデータの修復を行う要求（データ修復要求）を送信する。
【０１３１】
ステップＳ１３１２では、冗長化先のノード１００のリード処理部４３１（冗長化先リード処理部）は、排他取得を行う。
【０１３２】
ステップＳ１３１３では、冗長化先リード処理部は、修復に必要なデータのリード要求を送信する。なお、図示は省略しているが、ここでノード１００間の通信を発生させて、修復に必要なデータと同じストライプを組むデータを有する他のノード１００から当該データを読み出す。
【０１３３】
ステップＳ１３１４では、冗長化先リード処理部は、修復に必要なパリティを読み出す。
【０１３４】
ステップＳ１３１５では、冗長化先リード処理部は、修復に必要なデータを受信する。
【０１３５】
ステップＳ１３１６では、冗長化先リード処理部は、データとパリティとから障害のデータを修復する。
【０１３６】
ステップＳ１３１７では、冗長化先リード処理部は、修復したデータを送信する。
【０１３７】
ステップＳ１３１８では、冗長化先リード処理部は、排他解除を行う。
【０１３８】
ステップＳ１３１９では、リード処理部４３１は、修復されたデータを受信する。
【０１３９】
ステップＳ１３２０では、リード処理部４３１は、自ノード１００のドライブ２１３（ローカルドライブ）からデータを読み出す。
【０１４０】
ステップＳ１３２０では、リード処理部４３１は、排他解放を行い、リード処理を終了する。
【０１４１】
図１４は、ライト処理に係るフローチャートの一例を示す図である。ライト処理では、アプリケーション３１１からのライト要求を受けて、自ノード１００のドライブ２１３にデータが書き込まれ、さらに他ノード１００のドライブ２１３に冗長データ（パリティ）が書き込まれる。マッピング変更中は、新面であるか旧面であるかが判定されてから冗長化先が決定される。以下、詳細について説明する。
【０１４２】
ステップＳ１４０１では、ライト処理部４３２は、ライト要求のデータについて、ストレージプール３０５にはページ３０７が未割当てであるか否かを判定する。ライト処理部４３２は、未割当てであると判定した場合、ステップＳ１４０２に処理を移し、未割当てでないと判定した場合、ステップＳ１４０３に処理を移す。
【０１４３】
ステップＳ１４０２では、ライト処理部４３２は、自ノード１００のドライブ２１３の物理チャンク３０１が関連付けられているボリューム３０４（自系ボリューム）にページ３０７を割り当てる。
【０１４４】
ステップＳ１４０３では、ライト処理部４３２は、割当先のアドレスを取得する。
【０１４５】
ステップＳ１４０４では、ライト処理部４３２は、排他取得を行う。
【０１４６】
ステップＳ１４０５では、ライト処理部４３２は、書込み前のデータ（旧データ）を読込む（より具体的には、旧データについて図１３に示すリード処理を行う）。
【０１４７】
ステップＳ１４０６では、ライト処理部４３２は、中間データを生成する。中間データは、データを部分的に更新するときに作成する一時的なデータであり、新旧の差分を示すデータである。例えば、旧データのストライプが「Ａ１−Ａ２−ＡＰ」である場合、中間データは、次のように求められる。
ＡＰ（旧パリティ）＝Ａ１（旧データ）  ＸＯＲ  Ａ２（旧データ）
Ａ１（新データ）  ＸＯＲ  Ａ１（旧データ）＝Ｍ（中間データ）
なお、新パリティについては、次のように求められる。
ＡＰ（旧パリティ）  ＸＯＲ  Ｍ（中間データ）＝ＡＰ（新パリティ）
【０１４８】
ステップＳ１４０７では、ライト処理部４３２は、マッピング変更中であるか否かを判定する。ライト処理部４３２は、マッピング変更中であると判定した場合、ステップＳ１４０８に処理を移し、マッピング変更中でないと判定した場合、ステップＳ１４１１に処理を移す。なお、判定の方法は、ステップＳ１３０６と同様であるので、説明を省略する。
【０１４９】
ステップＳ１４０８では、ライト処理部４３２は、ライト要求のデータについて、マッピング変更が済んでいるか否かを判定する。ライト処理部４３２は、済んでいると判定した場合、ステップＳ１４０９に処理を移し、済んでいないと判定した場合、ステップＳ１４１０に処理を移す。なお、判定の方法は、ステップＳ１３０７と同様であるので、説明を省略する。
【０１５０】
ステップＳ１４０９では、ライト処理部４３２は、新マッピング情報から冗長化先のノード１００を決定する。なお、以下では、冗長化先のノード１００としては、ライト要求のデータのパリティを格納するノード１００が決定されるものとして説明する。
【０１５１】
ステップＳ１４１０では、ライト処理部４３２は、旧マッピング情報から冗長化先のノード１００を決定する。
【０１５２】
ステップＳ１４１１では、ライト処理部４３２は、現行のマッピング情報から冗長化先のノード１００を決定する。
【０１５３】
ステップＳ１４１２では、ライト処理部４３２は、決定した冗長化先のノード１００に中間データを送信する。なお、ライト処理部４３２は、冗長度に応じて（冗長度が２以上である場合、２以上のノード１００に）中間データを転送する。
【０１５４】
ステップＳ１４１３では、冗長化先のノード１００のライト処理部４３２（冗長化先ライト処理部）は、中間データを受信する。
【０１５５】
ステップＳ１４１４では、冗長化先ライト処理部は、排他取得を行う。
【０１５６】
ステップＳ１４１５では、冗長化先ライト処理部は、自ノード１００のドライブ２１３（ローカルドライブ）から旧パリティを読み出す。
【０１５７】
ステップＳ１４１６では、冗長化先ライト処理部は、中間データと旧パリティとから新パリティを計算する。
【０１５８】
ステップＳ１４１７では、冗長化先ライト処理部は、ローカルドライブに新パリティを書き込む。
【０１５９】
ステップＳ１４１８では、冗長化先ライト処理部は、排他解放を行う。
【０１６０】
ステップＳ１４１９では、ライト処理部４３２は、ローカルドライブにライト要求のデータ（新データ）を書き込む。
【０１６１】
ステップＳ１４２０では、ライト処理部４３２は、冗長化先のノード１００から書込み応答を受信する。
【０１６２】
ステップＳ１４２１では、ライト処理部４３２は、排他解放を行い、ライト処理を終了する。
【０１６３】
図１５は、ストレージプール拡張処理（論理チャンク割当処理）に係るフローチャートの一例を示す図である。ストレージプール拡張処理では、ストレージプール３０５の枯渇の閾値に到達したとき、論理チャンク３０３がストレージプール３０５に割り当てられてプールサイズが拡張される。ストレージプール拡張処理は、周期的に実行されてもよいし、ライト処理後に毎回実行されてもよい。なお、論理チャンク化するグループは、ノード１００間の負荷や使用容量が均等になるように決定することが好適である。
【０１６４】
ステップＳ１５０１では、論理チャンク割当処理部４２２は、ストレージプール構成管理テーブル４１２のストレージプール情報テーブル６１０を確認し、総容量６１２に対する消費容量６１３がストレージプール３０５の枯渇閾値６１４（プール枯渇閾値）を超過しているか否かを判定する。論理チャンク割当処理部４２２は、超過していると判定した場合、ステップＳ１５０２に処理を移し、超過していないと判定した場合、ストレージプール拡張処理を終了する。
【０１６５】
ステップＳ１５０２では、論理チャンク割当処理部４２２は、自ノード１００のドライブ２１３の物理チャンク３０１から論理チャンク３０３を切り出すこと（自系ノードの容量から論理チャンク化）ができるか否かを判定する。論理チャンク割当処理部４２２は、できると判定した場合、ステップＳ１５０３に処理を移し、できないと判定した場合、ステップＳ１５０４に処理を移す。例えば、論理チャンク割当処理部４２２は、容量の割当ての対象のノード１００のフリー物理チャンクリスト８３０が空でない場合、できると判定する。
【０１６６】
ステップＳ１５０３では、論理チャンク割当処理部４２２は、自系ノードの容量から論理チャンク化を行う。例えば、論理チャンク割当処理部４２２は、まず、自系ノードのフリー物理チャンクリスト８３０から物理チャンク３０１を取得し、自系ノードのノード内チャンクオフセット管理テーブル８２０の未割当オフセットに登録する。次に、論理チャンク割当処理部４２２は、割り当てた自系ノードのノード内オフセットから、チャンクグループマッピング情報を参照して、チャンクグループを構成する他系ノードのノード番号とオフセットを特定する。次に、論理チャンク割当処理部４２２は、特定した他系ノードのフリー物理チャンクリスト８３０から物理チャンク３０１を取得して、特定したノード内チャンクオフセット管理テーブル８２０に登録する。次に、論理チャンク割当処理部４２２は、チャンクグループ情報と論理チャンク情報とをチャンク構成管理テーブル４１３に登録する。
【０１６７】
ステップＳ１５０４では、論理チャンク割当処理部４２２は、消費容量が最も少ない他ノード１００（他系ノード）を選定する。
【０１６８】
ステップＳ１５０５では、論理チャンク割当処理部４２２は、他系ノードの容量から論理チャンク化が可能であるか否かを判定する。論理チャンク割当処理部４２２は、可能であると判定した場合、ステップＳ１５０６に処理を移し、可能でないと判定した場合、ステップＳ１５０７に処理を移す。
【０１６９】
ステップＳ１５０６では、論理チャンク割当処理部４２２は、選定した他系ノードの容量から論理チャンク化を行い、ステップＳ１５０９に処理を移す。他系ノードの容量を使用して論理チャンクを作成する処理は、ステップＳ１５０３で説明した手順の自系ノードを他系ノードに置き換えるだけであるため、省略する。
【０１７０】
ステップＳ１５０７では、論理チャンク割当処理部４２２は、全ノード１００に対して確認したか否か（確認済みであるか否か）を判定する。論理チャンク割当処理部４２２は、確認したと判定した場合、ステップＳ１５１０に処理を移し、確認していないと判定した場合、ステップＳ１５０８に処理を移す。
【０１７１】
ステップＳ１５０８では、論理チャンク割当処理部４２２は、次に消費容量が少ない他系ノードを選定し、ステップＳ１５０５に処理を移す。
【０１７２】
ステップＳ１５０９では、論理チャンク割当処理部４２２は、論理チャンク３０３をストレージプール３０５に割り当て、ストレージプール拡張処理を終了する。
【０１７３】
ステップＳ１５１０では、論理チャンク割当処理部４２２は、割当てできない（割当不可）として、ストレージプール拡張処理を終了する。
【０１７４】
ストレージプール３０５の枯渇の閾値に到達時に論理チャンク３０３を動的に割り当てることで、マッピング変更時のノード１００間の転送コストを削減することができる。
【０１７５】
図１６は、構成変更処理に係るフローチャートの一例を示す図である。構成変更処理では、構成変更指示に基づいて、各ノード１００にマッピング変更要求がフレーム単位に発行される。構成変更処理は、管理プログラム１０１内で実行される。実行の契機としては、周期的に実行されてもよいし、ユーザからの操作受領契機で実行されてもよい。また、冗長度（ｐ）以下のノード障害、ドライブ障害などとなった場合、変更処理を継続（ロールフォワード）し、その後、障害部位をリプレースすることで正常状態に復帰される。なお、冗長度以上の障害発生時は変更処理が中止される。障害部位については、コレクションアクセスによりアクセス継続し、マッピング変更処理が継続される。
【０１７６】
ステップＳ１６０１では、増減設管理処理部４２１は、ドライブ２１３を増設または減設する旨の指示（ドライブ増減設指示）を受信したか否かを判定する。増減設管理処理部４２１は、受信したと判定した場合、ステップＳ１６０２に処理を移し、受信していないと判定した場合、ステップＳ１６０３に処理を移す。
【０１７７】
ステップＳ１６０２では、増減設管理処理部４２１は、ノード内チャンクオフセット管理テーブル８２０を再計算する。増減設管理処理部４２１は、ドライブ２１３の増減設の場合は、ノード１００内のチャンクオフセットに割り当てる物理チャンク３０１を変更し、ノード１００内のデータおよびパリティをドライブ２１３間で移動（データ移動）することで構成を変更する。この際、例えば、増減設管理処理部４２１は、各ドライブ２１３の容量が均一化されるように割当てを変更してデータ移動してもよいし、各ドライブ２１３のＩＯ負荷が均一化されるように割当てを変更してデータ移動してもよい。なお、増減設管理処理部４２１は、ドライブ２１３の増設の場合、ノード内チャンクオフセット管理テーブル８２０の割当てを変更することなく、フリー物理チャンクリスト８３０に追加するようにしてもよい。
【０１７８】
ステップＳ１６０３では、増減設管理処理部４２１は、ノード１００を増設または減設する旨の指示（ノード増減設指示）を受信したか否かを判定する。増減設管理処理部４２１は、受信したと判定した場合、ステップＳ１６０４に処理を移し、受信していないと判定した場合、ステップＳ１６０５に処理を移す。
【０１７９】
ステップＳ１６０４では、増減設管理処理部４２１は、配置情報を再計算し、ステップＳ１６０６に処理を移す。例えば、増減設管理処理部４２１は、構成の変更に応じて、データを他のノード１００に移動することがないようにストライプを変更するための配置情報（例えば、チャンクマッピング管理テーブル４１４およびチャンクグループ内マッピング管理テーブル４１５）を新規に生成する。なお、再計算された配置情報は、適宜のタイミングで各ノード１００に送信される。
【０１８０】
ステップＳ１６０５では、増減設管理処理部４２１は、サイト２１０を増設または減設する旨の指示（サイト増減設指示）を受信したか否かを判定する。増減設管理処理部４２１は、受信したと判定した場合、ステップＳ１６０４に処理を移し、受信していないと判定した場合、ステップＳ１６０１に処理を移す。
【０１８１】
ステップＳ１６０６では、増減設管理処理部４２１は、マッピング変更の対象のフレームとして先頭のフレームを設定する。
【０１８２】
ステップＳ１６０７では、増減設管理処理部４２１は、フレーム内の論理チャンク３０３は、ストレージプール３０５に割当て済みであるか否かを判定する。増減設管理処理部４２１は、割当て済みであると判定した場合、ステップＳ１６０８に処理を移し、割当て済みでないと判定した場合、ステップＳ１６１０に処理を移す。
【０１８３】
このように、ストレージプール３０５に割り当てた領域のみを対象とすることで、構成変更時のノード１００間の転送コストを削減することができる。
【０１８４】
ステップＳ１６０８では、増減設管理処理部４２１は、マッピング変更処理を行う。マッピング変更処理では、マッピング変更要求が各ノード１００に送信される。なお、マッピング変更処理については、図１７および図１８を用いて後述する。
【０１８５】
ステップＳ１６０９では、増減設管理処理部４２１は、新規のチャンクグループマッピング情報８１０をチャンク構成管理テーブル４１３に反映する。
【０１８６】
ステップＳ１６１０では、増減設管理処理部４２１は、全フレームに対して処理を完了したか否かを判定する。増減設管理処理部４２１は、完了したと判定した場合、ステップＳ１６０１に処理を移し、完了していないと判定した場合、ステップＳ１６１１に処理を移す。
【０１８７】
ステップＳ１６１１では、増減設管理処理部４２１は、マッピング変更の対象のフレームを次のフレームに進め、ステップＳ１６０７に処理を移す。
【０１８８】
図１７は、マッピング変更処理に係るフローチャートの一例を示す図である。マッピング変更処理では、ノード１００を増設する指示を受信したときに、一のチャンクについて実行が行われる場合を例に挙げて説明する。管理プログラム１０１側の処理は、構成変更処理の延長で呼び出され、ストレージ制御プログラム１０２側の処理は、各ノード１００上のストレージ制御部４３０で実行される。なお、図１７に示すマッピング変更処理は、図１２に示す最適化した方式での処理について例示している。
【０１８９】
ステップＳ１７０１では、管理プログラム１０１の増減設管理処理部４２１は、増設対象のノード１００に物理領域の０クリア要求を送信する。
【０１９０】
ステップＳ１７０２では、０クリア要求を受信したノード１００のマッピング変更処理部４３３は、増設対象の物理領域を０クリアする。ここで、物理領域の０クリア（０データ化）は、実際に「０」を書き込んでもよいし、ビットで「０」の状態であることを管理してもよい。
【０１９１】
ステップＳ１７０３では、増減設管理処理部４２１は、完了応答を受信する。
【０１９２】
ステップＳ１７０４では、増減設管理処理部４２１は、新旧の配置情報を参照し、移動元の物理チャンク３０１（移動元チャンク）と、移動先の物理チャンク３０１（移動先チャンク）とのノードＩＤとノード内オフセットとを特定する。
【０１９３】
例えば、図１０に示す例では、マッピング変更前とマッピング変更後の配置情報を参照して、グループ０（Ｇ０）、グループ１（Ｇ１）、およびグループ２（Ｇ２）の配置が変更されていると判断する。また、後述する図２３に示す例では、グループ１（Ｇ１）、グループ２（Ｇ２）、およびグループ３（Ｇ３）の配置が変更されていると判断する。図２３に示す例では、グループ０（Ｇ０）については配置が変更されていないため、移動対象の物理チャンクから除外する。
【０１９４】
ステップＳ１７０５では、増減設管理処理部４２１は、移動元チャンクから移動先チャンクにパリティの移動を行う移動要求を移動元チャンクのノード１００に送信する。本マッピング変更処理では、発行箇所が一のノード１００のように示しているが、ここでは、一のフレーム内の変更対象のノード１００すべてに送信（発行）が行われる。なお、パリティの移動が不要な場合、ステップＳ１７０５の処理は、スキップされる。
【０１９５】
ステップＳ１７０６では、パリティの移動要求を受信したノード１００のマッピング変更処理部４３３は、マッピング変更進捗情報７２４を初期化する。
【０１９６】
ステップＳ１７０７では、マッピング変更処理部４３３は、排他取得を行う。
【０１９７】
ステップＳ１７０８では、マッピング変更処理部４３３は、移動元チャンクのパリティを読み出す。
【０１９８】
ステップＳ１７０９では、マッピング変更処理部４３３は、移動先チャンクのストレージ制御プログラム１０２にパリティの書込み要求を送信する。
【０１９９】
ステップＳ１７１０では、マッピング変更処理部４３３は、応答を受信する。
【０２００】
ステップＳ１７１１では、マッピング変更処理部４３３は、読み出した移動元チャンクのパリティを「０」にする（移動元チャンクを０クリアする）。
【０２０１】
ステップＳ１７１２では、マッピング変更処理部４３３は、物理チャンク３０１内の全領域に対して処理を完了したか否かを判定する。マッピング変更処理部４３３は、完了したと判定した場合、ステップＳ１７１５の処理が行われ、完了していないと判定した場合、ステップＳ１７１３に処理を移す。
【０２０２】
ステップＳ１７１３では、マッピング変更処理部４３３は、マッピング変更進捗情報７２４を更新する。
【０２０３】
ステップＳ１７１４では、マッピング変更処理部４３３は、排他解放を行い、ステップＳ１７０７に処理を移す。
【０２０４】
ステップＳ１７１５では、増減設管理処理部４２１は、完了応答を受信する。
【０２０５】
ステップＳ１７１６では、増減設管理処理部４２１は、移動元チャンクのデータのパリティを更新する更新要求を送信する。本マッピング変更処理では、発行箇所が一のノード１００のようになっているが、ここは一のフレーム内の変更対象のノード１００すべてに送信（発行）が行われる。なお、パリティの更新が不要な場合、ステップＳ１７１６の処理は、スキップされる。
【０２０６】
ステップＳ１７１７では、パリティの更新要求を受信したノード１００のマッピング変更処理部４３３は、データ冗長化先変更処理を行う。なお、データ冗長化先変更処理については、図１８を用いて後述する。
【０２０７】
ステップＳ１７１８では、増減設管理処理部４２１は、完了応答を受信する。
【０２０８】
ステップＳ１７１９では、増減設管理処理部４２１は、特定した移動元チャンク全てに対して処理を完了したか否かを判定する。増減設管理処理部４２１は、完了したと判定した場合、マッピング変更処理を終了し、完了していないと判定した場合、ステップＳ１７２０に処理を移す。
【０２０９】
ステップＳ１７２０では、増減設管理処理部４２１は、次の移動元チャンク（および移動先チャンク）を設定し、ステップＳ１７０５に処理を移す。
【０２１０】
図１８は、データ冗長化先変更処理に係るフローチャートの一例を示す図である。データ冗長化先変更処理では、データを移動せずに冗長化先のパリティが変更される。より具体的には、新規の冗長化先にデータが転送されて新パリティが生成され、旧冗長化先にデータが転送されて旧パリティとの関係が解除されてパリティが再計算される。
【０２１１】
ステップＳ１８０１では、マッピング変更処理部４３３は、マッピング変更進捗情報７２４を初期化する。
【０２１２】
ステップＳ１８０２では、マッピング変更処理部４３３は、排他取得を行う。
【０２１３】
ステップＳ１８０３では、マッピング変更処理部４３３は、ローカルドライブ（自ノード１００のドライブ２１３）から、データ（移動先チャンクに新たにパリティを生成するためのデータ、または移動先チャンクのパリティを更新するためのデータ）を読み出す。
【０２１４】
ステップＳ１８０４では、マッピング変更処理部４３３は、新マッピング情報から新しい冗長化先のノード１００（新冗長化先ノード）を決定する。
【０２１５】
ステップＳ１８０５では、マッピング変更処理部４３３は、新冗長化先ノードにデータを転送する。なお、冗長度が２以上である場合、２以上のノード１００にデータを転送する。また、データを受信したノード１００は、ライト処理と同じ処理でパリティを更新し、更新が完了したことを返信（応答）する。
【０２１６】
ステップＳ１８０６では、マッピング変更処理部４３３は、応答を受信する。
【０２１７】
なお、新規ストライプのパリティの生成でない場合（例えば、図１２に示す例で、移動元チャンクのノード１００がノード１００−２であり、移動先チャンクのノード１００−１である場合）、ステップＳ１８０４〜ステップＳ１８０６については、スキップされてもよい。
【０２１８】
ステップＳ１８０７では、マッピング変更処理部４３３は、旧マッピング情報から変更前の冗長化先のノード１００（旧冗長化先ノード）を決定する。
【０２１９】
ステップＳ１８０８では、マッピング変更処理部４３３は、旧冗長化先ノードにデータを転送する。なお、データを受信したノード１００は、ライト処理と同じ処理でパリティを更新し、更新が完了したことを返信（応答）する。
【０２２０】
ステップＳ１８０９では、マッピング変更処理部４３３は、応答を受信する。
【０２２１】
なお、変更ストライプのパリティの更新でない場合（例えば、図１２に示す例で、移動元チャンクのノード１００がノード１００−２であり、移動先チャンクのノード１００−０である場合）、ステップＳ１８０７〜ステップＳ１８０９については、スキップされてもよい。
【０２２２】
ステップＳ１８１０では、マッピング変更処理部４３３は、排他解除を行う。
【０２２３】
ステップＳ１８１１では、マッピング変更処理部４３３は、物理チャンク３０１内の全領域に対して処理が完了したか否かを判定する。マッピング変更処理部４３３は、完了したと判定した場合、データ冗長化先変更処理を終了し、完了していないと判定した場合、ステップＳ１８１２に処理を移す。
【０２２４】
ステップＳ１８１２では、マッピング変更処理部４３３は、マッピング変更進捗情報７２４を更新し、ステップＳ１８０２に処理を移す。
【０２２５】
本実施の形態によれば、例えば、構成の変更前後で、既存のボリュームに性能影響を与えることなく、ノードの増設などを行うことができる。また、例えば、データローカリティを保持するＥＣであっても、構成の変更前後また構成変更中で、データローカリティを維持するので、ストレージ性能が低下しない。
【０２２６】
（２）第２の実施の形態
本実施の形態は、パリティが２つである点について説明する。本実施の形態では、第１の実施の形態と同じ点については、説明を適宜省略し、異なる点について主に説明する。以下では、データ保護ポリシが２Ｄ２Ｐである場合を例に挙げて説明する。
【０２２７】
図１９は、マッピング変更の特徴的構成（フレーム内動作の概要）を示すイメージ図である。
【０２２８】
パリティが２つの場合は、パリティが１つの場合と、マッピング変更の主な処理については、基本的には同じである。
＜処理Ａ＞
既存のノード１００の一部のパリティを増設されたノード１００に再構築（移動または再計算）する。
＜処理Ｂ＞
新規のストライプのパリティを生成する。
＜処理Ｃ＞
既存のストライプでデータの組合せが変わるストライプについてパリティを生成する。
【０２２９】
本例では、処理Ａについてはイメージ１９１０として示し、処理Ｂについてはイメージ１９２０として示し、処理Ｃについてはイメージ１９３０として示し、マッピング変更後についてはイメージ１９４０として示す。本例において、「Ａ１−Ａ２−ＡＰ−ＡＱ」、「Ｂ１−Ｂ２−ＢＰ−ＢＱ」、「Ｃ１−Ｃ２−ＣＰ−ＣＱ」、「Ｄ１−Ｄ２−ＤＰ−ＤＱ」は、既存のストライプを示し、「Ｅ１−Ｅ２−ＥＰ−ＥＱ」は、新規のストライプを示す。なお、「ＡＰ、ＢＰ、ＣＰ、ＤＰ、ＥＰ」は、単純な排他的論理和で計算される第１のパリティであるのに対して、「ＡＱ、ＢＱ、ＣＱ、ＤＱ、ＥＱ」は、例えば、Ｃａｕｃｈｙ−Ｒｅｅｄ−Ｓｏｌｏｍｏｎ等のアルゴリズムを使用して計算された第２のパリティを意味する。冗長度が３以上となった場合も、例えば、Ｃａｕｃｈｙ−Ｒｅｅｄ−Ｓｏｌｏｍｏｎ等のアルゴリズムを使用して、第３、第４のパリティを計算することができる。Ｃａｕｃｈｙ−Ｒｅｅｄ−Ｓｏｌｏｍｏｎ等のアルゴリズムについても、排他的論理和（ＸＯＲ）を使用して、パリティが計算されることから、以降の説明では、符号計算方式の詳細については言及せず、単に排他的論理和と説明する。
【０２３０】
本例では、イメージ１９４０に示すストライプでマッピング情報が生成されたとする。付言するならば、データ保護ポリシが２Ｄ２Ｐであるので、マッピング情報については、各ノード１００においてデータ：パリティ＝２：２と配置されるように生成されるのが好適である。
【０２３１】
イメージ１９１０では、ストレージシステム１は、イメージ１９４０をもとに、「ノード０」には、「ＥＰ」のパリティを格納する領域が必要であるため、既存の「ノード０」の「ＣＰ」および「ＢＱ」のパリティ１９１１を増設された「ノード４」に再構築する。また、ストレージシステム１は、「ノード１」には、「ＥＱ」のパリティを格納する領域が必要であるため、「ノード１」の「ＤＰ」および「ＣＱ」のパリティ１９１２を空き領域とした「ノード０」に再構築する。
【０２３２】
イメージ１９２０では、ストレージシステム１は、イメージ１９４０をもとに、移動後の「ＤＰ」のセグメントに、新規のストライプを構成する「Ｅ１」のデータ１９２１（格納されているのは、既存のストライプを構成する「Ｄ１」のデータ）と「Ｅ２」のデータ１９２２との排他的論理和１９２３を計算して「ＥＰ」のパリティ１９２４を生成して格納する。また、ストレージシステム１は、イメージ１９４０をもとに、「ＥＱ」のセグメントに、新規のストライプを構成する「Ｅ１」のデータ１９２１と「Ｅ２」のデータ１９２２との排他的論理和１９２５を計算して「ＥＱ」のパリティ１９２６を生成する。
【０２３３】
イメージ１９３０では、ストレージシステム１は、イメージ１９４０をもとに、既存のストライプでデータの組合せが変更されるストライプ「Ｄ１−Ｄ２−ＤＰ−ＤＱ」について、変更後のストライプを構成する「Ｄ１」のデータ１９３１と「Ｄ２」のデータ１９３２との排他的論理和１９３３を計算して変更後の「ＤＰ」のパリティ１９３４を生成する。また、ストレージシステム１は、変更後のストライプを構成する「Ｄ１」のデータ１９３１と「Ｄ２」のデータ１９３２との排他的論理和１９３５を計算して変更後の「ＤＱ」のパリティ１９３６を生成する。
【０２３４】
イメージ１９４０では、データを移動することなく、パリティを計算してストライプが組み替えられたことが示される。
【０２３５】
なお、第１の実施の形態で図１２を用いて説明したように、ノード１００間のデータ転送の最適化が行われてもよい。
【０２３６】
本実施の形態によれば、例えば、パリティが２つのデータ保護ポリシであっても、構成の変更前後で、既存のボリュームに性能影響を与えることなく、ノードの増設などを行うことができる。
【０２３７】
（３）第３の実施の形態
本実施の形態は、ネットワークの転送量を減らすために、データを符号化し、符号化したデータとライト要求のデータとでパリティを生成して格納する点が第１の実施の形態と主に異なる。本実施の形態では、第１の実施の形態と同じ点については、説明を適宜省略し、異なる点について主に説明する。以下では、データ保護ポリシがＭＥＣ（Multi-stage Erasure Coding）である場合を例に挙げて説明する。なお、ＭＥＣについては、国際公開第２０１６／０５２６６５号に開示され、必要に応じて援用してもよい。
【０２３８】
図２０は、ＭＥＣの概要を示すイメージ図である。図２０では、符号化処理イメージ２０１０と、復号化処理イメージ２０２０とが示されている。
【０２３９】
符号化処理イメージ２０１０に示すように、例えば、ノード１００−３では、ノード１００−０で書き込まれた「Ａ１」データ２０１１がノード１００−０から転送される。また、ノード１００−１で書き込まれた「Ａ２」データ２０１２がノード１００−１から転送される。また、ノード１００−２で書き込まれた「Ｂ２」データ２０１３および「Ｃ１」データ２０１４を１次符号化（例えば、ＸＯＲ演算）した「Ａ３」データ２０１５がノード１００−２から転送される。
【０２４０】
ノード１００−３では、転送された「Ａ１」データ２０１１と、「Ａ２」データ２０１２と、「Ａ３」データ２０１５とを用いて、２次符号化（例えば、ＸＯＲ演算）して「ＡＰ」パリティ２０１６が生成され、２次符号化（例えば、ガロア演算）して「ＡＱ」パリティ２０１７が生成される。なお、パリティの更新について、データが揃わない場合は、旧データとＸＯＲで計算した中間データが転送され、ＲＭＷ（Read Modify Write）動作でパリティが更新される。また、データが揃うまでメモリ２１２、ドライブ２１３等にキャッシュしていてもよい。
【０２４１】
復号化処理イメージ２０２０に示すように、例えば、ノード１００−０およびノード１００−３に障害が発生した場合、ノード１００−１およびノード１００−２のデータおよびパリティからノード１００−０の「Ａ１」２０１１が復元される。
【０２４２】
より具体的には、ノード１００−１では、格納している「Ｂ１」データ２０２１と「Ａ２」データ２０２２とを復号化して「Ｄ３」データ２０２３を生成し、ノード１００−２に転送する。ノード１００−１では、「ＣＰ」パリティ２０２４と、「ＣＱ」パリティ２０２５と、ノード１００−２から転送される「Ｃ１」データ２０２６とを用いて「Ｃ３」データ２０２７を生成し、ノード１００−０に転送する。
【０２４３】
また、ノード１００−２では、「ＤＰ」パリティ２０２８と「ＤＱ」パリティ２０２９とノード１００−１から転送された「Ｄ３」データ２０２３とを用いて「Ｄ２」データ２０３０を生成し、ノード１００−０に転送する。
【０２４４】
また、ノード１００−０では、転送された「Ｃ３」データ２０２３と、「Ｄ２」データ２０３０とを用いて「Ａ１」データ２０１１を復元する。
【０２４５】
付言するならば、ｍＤｎＰのデータ保護ポリシにおいて、ＥＣでは、ｍ×ｎのデータの転送が必要であるが、ＭＥＣでは、一次符号化することで、ｍ＋ｎ−１のデータの転送とすることができ、転送量を削減することができる。
【０２４６】
図２１は、マッピング変更の特徴的構成（フレーム内動作の概要）を示すイメージ図である。
【０２４７】
データ保護ポリシがＭＥＣである場合は、ＥＣである場合と、マッピング変更の主な処理は、基本的には同じである。
＜処理Ａ＞
既存のノード１００の一部のパリティを増設されたノード１００に再構築（移動または再計算）する。
＜処理Ｂ＞
新規のストライプのパリティを生成する。
＜処理Ｃ＞
既存のストライプでデータの組合せが変わるストライプについてパリティを生成する。
【０２４８】
本例では、処理Ａについてはイメージ２１１０として示し、処理Ｂについてはイメージ２１２０として示し、処理Ｃについてはイメージ２１３０および２１４０として示し、マッピング変更後についてもイメージ２１４０として示す。本例において、「Ａ１−Ａ２−Ａ３−ＡＰ−ＡＱ」、「Ｂ１−Ｂ２−Ｂ３−ＢＰ−ＢＱ」、「Ｃ１−Ｃ２−Ｃ３−ＣＰ−ＣＱ」、「Ｄ１−Ｄ２−Ｄ３−ＤＰ−ＤＱ」は、既存のストライプを示し、「Ｅ１−Ｅ２−Ｅ３−ＥＰ−ＥＱ」は、新規のストライプを示す。
【０２４９】
本例では、イメージ２１４０に示すストライプでマッピング情報が生成されたとする。付言するならば、データ保護ポリシがＭＥＣ（２Ｄ２Ｐ）であるので、マッピング情報については、各ノード１００においてデータ：パリティ＝２：２と配置されるように生成されるのが好適である。なお、「Ａ３」のデータは、ノード１００上には存在しない仮想的なデータであり、アクセスする際は、「Ａ１」のデータと「Ｄ２」のデータとを読み出して、ＸＯＲにより算出される。なお、「Ｂ３」、「Ｃ３」、「Ｄ３」、「Ｅ３」についても同様である。
【０２５０】
イメージ２１１０では、ストレージシステム１は、イメージ２１４０をもとに、既存の「ノード０」の「ＢＰ」および「ＢＱ」のパリティ２１１１を増設された「ノード４」に再構築する。また、ストレージシステム１は、「ノード１」には、「ＥＰ」および「ＥＱ」のパリティを格納する領域が必要であるため、「ノード１」の「ＣＰ」および「ＣＱ」のパリティ２１１２を空き領域とした「ノード０」に再構築する。
【０２５１】
イメージ２１２０では、ストレージシステム１は、イメージ２１４０をもとに、移動前の「ＣＰ」および「ＣＱ」のセグメントに、新規のストライプを構成する「Ｅ１」のデータ２１２１（なお、格納されているのは、既存のストライプを構成する「Ｄ１」のデータである。）と「Ｅ２」のデータ２１２２と「Ｅ３」のデータ２１２３（なお、「Ａ１」のデータと「Ｄ２」のデータとの１次符号化により求められる。）とを用いて２次符号化２１２４して「ＥＰ」および「ＥＱ」のパリティ２１２５を生成して格納する。
【０２５２】
イメージ２１３０では、ストレージシステム１は、イメージ２１４０をもとに、既存のストライプでデータの組合せが変更されるストライプ「Ｄ１−Ｄ２−Ｄ３−ＤＰ−ＤＱ」について、変更後のストライプを構成する「Ｄ１」のデータ２１３１と「Ｄ２」のデータ２１３２と「Ｄ３」のデータ２１３３（なお、「Ｂ１」のデータと「Ａ２」のデータとの１次符号化により求められる。）とを用いて２次符号化２１３４して変更後の「ＤＰ」および「ＤＱ」のパリティ２１３５を生成する。
【０２５３】
イメージ２１４０では、ストレージシステム１は、イメージ２１４０をもとに、既存のストライプでデータの組合せが変更されるストライプ「Ｃ１−Ｃ２−Ｃ３−ＣＰ−ＣＱ」について、変更後のストライプを構成する「Ｃ１」のデータ２１４１と「Ｃ２」のデータ２１４２と「Ｃ３」のデータ２１４３（なお、「Ｄ１」のデータと「Ｅ２」のデータとの１次符号化により求められる。）とを用いて２次符号化２１４４して変更後の「ＣＰ」および「ＣＱ」のパリティ２１４５を生成する。
【０２５４】
また、イメージ２１４０では、データを移動することなく、パリティを計算してストライプが組み替えられたことが示される。
【０２５５】
本実施の形態によれば、例えば、データ保護ポリシがＭＥＣであっても、構成の変更前後で、既存のボリュームに性能影響を与えることなく、ノードの増設などを行うことができる。
【０２５６】
（４）第４の実施の形態
本実施の形態は、ノード１００が減設される点について説明する。本実施の形態では、第１の実施の形態と同じ点については、説明を適宜省略し、異なる点について主に説明する。以下では、データ保護ポリシが２Ｄ１Ｐである場合を例に挙げて説明する。
【０２５７】
図２２は、マッピング変更の特徴的構成（フレーム内動作の概要）を示すイメージ図である。
【０２５８】
ノードの減設である場合、マッピング変更の主な処理は、下記のようになる。
＜処理Ａ＞
減設するノード１００のデータを、事前に別のノード１００に移動する。
＜処理Ｂ＞
既存のストライプでデータの組合せが変わるストライプについてパリティを生成する。
＜処理Ｃ＞
減設されるノード３００のパリティについてパリティを再構築する。
【０２５９】
本例では、処理Ａについてはイメージ２２１０として示し、処理Ｂについてはイメージ２２２０として示し、処理Ｃについてはイメージ２２３０として示し、マッピング変更後についてもイメージ２２３０として示す。本例において、「Ａ１−Ａ２−ＡＰ」、「Ｂ１−Ｂ２−ＢＰ」、「Ｃ１−Ｃ２−ＣＰ」、「Ｄ１−Ｄ２−ＤＰ」は、既存のストライプを示し、「Ｄ１−Ｄ２−ＤＰ」は、減設のストライプを示す。
【０２６０】
イメージ２２１０では、ストレージシステム１は、イメージ２２３０をもとに、ホストノード３００（アプリケーションプログラム側）で、減設するノード１００−３の「Ｃ１」のデータ２２１１および「Ｄ１」のデータ２２１２の移動を実行し、「Ｃ１」のデータ２２１１および「Ｄ１」のデータ２２１２を不要データ化（例えば、０クリア）する。
【０２６１】
イメージ２２２０では、ストレージシステム１は、イメージ２２３０をもとに、既存のストライプでデータの組合せが変更されるストライプ「Ｃ１−Ｃ２−ＣＰ」について、変更後のストライプを構成する「Ｃ１」のデータ２２２１と「Ｃ２」のデータ２２２２との排他的論理和２２２３を計算して変更後の「ＣＰ」のパリティ２２２４を生成する。
【０２６２】
イメージ２２３０では、ストレージシステム１は、イメージ２２３０をもとに、減設のストライプのパリティを格納している「ＤＰ」に、減設される「ノード３」の「ＢＰ」を含むストライプ「Ｂ１−Ｂ２−ＢＰ」について、当該ストライプを構成する「Ｂ１」のデータ２２３１と「Ｂ２」のデータ２２３２との排他的論理和２２３３を計算して、「ＢＰ」のパリティ２２３４を生成する。なお、生成ではなく、移動により、「ＢＰ」のパリティ２２３４を再構築してもよい。なお、減設されるノード１００のパリティについては、不要データ化（例えば、０クリア）されてもよい。
【０２６３】
本実施の形態によれば、例えば、構成の変更前後で、既存のボリュームに性能影響を与えることなく、ノードの減設を行うことができる。
【０２６４】
（５）第５の実施の形態
本実施の形態は、ノード１００の増設の際、既存のチャンクグループ３０２を適用するのではなく、新規のチャンクグループ３０２を追加する点が第１の実施の形態と主に異なる。本実施の形態では、第１の実施の形態と同じ点については、説明を適宜省略し、異なる点について主に説明する。
【０２６５】
図２３は、マッピング変更の概要を示すイメージ図である。ここでは、チャンクマッピング管理情報２３１０およびチャンクマッピング管理情報２３２０に示すように、「Ｎ３」のノード１００（ノード１００−３）が増設されるケースを例に挙げて説明する。
【０２６６】
チャンクマッピング管理情報２３２０に示すように、新たなチャンクグループ３０２として「Ｇ３」が追加されている。
【０２６７】
本ストレージシステム１では、ノード１００内のオフセットは、上位オフセットから使用されていくので、未使用の最下位オフセットを使用してマッピング変更を行う。未使用のオフセットのマッピングを切り換えた後、上位オフセットのフレーム内の同位置の物理チャンク３０１の領域からデータをコピーする。コピーした契機でパリティを計算して構築する。このデータの移動は、ノード１００内のデータの移動となるので、データローカリティは消失しない。
【０２６８】
例えば、「Ｇ０」のチャンクグループ３０２を構成する移動元チャンクのデータ２３３１を移動先チャンクにコピーする際、データ２３３１は、「Ｇ０」のチャンクグループ３０２を構成する他のノード１００（ノード１００−１、ノード１００−２）に転送される。データ２３３１を受け取ったノード１００−１は、転送されたデータ２３３１と旧パリティ２３３２とを用いて新パリティ２３３３を計算して格納する。また、データ２３３１を受け取ったノード１００−２は、転送されたデータ２３３１と旧パリティ２３３４とを用いて新パリティ２３３５を計算して格納する。
【０２６９】
なお、上述したデータの移動では、ストレージプール３０５は、データの移動の前後でデータが移動したことを意識しない。
【０２７０】
図２４は、マッピング変更処理に係るフローチャートの一例を示す図である。
【０２７１】
ステップＳ２４０１では、増減設管理処理部４２１は、現行のフレームを移動元のフレームに設定し、次オフセットのフレームを移動先のフレームに設定する。
【０２７２】
ステップＳ２４０２では、増減設管理処理部４２１は、移動元のフレームから移動元のチャンクを設定する。
【０２７３】
ステップＳ２４０３では、増減設管理処理部４２１は、移動先のフレームにおいて移動元の物理チャンク３０１（移動元チャンク）とフレーム内の相対位置が同一の物理チャンク３０１を移動先の物理チャンク３０１（移動先チャンク）に設定する。
【０２７４】
ステップＳ２４０４では、増減設管理処理部４２１は、移動元チャンクから移動先チャンクへパリティを移動する要求（移動要求）を移動元チャンクを有するノード１００に送信する。
【０２７５】
ステップＳ２４０５では、移動要求を受信したノード１００のマッピング変更処理部４３３は、マッピング変更進捗情報７２４を初期化する。
【０２７６】
ステップＳ２４０６では、マッピング変更処理部４３３は、排他取得を行う。
【０２７７】
ステップＳ２４０７では、マッピング変更処理部４３３は、移動元チャンクのデータを読み出す。
【０２７８】
ステップＳ２４０８では、マッピング変更処理部４３３は、移動先チャンクにデータを書き込む。なお、マッピング変更処理部４３３は、ホストノード３００のライト処理と同様に、図１４に示すライト処理を行う。なお、このとき、ライト処理部４３２は、マッピング変更中、かつ、書き込み先が変更済みの属性でデータを書き込む。
【０２７９】
ステップＳ２４０９では、マッピング変更処理部４３３は、物理チャンク３０１内の全領域に対して処理が完了したか否かを判定する。マッピング変更処理部４３３は、完了したと判定した場合、ステップＳ２４１２の処理が行われ、完了していないと判定した場合、ステップＳ２４１０に処理を移す。
【０２８０】
ステップＳ２４１０では、マッピング変更処理部４３３は、マッピング変更進捗情報７２４を更新する。
【０２８１】
ステップＳ２４１１では、マッピング変更処理部４３３は、排他解放を行い、ステップＳ２４０６に処理を移す。
【０２８２】
ステップＳ２４１２では、増減設管理処理部４２１は、応答完了を受信する。
【０２８３】
ステップＳ２４１３では、増減設管理処理部４２１は、フレーム内の全物理チャンク３０１に対して処理が完了したか否かを判定する。増減設管理処理部４２１は、完了したと判定した場合、現行フレームを前オフセットのフレームに設定し、全てのオフセットについてＳ２４０１〜Ｓ２４１４の処理を繰り返す。また、増減設管理処理部４２１は、完了していないと判定した場合、ステップＳ２４１４に処理を移す。
【０２８４】
ステップＳ２４１４では、増減設管理処理部４２１は、次の移動元チャンクを設定し、ステップＳ２４０３に処理を移す。
【０２８５】
本実施の形態によれば、例えば、チャンクグループを追加する場合でも、構成の変更前後で、既存のボリュームに性能影響を与えることなく、ノードの増設などを行うことができる。
【０２８６】
（６）他の実施の形態
なお上述の実施の形態においては、本発明をストレージシステムに適用するようにした場合について述べたが、本発明はこれに限らず、この他種々のシステム、装置、方法、プログラムに広く適用することができる。
【０２８７】
また、上述の実施の形態において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部または一部が１つのテーブルであってもよい。
【０２８８】
また、上述の実施の形態において、説明の便宜上、ＸＸテーブルを用いて各種のデータを説明したが、データ構造は限定されるものではなく、ＸＸ情報などと表現してもよい。
【０２８９】
また、上記の説明において、各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記憶装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０２９０】
また、本発明は、以下に示す特徴的構成を有してもよい。
【０２９１】
例えば、複数のノード（例えば、ノード１００）を含んで構成されるストレージシステム（例えば、ストレージシステム１）であって、上記ノードは、データのライト及びリード要求のターゲットとなっており、異なるノードに格納される複数のデータ及びこの複数のデータに基づいて生成されたパリティによりストライプを形成し、上記ライト要求のデータが属する上記ストライプのパリティを、上記複数のデータを格納する複数のノードとは異なるノードに格納して冗長化（ｍＤｎＰのＥＣ、ｍＤｎＰのＭＥＣなど）を行い、管理部（例えば、管理プログラム１０１）は、ノード構成が変更（ノード１００の増減設、サイト２１０の増減設など）された場合に、上記パリティのノード間移動及び上記ストライプの再構成を行う配置変更要求（例えば、マッピング変更要求）を上記ノードに送信することを特徴とする。
【０２９２】
上述の構成によれば、例えば、構成の変更に応じて組み替えられたストライプのパリティを計算することで構成の変更を行うことが可能となる。
【０２９３】
また、例えば、上記ノードは、受信したライト要求にかかるデータを自ノードのボリュームに格納することを特徴とする。
【０２９４】
また、例えば、上記配置変更要求は、上記データをノード間で移動させないことを特徴とする。
【０２９５】
上述の構成によれば、例えば、データを他のノードに移動することなく構成の変更に応じて組み替えられたストライプのパリティを計算することで構成の変更を行うことが可能となる。
【０２９６】
また、例えば、上記ノードは、受信したライト要求にかかるデータと、複数の他のノードが格納しているデータとストライプを形成しているパリティとを格納しており、上記構成の変更は、ノードを増設する変更であり、上記配置変更要求により、上記増設したノード内に、いずれかのノードに格納されたパリティを移動させるとともに、上記増設したノード内のデータと既存のノードに格納されたデータ及びパリティによりストライプを形成することを特徴とする。
【０２９７】
上述の構成によれば、例えば、各ノードでパリティを持ち合うことができる。
【０２９８】
また、例えば、上記パリティを移動させるストライプ（例えば、Ｂ１−Ｂ２−ＢＰ）と、新たに形成するストライプ（例えば、Ｄ１−Ｄ２−ＤＰ）とは、別のストライプであることを特徴とする。
【０２９９】
また、例えば、上記ストライプの再構成は、増設されたノード内のデータを所定のデータ（なお、上述の実施の形態では、データが全て「０」である場合を例示したが、全て「１」であってもよい。）として、上記ストライプに加えてパリティを計算する、ことを特徴とする。
【０３００】
上述の構成によれば、例えば、増設されたノード内のデータを転送する必要がないので、ノード間のデータの転送量を削減することができる。
【０３０１】
また、例えば、上記増設したノードに移動させたパリティを格納していたノードに、新たに形成した上記ストライプのパリティを格納することを特徴とする。
【０３０２】
また、例えば、複数のノードの物理領域（例えば、物理チャンク３０１）を含んで冗長化グループ（例えば、チャンクグループ３０２）が構築され、構築された冗長化グループから論理的に切り出された論理領域（例えば、論理チャンク３０３）がストレージプール（例えば、ストレージプール３０５）として割り当てられ、上記管理部は、上記ストレージプールに割り当てられている論理領域に紐づく物理領域が処理対象である場合、上記配置変更要求を送信する（例えば、ステップＳ１６０７、ステップＳ１６０８参照。）ことを特徴とする。
【０３０３】
上述の構成によれば、例えば、ストレージプールに割り当てられていない物理チャンクを処理対象から外すことで、マッピング変更時のノード間のデータの転送コストを削減できる。
【０３０４】
また、例えば、上記管理部は、一または複数の冗長化グループを処理単位（例えば、フレーム）として上記要求を送信することを特徴とする。
【０３０５】
上述の構成によれば、例えば、一または複数の冗長化グループをフレーム単位としてまとめて処理できるようになるので、管理部とノードとにおける通信コストを削減できる。
【０３０６】
また、例えば、上記管理部は、データの保護ポリシがｍＤｎＰとして設定されている場合、各ノードに配置するデータの個数がｍ、パリティの個数がｎの比率となるように配置情報（チャンクグループマッピング情報、マッピング情報など）を生成することを特徴とする。
【０３０７】
上述の構成によれば、例えば、一のノードにパリティが偏って格納されることで、当該ノードの負荷が高くなってしまう事態を回避できるようになる。
【０３０８】
また、例えば、上記要求を受信したノードは、上記構成の変更前の配置情報と上記構成の変更後の配置情報とを比較し、パリティの配置が変更されている領域（例えば、物理チャンク３０１）に対してパリティが計算されるように上記配置変更要求を送信する（例えば、ステップＳ１７０４、ステップＳ１７０５参照。）ことを特徴とする。
【０３０９】
上述の構成によれば、例えば、パリティの計算が不要な物理領域を処理対象から外すことで、マッピング変更時のノード間のデータの転送コストを削減できる。
【０３１０】
また、例えば、上記管理部は、上記構成の変更がドライブ（例えば、ドライブ２１３）を変更するものである場合、ドライブが変更されたノードに対して、上記ドライブにデータとパリティとを移動する要求または上記ドライブからデータとパリティとを移動する要求を送信する（例えば、ステップＳ１６０２参照）ことを特徴とする。
【０３１１】
上述の構成によれば、例えば、ノード内のドライブ間でのデータおよびパリティの移動により（データごと移動することにより）、移動コストを削減することができる。
【０３１２】
また、例えば、ライト要求のデータを受けたノードは、上記データを自ノードに格納（例えば、２Ｄ１Ｐのデータ保護ポリシにおいて、図１１のイメージ１１３０に示すストライプが組まれている場合、ノード１００−０がライト要求のデータを受信した場合、「Ａ１」および「Ｃ２」にデータを格納）し、上記データと上記データの旧データとの差分を示す中間データを生成（例えば、「Ａ１」のデータの中間データと、「Ｃ２」のデータの中間データを生成）し、配置情報に基づいて冗長化先のノードを特定（例えば、「Ａ１」のパリティを格納するノード１００−２と、「Ｃ２」のパリティを格納するノード１００−１とを特定）し、特定したノードに上記中間データを送信し、上記中間データを受信したノードは、上記中間データと、上記旧データのパリティとから上記データのパリティを計算することを、１のパリティに対して複数のノードから受信した上記中間データを用いて行うことを特徴とする。
【０３１３】
上述の構成によれば、例えば、データローカリティを保持するＥＣにおいて、データローカリティを消失することなく、構成の変更を行うことができるので、構成の変更によりストレージ性能が低下してしまう事態を回避できるようになる。
【０３１４】
また、例えば、上記管理部は、構成の変更に応じて、新たな冗長化グループを含めて配置情報を生成し、上記配置情報に従ってパリティを構築する要求を各ノードに送信することを特徴とする。
【０３１５】
上述の構成にでは、例えば、ノード内でデータは移動するが、構成の変更に応じて変更された冗長化グループ（ストライプ）のパリティを再計算することで、ノード間でデータを移動することなしに構成の変更を行うことができる。上述の構成によれば、データローカリティを消失しないので、構成の変更によりストレージ性能が低下してしまう事態を回避できるようになる。
【０３１６】
また、例えば、第１のノードに格納される複数のデータ（例えば、図２０に示すノード１００−２の「Ｂ２」データ２０１３および「Ｃ１」データ２０１４）より生成される一次符号（例えば、「Ａ３」データ２０１５）と、上記第１のノードとは異なる第２のノードに格納されるデータ（例えば、ノード１００−０の「Ａ１」データ２０１１およびノード１００−１の「Ａ２」データ２０１２）と、に基づいて生成される二次符号（例えば、「ＡＰ」パリティ２０１６および「ＡＱ」パリティ２０１７）をパリティとして上記第１のノードおよび上記第２のノードとは異なる第３のノード（例えば、ノード１００−３）に格納することで冗長化（例えば、ＭＥＣ）が行われ、上記配置変更要求を受信した上記第１のノード（例えば、図２１に示すノード１００−１）は、格納している複数のデータ（「Ｂ１」のデータおよび「Ａ２」のデータ）から上記一次符号（例えば、「Ｄ３」のデータ２１３３）を計算し、配置情報より上記一次符号を用いた冗長化に係るパリティ（例えば、「ＤＰ」および「ＤＱ」のパリティ２１３５）を格納するノード（例えば、ノード１００−２）を特定して上記一次符号を送信することを特徴とする。
【０３１７】
上述の構成によれば、例えば、データローカリティを保持するＭＥＣにおいて、データローカリティを消失することなく、構成の変更を行うことができるので、構成の変更によりストレージ性能が低下してしまう事態を回避できるようになる。
【０３１８】
また、本発明は、例えば、ＳＤＳシステムにおけるノード、デバイスの増減設に有用である。例えば、安価なネットワーク機器を用いて高性能なＳＤＳシステムを柔軟に構築、運用できるようになるため、本発明の有用性は高い。
【０３１９】
また上述した構成については、本発明の要旨を超えない範囲において、適宜に、変更したり、組み替えたり、組み合わせたり、省略したりしてもよい。
【符号の説明】
【０３２０】
１……ストレージシステム、１００……ノード、１０１……管理プログラム、１０２……ストレージ制御プログラム。
【図１】
2020107082.tif 000003
【図２】
2020107082.tif 000004
【図３】
2020107082.tif 000005
【図４】
2020107082.tif 000006
【図５】
2020107082.tif 000007
【図６】
2020107082.tif 000008
【図７】
2020107082.tif 000009
【図８】
2020107082.tif 000010
【図９】
2020107082.tif 000011
【図１０】
2020107082.tif 000012
【図１１】
2020107082.tif 000013
【図１２】
2020107082.tif 000014
【図１３】
2020107082.tif 000015
【図１４】
2020107082.tif 000016
【図１５】
2020107082.tif 000017
【図１６】
2020107082.tif 000018
【図１７】
2020107082.tif 000019
【図１８】
2020107082.tif 000020
【図１９】
2020107082.tif 000021
【図２０】
2020107082.tif 000022
【図２１】
2020107082.tif 000023
【図２２】
2020107082.tif 000024
【図２３】
2020107082.tif 000025
【図２４】
2020107082.tif 000026