(57)【要約】  故障した記憶ドライブの消失データを復元する方法は、第１ＲＡＩＤタイプの第１ＲＡＩＤグループにおける記憶ドライブでの障害を検出し、前記第１ＲＡＩＤグループにおいて、前記記憶ドライブの故障により消失したホストデータを含むストライプラインそれぞれにおいて、前記ホストデータを復元し、前記第１ＲＡＩＤグループにおけるストライプラインのホストデータから、第２ＲＡＩＤタイプのストライプラインのデータを形成し、前記第２ＲＡＩＤタイプのストリップ数は前記第１ＲＡＩＤタイプのストリップ数より少なく、前記故障した記憶ドライブを除く前記第１ＲＡＩＤグループに含まれる記憶ドライブにより前記第２ＲＡＩＤタイプの第２ＲＡＩＤグループを構成し、前記第２ＲＡＩＤタイプのストライプラインのデータを、前記第２ＲＡＩＤグループに格納する。
2018138813.tif 000002
【特許請求の範囲】
【請求項１】
計算機システムであって、
メモリと、
前記メモリに格納されているプログラムに従って動作するプロセッサと、を含み、
前記プロセッサは、
第１ＲＡＩＤタイプの第１ＲＡＩＤグループにおける記憶ドライブの故障を検出し、
前記第１ＲＡＩＤグループにおいて、前記記憶ドライブの故障により消失したホストデータを含むストライプラインそれぞれにおいて、前記ホストデータを復元し、
前記第１ＲＡＩＤグループにおけるストライプラインのホストデータから、第２ＲＡＩＤタイプのストライプラインのデータを形成し、前記第２ＲＡＩＤタイプのストリップ数は前記第１ＲＡＩＤタイプのストリップ数より少なく、
前記故障した記憶ドライブを除く前記第１ＲＡＩＤグループに含まれる記憶ドライブにより前記第２ＲＡＩＤタイプの第２ＲＡＩＤグループを構成し、
前記第２ＲＡＩＤタイプのストライプラインのデータを、前記第２ＲＡＩＤグループに格納する、計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記第１ＲＡＩＤタイプと前記第２ＲＡＩＤタイプの冗長度は同一である、計算機システム。
【請求項３】
請求項２に記載の計算機システムであって、
前記第１ＲＡＩＤタイプと前記第２ＲＡＩＤタイプのＲＡＩＤレベルは同一である、計算機システム。
【請求項４】
請求項１に記載の計算機システムであって、
前記プロセッサは、ページ単位で、前記第１ＲＡＩＤグループ及び前記第２ＲＡＩＤグループから記憶領域を仮想ボリュームに割り当て、
前記ページの境界は、前記第１ＲＡＩＤタイプ及び前記第２ＲＡＩＤタイプのパリティサイクル境界と一致する、計算機システム。
【請求項５】
請求項１に記載の計算機システムであって、
前記プロセッサは、
前記第１ＲＡＩＤグループにおけるストライプラインから第１ストライプラインのデータを読み出し、
前記第１ストライプラインのデータが消失ホストデータを含む場合、前記消失ホストデータを復元し、
前記第１ストライプラインの直前のストライプラインの一部のホストデータがバッファに格納されている場合、前記一部のホストデータと、前記第１ストライプラインの一部のホストデータとから、前記第１ストライプラインの直前のストライプラインの一部のホストデータが前記バッファに格納されていない場合、前記第１ストライプラインの一部のホストデータから、前記第２ＲＡＩＤタイプの第２ストライプラインのデータを形成し、
前記第１ストライプラインにおいて前記第２ストライプラインのデータの形成に使用されないホストデータを前記バッファに格納し、
前記第２ストライプラインのデータを前記第１ＲＡＩＤタイプのデータ格納領域に上書きする、
ことを繰り返す、計算機システム。
【請求項６】
請求項５に記載の計算機システムであって、
前記プロセッサは、
前記第１ストライプラインを読み出してから、前記第２ストライプラインのデータを格納する前に、前記第１ストライプラインに対するライトコマンドを、前記第２ストライプラインのデータの格納後に実行する、計算機システム。
【請求項７】
請求項１に記載の計算機システムであって、
前記プロセッサは、
ページ単位で、プールから記憶領域を仮想ボリュームに割り当て、
前記第１ＲＡＩＤグループの記憶領域と前記プールとの間のマッピングを管理し、
前記プールの空き容量に基づいて、前記第１ＲＡＩＤグループにおけるガベージコレクションを制御する、計算機システム。
【請求項８】
故障した記憶ドライブの消失データを復元する方法であって、
第１ＲＡＩＤタイプの第１ＲＡＩＤグループにおける記憶ドライブでの障害を検出し、
前記第１ＲＡＩＤグループにおいて、前記記憶ドライブの故障により消失したホストデータを含むストライプラインそれぞれにおいて、前記ホストデータを復元し、
前記第１ＲＡＩＤグループにおけるストライプラインのホストデータから、第２ＲＡＩＤタイプのストライプラインのデータを形成し、前記第２ＲＡＩＤタイプのストリップ数は前記第１ＲＡＩＤタイプのストリップ数より少なく、
前記故障した記憶ドライブを除く前記第１ＲＡＩＤグループに含まれる記憶ドライブにより前記第２ＲＡＩＤタイプの第２ＲＡＩＤグループを構成し、
前記第２ＲＡＩＤタイプのストライプラインのデータを、前記第２ＲＡＩＤグループに格納する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、消失データの復元に関する。
【背景技術】
【０００２】
通常、１台のドライブの障害時、システム管理者は、障害ドライブをスペアドライブに置き換える。システムは、障害ドライブ以外の複数ドライブから同一ストライプラインのデータを読み出し、障害ドライブ内に格納されていたデータを復元し、復元したデータをスペアドライブ内へ格納する。【０００３】
スペアドライブと障害ドライブ以外の複数ドライブによって同じＲＡＩＤタイプにてＲＡＩＤ構成を実現し、ストライプラインを再現する。さらに、障害ドライブから新ドライブへの交換の完了後、システムは、スペアドライブ内のデータを新ドライブへコピーし、スペアドライブに代えて、新ドライブを含む、ＲＡＩＤ構成を生成する。【０００４】
スペアドライブは、ドライブに障害が発生した際、障害ドライブが新しいドライブに交換されるまでの間のみ障害ドライブの代わりに使用され、通常業務では使用されない。スペアドライブの利用は、例えば、米国特許第８２８５９２８号に開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第８２８５９２８号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ストレージ装置の構成要素及びコストを削減するため、スペアドライブ不要化の要望がある。スペアドライブは、通常の業務では使用されずに、障害が起こったときのために常に確保しておく空き領域である。しかし、スペアドライブを用意しない構成においても、ドライブ障害時の信頼性を保障することが要求される。
【課題を解決するための手段】
【０００７】
本発明の代表的な一例は、計算機システムであって、メモリと、前記メモリに格納されているプログラムに従って動作するプロセッサと、を含み、前記プロセッサは、第１ＲＡＩＤタイプの第１ＲＡＩＤグループにおける記憶ドライブの故障を検出し、前記第１ＲＡＩＤグループにおいて、前記記憶ドライブの故障により消失したホストデータを含むストライプラインそれぞれにおいて、前記ホストデータを復元し、前記第１ＲＡＩＤグループにおけるストライプラインのホストデータから、第２ＲＡＩＤタイプのストライプラインのデータを形成し、前記第２ＲＡＩＤタイプのストリップ数は前記第１ＲＡＩＤタイプのストリップ数より少なく、前記故障した記憶ドライブを除く前記第１ＲＡＩＤグループに含まれる記憶ドライブにより前記第２ＲＡＩＤタイプの第２ＲＡＩＤグループを構成し、前記第２ＲＡＩＤタイプのストライプラインのデータを、前記第２ＲＡＩＤグループに格納する。
【発明の効果】
【０００８】
本発明の一態様によれば、スペアドライブを用意しない構成において、ドライブ障害時の信頼性を保障できる。
【図面の簡単な説明】
【０００９】
【図１】リビルド方法のフローチャートを示す。
【図２】システムの構成例を示している。
【図３】フラッシュパッケージの構成例を示す。
【図４】仮想ボリュームのページ、プールのページ、フラッシュ側プールのブロック、そしてフラッシュパッケージのブロック、の間の関係を示す。
【図５】ストレージ装置の共有メモリに格納される管理情報を示す。
【図６】仮想ボリューム情報が示す一つの仮想ボリューム（ＴＰＶＯＬ）の情報の形式例を示す。
【図７】プール情報の形式例を示す。
【図８】ページ情報の形式例を示す。
【図９】プールにあるページの、空きページ管理ポインタの例を示す。
【図１０】パリティグループ情報の形式一例を示す。
【図１１】フラッシュパッケージ情報の形式例を示す。
【図１２】ストライプラインの再構成の処理の例を示す。
【図１３Ａ】ホストデータの復元の例を示す。
【図１３Ｂ】ホストデータの復元の例を示す。
【図１４Ａ】リビルド中のパリティグルームにおけるデータ状態を示す。
【図１４Ｂ】リビルド中のパリティグルームにおけるデータ状態を示す。
【図１５】ＲＡＩＤ再構成中に、ライトコマンドを受けた場合の処理を示す。
【図１６】ストライプライン再構成における状態遷移図を示す。
【図１７Ａ】パリティグループにおける空き領域の例を示す。
【図１７Ｂ】パリティグループにおける空き領域の例を示す。
【図１７Ｃ】パリティグループにおける空き領域の例を示す。
【図１７Ｄ】パリティグループにおける空き領域の例を示す。
【図１８】空き容量監視処理のフローチャートを示す。
【図１９Ａ】１４Ｄ＋２Ｐ（ＲＡＩＤ６）構成のパリティグループの状態遷移の例を示す。
【図１９Ｂ】１４Ｄ＋２Ｐ（ＲＡＩＤ６）構成のパリティグループの状態遷移の例を示す。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら実施例を説明する。ただし、本実施例は、発明を実現するための一例に過ぎず、発明の技術的範囲を限定するものではない。また、各図において共通の構成については、同一の参照番号が付されている。
【００１１】
なお、以後の説明では「テーブル」という表現にて本発明の情報を説明するが、これら情報は必ずしもテーブルによるデータ構造で表現されていなくても良く、「リスト」、「ＤＢ（データベース）」、「キュー」等のデータ構造やそれ以外で表現されていても良い。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「ＤＢ」、「キュー」等については、単に「情報」と呼ぶこともできる。また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いることが可能であり、これらについてはお互いに置換が可能である。
【００１２】
以後の説明では「プログラム」を主語として説明を行うが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御装置）を用いながら行うため、プロセッサを主語とした説明としてもよく、コントローラを主語とした説明としてもよい。
【００１３】
また、プログラムを主語として開示された処理は管理サーバ（管理装置）等の計算機、情報処理装置が行う処理としてもよい。プログラムの一部または全ては専用ハードウェアで実現してもよく、また、モジュール化されていても良い。各種プログラムはプログラム配布サーバや記憶メディアによって各計算機にインストールされてもよい。
【００１４】
（１）概要
以下において、スペアドライブ不要のドライブ障害時のリビルド技術を開示する。本技術により、スペアドライブが搭載されないシステムは、記憶ドライブの障害が発生した場合でも、稼動し続けることができる。
【００１５】
システムは、スペアドライブが無い構成でディスクに障害が発生した場合には、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）グループを、ｎＤ＋ｍＰから（ｎ−ｋ）Ｄ＋ｍＰに再構成する。ここで、ｎ、ｍ、ｋは自然数である。システムは、例えば、７Ｄ＋１ＰのＲＡＩＤグループから６Ｄ＋１ＰのＲＡＩＤグループを再構成する。これにより、スペアドライブを使用することなく消失データを復元すると共に、リビルド後の信頼性を確保できる。
【００１６】
図１は、本開示のリビルド方法のフローチャートを示す。一つの記憶ドライブで障害が発生すると、システムは、障害ドライブ内に格納されていたデータを、同一ＲＩＡＤグループの障害ドライブ以外のドライブに格納されたデータ及びパリティを使用してデータを復元する（Ｓ１１１０）。
【００１７】
システムは、少ない構成数のＲＡＩＤタイプのＲＡＩＤグループを再構成し、新たなストライプラインを定義し、そのストライプラインのパリティを再計算する（Ｓ１１１２）。システムは、障害ドライブ以外の記憶ドライブに、新たなストライプラインのデータとパリティを、格納する（Ｓ１１１４）。
【００１８】
以下において、システム構成の一例として、オールフラッシュストレージ装置を説明するが、例えばＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）のように、他の種類の記憶媒体を含む記憶ドライブを使用してもよい。
【００１９】
（２）システム構成
（ａ）システムハードウェア構成
図２は、本実施例のシステム１００の構成例を示している。システム１００は、ホスト計算機（ホスト）１０１、管理装置１０２、ストレージ装置１０４を含む。ホスト１０１、管理装置１０２、ストレージ装置１０４は、ネットワーク１０３で互いに接続される。
【００２０】
ネットワーク１０３は、一例として、ファイバチャネルを用いて形成されるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）である。ネットワーク１０３は、ＳＣＳＩコマンドが転送可能なプロトコル以外に、メインフレームのＩ／Ｏプロトコルを用いることもできる。管理装置１０２はネットワーク１０３とは別の管理ネットワークを介して、他の装置と接続されてもよい。管理装置１０２は省略されてもよい。
【００２１】
図２に示されるように、ホスト１０１は、アプリケーションプログラムを実行する計算機であり、ストレージ装置１０４の論理的な記憶領域にネットワーク１０３経由でアクセスする。ストレージ装置１０４は、フラッシュパッケージ１１３の記憶領域にデータを格納する。ホスト１０１の台数はシステムにより変化する。
【００２２】
ホスト１０１は、例えば、入力デバイス、出力デバイス、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ、ディスクアダプタ、ネットワークアダプタ、及び、記憶デバイスを含む。なお、ホスト１０１のＣＰＵは、ユーザが使用するアプリケーションプログラム、ストレージ装置１０４とのインターフェイス制御を行うストレージ装置制御プログラムを実行する。
【００２３】
ホスト１０１はストレージ装置１０４が提供する仮想ボリュームを使用する。ホスト１０１は仮想ボリュームに対して、アクセスコマンドであるリードコマンドやライトコマンドを発行することで、仮想ボリュームに格納されたデータにアクセスする。
【００２４】
管理装置１０２は、ストレージ装置１０４の管理、例えばストレージ装置１０４の記憶領域の構成、を行うための計算機で、汎用のコンピュータと同様に、プロセッサとメモリを含む。管理装置１０２は、ストレージ装置１０４の管理を行うための管理プログラムを実行する。管理装置１０２は、キーボードやディスプレイ等の入出力デバイス、ＣＰＵ、メモリ、ネットワークアダプタ、及び、記憶デバイスを含み、ストレージ装置１０４の状態等の情報を、ディスプレイ等に出力（表示）する。
【００２５】
ストレージ装置１０４は、計算機システムの例であり、ホスト１０１に対して１以上のボリューム（仮想ボリューム又は論理ボリューム）を提供する。ストレージ装置１０４は、ホストインターフェイス（Ｉ／Ｆ）１０６、保守Ｉ／Ｆ１０７、ストレージコントローラ１０９、キャッシュメモリ１１０、共有メモリ１１１、フラッシュパッケージ１１３を含む。これらのハードウェア構成は冗長化されているものとする。
【００２６】
これらの構成要素は、バス１１２によって相互接続されている。これらの構成要素のうち、ホストＩ／Ｆ１０６、保守Ｉ／Ｆ１０７、ストレージコントローラ１０９、キャッシュメモリ１１０、共有メモリ１１１、バス１１２の集合を、ストレージコントローラと呼ぶこともある。フラッシュパッケージ１１３は外部ネットワークを介して他のデバイスを接続されてもよい。ストレージ装置１０４からフラッシュパッケージ１１３を除いた構成も計算機システムである。
【００２７】
ホストＩ／Ｆ１０６は、ストレージ装置１０４がホスト１０１等のイニシエータと通信するために用いられる、インターフェイスデバイスである。ホスト１０１がボリューム（以下の例で仮想ボリューム）にアクセスするために発行するコマンドは、ホストＩ／Ｆ１０６に到来する。ストレージ装置１０４は、ホスト１０１にホストＩ／Ｆ１０６から情報（応答）を返す。
【００２８】
保守Ｉ／Ｆ１０７は、ストレージ装置１０４が管理装置１０２と通信するためのインターフェイスデバイスである。管理装置１０２からのコマンドは保守Ｉ／Ｆ１０７に到来する。ストレージ装置１０４は、管理装置１０２に、保守Ｉ／Ｆ１０７から情報（応答）を返す。
【００２９】
図２の例において、ホストＩ／Ｆ１０６と保守Ｉ／Ｆ１０７がいずれもネットワーク１０３に接続されているが、ホストＩ／Ｆ１０６が接続されるネットワークと、保守Ｉ／Ｆ１０７が接続されるネットワークが、異なるネットワークであってもよい。
【００３０】
キャッシュメモリ１１０は、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等で構成され、フラッシュパッケージ１１３に読み書きされるデータを一時的に格納する。共有メモリ１１１は、ストレージコントローラ１０９で動作するプログラムや構成情報を格納する。
【００３１】
ストレージコントローラ１０９は、プロセッサ１１９とローカルメモリ１１８を有するパッケージボードである。プロセッサ１１９は、ストレージ装置１０４の各種制御を行うためのプログラムを実行する。ローカルメモリ１１８は、プロセッサ１１９が実行するプログラムや、プロセッサ１１９が使用する情報を一時的に保存する。
【００３２】
図２は、ストレージ装置１０４が２つのストレージコントローラ１０９を有する構成が示されているが、ストレージコントローラ１０９の数は２以外でもよい。ストレージ装置１０４にストレージコントローラ１０９が１つだけ搭載されている構成でも良いし、或いは３以上のストレージコントローラ１０９が搭載されていてもよい。
【００３３】
キャッシュメモリ１１０は、仮想ボリューム（フラッシュパッケージ１１３）に対するライトデータ、又は仮想ボリューム（フラッシュパッケージ１１３）から読み出されたデータ（リードデータ）を一時的に記憶するために用いられる。キャッシュメモリ１１０には、ＤＲＡＭ、ＳＲＡＭ等の揮発性メモリ又は不揮発性メモリが用いられてよい。
【００３４】
共有メモリ１１１は、ストレージコントローラ１０９（のプロセッサ１１９）が使用する管理情報を格納するための記憶領域を提供する。キャッシュメモリ１１０と同様、共有メモリ１１１には、ＤＲＡＭ、ＳＲＡＭ等の揮発性メモリ又は不揮発性メモリが用いられてよい。キャッシュメモリ１１０と共有メモリ１１１は、ローカルメモリ１１８と異なり、任意のストレージコントローラ１０９のプロセッサ１１９からアクセス可能である。
【００３５】
フラッシュパッケージ１１３は、ホスト１０１からのライトデータを最終的に格納するための不揮発性記憶媒体を含む記憶ドライブ（記憶デバイス）である。ストレージコントローラ１０９は、一台のフラッシュパッケージ１１３が故障しても、そのフラッシュパッケージ１１３のデータを復元できるＲＡＩＤ機能をもっているものとする。
【００３６】
複数のフラッシュパッケージ１１３が、一つのＲＡＩＤグループを構成する。これを、パリティグループ１１５と呼ぶ。フラッシュパッケージ１１３は、記憶媒体として、フラッシュメモリを有する。フラッシュパッケージの一例は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）である。
【００３７】
フラッシュパッケージ１１３は、ライトデータを圧縮して自身の記憶媒体に格納する機能（圧縮機能）を有してもよい。フラッシュパッケージ１１３は、ＲＡＩＤグループに基づいて一つ以上の論理記憶領域（論理ボリューム）を提供する。論理ボリュームは、ＲＡＩＤグループのフラッシュパッケージ１１３が有する物理的な記憶領域と関連付けられる。
【００３８】
（ｂ）フラッシュパッケージ
図３は、フラッシュパッケージ１１３の構成例を示す。フラッシュパッケージ１１３は、コントローラ２１０と、ホスト１０１からのライトデータを記憶するための記憶媒体であるフラッシュメモリ２８０を有する。コントローラ２１０は、ドライブＩ／Ｆ２１１、プロセッサ２１３、メモリ２１４、フラッシュＩ／Ｆ２１５、圧縮機能を有する論理回路２１６を含む、これらは内部ネットワーク２１２を介して相互接続されている。圧縮機能は省略してもよい。
【００３９】
ドライブＩ／Ｆ２１１は、ストレージ装置１０４と通信するためのインターフェイスデバイスである。フラッシュＩ／Ｆ２１５は、コントローラ２１０がフラッシュメモリ２８０と通信するためのインターフェイスデバイスである。
【００４０】
プロセッサ２１３は、フラッシュパッケージ１１３の制御を行うためのプログラムを実行する。メモリ２１４は、プロセッサ２１３が実行するプログラムや、プロセッサ２１３が使用する制御情報等を格納する。以下で説明するフラッシュパッケージ１１３が行う処理（記憶領域の管理、ストレージ装置１０４からのアクセス要求の処理等）は、プロセッサ２１３がプログラムを実行することにより行われる。プロセッサ２１３は、ストレージコントローラ１０９からリード要求又はライト要求を受け付け、受けた要求に従う処理を実行する。
【００４１】
プロセッサ２１３が、ストレージコントローラ１０９からライト要求を受け、そのライト要求に従うデータをフラッシュメモリ２８０に書き込んだ段階で、そのライト要求を完了する（ライト要求の完了をストレージコントローラ１０９に報告する）。または、ストレージコントローラ１０９とフラッシュメモリ２８０との間でリード又はライトされるデータをバッファ（図示せず）に一時的に格納してもよい。プロセッサ２１３は、ストレージコントローラ１０９からのライト要求に従うデータをバッファに書き込んだ段階で、そのライト要求の完了報告をストレージコントローラ１０９に送信してもよい。
【００４２】
（３）ページ、ブロックの関係
本実施例においては、ストレージ装置１０４は、容量仮想化機能をもつ。容量仮想化の制御単位は、ページとよばれる。本実施例では、ページのサイズは、フラッシュメモリにおける消去単位であるブロックよりも大きい。例えば、ページのサイズは、ブロックのサイズのＸ倍である（Ｘは２以上の整数）。なお、本実施例では、フラッシュメモリにおけるリード及びライトの単位を、「セグメント」と呼ぶ。
【００４３】
図４は、仮想ボリューム３１１のページ３２１、プールのページ３２４、フラッシュ側プール３０３のブロック３２５、そしてフラッシュパッケージのブロック３２６、の間の関係を示す。プール３０３のページ３２４は、仮想ボリューム３１１のページ３２１に含まれない冗長データを、格納することがある。
【００４４】
ターゲットデバイス３１０は仮想ボリューム又は論理ボリュームのうち、ホスト１０１からのアクセスを許す記憶領域である。ページ３２１は、仮想ボリューム３１１を構成する。仮想ボリューム３１１はプール３０３を用いて定義された、シンプロビジョニング又は／及びティアリングを適用した仮想記憶領域である。プール３０３は、シンプロビジョニングやティアリングに用いるプールボリューム３０５の集合である。
【００４５】
プールボリューム３０５は１つのプール３０３に所属する。ページ３２４は、プールボリューム３０５（プール３０３）から切り出される。ページ３２４は、仮想ボリュームのページ３２１に割り当てられる。ページ３２４は、フラッシュ側プール３０４を介して、パリティグループ（ＲＡＩＤグループ）１１５の実記憶領域が割り当てられる。パリティグループは、複数のフラッシュパッケージ（記憶ドライブ）１１３を用いて定義される。これにより、ＲＡＩＤによる高信頼化、高速化、大容量化が達成される。
【００４６】
本実施例において、フラッシュパッケージ１１３の容量の管理単位は、フラッシュメモリの消去単位であるブロックとする。ストレージコントローラ１０９は、ブロック単位で、フラッシュパッケージ１１３にアクセスする。フラッシュ側プール３０４のブロック３２５は、ストレージコントローラ１０９から見た仮想ブロックである。ブロック３２６は、実際にデータを格納する実ブロックである。
【００４７】
フラッシュ側プール３０４は、仮想ブロック３２５から構成される。プール３０３のページ３２４は、複数の仮想ブロック３２５に対応付けられる。仮想ブロック３２５に格納されるデータは、フラッシュパッケージ１１３内の実ブロック３２６に格納される。以上の格納方式は一例である。
【００４８】
フラッシュ側プール３０４の仮想ブロック３２５は、フラッシュパッケージアドレス空間３６２のブロックを介して、実ブロック３２６にマッピングされる。フラッシュパッケージアドレス空間３６２は、ストレージコントローラ１０９から見えるフラッシュパッケージのアドレス空間である。
【００４９】
一つのフラッシュパッケージ１１３において、フラッシュパッケージアドレス空間３６２の仮想ブロックにより構成される容量は、実ブロック３２６により構成される容量より大きくあり得る。実ブロック３２６は、フラッシュメモリアドレス空間３６３のブロックである。フラッシュパッケージ１１３は、実ブロック数より多くの仮想ブロックをもっているように、ストレージコントローラ１０９に見せることができる。仮想ブロックにより構成される容量のほうが、実ブロックにより構成される容量より大きい。
【００５０】
フラッシュパッケージ１１３は、まだ実ブロック３２６を割り当てていない仮想ブロック３２５に属するアドレスを指定したライト要求をストレージコントローラ１０９から受け付けた場合、その仮想ブロック３２５に実ブロック３２６を割り当てる。
【００５１】
パリティグループ３０８は、前述した通り、複数の同種同一通信インターフェイスのフラッシュパッケージ１１３によって構成されており、それら複数のフラッシュパッケージ１１３に跨るストライプライン（記憶領域）３０７が定義される。ストライプラインは、消失データを回復可能な冗長構成を有する、ホストデータとパリティデータを格納する。
【００５２】
フラッシュパッケージ１１３内のフラッシュメモリ２８０に対して、フラッシュメモリアドレス空間３６３が定義されている。さらに、フラッシュメモリアドレス空間３６３とフラッシュ側プール３０４とのマッピングのための、フラッシュパッケージアドレス空間３６２が定義されている。各フラッシュパッケージ１１３に対して、フラッシュメモリアドレス空間３６３とラッシュパッケージアドレス空間３６２が定義されている。
【００５３】
パリティグループ３０８の上位に、フラッシュ側プール３０４が存在する。フラッシュ側プール３０４は、パリティグループ３０８に基づく仮想的な記憶資源である。フラッシュ側プール３０４に対して、フラッシュ側プールアドレス空間３５２が定義されている。このアドレス空間３５２は、ストレージコントローラ１０９側の記憶容量を管理するアドレス空間とフラッシュパッケージ内の記憶容量を管理するアドレス空間をマッピングためのアドレス空間である。
【００５４】
フラッシュパッケージアドレス空間３６２とフラッシュ側プールアドレス空間３５２との間のマッピングは、一度決定されると維持される（静的）。フラッシュ側プールアドレス空間３５２とプールアドレス空間３５１との間のマッピングも静的である。
【００５５】
ストレージコントローラ１０９側のプール３０３は、複数のプールボリューム３０５によって形成される。プールボリューム３０５は、オフラインボリュームであるため、ホスト１０１から指定されるターゲットデバイスには関連付けられていない。プールボリューム３０５は、複数のページ３２４から構成されている。
【００５６】
ページ３２４を構成するブロックは、フラッシュ側プール３０４（空間３５３）のブロック３２５と、１対１でマッピングされている。ブロック３２５は、ストライプライン３０７の記憶領域と関連付けられている。ページ３２４のブロックに格納されるデータは、そのブロックに関連付けられているストライプライン３０７に格納される。１つのページ３２４に複数のストライプライン３０７が関連付けられていてもよい。
【００５７】
容量が仮想化された仮想ボリューム（ＴＰＶＯＬ：Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ  Ｖｏｌｕｍｅ）３１１の仮想ページ３２１には、そのＴＰＶＯＬ３１１にマッピング関連付けられているプール３０３内の空きページがマッピングされる。ストレージコントローラ１０９は、割り当てたプール３０３内の空きページを、ブロック単位で、フラッシュ側プールアドレス空間３５２のブロックにマッピングし、そのマッピングを管理する。つまり、ブロックは、ストレージコントローラ１０９からのＩ／Ｏの単位でもある。
【００５８】
ストレージコントローラ１０９は、フラッシュ側プールアドレス空間３５２のブロックがマッピングされている、フラッシュパッケージアドレス空間３６２のブロックを検索して、フラッシュパッケージ側にリード／ライト要求を出す。マッピングは、セグメント単位でもよい。
【００５９】
ＴＰＶＯＬ３１１の上位にターゲットデバイス３１０が定義される。１以上のターゲットデバイス３１０が、ホスト１０１の通信ポートに関連付けられており、ターゲットデバイス３１０に、ＴＰＶＯＬ３１１が関連付けられている。
【００６０】
ホスト１０１は、ターゲットデバイス３１０を指定したＩ／Ｏコマンド（ライトコマンド又はリードコマンド）をストレージ装置１０４に送信する。ターゲットデバイス３１０には、前述した通り、ＴＰＶＯＬ３１１が関連付けられている。ストレージ装置１０４は、ＴＰＶＯＬ３１１に関連付けられているターゲットデバイス３１０を指定したライトコマンドを受信した場合、プール３０３から空きページ３２４を選択し、ライト先仮想ページ３２１に割り当てる。
【００６１】
ストレージ装置１０４は、ライト先ページ３２４に、ライトデータを書き込む。ページ３２４にデータを書き込むことは、そのページ３２４にマッピングされたフラッシュ側プールアドレス空間のブロック３２５に関連づけられているストライプライン３０７、に書き込むことになる。即ちストライプライン３０７に関連付けられたフラッシュメモリにデータを書き込むということである。
【００６２】
以上のように説明したが、管理するデータの単位をそろえることで、プール３０３とフラッシュ側プール３０４はひとつのプールを設定して管理することができる。
【００６３】
（４）管理情報
図５は、ストレージ装置１０４の共有メモリ１１１に格納される管理情報を示す。仮想ボリューム情報２０００、プール情報２３００、パリティグループ情報２４００、実ページ情報２５００、及び、空きページ管理ポインタ２６００が、共有メモリ１１１に格納されている。空きページ管理ポインタ（情報）２６００は、パリティグループ１１５ごとに、空きページを管理する。
【００６４】
フラッシュパッケージ情報２７００は、フラッシュパッケージ１１３のメモリ２１４に格納されている。本実施例においては、ストレージコントローラ１０９は、容量仮想化機能を有している。ストレージコントローラ１０９が、容量仮想化機能をもっていなくともよい。
【００６５】
図６は、仮想ボリューム情報２０００が示す一つの仮想ボリューム（ＴＰＶＯＬ）の情報の形式例を示す。仮想ボリューム情報２０００は、装置内の複数仮想ボリュームの情報を保持する。仮想ボリュームは、ホスト１０１がリード又はライトするデータが格納される仮想的な記憶デバイスである。ホスト１０１は、仮想ボリュームのＩＤ、仮想ボリューム内のアドレス、対象データの長さを指定して、リードコマンドやライトコマンドを発行する。
【００６６】
仮想ボリューム情報２０００は、仮想ボリュームＩＤ２００１、仮想容量２００２、仮想ボリュームＲＡＩＤタイプ２００３、仮想ボリュームのページ番号２００４、及び、プール内のページへのポインタ２００６を示す。
【００６７】
仮想ボリュームＩＤ２００１は、対応する仮想ボリュームのＩＤを示す。仮想容量２００２は、ホスト１０１から見た、仮想ボリュームの容量を表す。仮想ボリュームＲＡＩＤタイプ２００３は、仮想ボリュームのＲＡＩＤタイプを表す。ＲＡＩＤ５のように、Ｎ台のフラッシュパッケージ１１３に対し１台のフラッシュパッケージ１１３に冗長データを格納する場合、Ｎの具体的数値を指定する。
【００６８】
仮想ボリュームのページ番号２００４は、仮想ボリュームのページの番号を示す。仮想ボリュームのページ番号２００４のページ番号数は、仮想ボリュームのページ数である。ペース数は、仮想容量２００２が表す値を仮想ページ容量（後述）が表す値で割った数である。
【００６９】
プール内のページへのポインタ２００６は、仮想ボリュームのページに割り当てられたプールページのページ情報２５００へのポインタを示す。ストレージ装置１０４は仮想容量機能をサポートしているので、ページが割り当てられる契機は、仮想ボリュームのページへの実際のデータ書き込みである。まだ書き込みが行われていない仮想ページに対応するプール内のページへのポインタ２００６の値は、ＮＵＬＬである。
【００７０】
本実施例では、仮想ボリュームのページの容量とプールのページの容量は等しいというわけではない。なぜなら、プールのページは、ＲＡＩＤのタイプにより異なる冗長データを格納することがあるためである。プールのページ容量は、そのページが割り当てられたパリティグループ１１５のＲＡＩＤタイプにより決まる。
【００７１】
たとえば、ＲＡＩＤ１のようにデータを２重に書き込む場合、プールのページの容量は、仮想ページ容量の２倍になる。ＲＡＩＤ５のように、Ｎ台の記憶装置の容量に対し、１台分の記憶装置の容量の冗長データを格納する場合、仮想ページ容量の（Ｎ＋１）／Ｎの容量が、ページの容量である。なお、１又は複数のパリティ（冗長データ）ブロックと、これらを生成する１又は複数の（ホスト）データブロックからなるデータを、ストライプラインと呼ぶ。ストライプラインのデータブロックを、ストリップとも呼ぶ。
【００７２】
ＲＡＩＤ０のように、パリティデータが使用されない場合、仮想ボリュームのページの容量とプールのページの容量が等しい。なお、本実施例においては、仮想ページの容量は、ストレージ装置１０４が提供する１又は複数の仮想ボリュームについて共通であるが、１又は複数の仮想ボリュームにおいて異なる容量のページが含まれていてもよい。
【００７３】
図７は、プール情報２３００の形式例を示す。プール情報２３００は複数のプールの情報を含み得るが、図７は、一つのプールの情報を示す。プール情報２３００は、プールＩＤ２３０１、パリティグループＩＤ２３０２、容量２３０３、空き容量２３０４、を含む。
【００７４】
プールＩＤ２３０１はプールのＩＤを示す。パリティグループＩＤ２３０２は、プールを構成するパリティグループ１１５を示す。容量２３０３はプールの記憶容量を示す。空き容量２３０４は、プールの中で使用可能な記憶容量を示す。
【００７５】
図８は、ページ情報２５００の形式例を示す。ページ情報２５００は、プール内の複数のページの管理情報であるが、図８は、一つのページのページ情報を示す。ページ情報２５００は、プールＩＤ２５０１、ページポインタ２５０３、ページ番号２５０４、プールボリューム番号２５０５、ページ番号２５０６、フラッシュ側プールＩＤ２５０７、プールページのブロック番号２５０８、フラッシュ側プールブロック番号２５０９を含む。
【００７６】
プールＩＤ２５０１はこのページが所属しているプールのＩＤを示す。ページポインタ２５０３は、プール内の空きページをキュー管理するときに使用される。プールボリューム番号２５０５は、このページが含まれるプールボリュームを示す。ページ番号２５０４は、このページのプールボリューム内の番号を示す。
【００７７】
フラッシュ側プールＩＤ２５０７は、プールＩＤ２５０１が示すプールに関連づけられるフラッシュ側アドレス空間３５２を有するフラッシュ側プール３０４を示す。プール３０３及びフラッシュ側プール３０４の数がそれぞれひとつである場合、この情報は省略される。
【００７８】
ページのブロック番号２５０８は、プールアドレス空間におけるページ内のブロック番号を示す。フラッシュ側プールブロック番号２５０９は、ページのブロック番号に関連づけられたフラッシュ側プールアドレス空間のブロック番号を示す。
【００７９】
この関連付け又は割り当ては、ストレージ装置１０４の初期設定時に実施される。システム運用中に追加されたプールボリュームのページ情報２５００は、当該プールボリュームが追加された時に生成される。
【００８０】
なお、プールアドレス空間のページとフラッシュパッケージアドレス空間のページとのマッピングのためには、ページ情報２５００が、フラッシュパッケージアドレス空間のページ番号を管理すればよい。フラッシュメモリへのアクセス単位はページサイズより小さいことがほとんどであるため、本例は、ブロック単位でマッピングを管理する。セグメント単位のマッピングも、同様の方法で管理できる。
【００８１】
図９は、プール３０３にあるページの、空きページ管理ポインタ２６００の例を示す。１以上の空きページ管理ポインタ２６００が、一つのプールに対して設けられる。例えば、プールボリュームごとに空きページ管理ポインタ２６００が設けられてもよい。
【００８２】
空きページと使用不可ページはキューにより管理される。図９は、空きページ管理ポインタ２６００によって管理される空きページの集合を示す。空きページは、仮想ページに割り当てられていないページを意味する。空きページに対応したページ情報２５００を空きページ情報と呼ぶ。空きページ管理ポインタ２６００は、先頭の空きページ情報２５００のアドレスをさす。次に、先頭のページ情報２５００の中の空きページを指すページポインタ２５０３が、次の空きページ情報２５００を指す。
【００８３】
図９において、最後の空きページ情報２５００の空きページポインタ２５０３は、空きページ管理ポインタ２６００を示しているが、ＮＵＬＬでもよい。ストレージコントローラ１０９は、ページを割り当てていない仮想ページに書き込み要求を受けると、仮想ボリュームの仮想ボリュームＲＡＩＤタイプ２００３と同一タイプのパリティグループ１１５の中のいずれか、空きページ管理ポインタ２６００から探す。ストレージコントローラ１０９は、例えば、空きページ数の最も多いパリティグループ１１５の空きページを、仮想ページに割り当てる。
【００８４】
ストレージコントローラ１０９は、空きページを仮想ボリュームのページへ割り当てると、割り当てられページの一つ前の空きページのページポインタ２５０３を更新する。具体的には、ストレージコントローラ１０９は、一つ前の空きページのページ情報２５００のページポインタ２５０３を、割り当てられたページのページポインタ２５０３に変更する。ストレージコントローラ１０９は、さらに、該当するプール情報２３００の空き容量２３０４の値から割り当てられたページの容量を減算して、空き容量２３０４の値を更新する。
【００８５】
図１０は、パリティグループ情報２４００の形式一例を示す。パリティグループ情報２４００は、フラッシュ側プールアドレス空間とフラッシュパッケージアドレス空間との間のマッピングを管理する。パリティグループ情報２４００は、複数のパリティグループ１１５の情報を含み得るが、図１０は、一つのパリティグループ１１５の情報を示す。
【００８６】
パリティグループ情報２４００は、パリティグループＩＤ２４０１、ＲＡＩＤタイプ２４０２、容量２４０３、空き容量２４０４、及び、ガベージ量２４０５、フラッシュ側プールブロック番号２４０６、フラッシュパッケージＩＤ２４０７、ストライプライン番号２４０８（又はフラッシュパッケージアドレス空間のブロック番号）、再構成状態２４０９、を示す。
【００８７】
パリティグループＩＤ２４０１は、当該パリティグループ１１５の識別子を示す。ＲＡＩＤタイプ２４０２は、当該パリティグループ１１５のＲＡＩＤタイプを示す。容量２４０３はパリティグループの容量を示す。空き容量２４０４は、パリティグループの容量２４０３からにガベージ量２４０５を引いた値である。プールの空き容量２３０４は、構成するパリティグループの空き容量２４０４の合計である。
【００８８】
ガベージ量２４０５は、パリティグループの容量２４０３において、旧データが格納されており、新しいデータを格納できない容量を示す。ガベージは、フラッシュメモリのような追記型の記憶媒体に存在し、消去処理により空き領域として使用可能となる。
【００８９】
フラッシュ側プールブロック番号２４０６は、パリティグループのアドレス空間の管理単位であるブロックの番号を示す。フラッシュ側プールブロック番号２４０６は、各ストライプラインに対応するブロックの番号を示す。フラッシュパッケージＩＤ２４０７は、ブロックが格納されるフラッシュパッケージのＩＤを示す。なお、後述するように、ストライプライン再構成においてブロックが一時的にバッファに格納される場合、フラッシュパッケージＩＤ２４０７は、格納先のバッファアドレスを示す。
【００９０】
ストライプライン番号２４０８は、フラッシュパッケージアドレス空間のブロック対応する、パリティグループ内のストライプラインを示す。本例において、一つのブロックが、一つのストリップに対応する。複数のブロックが一つストリップに対応してもよい。
【００９１】
再構成状態２４０９は、各ブロックが対応する新たなストライプラインの再構成処理の状態を示す。本例において、ブロックが対応する新たなストライプラインは、当該ブロックのデータが、再構成（生成）のためにフラッシュパッケージ１１３から読み出される、新たなストライプラインである。
【００９２】
再構成状態２４０９は、新たなストライプラインの再構成処理が終了している状態（再構成済み）、再構成処理が実中の状態（再構成中）、又は、再構成処理が未だ実施されていない状態（再構成前）を示す。
【００９３】
後述するように、新たなストライプラインの再構成のため、再構成前の旧ストライプラインがパリティグループ（フラッシュパッケージ）から読み出され、消失したホストデータが復元される。さらに、その旧ストライプラインのホストデータの一部、及び、必要であればバッファ内のデータから、新たなストライプラインが生成される。
【００９４】
新たなストライプラインは、新たなパリティグループの記憶領域に上書きされる。新たなストライプラインに含まれず、次の新たなストライプラインに含まれるホストデータは、バッファに一次的に格納される。
【００９５】
本例において、ストライプライン再構成により、ストライプラインを構成するストリップ数が減少する。ブロックが格納されるフラッシュパッケージ及びストライプラインが変化し得る。各ストライプラインの再構成処理に応じて、ストレージコントローラ１０９は、パリティグループ情報２４００を更新する。
【００９６】
一つのストライプラインの再構成（新たなストライプラインの生成）が終了すると、ストレージコントローラ１０９は、対応するブロックの、フラッシュパッケージＩＤ２４０７、ストライプライン番号２４０８、再構成状態２４０９を更新する。
【００９７】
ストレージコントローラ１０９は、フラッシュパッケージＩＤ２４０７、ストライプライン番号２４０８の値を、再構成した新しいストライプラインの情報で上書きする。ブロックのデータがバッファに一次的に格納されている場合、フラッシュパッケージＩＤ２４０７はそのバッファを示し、ストライプライン番号２４０８はＮＵＬＬ値を示す。
【００９８】
全てのストライプラインの再構成が終了すると、ストレージコントローラ１０９は、パリティグループ情報２４００における未更新の情報（ＲＡＩＤタイプ２４０２、容量２４０３等）を更新し、再構成後のＲＡＩＤ構成が確定する。
【００９９】
図１１は、フラッシュパッケージ情報２７００の形式例を示す。フラッシュパッケージ情報２７００は、フラッシュパッケージアドレス空間とフラッシュメモリのアドレス空間のマッピングを管理する。フラッシュパッケージ情報２７００は、各フラッシュパッケージ内で管理され、メモリ２１４に格納される。ストレージコントローラ１０９からはアクセスされない。
【０１００】
フラッシュパッケージ情報２７００は、フラッシュパッケージＩＤ２７０１、パリティグループＩＤ２７０２、容量２７０３、空き容量２７０４、フラッシュパッケージアドレス空間のブロック番号２７０５、フラッシュメモリアドレス空間のブロック番号２７０６を示す。
【０１０１】
フラッシュパッケージＩＤ２７０１は当該フラッシュパッケージ１１３のＩＤを示す。パリティグループＩＤ２７０２は、当該フラッシュパッケージ１１３が属するパリティグループ１１５を示す。容量２７０３は当該フラッシュパッケージ１１３（フラッシュメモリ）の実容量を示す。フラッシュパッケージアドレス空間の拡張によって、容量２７０３の値は変化しない。
【０１０２】
空き容量２７０４は、データを書き込むことができる領域の実容量を示す。空き容量は、容量２７０３の値から、データを格納する領域の容量とガベージの容量を引いた値を示す。ガベージのデータ消去により、空き容量２７０４の値は増加する。
【０１０３】
フラッシュパッケージアドレス空間のブロック番号２７０５は、フラッシュパッケージの容量をブロック単位で管理するアドレス空間の番号である。フラッシュメモリアドレス空間のブロック番号２７０６は、フラッシュメモリの容量をブロック単位で管理するアドレス空間の番号である。
【０１０４】
フラッシュメモリアドレス空間のブロック番号２７０６は、フラッシュパッケージアドレス空間のブロック番号２７０５に関連付けられた物理的なフラッシュメモリの格納位置を示す情報である。フラッシュパッケージアドレス空間の空きブロックに最初にデータが格納されるときに、そのブロック番号に、当該データを実際に格納するフラッシュメモリアドレス空間のブロック番号が割り当てられる。
【０１０５】
（５）ストライプライン再構成
図１２は、ストライプラインの再構成の処理の例を示す。図１２は、パリティストリップの数が一つであるＲＡＩＤタイプの例を示す。ストレージコントローラ１０９は、フラッシュパッケージ１１３からパリティグループを生成する。各フラッシュパッケージ１１３の内部回路は、冗長構成を有する。フラッシュパッケージ１１３内の障害は、フラッシュパッケージ１１３により解決される。フラッシュパッケージ１１３が解決できない障害が発生すると、ストレージコントローラ１０９がそれを解決する。
【０１０６】
ストレージコントローラ１０９は、パリティグループを構成するフラッシュパッケージ１１３の情報を管理すると共に、パリティグループに含まれるストライプラインを管理する。ストライプライン再構成はストレージコントローラ１０９により制御される。ストレージコントローラ１０９は、実行中のストライプライン再構成を管理するため、ストライプライン番号カウンタ（ストライプライン番号Ｃ）を使用する。カウンタは、例えば、共有メモリ１１１内に構成される。
【０１０７】
ストライプライン番号Ｃは、再構成処理の対象である旧ストライプライン（再構成前のストライプライン）の番号を示す。本例において、ストレージコントローラ１０９は、一つのストライプラインの再構成が終了すると、ストライプライン番号Ｃをインクリメントする。再構成は、パリティグループのアドレス空間（フラッシュパッケージアドレス空間）においてアドレスの昇順に実行される。
【０１０８】
まず、ストレージコントローラ１０９は、ストライプライン番号Ｃに初期値０を設定する（Ｓ１５１０）。ストレージコントローラ１０９は、ストライプライン番号Ｃのストライプ（旧ストライプ）を構成するストリップを、パリティグループから選択する。ストライプラインを順次処理により、再構成に必要なメモリ容量を削減する。ストレージコントローラ１０９は、選択したストライプのブロックの再構成状態２４０９の値を「再構成中」に変更する。後述するように、新たなストライプラインのストリップ数は、再構成前のストリップ数よりも少ない所定数である。
【０１０９】
ストレージコントローラ１０９は、ストライプラインのホストデータ及びパリティを読み出すために、リードコマンドを発行する（Ｓ１５１２）。ホストデータが格納されている正常フラッシュパッケージ１１３は、ホストデータをストレージコントローラ１０９へ応答する（Ｓ１５１４）。パリティが格納されているフラッシュパッケージ１１３は、パリティをストレージコントローラ１０９へ応答する（Ｓ１５１５）。
【０１１０】
ストレージコントローラ１０９は、障害ストリップにホストデータが格納されているか判定する（Ｓ１５１６）。ストライプラインのパリティは規則的に配置されているため、ストライプライン番号からホストデータが格納されているフラッシュパッケージ番号が算出される。
【０１１１】
ホストデータが格納されている場合（Ｓ１５１６：ＹＥＳ）、ストレージコントローラ１０９は、ストレージコントローラ１０９は、受け取ったホストデータ及びパリティデータから、障害ドライブに格納されていた消失データを復元する（Ｓ１５２０）。
【０１１２】
格納されているものがパリティの場合（Ｓ１５１６：ＮＯ）、ストライプライン再構成においてパリティが再計算されるため、消失したパリティの復元は不要である。ストレージコントローラ１０９は、Ｓ１５２１へ進む。
【０１１３】
図１３Ａ、１３Ｂは、ホストデータの復元の例を示す。図１３Ａ、１３Ｂは、７Ｄ＋１ＰのＲＡＩＤタイプにおける障害の例を示す。図１３Ａは再構成前の状態を示し、図１３Ｂは再構成後の状態を示す。フラッシュパッケージ内のメモリアドレス空間４０２＿１〜４０２＿８をそれぞれ持つ８台のフラッシュパッケージ１１３がパリティグループを構成している。
【０１１４】
ストライプライン４０３＿１では、ホストデータＤｎがメモリアドレス空間４０２＿ｎ内に格納される。ｎ＝１から７のいずれかである。パリティＰは、メモリアドレス空間４０２＿８内に格納される。パリティＰは、ホストデータＤ１〜Ｄ８から生成される。
【０１１５】
ホストデータＤ１が格納されているメモリアドレス空間４０２＿１のフラッシュパッケージ１１３で障害が起きた場合、ストレージコントローラ１０９は、同一ストライプラインのホストデータＤ２〜Ｄ７及びパリティＰを読み出し（４１０）、ホストデータＤ１を復元する（４２０）。
【０１１６】
図１２に戻って、次に、ストレージコントローラ１０９は、ストライプラインを再構成する。ストレージコントローラ１０９は、新しいストライプラインのホストストリップのデータを決定する。
【０１１７】
バッファ（図１４Ａ、１４Ｂに示すバッファ４０５）に直前の旧ストライプラインのホストデータが格納されている場合、そのホストデータと現在の旧ストライプラインの一部のホストデータが、新ストライプラインに格納される。バッファにデータが格納されていない場合、現在の旧ストライプラインの一部のホストデータのみが新ストライプラインに格納される。ストレージコントローラ１０９は、パリティグループ情報２４００のフラッシュパッケージＩＤ２４０７を参照して、バッファ内のホストデータを知ることができる。
【０１１８】
ストレージコントローラ１０９は、新ストライプラインのパリティを再計算する。ストレージコントローラ１０９は、算出したパリティを、パリティを格納するフラッシュパッケージ１１３に書き込む。
【０１１９】
一例において、パリティライトコマンドがフラッシュパッケージ１１３に対して定義される。ストレージコントローラ１０９は、パリティライトコマンドによりフラッシュパッケージ１１３を制御することで、新パリティを生成し、フラッシュパッケージ１１３に書き込む。
【０１２０】
具体的には、ストレージコントローラ１０９は、パリティライトコマンドを、パリティ生成のためのデータと共に、新しいストライプラインのパリティを格納するフラッシュパッケージ１１３へ発行する（Ｓ１５２２）。
【０１２１】
パリティライトコマンドは、フラッシュパッケージアドレス空間における範囲（アドレス）を指定する。パリティライトコマンドを受信したフラッシュパッケージ１１３は、受け取ったデータのＸＯＲ演算を行い、新パリティを計算する（Ｓ１５２４）。フラッシュパッケージ１１３は、指定されたアドレス（から計算したフラッシュメモリ空間のアドレス）に、そのアドレスに計算した新パリティを格納する（Ｓ１５２６）。パリティライトコマンドを受信したフラッシュパッケージ１１３は、パリティライトコマンドに対して、ストレージコントローラ１０９へ応答を返す（Ｓ１５２８）。
【０１２２】
ストレージコントローラ１０９は、ストライプラインのホストデータを格納するフラッシュパッケージ１１３群にライトコマンドを発行する。フラッシュパッケージ１１３はそれぞれホストデータを格納し（Ｓ１５３２）、ライトコマンドに対して、ストレージコントローラ１０９へ応答を返す（Ｓ１５３４）。
【０１２３】
ストレージコントローラ１０９は、パリティグループ情報２４００の情報を更新する。具体的には、ストレージコントローラ１０９は、再構成状態２４０９において、新たに読み出したデータブロックの「再構成中」の値を「再構成済み」に変更する。
【０１２４】
さらに、ストレージコントローラ１０９は、新たにバッファ又はフラッシュパッケージ１１３に格納したデータブロックについて、フラッシュパッケージＩＤ２４０７、ストライプライン番号２４０８の値を更新する。フラッシュパッケージＩＤ２４０７及びストライプライン番号２４０８において、バッファに格納されたデータブロックの値は、バッファアドレス及びＮＵＬＬ値を示す。
【０１２５】
バッファ内に新たなストライプラインを再構成するための全ホストデータが格納されている場合、ストレージコントローラ１０９は、当該ホストデータ及び新パリティを、新ストライプラインに格納する。さらに、ストレージコントローラ１０９は、パリティグループ情報２４００の情報を更新する。
【０１２６】
最後に、ストレージコントローラ１０９は、ストライプライン番号Ｃをインクリメントし、次のストライプライン番号に対して処理を続ける（Ｓ１５３６）。なお、ストレージコントローラ１０９は、自装置で算出したパリティを、ライトコマンドにてフラッシュパッケージ１１３に書き込んでもよい。
【０１２７】
図１３Ａ、１３Ｂの構成例において、ストレージコントローラ１０９は、ＲＡＩＤタイプを７Ｄ＋１Ｐから６Ｄ＋１Ｐに変更する。新しいパリティＮＰは、ホストデータＤ１〜Ｄ６とパリティＰから生成される（４３０）。ＲＡＩＤタイプを変更するために、ストレージコントローラ１０９は、ホストデータとパリティを、フラッシュパッケージに格納し直す。
【０１２８】
ストライプライン４０３＿２に対して、ストレージコントローラ１０９は、ホストデータＤ１〜Ｄ６はメモリアドレス空間４０２＿２〜４０２＿７に格納し、新パリティＮＰを、メモリアドレス空間４０２＿８に格納する。
【０１２９】
次に、ストレージコントローラ１０９は、ホストデータＤ７〜Ｄ１２とパリティＰからストライプライン４０３＿２を作成する。ストライプライン４０３＿２に対して、ストレージコントローラ１０９は、ホストデータＤ７〜Ｄ１２から新パリティＮＰを作成し、フラッシュパッケージアドレス空間それぞれに格納する。
【０１３０】
１パリティサイクル４０４は、パリティ位置が異なる全てのストライプラインで構成される。図１３Ａ、１３Ｂに示すように、ストライプラインのパリティ位置は、ストライプライン番号（アドレス）に対して規則的に変化する。つまり、ストライプラインは、パリティ位置に応じて、周期的に配列される。パリティグループにおいて、同一構成のパリティサイクル（ストライプライン群）が、配列される。
【０１３１】
例えば、７Ｄ＋１ＰのＲＡＩＤタイプに対して、１パリティサイクルは８ストライプラインで構成され、６Ｄ＋１ＰのＲＡＩＤタイプに対して、１パリティサイクルは７ストライプラインで構成される。後述するように、１ページがＮ（Ｎは自然数）個のパリティサイクルに対応する。
【０１３２】
図１４Ａ、１４Ｂは、リビルド中のパリティグルームにおけるデータ状態を示す。リビルド中、パリティグループ内に、再構成済みの新ストライプラインと、再構成前の旧ストライプラインとが、混在する。
【０１３３】
図１４Ａにおいて、ホストデータＤ１〜Ｄ６及び新パリティＮＰからなるストライプラインは、既に、再構成されている。データＤ７以降のストライプラインは、再構成前である。メモリアドレス空間４０２＿８に格納されていたホストデータＤ７は上書きされるため、ストレージコントローラ１０９は、上書きされる前に退避するために当該データをバッファ４０５にして格納しておく。これにより、次のストライプ再構成におけるパリティグループからのデータ読み出しを省略する。バッファ４０５は、例えば、共有メモリ１１１に構成される。
【０１３４】
図１４Ｂに示すように、ストライプライン再構成処理が進み、ホストデータＤ１８まで完了したとき、バッファ４０５は、ホストデータＤ１９〜Ｄ２１を格納している。ストライプライン再構成において、ストライプラインにホストデータが格納されていない場合、即ち０データが格納されている場合、データ復元は不要である。Ｓ１５１２において、ストレージコントローラ１０９は、ストライプラインのパリティが０であるか判定し、パリティが０であれば全データが０であると判定して、Ｓ１５２２へ進むことができる。
【０１３５】
図１５は、ＲＡＩＤ再構成中に、ライトコマンドを受けた場合の処理を示す。ストレージコントローラ１０９は、ホスト計算機１０１からライトコマンドを受ける（Ｓ１２１０）。ストレージコントローラ１０９は、受けたライトコマンドは、以前ライトコマンドを受けたことがあるアドレスへの上書きか判定する（Ｓ１２１２）。
【０１３６】
ライトコマンドが上書きの場合（Ｓ１２１２：ＹＥＳ）、ストレージコントローラ１０９はＳ１２１４へ進み、そうでない場合（Ｓ１２１２：ＮＯ）、即ち、初めてのライトの場合、ストレージコントローラ１０９は、Ｓ１２４４へ進む。
【０１３７】
ライト対象のデータが格納されるページにプールから実ページが既に割り当たっていなければ、ストレージコントローラ１０９は、プールから実ページを割り当て（Ｓ１２４４）、ストレージコントローラ１０９は、データをライトする（Ｓ１２４６）。実ページが割り当たっているパリティグループ内でパリティを生成する（Ｓ１２４８）。
【０１３８】
ステップ１２１４において、ストレージコントローラ１０９は、ライトコマンド対象箇所が、再構成中のストライプライン内のデータであるか判定する。具体的には、ストレージコントローラ１０９は、仮想ボリューム情報２０００及びページ情報２５００を参照して、ライトコマンドの指定アドレスに対応するフラッシュ側プールブロック番号を特定する。
【０１３９】
フラッシュ側プールブロック番号に対応するストライプライン再構成状態は、パリティグループ情報２４００に示されている。ストライプライン再構成前、具体的には、Ｓ１５２０より前の場合、ストレージコントローラ１０９は、消失データを復元してから（Ｓ１２１８）、データのライト処理を行う（Ｓ１２２０）。復元前にデータをライトすると、消失データ以外のデータが書き換えられるため、消失データを復元することができなくなるからである。
【０１４０】
ライト処理の後、ストレージコントローラ１０９は、パリティ再計算を行い、パリティを格納する（Ｓ１２２２）。パリティ再計算は、ストライプライン再構成前のストライプライン（旧ストライプライン）に対して実行される。
【０１４１】
ストレージコントローラ１０９は、残りのホストデータとパリティを使って、消失データを復元する。次に、ストレージコントローラ１０９は、ライトコマンドの対象箇所のデータに、新ライトデータを上書きする。ストレージコントローラ１０９は、復元したデータ、新ライトデータ、残りのデータから、新パリティを生成する。
【０１４２】
例えば、図１４Ａで、ストレージコントローラ１０９は、ホストデータＤ８を復元し、ホストデータＤ１０にライトデータ（ホストデータ）Ｄ１０´を上書きし、ホストデータＤ８、Ｄ９、Ｄ１０´、Ｄ１１、Ｄ１２、Ｄ１３、Ｄ１４から、新パリティＰ´を生成する。
【０１４３】
ライトコマンドに対象領域を含むストライプラインの再構成前ではない場合（Ｓ１２１４：ＮＯ）、ストレージコントローラ１０９は、ストライプラインが再構成中か判定する（Ｓ１２３０の）。具体的には、ストレージコントローラ１０９は、再構成状態２４０９が「再構成中」を示すか判定する。
【０１４４】
ストライプラインが再構成中の場合（Ｓ１２３０：ＹＥＳ）、ストレージコントローラ１０９は、予め設定された時間だけ待機し（Ｓ１２３２）、Ｓ１２３０の判定を再実行する。データ復元後、ストライプが再構成され、再構成状態２４０９の値は、「再構成済み」に変化する。
【０１４５】
ライトコマンドの対象領域が再構成済みのストライプラインに含まれる場合、具体的には、再構成状態２４０９が「再構成済み」を示す場合（Ｓ１２３０：ＮＯ）、ストレージコントローラ１０９は、Ｓ１２３８へ進む。ストレージコントローラ１０９は、再構成後のストライプラインにおける対象領域にデータをライトし（Ｓ１２３８）、ライトした結果を用いてパリティを更新する（Ｓ１２４０）。
【０１４６】
なお、ライトコマンドの対象領域が再構成済みであって、対象領域の旧データがバッファに格納されている場合、ストレージコントローラ１０９は、バッファの旧データに新データを上書きする。パリティの更新は、対象領域が含まれるストライプラインの再構成において実行される。
【０１４７】
他の例は、ライト対象領域が含まれるストライプラインが再構成中の場合、そのストライプライン再構成が完了するまでライトを受け付けずエラーを返す、又は、エラーと共にストライプライン再構成中である情報を返してもよい。ホストは、エラーに応答して、又は、ストライプライン再構成の完了を待って、ライトコマンドを再発行する。
【０１４８】
上述のように、ストレージコントローラ１０９は、少ないドライブ数でパリティグループ（ＲＡＩＤ構成）を再構成することで、スペアドライブを使用することなく、ドライブ障害による消失データを復元することができる。データ復元後のＲＡＩＤ構成の冗長度を、データ復元前のＲＡＩＤ構成の冗長度と同じにすることで、データ復元後の信頼性の低下を抑制できる。冗長度は、ストライプラインにおいて同時に復元できるストリップ数に一致する。また、データ復元後のＲＡＩＤレベル（例えば、ＲＡＩＤ１、ＲＡＩＤ４、ＲＡＩＤ５、ＲＡＩＤ６等）を、データ復元前のＲＡＩＤレベルと同じにすることで、データ復元後の信頼性の低下を抑制できる。
【０１４９】
例えば、ストレージコントローラ１０９は、７Ｄ＋１ＰのＲＡＩＤ構成における一つの記憶ドライブで障害が発生した場合、ＲＡＩＤタイプを６Ｄ＋１Ｐに変更して、消失データを復元する。消失データの復元前後において、冗長度及びＲＡＩＤレベルが維持される。本実施例のリビルドは、任意のＲＡＩＤタイプに適用でき、例えば、３Ｄ＋１Ｐ構成（ＲＡＩＤ５）、７Ｄ＋１Ｐ構成（ＲＡＩＤ５）、２Ｄ＋２Ｄ構成（ＲＡＩＤ１）、４Ｄ＋４Ｄ構成（ＲＡＩＤ１）、６Ｄ＋２Ｐ構成（ＲＡＩＤ６）、１４Ｄ＋２Ｐ構成（ＲＡＩＤ６）に適用できる。
【０１５０】
一例において、ストレージコントローラ１０９は、リビルド（ストライプライン再構成）前後において、整数個のパリティサイクルが１ページに対応するように、ＲＡＩＤタイプを変更する。これにより、ストライプライン再構成の前後において、１サイクルがページ境界をまたがることがなく、１ページとパリティサイクルをアラインする。これにより、１サイクルがページ境界をまたがることによる、アクセス経路に依存したオーバヘッドの増加や、障害が起こった場合の性能低下を回避できる。
【０１５１】
例えば、７Ｄ＋１Ｐ構成において、８ストライプライン（５６ホストストリップ）が１パリティサイクルを構成し、６Ｄ＋１Ｐ構成において、７ストライプライン（４２ホストストリップ）が１パリティサイクルを構成する。１ページが、例えば、１６８のホストストリップで構成される場合、双方のＲＡＩＤタイプにおいて、サイクルとページの境界が一致する。１６８は、５６と４２の最小公倍数である。
【０１５２】
１ページが１６８ホストストリップで構成される場合、３Ｄ＋１Ｐ構成と２Ｄ＋１Ｐ構成の双方のＲＡＩＤタイプにおいて、サイクルとページの境界が一致する。ストレージコントローラは、通常状態において、ユーザ選択に応じて７Ｄ＋１Ｐ又は３Ｄ＋１Ｐのパリティグループを構成し、ドライブ障害に対して、パリティグループの構成を６Ｄ＋１Ｐ又は２Ｄ＋１Ｐに変更する。
【０１５３】
同様に、ストレージコントローラ１０９は、ドライブ障害に対して、６Ｄ＋２Ｐ構成を、例えば、４Ｄ＋２Ｐ構成に変更することができ、１４Ｄ＋２Ｐ構成を、例えば、１２Ｄ＋２Ｐ構成に変更することができる。変更後の１台の記憶ドライブは、スペアドライブとして使用される。
【０１５４】
一例において、６Ｄ＋２Ｐ構成において、８ストライプライン（４８ホストストリップ）が１パリティサイクルを構成し、４Ｄ＋２Ｐ構成において、６ストライプライン（２４ホストストリップ）が１パリティサイクルを構成する。１ページが、例えば、４８のホストストリップで構成される場合、双方のＲＡＩＤタイプにおいて、サイクルとページの境界が一致する。
【０１５５】
以上のように、ドライブ障害に対する特定のＲＡＩＤタイプ間の変更及び特定のページサイズによって、容量仮想化機能で制御するページ構造を維持し、既存容量仮想化機能をそのまま継続使用できる。なお、ユーザの指定によって、ストライプライン再構成後の冗長度及び／又はＲＡＩＤレベルは、ストライプライン再構成前から変化可能としてもよい。
【０１５６】
（６）状態遷移
図１６は、ストライプライン再構成における状態遷移図を示す。図１６は、通常稼動中のＲＡＩＤタイプが７Ｄ＋１Ｐである例を示す。通常状態５１０は、７Ｄ＋１Ｐにおいて通常稼動している状態である。ストレージ装置１０４は、１台のドライブ故障（５１２）により、通常状態５１０から、１台目故障中状態５２０に遷移する。１台目故障中状態５２０において、ストライプライン（ＲＡＩＤ構成）は、７Ｄ＋１Ｐから６Ｄ＋１Ｐへ再構成中（過渡中）である。
【０１５７】
ストレージ装置１０４は、１台目故障中状態５２０から、ストライプライン再構成（リビルド５２４）が終了した後、ストライプライン再構成状態５３０に遷移する。ストレージ装置１０４は、さらに１台のドライブ故障（５３４）により、ストライプライン再構成状態５３０から２台目故障中状態５４０に遷移する。ストレージ装置１０４は、この状態で稼動しつつ、ドライブ交換（５４２）を待つ。２台目故障中状態５４０から更なるドライブ障害（５４４）があった場合、ストレージ装置１０４は、データ復元不可能な状態５５０に遷移する。
【０１５８】
ストライプライン再構成状態５３０においてドライブ交換（５３２）された場合、ストレージ装置１０４は通常状態５１０に戻る。１台目故障中状態５２０でドライブ交換（５２２）された場合、ストレージ装置１０４は通常状態５１０に戻る。１台目故障中（７Ｄ＋１Ｐ−１）５２０状態において、さらにドライブ障害（５２６）が発生すると、ストレージ装置１０４は、データ復元できない状態５５０となる。
【０１５９】
図１６において、ストライプライン再構成状態５３０が、通常稼動中の状態であるとする。１台のドライブの増設により、ストレージ装置１０４は、７Ｄ＋１Ｐの状態５１０に遷移できる。即ち、記憶ドライブを１台ずつ増設することが可能である。
【０１６０】
障害ドライブが新しいドライブに交換されると、ストレージ装置１０４は、元のＲＡＩＤタイプの構成に戻る。ストレージ装置１０４は、ストライプラインを再構成し、データを格納し直す。この処理は、図１２を参照して説明した処理と略同様であり、図１２の処理におけるデータ復元処理が省略される。
【０１６１】
（７）空き容量管理
ストレージ装置１０４はスペアドライブを持たないため、パリティグループ内でドライブ障害時のリビルドに必要な空き領域を確保できるように、記憶領域の空き容量を管理する。図１７Ａ〜１７Ｄは、パリティグループにおける空き領域の例を示す。
【０１６２】
図１７Ａ、１７Ｂは、障害発生前のパリティグループの状態を示す。パリティグループは、４台の記憶ドライブ６１２で構成されている。スペアドライブは用意されていない。ボリューム（又はパーティション）６０３＿１、６０３＿２が形成されている。図１７Ａにおいて、各ボリュームにおいて空き領域６０４が確保されている。図１７Ｂにおいて、空きボリュームが空き領域６０４として確保されている。
【０１６３】
図１７Ｃは、図１７Ｂの構成において、一つの記憶ドライブで障害が発生したことを示す。図１７Ｄは、リビルド後のパリティグループの状態を示す。障害ドライブを除いた３台お記憶ドライブ（新たしいパリティグループ）において、新たなボリューム６０５＿１、６０５＿２が作成されている。
【０１６４】
スペアドライブを不要とするためには、リビルドのための空き領域を常に確保する必要がある。この確保すべき空き領域の容量は、例えば、使用可能な容量に対して予め設定した割合である。この容量は仮想容量ではなく、実容量である。
【０１６５】
ストレージ装置１０４が仮想ボリューム（ＴＰＶＯＬ）を提供する場合、ストレージ装置１０４は、プールの空き容量を監視する。ストレージ装置１０４は、プール及びリビルドのために必要な空き容量を維持できるように、パリティグループの容量を管理する。
【０１６６】
図１８は、空き容量監視処理のフローチャートを示す。本例において、ストレージコントローラ１０９が空き容量監視処理を実行するが、ストレージコントローラ１０９に代わり、管理装置１０２が空き容量を管理してもよい。
【０１６７】
空き容量監視処理は、例えば、予め設定した時間間隔で実行される、又は、仮想ボリュームへの新たな実ページの割り当ての時に実行される。プール空き容量が不足していると判定した場合、ストレージコントローラ１０９は、新たな空き容量を確保する。
【０１６８】
まず、コントローラ１０９は、プール空き容量が閾値１より少ないか否か判定する（Ｓ１３１０）。閾値１は予め設定されており、容量仮想化機能に必要な空き容量の最小値とリビルドに必要な空き容量の最小値の合計値を示す。コントローラ１０９は、プールのプール情報２３００の空き容量２３０４を参照して、プール空き容量を決定する。
【０１６９】
プール空き容量が閾値１より少ない場合（Ｓ１３１０：ＹＥＳ）、ストレージコントローラ１０９は、プール空き容量が閾値１に対して不足する量のガベージが、パリティグループ内にあるか否か判定する（Ｓ１３１２）。ストレージコントローラ１０９は、パリティグループ情報２４００のガベージ量２４０５を参照する。
【０１７０】
プール空き容量が閾値１に対して不足する量のガベージ量が無い場合（Ｓ１３１２：ＹＥＳ）、ストレージコントローラ１０９は、記憶容量そのものが不足していることをシステム管理者及びユーザに知らせる（Ｓ１３１４）。ストレージコントローラ１０９は、例えばエラーメッセージを管理装置１０２に出力する。
【０１７１】
プール空き容量が閾値１に対して不足する量のガベージ量が存在する場合（Ｓ１３１２：ＮＯ）、ストレージコントローラ１０９は、ガベージコレクション処理を行う（Ｓ１３１６）。具体的には、ストレージコントローラ１０９は、フラッシュパッケージ１１３にガベージコレクションを指示する。
【０１７２】
フラッシュパッケージ１１３は、データを新しく空き領域へ書き込む追記処理を実行する。このため、前回データが書き込まれた領域は、データを書き込めないガベージとして蓄積していく。フラッシュパッケージ１１３は、ガベージを空き領域へ変換するための消去処理を行い、その後、ガベージだった容量をプール空き容量に加算する（Ｓ１３１８）。
【０１７３】
ストレージコントローラ１０９は、パリティグループのガベージ量及びアクセス頻度に基づいて、ガベージコレクション処理を制御する。プール空き容量が十分確保されているが、ガベージ量が閾値２（予め設定した値）より多い場合（Ｓ１３２０：ＹＥＳ）、ストレージコントローラ１０９は、ガベージコレクション処理を行う（Ｓ１３１６）。
【０１７４】
ガベージ量が閾値２以下であるが（Ｓ１３２０：ＮＯ）、パリティグループへのアクセス頻度が閾値３より低い場合（Ｓ１３２２：ＹＥＳ）、ストレージコントローラ１０９は、ガベージコレクション処理を行う（Ｓ１３１６）。ストレージコントローラ１０９は、不図示の管理情報において、パリティグループへのアクセス頻度を管理する。ストレージコントローラは、所定時間の経過を待ち（Ｓ１３２４）、本処理を再開する。
【０１７５】
なお、Ｓ１３２０及びＳ１３２２は省略してもよい。その場合、Ｓ１３１０の判定結果が「ＮＯ」である場合、本フローチャートの処理は終了する。空き容量は、管理装置１０２によって監視されてもよい。空き容量が少ないと判定した場合、管理装置１０２は、ストレージコントローラ１０９へ、空き領域を確保するための処理を指示する、又は、空き領域が少ないことを通知する。
【０１７６】
フラッシュパッケージ１１３は、容量仮想化機能や圧縮機能を有してもよい。ストレージコントローラ１０９が認識するフラッシュパッケージアドレス空間の容量は、フラッシュパッケージ内の実容量より大きい、つまり仮想的な値となり得る。各フラッシュパッケージ内の実容量を監視する必要がある。一つの方法は、ストレージコントローラ１０９がフラッシュパッケージ１１３から実容量の情報を取得する。これにより、実際使用している物理的な容量及び空き容量を管理できる。
【０１７７】
リビルドに必要な容量（スペアドライブ容量）は、運用開始時から確保しておく必要がある。オペレータは、初期設定時、実際の搭載容量からリビルド用の容量を除外した容量を元に、容量仮想化機能を持つ仮想ボリュームのサイズを定義する。
【０１７８】
図１９Ａ、１９Ｂは、１４Ｄ＋２Ｐ（ＲＡＩＤ６）構成のパリティグループの状態遷移の例を示す。図１９Ａは、ドライブ故障による状態遷移を示し、図１９Ｂはドライブ交換による状態遷移を示す。状態７１０、７５０、及び７９０は、要求された冗長度を有する。
【０１７９】
図１９Ａにおいて、状態７１０は、１４Ｄ＋２Ｐ構成において運用している状態である。１台の記憶ドライブが故障すると、ストレージ装置１０４は、状態７２０に遷移する。さらに、記憶ドライブの故障数が増加すると、ストレージ装置１０４は、状態７３０、７４０へ遷移する。３台の記憶ドライブが故障した状態７４０において、復旧（運用継続）は不可能である。
【０１８０】
１台の記憶ドライブが故障した状態７２０において、ストレージ装置１０４がストライプライン再構成（リビルド）を実行し、状態７５０に遷移する。パリティグループは、１２Ｄ＋１Ｐ構成を有する。１台の記憶ドライブはスペアドライブとして使用される。
【０１８１】
１２Ｄ＋１Ｐ構成において運用中の状態７５０において、さらに１台の記憶ドライブが故障すると、ストレージ装置１０４は、状態７６０に遷移する。さらに記憶ドライブの故障数が増加すると、ストレージ装置１０４は、状態７７０、７８０へ遷移する。１２Ｄ＋１Ｐ構成において３台（トータル４台）の記憶ドライブが故障している状態７８０において、復旧（運用継続）は不可能である。
【０１８２】
１４Ｄ＋２Ｐ構成において運用中に、２台の記憶ドライブが故障している状態７３０において、ストレージ装置１０４がストライプライン再構成（リビルド）を実行し、状態７９０に遷移する。パリティグループは、１２Ｄ＋１Ｐ構成を有し、スペアドライブは用意されていない。
【０１８３】
状態７９０においてさらに１台の記憶ドライブが故障すると、ストレージ装置１０４は、状態８００に遷移する。さらに記憶ドライブの故障数が増加すると、ストレージ装置１０４は、状態８１０、８２０へ遷移する。１２Ｄ＋１Ｐ構成において３台（トータル５台）の記憶ドライブが故障した状態８２０において、復旧（運用継続）は不可能である。
【０１８４】
１２Ｄ＋２Ｐ構成において運用中に、１台（トータル２台）の記憶ドライブが故障している状態７６０において、ストレージ装置１０４が、故障記憶ドライブの消失データをスペアドライブに復元し（コレクション）、ストレージ装置１０４は、状態７９０に遷移する。
【０１８５】
１２Ｄ＋２Ｐ構成において運用中に、２台（トータル３台）の記憶ドライブが故障している状態７７０において、ストレージ装置１０４が１台の記憶ドライブの消失データをスペアドライブに復元し（コレクション）、ストレージ装置１０４は、状態８００に遷移する。
【０１８６】
以上のように、ストライプライン再構成の前後において、同一のドライブ故障数に対応することができる。図１９Ｂは、ドライブ交換による状態遷移を示す。復旧不可能な状態７４０、７８０、８２０以外の状態から、特定数の故障ドライブを正常ドライブに交換することで、要求されている冗長度の状態７１０、７５０又は７９０に、ストレージ装置１０４は遷移することができる。
【０１８７】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１８８】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１】
2018138813.tif 000003
【図２】
2018138813.tif 000004
【図３】
2018138813.tif 000005
【図４】
2018138813.tif 000006
【図５】
2018138813.tif 000007
【図６】
2018138813.tif 000008
【図７】
2018138813.tif 000009
【図８】
2018138813.tif 000010
【図９】
2018138813.tif 000011
【図１０】
2018138813.tif 000012
【図１１】
2018138813.tif 000013
【図１２】
2018138813.tif 000014
【図１３Ａ】
2018138813.tif 000015
【図１３Ｂ】
2018138813.tif 000016
【図１４Ａ】
2018138813.tif 000017
【図１４Ｂ】
2018138813.tif 000018
【図１５】
2018138813.tif 000019
【図１６】
2018138813.tif 000020
【図１７Ａ】
2018138813.tif 000021
【図１７Ｂ】
2018138813.tif 000022
【図１７Ｃ】
2018138813.tif 000023
【図１７Ｄ】
2018138813.tif 000024
【図１８】
2018138813.tif 000025
【図１９Ａ】
2018138813.tif 000026
【図１９Ｂ】
2018138813.tif 000027
【国際調査報告】
2018138813.tif 000028
2018138813.tif 000029
2018138813.tif 000030
2018138813.tif 000031