(57)【要約】【課題】一定の障害耐性を確保しつつ、自由度が高い構成でストレージシステムを構築する。【解決手段】ストレージシステムは、データのＩ／Ｏ処理要求を処理する複数のノードを有する。ノードは、記憶ドライブと、記憶ドライブに対してＩ／Ｏ処理を行うプロセッサと、を有する。プロセッサは、異なる記憶ドライブに格納されるデータを組みにしてデータセットとしたデータ冗長構成を構成する。ストレージシステムを管理する管理部は、ノード及び記憶ドライブを少なくとも含むコンポーネントの情報であるコンポーネント情報と、データ冗長構成にかかるデータ冗長構成情報と、を用いて、各コンポーネントの障害に対する障害耐性情報を算出する障害耐性算出を行い、算出した障害耐性情報にかかるデータ冗長構成を適用してデータ配置を決定する。【選択図】図２２
2020064473.tif 000002
【特許請求の範囲】
【請求項１】
データのＩ／Ｏ処理要求を処理する複数のノードを有するストレージシステムであって、
前記ノードは、
記憶ドライブと、
前記記憶ドライブに対して前記Ｉ／Ｏ処理を行うプロセッサと、を有し、
前記プロセッサは、
異なる前記記憶ドライブに格納されるデータを組みにしてデータセットとしたデータ冗長構成を構成し、
前記ストレージシステムを管理する管理部は、
前記ノード及び前記記憶ドライブを少なくとも含むコンポーネントの情報であるコンポーネント情報と、前記データ冗長構成にかかるデータ冗長構成情報と、を用いて、各コンポーネントの障害に対する障害耐性情報を算出する障害耐性算出を行い、
前記算出した障害耐性情報にかかる前記データ冗長構成を適用してデータ配置を決定する
ことを特徴とするストレージシステム。
【請求項２】
前記管理部は、前記障害耐性算出では、前記データ冗長構成情報に基づいて、各データの配置を設定し、各コンポーネントに障害が起きた場合の稼働継続性に基づいて、前記障害耐性情報を算出する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記コンポーネントには、電源又はネットワークを含み、前記障害耐性情報には、前記電源又はネットワークに障害が発生した場合の稼働継続性を含む
ことを特徴とする請求項１に記載のストレージシステム。
【請求項４】
前記コンポーネントには、サイトを含み、前記障害耐性情報には、前記サイトに障害が発生した場合の稼働継続性を含む
ことを特徴とする請求項１に記載のストレージシステム。
【請求項５】
前記障害耐性情報には、前記データ配置のネックとなっているネック部位の情報が含まれる
ことを特徴とする請求項１に記載のストレージシステム。
【請求項６】
前記管理部は、前記障害耐性情報に基づいて、前記データ冗長構成及び前記データ配置を決定する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項７】
前記障害耐性情報を出力し、前記データ冗長構成及び前記データ配置の選択をユーザから受け付ける
ことを特徴とする請求項１に記載のストレージシステム。
【請求項８】
データのＩ／Ｏ処理要求を処理する複数のノードを有するストレージシステムにおけるデータ配置方法であって、
前記ノードは、
記憶ドライブと、
前記記憶ドライブに対して前記Ｉ／Ｏ処理を行うプロセッサと、を有し、
前記プロセッサは、
異なる前記記憶ドライブに格納されるデータを組みにしてデータセットとしたデータ冗長構成を構成し、
前記ストレージシステムを管理する管理部が、
前記ノード及び前記記憶ドライブを少なくとも含むコンポーネントの情報であるコンポーネント情報と、前記データ冗長構成にかかるデータ冗長構成情報と、を用いて、各コンポーネントの障害に対する障害耐性情報を算出する障害耐性算出を行い、
前記算出した障害耐性情報にかかる前記データ冗長構成を適用してデータ配置を決定する
ことを特徴とするストレージシステムにおけるデータ配置方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びストレージシステムにおけるデータ配置方法に関する。
【背景技術】
【０００２】
ストレージシステムの記憶容量の利用効率を高めるため、Software-Defined  Storage（ＳＤＳ）の需要が高まってきている。また容量効率や信頼性の観点から、ストレージシステムのデータ保護をErasure  Coding方式にて行うようになってきている。
【０００３】
例えば特許文献１には、Erasure  Coding方式を採用したストレージシステムにおいて、ｍ個のデータ及びｎ個のパリティからなるｍＤｎＰのデータセットを構成する各データ単位を、異なるストレージノードに配置する技術が開示されている。
【０００４】
またＳＤＳでは、１以上の冗長性を有するデータセットを指定した場合に、ストレージシステムを構成するコンポーネント（例えば電源、ノード、ドライブ等）の単一障害によりデータセットの冗長性が一度に２以上低下してデータロストが生じる可能性がある。そこで、一般的に、ＳＤＳでは、同一データセットのデータ単位を、電源系統が異なるグループに属するストレージノードに配置することが行われている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１６／０５１５１２号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述の従来技術では、ストレージシステムにおいて、全てのコンポーネントで同一の保護レベル（障害耐性）が確保できる構成を前提としている。
【０００７】
図４７を参照して具体例で説明する。図４７は、従来技術のストレージシステムにおいて、全てのコンポーネントで同一の保護レベル（障害耐性）が確保できる構成例を示す図である。図４７に示すように、ストレージシステムのコンポーネントの１つが、１つの電源と２つのノードとから構成されているフォルトセット（電源境界）である場合を考える。この場合、１つのフォルトセットに含まれるコンポーネント（１つの電源及び２つのノード）が、単一の電源障害の影響を受ける範囲となる。
【０００８】
例えば６個のデータ及び２個のパリティからなる４Ｄ２Ｐのデータセットの各データ単位を、２つのコンポーネント（２つの電源、１つの電源及び１つのノード、或いは、２つのノード）の同時障害に耐えうるようにノードに配置する場合を考える。この場合、図４７に示すように、６つのフォルトセット（フォルトセット＃０〜＃５）それぞれの１つのノードに１つずつデータ単位を配置する必要がある。
【０００９】
このように、６つのフォルトセットに４Ｄ２Ｐのデータセットの各データ単位を配置することで、全てのコンポーネント（図４７の例では電源及びノード）のうち合計２つのコンポーネントの障害まで耐えうる構成となる。即ち全コンポーネントで同一保護レベル（障害耐性）が確保できる構成となる。
【００１０】
しかし、上述のように、ストレージシステムにおいて、全てのコンポーネントで同一の保護レベル（障害耐性）が確保できる構成とすると、構成の自由度が低くなり、小規模構成に対応できない等、柔軟にストレージシステム構築できないという問題がある。
【００１１】
本発明は以上の点を考慮してなされたもので、一定の保護レベル（障害耐性）を確保しつつ、自由度が高い構成でストレージシステムを構築可能とすることを目的とする。
【課題を解決するための手段】
【００１２】
かかる課題を解決するため本発明の一例においては、データのＩ／Ｏ処理要求を処理する複数のノードを有するストレージシステムであって、前記ノードは、記憶ドライブと、前記記憶ドライブに対して前記Ｉ／Ｏ処理を行うプロセッサと、を有し、前記プロセッサは、異なる前記記憶ドライブに格納されるデータを組みにしてデータセットとしたデータ冗長構成を構成し、前記ストレージシステムを管理する管理部は、前記ノード及び前記記憶ドライブを少なくとも含むコンポーネントの情報であるコンポーネント情報と、前記データ冗長構成にかかるデータ冗長構成情報と、を用いて、各コンポーネントの障害に対する障害耐性情報を算出する障害耐性算出を行い、前記算出した障害耐性情報にかかるデータ冗長構成を適用してデータ配置を決定する。
【発明の効果】
【００１３】
本発明の一態様によれば、一定の保護レベル（障害耐性）を確保しつつ、自由度が高い構成でストレージシステムを構築できる。
【図面の簡単な説明】
【００１４】
【図１】実施例１の計算機システムの構成例を示す図。
【図２】実施例１のＦＳのハードウェア構成例を示す図。
【図３】実施例１のメモリ内の制御情報格納領域に格納されるテーブル例を示す図。
【図４】実施例１のメモリ内の制御プログラム格納領域に格納されるプログラム例を示す図。
【図５】実施例１の記憶ドライブのデータ構成例を示す図。
【図６】実施例１のチャンクグループの構成例を示す図。
【図７】実施例１のチャンクグループ内のストライプの構成例を示す図。
【図８】実施例１の計算機システムの論理構成例を示す図。
【図９】実施例１の物理チャンク管理テーブルの構成例を示す図。
【図１０】実施例１の論理チャンク管理テーブルの構成例を示す図。
【図１１】実施例１のチャンクグループ管理テーブルの構成例を示す図。
【図１２】実施例１のドライブ管理テーブルの構成例を示す図。
【図１３】実施例１のノード管理テーブルの構成例を示す図。
【図１４】実施例１のFault  Set管理テーブルの構成例を示す図。
【図１５】実施例１のStorage-Pool管理テーブルの構成例を示す図。
【図１６】実施例１のＶＶＯＬ管理テーブルの構成例を示す図。
【図１７】実施例１のPool-Page管理テーブルの構成例を示す図。
【図１８】実施例１の割当数管理テーブルの構成例を示す図。
【図１９】実施例１のＭＡＮ管理テーブルの構成例を示す図。
【図２０】実施例１の障害耐性管理テーブルの構成例を示す図。
【図２１】実施例１のStorage-Pool容量増加処理の例を示すフローチャート。
【図２２】実施例１のチャンクグループ新規作成処理の例を示すフローチャート。
【図２３】実施例１の割当数変更時ネック部位更新処理の例を示すフローチャート。
【図２４】実施例１の割当数変更時他コンポーネントネック部位更新処理の例を示すフローチャート。
【図２５】実施例１のＭＡＮ更新処理の例を示すフローチャート。
【図２６】実施例１のＭＡＮ更新時ネック部位更新処理の例を示すフローチャート。
【図２７】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その１）。
【図２８】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その２）。
【図２９】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その３）。
【図３０】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その４）。
【図３１】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その５）。
【図３２】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その６）。
【図３３】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その７）。
【図３４】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その８）。
【図３５】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その９）。
【図３６】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その１０）。
【図３７】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その１１）。
【図３８】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その１２）。
【図３９】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その１３）。
【図４０】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その１４）。
【図４１】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その１５）。
【図４２】実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図（その１６）。
【図４３】実施例２のシステム内構成台数変更時のリバランス処理概念図。
【図４４】実施例２のメモリ内の制御プログラム格納領域に格納されるプログラム例を示す図。
【図４５】実施例２の増設後チャンクリバランス処理の例を示すフローチャート。
【図４６】実施例２の減設時チャンクリバランス処理の例を示すフローチャート。
【図４７】従来技術のストレージシステムにおいて、全てのコンポーネントで同一の保護レベル（障害耐性）が確保する構成例を示す図。
【発明を実施するための形態】
【００１５】
以下では、幾つかの実施例を、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲に係る発明を限定するものではなく、また実施例で説明されている諸要素及びその組合せの全てが発明の解決手段に必須であるとは限らない。
【００１６】
以下の説明では、「ａａａテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ａａａテーブル」を「ａａａ情報」と呼ぶこともできる。
【００１７】
また、プロセッサが実行する処理の一部又は全部は、ハードウェア回路により処理されてもよい。プロセッサが実行する処理を規定するプログラムは、例えば外部装置からネットワークを介して取得して、あるいは記憶メディアを介して取得して、プロセッサにより実行されるものとしてもよい。
【実施例１】
【００１８】
（計算機システムの構成）
図１は、実施例１の計算機システムの構成例を示す図である。図１は、実施例１の計算機システム１におけるプロテクションドメイン（Protection  Domain：以下「ＰＤ」と略記する場合がある）と、サイト（Site）と、フォルトセット（Fault  Set：以下「ＦＳ」と略記する場合がある）と、ノード（Node）との関連を示す。プロテクションドメイン、サイト、フォルトセット、ノード、及び後述するノード内の記憶ドライブ（Drive）のそれぞれは、コンポーネントと呼ばれる。
【００１９】
計算機システム１は、１つ以上のホスト１０と、１つ以上の管理サーバ２０と、ネットワーク３０と、複数のＦＳ４０（図１の例ではＦＳ＃００〜ＦＳ＃１３の８つのＦＳ４０）とを有する。
【００２０】
ホスト１０は、ホスト１０に接続されたクライアント端末（不図示）からファイルのＩ／Ｏ要求を受信し、Ｉ／Ｏ要求に基づいてノード１００へのアクセスを実現する。管理サーバ２０は、計算機システム１全体の運用を管理するためのものである。
【００２１】
ネットワーク３０は、公衆網、閉域網又は専用線網であり、ホスト１０とＦＳ４０の間、管理サーバ２０とＦＳ４０の間をそれぞれ通信可能に接続する。
【００２２】
図１のFS#00で例示するように、ＦＳ４０は、複数のノード１００（図１の例では２つのノード１００）を有する。ＦＳ４０は、例えば１つのラックに収容された電源及びネットワークスイッチを共有する複数のノード１００を束ねたノード１００の保守及び管理の単位である。同一のＦＳ４０内のコンポーネントは、単一の電源やネットワークスイッチの障害等により同時に影響を受ける。図１のFS#01〜FS#13についても、FS#00と同様である。
【００２３】
なお本実施例では１つのラックに１つのＦＳ４０が収容されるとするが、１つのラック内に複数のＦＳ４０が収容されていてもよい。
【００２４】
ノード１００は、例えば汎用サーバである。同一のノード１００内のコンポーネントは、単一のノード障害（ＣＰＵ故障、ポート障害等）により同時に影響を受ける。
【００２５】
ＰＤは、１つのＰＤ内のＩ／Ｏ、障害、保守動作等が、別のＰＤに影響を与えないように構築される、計算機システム１内でのＦＳ４０の管理単位である。図１に示す例では、計算機システム１は、PD#0及びPD#1を有する。PD#0は、４つのFS#00、FS#01、FS#02、及びFS#03で構築される。またPD#1は、４つのFS#10、FS#11、FS#12、及びFS#13で構築される。
【００２６】
Siteは、例えばデータセンタの単位であり、同一Site内のコンポーネントは、火災、地震などの局地的災害により同時に影響を受ける。図１に示す例では、計算機システム１は、Site#0及びSite#1を有する。Site#0は、４つのFS#00、FS#01、FS#10、及びFS#11で構築される。またSite#1は、４つのFS#02、FS#03、FS#12、及びFS#13で構築される。
【００２７】
なお図１は計算機システム１の構成の一例を示すに過ぎず、図１に示す構成及び各構成要素の数は本実施形態を実現するうえで必須ではない。例えばSiteのレイヤは存在しなくてもよい。また、ＦＳ４０とノード１００との間に、複数のノード１００を束ねた「Operation  Set」（保守単位）のようなレイヤがあってもよい。
【００２８】
またＰＤ間でのコンポーネントの重複配置が許容される。例えばPD#0がSite#1とSite#2から構成され、PD#2もSite#1とSite#2から構成されていてもよい。また例えば１つのＦＳがＰＤを跨って配置されてもよい。
【００２９】
ただし、一般的にＰＤは、単一コンポーネントの障害時に、他のコンポーネントに影響がないように構築されることが望ましい。例えばNode#1内にDrive#1及びDrive#2があり、Drive#1がPD#1に属し、Drive#2がPD#2に属するような構成は、Node#1の障害がPD#1及びPD#2の双方に影響を及ぼしてしまうので、望ましくない。
【００３０】
従って図１は、ＰＤ間でSiteのみがコンポーネントの重複を許容され、１つのＦＳが１つのＰＤ内に閉じて配置される例を示している。
【００３１】
（ＦＳのハードウェア構成）
図２は、実施例１のＦＳのハードウェア構成例を示す図である。ＦＳ４０は、図２に示すように、複数のノード１００と、ネットワークスイッチ１７０と、電源１８０とを有する。ＦＳ４０内のノード１００は、ネットワークスイッチ１７０や電源１８０等を共有するため、これらの障害が発生した場合にはＦＳ４０単位で障害が発生する。
【００３２】
ネットワークスイッチ１７０は、ネットワーク３０を介してノード１００をホスト１０及び管理サーバ２０と接続する。電源１８０は、複数のノード１００に電力を供給する。
【００３３】
各ノード１００は、ネットワーク３０を介してホスト１０に接続するためのポート１１０と、ネットワーク３０を介して管理サーバ２０に接続するための管理Ｉ／Ｆ１２０と、各種管理情報を格納するためのメモリ１４０と、データを格納するための記憶ドライブ１６０と、データやメモリ１４０内の管理情報を制御するためのプロセッサであるＣＰＵ（Central  Processing  Unit）１３０とを有し、これらが内部バス１５０を介して相互に接続される構成となっている。
【００３４】
メモリ１４０は、図３及び図４を参照して後述するように、ノード１００の各種制御情報を格納する制御情報格納領域１４１、及び、各種制御プログラムが格納される制御プログラム格納領域１４２を有する。またメモリ１４０は、キャッシュ領域を含む。キャッシュ領域は、ホスト１０から記憶ドライブ１６０等に書き込むデータ（ライトデータ）や、記憶ドライブ１６０から読み出したデータ（リードデータ）を一時的に格納する。
【００３５】
記憶ドライブ１６０は、１又は複数のドライブ装置（Drive）から構成されている。ドライブ装置は、磁気ディスクの記憶媒体を用いたＨＤＤ（Hard  Disk  Drive）やフラッシュメモリ等の記憶媒体を用いたＳＳＤ（Solid  State  Drive）等である。
【００３６】
ＣＰＵ１３０は、ノード１００内の制御を行うと共に、メモリ１４０に格納されているノード１００の各種制御情報を元に、メモリ１４０に格納された各種制御プログラムを実行して各種処理を実行する。またＣＰＵ１３０は、各種コマンドを記憶ドライブ１６０に送信すると共に、各種コマンドを他のノード１００に送信して他のノード１００のＣＰＵ１３０に所定の処理を行わせることができる。
【００３７】
（メモリ内の制御情報格納領域に格納されるテーブル）
図３は、実施例１のメモリ内の制御情報格納領域に格納されるテーブル例を示す図である。メモリ１４０内の制御情報格納領域１４１には、物理チャンク管理テーブル１００１と、論理チャンク管理テーブル１００２と、チャンクグループ管理テーブル１００３と、ドライブ管理テーブル１００４と、ノード管理テーブル１００５と、Fault  Set管理テーブル１００６とが格納される。また制御情報格納領域１４１には、Storage-Pool管理テーブル１００７と、ＶＶＯＬ（Virtual  Volume：仮想ボリューム）管理テーブル１００８と、Pool-Page管理テーブル１００９と、割当数管理テーブル１０１０と、ＭＡＮ（Max  Allocated  Number）管理テーブル１０１１と、障害耐性管理テーブル１０１２とが格納されている。これらのテーブルの詳細は後述する。
【００３８】
なお制御情報格納領域１４１に格納されているこれらのテーブルは、ノード１００の運用中はメモリ１４０上に展開されるが、ノード１００の起動時に読み込む必要があるため、停電などに備えて、ＳＳＤ等の不揮発な領域に常時格納しておく必要がある。ただし、割当数管理テーブル１０１０と、ＭＡＮ管理テーブル１０１１に関しては、ノード１００の電源ＯＦＦ時に揮発しても問題ない情報であるため、不揮発領域への格納は必須ではない。
【００３９】
（メモリ内の制御プログラム格納領域に格納されるプログラム）
図４は、実施例１のメモリ内の制御プログラム格納領域に格納されるプログラム例を示す図である。メモリ１４０内の制御プログラム格納領域１４１には、使用容量監視プログラム１１０１と、Storage-Pool容量増加プログラム１１０２と、障害耐性算出プログラム１１０３と、Ｉ／Ｏ処理プログラム１１０４とが格納されている。
【００４０】
計算機システム１が有する複数のノード１００のうち、所定のノード１００のＣＰＵ１３０がメインのＣＰＵとしてプログラムを実行し、その他のＣＰＵ１３０がメインのＣＰＵの指示により動作することにより、使用容量監視プログラム１１０１、Storage-Pool容量増加プログラム１１０２、障害耐性算出プログラム１１０３、及びＩ／Ｏ処理プログラム１１０４の各処理が行われる。
【００４１】
使用容量監視プログラム１１０１は、後述のStorage-Pool５０１（図８参照）の使用率（使用中容量）を監視するプログラムである。Storage-Pool容量増加プログラム１１０２は、Storage-Pool５０１の使用率が規定値を下回った場合に、Storage-Pool５０１の容量を増加させるプログラムである。
【００４２】
障害耐性算出プログラム１１０３は、計算機システム１のシステム構成や各コンポーネント（Site、ＦＳ、Node、及びDrive）の保護レベル等から、計算機システム１の障害耐性を算出するプログラムである。Ｉ／Ｏ処理プログラム１１０４は、ユーザによるホスト１０からのＩ／Ｏ要求に応じて、Read／Write処理を実行するプログラムである。
【００４３】
（記憶ドライブのデータ構成）
図５は、実施例１の記憶ドライブのデータ構成例を示す図である。記憶ドライブ１６０は、その物理領域が、複数の物理チャンク２０２に分割されている。物理チャンク２０２は、物理領域の管理単位であり、それぞれの容量が例えば数十ＧｉＢである。物理チャンク２０２は、データ用とパリティ用に分かれていてもよいし、１つの物理チャンク２０２にデータ及びパリティが混在していてもよい。
【００４４】
物理チャンク２０２は、本実施例における容量及びマッピングの管理単位である。例えば容量Ｖｄの記憶ドライブ１６０には、物理チャンクサイズＶｐの物理チャンク２０２が、floor（Ｖｄ／Ｖｐ）個だけ含まれる。“floor（＊）”は、小数点以下を切り捨てる床関数である。
【００４５】
さらに複数の物理チャンク２０２それぞれは、ストライプを構成するストライプブロック２０１と呼ばれる、例えば４ＫｉＢの単位に分割されている。さらにストライプブロック２０１は、Ｉ／Ｏ処理の最小単位に相当するサブブロック２００に分割されている。サブブロック２００のサイズは、Ｉ／Ｏコマンドが例えばＳＣＳＩ（Small  Computer  System  Interface）である場合には５１２ｂｙｔｅである。
【００４６】
（チャンクグループの構成）
図６は、実施例１のチャンクグループの構成例を示す図である。図６に示すように、チャンクグループ３００（３００ａ、３００ｂ１、３００ｂ２を総称して３００とする）は、複数の物理チャンク２０２から構成される。チャンクグループ３００は冗長性を有するデータセットの一例であり、物理チャンク２０２はデータセットを構成する各データ単位の一例である。
【００４７】
チャンクグループ３００は、保護方式（保護レベルがｍＤｎＰ）が、ミラーリング（１Ｄ１Ｄ）の場合は２つの物理チャンク２０２から構成され（チャンクグループ３００ａ参照）、２Ｄ１Ｐの場合は３つの物理チャンク２０２から構成され（チャンクグループ３００ｂ１参照）、３Ｄ１Ｐ又は２Ｄ２Ｐの場合は４つの物理チャンク２０２から構成される（チャンクグループ３００ｂ２参照）。単一のプロテクションドメイン内では、管理を単純化するために保護方式を統一してもよいし、異なる保護方式が混在していてもよい。
【００４８】
チャンクグループ３００を構成する各物理チャンク２０２は、コンポーネントの障害時に冗長度が一度に２以上低下することを防ぐため、それぞれ異なるドライブ、ノード、フォルトセット、サイト、プロテクションドメインに割り当てて配置されることが望ましい。ただし、ｍＤｎＰの保護方式に対して各コンポーネント数が（ｍ＋ｎ）個未満の場合は、同一コンポーネントから複数の物理チャンクが選択されてもよい。各物理チャンク２０２は、対応するドライブの種別に応じた性能特性を持つため、チャンクグループ３００を構成する物理チャンク２０２は、同一の速度特性を持つ物理チャンク２０２から選択されることが望ましい。
【００４９】
（チャンクグループ内のストライプ）
図７は、実施例１のチャンクグループ内のストライプの構成例を示す図である。上述のように、チャンクグループ３００は、複数の物理チャンク２０２で構成される。図７は、同一チャンクグループ３００に属する物理チャンク２０２を抽出したものであり、１つのチャンクグループ３００を構成する各物理チャンク２０２は、１以上のノード１００、１以上の記憶ドライブ１６０にバラバラに配置されている。
【００５０】
図７に示すように、物理チャンク２０２は、複数のストライプブロック２０１で構成される。ストライプ４００は、例えば保護方式が３Ｄ１Ｐである場合、４個のストライプブロック２０１で構成される。
【００５１】
データの更新を行う場合は、ストライプ４００単位で処理が行われる。例えば、図７に示すデータブロックＤ２−１が更新される場合は、物理チャンク２０２全体が更新されるのではなく、データブロックＤ２−１と、データブロックＤ２−１が含まれるストライプ４００内のパリティブロックＰ２とが更新される。
【００５２】
（計算機システム１の論理構成）
図８は、実施例１の計算機システム１の論理構成例を示す図である。論理チャンク５００は、データ領域及びパリティ領域から構成される物理チャンク２０２からデータ領域のみを抽出したものである。論理チャンク５００は、Storage-Pool５０１に提供される。そのため、Storage-Pool５０１の容量は、物理チャンク２０２のパリティ部分を除く容量と同一容量、即ちユーザが割り当て可能な容量となる。ただし、障害時の冗長度の回復用に使用するスペア領域等をStorage-Pool５０１の容量とは個別に管理するために、一部の物理チャンク２０２をStorage-Pool５０１に割り当てずに保持しておく構成であってもよいし、Storage-Pool５０１の容量枯渇時に柔軟に容量を増加させるために、一部の論理チャンク５００をStorage-Pool５０１に割り当てずに保持しておく構成であってもよい。なおStorage-Pool５０１は、プロテクションドメイン毎に１つ以上設けられる。
【００５３】
物理チャンク２０２がデータ領域のみ又はパリティ領域のみで構成されている場合は、データ領域の物理チャンク２０２を論理チャンク５００として扱う。
【００５４】
なお各Node内にNode内Poolを定義し、Node内の論理チャンク５００をNode内Poolに割り当て、Node内Poolから任意のサイズのボリュームを生成し、それをStorage-Pool５０１に割り当ててもよい。
【００５５】
論理チャンク５００は、論理チャンク５００を構成する物理チャンク２０２が属するデバイス種別（ＳＳＤやＨＤＤ等）に応じた性能特性を持つが、１つのStorage-Pool５０１は、単一の性能特性を持つ論理チャンク５００から構成されることが望ましい。
【００５６】
同様に論理チャンク５００は、論理チャンク５００を構成する物理チャンク２０２が属するチャンクグループ３００の保護方式に応じた性能特性を持つが、１つのStorage-Pool５０１は、単一の性能特性を持つ論理チャンク５００から構成されることが望ましい。
【００５７】
或いは、Storage-Pool５０１内を複数のパーティション（Tier）に分割し、物理チャンク２０２が属するデバイス種別が同一、又は、保護方式が同一のチャンクグループ３００を、単一のTier内に存在するデータブロックで構成するようにしてもよい。
【００５８】
Storage-Pool５０１内の１以上のサブブロックからPool-Page５０３が構成される。ＶＶＯＬ５０２は、管理サーバ２０からの指示により生成される。ＶＶＯＬ５０２のサイズは記憶ドライブ１６０の実際の総使用可能容量に依存しない。ホスト１０からのＩ／Ｏ要求に従って、ＶＶＯＬ５０２内の記憶領域（VVOL-Page５０４）に対して、Pool-Page５０３を動的に割り当てる。
【００５９】
（物理チャンク管理テーブルの構成）
図９は、実施例１の物理チャンク管理テーブルの構成例を示す図である。物理チャンク管理テーブル１００１は、記憶ドライブ１６０（Drive#カラム２０００）と物理チャンク２０２（Pchunk#カラム２００１）とチャンクグループ３００（ChunkGroup#カラム２００２）との関連を示すテーブルである。
【００６０】
ChunkGroup#カラム２００２には、Drive#カラム２０００及びPchunk#カラム２００１に格納されている各ＩＤに該当する記憶ドライブ１６０及び物理チャンク２０２がチャンクグループ３００に割り当てられている場合にはチャンクグループ３００のＩＤが格納される。一方、ChunkGroup#カラム２００２には、Drive#カラム２０００及びPchunk#カラム２００１に格納されている各ＩＤに該当する記憶ドライブ１６０及び物理チャンク２０２がチャンクグループ３００に割り当てられていない場合は“Not  Allocated”が格納される。
【００６１】
物理チャンク２０２のチャンクサイズは同一プロテクションドメイン内では固定値のため、各物理チャンク２０２が各記憶ドライブ１６０で先頭から何番目の物理チャンク２０２であるかを示すオフセット値が分かれば、記憶ドライブ１６０内で各物理チャンク２０２の開始ＬＢＡ（Logical  Block  Address）を一意に定めることができる。
【００６２】
（論理チャンク管理テーブルの構成）
図１０は、実施例１の論理チャンク管理テーブルの構成例を示す図である。論理チャンク管理テーブル１００２は、論理チャンク５００（Lchunk#カラム５００）と物理チャンク２０２（Pchunk#カラム２０２）との関連を示すテーブルである。
【００６３】
図１０は、論理チャンク５００（Lchunk＃カラム２０１０）が単一の物理チャンク２０２（Pchunk＃カラム２０１１）から構成されていることを、これらのＩＤの対応関係で示している。Allocated  Storage  Poolカラム２０１２には、論理チャンク５００が割り当てられているStorage-Pool５０１のＩＤが格納され、論理チャンク５００が何れのStorage-Pool５０１にも割り当てられていない場合は“Not  Allocated”が格納される。
【００６４】
Statusカラム２０１３には、論理チャンク５００のアクセス性能を示す次の各状態が格納される。“Normal”は、当該Lchunkを構成するPchunkが属するChunkGroupに障害が生じていないことを示す。“Correction”は、当該Lchunkを構成するPchunk、又は、当該Lchunkが属するChunkGroup内のPchunkに障害が発生しており、Correction  R/Wによる性能低下が発生している状態を示す。“Blocked”は、当該Lchunkを構成するPchunkが属するChunkGroupに冗長度以上の障害が発生し、データアクセスができない状態を示す。
【００６５】
（チャンクグループ管理テーブルの構成）
図１１は、実施例１のチャンクグループ管理テーブルの構成例を示す図である。チャンクグループ管理テーブル１００３は、ChunkGroup#カラム２０２０にＩＤが格納されるチャンクグループ３００の構成及び状態を示すテーブルである。ProtectionTypeカラム２０２１は、当該ChunkGroupの保護方式を示す。Pchunk#カラム２０２２ａ（Pchunk#1）、Pchunk#カラム２０２２ｂ（Pchunk#2）、Pchunk#カラム２０２２ｃ（Pchunk#3）、Pchunk#カラム２０２２ｄ（Pchunk#4）、Pchunk#カラム２０２２ｅ（Pchunk#5）にはそれぞれ、チャンクグループ３００を構成する各物理チャンク２０２のＩＤが格納される。本実施例では、チャンクグループ３００を構成する物理チャンク２０２の数は、最大５つである。
【００６６】
Statusカラム２０１３には、当該チャンクグループ３００の物理チャンク３０２の障害有無を示す次の各状態が格納される。“Normal”は、当該チャンクグループ３００に障害が発生している物理チャンク３０２がない状態を示す。“Caution”は、当該チャンクグループ３００に障害が発生している物理チャンク３０２があるが、冗長度が１以上確保されている状態を示す。“Critical”は、当該チャンクグループ３００に障害が発生している物理チャンク３０２があり、冗長度が０である状態を示す。“Blocked”は、当該チャンクグループ３００に障害が発生している物理チャンク３０２があり、かつ、データロストした状態を示す。チャンクグループ３００に障害が発生している物理チャンク３０２がある状態を“Caution”及び“Critical”の２段階に分けて示すことによって管理者に詳細な状態を通知することが可能となるが、“Caution”に統一してもよい。
【００６７】
なお各物理チャンク３０２がデータ又はパリティ等のデータ属性を持つ場合は、チャンクグループ管理テーブル１００３において当該物理チャンク３０２に当該属性情報を付与してもよい。
【００６８】
（ドライブ管理テーブルの構成）
図１２は、実施例１のドライブ管理テーブルの構成例を示す図である。ドライブ管理テーブル１００４は、記憶ドライブ１６０を構成するDriveとNodeの関連、構成、及び状態を示すテーブルである。Typeカラム２０３２には、Node#カラム２０３０及びDrive#カラム２０３１に格納されているＩＤのノード１００の記憶ドライブ１６０のドライブ種別（ＳＳＤ、ＳＡＳ−ＨＤＤ、ＳＡＴＡ−ＨＤＤ等）が格納されている。
【００６９】
Size（Block）カラム２０３３には、当該Node#カラム２０３０及びDrive#カラム２０３１に格納されているＩＤのノード１００の記憶ドライブ１６０の記憶容量が格納されている。Size（Block）カラム２０３３に格納される情報は、例えばBlock（512Byte）単位の場合、“0x020000000”（＝２５６ＧｉＢ）である。
【００７０】
Usageカラム２０３４には、当該Node#カラム２０３０及びDrive#カラム２０３１に格納されているＩＤのノード１００の記憶ドライブ１６０の記憶容量の使用率（使用中容量）が格納されている。
【００７１】
Statusカラム２０５３には、当該Node#カラム２０３０及びDrive#カラム２０３１に格納されているＩＤのノード１００の記憶ドライブ１６０の障害の有無を示す次の各状態が格納される。“Normal”は、当該記憶ドライブ１６０が正常な状態であることを示す。“Blocked”は、当該記憶ドライブ１６０に障害が発生しておりアクセスができない状態であることを示す。
【００７２】
（ノード管理テーブルの構成）
図１３は、実施例１のノード管理テーブルの構成例を示す図である。ノード管理テーブル１００５は、Fault  SetとNodeの関連を示すテーブルである。Size（Block）カラム２０４２には、当該Fault  Set#カラム２０４０及びNode#カラム２０４１に格納されているＩＤのＦＳ４０のノード１００内の全ての記憶ドライブ１６０の合計記憶容量が格納されている。Size（Block）カラム２０４２に格納される情報は、当該Fault  Set#カラム２０４０及びNode#カラム２０４１に格納されているＩＤのＦＳ４０のノード１００内の全ての記憶ドライブ１６０の合計記憶容量の使用率（使用中容量）である。
【００７３】
Statusカラム２０４４には、当該Fault  Set#カラム２０４０及びNode#カラム２０４１に格納されているＩＤのＦＳ４０のノード１００内の全ての記憶ドライブ１６０の障害の有無を示す次の各状態が格納される。“Normal”は、当該ノード１００内の記憶ドライブ１６０全てが正常な状態であることを示す。“Failure”は、当該ノード１００内の一部の記憶ドライブ１６０に障害が発生しているがノードとしてはアクセス可能な状態であることを示す。“Blocked”は、当該ノード１００内のＣＰＵ１００等、または当該ノード１００が属するＦＳ４０のネットワークスイッチ１７０や電源１８０に障害が発生しておりアクセス不可の状態であることを示す。
【００７４】
（Fault  Set管理テーブルの構成）
図１４は、実施例１のFault  Set管理テーブルの構成例を示す図である。Fault  Set管理テーブル１００６は、Protection  DomainとSiteとFault  Setとの関連を、各ＩＤを対応付けて示すテーブルである。一般的にＦＳ（Fault  Set）４０（例えばラック等）は計算機システム１の管理外であるため、状態管理は行わない（ラック障害時はラック内全ノードの障害として扱う）が、計算機システム１の管理下にある場合は状態管理を行ってもよい。
【００７５】
（Storage-Pool管理テーブルの構成）
図１５は、実施例１のStorage-Pool管理テーブルの構成例を示す図である。Storage-Pool管理テーブル１００７は、Storage-Pool５０１のサイズ（Size（Block））と使用率（Usage）と割り当てられた論理チャンク５００(Allocated  Lchunk)との関係を示すテーブルである。
【００７６】
Storage-Poolカラム２０６０には、当該Storage-Pool５０１のＩＤが格納される。Size（Block）カラム２０６１に格納される情報は、Block（例えば512Byte）単位で示す当該Storage-Pool５０１のサイズである。Usageカラム２０６２に格納される情報は、当該Storage-Pool５０１の記憶容量の使用率（使用中容量）である。Allocated  Lchunk#カラム２０６３に格納される情報は、当該Storage-Pool５０１に割り当てられている論理チャンク５００のＩＤである。
【００７７】
Storage-Pool５０１の使用率が一定値を上回った場合は、既定の物理チャンク２０２から作成された論理チャンク５００を当該Storage-Pool５０１に新規に割り当てることでStorage-Pool５０１の空き容量を増加させる。Storage-pool５０１は、単一の保護レベル及び同一性能の記憶ドライブ１６０から構成されることが望ましいが、Storage-Pool５０１をTierに分割して管理できる場合はこれらを混在させてもよい。
【００７８】
（ＶＶＯＬ管理テーブルの構成）
図１６は、ＶＶＯＬ管理テーブルの構成例を示す図である。ＶＶＯＬ管理テーブル１００８は、ＶＶＯＬ５０２の構成情報と、ＶＶＯＬ５０２に割り当てられたVVOL-Page５０４、及びVVOL-Page５０４とPool-Page５０３の関係を示すテーブルである。VVOL-Page５０４とPool-Page５０３の各サイズは計算機システム１で固定値であるが、オーバープロビジョニングされてもよい。
【００７９】
VVOL#カラム２０７０には、ＶＶＯＬ５０２のＩＤが格納される。Size（Block）カラム２０７１に格納される情報は、Block（例えば512Byte）単位で示す当該ＶＶＯＬ５０２のサイズである。VVOL-Page#カラム２０７２に格納される情報は、当該ＶＶＯＬ５０２上のVVOL-Page５０４のＩＤである。Pool-Page#カラム２０７３に格納される情報は、当該ＶＶＯＬ５０２上の当該VVOL-Page５０４に対応するPool-Page５０３のＩＤである。VVOL-Page５０４に対応するPool-Page５０３が割り当てられていない場合には、Pool-Page#カラム２０７３には“Not  Allocated”が格納される。
【００８０】
ＶＶＯＬ５０２がWrite要求を受領すると、要求されたＬＢＡに対応するVVOL-Page５０４に割り当てられたPool-Page５０３にデータが書き込まれる。初期状態ではVVOL-Page５０４にPool-Page５０３は割り当てられておらず（Not  Allocated）、Pool-Page５０４の空き容量が不足した場合にVVOL-Page５０４に適当なPool-Page５０３が新たに割り当てられる。
【００８１】
（Pool-Page管理テーブルの構成）
図１７は、実施例１のPool-Page管理テーブルの構成例を示す図である。Pool-Page管理テーブル１００９は、Pool-Page５０３の構成を管理するテーブルである。Pool-Page#カラム２０８０には、Pool-Page５０３のＩＤが格納される。Storage-Pool内開始LBAカラム２０８１には、Storage-Pool５０１内での当該Pool-Page５０３の開始ＬＢＡが格納される。Lchunk#カラム２０８２には、当該Pool-Page５０３に割り当てられている論理チャンク５００のＩＤが格納される。Lchunk内開始LBAカラム２０８３には、Storage-Pool内開始ＬＢＡで示されるStorage-Pool５０１内の領域が対応する論理チャンク５００内の領域を、論理チャンク５００内での開始ＬＢＡで示す情報が格納される。
【００８２】
Pool-Page５０３は、そのサイズが固定値であるため、Storage-Pool５０１内のどの領域に対応しているかを、Pool-Page５０３のＩＤ及びStorage-Pool５０１内での開始ＬＢＡの組で表すことができる。またPool-Page５０３が対応するStorage-Pool５０１の領域はどの論理チャンク５００（Lchunk）のどの領域に対応しているかを、論理チャンク５００のＩＤ及び論理チャンク５００内での開始ＬＢＡの組で表すことができる。
【００８３】
（データのＩ／Ｏ処理）
データのWrite処理フローは、次のようになる。先ずホスト１０は、VVOL#、VVOL内LBAを指定してWriteコマンドを発行する。次にＣＰＵ１３０は、当該ＶＶＯＬ５０２内領域に対応するVVOL-Page５０４を算出する。次にＣＰＵ１３０は、当該VVOL-Page５０４に対応するPool-Page５０３を算出する。次にＣＰＵ１３０は、当該Pool-Page５０３に対応する論理チャンク５００の領域を算出する。次にＣＰＵ１３０は、当該論理チャンク５００の領域に対応する物理チャンク２０２の領域を算出する。次にＣＰＵ１３０は、当該物理チャンク２０２の領域に対応する記憶ドライブ１６０内の領域を算出する。次にＣＰＵ１３０は、当該記憶ドライブ１６０内の領域に対して要求データを書き込む（Write）。データのReadも、Writeと同様である。
【００８４】
（割当数管理テーブルの構成）
図１８は、実施例１の割当数管理テーブルの構成例を示す図である。割当数管理テーブル１０１０は、Site、Fault  Set、Node、及びDriveそれぞれに割り当てられた物理チャンク２０２の割当数を管理する各テーブルがツリー状に展開されたテーブルである。図１８の例では、割当数管理テーブル１０１０は、ツリー上に展開されるテーブル２０９０−ａ０、テーブル２０９０−ｂ０、テーブル２０９０−ｃ０、テーブル２０９０−ｃ１、テーブル２０９０−ｄ０、及びテーブル２０９０−ｄ１を含む。図１８の例では、一部の図示を省略している。
【００８５】
なお割当数管理テーブル１０１０は、チャンクグループ３００の新規作成時（物理チャンク２０２の割当先選択時）にのみ使用し、チャンクグループ作成後は破棄してもよいため、不揮発化領域への格納は必須ではない。
【００８６】
テーブル２０９０−ａ０は、Site毎の物理チャンク２０２の割当数を管理する。テーブル２０９０−ａ０は、Site#0に５つの物理チャンク２０２が割り当てられていることを示している。またテーブル２０９０−ａ０は、Site#0への物理チャンク２０２の割当数のネックがSite#0の１つ下の階層のFault  Setの最大割当数ＭＡＮ（Fault  Set）であることを示している。ＭＡＮはMax  Allocated  Numberの略である。
【００８７】
テーブル２０９０−ｂ０は、Site#0のFault  Set毎の物理チャンク２０２の割当数を管理する。テーブル２０９０−ｂ０は、Fault  Set#0に２つの物理チャンク２０２が割り当てられており、Fault  Set#1に２つの物理チャンク２０２が割り当てられており、Fault  Set#2に１つの物理チャンク２０２が割り当てられていることを示している。
【００８８】
またテーブル２０９０−ｂ０は、Fault  Set#0への物理チャンク２０２の割当数がFault  Set#0の最大割当数ＭＡＮ（Fault  Set）＝２に達しており、ネック部位がFault  Set#0であることを示している。またテーブル２０９０−ｂ０は、Fault  Set#1の１つ下の階層の全てのNodeが最大割当数ＭＡＮ（Node）に達しており、この１つ下の階層のNodeがネック部位であることを示している。またテーブル２０９０−ｂ０は、Fault  Set#2の１つ下の階層の全てのNodeが最大割当数ＭＡＮ（Node）＝１に達しており、この１つ下の階層のNodeがネック部位であることを示している。
【００８９】
テーブル２０９０−ｃ０は、Fault  Set#0のNode毎の物理チャンク２０２の割当数を管理する。テーブル２０９０−ｃ０は、Node#0に１つの物理チャンク２０２が割り当てられており、Node#1に１つの物理チャンク２０２が割り当てられており、Node#2には物理チャンク２０２が割り当てられていないことを示している。
【００９０】
またテーブル２０９０−ｃ０は、Node#0への物理チャンク２０２の割当数のネックがNode#0の最大割当数ＭＡＮ（Node）＝１であることを示している。またテーブル２０９０−ｃ０は、Node#1への物理チャンク２０２の割当数のネックがNode#1の最大割当数ＭＡＮ（Node）＝１であることを示している。このためNode#0及びNode#1には、これ以上物理チャンク２０２を割り当てることができない。
【００９１】
例えばテーブル２０９０−ｄ０に示す例では、Node#0のDrive#0への物理チャンク２０２の割当数が１でネックがＭＡＮ（Drive）であり、Drive#1へは物理チャンク２０２が割り当てられておらずネックが設定されていないことから、ＭＡＮ（Node）＝１となっている。詳細は後述するが、このNode#0及びNode#1に新たに物理チャンク２０２を割り当てるためには、ＭＡＮ（Node）を増やす必要がある。
【００９２】
またテーブル２０９０−ｃ０は、Node#2へは物理チャンク２０２が割り当てられていないため、ネックが設定されていない。
【００９３】
テーブル２０９０−ｄ０は、Node#0のDrive毎の物理チャンク２０２の割当数を管理する。テーブル２０９０−ｄ０は、Drive#0に１つの物理チャンク２０２が割り当てられており、Node#1には物理チャンク２０２が割り当てられていないことを示している。
【００９４】
またテーブル２０９０−ｄ０は、Drive#0への物理チャンク２０２の割当数のネックがDrive#0の最大割当数ＭＡＮ（Drive）であることを示している。またテーブル２０９０−ｄ０は、Drive#1へは物理チャンク２０２が割り当てられていないため、ネックが設定されていない。
【００９５】
Fault  Set#1の１つ下の階層のNode毎の物理チャンク２０２の割当数及びネックを示すテーブル２０９０−ｃ１は、テーブル２０９０‐ｃ０と同様である。またFault  Set#1のNode#0の１つ下の階層のDrive毎の物理チャンク２０２の割当数及びネックを示すテーブル２０９０−ｄ１は、テーブル２０９０‐ｄ０と同様である。
【００９６】
（ＭＡＮ管理テーブルの構成）
図１９は、実施例１のＭＡＮ管理テーブルの構成例を示す図である。ＭＡＮ管理テーブル１０１１は、各コンポーネント（Site、Fault  Set、Node、Drive）のＭＡＮを管理している。ＭＡＮ管理テーブル１０１１は、チャンクグループ３００の新規作成時（物理チャンク２０２の割当先選択時）にのみ使用し、対象チャンクグループ作成後は破棄してもよいため、不揮発化領域への格納は必須ではない。
【００９７】
各コンポーネントは、あるチャンクグループ３００の新規作成時に、ＭＡＮ以上の物理チャンク２０２を同時に割り当てることができない。例えば、図１９の例では、あるFault  Set（即ちFault  Set内のNode及び当該Node内のDrive）には、チャンクグループ３００あたり最大２個までしか物理チャンク２０２を割り当てることができない。
【００９８】
ＭＡＮ管理テーブル１０１１内のComponentカラム２１００に示されるコンポーネントに対応するＭＡＮ２０１０の各値は、後述のＭＡＮ更新処理によって適宜インクリメントされる。
【００９９】
（障害耐性管理テーブルの構成）
図２０は、実施例１の障害耐性管理テーブルの構成例を示す図である。障害耐性管理テーブル１０１２は、各コンポーネント（Site、Fault  Set、Node、Drive）の現在の障害耐性をユーザに提示するために管理しているテーブルである。
【０１００】
例えば、図２０の例では、Nodeは任意の２つのNodeの同時障害までの耐性を有し、３つのNodeの同時障害時はデータロストが発生する可能性がある。一方でFault  Setは、任意の１つのFault  Setの障害までの耐性しか持たず、２つのFault  Setの同時障害時はデータロストが発生する可能性がある。
【０１０１】
ここでチャンクグループ３００の保護レベルをｘＤｙＰとした場合、コンポーネントＸの障害耐性は以下の式で算出される。
【０１０２】
コンポーネントＸの障害耐性＝floor(ｙ／ＭＡＮ（Ｘ）)・・・（１）
【０１０３】
または、計算機システム１内の構成が完全に均等（例えば各Fault  Setは全て３つのNodeで構成され、各Nodeは全て８つのDriveで構成されている等）な理想構成であれば、コンポーネントＸの障害耐性は以下の式で算出される。
【０１０４】
コンポーネントＸの障害耐性＝floor（ｙ／ceiling（（ｘ＋ｙ）／Ｎ））・・・（２）
【０１０５】
ただし、floor（＊）は床関数（小数点以下切り捨て）、ceiling（＊）は天井関数（小数点以下切り上げ）、Ｎは計算機システム１内のコンポーネントＸの全個数である。
【０１０６】
障害耐性管理テーブル１０１２は、チャンクグループ３００の作成完了時（ＭＡＮ管理テーブル１０１１を削除する直前）に現在のＭＡＮを用いて更新してもよいし、計算機システム１内のComponentの構成台数から定めてもよい（この場合はComponentの増設及び減設の契機で更新される）。
【０１０７】
コンポーネントＸがユーザ指定の障害耐性を満たさない場合（例えば本実施例ではFault  Set耐性を２以上持たせたい場合等）は、障害耐性管理テーブル１０１２の計算時に、ユーザにアラートを上げ、Fault  Set数やNode数を増やすなどの対策を促してもよい。
【０１０８】
また障害耐性管理テーブル１０１２は、計算機システム１で一意でなくてもよい。例えば、Protection-Domain毎に別ポリシーの障害耐性管理テーブル１０１２が設定されていてもよい。
【０１０９】
（Storage-Pool容量増加処理）
図２１は、実施例１のStorage-Pool容量増加処理の例を示すフローチャートである。以下では、チャンクグループ３００を作成する契機で、当該チャンクグループに対応する論理チャンク５００を全て作成し、Storage-Pool５０１への論理チャンク５００の追加は任意の契機で実行可能であることを前提とする。各ノード１００において、Ｉ／Ｏ処理プログラム１１０４のＩ／Ｏ処理の実行と共に、Storage-Pool５０１の使用率が上がっていく。Storage-Pool容量増加プログラム１１０２は、Ｉ／Ｏ処理の都度、あるいは一定周期に使用容量監視プログラム１１０１によりStorage-Pool５０１の使用率の閾値超過が検出されたことを契機として各ノード１００のＣＰＵ１３０により実行される。
【０１１０】
先ずＣＰＵ１３０は、Storage-Pool５０１の使用率が閾値を超過したかを判定する（ステップＳ３００１）。当該閾値は、システムによって一意に定められた値であってもよいし、管理者によって指定された値であってもよい。ＣＰＵ１３０は、Storage-Pool５０１の使用率が閾値を超過した場合（ステップＳ３００１：ＹＥＳ）、未割当の論理チャンク５００が有るかを判定する（ステップＳ３００２）一方、Storage-Pool５０１の使用率が閾値を超過していない場合（ステップＳ３００１：ＮＯ）、ステップＳ３００７に処理を移す。
【０１１１】
ＣＰＵ１３０は、作成済かつ未割当の論理チャンク５００が有る場合（ステップＳ３００２：ＹＥＳ）、未割当の論理チャンク５００をStorage-Pool５０１に割り当てる（ステップＳ３００３）一方、未割当の論理チャンク５００がない場合（ステップＳ３００２：ＮＯ）、未割当の論理チャンク５００を作成するためチャンクグループ新規作成処理を実行する（ステップＳ３００４）。
【０１１２】
ここで新規作成するチャンクグループ３００は、Storage-Pool毎に設定された保護レベルに沿ったものであってもよいし、ユーザによって指示されたものであってもよい。例えば空き領域が十分に存在する場合は応答性能が高い３Ｄ１Ｐ、空き領域が一定値未満の場合は容量効率が良い７Ｄ１Ｐ、障害発生頻度が高い場合は冗長度があり信頼性が高い４Ｄ２Ｐのチャンクグループ３００を作成する。チャンクグループ新規作成処理の詳細は、図２２を参照して後述する。
【０１１３】
ＣＰＵ１３０は、ステップＳ３００３が終了すると、ステップＳ３００１に処理を戻す。またＣＰＵ１３０は、ステップＳ３００４が終了すると、新規作成処理は成功したかを判定する（ステップＳ３００５）。
【０１１４】
ＣＰＵ１３０は、新規作成処理は成功した場合（ステップＳ３００５：ＹＥＳ）、ステップＳ３００２に処理を戻す一方、新規作成処理は成功しなかった場合（ステップＳ３００５：ＮＯ）、容量拡張失敗（ＮＧ）を応答する（ステップＳ３００６）。例えば管理サーバ２０は、ＣＰＵ１３０から容量拡張失敗（ＮＧ）を応答されると、Node又はDriveの増設等により空き容量を増加させる必要があることを管理者に通知する。
【０１１５】
他方ステップＳ３００７では、ＣＰＵ１３０は、容量拡張成功（ＯＫ）（正常終了）を応答する。当該応答には、Storage-Pool５０１の使用率が閾値を超過しておらず、容量拡張が不要である場合も含む。ステップＳ３００６又はステップＳ３００７が終了すると、ＣＰＵ１３０は、Storage-Pool容量増加処理を終了する。
【０１１６】
（チャンクグループ新規作成処理）
図２２は、実施例１のチャンクグループ新規作成処理の例を示すフローチャートである。図２２は、図２１のステップＳ３００４の詳細を示すサブルーチンである。チャンクグループ新規作成処理は、チャンクグループ３００を新規作成する際に、当該チャンクグループ３００を構成する規定数の物理チャンク２０２を選択する処理である。チャンクグループ新規作成処理で示すＭＡＮ（Maximum  Allocatable  Number：最大割当可能数）は、例えばＭＡＮ（Node）＝２なら、１つのチャンクグループ３００あたり、同一Nodeに２個までの物理チャンク２０２を割り当て可能である。
【０１１７】
先ずＣＰＵ１３０は、作成するチャンクグループ３００の保護レベルを取得する（ステップＳ３１０１）。例えばステップＳ３１０１では、ＣＰＵ１３０は、作成するチャンクグループ３００の保護レベルが３Ｄ１Ｐであれば４個の物理チャンク２０２を割り当てることを認識する。
【０１１８】
次にＣＰＵ１３０は、物理チャンクサイズ、割り当てる物理チャンク数、当該ノード内の未使用容量から、この時点で新規チャンクグループ作成可能な空き容量、即ちステップＳ３１０１で取得した必要物理チャンク数分の未割当（Not  Allocated）の物理チャンク２０２が存在するかを確認する（ステップＳ３１０２）。ＣＰＵ１３０は、新規チャンクグループ作成可能な空き容量が存在する場合（ステップＳ３１０２：ＹＥＳ）、ステップＳ３１０３に処理を移し、存在しない場合（ステップＳ３１０２：ＮＯ）、ステップＳ３１１２に処理を移す。
【０１１９】
ステップＳ３１０３では、ＣＰＵ１３０は、ネック部位未設定のSite、Fault  Set、Node、及びDriveが各１つずつ以上存在するかを判定する。ネック部位未設定のSite、Fault  Set、Node、及びDriveが各１つずつ以上存在する場合（ステップＳ３１０３：ＹＥＳ）、現時点で物理チャンク２０２の割り当てが可能であるので、ＣＰＵ１３０は、ネック部位未設定のSite、Fault  Set、Node、及びDriveに物理チャンク２０２を新規に割り当てる（ステップＳ３１０４）。
【０１２０】
ステップＳ３１０４の物理チャンク２０２の新規割り当てでは、例えば以下のような方法で割り当て先を選択する。
（１）ネック部位が設定されておらず、かつ障害状態でないSiteの中で、空き容量が最も多いSiteを選択する。
（２）選択されたSite内に存在し、かつネック部位が設定されておらず、かつ障害状態でないFault  Setの中で、空き容量が最も多いFault  Setを選択する。
（３）選択されたFault  Set内に存在し、かつネック部位が設定されておらず、かつ障害状態でないNodeの中で、空き容量が最も多いNodeを選択する。
（４）選択されたNode内に存在し、かつネック部位が設定されておらず、かつ障害状態でないDriveの中で、空き容量が最も多いDriveを選択する。
【０１２１】
ステップＳ３１０４に続き、ステップＳ３１０５では、ＣＰＵ１３０は、ステップＳ３１０４の処理結果で割当数管理テーブル１０１を更新する。次にＣＰＵ１３０は、物理チャンク２０２の割り当てを増やしたときにはネック部位を更新する必要があるため、割当数変更時ネック部位更新処理を実行する（ステップＳ３１０６）。割当数変更時ネック部位更新処理の詳細は、図２３を参照して後述する。割当数変更時ネック部位更新処理が終了すると、ＣＰＵ１３０は、ステップＳ３１０９に処理を移す。
【０１２２】
一方ネック部位未設定のSite、Fault  Set、Node、及びDriveが各１つずつ以上存在しない場合（ステップＳ３１０３：ＮＯ）、ＭＡＮ更新処理を実行する（ステップＳ３１０７）。ＭＡＮ更新処理の詳細は、図２５を参照して後述する。
【０１２３】
次にＣＰＵ１３０は、ＭＡＮを増やしたときにはネック部位を更新する必要があるため、ＭＡＮ更新時ネック部位更新処理を実行する（ステップＳ３１０８）。ＭＡＮ更新時ネック部位更新処理の詳細は、図２６を参照して後述する。ＭＡＮ更新時ネック部位更新処理が終了すると、ＣＰＵ１３０は、ステップＳ３１０３に処理を移す。
【０１２４】
ステップＳ３１０６に続き、ステップＳ３１０９では、ＣＰＵ１３０は、ステップＳ３１０１で取得した必要物理チャンク数分の物理チャンク２０２の割当先が決定したかを判定する。規定数の物理チャンク２０２の割当先が選択済みの場合（ステップＳ３１０９：ＹＥＳ）、ＣＰＵ１３０は、障害耐性がユーザの設定した基準を満たしているかを、障害耐性管理テーブル１０１２を用いて判定する（ステップＳ３１１０）。一方規定数の物理チャンク２０２の割当先を選択していない場合（ステップＳ３１０９：ＮＯ）、ＣＰＵ１３０は、ステップＳ３１０３に処理を戻す。
【０１２５】
障害耐性が基準を満たす場合（ステップＳ３１１０：ＹＥＳ）、ＣＰＵ１３０は、物理チャンク管理テーブル１００１、論理チャンク管理テーブル１００２、チャンクグループ管理テーブル１００３を更新する（ステップＳ３１１１）。これにより、障害耐性が基準を満たすことを確認した上でチャンクグループ３００の各物理チャンク２０２を割り当てることができる。またＣＰＵ１３０による障害耐性が基準を満たす応答に応じて、管理サーバ２０は、システムのコンポーネント構成及び障害耐性と共にチャンクグループ３００の新規作成可をユーザに提示することで、ユーザは障害耐性及びチャンクグループ３００の新規作成可を認識することができる。
【０１２６】
一方障害耐性が基準を満たしていない場合（ステップＳ３１１０：ＮＯ）、ＣＰＵ１３０は、新規作成不可を応答する（ステップＳ３１１２）。ＣＰＵ１３０による障害耐性が基準を満たさない応答に応じて、管理サーバ２０は、システムのコンポーネント構成及び障害耐性と共にチャンクグループ３００の新規作成不可をユーザに提示する。この際、増設する必要があるコンポーネントを示して増設を促してもよい。
【０１２７】
ステップＳ３１１２では、例えば障害耐性が基準を満たしていない場合でも、作成可能とするオプションがあってもよい。この場合は例えば障害耐性を満たしていないことをユーザに通知した上で、チャンクグループを作成すればよい。ステップＳ３１１１又はステップＳ３１１２が終了すると、ＣＰＵ１３０は、チャンクグループ新規作成処理を終了する。
【０１２８】
（割当数変更時ネック部位更新処理）
図２３は、実施例１の割当数変更時ネック部位更新処理の例を示すフローチャートである。図２３は、図２２のステップＳ３１０６の詳細を示すサブルーチンである。割当数変更時ネック部位更新処理では、物理チャンク２０２を、新規作成するチャンクグループ３００の一構成要素としてある領域に割り当てた場合に発生する、当該割り当てにより自コンポーネントに対してネック化するコンポーネント要素を更新する。
【０１２９】
割当数変更時ネック部位更新処理の説明において、「コンポーネント」とは、DriveやNode等の種別そのものを示す（コンポーネントは大文字のラテン文字で記す）。一方「コンポーネント要素」とは、コンポーネントのうちの任意の１要素、例えばある単体のDriveを示す。あるコンポーネントＸ内の要素は「コンポーネントＸ要素」とも呼ぶ（コンポーネント要素は小文字のラテン文字で記す）。
【０１３０】
またコンポーネントの上位／下位の概念について、コンポーネントＡが１以上のコンポーネントＢを包含する場合、「コンポーネントＡはコンポーネントＢの上位コンポーネント」と定義する。本実施例では、各コンポーネントは、Site⊇Fault  set⊇Node⊇Driveの包含関係にあるため、例えばSiteはFault  Setの上位コンポーネントであり、DriveはNodeの下位コンポーネントである。
【０１３１】
先ずＣＰＵ１３０は、割当先情報（Site／Fault  Set／Node／Drive）を取得する（ステップＳ３２０１）。次にＣＰＵ１３０は、ステップＳ３２０１で取得したSite/Fault  Set/Node/Driveの割当先情報のうち、割当数未更新のコンポーネントＸを選択する（ステップＳ３２０２）。
【０１３２】
次にＣＰＵ１３０は、コンポーネントＸの割当対象コンポーネント要素ａの割当数がＭＡＮ（Ｘ）に一致したかを判定する（ステップＳ３２０３）。即ち物理チャンク２０２の割当時には、Site／Fault  Set／Node／Driveの各コンポーネントのうち、それぞれ１つのコンポーネント要素ａの割当数が変更（＋１）されるので、この割り当てにより、各対象コンポーネント要素ａが新規割り当てを阻害するネック部位になったか（ＭＡＮ（Ｘ）に達したか）をチェックする。
【０１３３】
コンポーネントＸの割当対象コンポーネント要素ａの割当数がＭＡＮ（Ｘ）に一致した場合（ステップＳ３２０３：ＹＥＳ）、ＣＰＵ１３０は、コンポーネントＸの割当対象コンポーネント要素ａをＭＡＮ（Ｘ）ネックに設定する（ステップＳ３２０４）。コンポーネントＸの割当対象コンポーネント要素ａの割当数がＭＡＮ（Ｘ）に一致しない場合（ステップＳ３２０３：ＮＯ）、ＣＰＵ１３０は、ステップＳ３２０５に処理を移す。
【０１３４】
ステップＳ３２０３又はステップＳ３２０４に続き、ステップＳ３２０５では、ＣＰＵ１３０は、全コンポーネント更新済みかを判定する。ＣＰＵ１３０は、全コンポーネント更新済みの場合（ステップＳ３２０５：ＹＥＳ）、ステップＳ３２０６に処理を移し、全コンポーネント更新済みでない場合（ステップＳ３２０５：ＮＯ）、ステップＳ３２０２に処理を移す。
【０１３５】
ステップＳ３２０６では、ＣＰＵ１３０は、割当数変更時他コンポーネントネック部位更新処理を実行する。割当数変更時他コンポーネントネック部位更新処理は、ネック部位が変更された場合に新たにネック化した可能性があるその上位のコンポーネントをチェックする処理である。例えばあるNode配下のDriveが全てＭＡＮ（Drive）ネックになった場合、当該Nodeの割当数がＭＡＮ（Node）に達していなくとも、当該Nodeに割り当てることはできなくなるので、当該NodeにＭＡＮ（Drive）ネックを設定する必要がある。割当数変更時他コンポーネントネック部位更図２新処理の詳細は、図２４を参照して後述する。ステップＳ３２０６が終了すると、ＣＰＵ１３０は、割当数変更時ネック部位更新処理を終了する。
【０１３６】
（割当数変更時他コンポーネントネック部位更新処理）
図２４は、実施例１の割当数変更時他コンポーネントネック部位更新処理の例を示すフローチャートである。図２４は、図２３のステップＳ３２０６の詳細を示すサブルーチンである。
【０１３７】
先ずＣＰＵ１３０は、割当先情報（Site／Fault  Set／Node／Drive）を取得する（ステップＳ３３０１）。割当数変更時他コンポーネントネック部位更新処理は、下位のコンポーネントから順に実施する必要がある。
【０１３８】
次にＣＰＵ１３０は、Site／Fault  Set／Node／Driveのうち上位ネック部更新未判定かつ最下位のコンポーネントＸを選択する（ステップＳ３３０２）。次にＣＰＵ１３０は、ステップＳ３３０２で選択したコンポーネントＸに下位コンポーネントが存在するかを判定する（ステップＳ３３０３）。但し最下位コンポーネント（例えばDrive）の場合は、自身より下位のコンポーネントのネック部位が変更されたことによる影響を受けないため、ステップＳ３３０３では選択されない。
【０１３９】
ステップＳ３３０２で選択したコンポーネントＸに下位コンポーネントが存在する場合（ステップＳ３３０３：ＹＥＳ）、ＣＰＵ１３０は、コンポーネントＸの対象コンポーネント要素ａの配下の全下位コンポーネントＹ要素に１つ以上のＭＡＮ（Ｙ）又はＭＡＮ（Ｚ）（ＺはＹより下位のコンポーネント）が設定されているかを判定する（ステップＳ３３０４）。一方ステップＳ３３０２で選択したコンポーネントＸに下位コンポーネントが存在しない場合（ステップＳ３３０３：ＮＯ）、ＣＰＵ１３０は、ステップＳ３３０６に処理を移す。
【０１４０】
コンポーネントＸの対象コンポーネント要素ａの配下の全下位コンポーネントＹ要素に１つ以上のＭＡＮ（Ｙ）と、ＭＡＮ（Ｚ）（ＺはＹより下位のコンポーネント）が設定されている（ステップＳ３３０４：ＹＥＳ）場合、対象コンポーネント要素ａをＭＡＮ（Ｙ）ネックに更新する（ステップＳ３３０５）。
【０１４１】
例えばあるFault  Set（対象コンポーネント要素ａ）に物理チャンク２０２を割り当てたとき、Fault  Set（対象コンポーネント要素ａ）の配下（下位コンポーネント）の全Nodeに、１つ以上のＭＡＮ（Node）又はＭＡＮ（Drive）が設定されている場合に、Fault  Set（対象コンポーネント要素ａ）にＭＡＮ（Node）ネックを設定する。ここで仮に各Nodeが全てＭＡＮ（Drive）であった場合は、Fault  Set（対象コンポーネント要素ａ）にＭＡＮ（Drive）ネックを設定する。
【０１４２】
次にＣＰＵ１３０は、全コンポーネント判定済みかを判定し（ステップＳ３３０６）、全コンポーネント判定済みの場合（ステップＳ３３０６：ＹＥＳ）、割当数変更時他コンポーネントネック部位更新処理を終了し、全コンポーネント判定済みでない場合（ステップＳ３３０６：ＮＯ）、ステップＳ３３０２に処理を移す。
【０１４３】
（ＭＡＮ更新処理）
図２５は、実施例１のＭＡＮ更新処理の例を示すフローチャートである。図２５は、図２１のステップＳ３１０７の詳細を示すサブルーチンである。ＭＡＮ更新処理は、現在の割当状態及びＭＡＮでは割り当てができない場合、ＭＡＮを増やすことで対応する処理である。
【０１４４】
ここではある１つのコンポーネントのＭＡＮのみ更新するが、チャンクグループ新規作成処理（図２２参照）に示すように、１つのＭＡＮを更新しただけで割り当て可能になるとは限らない。以下、ネック対象コンポーネントをＡとし、ネック原因コンポーネントをＢとする。
【０１４５】
先ずＣＰＵ１３０は、ネック対象コンポーネント（Ａ）として、最上位コンポーネントを選択する（ステップＳ３４０１）。ステップＳ３４０１は、上位コンポーネントから優先的にＭＡＮを増加させていくため、最上位コンポーネント（Site）からチェック開始する。
【０１４６】
次にＣＰＵ１３０は、ネック対象コンポーネントＡ内にネック部位が設定されていないコンポーネント要素が存在するかを判定する（ステップＳ３４０２）。ネック対象コンポーネントＡ内にネック部位が設定されていないコンポーネント要素が存在する場合（ステップＳ３４０２：ＹＥＳ）、ネック対象コンポーネントＡを、現在のネック対象コンポーネントＡの次の上位コンポーネントに更新する（ステップＳ３４０３）。
【０１４７】
一方ネック対象コンポーネントＡ内にネック部位が設定されていないコンポーネント要素が存在しない場合（ステップＳ３４０２：ＮＯ）、ステップＳ３４０６に処理を移す。ステップＳ３４０６では、ＣＰＵ１３０は、ネック原因コンポーネント（Ｂ）として、選択されたネック対象コンポーネント（Ａ）を選択する。即ち全コンポーネント要素に何かのネック部位が設定されているコンポーネント（Ａ）が存在する場合に、コンポーネント（Ａ）に設定されているネック部位はどのコンポーネント（Ｂ）のものかをチェックする。
【０１４８】
ステップＳ３４０３に続きステップＳ３４０４では、ＣＰＵ１３０は、ネック対象コンポーネントＡは最下位コンポーネントかを判定する。ネック対象コンポーネントＡは最下位コンポーネントである場合（ステップＳ３４０４：ＹＥＳ）、ＣＰＵ１３０は、ＭＡＮ（Ａ）をインクリメントする（ステップＳ３４０５）。最下位コンポーネント（Drive）に到達した時点で、更新すべきＭＡＮはＭＡＮ（Drive）であることが確定するため、ＭＡＮ（Ａ）＝ＭＡＮ（Drive）を更新する。ステップＳ３４０５が終了すると、ＣＰＵ１３０は、ステップＳ３４１１に処理を移す。
【０１４９】
ステップＳ３４０６に続き、ＣＰＵ１３０は、Ａ内にネック部位にＭＡＮ（Ｂ）が設定されているコンポーネント要素が存在しないかを判定する（ステップＳ３４０７）。Ａ内にネック部位にＭＡＮ（Ｂ）が設定されているコンポーネント要素が存在しない場合（ステップＳ３４０７：ＹＥＳ）、ＣＰＵ１３０は、Ｂを現在のＢの次の上位コンポーネントに更新する（ステップＳ３４０８）。一方Ａ内にネック部位にＭＡＮ（Ｂ）が設定されているコンポーネント要素が存在する場合（ステップＳ３４０７：ＮＯ）、ＣＰＵ１３０は、ステップＳ３４１０に処理を移す。
【０１５０】
ステップＳ３４０８に続きステップＳ３４０９では、ＣＰＵ１３０は、Ｂは最下位コンポーネントかを判定する。ＣＰＵ１３０は、Ｂは最下位コンポーネントである場合（ステップＳ３４０９：ＹＥＳ）、ステップＳ３４１０に処理を移し、Ｂは最下位コンポーネントでない場合（ステップＳ３４０９：ＮＯ）、ステップＳ３４０７に処理を移す。
【０１５１】
ステップＳ３４１０では、ＣＰＵ１３０は、ＭＡＮ（Ｂ）をインクリメントする。ステップＳ３４１０が終了すると、ＣＰＵ１３０は、ステップＳ３４１１に処理を移す。ステップＳ３４１１では、ＣＰＵ１３０は、更新されたＭＡＮを出力する。ステップＳ３４１１が終了すると、ＣＰＵ１３０は、ＭＡＮ更新処理を終了する。
【０１５２】
例えばネック対象コンポーネントＡがFault  Set（全Fault  Setに何らかのネック部位が設定されている）だったとして、ＭＡＮ（Fault  Set）が設定されているFault  Setが存在する場合、ＭＡＮ（Fault  Set）を更新する。さらにＭＡＮ（Fault  Set）が設定されているFault  Setが存在しない場合であって、ＭＡＮ（Node）が設定されているFault  Setが存在するときＭＡＮ（Node）を更新（増加）し、ＭＡＮ（Node）が設定されているFault  Setが存在しないときＭＡＮ（Drive）を更新（増加）する。
【０１５３】
（ＭＡＮ更新時ネック部位更新処理）
図２６は、実施例１のＭＡＮ更新時ネック部位更新処理の例を示すフローチャートである。図２６は、図２２のステップＳ３１０８の詳細を示すサブルーチンである。ＭＡＮ更新時ネック部位更新処理は、ＭＡＮを更新することにより、ネック部位が更新される（ネックが外れる又は別コンポーネントのネック変更される）コンポーネント要素があるはずなので、これをチェックし更新する処理である。
【０１５４】
先ずＣＰＵ１３０は、更新したＭＡＮ（Ｘ）を取得する（ステップＳ３５０１）。次にＣＰＵ１３０は、ステップＳ３５０１で取得したＭＡＮ（Ｘ）についてＭＡＮ（Ｘ）ネックが設定されているコンポーネント要素が存在するかを判定する（ステップＳ３５０２）。ＣＰＵ１３０は、ステップＳ３５０１で取得したＭＡＮ（Ｘ）についてＭＡＮ（Ｘ）ネックが設定されているコンポーネント要素が存在する場合（ステップＳ３５０２：ＹＥＳ）、ネック部位にＭＡＮ（Ｘ）が設定されているコンポーネントＷ要素ａを選択する（ステップＳ３５０３）一方、ＭＡＮ（Ｘ）ネックが設定されているコンポーネント要素が存在しない場合（ステップＳ３５０２：ＮＯ）、ＭＡＮ更新時ネック部位更新処理を終了する。ステップＳ３５０２は、後述のステップＳ３５０５又はステップＳ３５０７により更新したＭＡＮ（Ｘ）がネック部位に設定されているものがなくなれば判定結果がＮＯとなり、ＭＡＮ更新時ネック部位更新処理は終了する。
【０１５５】
以下、更新されたコンポーネント（Ｘ）がFault  Setである場合（ＭＡＮ（Fault  Set）が更新された場合）を例とする。
【０１５６】
次にＣＰＵ１３０は、ステップＳ３５０３で選択したコンポーネントＷはコンポーネントＸかを判定する（ステップＳ３５０４）。ステップＳ３５０３で選択したコンポーネントＷはコンポーネントＸである場合（ステップＳ３５０４：ＹＥＳ）、コンポーネントＷ要素ａのネック部位を削除する（ステップＳ３５０５）。即ちFault  Set（Ｗ）内にＭＡＮ（Fault  Set）ネックが設定されているコンポーネントＷ要素ａがある場合、つまりFault  Set（ａ）にＭＡＮ（Fault  Set）ネックが設定されている場合、設定されたFault  Setのネック部位を外す。
【０１５７】
ここで、あるFault  SetにＭＡＮ（Fault  Set）ネックが設定されているとはつまり当該Fault  Set配下にネックが設定されていないNodeが１つ以上存在することであるため、この場合は単純にネック部位を削除するだけでよい。ステップＳ３５０５が終了すると、ＣＰＵ１３０は、ステップＳ３５０２に処理を戻す。
【０１５８】
一方ステップＳ３５０３で選択したコンポーネントＷはコンポーネントＸでない場合（ステップＳ３５０４：ＮＯ）、ＣＰＵ１３０は、コンポーネントＷ要素ａの割当数がＭＡＮ（Ｗ）に一致するかを判定する（ステップＳ３５０６）。コンポーネントＷ要素ａの割当数がＭＡＮ（Ｗ）に一致する場合（ステップＳ３５０６：ＹＥＳ）、ＣＰＵ１３０は、コンポーネントＷ要素ａをＭＡＮ（Ｗ）ネックに更新する（ステップＳ３５０７）。
【０１５９】
即ちSite（Ｗ）内にＭＡＮ（Fault  Set）ネックが設定されているコンポーネントＷ要素ａがある場合、つまりいずれかのSite（ａ）にＭＡＮ（Fault  Set)ネックが設定されている場合、先ずSite（ａ）の割当数がＭＡＮ(Site)に一致するかをチェックする（ＭＡＮ（Fault  Set）に隠れてＭＡＮ（Site）ネックでもある可能性もあるため）。そしてSite（ａ）がＭＡＮ（Site）ネックだった場合は、Site（ａ）をＭＡＮ（Fault  Set）ネックからＭＡＮ（Site）ネックに更新する。これによりネック部位となっている原因が自コンポーネントであるか、その下位のコンポーネントであるかを認識できる。
【０１６０】
コンポーネントＷ要素ａの割当数がＭＡＮ（Ｗ）に一致しない場合（ステップＳ３５０６：ＮＯ）、ステップＳ３５０５に処理を移す。ステップＳ３５０５又はステップＳ３５０７が終了すると、ＣＰＵ１３０は、ステップＳ３５０２に処理を戻す。
【０１６１】
（物理チャンクの割り当て処理に伴う割当数管理テーブルの変化）
図２７〜図４２は、実施例１の物理チャンクの割り当て処理に伴う割当数管理テーブル及びＭＡＮ管理テーブルの状態遷移例を説明するための図である。以下、図２７〜図４２を参照して、図２２に示すチャンクグループ新規作成処理により、Site#0において物理チャンクがドライブに割り当てられる度に、割当数管理テーブル１０１０（図１８参照）及びＭＡＮ管理テーブル１０１１（図１９参照）がどのように変化するかを説明する。
【０１６２】
以下では、Protection  Domain#0は１つのSite#0を有し、Site#0はFS#0、FS#1、及びFS#2の３つのFault  Setを有し、FS#0はNode#0-0、Node#0-1、及びNode#0-2の３つのNodeを有し、FS#1はNode#1-0及びNode#1-1の２つのNodeを有し、FS#2は１つのNode#2-0を有し、各Nodeはそれぞれ２つのDriveを有する場合において、７個の物理チャンク（６Ｄ１Ｐ或いは５Ｄ２Ｐ等）を各Driveに割り当てるケースを説明する。
【０１６３】
なお図２７〜図４２の説明では、割当数管理テーブル１０１０におけるComponentがSiteのＭＡＮ（Maximum  Allocated  Number）を“Ms”とし、ComponentがFault  SetのＭＡＮを“Mf”とし、ComponentがNodeのＭＡＮを“Mn”とし、ComponentがDriveのＭＡＮを“Md”とする。
【０１６４】
図２７〜図４２では、次を基本方針とする。
（１）同一コンポーネント内の最大割当数を最小化する。即ちコンポーネント間でできるだけ均等に物理チャンクを割り当てる。
（２）割当数が一定数を超える場合は、なるべく下位コンポーネントの割当数が少なくなるように配置する。
【０１６５】
これは、下位コンポーネントほど障害が発生しやすいと考えられるためである。よって上位コンポーネントの最大割当数を増やすことで、下位コンポーネントの最大割当数を増やさずに配置可能になるのであれば、できるだけ上位のコンポーネントの最大割当数を増やすことで対応する。即ち、同一ドライブの最大割当数（ＭＡＮ(Drive)）を増やすのは最後に行う。
【０１６６】
先ず図２７は、Protection  Domain#0に物理チャンクが全く割り当てられていない初期状態での割当数管理テーブル１０１０及びＭＡＮ管理テーブル１０１１を示す。
【０１６７】
次に図２８は、Node#0-0のDrive#0に１つ目の物理チャンクが割り当てられた状態を示す。Node#0-0のDrive#0に１つ目の物理チャンクが割り当てられると、テーブル２０９０−ａ０のSite#0の割当数、テーブル２０９０−ｂ０のFS#0の割当数、テーブル２０９０−ｃ０のNode#0-0の割当数、及びテーブル２０９０−ｄ０のDrive#0の割当数がそれぞれインクリメントされる。
【０１６８】
テーブル２０９０‐ａ０において、Site#0は、割当数がMs=1に達しており、かつ配下のFault  SetにMfネック及びMnネック及びMdネックの何れでもないFS#1及びFS#2が存在するので、Msネックが設定される。
【０１６９】
テーブル２０９０−ｂ０において、FS#0は、割当数がMf=1に達しており、かつ配下にMnネック及びMdネックの何れでもないFS#0のNode#0-1及びNode#0-2が存在するので、Mfネックが設定される。
【０１７０】
テーブル２０９０‐ｃ０において、Node#0-0は、割当数がMn=1に達しており、かつ配下にMdネックでないNode#0-0のDrive#1が存在するので、Mnネックが設定される。
【０１７１】
テーブル２０９０‐ｄ０において、Drive#0は、割当数がMd=1に達しているのでMdネックが設定される。
【０１７２】
次に図２９は、Node#1-0のDrive#0に２つ目の物理チャンクが割り当てられた状態を示す。全てのSite（本例ではSite#0のみ）がMsネックであるので、ＭＡＮ管理テーブル１０１１のMsをインクリメントして“2”とすることでSite#0の割当数がMs未満になるため、Site#0に２つ目の物理チャンクを割当可能になる。
【０１７３】
Node#1-0のDrive#0に２つ目の物理チャンクが割り当てられると、テーブル２０９０−ａ０のSite#0の割当数、テーブル２０９０−ｂ０のFS#1の割当数、テーブル２０９０−ｃ１のNode#1-0の割当数、及びテーブル２０９０−ｄ０−１のDrive#0の割当数がそれぞれインクリメントされる。
【０１７４】
テーブル２０９０‐ａ０において、Site#0は、割当数がMs=2に達しており、かつ配下にMfネック及びMnネック及びMdネックの何れでもないFS#2が存在するので、Msネックが設定される。
【０１７５】
テーブル２０９０‐ｂ０において、FS#1は、割当数がMf=1に達しており、かつ配下にMnネック及びMdネックの何れでもないFS#1のNode#1-1が存在するので、Mfネックが設定される。
【０１７６】
テーブル２０９０−ｃ１において、Node#1-0は、割当数がMn=1に達しており、かつ配下にMdネックでないNode#1-0のDrive#1が存在するので、Mnネックが設定される。
【０１７７】
テーブル２０９０−ｄ０−１において、Drive#0は、割当数がMd=1に達しているのでMdネックが設定される。
【０１７８】
次に図３０は、Node#2-0のDrive#0に３つ目の物理チャンクが割り当てられた状態を示す。全てのSite（本例ではSite#0のみ）がMsネックであるので、ＭＡＮ管理テーブル１０１１のMsをインクリメントして“3”とすることでSite#0の割当数がMs未満になるため、Site#0に３つ目の物理チャンクを割当可能になる。
【０１７９】
Node#2-0のDrive#0に３つ目の物理チャンクが割り当てられると、テーブル２０９０−ａ０のSite#0の割当数、テーブル２０９０−ｂ０のFS#2の割当数、テーブル２０９０−ｃ２のNode#2-0の割当数、及びテーブル２０９０−ｄ０−２のDrive#0の割当数がそれぞれインクリメントされる。
【０１８０】
テーブル２０９０−ａ０において、Site#0は、割当数がMs=3に達しており、かつ配下の全てのFSが１以上のMfネック、及びMnネック又はMdネックの何れかであるので、Mfネックが設定される。
【０１８１】
テーブル２０９０−ｂ０において、FS#2は、割当数がMf=1に達しており、かつ配下の全てのNode（Node#2-0）がMnネックになったので、Mnネックが設定される。ここで、FS#2はMfネックでもあるが、MfをインクリメントしてもFS#2内の全NodeがMnネックであるため、物理チャンクが割り当て可能にはならない。FS#2を割り当て可能にするためには、まずMnを増やす必要があるため、FS#2にはMnネックが設定される。
【０１８２】
テーブル２０９０−ｃ２において、Node#2-0は、割当数がMn=1に達しており、かつ配下にMdネックでないNode#2-0のDrive#1が存在するので、Mnネックが設定される。
【０１８３】
テーブル２０９０−ｄ０−２において、Drive#0は、割当数がMd=1に達しているのでMdネックが設定される。
【０１８４】
次に図３１は、Node#0-1のDrive#0に４つ目の物理チャンクが割り当てられた状態を示す。全てのSite（本例ではSite#0のみ）がMsネックであるのでＭＡＮ管理テーブル１０１１のMsをインクリメントして“4”とし、Mfをインクリメントして“2”とすることでSite#0に４つ目の物理チャンクを割当可能になる。なおこれに伴いFS#0及びFS#1の割当数がMf未満になりFS#0及びFS#1のMfネックは削除される。
【０１８５】
Node#0-1のDrive#0に４つ目の物理チャンクが割り当てられると、テーブル２０９０−ａ０のSite#0の割当数、テーブル２０９０−ｂ０のFS#0の割当数、テーブル２０９０−ｃ０のNode#0-1の割当数、及びテーブル２０９０−ｄ１のDrive#0の割当数がそれぞれインクリメントされる。
【０１８６】
テーブル２０９０−ａ０において、Site#0は、割当数がMs=4に達しており、かつ配下にMfネック及びMnネック及びMdネックの何れでもないFS#1が存在するので、Msネックが設定される。
【０１８７】
テーブル２０９０−ｂ０において、FS#0は、割当数がMf=2に達しており、かつ配下にMnネック及びMdネックの何れでもないDrive＃0-2が存在するので、Mfネックが再び設定される。またテーブル２０９０−ｂ０において、FS#1は、割当数がMf=2未満となるので、ネックは再設定されない。またテーブル２０９０−ｂ０において、FS#2は、割当数がMf=2未満となりMfネックとはならないが、より下位のMnネックが維持される。
【０１８８】
テーブル２０９０−ｃ０において、Node#1は、割当数がMn=1に達しており、かつ配下にMdネックでないNode#0-1のDrive#1が存在するので、Mnネックが設定される。
【０１８９】
テーブル２０９０−ｄ１において、Node#0-1のDrive#0は、割当数がMd=1に達しているのでMdネックが設定される。
【０１９０】
次に図３２は、Node#1-1のDrive#0に５つ目の物理チャンクが割り当てられた状態を示す。全てのSite（本例ではSite#0のみ）がMsネックであるので、ＭＡＮ管理テーブル１０１１のMsをインクリメントして“5”とすることでSite#0の割当数がMs未満になるので、Site#0に５つ目の物理チャンクを割当可能になる。
【０１９１】
Node#1-1のDrive#0に５つ目の物理チャンクが割り当てられると、テーブル２０９０−ａ０のSite#0の割当数、テーブル２０９０−ｂ０のFS#1の割当数、テーブル２０９０−ｃ１のNode#1-1の割当数、及びテーブル２０９０−ｄ１−１のDrive#0の割当数がそれぞれインクリメントされる。
【０１９２】
テーブル２０９０−ａ０において、Site#0は、割当数がMs=5に達しており、かつ配下の全てのFSが１以上のMfネック、及びMnネック又はMdネックの何れかであるので、Mfネックが設定される。
【０１９３】
テーブル２０９０−ｂ０において、FS#1は、割当数がMf=2に達しており、かつ配下の全てのNodeが１以上のMnネック、及びMdネックの何れかであるので、Mnネックが設定される。
【０１９４】
テーブル２０９０−ｃ１において、Node#1-1は、割当数がMn=1に達しており、かつ配下にMdネックでないNode#1-1のDrive#1が存在するので、Mnネックが設定される。
【０１９５】
テーブル２０９０−ｄ１-１において、Node#1-1のDrive#0は、割当数がMd=1に達しているのでMdネックが設定される。
【０１９６】
次に図３３〜図３８を参照して、Node#0-2のDrive#0に６つ目の物理チャンクを割り当てる状態を示す。
【０１９７】
先ず図３３に示すように、Protection  Domain#0のSite＃0がMfネックであるので、このMfネックをMsネックに変更するために、ＭＡＮ管理テーブル１０１１のMfをインクリメントして“3”とする。すると自身がネックであるSite＃0のFS#0のMfネックが削除される。つまりＭＡＮ管理テーブル１０１１のMfを増やし、Site#0のネック（Mfネック）を外す。これに伴い、Site#0のMfネックが、割当数がMs=5に達しており、かつ配下にMfネック及びMnネック及びMdネックの何れもないFS#0が存在することになるので、Msネックが設定される。
【０１９８】
次に図３４に示すように、ＭＡＮ管理テーブル１０１１のMsをインクリメントして“6”とする。すると自身がネックであるSite＃0のMsネックが削除される。つまりＭＡＮ管理テーブル１０１１のMsを増やし、Site#0のネック（Msネック）を外す。
【０１９９】
次に図３５に示すように、Protection  Domain#0のSite＃0の割当数を6で更新し、Site#0のFS#0の割当数を3で更新し、FS#1のNode#0-2の割当数を1で更新し、Node#0-2のDrive#0の割当数を1で更新することで、６つ目の物理チャンクの割り当てを行う。
【０２００】
次に図３６に示すように、Protection  Domain#0のSite＃0にMsネックを設定し、Site#0のFS#0にMnネックを設定し、FS#0のNode#0-2にMnネックを設定し、Node#0-2のDrive#0にMdネックを設定する。ここで図３６に示すように、Site#0の配下の全てのFSがMn以下のコンポーネントのネック（Mnネック）になっている。
【０２０１】
そこで図３７に示すように、Protection  Domain#0のSite＃0のネックをMsネックからMnネックに変更する（上位更新）。以上で図３８に示すように、６つ目の物理チャンクの割り当てが完了する。
【０２０２】
次に図３９〜図４２を参照して、Node#1-0のDrive#0に７つ目の物理チャンクを割り当てる状態を示す。
【０２０３】
先ず図３９に示すように、Protection  Domain#0のSite＃0がMnネックであるので、このMnネックをMsネックに変更するために、ＭＡＮ管理テーブル１０１１のMnをインクリメントして“2”とする。するとProtection  Domain#0のSite#0がMnネックからMsネックになり、Site＃0のFS#0がMnネックからMfネックになり、Site＃0のFS#1〜FS#2のMnネックが削除され、FS＃0のNode#0-0〜Node#0-2、FS＃1のNode#1-0〜Node#1-1、及びFS＃2のNode#2-0のMnネックが削除される。つまりＭＡＮ管理テーブル１０１１のMnを増やし、Site#0のネック（Mnネック）を外す。
【０２０４】
次に図４０に示すように、ＭＡＮ管理テーブル１０１１のMsをインクリメントして“7”とする。すると自身がネックであるSite＃0のMsネックが削除される。つまりＭＡＮ管理テーブル１０１１のMsを増やし、Site#0のネック（Msネック）を外し、Protection  Domain#0内の全Site（Site#0）がMsネックとなって物理チャンク割り当て不可の状態を解消する。
【０２０５】
次に図４１に示すように、Protection  Domain#0のSite＃0の割当数を7で更新し、Site#0のFS#1の割当数を3で更新し、FS#1のNode#1-0の割当数を3で更新し、Node#1-0のDrive#1の割当数を1で更新することで、７つ目の物理チャンクの割り当てを行う。
【０２０６】
次に図４２に示すように、Protection  Domain#0のSite＃0にMsネックを設定し、Site#0のFS#1にMfネックを設定し、FS#1のNode#1-0にMnネックを設定し、Node#1-0のDrive#1にMdネックを設定する。以上で図４２に示すように、７つ目の物理チャンクの割り当てが完了する。
【０２０７】
以上の実施例１では、ストレージシステムを構成する階層化された記憶ドライブ、記憶ドライブを束ねるノード、ノードを束ねるフォルトセット、及びフォルトセットを束ねるサイトの各コンポーネント毎にデータ単位（物理チャンク）の最大割当数を管理する。そしてErasure  CodingのｍＤｎＰのデータセットを構成する各データ単位を、コンポーネント毎の最大割当数を超過しないように、複数の記憶ドライブに均等に割り当てて配置する。これにより、要求されるデータセットの冗長度及びストレージシステムの構成の制約下で、一定の障害耐性を確保するように各データ単位を配置できる。よって、例えばスタート時の小規模構成であってもできるだけ高い信頼性を確保できる等、自由度の高い構成で、コストと信頼性のバランスを図りつつ、ストレージシステムを構築できる。
【０２０８】
また実施例１によれば、データセットの各データ単位（物理チャンク）がシステム内にできるだけ均等配置されることから、Fault  SetやDrive等のコンポーネント単位の保守を障害耐性の範囲内で行うことができる、言い換えると保守のためにデータロストが発生しない範囲で或るコンポーネントを停止させることができる場合があり、保守の容易性を高めることができる。
【実施例２】
【０２０９】
以下実施例２について、実施例１との差分のみ説明し、重複する説明を省略する。
【０２１０】
（システム内構成台数変更時のリバランス処理）
図４３は、実施例２のシステム内構成台数変更時のリバランス処理概念図である。図４４の上図は、増設前の３Ｄ１Ｐのチャンクグループ３００の割り当て済みの物理チャンク２０２の配置を、黒く塗りつぶして表している。
【０２１１】
図４４の上図の場合、ＦＳ４０の障害耐性は０であり、２つの物理チャンク２０２（２０２ｃ、２０２ｄ）が割り当てられているＦＳ４０に障害が発生した場合、当該チャンクグループ３００のデータはロストしてしまう。
【０２１２】
一方、図４４の下図に示すように、ＦＳ４０を増設した場合、物理チャンク２０２のリバランスを行って物理チャンク２０２ｃを、増設したＦＳ４０の物理チャンク２０２ｅへ移動させることにより、ＦＳ４０の障害耐性１を得ることができる。
【０２１３】
逆に、ＦＳ４０の減設を行う場合は、できるだけ障害耐性が落ちないようにする必要がある。例えばNodeの減設を行う場合は、減設対象Node内に格納されていたデータを、Node抜去前に別Nodeに退避する必要があるが、この時同一チャンクグループ３００に属する物理チャンク２０２ができるだけ割り当てられていないＦＳ４０に退避することで、障害耐性を維持したままシステムを減設することができる。
【０２１４】
減設により障害耐性が落ちてしまう場合は、ユーザにその旨を通知する、または減設要求を拒否するなどの処理を行ってもよい。
【０２１５】
（実施例２のメモリ内の制御プログラム格納領域に格納されるプログラム）
図４４は、実施例２のメモリ内の制御プログラム格納領域に格納されるプログラム例を示す図である。メモリ１４０内の制御プログラム格納領域１４１には、実施例２では、実施例１と比較して、更に増設後リバランス処理プログラム１１０５と、減設前リバランス処理プログラム１１０６とが格納されている。
【０２１６】
計算機システム１が有する複数のノード１００のうち、所定のノード１００のＣＰＵ１３０がメインのＣＰＵとしてプログラムを実行し、その他のＣＰＵ１３０がメインのＣＰＵの指示により動作することにより、増設後リバランス処理プログラム１１０５及び減設前リバランス処理プログラム１１０６の各処理が行われる。
【０２１７】
増設後リバランス処理プログラム１１０５は、１以上のストレージデバイスやストレージノードを増設した際に、データのコンポーネント間移動を行い、各コンポーネント間で使用容量を平準化するプログラムである。本実施例では、増設後リバランス処理プログラム１１０５を実行することにより、物理チャンク２０２（Pchunk）の割当数を平準化し、障害耐性を改善できる場合がある。
【０２１８】
減設前リバランス処理プログラム１１０６は、１以上のストレージデバイスやストレージノードを減設する前に、データのコンポーネント間移動を行い、減設対象のコンポーネントを減設可能とするプログラムである。本実施例では、減設前リバランス処理プログラム１１０６を実行することにより、物理チャンク２０２（Pchunk）の移動先を適切に選択し、減設後に障害耐性が低下を回避できる場合がある。
【０２１９】
（増設後チャンクリバランス処理）
図４５は、増設後チャンクリバランス処理の例を示すフローチャートである。増設後チャンクリバランス処理は、管理サーバ２０からのユーザ指示に基づくシステム（NodeやDevice等）の増設後に起動され、物理チャンク２０２の再配置を行う。
【０２２０】
先ずＣＰＵ１３０は、増設後の構成から、理想最大配置数を算出する（ステップＳ３６０１）。理想最大配置数は、次式により算出される。floor（＊）は床関数（小数点以下切り捨て）、ceiling（＊）は天井関数（小数点以下切り上げ）、Ｎは計算機システム１内のコンポーネントＸの全個数、ｘ及びｙはデータセットｘＤｙＰのデータ及びパリティの各個である。
【０２２１】
理想最大配置数＝floor（ｙ／ceiling（（ｘ＋ｙ）／Ｎ））・・・（３）
【０２２２】
次にＣＰＵ１３０は、各コンポーネントの割当数が理想最大配置数を超過しているチャンクグループ３００が有るかを判定する（ステップＳ３６０２）。即ちＣＰＵ１３０は、チャンクグループ管理テーブル１００３を元に、同一Site／Fault  Set／Node／Driveに一定数以上割り当てられているチャンクグループ３００を検出する。
【０２２３】
ＣＰＵ１３０は、各コンポーネントの割当数が理想最大配置数を超過しているチャンクグループが有る場合（ステップＳ３６０２：ＹＥＳ）、ステップＳ３６０３に処理を移し、各コンポーネントの割当数が理想最大配置数を超過しているチャンクグループが無い場合（ステップＳ３６０２：ＮＯ）、ステップＳ３６０５に処理を移す。
【０２２４】
ステップＳ３６０３では、ＣＰＵ１３０は、リバランス後の障害耐性を算出し、リバランスにより障害耐性改善可能かを判定する。ＣＰＵ１３０は、リバランスにより障害耐性改善可能な場合（ステップＳ３６０３：ＹＥＳ）、対象チャンクグループ３００内の物理チャンク２０２の配置変更を実行する（ステップＳ３６０４）。一方ＣＰＵ１３０は、リバランスにより障害耐性改善不可能な場合（ステップＳ３６０３：ＮＯ）、ステップＳ３６０５に処理を移す。
【０２２５】
ステップＳ３６０５では、ＣＰＵ１３０は、ステップＳ３６０２で判定された全チャンクグループ３００が処理済みかを判定する。ＣＰＵ１３０は、ステップＳ３６０２で判定された全てのチャンクグループ３００が処理済みの場合（ステップＳ３６０５：ＹＥＳ）、ステップＳ３６０６に処理を移す一方、ステップＳ３６０２で判定された全チャンクグループ３００が処理済みでない場合（ステップＳ３６０５：ＮＯ）、ステップＳ３６０２に処理を戻す。
【０２２６】
ステップＳ３６０６では、ＣＰＵ１３０は、増設後の物理チャンク配置に従い、データを移行する。なおデータ移行中に移行元の物理チャンク２０２にWrite要求が発行された場合は、以降元の物理チャンク２０２と移行先の物理チャンク２０２の双方にデータをWriteする。次にＣＰＵ１３０は、ステップＳ３６０３で算出した障害耐性で障害耐性管理テーブル１０１２を更新する（ステップＳ３６０７）。ステップＳ３６０７が終了すると、ＣＰＵ１３０は、増設後チャンクリバランス処理を終了する。
【０２２７】
（減設時チャンクリバランス処理）
図４６は、実施例２の減設時チャンクリバランス処理の例を示すフローチャートである。減設時チャンクリバランス処理は、管理サーバ２０からのユーザ指示に基づくシステム（NodeやDevice等）の減設前に起動され、減設対象コンポーネントからデータを退避し、減設（物理的な抜去）が可能な状態にする。
【０２２８】
先ずＣＰＵ１３０は、減設対象のコンポーネントに属する物理チャンク２０２を１つ選択する（ステップＳ３７０１）。ステップＳ３７０１では、減設対象となるコンポーネント（Node／Drive等）内の物理チャンク２０２を１つ選択する際、例えば先頭から順次選択していってよい。
【０２２９】
次にＣＰＵ１３０は、選択された物理チャンク２０２が属するチャンクグループ３００から、選択された物理チャンク２０２を除いた配置でＭＡＮ管理テーブル１０１１を再生成する（ステップＳ３７０２）。ステップＳ３７０２では、例えば４Ｄ１Ｐ（計５個の物理チャンク２０２）の場合、選択された１つの物理チャンク２０２を除く４個の物理チャンク２０２の割当状態から、ＭＡＮ管理テーブル１０１１を再生成する。
【０２３０】
次にＣＰＵ１３０は、減設前の保護レベルｍＤｎＰに対し(ｍ＋ｎ―１）個の物理チャンク２０２を割り当てた状態、かつ減設対象コンポーネントを除いた構成でチャンクグループ新規作成処理（図２２参照）を実行する（ステップＳ３７０３）。例えば４Ｄ１Ｐの保護レベルの場合、４個の物理チャンク２０２の割り当てが終わった状態で、チャンクグループ新規割り当て処理（図２２）を実行する。この時、減設対象のコンポーネントには物理チャンク２０２が割り当てられないように、選択先から除外する必要がある。
【０２３１】
次にＣＰＵ１３０は、ステップＳ３７０３で実行したチャンクグループ新規作成処理結果は「新規作成不可」でないかを判定する（ステップＳ３７０４）。チャンクグループ新規作成処理結果は「新規作成不可」でない場合（ステップＳ３７０４：ＹＥＳ）、ＣＰＵ１３０は、減設時チャンクリバランス処理を終了する。
【０２３２】
一方チャンクグループ新規作成処理結果は「新規作成不可」である場合（ステップＳ３７０４：ＮＯ）、減設失敗を応答する（ステップＳ３７０５）。ステップＳ３７０５が終了すると、ＣＰＵ１３０は、減設時チャンクリバランス処理を終了する。減設するための空き容量不足や、ユーザの設定した障害耐性基準値を満たさない配置しか取れない場合は、チャンクグループ新規作成処理（図２２参照）が「新規作成不可」を返すため、減設不可を、管理サーバ２０を介して要求元に応答する。
【０２３３】
以上の実施例２によれば、要求されるデータセットの冗長度及びストレージシステムの構成の制約下で、一定の障害耐性を確保するように各データ単位を再配置することで、できるだけ高い信頼性を確保しながらコンポーネントの増設及び減設を行うことができる。
【０２３４】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例を含む。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例もしくは変形例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換・統合・分散をすることが可能である。また実施例で示した各処理は、処理効率又は実装効率に基づいて適宜分散又は統合してもよい。
【符号の説明】
【０２３５】
１…計算機システム、２０…管理サーバ、３０…ネットワーク、４０…ＦＳ（Fault  Set）、１００…ノード、１３０…ＣＰＵ、１４０…メモリ、１６０…記憶ドライブ、１７０…ネットワークスイッチ、１８０…電源、２０１…ストライプブロック、物理チャンク２０２、３００…チャンクグループ、４００…ストライプ、５００…論理チャンク、５０１…Storage-Pool、５０２…ＶＶＯＬ、５０３…Pool-Page、５０４…VVOL-Page、１００１…物理チャンク管理テーブル、１００２…論理チャンク管理テーブル、１００３…チャンクグループ管理テーブル、１００４…ドライブ管理テーブル、１００５…ノード管理テーブル、１００６…Fault  Set管理テーブル、Storage-Pool管理テーブル、１００８…ＶＶＯＬ管理テーブル、１００９…Pool-Page管理テーブル、１０１０…割当数管理テーブル、１０１１…ＭＡＮ管理テーブル、１０１２…障害耐性管理テーブル、１１０１…使用容量監視プログラム、１１０２…Storage-Pool容量増加プログラム、１１０３…障害耐性算出プログラム、１１０４…Ｉ／Ｏ処理プログラム、１１０５…増設後リバランス処理プログラム、１１０６…減設前リバランス処理プログラム。
【図１】
2020064473.tif 000003
【図２】
2020064473.tif 000004
【図３】
2020064473.tif 000005
【図４】
2020064473.tif 000006
【図５】
2020064473.tif 000007
【図６】
2020064473.tif 000008
【図７】
2020064473.tif 000009
【図８】
2020064473.tif 000010
【図９】
2020064473.tif 000011
【図１０】
2020064473.tif 000012
【図１１】
2020064473.tif 000013
【図１２】
2020064473.tif 000014
【図１３】
2020064473.tif 000015
【図１４】
2020064473.tif 000016
【図１５】
2020064473.tif 000017
【図１６】
2020064473.tif 000018
【図１７】
2020064473.tif 000019
【図１８】
2020064473.tif 000020
【図１９】
2020064473.tif 000021
【図２０】
2020064473.tif 000022
【図２１】
2020064473.tif 000023
【図２２】
2020064473.tif 000024
【図２３】
2020064473.tif 000025
【図２４】
2020064473.tif 000026
【図２５】
2020064473.tif 000027
【図２６】
2020064473.tif 000028
【図２７】
2020064473.tif 000029
【図２８】
2020064473.tif 000030
【図２９】
2020064473.tif 000031
【図３０】
2020064473.tif 000032
【図３１】
2020064473.tif 000033
【図３２】
2020064473.tif 000034
【図３３】
2020064473.tif 000035
【図３４】
2020064473.tif 000036
【図３５】
2020064473.tif 000037
【図３６】
2020064473.tif 000038
【図３７】
2020064473.tif 000039
【図３８】
2020064473.tif 000040
【図３９】
2020064473.tif 000041
【図４０】
2020064473.tif 000042
【図４１】
2020064473.tif 000043
【図４２】
2020064473.tif 000044
【図４３】
2020064473.tif 000045
【図４４】
2020064473.tif 000046
【図４５】
2020064473.tif 000047
【図４６】
2020064473.tif 000048
【図４７】
2020064473.tif 000049