(57)【特許請求の範囲】
【請求項１】
複数のストレージ装置に接続されたインターフェース手段と、
前記インターフェース手段に接続された制御手段と
を有し、
前記複数のストレージ装置の各々は、複数のストライプ列を構成する複数のストライプを有し、
前記複数のストライプ列の各々は、２以上のストレージ装置がそれぞれ有する２以上のストライプの列であり、
前記複数のストライプ列の各々は、複数のデータ要素と少なくとも１つの冗長コードとを格納するようになっており、所定の許容数までのストレージ装置が故障した場合に、その故障したストレージ装置のストライプにあるデータ要素を復元することができる構成であり、
前記ストレージ装置の数は、１つのストライプ列を構成するストライプの数よりも多く、
前記制御手段は、
前記複数のストライプ列から少なくとも２つの障害ストライプ列を検出し、前記少なくとも２つの障害ストライプ列の各々は、前記所定の許容数までの障害ストライプを含んだストライプ列であり、前記障害ストライプは、故障したストレージ装置におけるストライプであり、
前記検出した少なくとも２つの障害ストライプ列における複数の障害ストライプ内の複数のデータ要素であって、その少なくとも２つの障害ストライプ列を有する複数のストレージ装置内の複数のデータ要素を、並行して、復元し、
前記少なくとも２つの障害ストライプ列のうち、障害ストライプの数がなるべく多い障害ストライプ列内の障害ストライプにおけるデータ要素が、前記少なくとも２つの障害ストライプ列のうちの他の障害ストライプ列内の障害ストライプにおけるデータ要素よりも優先して復元される、
ストレージシステム。
【請求項２】
前記複数のストレージ装置は、それぞれ、記憶メディアである、
請求項１に記載のストレージシステム。
【請求項３】
前記インターフェース手段が、バッファを有し、
前記制御手段は、所定の復元対象のデータ要素を復元するために必要な復元用データを１以上の前記ストレージ装置から取得して、前記バッファに格納し、
前記制御手段は、（Ａ）前記バッファに格納された前記復元用データをいずれかの前記ストレージ装置に送信して、前記ストレージ装置により、前記復元対象のデータ要素を復元させ、又は、（Ｂ）前記バッファに格納された前記復元用データに基づいて、前記インターフェース手段に前記復元対象のデータ要素を復元させ、復元させた前記データ要素をいずれかの前記ストレージ装置に格納させる
請求項１に記載のストレージシステム。
【請求項４】
前記複数のストレージ装置は、複数のグループに分割されて前記インターフェース手段に接続され、同一のグループに属する前記ストレージ装置同士はお互いに通信可能であり、
前記制御手段は、前記復元対象のデータ要素を格納した同一のストライプ列における１以上のデータ要素を格納するストレージ装置が属する１以上の第１のグループに属するいずれかのストレージ装置に、（Ｃ）前記復元対象のデータ要素を格納した同一のストライプ列における１以上のデータ要素を収集させ、収集させた１以上の前記データ要素に基づいて復元用データを生成させる
請求項３に記載のストレージシステム。
【請求項５】
前記制御手段は、前記第１のグループの前記復元対象のデータ要素を格納した同一のストライプ列における１以上のデータ要素を格納するストレージ装置に、前記（Ｃ）を実行させる
請求項４に記載のストレージシステム。
【請求項６】
前記複数のストレージ装置は、複数のグループに分割されて前記インターフェース手段に接続され、同一のグループに属する前記ストレージ装置同士はお互いに通信可能であり、
前記複数のグループは、前記復元対象のデータ要素を格納した同一のストライプ列における１以上のデータ要素を格納するストレージ装置が属する１以上の第１のグループを含み、
前記制御手段は、前記第１のグループと異なる第２のグループのストレージ装置に対して、前記復元用データを送信し、前記第２のグループに属するいずれかのストレージ装置に、（Ｄ）前記復元用データに基づいて、前記復元対象のデータ要素を復元させて、前記第２のグループに属する復元先のストレージ装置に格納させる
請求項１に記載のストレージシステム。
【請求項７】
前記制御手段は、前記第２のグループの前記復元対象のデータ要素の復元先のストレージ装置に、前記（Ｄ）を実行させる
請求項６に記載のストレージシステム。
【請求項８】
前記制御手段は、
前記（Ａ）の処理と、前記インターフェース手段で前記復元対象のデータ要素を復元する処理とのいずれの効率が良いかを推定し、
前記推定の結果に基づいて、前記復元対象のデータ要素の復元処理を制御する
請求項３に記載のストレージシステム。
【請求項９】
前記制御手段は、
前記（Ａ）の処理を実行し、
前記（Ａ）の処理により、前記復元対象のデータ要素を復元できなかった場合に、前記インターフェース手段で前記復元対象のデータ要素を復元する処理を実行する
請求項３に記載のストレージシステム。
【請求項１０】
前記複数のストレージ装置は、複数のグループに分割されて前記インターフェース手段に接続され、同一のグループに属する前記ストレージ装置同士はお互いに通信可能であり、
少なくとも１以上の前記グループの前記ストレージ装置は、前記グループの前記ストレージ装置に格納される同一のストライプ列の１以上のデータ要素を収集し、収集した１以上の前記データ要素に基づいて復元用データを生成し、前記復元用データを前記グループのいずれかのストレージ装置に格納させ、
前記グループのいずれかのストレージ装置は、前記復元用データを用いて、前記グループの前記ストレージ装置に格納されていた前記ストライプ列のいずれかの前記データ要素を復元する
請求項１に記載のストレージシステム。
【請求項１１】
前記ストレージ装置は、データのライトが不可能になった場合であっても、データのリードが可能な記憶メディアを含み、
前記制御手段は、
前記記憶メディアに対するデータのライトが不可能になった後、前記記憶メディアに格納されたデータ要素をリードする際には、前記記憶メディアからリード対象のデータ要素をリードし、
前記記憶メディアに格納された前記データ要素に対応する新たなデータ要素をライトする際には、前記データ要素の復元先となる別のストレージ装置の領域に、リードした前記データ要素と、前記新たなデータ要素とをマージして格納させる
請求項１に記載のストレージシステム。
【請求項１２】
前記少なくとも２つの障害ストライプ列のうち、障害ストライプの数が前記許容数に達している障害ストライプ列内の障害ストライプにおけるデータ要素が、前記少なくとも２つの障害ストライプ列のうちの他の障害ストライプ列内の障害ストライプにおけるデータ要素よりも優先して復元される、
請求項１に記載のストレージシステム。
【請求項１３】
複数のストライプ列から少なくとも２つの障害ストライプ列を検出するステップと、
前記検出した少なくとも２つの障害ストライプ列における複数の障害ストライプ内の複数のデータ要素であって、その少なくとも２つの障害ストライプ列を有する複数のストレージ装置内の複数のデータ要素を、並行して、復元するステップと
を有し、
前記複数のストライプ列の各々は、複数のストレージ装置のうちの２以上のストレージ装置がそれぞれ有する２以上のストライプの列であり、
前記複数のストライプ列の各々は、複数のデータ要素と少なくとも１つの冗長コードとを格納するようになっており、所定の許容数までのストレージ装置が故障した場合に、その故障したストレージ装置のストライプにあるデータ要素を復元することができる構成であり、
前記ストレージ装置の数は、１つのストライプ列を構成するストライプの数よりも多く、
前記少なくとも２つの障害ストライプ列の各々は、前記所定の許容数までの障害ストライプを含んだストライプ列であり、前記障害ストライプは、故障したストレージ装置におけるストライプであり
前記少なくとも２つの障害ストライプ列のうち、障害ストライプの数がなるべく多い障害ストライプ列内の障害ストライプにおけるデータ要素が、前記少なくとも２つの障害ストライプ列のうちの他の障害ストライプ列内の障害ストライプにおけるデータ要素よりも優先して復元される、
データ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のストレージ装置により、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）グループを構成するストレージシステム等に関し、ＲＡＩＤグループにおけるデータを管理する技術に関する。
【背景技術】
【０００２】
従来、ストレージシステムにおける複数のストレージ装置により、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）グループを構成し、ＲＡＩＤグループに基づいて作成された論理ボリュームを、上位装置（例えばホストコンピュータ）へ提供することが行われている。
【０００３】
ＲＡＩＤに関する技術として、特許文献１には、通常データと、通常データを復元するための冗長データとを含むストライプ列を、容量プールに記憶領域を提供する複数のストレージ装置に分散させて管理する技術、所謂分散ＲＡＩＤが開示されている。
【０００４】
また、特許文献２には、ＦＭコントローラ側で、同一ループ内に接続されたパリティグループ内のデータコピーやコレクションコピーを実施することにより、ディスクコントローラの負荷を軽減する技術が開示されている。
【０００５】
また、特許文献３には、ディスク装置が、制御装置からパリティの更新に必要な情報を受け取り、この情報に基づいてパリティレコードを生成する技術が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第２０１０／０１０７００３号明細書
【特許文献２】特開２００８−１９１９６６号公報
【特許文献３】特開平９−２３１０１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
冗長データを記憶するＲＡＩＤグループを構成するいずれかのストレージ装置に故障が発生した場合には、冗長データ等を使って、故障が発生したストレージ装置に格納されていたデータを復元（リビルド）することが行われる。近年では、ストレージ装置の大容量化が進んでおり、リビルドに要する時間が長時間化するという問題がある。
【課題を解決するための手段】
【０００８】
ストレージシステムは、複数の第１のストレージ装置と接続され第１のストレージ装置と種類の異なる第２のストレージ装置と、第２のストレージ装置の中又は外にある第１の制御デバイスとを有する。所定のデータ単位を分割した複数のデータ要素及びデータ要素を復元するための冗長コードを含むストライプ列が、ストライプ列のデータ要素又は冗長コードであるストライプデータ要素の総数よりも多い複数の第１のストレージ装置に分散されて格納されている。ストライプ列は、当該ストライプ列の各ストライプデータ要素を格納する２以上の所定の許容数までの第１のストレージ装置が故障した場合にあっても、各ストライプデータ要素を復元することができる構成である。第１の制御デバイスは、複数の前記ストライプ列から、当該ストライプ列のストライプデータ要素を格納する複数の第１のストレージ装置の中の所定の許容数又は所定の許容数に最も近い数の第１のストレージ装置が故障している第１のストライプ列を検出し、検出した第１のストライプ列のストライプデータ要素を優先して、第１のストレージ装置に復元させる。
【０００９】
なお、「第１のストレージ装置と種類が異なる第２のストレージ装置」とは、例えば、第１のストレージ装置と第２のストレージ装置の構成が異なること意味する。具体的には、例えば、複数の第１のストレージ装置は、それぞれ、記憶メディアであり、第２のストレージ装置は、それら複数の記憶メディアを制御する装置で良い。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係る計算機システムのハードウェア構成図である。
【図２】図２は、実施例１に係る下位ストレージ装置の構成図である。
【図３】図３は、実施例１に係るデータの論理的な構成図である。
【図４】図４は、実施例１に係る下位ストレージ装置におけるデータの論理的な構成図である。
【図５】図５は、実施例１に係る共有メモリのテーブルを示す図である。
【図６】図６は、実施例１に係るページマッピングテーブルの一例を示す図である。
【図７】図７は、実施例１に係るパーセルマッピングテーブルの一例を示す図である。
【図８】図８は、実施例１に係るドライブ状態テーブルの一例を示す図である。
【図９】図９は、実施例１に係るキャッシュ管理テーブルの一例を示す図である。
【図１０】図１０は、実施例１に係るローカルメモリの構成図である。
【図１１】図１１は、実施例１に係るリード／ライト処理のフローチャートである。
【図１２】図１２は、実施例１に係るまとめ書き処理のフローチャートである。
【図１３】図１３は、実施例１に係るリビルド処理のフローチャートである。
【図１４】図１４は、実施例１に係る高速データ復元処理の上位ストレージ装置側の処理のフローチャートである。
【図１５】図１５は、実施例１に係る高速データ復元処理の具体例を説明する模式図である。
【図１６】図１６は、実施例１に係る通常データ復元処理のフローチャートである。
【図１７】図１７は、実施例１に係る管理サーバの管理画面の一例を示す図である。
【図１８】図１８は、実施例２に係るデータの論理的な構成図である。
【図１９】図１９は、実施例２に係るガロア演算係数テーブルの一例を示す図である。
【図２０】図２０は、ＲＡＩＤにおける復元データの作成方法を説明する図である。
【図２１】図２１は、実施例３に係る復元処理選択処理のフローチャートである。
【図２２】図２２は、実施例４に係るデータ復元処理のフローチャートである。
【図２３】図２３は、実施例５に係る外部ストレージ装置の構成図である。
【図２４】図２４は、実施例５に係る高速データ復元処理を説明する図である。
【図２５】図２５は、実施例６に係るパーセルマッピングテーブルの一例を示す図である。
【図２６】図２６は、実施例６に係るリビルド処理における部分復元データ生成処理を説明する図である。
【図２７】図２７は、実施例６に係るリビルド処理におけるデータ復元処理を説明する図である。
【図２８】図２８は、実施例６に係るリビルド中の故障対処処理を説明する第１の図である。
【図２９】図２９は、実施例６に係るリビルド中の故障対処処理を説明する第２の図である。
【図３０】図３０は、実施例６に係るリビルド中の故障対処処理を説明する第３の図である。
【図３１】図３１は、実施例７に係る復元済みビットマップテーブルの一例を示す図である。
【図３２】図３２は、実施例７に係るパーセルマッピングテーブルの一例を示す図である。
【図３３】図３３は、実施例７に係るドライブ状態テーブルの一例を示す図である。
【図３４】図３４は、実施例７に係る故障検出処理のフローチャートである。
【図３５】図３５は、実施例７に係るライト処理を説明する図である。
【図３６】図３６は、実施例８に係る優先リビルドを説明する図である。
【図３７】図３７は、実施例８に係る上位ストレージ装置の状態遷移を説明する図である。
【図３８】図３８は、実施例８に係るストライプテーブルの一例を示す図である。
【図３９】図３９は、実施例８に係る優先ビルド処理のフローチャートである。
【図４０】図４０は、実施例８に係るデータ配置の一方法を説明する図である。
【図４１】図４１は、実施例８に係るデータ配置の一方法におけるワーニングパーセルの位置を説明する図である。
【発明を実施するための形態】
【００１１】
幾つかの実施例を、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１２】
なお、以下の説明では、「ａａａテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていても良い。データ構造に依存しないことを示すために「ａａａテーブル」を「ａａａ情報」と呼ぶことができる。
【００１３】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インターフェースデバイス（例えばポート）を用いながら行うため、処理の主語がプロセッサとされても良い。プログラムを主語として説明された処理は、プロセッサ或いはそのプロセッサを有する計算機（例えば、管理計算機、ホスト計算機、ストレージ装置等）が行う処理としても良い。また、コントローラは、プロセッサそれ自体であっても良いし、コントローラが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。プログラムは、プログラムソースから各コントローラにインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【実施例１】
【００１４】
実施例１に係るストレージシステムを含む計算機システムの概要を説明する。
【００１５】
ストレージシステムは、例えば、図１に示す上位ストレージ装置（第２のストレージ装置）１００により構成される。ストレージシステムは、第１のストレージ装置の一例である外部ストレージ装置４０を含んでも良い。上位ストレージ装置１００のＤＫＵ１６０には、第１のストレージ装置の一例である下位ストレージ装置１８０が複数備えられている。上位ストレージ装置１００においては、複数の下位ストレージ装置１８０の記憶領域により構成される容量プール（以下、プールという）が管理される。また、上位ストレージ装置１００においては、プールの領域を用いてＲＡＩＤグループが構成される。すなわち、プールの領域を構成する複数の下位ストレージ装置１８０を用いて、ＲＡＩＤグループを構成する。
【００１６】
ＲＡＩＤグループの記憶領域は、複数のサブ記憶領域列で構成されている。各サブ記憶領域列は、ＲＡＩＤグループを構成する複数のストレージ装置（下位ストレージ装置及び／又は外部ストレージ装置）に跨っており、複数のストレージ装置に対応した複数のサブ記憶領域で構成されている。ここで、１つのサブ記憶領域を、「ストライプ」と呼び、複数のストライプで構成された一列を、「ストライプ列」と呼ぶ。複数のストライプ列によって、ＲＡＩＤグループの記憶領域が構成されている。
【００１７】
ＲＡＩＤには、いくつかのレベル（以下、「ＲＡＩＤレベル）という）がある。
【００１８】
例えば、ＲＡＩＤ５では、ＲＡＩＤ５に対応したホストコンピュータから指定されたライト対象のデータは、所定サイズのデータ（以下、便宜上「データ単位」という）に分割されて、各データ単位が、複数のデータ要素に分割され、複数のデータ要素が、複数のストライプに書き込まれる。また、ＲＡＩＤ５では、ストレージ装置に障害が発生したことによりそのストレージ装置から読み出せなくなったデータ要素をリビルドするために、各データ単位に対して、“パリティ”と呼ばれる冗長な情報（以下、「冗長コード」）が生成され、その冗長コードも、同一のストライプ列のストライプに書き込まれる。例えば、ＲＡＩＤグループを構成するストレージ装置の数が４である場合は、そのうちの３つのストレージ装置に対応する３つのストライプに、データ単位を構成する３つのデータ要素が書き込まれ、残りの１つのストレージ装置に対応するストライプに、冗長コードが書き込まれる。以下、データ要素と冗長コードとを区別しない場合には、両者をそれぞれストライプデータ要素ということもある。
【００１９】
また、ＲＡＩＤ６では、ＲＡＩＤグループを構成する複数の記憶装置のうちの２つのストレージ装置に障害が発生した等の理由により、データ単位を構成する複数のデータ要素のうちの２つのデータ要素を読み出すことができない場合に、これら２つのデータ要素を復元することができるように、各データ単位に対して、２種類の冗長コード（Ｐパリティ、Ｑパリティという）が生成されて、それぞれの冗長コードが同一のストライプ列のストライプに書き込まれる。
【００２０】
また、上記に説明した以外にもＲＡＩＤレベルは存在する（例えばＲＡＩＤ１〜４）。また、データの冗長化技術として、３重ミラー（Ｔｒｉｐｌｉｃａｔｉｏｎ）、パリティを3個用いたトリプルパリティ技術等もある。また、冗長コードの生成技術についても、ガロア演算を用いたＲｅｅｄ−ｓｏｌｏｍｏｎ符号や、ＥＶＥＮ−ＯＤＤ等さまざまな技術が存在する。本発明の実施例では、主にＲＡＩＤ５，６について説明するが、これは本発明を限定するものではなく、上述した方法の置き換えによる応用が可能である。
【００２１】
上位ストレージ装置１００は、下位ストレージ装置１８０のいずれかの下位ストレージ装置１８０が故障した場合に、例えば、以下に示す第１の処理又第２の処理により、故障したストレージ装置１８０に格納されているデータ要素を復元する。
【００２２】
第１の処理としては、マイクロプロセッサ（ＭＰ）１２１が、故障した下位ストレージ装置１８０に格納されていたデータ要素を復元するために必要なデータ（例えば、他のデータ要素及びパリティ）を、そのデータを格納している複数の下位ストレージ装置１８０から取得して、インターフェースデバイス（例えば、ＢＥＰＫ１４０）の転送バッファ１４２に格納させ、ＢＥＰＫ１４０のパリティ演算器１４１により、転送バッファ１４２のデータに基づいてデータ要素を復元し、当該データ要素を所定の下位ストレージ装置１８０に格納させる。この第１の処理によると、ＣＭ１３１にデータ要素を復元させるためのデータを格納しないで済むので、ＣＭ１３１及び上位ストレージ装置１００の内部ネットワーク１５０に対する負荷を低減することができる。
【００２３】
第２の処理としては、ＭＰ１２１が、パスグループのいずれかの下位ストレージ装置１８０に、故障したストレージ装置１８０に格納されていたデータ要素を復元するために必要なデータであって、当該パスグループに属する下位ストレージ装置１８０に格納されているデータ（例えば、他のデータ要素、及び／又はパリティ）を収集させ、収集したデータに基づいて、データ要素を復元するための演算を行わせて復元用データの一例としての部分復元データを生成させ、当該部分復元データを取得して転送バッファ１４２に格納する。また、ＭＰ１２１は、転送バッファ１４２に格納された部分復元データを、他のパスグループのいずれかの下位ストレージ装置１８０に対して送信して、この下位ストレージ装置１８０により、部分復元データに基づいて、消失したデータ要素を復元させ、いずれかの下位ストレージ装置１８０に格納させる。この第２の処理によると、ＣＭ１３１にデータ要素を復元させるためのデータを格納しないで済むので、ＣＭ１３１及び上位ストレージ装置１００の内部ネットワークに対する負荷を低減することができる。また、下位ストレージ装置１８０において、他のデータ要素及び／又は、パリティを用いて、部分復元データを生成し、部分復元データをＢＥＰＫ１４０に送信するので、下位ストレージ装置１８０からＢＥＰＫ１４０に送信するデータ量を低減することができる。また、上位ストレージ装置１００のパリティ演算器１４１を使わずにデータを復元するため、パリティ演算器１４１の負荷を軽減することができる。
【００２４】
まず、実施例１に係るストレージシステムを含む計算機システムを説明する。
【００２５】
図１は、実施例１に係る計算機システムのハードウェア構成図である。
【００２６】
計算機システムは、１以上のホスト計算機（以下、ホストという）１０と、管理サーバ２０と、上位ストレージ装置１００とを含む。ホスト計算機１０と、管理サーバ２０と、上位ストレージ装置１００とは、ネットワーク３０を介して接続されている。ネットワーク３０は、ローカルエリアネットワークであっても良く、ワイドエリアネットワークであっても良い。また、上位ストレージ装置１００に、１以上の外部ストレージ装置４０を接続するようにしても良い。外部ストレージ装置４０は、１つ以上の記憶デバイスを含む。記憶デバイスは、不揮発性の記憶媒体であって、例えば、磁気ディスク、フラッシュメモリ、その他半導体メモリである。
【００２７】
ホスト１０は、例えば、アプリケーションを実行する計算機であり、上位ストレージ装置１００からアプリケーションに利用するデータを読み出したり、上位ストレージ装置１００にアプリケーションで作成したデータを書き込んだりする。
【００２８】
管理サーバ２０は、計算機システムを管理する管理処理を実行するための管理者により使用される計算機である。管理サーバ２０は、入力デバイスに対する管理者の操作により、データを復元する際に実行させるデータ復元処理の種類の設定を受け付け、上位ストレージ装置１００に受け付けたデータ復元処理を実行させるように設定する。
【００２９】
上位ストレージ装置１００は、１以上のフロントエンドパッケージ（ＦＥＰＫ）１１０と、保守インターフェース（保守Ｉ／Ｆ）１１５と、１以上のマイクロプロセッサパッケージ（ＭＰＰＫ）１２０と、１以上のキャッシュメモリパッケージ（ＣＭＰＫ）１３０と、１以上のバックエンドパッケージ（ＢＥＰＫ）１４０と、内部ネットワーク１５０と、１以上のディスクユニット（ＤＫＵ）１６０とを有する。ＦＥＰＫ１１０、保守Ｉ／Ｆ１１５、ＭＰＰＫ１２０、ＣＭＰＫ１３０、及びＢＥＰＫ１４０は、内部ネットワーク１５０を介して接続されている。ＢＥＰＫ１４０は、複数系統のパスを介してＤＫＵ１６０と接続されている。
【００３０】
ＦＥＰＫ１１０は、インターフェースデバイスの一例であり、１以上のポート１１１を有する。ポート１１１は、上位ストレージ装置１００を、ネットワーク３０等を介して種々の装置と接続する。保守Ｉ／Ｆ１１５は、上位ストレージ装置１００を、管理サーバ２０と接続するためのインターフェースである。
【００３１】
ＭＰＰＫ１２０は、第１の制御デバイスの一例としてのマイクロプロセッサ（ＭＰ）１２１と、ローカルメモリ（ＬＭ）１２２とを有する。ＬＭ１２２は、各種プログラムや、各種情報を記憶する。ＭＰ１２１は、ＬＭ１２２に格納されたプログラムを実行して各種処理を実行する。ＭＰ１２１は、ＢＥＰＫ１４０を介して、各種コマンドをＤＫＵ１６０の下位ストレージ装置１８０に送信する。また、ＭＰ１２１は、ＦＥＰＫ１１０を介して、各種コマンドを外部ストレージ装置４０に送信する。
【００３２】
ここで、ＭＰ１２１がＢＥＰＫ１４０を介して下位ストレージ装置１８０に送信したり、ＦＥＰＫ１１０を介して外部ストレージ装置４０に送信したりするコマンドについて説明する。なお、下位ストレージ装置１８０がＳＣＳＩコマンドに対応している場合には、以下のコマンドは、例えば、ＳＣＳＩコマンドのベンダユニークのフィールドを利用して実現することができる。
【００３３】
＜プリミティブコマンド＞
【００３４】
プリミティブコマンドは、基本的な機能をストレージ装置（例えば、下位ストレージ装置１８０）に実行させるコマンドである。
【００３５】
（１）データコピーコマンド
【００３６】
データコピーコマンドは、ストレージ装置（例えば、下位ストレージ装置１８０）に、転送元デバイス（例えば、下位ストレージ装置１８０）の領域から転送先デバイス（例えば、他の下位ストレージ装置１８０）の領域にデータをコピーさせるためのコマンドである。このコマンドは、転送先デバイスに送信される。このコマンドを受領したら、転送先デバイスは、転送元デバイスにデータをコピーする。具体的には、例えば、転送元デバイスが、スイッチ１６１を経由して転送先デバイスをＳＣＳＩにおけるイニシエータデバイスとして認識し、ＳＣＳＩのライトコマンドを発行し、データをコピーする方法がある。また、その他のデータ転送のためのコマンドを用いてもよい。また、スイッチ１６１が下位ストレージ装置をイニシエータデバイスとして認識して、上位ストレージ装置がデータコピーコマンドを発行することにより、同様のデータ転送を実施してもよい。以上のようにして、ＢＥコントローラ１４３を介さずにデータコピーを実行することができる。
【００３７】
データコピーコマンドの引数には、転送元デバイス＃、転送元ＬＢＡ＃（又は転送元バッファ＃）、転送先ＬＢＡ＃（又は転送先バッファ＃）、ＴＬ＃、バッファモードがある。各引数は、以下の通りである。
（＊）転送元デバイス＃は、転送元のストレージ装置を特定する番号、例えば、ＳＣＳＩ  ＩＤ又はＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）である。
（＊）転送元ＬＢＡ＃は、転送元のサブブロックの番号である。転送元バッファ＃は、転送元の下位ストレージ装置１８０のバッファの番号である。以下に示す転送元に対するバッファモードがＯＦＦの場合には、引数として転送元ＬＢＡ＃が設定され、転送元に対するバッファモードがＯＮの場合には、引数として転送元バッファ＃が設定される。
（＊）転送先ＬＢＡ＃は、転送先のサブブロックの番号である。転送先バッファ＃は、転送先の下位ストレージ装置のバッファの番号である。転送先に対するバッファモードがＯＦＦの場合には、引数として、転送先ＬＢＡ＃が設定され、転送先に対するバッファモードがＯＮの場合には、引数として転送先バッファ＃が設定される。
（＊）ＴＬ＃は、転送するサブブロックの数である。
（＊）バッファモードは、転送元として、ストレージ装置（例えば、下位ストレージ装置１８０）のバッファの領域を指定するか否かを示すＯＮ／ＯＦＦと、転送先として、ストレージ装置のバッファの領域を指定するか否かを示すＯＮ／ＯＦＦとを含む。
【００３８】
なお、１つのデータコピーコマンドにおいて、複数の転送についての内容（例えば、複数の転送元のストレージ装置及び転送元ＬＢＡ＃等）を含ませるようにしても良い。このようにするとコマンド発行回数を削減することができる。
【００３９】
（２）パリティ演算コマンド
【００４０】
パリティ演算コマンドは、ストレージ装置（例えば、下位ストレージ装置１８０）に、演算元領域のデータと、演算先領域のデータとのパリティ演算（例えば、ＲＡＩＤ５の場合には排他的論理和（ＸＯＲ））を実行させ、演算結果を演算先領域に書き込む処理を実行させるためのコマンドである。このコマンドは、演算を行わせるストレージ装置に送信される。
【００４１】
パリティ演算コマンドの引数には、演算元領域ＬＢＡ＃（又は演算元バッファ＃）、演算先領域ＬＢＡ＃（又は演算先バッファ＃）、ＴＬ＃、バッファモードがある。各引数は、以下の通りである。
（＊）演算元領域ＬＢＡ＃は、コマンドを受けたストレージ装置における演算に利用するデータが格納されている演算元のサブブロックの番号である。演算元バッファ＃は、コマンドを受けたストレージ装置の演算に利用するデータが格納されている演算元のバッファの番号である。演算元に対するバッファモードがＯＦＦの場合には、引数として、演算元領域ＬＢＡ＃が設定され、演算元に対するバッファモードがＯＮの場合には、引数として演算元バッファ＃が設定される。
（＊）演算先領域ＬＢＡ＃は、コマンドを受けたストレージ装置における演算結果を格納する演算先のサブブロックの番号である。演算先バッファ＃は、コマンドを受けたストレージ装置における演算結果を格納するバッファの番号である。演算先に対するバッファモードがＯＦＦの場合には、引数として、演算先領域ＬＢＡ＃が設定され、演算先に対するバッファモードがＯＮの場合には、引数として演算先バッファ＃が設定される。
（＊）ＴＬ＃は、演算に利用するデータが含まれるサブブロックの数である。
（＊）バッファモードは、演算元として、ストレージ装置のバッファの領域を指定するか否かを示すＯＮ／ＯＦＦと、演算先として、ストレージ装置のバッファの領域を指定するか否かを示すＯＮ／ＯＦＦとを含む。
【００４２】
なお、１つのパリティ演算コマンドにおいて、複数の演算についての内容（例えば、複数の演算元領域ＬＢＡ等）を含ませるようにしても良い。このようにするとコマンド発行回数を削減することができる。
【００４３】
（３）バッファ確保／解放コマンド
【００４４】
バッファ確保／解放コマンドは、ストレージ装置（例えば、下位ストレージ装置１８０）に、ストレージ装置のメモリ上の領域をバッファとして確保させたり、確保したバッファを開放させたりさせるためのコマンドである。
【００４５】
バッファ確保／解放コマンドの引数としては、確保、解放がある。各引数は、以下の通りである。
（＊）確保は、バッファを確保する場合に設定される。パラメータの設定を行う必要はない。確保を設定したバッファ確保／解放コマンドに対するストレージ装置からの応答には、確保したバッファのバッファ番号が含まれる。
（＊）解放は、バッファを開放する場合に設定される。この引数の場合には、開放するバッファの番号と、開放するサイズ（例えば、サブブロック数）とを設定する必要がある。
【００４６】
（４）バッファリードコマンド
【００４７】
バッファリードコマンドは、上位ストレージ装置１００の転送バッファ１４２に、ストレージ装置（例えば、下位ストレージ装置１８０）のバッファのデータをリードするためのコマンドである。すなわち、バッファリードコマンドは、ストレージ装置に対して、ストレージ装置のバッファのデータを、上位ストレージ装置１００の転送バッファ１４２に転送させて格納させるためのコマンドである。
【００４８】
バッファリードコマンドの引数としては、バッファ番号がある。バッファ番号は、リードの対象となるストレージ装置のバッファの番号である。
【００４９】
（５）バッファライトコマンド
【００５０】
バッファライトコマンドは、上位ストレージ装置１００の転送バッファ１４２のデータを、ストレージ装置（例えば、下位ストレージ装置１８０）のバッファにライトするためのコマンドである。すなわち、バッファライトコマンドは、上位ストレージ装置の転送バッファ１４２に格納されたデータを、ストレージ装置のバッファに格納させるためのコマンドである。
【００５１】
バッファライトコマンドの引数としては、バッファ番号がある。バッファ番号は、ライトの対象となるストレージ装置のバッファの番号である。
【００５２】
＜ハイレベルコマンド＞
【００５３】
ハイレベルコマンドは、基本コマンドによる機能を複合した処理をストレージ装置（例えば、下位ストレージ装置１８０）に実行させるコマンドである。このハイレベルコマンドによると、一連の処理をストレージ装置に実行させる場合に送信するコマンドの数を低減することができ、ＭＰ１２１の処理におけるオーバーヘッドを削減することができる。
【００５４】
（６）パリティ復元リードコマンド
【００５５】
パリティ復元リードコマンドは、ストレージ装置（例えば、下位ストレージ装置１８０）に、同一のパスグループ内の複数のストレージ装置から所定のデータ要素を復元するために必要なデータ要素及び／又はパリティを取得させ、これらデータ要素及び／又はパリティに対して復元するための演算（例えば、排他的論理和）を実行させ、この演算結果をイニシエータである上位ストレージ装置１００の転送バッファ１４２に転送させるためのコマンドである。このコマンドは、後述する転送元デバイス＃［１］〜［Ｎ］のいずれかに設定されているストレージ装置に転送することが好ましい。転送元デバイス＃［１］〜［Ｎ］のいずれかに設定されているストレージ装置に転送すると、ストレージ装置間でのデータ転送回数を低減することができ、処理効率を向上することができる。
【００５６】
パリティ復元リードコマンドの引数には、転送元デバイス＃［１］、転送元ＬＢＡ＃［１］、・・・、転送元デバイス＃［Ｎ］、転送元ＬＢＡ＃［Ｎ］、ＴＬ＃がある。ここで、Ｎは、任意の整数である。各引数は、以下の通りである。
（＊）転送元デバイス＃［１］〜［Ｎ］は、それぞれ転送元のストレージ装置を特定する番号、例えば、ＳＣＳＩ  ＩＤ又はＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）である。なお、１つのコマンドにおいて、転送元デバイス＃［１］〜［Ｎ］して設定可能なストレージ装置は、同一のパスグループに属するストレージ装置である。
（＊）転送元ＬＢＡ＃［１］〜［Ｎ］は、それぞれ転送元のサブブロックの番号である。
（＊）ＴＬ＃は、転送するサブブロックの数である。
【００５７】
（７）パリティ復元ライトコマンド
【００５８】
パリティ復元ライトコマンドは、ストレージ装置（例えば、下位ストレージ装置１８０）に、同一のパスグループ内の複数のストレージ装置から所定のデータ要素を復元するために必要なデータ要素及び／又はパリティを取得させ、これらデータ要素及び／又はパリティに対して復元するための演算（例えば、排他的論理和）を実行させて第１の演算結果を生成させるとともに、イニシエータである上位ストレージ装置１００の転送バッファ１４２に格納された１以上の演算結果を取得させて、当該演算結果に基づいて所定のデータ要素を復元するための演算（例えば、排他的論理和）を実行させて第２の演算結果を生成させ、第１の演算結果と、第２の演算結果とに所定の演算（例えば、排他的論理和）を実行させて、所定のデータ要素を復元させるためのコマンドである。なお、所定のデータ要素を復元させるための演算の順序は、上記に限られず、任意の順序で実行しても良く、要は、データ要素を復元するために必要な演算が実行されれば良い。このコマンドは、後述する転送元デバイス＃［１］〜［Ｎ］のいずれかに設定されているストレージ装置に転送しても良い。転送元デバイス＃［１］〜［Ｎ］のいずれかに設定されているストレージ装置に転送すると、ストレージ装置間でのデータ転送回数を低減することができ、処理効率を向上することができる。
【００５９】
パリティ復元ライトコマンドの引数には、転送先デバイス＃、転送先ＬＢＡ＃、転送元デバイス＃［１］、転送元ＬＢＡ＃［１］、・・・、転送元デバイス＃［Ｎ］、転送元ＬＢＡ＃［Ｎ］、ＴＬ＃、ライトデータ個数がある。各引数は、以下の通りである。
（＊）転送先デバイスは、復元したデータ要素を格納する転送先のストレージ装置を特定する番号、例えば、ＳＣＳＩ  ＩＤ又はＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）である。なお、転送先のストレージ装置として指定可能なストレージ装置は、転送元デバイス＃［１］〜［Ｎ］して設定されるストレージ装置と、同一のパスグループに属するストレージ装置である。
（＊）転送先ＬＢＡ＃は、転送先のサブブロックの番号である。
（＊）転送元デバイス＃［１］〜［Ｎ］は、それぞれ転送元のストレージ装置を特定する番号、例えば、ＳＣＳＩ  ＩＤ又はＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）である。なお、１つのコマンドにおいて、転送元デバイス＃［１］〜［Ｎ］して設定可能なストレージ装置は、同一のパスグループに属するストレージ装置である。
（＊）転送元ＬＢＡ＃［１］〜［Ｎ］は、それぞれ転送元のサブブロックの番号である。
（＊）ＴＬ＃は、転送元デバイス番号に対応するストレージ装置から転送するサブブロックの数である。
（＊）ライトデータ個数は、転送バッファ１４２から取り出して、コマンドの送信先のストレージ装置に対して転送する演算結果の個数である。具体的には、上位ストレージ装置１００に格納されている別のパスグループでの演算結果の個数である。
【００６０】
ＣＭＰＫ１３０は、キャッシュメモリ（ＣＭ）１３１を有する。ＣＭ１３１は、ホスト１０から下位ストレージ装置１８０等に書き込むデータ（ライトデータ）や、下位ストレージ装置１８０から読み出したデータ（リードデータ）を一時的に格納する。
【００６１】
ＢＥＰＫ１４０は、第２の制御デバイスの一例としてのパリティ演算器１４１と、転送バッファ（ＤＸＢＦ）１４２と、バックエンドコントローラ（ＢＥコントローラ）１４３とを有する。
【００６２】
パリティ演算器１４１は、例えば、小型のプロセッサであり、下位ストレージ装置１８０に障害が発生した際にその障害により読み出せなくなったデータ要素をリビルドするための冗長コード（以下、パリティ）を生成する。パリティ演算器１４１は、例えば、ＲＡＩＤ５で構成されたＲＡＩＤグループのデータ単位に対しては、データ単位を構成する複数のデータ要素の排他的論理和をとることによってＰパリティを生成する。また、パリティ演算器１４１は、ＲＡＩＤ６で構成されたＲＡＩＤグループのデータ単位に対しては、更に、データ単位を構成する複数のデータ要素に所定の係数を掛けた後、それぞれのデータの排他的論理和をとることによって、Ｑパリティを生成する。また、パリティ演算器１４１は、データ単位についての１以上のストライプデータ要素（データ要素及び／又はパリティ）に基づいて、データ単位中のいずれかのデータ要素を復元する復元処理を行う。また、パリティ演算器１４１は、データ単位についての１以上のストライプデータ要素に基づいて、いずれかのデータ要素を復元するための復元処理の演算の一部に相当する部分演算を行うことにより部分演算結果を生成する。
【００６３】
転送バッファ１４２は、下位ストレージ装置１８０から送信されたデータや、下位ストージ装置１８０へ送信するデータを一時的に格納する。ＢＥコントローラ１４３は、ＤＫＵ１６０の下位ストレージ装置１８０との間で各種コマンドや、ライトデータ、リードデータ等の通信を行う。
【００６４】
ＤＫＵ１６０は、複数の下位ストレージ装置１８０（以下、ドライブという場合がある）を有する。下位ストレージ装置１８０は、１つ以上の記憶デバイスを含む。記憶デバイスは、不揮発性の記憶媒体であって、例えば、磁気ディスク、フラッシュメモリ、その他半導体メモリである。ＤＫＵ１６０は、ＢＥコントローラ１４３と同一のパスにより接続される複数の下位ストレージ装置１８０のグループ（パスグループ）１７０を複数有する。同一のパスグループ１７０に属する下位ストレージ装置１８０は、スイッチ１６１を介して接続されている。同一のパスグループ１７０に属する下位ストレージ装置１８０同士は、直接通信することが可能であり、例えば、同一のパスグループ１７０に属する一の下位ストレージ装置１８０から他の下位ストレージ装置１８０に対して、各種データを送信することができる。なお、別のパスグループ１７０に属する下位ストレージ装置１８０同士は、直接通信することはできない。ただし、スイッチ１６１の接続方法によっては、上位ストレージ装置１００内の全ての下位ストレージ装置１８０同士でアクセス可能とすることも可能である。その場合は、下位ストレージ装置１８０全てを１個の巨大なパスグループ１７０としてもよいし、各下位ストレージ装置１８０の関係において、密に結合された、すなわち通信経路が多数ある、又は通信経路のスループットが高い下位ストレージ装置１８０の集合を、パスグループ１７０としてもよい。
【００６５】
図２は、実施例１に係る下位ストレージ装置の構成図である。
【００６６】
下位ストレージ装置１８０は、ポート１８１と、第３の制御デバイスの一例としてのプロセッサ１８２と、メモリ１８３と、バックエンドコントローラ１８４と、１以上のフラッシュメモリチップ１８５とを有する。
【００６７】
ポート１８１は、ＢＥコントローラ１４３、又は他の下位ストレージ装置１８０との通信を行うためのインターフェースである。メモリ１８３は、プログラムや、各種情報を格納する。プロセッサ１８２は、メモリ１８３に格納されたプログラムを実行し、メモリ１８３に格納された情報を利用することで各種処理を行う。本実施例では、プロセッサ１８２は、ＢＥＰＫ１４０を介して送信される後述する各種コマンドに対応する処理を実行する。また、プロセッサ１８２は、パリティ演算器１４１と同様な演算処理を実行する。バックエンドコントローラ１８４は、フラッシュメモリチップ１８５とのデータのやり取りを仲介する。フラッシュメモリチップ１８５は、例えば、ＮＡＮＤ型のフラッシュメモリチップであっても良く、また、他種（例えばＮＯＲ型）のフラッシュメモリであっても良いし、ＰＲＡＭやＲｅＲＡＭであってもよい。また、磁気ディスクであってもよい。なお、下位ストレージ装置１８０にパリティ演算器を備えるようにしても良い。
【００６８】
図３は、実施例１に係るデータの論理的な構成図である。
【００６９】
ホスト１０により認識可能な仮想ボリューム５０は、複数の仮想ページ（仮想的な論理ページ、論理ページともいう）５１により構成される。仮想ページ５１には、仮想プール空間５２の物理ページ５５が割り当てられる。仮想プール空間５２においては、１以上のエクステント５３が管理される。エクステント５３は、複数のパーセル（Ｐａｒｃｅｌ）５４により構成される。パーセル５４は、１つのストレージ装置（例えば、下位ストレージ装置１８０）上の連続した領域で構成される。パーセル５４は、図３の例では４つのストライプ５７で構成される。
【００７０】
エクステント５３は、図３に示すように、ＲＡＩＤ５の３Ｄ＋１Ｐ構成、すなわち、データ単位を構成する３つのデータ要素（Ｄ）と、これらデータ要素に対応する１つのパリティ（Ｐ）とをそれぞれ異なるストレージ装置に格納する構成の場合には、例えば、４つの異なる下位ストレージ装置１８０のパーセル５４で構成される。なお、本実施例では、分散ＲＡＩＤの構成を採っているので、仮想プール空間５２の記憶領域を構成する複数（３Ｄ＋１Ｐで最低限必要な４つよりも多い数（例えば、８つ））の下位ストレージ装置１８０の中の異なる４つの下位ストレージ装置１８０のパーセル５４によって、エクステント５３が構成されており、各エクステント５３を構成するパーセル５４を含む下位ストレージ装置１８０の組み合わせは、固定されていない。
【００７１】
エクステント５３は、複数（例えば、２つの）の物理ページ５５を含む。物理ページ５５は、複数（例えば、２つ）の連続するデータ単位のデータ要素及びパリティ（同一のストライプ列５６のデータ）を格納することができる。同図において、Ｄ１＿１、Ｄ２＿１、Ｄ３＿１、Ｐ＿１のように、「＿」の後の数字が共通するものが、同一のデータ単位におけるデータ要素及びパリティを示す。なお、データ要素及びパリティは、それぞれストライプ５７のサイズとなっている。
【００７２】
図４は、実施例１に係る下位ストレージ装置におけるデータの論理的な構成図である。
【００７３】
下位ストレージ装置１８０は、上位の装置との間では、ＳＣＳＩコマンド処理の最小単位（例えば、５１２Ｂ）であるサブブロック６１を単位として、データの受け渡しが可能である。キャッシュメモリ１３１上でのデータをキャッシュする際の管理単位（例えば、２５６ＫＢ）であるスロット６２は、連続する複数のサブブロック６１の集合で構成される。ストライプ５７は、複数のスロット６２に格納される。ストライプ５７のサイズは、例えば、スロット６２が２個で構成される場合、５１２ＫＢである。
【００７４】
図５は、実施例１に係る共有メモリのテーブルを示す図である。
【００７５】
共有メモリ２００は、例えば、下位ストレージ装置１８０、ＣＭ１３１、及びＬＭ１２２の少なくともいずれか１つの記憶領域を用いて構成される。なお、下位ストレージ装置１８０、ＣＭ１３１、及びＬＭ１２２の内の複数の構成の記憶領域を用いて論理的な共有メモリ２００を構成し、各種情報についてキャッシュ管理を行うようにしてもよい。
【００７６】
共有メモリ２００は、ページマッピングテーブル２１０と、パーセルマッピングテーブル２２０と、ドライブ状態テーブル２３０と、キャッシュ管理テーブル２４０とを格納する。各テーブルの詳細について、引き続いて説明する。
【００７７】
図６は、実施例１に係るページマッピングテーブルの一例を示す図である。
【００７８】
ページマッピングテーブル２１０は、仮想ボリューム５０の論理ページ５１と、仮想プール空間５２の物理ページ５５との対応関係を示す情報である。ページマッピングテーブル２１０は、仮想ボリューム番号２１１と、論理ページ番号２１２と、プール番号２１３と、仮想プール空間番号２１４と、物理ページ番号２１５とのフィールドを含むエントリを管理する。
【００７９】
仮想ボリューム番号２１１には、仮想ボリューム５０の番号（仮想ボリューム番号）が格納される。論理ページ番号２１２には、エントリにおける仮想ボリューム番号２１１の仮想ボリューム番号が示す仮想ボリューム５０における論理ページの番号（論理ページ番号）が格納される。プール番号２１３には、エントリにおける論理ページ番号２１２の論理ページ番号に対応する論理ページに割り当てられている物理ページを含むプールの番号が格納される。仮想プール空間番号２１４には、エントリにおけるプール番号２１３のプール番号のプールにおける、論理ページ番号２１２の論理ページ番号に対応する論理ページに割り当てられている物理ページを含む仮想プール空間の番号（仮想プール空間番号）が格納される。物理ページ番号２１５には、エントリにおける論理ページ番号２１２の論理ページ番号に対応する論理ページに割り当てられている物理ページの番号（物理ページ番号）が格納される。物理ページ番号は、例えば、ＬＢＡ（サブブロック単位のアドレス）である。
【００８０】
図６の一番上のエントリによると、仮想ボリューム番号が「１」の仮想ボリュームの論理ページ番号が「１」の論理ページには、プール番号が「０」の仮想プール空間番号が「２」の仮想プール空間の物理ページ番号「０」の物理ページが割り当てられていることがわかる。
【００８１】
図７は、実施例１に係るパーセルマッピングテーブルの一例を示す図である。
【００８２】
パーセルマッピングテーブル２２０は、エクステント５３に割り当てられた物理パーセル５４を管理するためのテーブルである。パーセルマッピングテーブル２２０は、仮想プール空間番号２２１と、エクステント番号（＃）２２２と、ドライブオフセット番号（＃）２２３と、物理ドライブ番号（＃）２２４と、物理パーセル番号（＃）２２５と、パーセル状態２２６とのフィールドを含むエントリを管理する。
【００８３】
仮想プール空間番号２２１には、仮想プール空間の番号（仮想プール空間番号）が格納される。エクステント＃２２２には、エントリの仮想プール空間番号２２１の仮想プール空間番号に対応する仮想プール空間におけるエクステントの番号（エクステント番号）が格納される。ドライブオフセット＃２２３には、エントリのエクステント＃２２２のエクステント番号に対応するエクステントにおけるドライブオフセットの番号（ドライブオフセット番号）が格納される。ここで、ドライブオフセット番号とは、ＲＡＩＤグループの構成（たとえば、３Ｄ＋１Ｐ）のいずれのドライブであるかを示す番号であり、本実施例では、１つの仮想プール空間の１つのエクステントに対するドライブオフセット番号として、０〜３の４つのドライブオフセット番号が対応付けられて管理される。物理ドライブ＃２２４には、エントリのドライブオフセット＃２２３のドライブオフセット番号のドライブに対して割り当てられている物理パーセルを格納する物理ドライブ（例えば、下位ストレージ装置）の番号（物理ドライブ番号）が格納される。物理パーセル＃２２５には、ドライブオフセット番号のドライブに対して割り当てられている物理パーセルの番号が格納される。パーセル状態２２６には、エントリにおける物理パーセル＃２２５の物理パーセル番号に対応する物理パーセルの状態が格納される。本実施例では、パーセル状態２２６には、パーセルに格納されているデータ要素について復元が必要である場合には、そのことを示す「復元要」が設定され、それ以外の場合には、空白が設定される。例えば、下位ストレージ装置１８０が故障状態になった場合に、ＭＰ１２１がこの下位ストレージ装置１８０のパーセルに対応するエントリのパーセル状態２２６に「復元要」を設定する。
【００８４】
図８は、実施例１に係るドライブ状態テーブルの一例を示す図である。
【００８５】
ドライブ状態テーブル２３０は、仮想プール空間５２を構成する物理ドライブ（例えば、下位ストレージ装置１８０）の状態を管理するテーブルである。ドライブ状態テーブル２３０は、仮想プール空間番号２３１と、物理ドライブ番号２３２と、状態２３３とのフィールドを含むエントリを管理する。仮想プール空間番号２３１には、仮想プール空間の番号（仮想プール空間番号）が格納される。物理ドライブ番号２３２には、エントリの仮想プール空間番号２３１の仮想プール空間番号に対応する仮想プール空間を構成する物理ドライブの番号（物理ドライブ番号）が格納される。状態２３３には、エントリの物理ドライブ番号２３２の物理ドライブ番号に対応する物理ドライブの状態が格納される。物理ドライブの状態としては、物理ドライブが正常であることを示す「正常」、又は物理ドライブに対するリード及びライトが不可能なことを示す「異常（Ｒ／Ｗ不可）」が設定される。
【００８６】
図９は、実施例１に係るキャッシュ管理テーブルの一例を示す図である。
【００８７】
キャッシュ管理テーブル２４０は、仮想ボリューム番号２４１と、ボリュームスロット番号２４２と、キャッシュスロット番号２４３と、デステージ抑止フラグ２４４と、ダーティビットマップ２４５とのフィールドを含むエントリを管理する。
【００８８】
仮想ボリューム番号２４１には、仮想ボリュームの番号（仮想ボリューム番号）が格納される。ボリュームスロット番号２４２には、エントリの仮想ボリューム番号２４１の仮想ボリューム番号に対応する仮想ボリュームのボリュームスロットの番号（ボリュームスロット番号）が格納される。キャッシュスロット番号２４３には、ボリュームスロット番号２４２のボリュームスロット番号に対応するボリュームスロットが格納されているＣＭ１３１におけるキャッシュスロットの番号（キャッシュスロット番号）が格納される。本実施例では、キャッシュスロット番号２４３には、ボリュームスロットに格納されたデータ要素を格納するキャッシュスロットの番号（同図では、（データ）が付加されている番号）と、ボリュームスロットに格納されたデータ要素を復元するためのパリティを格納するキャッシュスロットの番号（同図では、（パリティ）が付加されている番号）とが格納される。デステージ抑止フラグ２４４には、エントリのキャッシュスロット番号２４３のキャッシュスロット番号に対応するキャッシュスロットのデータを、デステージしても良いか、すなわち、ストレージ装置に書き込んでＣＭ１３１のキャッシュスロットから削除しても良いかを示すデステージ抑止フラグが格納される。ダーティビットマップ２４５には、エントリのキャッシュスロット番号２４３のキャッシュスロット番号に対応するキャッシュスロットにおける各サブブロックのデータがダーティデータであるか否かを示すビットの集合（ビットマップ）が格納される。
【００８９】
図１０は、実施例１に係るローカルメモリの構成図である。
【００９０】
ローカルメモリ１２２は、リード／ライトプログラム１２２０と、まとめ書きプログラム１２２１と、通常ライトプログラム１２２２と、リビルドプログラム１２２３と、高速データ復元プログラム１２２４と、通常データ復元プログラム１２２５とを格納する。リード／ライトプログラム１２２０は、リード／ライト処理（図１１参照）を実行させるためのプログラムである。まとめ書きプログラム１２２１は、まとめ書き処理（図１２参照）を実行させるためのプログラムである。通常ライトプログラム１２２２は、通常ライト処理を実行させるためのプログラムである。リビルドプログラム１２２３は、リビルド処理（図１３参照）を実行させるためのプログラムである。高速データ復元プログラム１２２４は、高速データ復元処理（図１４参照）を実行させるためのプログラムである。通常データ復元プログラム１２２５は、通常データ復元処理（図１６）を実行させるためのプログラムである。
【００９１】
次に、実施例１に係る計算機システムにおける処理の動作を説明する。
【００９２】
図１１は、実施例１に係るリード／ライト処理のフローチャートである。
【００９３】
リード／ライト処理は、ＭＰ１２１がＦＥＰＫ１１０のポート１１１を介して、ホスト１０からＩ／Ｏコマンド（リードコマンド、又はライトコマンド）を受信した場合に実行される。
【００９４】
ＭＰ１２１は、受信したコマンドがライトコマンドであるか否かを判定する（ステップＳ１０）。この結果、ライトコマンドである場合（ステップＳ１０でＹ）には、ＭＰ１２１は、キャッシュメモリ１３１に、ライトコマンドに対応するライトデータをホスト１０から受信して書き込み（ステップＳ１１）、ＦＥＰＫ１１０のポート１１１を介して、ホスト１０に完了通知を送信する（ステップＳ１２）。
【００９５】
一方、受信したコマンドがライトコマンドでない、すなわち、リードコマンドである場合（ステップＳ１０でＮ）には、ＭＰ１２１は、リードコマンドが対象とするストレージ装置（下位ストレージ装置１８０、又は外部ストレージ装置４０）のアクセス範囲に、復元要のパーセルがあるか否かを判定する（ステップＳ１３）。リードコマンドには、例えば、アクセス対象とする仮想ボリューム番号及び論理ページ番号が含まれている。ここで、リードコマンドが対象とするアクセス範囲に復元要のパーセルがあるか否かは、ページマッピングテーブル２１０により、リードコマンドのアクセス対象とする仮想プール空間及び物理ページを特定し、パーセルマッピングテーブル２２０により、物理ページに対応するパーセルに対応するパーセル状態２２６の値を取得することにより判定することができる。
【００９６】
物理ページに対応するパーセルは、仮想プール空間のアドレス（物理ページ番号（例えば、ＬＢＡ（サブブロック単位のアドレス）））を、ストライプデータサイズで割った商に基づいて、ドライブオフセットを算出することにより特定できる。
【００９７】
より具体的には、まず、エクステント＃を以下の式により算出する。
【００９８】
エクステント＃＝ｆｌｏｏｒ（ｆｌｏｏｒ（ＬＢＡ×Ｄ数÷（Ｄ数＋Ｐ数））÷エクステント物理サイズ）で求められる。ここで、Ｄ数は、ＲＡＩＤのストライプ列におけるデータ要素の数であり、Ｐ数は、ストライプ列におけるパリティの数である。エクステント物理サイズは、サブブロック数である。
【００９９】
次に、ドライブオフセット＃を以下の式により算出する。
【０１００】
ドライブオフセット＃＝（ｆｌｏｏｒ（（ｆｌｏｏｒ（ＬＢＡ÷（ストライプデータサイズ÷サブブロックサイズ）））÷Ｄ数）＋（ｆｌｏｏｒ（ＬＢＡ÷ストライプデータサイズ÷サブブロックサイズ））ＭＯＤ  Ｄ数）ＭＯＤ  （Ｄ数＋Ｐ数）
【０１０１】
このようにして、アクセス対象とする、仮想プール空間番号、エクステント＃、及びドライブオフセット＃を特定することができ、パーセルマッピングテーブル２２０を参照すると、物理ドライブ＃及び物理パーセル＃を特定することができる。
【０１０２】
ステップＳ１３の判定の結果、復元要のパーセルがない場合（ステップＳ１３でＮ）には、ＭＰ１２１は、通常リード処理を実行し（ステップＳ１４）、ステップＳ１６に処理を進める。ここで、通常リード処理では、ＭＰ１２１は、アクセス範囲のパーセルを有するストレージ装置に対して、リード要求を送信してリード対象のデータを取得する。
【０１０３】
一方、ステップＳ１３の判定の結果、復元要のパーセルがある場合（ステップＳ１３でＹ）には、ＭＰ１２１は、コレクションリード処理を実行し（ステップＳ１５）、ステップＳ１６に処理を進める。ここで、コレクションリード処理では、ＭＰ１２１は、復元要のパーセルのデータ要素について、後述する高速データ復元処理（図１４参照）と同様な処理により、復元要のデータ要素を復元させ、当該復元されたデータ要素をストレージ装置から取得する。
【０１０４】
ステップＳ１６では、ＭＰ１２１は、ＦＥＰＫ１１０を介して、取得したデータをホスト１０に転送する。
【０１０５】
図１２は、実施例１に係るまとめ書き処理のフローチャートである。
【０１０６】
まとめ書き処理は、例えば、定期的に実行される。ＭＰ１２１は、キャッシュメモリ１３１上に、ストレージ装置に未反映のデータを含むスロットがあるか否かを判定する（ステップＳ２１）。未反映のデータを含むスロットがあるか否かは、キャッシュ管理テーブル２４０を参照することにより把握することができる。この結果、未反映のデータを含むスロットがない場合（ステップＳ２１でＮ）には、ＭＰ１２１は、まとめ書き処理を終了する。
【０１０７】
一方、未反映のデータを含むスロットがある場合（ステップＳ２１でＹ）には、ＭＰ１２１は、キャッシュ管理テーブル２４０の当該スロットに対応するエントリのデステージ抑止フラグ２４４を参照し、当該スロットがデステージ抑止中のスロットであるか否かを判定する（ステップＳ２２）
【０１０８】
この結果、デステージ抑止中のスロットである場合（ステップＳ２２でＹ）には、当該スロットに含まれるデータが復元に利用されていることを示しているので、ＭＰ１２１は、当該スロットのデータをストレージ装置に反映させることなく、ステップＳ２１に進んで、別のスロットを対象とした処理を行う。一方、デステージ抑止中のスロットでない場合（ステップＳ２２でＮ）には、ＭＰ１２１は、ストレージ装置の当該スロットのデータを書き込む範囲（アクセス範囲）に、復元要のパーセルがあるか否かを判定する（ステップＳ２３）。
【０１０９】
ステップＳ２３の判定の結果、復元要のパーセルがある場合（ステップＳ２３でＹ）には、コレクションライト処理を実行し（ステップＳ２４）、ステップＳ２１に処理を進める。ここで、コレクションライト処理では、ＭＰ１２１は、スロットのデータを用いて、ストレージ装置に新しいパリティを生成させて、当該パリティをストレージ装置に格納させる。具体的には、コレクションライト対象がＤ（データ）の場合、ストライプ列のその他の全ての旧データを下位ストレージ装置１８０から読み出し、排他和により新しいパリティを生成し、新データ及び新パリティを下位ストレージ装置１８０に書き込む。また、コレクションライト対象がＰ（パリティ）の場合、パリティは更新不要のため、新データのみを下位ストレージ装置１８０に書き込む。なお、復元要のパーセルのデータ要素については、後述する高速データ復元処理（図１４参照）と同様な処理により、復元要のデータ要素を復元し、ストレージ装置に格納する。
【０１１０】
一方、ステップＳ２３の判定の結果、復元要のパーセルがない場合（ステップＳ２３でＮ）には、ＭＰ１２１は、通常ライト処理を実行し（ステップＳ２５）、ステップＳ２１に処理を進める。ここで、通常ライト処理では、ＭＰ１２１は、スロットのデータに対応するストライプ列のデータ要素を格納しているストレージ装置（例えば、下位ストレージ装置１８０）に対して、データ要素を格納させる所定のコマンド（ＸＤＷＲＩＴＥコマンド）を送信する。この際、ＭＰ１２１は、スロットのデータに対応するストライプ列のデータ要素を格納している下位ストレージ装置１８０に対して、ＣＭ１３１のデータ要素を、転送バッファ１４２を経由させて送信する。また、ＭＰ１２１は、スロットのデータに対応するストライプ列のパリティを格納している下位ストレージ装置１８０に対して、新たなパリティを生成して格納させる所定のコマンド（ＸＰＷＲＩＴＥコマンド）を送信する。この際、ＭＰ１２１は、スロットのデータに対応するストライプ列のパリティを格納している下位ストレージ装置１８０に対して、ＣＭ１３１のデータ要素を、転送バッファ１４２を経由させて送信する。ＸＤＷＲＩＴＥコマンドを受け取った下位ストレージ装置１８０では、受け取ったデータ要素を、指定された領域に格納する。一方、ＸＰＷＲＩＴＥコマンド受け取った下位ストレージ装置１８０では、受け取ったデータ要素を利用して新たなパリティを生成し、生成した新たなパリティを指定された領域に格納する。
【０１１１】
図１３は、実施例１に係るリビルド処理のフローチャートである。
【０１１２】
リビルド処理は、任意のタイミングで実行される。ＭＰ１２１は、パーセルマッピングテーブル２２０を参照して、リビルドが未完了のパーセルがあるか否か、すなわち、パーセル状態が「復元要」のパーセルがあるか否かを判定する（ステップＳ４１）。この結果、リビルドが未完了のパーセルがない場合（ステップＳ４１でＮ）には、ＭＰ１２１は、リビルド処理を終了する。一方、リビルドが未完了のパーセルがある場合（ステップＳ４１でＹ）には、ＭＰ１２１は、リビルドが未完了の１つのパーセルの１つのストライプのデータ（ストライプデータ要素）について、データ復元処理の実行を開始する（ステップＳ４２）。ここで、データ復元処理としては、高速データ復元処理（図１４参照）と、通常データ復元処理（図１６参照）とがある。ここで、実行するデータ復元処理としては、常に、高速データ復元処理（図１４参照）を実行しても良い。また、高速データ復元処理、又は通常データ復元処理の中のユーザに設定された方の処理を行うようにしても良い。
【０１１３】
次いで、ＭＰ１２１は、パーセルの全てのストライプのデータが復元済みであるか否かを判定する（ステップＳ４３）。この結果、全てのストライプのデータが復元済みでない場合（ステップＳ４３のＮ）には、ＭＰ１２１は、処理をステップＳ４１に進める。一方、パーセルの全てのストライプのデータが復元済みである場合（ステップＳ４３でＹ）には、ＭＰ１２１は、パーセルマッピングテーブル２２０の当該パーセルに対応するエントリのパーセル状態２２６を復元済み（復元不要）を示す内容に設定し（ステップＳ４４）、処理をステップＳ４１に進める。
【０１１４】
なお、リビルドが未完了の複数のパーセルに対する複数のリビルド処理を並行して実行するようにしても良い。このようにすると複数のパーセルに対するリビルド処理の時間を低減することができる。また、リビルド処理を並行して実行する場合においては、或るリビルド処理の対象とするパーセルとしては、他のリビルド処理で使用するパーセル（復元元のパーセル及び復元先のパーセル）を有するストレージ装置以外のストレージ装置のパーセルから選択するようにしても良い。このようにすると、ストレージ装置に対するアクセスの衝突を低減でき、複数のリビルド処理の並列効果を向上することができ、その結果、リビルド処理の時間を効果的に短縮することができる。
【０１１５】
図１４は、実施例１に係る高速データ復元処理のフローチャートである。なお、同図においては、ＲＡＩＤグループが複数の下位ストレージ装置１８０により構成されている場合を例に説明する。
【０１１６】
ＭＰ１２１は、復元対象の領域である復元対象のパーセルのストライプが論理ページに対して割当てられていないか否かを判定する（ステップＳ５１）。ここで、復元対象のパーセルのストライプが論理ページに対して割当てられていないか否かについては、パーセルマッピングテーブル２２０により、復元対象のパーセルのストライプに対応する仮想プール空間番号と、エクステント番号と、ドライブオフセット＃とを特定し、当該エクステント番号及びドライブオフセット＃に基づいて物理ページ番号を特定し、ページマッピングテーブル２１０により、特定した物理ページ番号が論理ページ番号に対応付けられているか否かを特定することにより把握することができる。
【０１１７】
この結果、復元対象のパーセルのストライプが論理ページに割当てられていない場合（ステップＳ５１でＹ）には、ＭＰ１２１は、高速データ復元処理を終了する。
【０１１８】
一方、復元対象のパーセルのストライプが論理ページに割当てられている場合（ステップＳ５１でＮ）には、ＭＰ１２１は、パーセルマッピングテーブル２２０から復元元領域と、復元先領域とを格納する下位ストレージ装置１８０及び復元元領域及び復元先領域の下位ストレージ装置１８０での位置を算出する（ステップＳ５２）。ここで、復元元領域は、復元対象のストライプのストライプデータ要素以外のストライプデータ要素の領域である。例えば、ＲＡＩＤ５の３Ｄ１Ｐ構成である場合には、復元元領域は、３つの領域であり、ＲＡＩＤ６の６Ｄ２Ｐ構成である場合には、復元元領域は、６つの領域である。復元先領域は、復元元領域の下位ストレージ装置１８０と異なる下位ストレージ装置１８０の領域であれば、任意の領域で良い。
【０１１９】
次いで、ＭＰ１２１は、復元領域（復元元領域及び復元先領域）に関連するＣＭ１３１のスロットに対応するキャッシュ管理テーブル２４０のデステージ抑止フラグ２４４のデステージ抑止フラグをＯＮに設定する（ステップＳ５３）。これは、データ復元処理の実行中にホストＩ／Ｏによりデータが更新されてしまうことを防ぐ目的で実施している。次いで、ＭＰ１２１は、下位ストレージ装置１８０にパリティ復元リードコマンドを発行する（ステップＳ５４）。ここで、パリティ復元リードコマンドの復元元領域には、ステップＳ５２で特定した復元元領域の中の同一のパスグループに属する復元元領域が設定される。なお、本実施例では、復元先領域の下位ストレージ装置１８０の属するパスグループには、パリティ復元リードコマンドを発行しない。
【０１２０】
下位ストレージ装置１８０のプロセッサ１８２は、ポート１８１を介してパリティ復元リードコマンドを受信すると、パリティ復元リードコマンドに対応する処理を実行することにより、同一のパスグループの他の下位ストレージ装置１８０から復元に必要なデータ要素及び／又はパリティを取得し、取得したデータ要素及び／又はパリティに基づいて、パリティ復元演算（排他的論理和）を実行して、実行結果（部分復元データ）を作成し、当該実行結果を転送バッファ１４２に送信する（ステップＳ５５）。これにより、転送バッファ１４２に実行結果が格納される。この際、１つのパスグループから、１つの実行結果のみが送信されるので、下位ストレージ装置１８０と、ＢＥＰＫ１４０との間の通信量を低減することができる。また、実行結果は、ＣＭ１３１に格納されないので、ＣＭ１３１や、内部ネットワーク１５０に対する負荷が削減される。
【０１２１】
次いで、ＭＰ１２１は、復元元領域を含むパスグループであり、且つ復元先領域を含まないパスグループの全てにパリティ復元リードコマンドを発行したか否かを判定する（ステップＳ５７）。
【０１２２】
この結果、復元元領域を含むパスグループであり、且つ復元先領域を含まないパスグループの全てにパリティ復元リードコマンドを発行していない場合（ステップＳ５７のＮ）には、ＭＰ１２１は、処理をステップＳ５４に進める。
【０１２３】
一方、復元元領域を含むパスグループであり、且つ復元先領域を含まないパスグループの全てに対するパリティ復元リードコマンドを発行した場合（ステップＳ５７のＹ）には、ＭＰ１２１は、復元先領域の下位ストレージ装置１８０にパリティ復元ライトコマンドを発行し、転送バッファ１４２に格納されている１以上の部分復元データを送信する（ステップＳ５８）。パリティ復元ライトコマンドの復元元領域には、ステップＳ５２で算出した復元元領域の中の、復元先領域の下位ストレージ装置１８０を含むパスグループに属する下位ストレージ装置１８０の復元元領域が設定される。
【０１２４】
下位ストレージ装置１８０のプロセッサ１８２は、パリティ復元ライトコマンドを受信すると、パリティ復元ライトコマンドに対応する処理を実行することにより、転送バッファ１４２に格納されている１以上の部分復元データを受信する。また、プロセッサ１８２は、同一のパスグループの他の下位ストレージ装置１８０から復元に必要なデータ要素及び／又はパリティを取得し、取得したデータ要素及び／又はパリティに基づいて、復元演算（排他的論理和）を実行し、実行結果（部分復元データ）を作成する。次いで、プロセッサ１８２は、作成した部分復元データと、転送バッファ１４２から取得した部分復元データとに対して復元演算（例えば、排他的論理和）を行って、最終的な復元データを生成し、パリティ復元ライトコマンドにより指定された領域に格納し（ステップＳ５９）、パリティ復元ライトコマンドに対する応答をＭＰ１２１に送信する。
【０１２５】
ＭＰ１２１は、パリティ復元ライトコマンドに対する応答を受信すると、復元領域（復元元領域及び復元先領域）に関連するＣＭ１３１のスロットに対応するキャッシュ管理テーブル２４０のデステージ抑止フラグ２４４のデステージ抑止フラグをＯＦＦに設定し（ステップＳ６０）、高速データ復元処理を終了する。
【０１２６】
図１５は、実施例１に係る高速データ復元処理の具体例を説明する模式図である。
【０１２７】
ここで、複数の下位ストレージ装置１８０によりＲＡＩＤ５の３Ｄ＋１Ｐが構成されており、下位ストレージ装置＃０に、データ要素Ｄ１が格納され、下位ストレージ装置＃１に、Ｐパリティが格納され、下位ストレージ装置＃２に、データ要素Ｄ２が格納され、図示しない下位ストレージ装置１８０にデータ要素Ｄ３が格納されているものとする。また、下位ストレージ装置＃０と、下位ストレージ装置＃１とは、同一のパスグループに属し、下位ストレージ装置＃２と、下位ストレージ装置＃３とは、同一のパスグループに属するものとする。
【０１２８】
ここで、データ要素Ｄ３を格納している下位ストレージ装置１８０が故障し、下位ストレージ装置＃３にデータ要素Ｄ３を復元する場合の高速データ復元処理について説明する。
【０１２９】
高速データ復元処理においては、ＭＰ１２１がＢＥコントローラ１４３を介してパリティ復元リードコマンドを、データ要素Ｄ３と同一のストライプ列のデータ要素Ｄ１及びＰパリティを格納しているパスグループに属する下位ストレージ装置＃１に発行する（同図中（１））。
【０１３０】
下位ストレージ装置＃１では、パリティ復元リードコマンドを受信すると、プロセッサ１８２がコマンドに従って処理を開始して、下位ストレージ装置＃１のメモリ１８３にバッファを確保し（同図中（ａ））、下位ストレージ装置＃０からデータ要素Ｄ１を取得してバッファにコピーし（同図中（ｂ））、データ要素Ｄ１と、下位ストレージ装置＃１内に格納されている同一のストライプ列のＰパリティとの排他的論理和を実行し、実行結果（Ｄ１＋Ｐ）を上位ストレージ装置１００に送信する（同図中（ｄ））。なお、その後、プロセッサ１８２は、メモリ１８３に確保したバッファを開放する（同図中（ｅ））。
【０１３１】
上位ストレージ装置１００では、ＭＰ１２１が下位ストレージ装置＃１から送信された実行結果（Ｄ１＋Ｐ）のデータを転送バッファ１４２に格納する。転送バッファ１４２に格納された実行結果（Ｄ１＋Ｐ）は、ＣＭ１３１に転送されない。
【０１３２】
次いで、ＭＰ１２１は、ＢＥコントローラ１４３を介してパリティ復元ライトコマンドを、下位ストレージ装置＃１の属するパスグループと異なるパスグループの復元先の下位ストレージ装置＃３に発行する（同図中（３））。
【０１３３】
下位ストレージ装置＃３では、パリティ復元ライトコマンドを受信すると、プロセッサ１８２がコマンドに従って処理を開始して、下位ストレージ装置＃３のメモリ１８３にバッファを確保し（同図中（ｆ））、ＭＰ１２１により転送バッファ１４２から転送される実行結果（Ｄ１＋Ｐ）を受信する（同図中（ｇ））。次いで、下位ストレージ装置＃３のプロセッサ１８２は、下位ストレージ装置＃２から、データ要素Ｄ３と同一のストライプ列のデータ要素Ｄ２を取得して、バッファにコピーし（同図中（ｈ））、バッファに格納した実行結果（Ｄ１＋Ｐ）とデータ要素Ｄ２との排他的論理和を実行して、データ要素Ｄ３を復元し、データ要素Ｄ３を下位ストレージ装置＃３の復元先の領域に格納する（同図中（ｉ））。
【０１３４】
上記処理によると、１つのパスクループから転送バッファ１４２に送信されるデータは、１つの実行結果であり、下位ストレージ装置１８０とＢＥＰＫ１４０との間のデータ量を低減することができる。また、ＢＥＰＫ１４０から復元先の下位ストレージ装置１８０に送信される実行結果は、転送元のパスグループの数（本例では、１つ）であり、下位ストレージ装置１８０とＢＥＰＫ１４０との間のデータ量を低減することができる。
【０１３５】
図１６は、実施例１に係る通常データ復元処理のフローチャートである。
【０１３６】
ＭＰ１２１は、復元対象の領域である復元対象のパーセルのストライプが論理ページに対して割当てられていないか否かを判定する（ステップＳ６１）。ここで、復元対象のパーセルのストライプが論理ページに対して割当てられていないか否かについては、パーセルマッピングテーブル２２０により、復元対象のパーセルのストライプに対応する仮想プール空間番号と、エクステント番号と、ドライブオフセット＃とを特定し、当該エクステント番号及びドライブオフセット＃に基づいて物理ページ番号を特定し、ページマッピングテーブル２１０により、特定した物理ページ番号が論理ページ番号に対応付けられているか否かを特定することにより把握することができる。
【０１３７】
この結果、復元対象のパーセルのストライプが論理ページに割当てられていない場合（ステップＳ６１でＹ）には、ＭＰ１２１は、通常データ復元処理を終了する。
【０１３８】
一方、復元対象のパーセルのストライプが論理ページに割当てられている場合（ステップＳ６１でＮ）には、ＭＰ１２１は、パーセルマッピングテーブル２２０から復元元領域と、復元先領域とを格納する下位ストレージ装置１８０及び復元元領域及び復元先領域の下位ストレージ装置１８０での位置を算出する（ステップＳ６２）。
【０１３９】
次いで、ＭＰ１２１は、ＣＭ１３１に復元元領域のデータを格納するためのキャッシュスロットを確保し、確保したキャッシュスロットのロックを取得する（ステップＳ６３）。次いで、ＭＰ１２１は、復元元領域の下位ストレージ装置１８０から、ロックを取得したキャッシュスロットに対して、転送バッファ１４２を介して、復元元領域のデータ要素及び／又はパリティを転送する（ステップＳ６４）。
【０１４０】
次いで、ＭＰ１２１は、全ての復元元領域の下位ストレージ装置１８０から、復元元領域のデータ要素及び／又はパリティを転送し終えたか否かを判定し（ステップＳ６６）、その結果、全ての復元元領域の下位ストレージ装置１８０から、復元元領域のデータ要素及び／又はパリティを転送し終えていない場合（ステップＳ６６でＮ）には、ＭＰ１２１は、処理をステップＳ６３に進めて、処理の対象としていない復元元領域の下位ストレージ装置１８０を対象に処理を実行する一方、全ての復元元領域の下位ストレージ装置１８０から、復元元領域のデータ要素及び／又はパリティを転送し終えた場合（ステップＳ６６でＹ）には、処理をステップＳ６７に進める。
【０１４１】
次いで、ＭＰ１２１は、ＣＭ１３１に復元するデータを格納するためのキャッシュスロットを確保する（ステップＳ６７）。次いで、ＭＰ１２１は、ＣＭ１３１上の複数の復元元領域のデータに基づいて、データを復元する演算処理を実行して復元データを生成し、復元データをＣＭ１３１のキャッシュスロットに格納する（ステップＳ６８）。なお、復元されたデータは、以降において、図１２に示すまとめ書き処理が実行されると、下位ストレージ装置１８０に格納されることとなる。次いで、ＭＰ１２１は、復元元領域のデータを格納していたＣＭ１３１のキャッシュスロットを解放し（ステップＳ６９）、通常データ復元処理を終了する。
【０１４２】
図１７は、実施例１に係る管理サーバの管理画面の一例を示す図である。
【０１４３】
管理画面３００は、プールを単位として、当該プールに属する領域で管理されるデータ単位に対するデータ復元処理の種類をユーザが指定するための画面である。管理画面３００は、リビルド高速モード、すなわち、高速データ復元処理の実行を行う「ＯＮ」設定とするか、高速データ復元処理の実行を行わない「ＯＦＦ」設定とするかを指定するためのラジオボタンが表示されるデータ復元処理設定領域３１０を有する。このデータ復元処理設定領域３１０で選択されたラジオボタンに対応する設定内容が、管理サーバ２０から上位ストレージ装置１００に送信されて、例えば、ＬＭ１２２に管理される。ＭＰ１２１は、図１３のステップＳ４２でデータ復元処理を行う場合には、ＬＭ１２２の設定内容に基づいたデータ復元処理を実行する。
【０１４４】
なお、プールを単位として実行するデータ復元処理を設定する内容を説明したが、例えば、仮想ボリュームを単位として実行するデータ復元処理を設定するようにしても良く、また、上位ストレージ装置を単位として実行するデータ復元処理を設定するようにしても良い。
【実施例２】
【０１４５】
次に、実施例２について説明する。
【０１４６】
実施例２は、実施例１において、仮想プール空間５２をＲＡＩＤ６のＲＡＩＤグループで構成するようにしたものである。なお、実施例１と同様な部分については説明を省略する。
【０１４７】
図１８は、実施例２に係るデータの論理的な構成図である。
【０１４８】
ホスト１０により認識可能な仮想ボリューム５０は、複数の仮想ページ５１により構成される。仮想ページ５１には、仮想プール空間５２の物理ページ５５が割り当てられる。
【０１４９】
仮想プール空間５２においては、エクステント５３が管理される。エクステント５３は、複数のパーセル（Ｐａｒｃｅｌ）５４により構成される。パーセル５４は、１つのストレージ装置（例えば、下位ストレージ装置１８０）上の連続した領域で構成される。図１８では、パーセル５４は、４つのストライプ５７で構成される。
【０１５０】
エクステント５３は、図１８に示すように、ＲＡＩＤ６の６Ｄ＋２Ｐ構成、すなわち、データ単位を構成する６つのデータ要素（Ｄ）と、これらデータ要素に対応する２つのパリティ（Ｐ、Ｑ）とをそれぞれ異なるストレージ装置に格納する構成の場合には、例えば、８つの異なる下位ストレージ装置１８０のパーセル５４で構成される。なお、本実施例では、分散ＲＡＩＤの構成を採っているので、仮想プール空間５２の記憶領域を構成する複数（例えば、１６）の下位ストレージ装置１８０の中の異なる８つの下位ストレージ装置１８０のパーセル５４によって、エクステント５３が構成されており、各エクステント５３を構成するパーセル５４を含むストレージ装置１８０の組み合わせは、固定されていない。
【０１５１】
エクステント５３は、複数（例えば、２つの）の物理ページ５５を含む。物理ページ５５は、複数（例えば、２つ）のデータ単位のデータ要素及びパリティ（同一のストライプ列５６のデータ）を格納することができる。同図において、Ｄ１＿１、Ｄ２＿１、Ｄ３＿１、Ｄ４＿１、Ｄ５＿１、Ｄ６＿１、Ｐ＿１、Ｑ＿１のように、「＿」の後の数字が共通するものが、同一のデータ単位におけるデータ要素及びパリティを示す。なお、データ要素及びパリティは、ストライプ５７のサイズとなっている。
【０１５２】
なお、図１８では、６Ｄ＋２Ｐ構成のＲＡＩＤ６のＲＡＩＤグループにより仮想プール空間５２を構成した例を示していたが、ＲＡＩＤグループの構成は、これに限られず、Ｄ数（データ要素の数）を増やした、１４Ｄ＋２Ｐ構成としても良い。また、エクステント５３において、ＲＡＩＤ４のように、パリティを同一のパーセルに格納するようにしてもよい。また、Ｑパリティのエンコーディング方法は、ガロア演算に限らず、ＥＶＥＮＯＤＤ法など他の一般に知られた方法を用いても良い。
【０１５３】
図１９は、実施例２に係るガロア演算係数テーブルの一例を示す図である。
【０１５４】
ガロア演算係数テーブル２５０は、ＲＡＩＤ６のＱパリティを生成する際及び、Ｑパリティを用いてデータ要素を復元する際に利用する演算に用いるガロア演算係数を管理するテーブルである。ガロア演算係数テーブル２５０は、上位ストレージ装置１００の共有メモリ２００、物理的には、例えば、ＬＭ１２２に格納されており、上位ストレージ装置１００のＭＰ１２１が、ガロア演算係数テーブル２５０を下位ストレージ装置１８０のメモリ１８３に格納させる。
【０１５５】
ガロア演算係数テーブル２５０は、ＲＡＩＤ種別２５１と、係数２５２と、値２５３とのフィールドを含む。ＲＡＩＤ種別２５１には、ＲＡＩＤ６におけるデータ要素とパリティとの構成を示す種別が格納される。係数２５２には、エントリにおけるＲＡＩＤ種別２５１の種別に対応する構成のＲＡＩＤグループにおけるＱパリティのエンコーディングに使用する係数が格納される。値２５３には、エントリにおける係数２５２の係数に対応する値が格納される。このガロア演算係数テーブル２５０を参照することにより、ＲＡＩＤグループにおけるＱパリティのエンコーディングを行うことができる。
【０１５６】
図２０は、ＲＡＩＤにおける復元データの作成方法を説明する図である。
【０１５７】
この表においては、番号と、分類と、消失分類と、消失データ種別と、復元データ作成方法との対応関係を示している。番号（＃）は、エントリ（行）の番号を示す。分類は、ＲＡＩＤのレベルを示す。消失分類は、データの消失の程度を示す。消失の程度としては、ストライプ列の１つのストライプデータ要素が消失した１重障害と、ストライプ列の２つのストライプデータ要素が消失した２重障害とがある。消失データ種別は、消失したデータの種別を示す。データ種別としては、データ要素を示すＤｍ、Ｄｎや、パリティを示すＰ、Ｑがある。復元データ作成方法は、同一の行におけるＲＡＩＤレベルに対して、同一行の消失の程度が発生し、同一行の消失データ種別のデータが消失した場合における復元データを作成する方法を示す。
【０１５８】
具体的には、＃１の行によると、ＲＡＩＤ５に、１重障害が発生し、データ要素Ｄｍが消失した場合には、（Ｐ＋ΣＤｉ）の演算結果である１種類のデータにより復元できることがわかる。この場合には、高速データ復元処理において、下位ストレージ装置１８０のプロセッサ１８２は、（Ｐ＋ΣＤｉ）又は当該式の一部分について演算し、その結果を上位ストレージ装置１００に対して送信することとなる。また、＃６の行によると、ＲＡＩＤ６に、２重障害が発生し、データ要素Ｄｍ、Ｄｎの２つが消失した場合には、（Ｐ＋ΣＤ）と、（Ｑ＋ΣＡｉ×Ｄｉ）との演算結果である２種類のデータにより復元できることがわかる。なお、これらの演算結果に基づいて、Ｄｍ、Ｄｎを復元する方法については、公知であるので、ここでは説明を省略する。この場合には、高速データ復元処理において、下位ストレージ装置１８０のプロセッサ１８２は、（Ｐ＋ΣＤ）及び（Ｑ＋ΣＡｉ×Ｄｉ）、又はこれらの式の一部分の演算を行い、その結果を上位ストレージ装置１００に対して送信することとなる。
【０１５９】
実施例２では、下位ストレージ装置１８０のプロセッサ１８２は、図２０に示す復元データの作成方法に従って、複数のデータ要素及び／又はパリティから復元データ又は、部分復元データを作成する。この際に、プロセッサ１８２は、必要に応じて、メモリ１８３に格納されたガロア演算係数テーブル２５０を参照して、演算処理を行う。
【実施例３】
【０１６０】
次に、実施例３について説明する。
【０１６１】
実施例３は、実施例１におけるデータ復元処理（図１３のステップＳ４２）において実行する処理を、高速データ復元処理と、通常データ復元処理とのうちで、データ復元処理時間の短いと想定される処理を選択するようにしたものである。なお、実施例１と同様な部分については説明を省略する。
【０１６２】
図２１は、実施例３に係る復元処理選択処理のフローチャートである。
【０１６３】
復元処理選択処理は、実施例１における図１３のステップＳ４２において実行される。ＭＰ１２１は、データ復元効果の見積もりを実行し、高速データ復元処理と、通常データ復元処理とのいずれかが効果があるかを判断する（ステップＳ７１）。データ復元効果の見積もりは、例えば、（１）ＭＰ１２１は、復元対象のストライプ列における転送対象のストライプデータ要素（復元元ストライプデータ要素及び復元先ストライプデータ要素）の数（ＤＮという）と、転送対象のストライプデータ要素が格納されているパスグループの数（ＰＮという）とを算出する。（２）ＭＰ１２１は、通常データ復元処理のＢＥコントローラ１４３による転送回数（ＤＮ×２）を算出する。（３）ＭＰ１２１は、高速データ復元処理のＢＥコントローラ１４３による転送回数（転送回数＝（ＰＮ−１）×２×ストライプ列内の故障ドライブ数）を算出する。（４）ＭＰ１２１は、（２）で取得した通常データ復元処理の転送回数と、（３）で取得した高速データ復元処理の転送回数とを比較し、転送回数が少ない方が、効果があるデータ復元処理であると判断する。なお、データ復元効果の見積もりは、これに限られず、例えば、下位ストレージ装置１８０の負荷状況に応じて、通常データ復元処理を選択するようにしてもよい。
【０１６４】
次いで、ＭＰ１２１は、見積もりの結果、高速データ復元処理の効果があるか否かを判定し（ステップＳ７２）、高速データ復元処理の効果があると判定した場合（ステップＳ７２でＹ）には、高速データ復元処理（図１４）を実行する（ステップＳ７３）一方、高速データ復元処理の効果がないと判定した場合（ステップＳ７２でＮ）には、通常データ復元処理（図１６）を実行する（ステップＳ７４）。
【０１６５】
この復元処理選択処理を実行することにより、高速データ復元処理と、通常データ復元処理とのうちで、データ復元処理時間の短いと想定される処理を選択して実行することができる。
【０１６６】
例えば、仮想プール空間５２が、ＲＡＩＤ６の６Ｄ２Ｐ構成となっており、或るストライプ列のデータ要素Ｄ１及びＤ２がパスグループ１に格納され、データ要素Ｄ３及びＤ４がパスグループ２に格納され、Ｐパリティがパスグループ３に格納され、データ要素Ｄ５がパスグループ４に格納されており、データ要素Ｄ６を格納するストレージ装置が故障し、データ要素Ｄ６の復元先領域をパスグループ３のストレージ装置とする場合には、復元処理選択処理が実行されると次のようになる。
【０１６７】
ＭＰ１２１は、ＲＡＩＤグループが６Ｄ２Ｐ構成であり、この例では、Ｑパリティを利用しなくてよいので、ＤＮ＝６＋２−１＝７と算出し、転送対象のストライプデータ要素（Ｄ１〜Ｄ４、Ｐ、復元するＤ５）は、パスグループ１〜４の４つに含まれることとなるので、ＰＮ＝４と算出する。また、ＭＰ１２１は、通常データ復元処理のＢＥコントローラ１４３による転送回数＝ＤＮ×２＝１４と算出する。また、ＭＰ１２１は、高速データ復元処理のＢＥコントローラ１４３による転送回数＝（ＰＮ−１）×２×ストライプ列内の故障ドライブ数＝（４−１）×２×１＝６と算出する。この結果、高速データ復元処理のＢＥコントローラ１４３による転送回数が、通常データ復元処理のＢＥコントローラ１４３による転送回数より少ないので、ＭＰ１２１は、高速データ復元処理の効果があると判定し、高速データ復元処理を実行することとなる。
【０１６８】
また、例えば、仮想プール空間５２が、ＲＡＩＤ６の３Ｄ２Ｐ構成となっており、或るストライプ列のデータ要素Ｄ１がパスグループ１に格納され、Ｐパリティがパスグループ２に格納され、Ｑパリティがパスグループ４に格納されており、データ要素Ｄ２及びＤ３を格納する２台のストレージ装置が故障し、データ要素Ｄ２の復元先領域をパスグループ３のストレージ装置とし、データ要素Ｄ３の復元先領域をパスグループ４のストレージ装置とする場合には、復元処理選択処理が実行されると次のようになる。
【０１６９】
ＭＰ１２１は、ＲＡＩＤグループが３Ｄ２Ｐ構成であるので、ＤＮ＝３＋２＝５と算出し、転送対象のストライプデータ要素（Ｄ１、Ｐ、Ｑ，復元するＤ２、Ｄ３）がパスグループ１〜４の４つに含まれることとなるので、ＰＮ＝４と算出する。また、ＭＰ１２１は、通常データ復元処理のＢＥコントローラ１４３による転送回数＝ＤＮ×２＝１０と算出する。また、ＭＰ１２１は、高速データ復元処理のＢＥコントローラ１４３による転送回数＝（ＰＮ−１）×２×ストライプ列内の故障ドライブ数＝（４−１）×２×２＝１２と算出する。この結果、通常データ復元処理のＢＥコントローラ１４３による転送回数が、高速データ復元処理のＢＥコントローラ１４３による転送回数より少ないので、ＭＰ１２１は、通常データ復元処理の効果があると判定し、通常データ復元処理を実行することとなる。
【実施例４】
【０１７０】
次に、実施例４に係る計算機システムについて説明する。
【０１７１】
実施例４は、実施例１におけるデータ復元処理（図１３のステップＳ４２）において、高速データ復元処理を実行し、高速データ復元処理が失敗した時に、通常データ復元処理を行うようにしたものである。なお、実施例１と同様な部分については説明を省略する。
【０１７２】
図２２は、実施例４に係るデータ復元処理のフローチャートである。
【０１７３】
ＭＰ１２１は、高速データ復元処理（図１４）を実行する（ステップＳ７５）。次いで、ＭＰ１２１は、高速データ復元処理が失敗したか否かを判定し（ステップＳ７６）、高速データ復元処理が失敗していない場合（ステップＳ７６でＮ）には、データ復元処理を終了する。
【０１７４】
一方、高速データ復元処理が失敗した場合（ステップＳ７６でＹ）には、ＭＰ１２１は、高速データ復元処理においてストライプデータ要素を読み出し、また、ストライプデータ要素を書き込む処理を実行する下位ストレージ装置１８０に対して、リビルド中断命令を発行する（ステップＳ７７）。リビルド中断命令を受信した下位ストレージ装置１８０のプロセッサ１８２は、高速データ復元処理で確保したメモリ１８３のバッファを解放する。次いで、ＭＰ１２１は、通常データ復元処理（図１６）を実行する（ステップＳ７８）。
【０１７５】
実施例４に係る計算機システムによると、高速データ復元処理が失敗した場合であっても、通常データ復元処理により適切にデータの復元を行うことができる。
【実施例５】
【０１７６】
次に、実施例５に係る計算機システムについて説明する。
【０１７７】
実施例５は、上位ストレージ装置１００に複数の外部ストレージ装置４０を接続し、複数の外部ストレージ装置４０によりＲＡＩＤグループを構成し、このＲＡＩＤグループの領域を仮想プール空間５２の記憶領域としたものである。
【０１７８】
図２３は、実施例５に係る外部ストレージ装置の構成図である。
【０１７９】
外部ストレージ装置４０は、ポート４１と、プロセッサ４２と、メモリ４３と、バックエンドコントローラ４４と、１以上のフラッシュメモリチップ４５とを有する。
【０１８０】
ポート４１は、ＦＥＰＫ１１０のポート１１１、又は、他の外部ストレージ装置４０との通信を行うためのインターフェースである。メモリ４３は、プログラムや、各種情報を格納する。プロセッサ４２は、メモリ４３に格納されたプログラムを実行し、メモリ４３に格納された情報を利用することで各種処理を行う。本実施例では、プロセッサ４２は、ポート１１１を介して上位ストレージ装置１００から送信される各種コマンドに対応する処理を実行する。ここで、各種コマンドは、実施例１において、ＭＰ１２１が下位ストレージ装置１８０に送信するコマンドと同様であり、プロセッサ４２は、これらコマンドに対して、下位ストレージ装置１８０のプロセッサ１８２と同様な処理を実行する。また、プロセッサ４２は、パリティ演算器１４１と同様な演算処理を実行する。バックエンドコントローラ４４は、フラッシュメモリチップ４５とのデータのやり取りを仲介する。フラッシュメモリチップ４５は、例えば、ＮＡＮＤ型のフラッシュメモリチップであっても良く、また、他種（例えばＮＯＲ型）のフラッシュメモリであっても良いし、ＰＲＡＭやＲｅＲＡＭであってもよい。また、磁気ディスクであってもよい。
【０１８１】
実施例５に係る計算機システムでは、実施例１において、下位ストレージ装置１８０が行っていた処理を、外部ストレージ装置４０が行い、上位ストレージ装置１００がＢＥＰＫ１４０を介して行っていた処理を、ＦＥＰＫ１１０を介して行う。なお、実施例５においては、例えば、同一のポート１１１に接続された複数の外部ストレージ装置４０のグループを、下位ストレージ装置１８０における同一のパスグループと同様に取り扱い、便宜的にパスグループということとする。同一のポート１１１に接続される複数の外部ストレージ装置４０は、別サイト、すなわち、サイトローカルなスイッチと、エクステンダとを介して接続されていてもよい。
【０１８２】
図２４は、実施例５に係る高速データ復元処理を説明する図である。
【０１８３】
ここで、複数の外部ストレージ装置４０によりＲＡＩＤ５の３Ｄ＋１Ｐが構成されており、外部ストレージ装置＃０に、データ要素Ｄ１が格納され、外部ストレージ装置＃１に、Ｐパリティが格納され、外部ストレージ装置＃２に、データ要素Ｄ２が格納され、図示しない外部ストレージ装置４０にデータ要素Ｄ３が格納されているものとする。また、外部ストレージ装置＃０と、外部ストレージ装置＃１とは、同一のパスグループに属し、外部ストレージ装置＃２と、外部ストレージ装置＃３とは、同一のパスグループに属するものとする。
【０１８４】
ここで、データ要素Ｄ３を格納している外部ストレージ装置４０が故障し、外部ストレージ装置＃３にデータ要素Ｄ３を復元する場合の高速データ復元処理について説明する。
【０１８５】
高速データ復元処理においては、ＭＰ１２１がＦＥＰＫ１１０のポート１１１を介してパリティ復元リードコマンドを、データ要素Ｄ３と同一のストライプ列のデータ要素Ｄ１及びＰパリティを格納しているパスグループにおける外部ストレージ装置＃１に発行する（同図中（１））。
【０１８６】
外部ストレージ装置＃１では、パリティ復元リードコマンドを受信すると、プロセッサ４２がコマンドに従って処理を開始して、外部ストレージ装置＃１のメモリ４３にバッファを確保し（同図中（ａ））、外部ストレージ装置＃０からデータ要素Ｄ１を取得してバッファにコピーし（同図中（ｂ））、データ要素Ｄ１と、外部ストレージ装置＃１内に格納されている同一のストライプ列のＰパリティとの排他的論理和を実行し、実行結果（Ｄ１＋Ｐ）を上位ストレージ装置１００に送信する（同図中（ｄ））。なお、その後、プロセッサ４２は、メモリ４３に確保したバッファを開放する（同図中（ｅ））。
【０１８７】
上位ストレージ装置１００では、ＭＰ１２１が外部ストレージ装置＃１から送信された実行結果（Ｄ１＋Ｐ）のデータを転送バッファ１４２に格納する。転送バッファ１４２に格納された実行結果（Ｄ１＋Ｐ）は、ＣＭ１３１に転送されない。
【０１８８】
次いで、ＭＰ１２１は、ポート１１１を介してパリティ復元ライトコマンドを、外部ストレージ装置＃１の属するパスグループと異なるパスグループの復元先の外部ストレージ装置＃３に発行する（同図中（３））。
【０１８９】
外部ストレージ装置＃３では、パリティ復元ライトコマンドを受信すると、プロセッサ４２がコマンドに従って処理を開始して、外部ストレージ装置＃３のメモリ４３にバッファを確保し（同図中（ｆ））、ＭＰ１２１により転送バッファ１４２から転送される実行結果（Ｄ１＋Ｐ）を受信する（同図中（ｇ））。次いで、外部ストレージ装置＃３のプロセッサ４２は、外部ストレージ装置＃２から、データ要素Ｄ３と同一のストライプ列のデータ要素Ｄ２を取得して、バッファにコピーし（同図中（ｈ））、バッファに格納した実行結果（Ｄ１＋Ｐ）とデータ要素Ｄ２との排他的論理和を実行して、データ要素Ｄ３を復元し、データ要素Ｄ３を外部ストレージ装置＃３の復元先の領域に格納する（同図中（ｉ））。
【０１９０】
上記処理によると、１つのパスクループから転送バッファ１４２に送信されるデータは、１つの実行結果であり、外部ストレージ装置４０とＦＥＰＫ１１０との間のデータ量を低減することができる。また、ＦＥＰＫ１１０から復元先の外部ストレージ装置＃３に送信される実行結果は、転送元のパスグループの数（本例では、１つ）であり、外部ストレージ装置４０とＦＥＰＫ１１０との間のデータ量を低減することができる。
【０１９１】
次に、実施例６に係る計算機システムについて説明する。
【実施例６】
【０１９２】
実施例６は、１以上のストレージ装置（下位ストレージ装置１８０又は外部ストレージ装置４０）に、そのストレージ装置が属するパスグループ内の同一のストライプ列のストライプデータ要素に基づいて演算された部分復元データを記憶するようにしておき、以降において、その部分復元データを利用して、ストライプデータ要素の復元を行うものである。ＢＥコントローラまたはその接続のためのネットワークのスループットが、下位ストレージ装置間のネットワークのスループットよりも低い場合に、部分復元データの生成処理が高速なのに対して、上位ストレージ装置を経由した復元処理が遅くなり、そのスループットに引きずられてリビルド処理の性能低下が発生する場合が考えられる。その場合は、部分データを各パスグループ内の下位ストレージ装置の空きパーセルに格納しておくことにより、リビルド実行中の下位ストレージ装置のさらなる故障にも対応可能とすることができ、信頼性を向上できる。
【０１９３】
図２５は、実施例６に係るパーセルマッピングテーブルの一例を示す図である。
【０１９４】
パーセルマッピングテーブル２６０は、エクステントに割り当てられた物理パーセルを管理するためのテーブルである。パーセルマッピングテーブル２６０は、仮想プール空間番号２６１と、エクステント番号（＃）２６２と、ドライブオフセット番号（＃）２６３と、物理ドライブ番号（＃）２６４と、物理パーセル番号（＃）２６５と、パーセル状態２６６と、復元データ種別２６７とのフィールドを含むエントリを管理する。各フィールドは、図７に示す同一の名称のフィールドと基本的には同様である。ここでは、パーセルマッピングテーブル２２０との差異を説明する。
【０１９５】
実施例６のパーセルマッピングテーブル２６０では、同一仮想プール空間の同一のエクステントにおけるドライブオフセットに対して、複数の物理パーセルを対応付けて管理できるようになっている。すなわち、同一仮想プール空間の同一のエクステントの同一ドライブオフセットに対して、複数の物理ドライブ＃と、物理パーセル番号と、パーセル状態、復元データ種別とを対応付けて記憶できる。
【０１９６】
また、パーセル状態２６６に格納されるパーセル状態の１つとして、新たに、同一のストライプ列における一部のストライプデータ要素に基づいて演算された部分復元データが格納されていることを示す「部分復元データ格納」が追加されている。
【０１９７】
復元データ種別２６７には、同一のエントリにおけるパーセル状態２６６が「部分復元データ格納」である場合において、部分復元データを算出するために用いたデータ要素及び／又はパリティを示す情報が格納される。
【０１９８】
同図においては、仮想プール空間「２」のエクステント「０」のドライブオフセット「３」について、物理ドライブ「１」の物理パーセル「１」には、復元要のデータが格納され、物理ドライブ「２」の物理パーセル「４」には、部分復元データが格納され、部分復元データは、データ要素Ｄ１＋Ｐパリティであることを示している。
【０１９９】
図２６は、実施例６に係るリビルド処理における部分復元データ生成処理を説明する図である。
【０２００】
ここで、複数の下位ストレージ装置１８０によりＲＡＩＤ５の３Ｄ＋１Ｐが構成されており、下位ストレージ装置＃０に、データ要素Ｄ１が格納され、下位ストレージ装置＃１に、Ｐパリティが格納され、下位ストレージ装置＃３に、データ要素Ｄ２が格納され、図示しない下位ストレージ装置１８０にデータ要素Ｄ３が格納されているものとする。この下位ストレージ１８０は故障したものとし、実施例６は、データ要素Ｄ３が失われている状態における、各パスグループ内のリビルド処理を表わしている。また、下位ストレージ装置＃０、下位ストレージ装置＃１、及び下位ストレージ装置＃２は、同一のパスグループに属し、下位ストレージ装置＃３と、下位ストレージ装置＃４とは、同一のパスグループに属するものとする。
【０２０１】
図２６に示す部分復元データ生成処理は、例えば、任意の時点で実行される。ＭＰ１２１は、下位ストレージ装置＃２及び下位ストレージ装置＃４のそれぞれに対して、各パスグループでの部分復元データを生成させるためのコマンドを送信する。
【０２０２】
下位ストレージ装置＃２は、下位ストレージ装置＃２のメモリ１８３にバッファを確保し、同一のパスグループ１７０の下位ストレージ装置＃０からデータ要素Ｄ１を取得してバッファにコピーするとともに、下位ストレージ装置＃１からＰパリティを取得してバッファにコピーし、バッファにコピーしたデータ要素Ｄ１とＰパリティとの排他的論理和を実行し、実行結果（Ｄ１＋Ｐ）を下位ストレージ装置＃２の新たに確保したパーセルに格納し、コマンドの応答を上位ストレージ装置１００に返す。
【０２０３】
コマンドの応答を受けた上位ストレージ装置１００のＭＰ１２１は、パーセルマッピングテーブル２６０において、部分復元データを作成した対象のストライプ列に対応するエントリ、すなわち、仮想プール空間番号、エクステント＃、ドライブオフセット＃を共通とするエントリを追加し、そのエントリにおいて、パーセル状態２６６を「部分復元データ格納」とし、物理ドライブ＃２６４に復元先の物理ドライブ＃を格納し、物理パーセル＃２６５に復元先の物理パーセル＃を格納し、復元データ種別２６７に、部分復元データの作成で使用したストライプデータ要素を示す（Ｄ１＋Ｐ）を格納する。
【０２０４】
また、別のパスグループ１７０に属する下位ストレージ装置＃４は、下位ストレージ装置＃４のメモリ１８３にバッファを確保し、下位ストレージ装置＃３からデータ要素Ｄ２を取得し、下位ストレージ装置＃４の新たに確保したパーセルに格納し、コマンドの応答を上位ストレージ装置１００に返す。
【０２０５】
コマンドの応答を受けた上位ストレージ装置１００のＭＰ１２１は、パーセルマッピングテーブル２６０において、部分復元データを作成した対象のストライプ列に対応するエントリ、すなわち、仮想プール番号、エクステント＃、ドライブオフセット＃を共通とするエントリを追加し、そのエントリにおいて、パーセル状態２６６を「部分復元データ格納」とし、物理ドライブ＃２６４に復元先の物理ドライブ＃を格納し、物理パーセル＃２６５に復元先の物理パーセル＃を格納し、復元データ種別２６７に、部分復元データの作成で使用したストライプデータ要素を示す（Ｄ２）を格納する。
【０２０６】
図２７は、実施例６に係るリビルド処理におけるデータ復元処理を説明する図である。
【０２０７】
ここで、データ要素Ｄ３を格納している下位ストレージ装置１８０が故障し、下位ストレージ装置＃４にデータ要素Ｄ３を復元する場合のデータ復元処理のうち、各パスグループ間を跨ったデータの復元処理（図２６の続き）について説明する。なお、この処理は図２６の各パスグループ内でのデータの復元処理とは非同期に、生成された部分復元データを基に実行する。
【０２０８】
ＭＰ１２１は、パーセルマッピングテーブル２６０を参照し、データ要素Ｄ３の復元に必要な部分復元データを格納しているパーセル、すなわち、下位ストレージ装置＃２のパーセルを特定する。次いで、ＭＰ１２１は、ＢＥＰＫ１４０のＢＥコントローラ１４３を介して、下位ストレージ装置＃２から部分復元データ（Ｄ１＋Ｐ）を転送バッファ１４２に格納する。転送バッファ１４２に格納された部分復元データ（Ｄ１＋Ｐ）は、ＣＭ１３１に転送されない。なお、以降において、下位ストレージ装置＃２のプロセッサ１８２は、実行結果を格納していたパーセルを解放する。これに伴い、ＭＰ１２１は、パーセルマッピングテーブル２６０の開放したパーセルに対応するエントリを削除する。
【０２０９】
次いで、ＭＰ１２１は、ＢＥコントローラ１４３を介して、下位ストレージ装置＃４のメモリ１８３のバッファに部分復元データ（Ｄ１＋Ｐ）を格納させる。下位ストレージ装置＃４のプロセッサ１８２は、バッファに格納されている部分復元データ（Ｄ１＋Ｐ）と、パーセルに格納されているデータ要素Ｄ２との排他的論理和を実行し、その実行結果、すなわちデータ要素Ｄ３を下位ストレージ装置＃４に格納する。なお、以降において、下位ストレージ装置＃４のプロセッサ１８２は、データ要素Ｄ２を格納していたパーセルを解放する。これに伴い、ＭＰ１２１は、パーセルマッピングテーブル２６０の開放したパーセルに対応するエントリを削除する。
【０２１０】
このデータ復元処理によると、上位ストレージ装置１００は、下位ストレージ装置１８０から部分復元データを取得して、復元処理を行う下位ストレージ装置１８０に送信することで、下位ストレージ装置１８０に復元されたデータを格納させることができる。このため、上位ストレージ装置１００と、下位ストレージ装置１８０との間での通信量を低減することができる。また、上位ストレージ装置１００では、このデータ復元処理における部分復元データをＣＭ１３１に格納しないので、ＣＭ１３１に対する負荷や、内部ネットワーク１５０に対する負荷を抑えることができる。
【０２１１】
図２８は、実施例６に係るリビルド中の故障対処処理を説明する第１の図である。
【０２１２】
図２８は、図２６に示す状態において、データ要素Ｄ１を格納している下位ストレージ装置＃０が故障し、下位ストレージ装置＃２にデータ要素Ｄ１を復元する場合の故障対処処理を示す。
【０２１３】
ＭＰ１２１は、パーセルマッピングテーブル２６０を参照して、データ要素Ｄ１を用いて演算された部分復元データを格納している下位ストレージ装置＃２を特定し、当該下位ストレージ装置＃２に対して、データ要素Ｄ１を復元させるためのコマンドを送信する。下位ストレージ装置＃２のプロセッサ１８２は、メモリ１８３にバッファを確保し、同一のパスグループ１７０の下位ストレージ装置＃１からＰパリティを取得してバッファにコピーし、バッファにコピーしたＰパリティと、パーセルに格納されている部分復元データ（Ｄ１＋Ｐ）との排他的論理和を実行して、データ要素Ｄ１を復元し、データ要素Ｄ１を下位ストレージ装置＃２の新たに確保したパーセルに格納する。この故障対処処理によると、１つのパスグループ内で、部分復元データを用いてデータ要素を復元することができるので、データ復元を迅速に行うことができる。
【０２１４】
図２９は、実施例６に係るリビルド中の故障対処処理を説明する第２の図である。
【０２１５】
図２９は、図２６に示す状態において、Ｐパリティを格納している下位ストレージ装置＃１が故障し、下位ストレージ装置＃２にパリティＰを復元する場合の故障対処処理を示す。
【０２１６】
ＭＰ１２１は、パーセルマッピングテーブル２６０を参照して、Ｐパリティを用いて演算された部分復元データを格納している下位ストレージ装置＃２を特定し、当該下位ストレージ装置＃２に対して、パリティＰを復元させるためのコマンドを送信する。下位ストレージ装置＃２のプロセッサ１８２は、メモリ１８３にバッファを確保し、同一のパスグループ１７０の下位ストレージ装置＃０からデータ要素Ｄ１を取得してバッファにコピーし、バッファにコピーしたデータ要素Ｄ１と、パーセルに格納されている部分復元データ（Ｄ１＋Ｐ）との排他的論理和を実行して、Ｐパリティを復元し、Ｐパリティを下位ストレージ装置＃２の新たに確保したパーセルに格納する。この故障対処処理によると、１つのパスグループ内で、部分復元データを用いてパリティを復元することができるのでデータ復元を迅速に行うことができる。
【０２１７】
図３０は、実施例６に係るリビルド中の故障対処処理を説明する第３の図である。
【０２１８】
図３０は、図２６に示す状態において、データ要素Ｄ２を格納している下位ストレージ装置＃３が故障した場合の故障対処処理を示す。
【０２１９】
この場合においては、下位ストレージ装置＃３と同一のパスグループである下位ストレージ装置＃４に、当該パスグループ内での部分復元データ、この例では、データ要素Ｄ２が格納されている。このため、下位ストレージ装置＃４からデータ要素Ｄ２を取得することができる。
【０２２０】
以上のようにして、各パスグループ間を跨ったデータの復元処理が完了していない場合で、かつ各パスグループ間の部分復元データの生成が完了している場合に、別の下位ストレージ装置の故障が発生した場合においてもデータ復元を実行でき、かつ各パスグループ間を跨ったデータの転送量を削減することによりデータ復元を迅速に行うことができる。
【実施例７】
【０２２１】
次に、実施例７に係る計算機システムについて説明する。
【０２２２】
実施例７は、下位ストレージ装置１８０が、例えば、フラッシュメモリデバイスのように、故障が発生してライトが不可能であっても、リードが可能である記憶媒体である場合において、リードが可能である下位ストレージ装置１８０のデータを用いるようにしたものである。実施例７の共有メモリ２００は、実施例１の共有メモリ２００に、更に復元済みビットマップテーブル２７０を格納するとともに、パーセルマッピングテーブル２１０に代えてパーセルマッピングテーブル２８０を格納し、ドライブ状態テーブル２３０に代えてドライブ状態テーブル２９０を格納したものである。
【０２２３】
図３１は、実施例７に係る復元済みビットマップテーブルの一例を示す図である。
【０２２４】
復元済みビットマップテーブル２７０は、パーセルに格納されたデータの復元状態を管理するためのテーブルである。復元済みビットマップテーブル２７０は、物理ドライブ＃２７１と、物理パーセル＃２７２と、復元ビットマップ２７３とのフィールドを含むエントリを管理する。
【０２２５】
物理ドライブ＃２７１には、下位ストレージ装置１８０の番号（物理ドライブ＃）が格納される。物理パーセル＃２７２には、物理ドライブ＃２７１の物理ドライブ＃に対応する下位ストレージ装置１８０における物理パーセルの番号（物理パーセル＃）が格納される。復元ビットマップ１７３には、同じエントリにおける物理パーセル＃２７２の物理パーセルにおける各サブブロックに対応する、復元したか否かを示すビットの集合（ビットマップ）が格納される。本実施例では、サブブロックが復元されている場合には、サブブロックに対応するビットに、“１”が設定され、復元されていない場合には、サブブロックに対応するビットに“０”が設定される。なお、本実施例では、サブブロックを単位に復元されているか否かを管理するようにしているが、これに限られず、例えば、より大きい単位（スロット、ストライプデータ、パーセル等）を単位として復元されているか否かを管理するようにしても良い。
【０２２６】
図３２は、実施例７に係るパーセルマッピングテーブルの一例を示す図である。
【０２２７】
パーセルマッピングテーブル２８０は、エクステントに割り当てられた物理パーセルを管理するためのテーブルである。パーセルマッピングテーブル２８０は、仮想プール空間番号２８１と、エクステント番号（＃）２８２と、ドライブオフセット番号（＃）２８３と、物理ドライブ番号（＃）２８４と、物理パーセル番号（＃）２８５と、パーセル状態２８６とのフィールドを含むエントリを管理する。各フィールドは、図７に示す同一の名称のフィールドと基本的には同様である。ここでは、パーセルマッピングテーブル２２０との差異を説明する。
【０２２８】
パーセルマッピングテーブル２８０では、同一仮想プール空間の同一のエクステントにおけるドライブオフセットに対して、複数の物理パーセルを対応付けて管理できるようになっている。すなわち、同一仮想プール空間の同一のエクステントの同一ドライブオフセットに対して、複数の物理ドライブ＃と、物理パーセル番号と、パーセル状態を対応付けて記憶できる。
【０２２９】
また、パーセル状態２８６に格納されるパーセル状態の１つとして、同一のストライプ列における復元データが格納されるパーセルであることを示す「復元データ格納」が追加されている。
【０２３０】
同図においては、仮想プール空間「２」のエクステント「０」のドライブオフセット「３」について、物理ドライブ「１」の物理パーセル「１」に復元要のデータ、すなわち、旧データが格納されることを示し、物理ドライブ「２」の物理パーセル「４」に復元データが格納されることを示している。
【０２３１】
図３３は、実施例７に係るドライブ状態テーブルの一例を示す図である。
【０２３２】
ドライブ状態テーブル２９０は、仮想プール空間を構成する物理ドライブの状態を管理するテーブルである。ドライブ状態テーブル２９０は、仮想プール空間番号２９１と、物理ドライブ番号２９２と、エラー回数（Ｒｅａｄ）２９３と、エラー回数（Ｗｒｉｔｅ）２９４と、状態２９５とのフィールドを含むエントリを管理する。
【０２３３】
仮想プール空間番号２９１には、仮想プール空間の番号（仮想プール空間番号）が格納される。物理ドライブ番号２９２には、エントリの仮想プール空間番号２９１の仮想プール空間番号に対応する仮想プール空間を構成する物理ドライブの番号（物理ドライブ番号）が格納される。エラー回数（Ｒｅａｄ）２９３には、物理ドライブ番号２９２の物理ドライブ番号に対応する下位ストレージ装置１８０におけるＲｅａｄ時のエラー回数（リードエラー回数）が格納される。エラー回数（Ｗｒｉｔｅ）２９４には、物理ドライブ番号２９２の物理ドライブ番号に対応する下位ストレージ装置１８０におけるＷｒｉｔｅ時のエラー回数（ライトエラー回数）が格納される。状態２９５には、エントリの物理ドライブ番号２９２の物理ドライブ番号に対応する物理ドライブ（下位ストレージ装置１８０）の状態が格納される。物理ドライブの状態としては、物理ドライブが正常であることを示す「正常」、物理ドライブに対するリード及びライトが不可能なことを示す「異常（アクセス不可）」、又は、物理ドライブに対するライトのみが不可能であることを示す「異常（Ｗ不可）」が設定される。
【０２３４】
図３４は、実施例７に係る故障検出処理のフローチャートである。
【０２３５】
故障検出処理は、例えば、所定の時間毎に、ドライブ状態テーブル２９０の物理ドライブ番号２９２に格納されている各物理ドライブ番号の下位ストレージ装置１８０を対象にして実行される。ＭＰ１２１は、ドライブ状態テーブル２９０の処理対象の下位ストレージ装置１８０に対応するエントリを参照し、当該エントリのエラー回数（Ｗｒｉｔｅ）２９４に格納されているライトエラー回数が所定のライトエラーに関する閾値を超えているか否かを判定する（ステップＳ８１）。この結果、ライトエラー回数が所定のライトエラーに関する閾値を超えていない場合（ステップＳ８１でＮ）には、ＭＰ１２１は、故障検出処理を終了する。
【０２３６】
一方、ＭＰ１２１は、当該エントリのエラー回数（Ｒｅａｄ）２９３のリードエラー回数が所定のリードエラーに関する閾値を超えているか否かを判定する（ステップＳ８２）。ここで、リードエラーに関する閾値は、ライトエラーに関する閾値より大きい値となっている。
【０２３７】
この結果、リードエラー回数がリードエラーに関する閾値を超えている場合（ステップＳ８２でＹ）には、ＭＰ１２１は、処理をステップＳ８４に進める。一方、リードエラー回数がリードエラーに関する閾値を超えていない場合（ステップＳ８２でＮ）には、ＭＰ１２１は、対象の下位ストレージ装置１８０が、例えば、フラッシュメモリのようにライトが不可能であってもリードが可能である、ＲｅａｄＯｎｌｙ対応メディアであるか否かを判定する（ステップＳ８３）。
【０２３８】
この判定の結果、対象の下位ストレージ装置１８０がＲｅａｄＯｎｌｙ対応メディアでない場合（ステップＳ８３でＮ）には、ＭＰ１２１は、処理をステップＳ８４に進める一方、対象の下位ストレージ装置１８０がＲｅａｄＯｎｌｙ対応メディアである場合（ステップＳ８３でＹ）には、処理をステップＳ８５に進める。
【０２３９】
ステップＳ８４では、ＭＰ１２１は、ドライブ状態テーブル２９０の対象の下位ストレージ装置１８０のエントリの状態２９５に「異常（アクセス不可）」を設定する。
【０２４０】
ステップＳ８５では、ＭＰ１２１は、ドライブ状態テーブル２９０の対象の下位ストレージ装置１８０のエントリの状態２９５に「異常（Ｗ不可）」を設定する。
【０２４１】
なお、リードエラー回数、ライトエラー回数に基づいて、下位ストレージ装置１８０の故障種別を検出するようにしていたが、本発明はこれに限られず、例えば、ＭＰ１２１が下位ストレージ装置１８０に対してコマンド等を発行し、下位ストレージ装置１８０の故障種別を問い合わせるようにしても良い。
【０２４２】
図３５は、実施例７に係るライト処理を説明する図である。
【０２４３】
ライト処理は、例えば、ホストからのＩ／Ｏコマンド（ライトコマンド又はリードコマンド）に同期して実行してもよいし、ホストからのＩ／Ｏコマンドと非同期で実行してもよい。ＭＰ１２１は、ＣＭ１３１上にストレージ装置（下位ストレージ装置１８０又は外部ストレージ装置４０）に未反映のデータがあるか否かを判定する（ステップＳ９１）。この結果、ＣＭ１３１上に未反映のデータがない場合（ステップＳ９１でＮ）には、ＭＰ１２１は、ライト処理を終了する。
【０２４４】
一方、ＣＭ１３１上に未反映のデータがある場合（ステップＳ９１でＹ）には、ＭＰ１２１は、未反映のデータを格納する領域の範囲に、復元要のパーセルがあるか否かを判定する（ステップＳ９２）。この判定する処理は、図１１のステップＳ１３と同様である。
【０２４５】
この結果、未反映のデータを格納する領域の範囲に復元要のパーセルがある場合（ステップＳ９２でＹ）には、ＭＰ１２１は、処理をステップＳ９３に進める一方、未反映のデータを格納する領域の範囲に復元要のパーセルがない場合（ステップＳ９２でＮ）には、ＭＰ１２１は、通常ライト処理を実行し（ステップＳ９８）、処理をステップＳ９１に進める。
【０２４６】
ステップＳ９３では、ＭＰ１２１は、故障ドライブ数が当該未反映データを格納する領域を構成するＲＡＩＤグループのパリティ数を超えたか否かを判定する。この結果、故障ドライブ数が当該未反映データを格納する領域を構成するＲＡＩＤグループのパリティ数を超えていない場合（ステップＳ９３でＮ）には、ＭＰ１２１は、コレクションライト処理を実行する（ステップＳ９４）。コレクションライト処理は、図１２のステップＳ２４と同様である。
【０２４７】
一方、故障ドライブ数が当該未反映データを格納する領域を構成するＲＡＩＤグループのパリティ数を超えている場合（ステップＳ９３でＹ）には、ＭＰ１２１は、復元済みビットマップテーブル２７０を参照し、未反映データを格納する領域に対応する復元ビットがＯＮ（“１”）であるか否かを判定する（ステップＳ９５）。
【０２４８】
この結果、未反映データを格納するパーセルの領域に対応する復元ビットがＯＮである場合（ステップＳ９５でＹ）には、ＭＰ１２１は、通常ライト処理を実行し（ステップＳ９８）、処理をステップＳ９１に進める。
【０２４９】
一方、未反映データを格納するパーセルの領域に対応する復元ビットがＯＮない場合（ステップＳ９５でＮ）には、ＭＰ１２１は、異常（Ｗ不可）の状態の下位ストレージ装置１８０から未反映データに対応する領域の旧データをリードし、当該旧データと、ＣＭ１３１上の未反映データ（新データ）とをマージして復元データを生成し、復元データを格納するための新たなパーセルを非故障ドライブから確保して、そこに復元データを格納し（ステップＳ９６）、復元済みビットマップテーブル２７０の復元ビットマップ２７３の未反映データを格納するパーセルの領域に対応する復元ビットをＯＮに設定し（ステップＳ９７）、処理をステップＳ９１に進める。この際に、パーセルマッピングテーブル２８０に、復元データが格納されているパーセルを示すエントリを追加することにより、ホストＩ／Ｏを復元データが格納されているパーセルに対して実行できる。
【０２５０】
実施例７におけるリード処理においては、ＭＰ１２１がホスト１０からリード要求を受信すると、ドライブ状態テーブル２９０を参照し、リード要求に対応する下位ストレージ装置１８０の故障状態が異常（Ｗ不可）である場合には、当該下位ストレージ装置１８０は、リードに関しては適切に動作することを意味しているので、当該下位ストレージ装置１８０から通常通りにリード要求に対応するデータをリードする。以上の処理によって、冗長度を超える異常の状態のドライブが発生しても、異常（Ｗ不可）の状態であれば、継続してホストＩ／Ｏ処理を実行することができる。また、本実施例ではパーセルのマッピングを管理しているが、同様の方法を仮想ページについて実施してもよい。
【実施例８】
【０２５１】
次に、実施例８に係る計算機システムについて説明する。
【０２５２】
実施例８は、複数の下位ストレージ装置１８０により構成されるＲＡＩＤグループを、例えば、ＲＡＩＤ６のように、複数（例えば、２つ）の下位ストレージ装置１８０が故障してもリビルドできる構成、すなわち、冗長度が２以上の構成としている場合において、更に下位ストレージ装置１８０が故障した場合に、消失される可能性のあるストライプ列のデータを優先してリビルドするようにしたものである。なお、冗長度が２以上の構成としては、ＲＡＩＤ６に限られず、例えば、トリプルミラー構成であってもよい。
【０２５３】
図３６は、実施例８に係る優先リビルドを説明する図である。
【０２５４】
図３６は、１６個の下位ストレージ装置１８０で、仮想プール空間を構成し、仮想プール空間を６Ｄ＋２Ｐ構成のＲＡＩＤ６とした例を示している。ここで、同図において、Ｄ１＿１、Ｄ２＿１、Ｄ３＿１、Ｄ４＿１、Ｄ５＿１、Ｄ６＿１、Ｐ＿１、Ｑ＿１のように、「＿」の後の数字が共通するものが、同一のデータ単位におけるデータ要素及びパリティであること、すなわち、同一のストライプ列であることを示す。
【０２５５】
図３６に示すように、データ要素及びパリティが格納されている状態において、左側の２つの下位ストレージ装置１８０が故障した場合であっても、ＲＡＩＤ６の構成であるので、必要なデータ要素やパリティを復元することができる。しかしながら、もう一つの別の下位ストレージ装置１８０が故障してしまうと、復元できなくなってしまう可能性のあるデータ要素及び／又はパリティ（ワーニングデータという）が存在する。具体的には、故障している下位ストレージ装置１８０に、同一のストライプ列の２つのストライプデータ要素が格納されているストライプ列に属するストライプデータ要素が、このような復元できないストライプデータ要素に該当する。同図においては、故障している下位ストレージ装置１８０に格納されている同一のストライプ列の２つのストライプデータ要素としては、データ要素Ｄ２＿２及びデータ要素Ｄ３＿２と、データ要素Ｄ４＿４及びデータ要素Ｄ５＿４とがある。以下、ワーニングデータを含むパーセルをワーニングパーセルという。
【０２５６】
そこで、実施例８では、他の下位ストレージ装置１８０が故障してしまうと復元できなくなるワーニングデータを優先して、リビルドする。例えば、同図に示すデータ要素Ｄ３−２や、データ要素Ｄ５＿４を、別のストレージ装置１８０に優先して復元する。これにより、さらに別の１つの下位ストレージ装置１８０が故障したとしても、ワーニングパーセルを高速に復元可能であるため、データ要素Ｄ２＿２と同一のストライプ列のデータ要素を適切に復元できる確率が高くなる。この確率は、ストライプ列を分散させるドライブ数が多ければ多いほど高いという特性を持つ。
【０２５７】
図３７は、実施例８に係る上位ストレージ装置の状態遷移を説明する図である。
【０２５８】
図３７は、冗長度毎のＲＡＩＤ６のＲＡＩＤグループを管理する上位ストレージ装置１００の状態遷移を示している。
【０２５９】
上位ストレージ装置１００は、初期状態では、いずれの下位ストレージ装置１８０（ドライブ）も故障していないので、通常（Ｎｏｒｍａｌ）状態ＳＴ１であり、冗長度は２である。
【０２６０】
通常状態ＳＴ１において、データを退避する領域であるスペア領域がない場合には、上位ストレージ装置１００は、コピーバック中状態ＳＴ２となる。コピーバック中状態ＳＴ２とは、故障したドライブを新品に交換した後に、スペア領域に復元していたデータを、スペア領域から新品のドライブの領域に戻す処理中の状態である。コピーバック中状態ＳＴ２では、冗長度は２である。また、通常状態ＳＴ１において、１台のドライブが閉塞した場合には、上位ストレージ装置１００は、リビルド中状態ＳＴ３となる。リビルド中状態ＳＴ３とは、閉塞したドライブに格納されていたデータ（データ要素等）をリビルドしている途中の状態である。リビルド中状態ＳＴ３は、冗長度が１である。
【０２６１】
コピーバック中状態ＳＴ２において、或るデータのコピーバックが完了したが、まだコピーバックする対象のデータがあれば、上位ストレージ装置１００は、コピーバック中状態ＳＴ２のままである。また、コピーバック中状態ＳＴ２において、全てのデータのコピーバックが完了した場合には、上位ストレージ装置１００は、通常状態ＳＴ１となる。また、コピーバック中状態ＳＴ２において、１台のドライブが閉塞した場合には、上位ストレージ装置１００は、リビルド中状態ＳＴ３となる。
【０２６２】
リビルド中状態ＳＴ３において、データを退避する領域であるスペア領域がない場合には、上位ストレージ装置１００は、コピーバック中状態ＳＴ４となる。コピーバック中状態ＳＴ４では、冗長度は１である。また、リビルド中状態ＳＴ３において、ドライブが閉塞し、ワーニングパーセルが出現した場合に、上位ストレージ装置１００は、優先リビルド中状態ＳＴ６となる。優先リビルド中状態ＳＴ６とは、ワーニングデータを優先してリビルドしている処理の途中の状態である。ここで、ワーニングデータを優先してリビルドする処理を優先リビルドという。優先リビルド中状態ＳＴ６は、冗長度が０である。
【０２６３】
コピーバック中状態ＳＴ４において、全てのデータのコピーバックが完了した場合には、上位ストレージ装置１００は、リビルド中状態ＳＴ３となる。また、コピーバック中状態ＳＴ４において、１台のドライブが閉塞した場合には、上位ストレージ装置１００は、コピーバック中状態ＳＴ８となる。コピーバック中状態ＳＴ８は、冗長度が０である。
【０２６４】
優先リビルド中状態ＳＴ６において、１台のドライブが閉塞した場合には、上位ストレージ装置１００は、故障（Ｆａｉｌｕｒｅ）状態ＳＴ９となる。故障状態ＳＴ９は、データの復元ができない状態である。また、優先リビルド中状態ＳＴ６において、データを退避する領域であるスペア領域がない場合には、上位ストレージ装置１００は、コピーバック中状態ＳＴ８なる。コピーバック中状態ＳＴ８では、冗長度は０である。また、優先リビルド中状態ＳＴ６において、優先リビルドが完了した場合には、上位ストレージ装置１００は、残リビルド中状態ＳＴ５となる。残リビルド中状態ＳＴ５とは、ワーニングデータ以外のパーセルのデータをリビルドしている途中の状態である。残リビルド中状態ＳＴ５は、冗長度が１である。
【０２６５】
残リビルド中状態ＳＴ５において、ワーニングパーセルのワーニングデータ以外のデータに対するリビルドを完了した場合には、上位ストレージ装置１００は、リビルド中状態ＳＴ３となる。また、残リビルド中状態ＳＴ５において、１台のドライブが閉塞した場合には、上位ストレージ装置１００は、残リビルド中＜継続＞状態ＳＴ７となる。残リビルド中＜継続＞状態ＳＴ７は、更に増加したワーニングデータをリビルドしている途中の状態である。残リビルド中＜継続＞状態ＳＴ７は、冗長度が０である。
【０２６６】
残リビルド中＜継続＞状態ＳＴ７において、１台のドライブが閉塞した場合には、上位ストレージ装置１００は、故障状態ＳＴ９となる。残リビルド中＜継続＞状態ＳＴ７において、ワーニングパーセルのすべてのデータに対するリビルドを完了した場合には、上位ストレージ装置１００は、リビルド中状態ＳＴ３となる。
【０２６７】
コピーバック中状態ＳＴ８において、全てのデータのコピーバックが完了した場合には、上位ストレージ装置１００は、優先リビルド中状態ＳＴ６となる。また、コピーバック中状態ＳＴ８において、１台のドライブが閉塞した場合には、上位ストレージ装置１００は、故障状態ＳＴ９となる。
【０２６８】
図３８は、実施例８に係るストライプテーブルの一例を示す図である。
【０２６９】
実施例８の共有メモリ２００は、実施例１の共有メモリ２００に、更にストライプテーブル３００を格納したものである。
【０２７０】
ストライプテーブル３００は、物理ドライブ番号に基づいて、その物理ドライブ番号に対応する下位ストレージ装置１８０における物理パーセルの状態を高速に判定するためのテーブルであり、パーセルマッピングテーブル２２０の逆引きテーブルに相当する。ストライプテーブル３００は、物理ドライブ＃３０１と、物理パーセル＃３０２と、仮想プール空間番号３０３と、エクステント＃３０４と、ドライブオフセット＃３０５と、パーセル状態３０６とのフィールドを含むエントリを管理する。各フィールドは、図７に示す同一の名称のフィールドと基本的には同様である。
【０２７１】
図３９は、実施例８に係る優先ビルド処理のフローチャートである。
【０２７２】
優先ビルド処理は、例えば、所定の時間毎に実行しても良いし、ＭＰ１２１が２台の下位ストレージ装置１８０の故障を検出した場合に実行しても良い。ＭＰ１２１は、ストライプテーブル３００のパーセル状態３０６が復元要である各物理パーセルのエントリについて、当該物理パーセルに対応する仮想プール空間＃、エクステント＃、ドライブオフセット＃を算出する（ステップＳ１０１）。
【０２７３】
次いで、ＭＰ１２１は、算出した仮想プール空間＃、エクステント＃、及びドライブオフセット＃に基づいて、これらに対応するエクステント（対象エクステント）内に、故障状態（復元要）である他のドライブを含むか否かをチェックする（ステップＳ１０２）。
【０２７４】
この結果、対象エクステント内に２台のドライブの故障を含み、且つそのドライブのデータが未復元である場合（Ｓ１０３でＹ）には、ＭＰ１２１は、未復元のデータを復元するデータ復元処理を実行し（ステップＳ１０４）、処理をステップＳ１０５に進める一方、対象エクステント内に２台以上のドライブの故障を含まない、又は、データが未復元でない場合（Ｓ１０３でＮ）には、優先ビルド処理を終了する。
【０２７５】
ステップＳ１０５で、ＭＰ１２１は、エクステントの復元すべきパーセルの全ストライプデータ要素が復元済みか否かを判定し（ステップＳ１０５）、全てのストライプデータ要素が復元済みでない場合（ステップＳ１０５でＮ）には、処理をステップＳ１０４に進める。
【０２７６】
一方、エクステントの復元すべきパーセルの全てのストライプデータ要素が復元済みである場合（ステップＳ１０５でＹ）には、ＭＰ１２１は、パーセルマッピングテーブル２２０及びストライプテーブル３００の処理対象のパーセルのエントリのパーセル状態２２６に復元不要を示す内容（例えば、空白）を設定し（ステップＳ１０６）、処理をステップＳ１０１に進める。
【０２７７】
図４０は、実施例８に係るデータ配置の一方法を説明する図である。
【０２７８】
図４０は、図３６で述べた方法とは異なる、データ配置の一方法であり、２０個の下位ストレージ装置１８０で、仮想プール空間を構成し、仮想プール空間を２Ｄ＋２Ｐ構成のＲＡＩＤ６とした例を示している。ここで、同図において、１、２のような数字がエクステント＃２２２を表し、共通するものが、同一のエクステントのパーセルを表す。図４０のデータ配置は、数式により算出される。具体的には、パーセルに対応するエクステント＃は、式ＥｘｔｅｎｔＩＤ（ｄ，ｐ）＝（（ｆｌｏｏｒ（ｄ／Ｓ）＋ｐ×（ｄ  ｍｏｄ  Ｓ））  ｍｏｄ  （Ｄ／Ｓ））＋（Ｄ／Ｓ）×ｐにより算出する。ｄは物理ドライブ＃、ｐは物理パーセル＃、Ｄは全ドライブ数（図４０ではＤ＝２０）、Ｓはストライプを構成するパーセルの数（図４０では２Ｄ＋２Ｐの場合でＳ＝４）である。図４０に示したグレーのパーセルが存在する各ドライブは、物理ドライブ＃０のストレージ装置１８０が１台閉塞した場合にリビルドの読み出し元となるドライブである。特に、Ｄ／Ｓが素数の場合に、リビルド時の復元元ストライプデータのリード処理がきれいに分散され、並列効果が高くなり、リビルドの所要時間を短縮できる。  
【０２７９】
図４１は、実施例８に係るデータ配置の一方法におけるワーニングパーセルの位置を説明する図である。
【０２８０】
図４１は、図４０で示したデータ配置において、物理ドライブ＃０、５のストレージ装置１８０が２台閉塞した場合にリビルドの読み出し元となるパーセルを示している。黒いパーセル（エクステント＃２０、４５、７０に所属）はワーニングパーセルであるが、それらパーセルの配置が２台のドライブ（物理ドライブ＃１０、１５）に限定されている。この限定により、優先リビルド処理が多数のドライブに負荷分散されないので、図３６で述べたランダムな配置による方法よりも優先リビルドの所要時間は長くなるが、一方で、３台目のドライブ閉塞によるデータロストパーセルが出現する確率を減らすことができるため、システム全体としてデータロストの発生確率を削減できる。
【０２８１】
上記の式は効率的なデータ配置方法の一例であるが、発明を限定するものではなく、上記の式を元に、物理ドライブ＃や、物理パーセル＃の対応を変更してデータの配置パターンをシフトした配置であってもよいし、図７のパーセルマッピングテーブルで述べたようなテーブル上で、エクステントを構成するパーセルの存在するドライブの選択方法を特定の組み合わせに限定させることにより、ドライブ故障時のロストする領域を特定のドライブに偏らせる配置としてもよい。
【０２８２】
優先リビルド処理によると、消失してしまう可能性が高いデータを優先的に復元することができ、データが消失してしまう事態を効果的に防ぐことができる。
【０２８３】
以上、幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０２８４】
１００  上位ストレージ装置、１２１  マイクロプロセッサ（ＭＰ）、１４２  転送バッファ、１８０  下位ストレージ装置、１８２  プロセッサ
【図１】
0006039699.tif 000002
【図２】
0006039699.tif 000003
【図３】
0006039699.tif 000004
【図４】
0006039699.tif 000005
【図５】
0006039699.tif 000006
【図６】
0006039699.tif 000007
【図７】
0006039699.tif 000008
【図８】
0006039699.tif 000009
【図９】
0006039699.tif 000010
【図１０】
0006039699.tif 000011
【図１１】
0006039699.tif 000012
【図１２】
0006039699.tif 000013
【図１３】
0006039699.tif 000014
【図１４】
0006039699.tif 000015
【図１５】
0006039699.tif 000016
【図１６】
0006039699.tif 000017
【図１７】
0006039699.tif 000018
【図１８】
0006039699.tif 000019
【図１９】
0006039699.tif 000020
【図２０】
0006039699.tif 000021
【図２１】
0006039699.tif 000022
【図２２】
0006039699.tif 000023
【図２３】
0006039699.tif 000024
【図２４】
0006039699.tif 000025
【図２５】
0006039699.tif 000026
【図２６】
0006039699.tif 000027
【図２７】
0006039699.tif 000028
【図２８】
0006039699.tif 000029
【図２９】
0006039699.tif 000030
【図３０】
0006039699.tif 000031
【図３１】
0006039699.tif 000032
【図３２】
0006039699.tif 000033
【図３３】
0006039699.tif 000034
【図３４】
0006039699.tif 000035
【図３５】
0006039699.tif 000036
【図３６】
0006039699.tif 000037
【図３７】
0006039699.tif 000038
【図３８】
0006039699.tif 000039
【図３９】
0006039699.tif 000040
【図４０】
0006039699.tif 000041
【図４１】
0006039699.tif 000042