(57)【要約】  実施形態によれば、ストレージ装置のストレージコントローラは、誤り訂正符号ブロック及び複数のデータブロックの組が配置される複数のストライプグループを備えたアレイを管理するアレイ管理部を具備する。前記複数のストライプグループの各々は、複数のソリッドステートドライブ内の物理位置が対応するストライプブロックの組から構成される。前記アレイ管理部は、前記誤り訂正符号ブロックが配置される数が、前記複数のソリッドステートドライブの間で不均一となるように、前記誤り訂正符号ブロック及び前記複数のデータブロックを前記複数のストライプグループに規則的に配置する。
2014041638.tif 000002
【特許請求の範囲】
【請求項１】
複数のストライプブロックに区分される第１の記憶領域を備えた複数のソリッドステートドライブを含むソリッドステートドライブの群と、
前記ソリッドステートドライブの群を制御するストレージコントローラと
を具備し、
前記ストレージコントローラは、
誤り訂正符号を格納するための誤り訂正符号ブロック及びデータを格納するための複数のデータブロックの組が配置される複数のストライプグループに区分される第２の記憶領域を備えたアレイであって、前記複数のストライプグループの各々が前記複数のソリッドステートドライブ内の物理位置が対応する前記ストライプブロックの組から構成されるアレイを管理するアレイ管理部を具備し、
前記アレイ管理部は、前記誤り訂正符号ブロックが配置される数が、前記複数のソリッドステートドライブの間で不均一となるように、前記誤り訂正符号ブロック及び前記複数のデータブロックを予め定められた配置規則に基づいて前記複数のストライプグループに規則的に配置し、前記配置規則に基づいて前記誤り訂正符号ブロックの配置位置を管理する
ストレージ装置。
【請求項２】
前記アレイ管理部は、物理位置が連続する予め定められた数の前記ストライプグループの集合である管理ブロックを単位に、且つ前記複数のソリッドステートドライブの間で前記誤り訂正符号ブロックが配置される数が異なるように、前記誤り訂正符号ブロック及び前記複数のデータブロックを配置する請求項１記載のストレージ装置。
【請求項３】
前記ストレージコントローラは、第１のデータブロック及び第１のパリティブロックへのアクセスが必要な場合に、前記第１のデータブロック及び第１のパリティブロックの配置位置を、前記配置規則に基づいて特定するブロック特定部を更に具備する請求項１または２のいずれか一項に記載のストレージ装置。
【請求項４】
前記アレイ管理部は、前記複数のソリッドステートドライブのいずれか１つを除くソリッドステートドライブに前記誤り訂正符号ブロックを配置し、
前記ストレージコントローラは、
前記複数のソリッドステートドライブへの書き込みの回数を監視して、前記書き込みの回数が予め定められた上限に達した第１のソリッドステートドライブから第２のソリッドステートドライブへの交換を制御するドライブ交換コントローラと、
前記交換の後、前記第１のソリッドステートドライブに配置されていた前記誤り訂正符号ブロックを、前記複数のソリッドステートドライブのうち前記第２のソリッドステートドライブを除く他のソリッドステートドライブに再配置するブロック再配置部とを更に備える
請求項２記載のストレージ装置。
【請求項５】
前記ブロック再配置部は、前記再配置前に前記他のソリッドステートドライブに配置されている前記誤り訂正符号ブロックの数の大小関係が前記再配置後においても維持されるように、前記第１のソリッドステートドライブに配置されていた前記誤り訂正符号ブロックを再配置する請求項４記載のストレージ装置。
【請求項６】
前記ブロック再配置部は、前記再配置を開始する際に、前記管理ブロックの開始位置を１ストライプグループずらし、前記管理ブロックを単位に前記他のソリッドステートドライブに配置される前記誤り訂正符号ブロックの第１の数が前記再配置の前と比較してそれぞれ１増加するように、前記誤り訂正符号ブロックを再配置する請求項５記載のストレージ装置。
【請求項７】
前記アレイ管理部は、前記管理ブロックを単位に前記複数のソリッドステートドライブに配置される前記誤り訂正符号ブロックの数に対応する値のドライブメンバ番号を前記複数のソリッドステートドライブに割り当て、
前記ブロック再配置部は、前記再配置に際し、前記他のソリッドステートドライブに割り当てられている前記ドライブメンバ番号を、前記１増加された第１の数に対応する値に変更し、且つ前記第２のソリッドステートドライブに割り当てられるドライブメンバ番号を、前記管理ブロックを単位に前記第２のソリッドステートドライブに配置される前記誤り訂正符号ブロックの第２の数が０である場合に対応する値に設定する
請求項６記載のストレージ装置。
【請求項８】
複数のストライプブロックに区分される第１の記憶領域を備えた複数のソリッドステートドライブを含むソリッドステートドライブの群を制御するストレージコントローラにおいて、
誤り訂正符号を格納するための誤り訂正符号ブロック及びデータを格納するための複数のデータブロックの組が配置される複数のストライプグループに区分される第２の記憶領域を備えたアレイであって、前記複数のストライプグループの各々が前記複数のソリッドステートドライブ内の物理位置が対応する前記ストライプブロックの組から構成されるアレイを管理するアレイ管理部を具備し、
前記アレイ管理部は、前記誤り訂正符号ブロックが配置される数が、前記複数のソリッドステートドライブの間で不均一となるように、前記誤り訂正符号ブロック及び前記複数のデータブロックを予め定められた配置規則に基づいて前記複数のストライプグループに規則的に配置し、前記配置規則に基づいて前記誤り訂正符号ブロックの配置位置を管理する
ストレージコントローラ。
【請求項９】
複数のストライプブロックに区分される第１の記憶領域を備えた複数のソリッドステートドライブを含むソリッドステートドライブの群を制御するストレージコントローラにおいて、誤り訂正符号を格納するための誤り訂正符号ブロック及びデータを格納するための複数のデータブロックの組が配置される複数のストライプグループに区分される第２の記憶領域を備え、前記複数のストライプグループの各々が前記複数のソリッドステートドライブ内の物理位置が対応する前記ストライプブロックの組から構成されるアレイにおける誤り訂正符号ブロック配置位置を管理する方法であって、
前記アレイが生成される場合に、前記誤り訂正符号ブロックが配置される数が、前記アレイを構成する前記複数のソリッドステートドライブの間で不均一となるように、前記誤り訂正符号ブロック及び前記複数のデータブロックを予め定められた配置規則に基づいて前記複数のストライプグループに規則的に配置し、
前記配置規則に基づいて前記誤り訂正符号ブロックの配置位置を管理する
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、アレイにおける誤り訂正符号ブロック配置位置を管理するストレージ装置、ストレージコントローラ及び方法に関する。
【背景技術】
【０００２】
従来から、ディスクアレイを備えたストレージ装置が知られている。ディスクアレイは、複数のハードディスクドライブ（ＨＤＤ）を用いて、ＲＡＩＤ（Redundant Arrays of Independent DisksまたはRedundant Arrays of Inexpensive Disks）により構成されるのが一般的である。このようなディスクアレイ（以下、第１のアレイと称する）は、パリティデータのような誤り訂正符号データの適用により冗長性を有している。【０００３】
また近年は、複数のソリッドステートドライブ（ＳＳＤ）から構成されるアレイ（以下、第２のアレイと称する）を備えたストレージ装置も出現している。ＳＳＤは、ＮＡＮＤ型フラッシュメモリのような不揮発性書き換え可能メモリから構成される。このため、ＳＳＤのアクセス性能は、データの読み出し／書き込みに機械的動作を伴うＨＤＤに比べて高い。しかし、ＳＳＤの寿命は、例えば当該ＳＳＤへのデータの書き込みの回数に依存する。【０００４】
前記第１のアレイでは、負荷分散のために、誤り訂正符号ブロック（例えばパリティブロック）が、ストライプグループと呼ばれる領域を単位に、前記複数のＨＤＤに均一に分散して配置されるのが一般的である。そこで、第２のアレイにおいても、誤り訂正符号ブロックがストライプグループを単位に当該複数のＳＳＤに均一に分散して配置されるものとする。この場合、複数のＳＳＤそれぞれへのデータ書き込みの回数が均一化されて、当該複数のＳＳＤが同時期に故障する可能性が高くなる。このため第２のアレイでは、複数のＳＳＤそれぞれの書き込み回数を不均一にすることが要求される。【０００５】
そこで従来技術では、前記ストレージ装置内のコントローラ（ストレージコントローラ）は、複数のＳＳＤそれぞれの書き込み回数を監視する。この監視の結果、当該書き込み回数を不均一にする必要が生じた場合、前記コントローラは、ストライプグループを単位に、誤り訂正符号ブロックの配置位置及びデータブロックの配置位置を動的に変更する。また前記コントローラは、この配置位置変更のために、誤り訂正符号ブロック配置位置及びデータブロック配置位置をマップテーブルによりストライプグループ毎に管理する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−１５５１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら従来技術では、近年のアレイの大容量化に伴い、マップテーブルを格納するのに必要なメモリ容量が増加する傾向がある。また、誤り訂正符号ブロック配置位置及びデータブロック配置位置の変更が過剰に行われると、この変更に伴って各ＳＳＤの書き込み回数も増大する。【０００８】
本発明が解決しようとする課題は、アレイにおける誤り訂正符号ブロック配置位置を簡単に管理することができる、ストレージ装置、ストレージコントローラ及び方法を提供することにある。
【課題を解決するための手段】
【０００９】
実施形態によれば、ストレージ装置は、ソリッドステートドライブの群と、ストレージコントローラとを具備する。前記ソリッドステートドライブの群は、複数のストライプブロックに区分される第１の記憶領域を備えた複数のソリッドステートドライブを含む。前記ストレージコントローラは、アレイを管理するアレイ管理部を具備する。前記アレイは、誤り訂正符号を格納するための誤り訂正符号ブロック及びデータを格納するための複数のデータブロックの組が配置される複数のストライプグループに区分される第２の記憶領域を備える。前記複数のストライプグループの各々は、前記複数のソリッドステートドライブ内の物理位置が対応する前記ストライプブロックの組から構成される。前記アレイ管理部は、前記誤り訂正符号ブロックが配置される数が、前記複数のソリッドステートドライブの間で不均一となるように、前記誤り訂正符号ブロック及び前記複数のデータブロックを予め定められた配置規則に基づいて前記複数のストライプグループに規則的に配置し、前記配置規則に基づいて前記誤り訂正符号ブロックの配置位置を管理する。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施形態に係るストレージシステムの典型的なハードウェア構成を示すブロック図である。
【図２】図２は、図１に示されるストレージコントローラの機能構成を示すブロック図である。
【図３】図３は、ＲＡＩＤレベル５のソリッドステートドライブ（ＳＳＤ）アレイにおけるストライプグループ毎のパリティブロック及びデータブロックの配置の例を示す図である。
【図４】図４は、同実施形態で適用されるアレイ管理テーブルのデータ構造例を示す図である。
【図５】図５は、同実施形態で適用されるＳＳＤアレイにおけるパリティブロック及びデータブロックの配置の例を、アレイ管理テーブルと関連付けて示す図である。
【図６】図６は、同実施形態で適用されるパリティブロック配置位置算出処理の典型的な手順を説明するためのフローチャートである。
【図７】図７は、同本実施形態で適用されるデータブロック配置位置算出処理の典型的な手順を説明するためのフローチャートである。
【図８Ａ】図８Ａは、同実施形態で適用されるブロック特定処理の典型的な手順を説明するためのフローチャートの一部を示す図である。
【図８Ｂ】図８Ｂは、前記ブロック特定処理の典型的な手順を説明するためのフローチャートの残りを示す図である。
【図９】図９は、同実施形態で適用されるブロック再配置について、パリティブロック及びデータブロックの再配置が全て終了した後の状態を例に、アレイ管理テーブルと関連付けて示す図である。
【図１０】図１０は、同実施形態におけるパラメータ値切り替えの例をテーブル形式で示す図である。
【図１１】図１１は、同実施形態で適用される再配置完了／再配置未完了判定処理の典型的な手順を説明するためのフローチャートである。
【図１２】図１２は、同実施形態で適用されるブロック再配置について、パリティブロック及びデータブロックの再配置中の状態を例に、アレイ管理テーブルと関連付けて示す図である。
【図１３】図１３は、前記実施形態の変形例で適用されるブロック再配置について、パリティブロック及びデータブロックの再配置が全て終了した後の状態を例に、アレイ管理テーブルと関連付けて示す図である。
【発明を実施するための形態】
【００１１】
以下、実施の形態につき図面を参照して説明する。  
図１は、一つの実施形態に係るストレージシステムの典型的なハードウェア構成を示すブロック図である。ストレージシステムは、ストレージ装置１、ホストコンピュータ（以下、ホストと称する）２、及びネットワーク３から構成される。ストレージ装置１は、ネットワーク３を介してホスト２と接続されている。ホスト２は、ストレージ装置１を外部記憶装置として利用する。ネットワーク３は、例えば、ストレージエリアネットワーク（ＳＡＮ）、インターネット或いはイントラネットである。インターネット或いはイントラネットは、例えばイーサネット（登録商標）により構成される。
【００１２】
ストレージ装置１は、複数のＳＳＤ（ソリッドステートドライブ）、例えば７つのＳＳＤ１１−０乃至１１−６（ＳＳＤ−＃０乃至ＳＳＤ−＃６）と、ストレージコントローラ１２と、ドライブインタフェースバス１３とを備えている。ＳＳＤ１１−０乃至１１−６の各々は、書き換え可能な不揮発性メモリ（例えばフラッシュメモリ）の集合から構成される。ＳＳＤ１１−０乃至１１−６はそれぞれドライブスロット＃０乃至６を介してドライブインタフェースバス１３に接続されている。ドライブスロット＃０乃至＃６には、固有のドライブスロット番号０乃至６が割り当てられている。ドライブスロット番号０乃至６は、ドライブスロット＃０乃至＃６に固定的に割り当てられる順番号である。以下の説明では、ドライブスロット番号０乃至６を、便宜的にＳＳＤ−＃０乃至ＳＳＤ−＃６と表記する。ＳＳＤ−＃０乃至ＳＳＤ−＃６は、ドライブスロット＃０乃至＃６に接続されたＳＳＤ１１−０乃至１１−６の属性が後述するＳＳＤアレイ１１０−＊に用いられるＳＳＤ（つまりＳＳＤアレイ１１０−＊の要素）であることをも示すものとする。また、以下の説明では、ドライブスロット＃０乃至＃６に接続されるＳＳＤ１１−０乃至１１−６をＳＳＤ−＃０乃至ＳＳＤ−＃６と表記することもある。
【００１３】
ストレージコントローラ１２は、ドライブインタフェースバス１３を介してＳＳＤ１１−０乃至１１−６（ＳＳＤ−＃０乃至ＳＳＤ−＃６）と接続されている。ドライブインタフェースバス１３のインタフェース種別は、例えば、スモールコンピュータシステムインタフェース（ＳＣＳＩ）、ファイバチャネル（ＦＣ）、シリアルアタッチドＳＣＳＩ（ＳＡＳ）、或いはシリアルＡＴアタッチメント（ＳＡＴＡ）である。
【００１４】
ストレージコントローラ１２は、ＳＳＤ１１−０乃至１１−６を制御する。ストレージコントローラ１２は、ＳＳＤ１１−０乃至１１−６のうちの３つ以上を用いて冗長性を有するアレイ（以下、ＳＳＤアレイと称する）を構成し且つ管理する。図１の例では、冗長性を有するアレイとして、３つのＳＳＤアレイ１１０−０乃至１１０−２が示されている。ＳＳＤアレイ１１０−０乃至１１０−２は、例えばＲＡＩＤ構成のアレイ（つまりＲＡＩＤアレイ）である。ＲＡＩＤアレイは論理ドライブとして管理される。以下の説明では、ＳＳＤアレイ１１０−０乃至１１０−２を特に区別する必要がない場合には、ＳＳＤアレイ１１０−０乃至１１０−２の各々をＳＳＤアレイ１１０−＊と表記する。同様に、ＳＳＤ１１−０乃至１１−６を特に区別する必要がない場合には、ＳＳＤ１１−０乃至１１−６の各々をＳＳＤ１１−＊と表記する
ストレージコントローラ１２は、ホストインタフェース（ホストＩ／Ｆ）１２１と、ドライブインタフェース（ドライブＩ／Ｆ）１２２と、キャッシュメモリ１２３と、キャッシュコントローラ１２４と、フラッシュＲＯＭ（ＦＲＯＭ）１２５と、ローカルメモリ１２６と、ＣＰＵ１２７と、チップセット１２８と、内部バス１２９とを備えている。ストレージコントローラ１２は、ホストＩ／Ｆ１２１によりネットワーク３を介してホスト２と接続される。ホストＩ／Ｆ１２１のインタフェース種別は、例えば、ＦＣ、或いはインターネットＳＣＳＩ（ｉＳＣＳＩ）である。
【００１５】
ホストＩ／Ｆ１２１は、ホスト２との間のデータ転送（データ転送プロトコル）を制御する。ホストＩ／Ｆ１２１は、ホスト２からの論理ボリュームに対するデータアクセス要求（リード要求またはライト要求）を受信し、当該データアクセス要求に対する応答を返信する。論理ボリュームは、ＳＳＤアレイ１１０−＊内の一部のデータ格納領域を実体として論理的に実現される。ホストＩ／Ｆ１２１は、ホスト２からデータアクセス要求を受信すると、当該要求を内部バス１２９、チップセット１２８を経由して、ＣＰＵ１２７に伝達する。データアクセス要求を受け取ったＣＰＵ１２７は、後述するストレージ制御プログラムに従い、当該データアクセス要求を処理する。
【００１６】
もし、データアクセス要求がライト要求であれば、ＣＰＵ１２７は、当該ライト要求で指定されるアクセス領域（論理ボリューム内のアクセス領域）に該当するＳＳＤアレイ１１０−＊内のデータ領域を特定して、データライトを制御する。具体的には、ＣＰＵ１２７は、第１のデータ書き込み、または第２のデータ書き込みを制御する。第１のデータ書き込みは、ライトデータを一旦キャッシュメモリ１２３に格納した後に、当該データをＳＳＤアレイ１１０−＊内の前記特定された領域に書き込む動作である。第２のデータ書き込みは、ライトデータを即時に前記特定された領域に直接書き込む動作である。本実施形態では、第１のデータ書き込みが実施されるものとする。
【００１７】
一方、データアクセス要求がリード要求であれば、ＣＰＵ１２７は、当該リード要求で指定されるアクセス領域に該当するＳＳＤアレイ１１０−＊内のデータ領域を特定して、データリードを制御する。具体的には、ＣＰＵ１２７は、第１のデータ読み出し、または第２のデータ読み出しを制御する。前記第１のデータ読み出しは、前記特定されたデータ領域のデータがキャッシュメモリ１２３内に格納されている場合に実施される。つまり前記第１のデータ読み出しは、前記特定されたデータ領域のデータをキャッシュメモリ１２３から読み出して、当該読み出されたデータをホストＩ／Ｆ１２１に返信することにより、当該読み出されたデータをホスト２に返信させる動作である。前記第２のデータ読み出しは、前記特定されたデータ領域のデータがキャッシュメモリ１２３内に格納されていない場合に実施される。つまり前記第２のデータ読み出しは、ＳＳＤアレイ１１０−＊内の前記特定されたデータ領域からデータを読み出して、当該読み出されたデータを即時にホストＩ／Ｆ１２１に返信することにより、当該読み出されたデータをホスト２に返信させる動作である。
【００１８】
ドライブＩ／Ｆ１２２は、ＣＰＵ１２７（ストレージ制御プログラム）が受信したホスト２からのデータアクセス要求（論理ボリュームに対するライト要求またはリード要求）に従い、ＳＳＤアレイ１１０−＊のＳＳＤ１１−＊に対してライト要求またはリード要求を送信し、その応答を受信する。キャッシュメモリ１２３は、ホスト２からのデータアクセス要求がホストＩ／Ｆ１２１で受信された場合に、当該データアクセス要求（ライト要求またはリード要求）に対する完了応答の高速化のためのバッファとして用いられる。
【００１９】
データアクセス要求がライト要求の場合、ＣＰＵ１２７はキャッシュコントローラ１２４を用いて、一旦ライトデータをキャッシュメモリ１２３に格納することでライト処理を完了させて、ホスト２に応答を返信する。その後ＣＰＵ１２７は、任意のタイミングで、前記ライトデータをＳＳＤアレイ１１０−＊に書き込む。そしてＣＰＵ１２７は、前記ライトデータが格納されているキャッシュメモリ１２３の記憶領域を、キャッシュコントローラ１２４を用いて開放する。一方、データアクセス要求がリード要求の場合、要求されたデータ（つまりリードされるべきデータ）がキャッシュメモリ１２３に格納されているならば、ＣＰＵ１２７は次のように動作する。即ちＣＰＵ１２７は、要求されたデータを、キャッシュコントローラ１２４を用いてキャッシュメモリ１２３から取得して、ホスト２に応答を返信する（第１のデータ読み出し）。
【００２０】
キャッシュコントローラ１２４は、ＣＰＵ１２７（ストレージ制御プログラム）からの命令に従い、キャッシュメモリ１２３からのデータの読み出しを実施する。キャッシュコントローラ１２４はまた、ＣＰＵ１２７からの命令に従い、キャッシュメモリ１２３へのデータの書き込みも実施する。
【００２１】
ＦＲＯＭ１２５は、書き換えが可能な不揮発性メモリである。ＦＲＯＭ１２５は、ＣＰＵ１２７により実行されるストレージ制御プログラムを格納するのに用いられる。ＣＰＵ１２７は、ストレージコントローラ１２が起動されたときの最初の処理で、ＦＲＯＭ１２５に格納されているストレージ制御プログラムをローカルメモリ１２６にコピーする。なお、ＦＲＯＭ１２５に代えて読み出し専用の不揮発性メモリ、例えばＲＯＭを用いても良い。
【００２２】
ローカルメモリ１２６は、ＤＲＡＭのような書き換えが可能な揮発性メモリである。ローカルメモリ１２６の一部の領域は、ＦＲＯＭ１２５からコピーされたストレージ制御プログラムを格納するのに用いられる。ローカルメモリ１２６の他の一部の領域は、ＣＰＵ１２７のためのワーク領域として用いられる。ＣＰＵ１２７は、ローカルメモリ１２６に格納されたストレージ制御プログラムのプログラムコードに従い、ストレージ装置１全体（特にストレージコントローラ１２内の各部）を制御する。つまりＣＰＵ１２７は、ローカルメモリ１２６上に格納されているストレージ制御プログラムを、チップセット１２８を介して実行することで、ストレージ装置１全体を制御する。
【００２３】
チップセット１２８は、ＣＰＵ１２７及びその周辺回路を内部バス１２９に結合するブリッジ回路である。内部バス１２９は汎用バスであり、例えばＰＣＩ（Peripheral Component Interconnect）ｅｘｐｒｅｓｓバスである。ホストＩ／Ｆ１２１、ドライブＩ／Ｆ１２２及びチップセット１２９は、内部バス２１０により相互接続されている。また、キャッシュコントローラ１２４、ＦＲＯＭ１２５、ローカルメモリ１２６及びＣＰＵ１２７は、チップセット１２８を介して内部バス１２９に接続されている。
【００２４】
図２は、図１に示されるストレージコントローラ１２の機能構成を示すブロック図である。この機能構成は、図１に示されるストレージコントローラ１２のＣＰＵ１２７が前記ストレージ制御プログラムを実行することにより実現される。ストレージコントローラ１２は、アレイ管理部２１と、パリティブロック配置算出部２２と、データブロック配置算出部２３と、ブロック特定部２４と、ドライブ交換コントローラ２５と、ブロック再配置判定部２６と、アレイアクセスコントローラ２７と、アレイ管理テーブル２８（＃０）と、アレイ管理テーブル２９（＃１）とを備えている。アレイ管理部２１はアレイ生成部２１０を含む。ドライブ交換コントローラ２５は、ブロック再配置部２５０を含む。これらの要素については後述する。
【００２５】
さて、ＳＳＤアレイ１１０−＊は前述したように３つ以上のＳＳＤ１１−＊から構成され、ＲＡＩＤ技術の使用によりＲＡＩＤアレイという１つの論理ドライブとして管理される。ＳＳＤ１１−＊は、当該ＳＳＤ１１−＊（当該ＳＳＤ１１−＊内のフラッシュメモリ）に格納されるデータが不揮発で且つデータ転送速度がＨＤＤよりも著しく高速である長所を持つ。その反面、ＳＳＤ１１−＊には、当該ＳＳＤ１１−＊へのデータの書き込みの回数（より詳細には、書き込みが可能な回数）に上限が存在する。つまり、ＳＳＤ１１−＊には書き込みの回数に依存する寿命が存在し、この点でＳＳＤ１１−＊はＨＤＤに比べて劣る。
【００２６】
ここで、ＳＳＤアレイ１１０−＊が適用するＲＡＩＤレベルについて説明する。複数のＨＤＤ（より詳細には、３つ以上のＨＤＤ）を用いて構成されるＲＡＩＤアレイで一般的によく採用されるＲＡＩＤレベルとして、ＲＡＩＤレベル５が知られている。ＲＡＩＤレベル５では、例えばパリティデータが、ストライプグループと呼ばれる領域を単位に、複数のＨＤＤに均一に分散配置される。
【００２７】
ＲＡＩＤレベル５のＲＡＩＤアレイでは、当該ＲＡＩＤアレイ内で１台のＨＤＤが故障しても、当該故障ＨＤＤのデータを、他の全ＨＤＤのデータから復元できる。またＲＡＩＤレベル５のＲＡＩＤアレイでは、ストライプグループ内の領域へのデータの書き込みが発生する都度、当該ストライプグループ内のパリティデータの書き換えが発生する。しかしＲＡＩＤレベル５のＲＡＩＤアレイでは、ストライプグループ単位のパリティデータの均一な分散配置により、特定のＨＤＤにアクセス（負荷）が集中するのを防止できる。つまり、ＲＡＩＤアレイへのライトアクセスに対するＲＡＩＤ制御による応答性能の低下を最小限に抑えることができる。
【００２８】
そこで、ＳＳＤアレイ１１０−＊も、ＲＡＩＤレベル５技術を用いて構成されるものと仮定する。この場合、ストライプグループ単位のパリティデータの均一な分散配置により、ＳＳＤアレイ１１０−＊内の各ＳＳＤ１１−＊の書き込み回数が均一化される傾向にある。その結果として、ＳＳＤアレイ１１０−＊内の複数のＳＳＤ１１−＊において、当該複数のＳＳＤ１１−＊の書き込み回数が同時期に上限に達する確率が高まる。もし、そうなったならば、ＳＳＤアレイ１１０−＊内で前記複数のＳＳＤが同時に故障したのと等価な状況となるため、ＳＳＤアレイ１１０−＊の冗長性が維持できなくなる。
【００２９】
ＣＰＵ１２７によって実行されるストレージ制御プログラムは、以下に述べる第１乃至第５の機能を含む。第１の機能は、各ＳＳＤ１１−＊への書き込みの回数をカウントする機能である。第２の機能は、各ＳＳＤ１１−＊が提供する書き込み回数情報の示す当該ＳＳＤ１１−＊の書き込み回数を監視する機能である。第３の機能は、各ＳＳＤ１１−＊が持つＳＭＡＲＴ（Self Monitoring And Reporting Technology）と呼ばれる監視通知機能を利用する機能である。この監視通知機能は、ＳＳＤ１１−＊の書き込み回数が上限に近づいたことを、障害予兆として当該ＳＳＤ１１−＊自身が通知する機能を含む。
【００３０】
第４の機能は、前記第１乃至第３の機能のいずれかを利用することで、書き込み回数が上限に近づいたＳＳＤ１１−＊を、故障が発生する確率が高い第１のＳＳＤとして検出する機能である。第５の機能は、前記第１のＳＳＤを、ＳＳＤアレイ１１０−＊がアクセス可能な状態を維持したまま別の第２のＳＳＤと交換するためのドライブ予防保全機能である。第５の機能は後述するドライブ交換コントローラ２５の機能に相当し、以下の第６乃至第９の機能を含む。
【００３１】
第６の機能は、前記第１のＳＳＤに格納されているデータを、予め待機状態にあるホットスペアＳＳＤに退避する機能である。第７の機能は、この退避の後、ホットスペアＳＳＤを一時的に前記第１のＳＳＤの代替ＳＳＤとして機能させることで、前記第１のＳＳＤをＳＳＤアレイ１１０−＊から切り離された状態とする機能である。第８の機能は、ＳＳＤアレイ１１０−＊から切り離された前記第１のＳＳＤが別の第２のＳＳＤに交換された後、ホットスペアＳＳＤ上のデータを前記第２のＳＳＤに書き直す機能である。第９の機能は、前記書き直しの完了後にホットスペアＳＳＤの代替ＳＳＤ状態を解除する機能である。これらの機能により、書き込み回数が上限に近づいた第１のＳＳＤを、前述のようにＳＳＤアレイ１１０−＊がアクセス可能な状態を維持したまま、第２のＳＳＤと交換することができる
ここで、ＳＳＤアレイ１１０−＊内で同時期に複数のＳＳＤ１１−＊の書き込み回数が上限に近づいたものとする。このような状況で、書き込み回数が上限に近づいた前記複数のＳＳＤ１１−＊の予防保全を、前記ドライブ予防保全機能により１台ずつ実行するものとする。この場合、予防保全実行の待ち状態にある他のＳＳＤ１１−＊の書き込み回数が、時間の経過と共に発生するデータライトの繰り返しにより上限に達してしまう可能性がある。
【００３２】
そこで、書き込み回数が上限に近づいた前記複数のＳＳＤ１１−＊の予防保全を、前記ドライブ予防保全機能により同時に実行する構成が考えられる。しかし、複数のＳＳＤ１１−＊の同時予防保全のためには、ＳＳＤアレイ１１０−＊に使用されているＳＳＤ１１−＊の台数分のホットスペアＳＳＤを用意しておく必要がある。よって複数のＳＳＤ１１−＊の同時予防保全は、ＳＳＤがＨＤＤと比較して一定容量当たりの単価が高コストであることを考慮すると現実的ではない。
【００３３】
これらの点を考慮すると、ストレージ装置１のストレージコントローラ１２には、ＳＳＤアレイ１１０−＊内で複数のＳＳＤ１１−＊の書き込み回数が同時に上限に達することを抑止することが要求される。そこでストレージコントローラ１２は、ＳＳＤアレイ内の複数のＳＳＤ１１−＊の書き込み回数が不均一となるように、後述するように、ＳＳＤアレイ１１０−＊におけるパリティブロックの配置位置及びデータブロックの配置位置を管理する。
【００３４】
以下、従来から知られているＳＳＤアレイにおけるパリティブロック及びデータブロックの配置位置について説明する。ここでは、ＳＳＤアレイが、ＲＡＩＤレベル５のＲＡＩＤアレイであると仮定する。このようなＳＳＤアレイでは、当該ＳＳＤアレイを構成する複数のＳＳＤ各々の記憶領域（第１の記憶領域）は、一定容量の複数のストライプブロックに区分される。前記複数のＳＳＤ内の物理位置が同一のストライプブロックの集合毎にストライプグループが定義される。複数のストライプグループには、当該ストライプグループを識別するための連続するストライプグループ番号が割り当てられる。ここで、ＳＳＤアレイを構成するＳＳＤの数がＭであるものとする。
【００３５】
ＲＡＩＤレベル５のＳＳＤアレイでは、当該ＳＳＤアレイを構成するＳＳＤの数Ｍに一致する個数（つまりＭ個）のストライプグループを単位に、パリティ（パリティデータ）が当該Ｍ個のＳＳＤに均一に分散して格納される。つまりパリティが、Ｍ個のストライプグループを単位に、当該Ｍ個のストライプグループ内のそれぞれ異なるＳＳＤのストライプブロックに、予め定められた配置規則に従って均一に分散して格納される。これにより、ＳＳＤアレイ内で１つのＳＳＤが故障した場合に、当該故障ＳＳＤのデータを、ストライプグループ毎に、残りのＳＳＤのデータ及びパリティに基づいて復元することが可能となる。以下の説明では、パリティが格納されるストライプブロックをパリティブロックと呼び、データが格納されるストライプブロックをデータブロックと呼ぶ。
【００３６】
図３は、上述のようなＲＡＩＤレベル５のＳＳＤアレイにおけるストライプグループ毎のパリティブロック及びデータブロックの配置位置の例を示す。なお、図３の例は、ＳＳＤアレイが、図１に示されるＳＳＤ１１−０乃至１１−６に相当する７つのＳＳＤから構成される場合（Ｍ＝７）を前提としている。ここでは、７つのＳＳＤは、便宜的にＳＳＤ−＃０乃至ＳＳＤ−＃６と表記されている。
【００３７】
図３の例では、ＳＳＤアレイ内のＳＳＤ−＃０乃至ＳＳＤ−＃６に同数のパリティブロックが配置され、且つ当該同数のパリティブロックがＳＳＤ−＃０乃至ＳＳＤ−＃６に均一に分散して配置される。ここでは、ＳＳＤアレイの各ストライプグループが、１つのパリティブロックＰと６つのデータブロックＤ０乃至Ｄ５とから構成される。図３のＳＳＤアレイによれば、ライトアクセスはＳＳＤ−＃０乃至ＳＳＤ−＃６に均等に分散されて、特定のＳＳＤに負荷が集中するのを防止できる。然るに、ストライプグループ内のいずれかのデータブロックＤｊ（ｊ＝０，１，…，５）へのデータライトが発生すると、当該ストライプグループ内のパリティブロックＰに格納されたパリティの書き換えが必要となる。このため、パリティブロックＰは、ストライプグループ内の全ストライプブロックのうちで書き込みの回数が極端に増大するホットスポットとなる。
【００３８】
ここで、１つのストライプグループ内の全データブロックＤ０乃至Ｄ５へのデータライトがそれぞれ１回発生するものとする。このような状況では、データライトの度に、パリティブロックＰに格納されたパリティの書き換えが行われる。この場合、パリティブロックＰへの書き込みの回数は、ストライブグループ内のデータブロックＤ０乃至Ｄ５の数と同じ６となる。
【００３９】
一般に、ＲＡＩＤレベル５のアレイ（ＲＡＩＤアレイ）では、上述のようなデータライトにおけるホットスポットとなるパリティブロックが、当該アレイ内の全ドライブに同数ずつ分散して配置される。このようなＲＡＩＤレベル５に特有のパリティ配置により、ライトアクセスが全ドライブに分散される。これによりライトアクセスが特定のドライブに集中するのを防止できる。つまり、ＲＡＩＤ制御に伴うライトアクセス性能低下を低減することができる。
【００４０】
このような効果は、アレイを構成するドライブがＳＳＤと比較して応答速度が非常に遅く且つ機械的な動作を伴うＨＤＤである場合には高い。しかし、アレイを構成するドライブがＳＳＤである場合、当該ＳＳＤ自体が十分に高速であり且つ機械的な動作を伴わない。この場合、ＲＡＩＤレベル５のアレイにおけるようなパリティブロックの均一な分散配置が、ライトアクセス性能面で寄与することは殆どない。しかも、ライトアクセスが全ドライブにほぼ均一に行われる傾向がある。このため、アレイ（ＳＳＤアレイ）内の複数のＳＳＤにおいて、同時に書き込み回数の上限に近づく可能性が高まって、当該アレイの閉塞（いわゆるＲＡＩＤ閉塞）を招く確率が高まる。よって、複数のＳＳＤから構成されるアレイにＲＡＩＤレベル５を適用することは必ずしも好ましくない。
【００４１】
そこで、複数のＳＳＤから構成され、且つパリティによる冗長性を有するＲＡＩＤアレイ（ＳＳＤアレイ）アレイ内で、書き込み回数が上限に達する複数のＳＳＤが同時に発生する可能性を排除することが要求される。そのため従来技術では、複数のＳＳＤそれぞれの書き込み回数が不均一になるように、パリティブロックが、前記複数のＳＳＤに不均一に分散配置される。具体的には、複数のＳＳＤそれぞれの書き込み回数を不均一にする必要が生じた場合、ストライプグループを単位に、パリティブロック及びデータブロックの配置位置が動的に変更される。この配置位置変更（つまり再配置）のために、パリティブロック及びデータブロックの配置位置が、マップテーブル（配置位置管理テーブル）によりストライプグループ毎に管理される。
【００４２】
しかし、ＳＳＤアレイの大容量化に伴い、マップテーブルを格納するのに必要なメモリ容量が増加する。このため、パリティブロックがＳＳＤアレイを構成する複数のＳＳＤに不均一に分散配置される構成を適用しながら、パリティブロック及びデータブロックの配置位置が、マップテーブルを用いることなく、簡単に管理できる仕組みの実現が要求される。また、パリティブロック及びデータブロックの配置位置の変更が過剰に行われると、この変更に伴って各ＳＳＤの書き込み回数も増大する。このため、パリティブロック及びデータブロックの配置位置の変更が過剰に行われるのを防止することも要求される。
【００４３】
そこで本実施形態においてストレージコントローラ１２は、ＳＳＤアレイ１１０−＊を構成するＳＳＤ−＃０乃至ＳＳＤ−＃６（ＳＳＤ１１−０乃至１１−６）に配置されるパリティブロックＰの数が、当該ＳＳＤ−＃０乃至ＳＳＤ−＃６の間で全て異なるように（つまり不均一となるように）、ストライプグループを単位にパリティブロックＰを分散配置する。特にストレージコントローラ１２は、ストライプグループ番号が連続する予め定められたＮ個のストライプグループを単位に、Ｎ個のパリティブロックＰを規則的に且つ不均一にＳＳＤ−＃０乃至ＳＳＤ−＃６に分散配置する。本実施形態においてＮは、ＳＳＤアレイ１１０−＊を構成するＳＳＤの数をＭとすると、Ｍ（Ｍ−１）／２で表される。つまり、Ｍが７の場合、Ｎ＝２１となる。
【００４４】
このような本実施形態特有のパリティブロックＰの配置により、ＳＳＤ−＃０乃至ＳＳＤ−＃６へのアクセス（特にライトアクセス）の回数を不均一化することが可能となる。また本実施形態においてストレージコントローラ１２は、パリティブロックＰをＳＳＤ−＃０乃至ＳＳＤ−＃６に不均一に配置するのに、ランダムな配置ではなくて、Ｎ個（Ｎ＝Ｍ（Ｍ−１）／２）のストライプグループを単位とする規則的な配置（つまりパターン化された配置）を適用している。
【００４５】
このためストレージコントローラ１２は、予め定められた配置規則（つまり配置パターン）に基づき、パリティブロックＰの配置位置及びデータブロックＤ０乃至Ｄ５の配置位置を管理することが可能となる。つまり本実施形態では、ＲＡＩＤレベル５のＳＳＤアレイと同様に、ＳＳＤアレイ１１０−＊を構成するＳＳＤ−＃０乃至ＳＳＤ−＃６に論理的に割り当てられた後述するドライブメンバ番号を利用して、前記配置規則に基づいてパリティブロック配置位置及びデータブロック配置位置が管理される。このため、パリティブロック配置位置及びデータブロック配置位置の管理に、メモリ容量を大量に消費するマップテーブル（配置位置管理テーブル）を必要としない。
【００４６】
但し、本実施形態におけるＳＳＤアレイ１１０−＊と、ＲＡＩＤレベル５のＳＳＤアレイとでは、適用される配置規則が異なる。つまり、本実施形態におけるＳＳＤアレイ１１０−＊では、上述のように、Ｎ個（Ｎ＝Ｍ（Ｍ−１）／２）のストライプグループを単位に、Ｎ個のパリティブロックＰが規則的に且つ不均一にＳＳＤ−＃０乃至ＳＳＤ−＃６に分散配置される。これに対してＲＡＩＤレベル５のＳＳＤアレイでは、図３に示されるように、Ｍ個（Ｍ＝７）のストライプグループを単位に、パリティブロックＰがＳＳＤ−＃０乃至ＳＳＤ−＃６に規則的に均一に配置される。ここでＭは、ＳＳＤアレイ１１０−＊及びＲＡＩＤレベル５のＳＳＤアレイの各々を構成するＳＳＤの数である。
【００４７】
以下、本実施形態で適用されるＳＳＤアレイ１１０−＊におけるパリティブロック配置及びデータブロック配置の具体例について説明する。なお以下の説明では、パリティブロック配置及びデータブロック配置を、それぞれパリティ配置及びデータ配置と称することもある。
【００４８】
まず、本実施形態で適用されるＳＳＤアレイ１１０−＊に関する用語について順次説明する。  
・アレイ内ドライブ数（ｄｒｖ＿ｎｕｍ）
アレイ内ドライブ数は、ＳＳＤアレイ１１０−＊を構成するドライブ（つまりＳＳＤ）の数を示す。ＳＳＤアレイ１１０−＊がＳＳＤ−＃０乃至ＳＳＤ−＃６（より詳細には、ドライブスロットと＃０乃至＃６に接続されたＳＳＤ−＃０乃至ＳＳＤ−＃６）から構成される本実施形態では、アレイ内ドライブ数は７（ｄｒｖ＿ｎｕｍ＝７）である。
【００４９】
・ストライプサイズ（ｓｂ＿ｓｚ）
ストライプサイズは、各ストライプブロックの容量を示す。  
・ストライプグループサイズ（ｓｇ＿ｓｚ）
ストライプグループサイズは、各ストライプグループ内の全データブロックの容量を示す。ストライプグループサイズサイズは、ＲＡＩＤレベル５のアレイと同様に、アレイ内ドライブ数（ｄｒｖ＿ｎｕｍ）から１（ストライプグループ内のパリティブロックＰの数）を減じた値に、ストライプサイズ（ｓｂ＿ｓｚ）を乗算することによって取得される値である。
【００５０】
・管理ブロック
管理ブロックは、ストライプグループ番号が連続する複数のストライプグループの集合を単位に構成される。パリティ配置（より詳細には、パリティ配置及びデータ配置）は、管理ブロックを単位にパターン化される。つまり管理ブロックは、パリティブロック配置位置を管理するためのブロックである。前記配置パターン（以下、パリティ配置パターンと称する）は、各管理ブロックにおけるストライプグループ単位のパリティブロックＰの配置位置（パリティブロック配置位置）を示す。より詳細には、前記パリティ配置パターンは、各管理ブロックにおけるストライプグループ単位のパリティブロックＰ及びデータブロックＤ０乃至Ｄ５の配置位置（パリティブロック配置位置及びデータブロック配置位置）を示す。
【００５１】
前記パリティ配置パターンの特徴は、管理ブロックに配置されるパリティブロックＰの数が、ＳＳＤアレイ１１０−＊を構成するＳＳＤ−＃０乃至ＳＳＤ−＃６の間で全て異なるようなパリティ配置を示すことにある。具体的には、前記パリティ配置パターンによれば、ドライブメンバ番号が最も大きいＳＳＤにはパリティブロックＰは配置されない。また、前記パリティ配置パターンによれば、ドライブメンバ番号が１減少する毎にパリティ配置数が１増加するように、パリティブロックＰが配置される。
【００５２】
・管理ブロックサイズ（ｂｌｋ＿ｓｚ）
管理ブロックサイズは、前記管理ブロックを構成するストライプグループの数を示す。上述のパリティ配置パターンの場合、管理ブロックサイズは、ｄｒｖ＿ｎｕｍ（ｄｒｖ＿ｎｕｍ−１）／２で示される。ここで、ｄｒｖ＿ｎｕｍはアレイ内ドライブ数を示す。アレイ内ドライブ数（ｄｒｖ＿ｎｕｍ）が７である本実施形態では、管理ブロックサイズは２１である。つまり管理ブロックは、ストライプグループ番号（ｓｇ＿ｎｏ）が連続する２１のストライプグループから構成される。
【００５３】
・管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）
管理ブロック境界オフセットは、ストライプグループを単位に、パリティブロックＰの配置位置、更にはデータブロックＤｊ（ｊ＝０，１，…，５）の配置位置を算出する場合に使用される。前記管理ブロック境界オフセットは、ＳＳＤアレイ１１０−＊が生成（または定義または構築）された直後は０に設定される。また前記管理ブロック境界オフセットは、パリティ再配置処理が開始される都度１増加する。
【００５４】
上記パリティ再配置処理は、パリティブロックＰ及びデータブロックＤｊを再配置する処理である。前記パリティ再配置処理は、ＳＳＤアレイ１１０−＊内に書き込み回数が上限に達したＳＳＤが存在することが検出されて、当該ＳＳＤが交換された場合に実行される。１増加後の管理ブロック境界オフセットが、管理ブロックサイズ（管理ブロック内のストライプグループ数）に一致する場合、当該管理ブロック境界オフセットは０に戻される。つまり前記管理ブロック境界オフセットは、前記パリティ配置パターン（管理ブロックの）の開始ストライプグループの位置を示す。前記管理ブロック境界オフセットは、前記パリティ再配置処理によりパリティブロック及びデータブロックの再配置が完了している領域に対するアクセスがホスト２から要求された場合に、アクセス対象のパリティブロックＰとデータブロックＤｊとを特定するためにも使用される。
【００５５】
・再配置前ブロック境界オフセット
再配置前ブロック境界オフセット（以下、ＰＲブロック境界オフセットと称する）は、ストライプグループを単位に、パリティブロックＰの配置位置、更にはデータブロックＤｊの配置位置を算出する場合に使用される。前記ＰＲブロック境界オフセットは、ＳＳＤアレイ１１０−＊が生成（構成）された直後は、前記管理ブロック境界オフセットと同一値に設定される。また前記ＰＲブロック境界オフセットは、前記パリティ再配置処理が開始される際に、更新前の管理ブロック境界オフセットに設定される。前記ＰＲブロック境界オフセットは、前記パリティ再配置処理の期間においてパリティブロック及びデータブロックの再配置処理が未実行である領域に対するアクセスがホスト２から要求された場合に、アクセス対象のパリティブロックＰとデータブロックＤｊとを特定するためにも使用される。
【００５６】
・パリティ再配置中ストライプグループ番号
パリティ再配置中ストライプグループ番号（以下、Ｒストライプグループ番号と称する）は、前記パリティ再配置処理における実行位置、つまりパリティ再配置実行中のストライプグループ番号を示す。
【００５７】
・データブロック番号
データブロック番号は、ストライプグループ内のデータブロックＤ０乃至Ｄ５に固定的に割り当てられる順番号を示す。ここでは、データブロックＤ０乃至Ｄ５に、それぞれデータブロック番号０乃至５が割り当てられる。
【００５８】
・ドライブスロット番号
ドライブスロット番号は、ＳＳＤ１１−＊を構成する全てのＳＳＤ（つまりＳＳＤ１１−０乃至１１−６）に固定的に割り当てられる順番号を示す。ここでは、ＳＳＤ１１−０乃至１１−６のドライブスロット番号には、当該ＳＳＤ１１−０乃至１１−６が接続されているドライブスロットに割り当てられている番号０乃至６（ＳＳＤ−＃０乃至ＳＳＤ−＃６）が用いられる。
【００５９】
・パリティ再配置中ドライブスロット番号
パリティ再配置中ドライブスロット番号（以下、Ｒドライブスロット番号と称する）は、パリティ再配置実行中のストライプグループにおけるパリティブロックまたはデータブロックの再配置の実行位置、つまり再配置実行中のストライプブロックを含むＳＳＤ（ドライブ）のドライブスロット番号を示す。
【００６０】
・ドライブメンバ番号
ドライブメンバ番号は、ＳＳＤアレイ１１０−＊を構成するＳＳＤ１１−０乃至１１−６に割り当てられる論理的な順番号である。本実施形態では、ＳＳＤ１１−０の生成直後は、アレイ管理部２１（より詳細には、アレイ管理部２１内のアレイ生成部２１０）が、ＳＳＤ１１−０乃至１１−６のドライブメンバ番号を、当該ＳＳＤ１１−０乃至１１−６のドライブスロット番号と同一値に設定する。また前記パリティ再配置処理が開始される際には、ブロック再配置部２５０が、ＳＳＤ１１−０乃至１１−６のうちの１つ（つまり、書き込み回数の上限に達したＳＳＤ）と交換されるＳＳＤのドライブメンバ番号を０に設定し、残りのＳＳＤのドライブメンバ番号を１増加する。ＳＳＤアレイ１１０−＊を構成する各ＳＳＤのドライブメンバ番号は、前記パリティ再配置処理によりパリティブロック及びデータブロックの再配置が完了している領域に対するアクセスがホスト２から要求された場合に、アクセス対象のパリティブロックとデータブロックを特定するために使用される。
【００６１】
・再配置前メンバ番号
再配置前メンバ番号（以下、ＰＲメンバ番号と称する）は、前記パリティ再配置処理が開始される前にＳＳＤアレイ１１０−＊を構成するＳＳＤ１１−０乃至１１−６に割り当てられていた論理的な順番号を示す。ＳＳＤアレイ１１０−＊が生成された直後は、アレイ管理部２１が、ＳＳＤ１１−＊の前記ＰＲメンバ番号を当該ＳＳＤ１１−＊のドライブスロット番号と同一値に設定する。また、前記パリティ再配置処理が開始される際には、ブロック再配置部２５０が、ＳＳＤ１１−＊の前記ＰＲメンバ番号を当該ＳＳＤ１１−＊の更新前のドライブメンバ番号に設定する。ＳＳＤアレイ１１０−＊を構成する各ＳＳＤのドライブメンバ番号は、前記パリティ再配置処理の期間においてパリティブロック及びデータブロックの再配置処理が未実行である領域に対するアクセスがホスト２から要求された場合に、アクセス対象のパリティブロックとデータブロックを特定するために使用される。
【００６２】
図４は、アレイ管理テーブル２８及び２９のデータ構造例を示す。アレイ管理テーブル２８は、ＳＳＤアレイ１１０−＊の構成を管理するための第１のＳＳＤアレイ管理情報を登録するのに用いられ、アレイ管理テーブル２９は、ＳＳＤアレイ１１０−＊の構成を管理するための第２のＳＳＤアレイ管理情報を登録するのに用いられる。ＳＳＤアレイ１１０−＊はアレイ管理部２１内のアレイ生成部２１０によって生成（定義）される。アレイ管理テーブル２８及び２９は、ＳＳＤアレイ１１０−＊が生成される際に、アレイ管理部２１によって生成される。本実施形態においてアレイ管理テーブル２８及び２９は、ローカルメモリ１２６に格納される。
【００６３】
第１のＳＳＤアレイ管理情報は、アレイ内ドライブ数（ｄｒｖ＿ｎｕｍ）、ストライプサイズ（ｓｂ＿ｓｚ）、ストライプグループサイズ（ｓｇ＿ｓｚ）、管理ブロックサイズ（ｂｌｋ＿ｓｚ）、管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）、ＰＲブロック境界オフセット（再配置前ブロック境界オフセット）、Ｒストライプグループ番号（パリティ再配置中ストライプグループ番号）、及びＲドライブスロット番号（パリティ再配置中ドライブスロット番号）の各情報を含む。一方、第２のＳＳＤアレイ管理情報は、ＳＳＤアレイ１１０−＊を構成するＳＳＤ１１−０乃至ＳＳＤ−６のドライブスロット番号と、当該ＳＳＤ１１−０乃至１１−６のドライブメンバ番号と、当該ＳＳＤ１１−０乃至１１−６のＰＲメンバ番号（再配置前ドライブメンバ番号）との対応を示す。
【００６４】
図５は、ＳＳＤアレイ１１０−＊におけるパリティブロックＰ及びデータブロックＤ０乃至Ｄ５の配置の例を、アレイ管理テーブル２９と関連付けて示す。図５の例では、ストライプグループ番号が０乃至２０のストライプグループの集合が、１つの管理ブロックとして用いられる。図５には示されていないが、本実施形態では、ストライプグループ番号が２１乃至４１のストライプグループの集合も、１つの管理ブロックとして用いられる。
【００６５】
管理ブロックは、パリティブロックＰ及びデータブロックＤ０乃至Ｄ５の規則的な配置位置のパターン（配置パターン）を形成する連続する複数のストライプグループ（本実施形態では２１のストライプグループ）の集合である。管理ブロックはアレイ管理部２１によって定義される。
【００６６】
図５の例では、ドライブメンバ番号が最も大きいＳＳＤはＳＳＤ−＃６（ＳＳＤ１１−６）である。この場合、管理ブロックを構成する２１のストライプグループの何れにおいても、パリティブロックＰは、ＳＳＤ−＃６内の対応するストライプブロックに配置されない。
【００６７】
一方、他のＳＳＤ−＃５乃至ＳＳＤ−＃０（ＳＳＤ１１−５乃至１１−０）には、ＳＳＤ−＃６と比較してドライブメンバ番号が１減少する毎にパリティ配置数が１増加するように、パリティブロックが配置される。これにより、管理ブロック内で、ドライブメンバ番号が５，４，３，２，１及び０のＳＳＤ−＃５，ＳＳＤ−＃４，ＳＳＤ−＃３，ＳＳＤ−＃２，ＳＳＤ−＃１及びＳＳＤ−＃０に配置されるパリティブロックの数は、それぞれ、１，２，３，４，５及び６となる。
【００６８】
次に、本実施形態で適用されるパリティブロック配置位置算出処理の典型的な手順について、アレイ管理テーブル２８及び２９の内容が図４の場合を例に、図６のフローチャートを参照して説明する。パリティブロック配置位置算出処理とは、目的のストライプグループのパリティブロックＰが配置されるドライブの位置（パリティブロック配置位置）を算出するための処理である。ここでは、パリティブロック配置位置として、パリティブロックＰが配置されるドライブのドライブメンバ番号が算出される。
【００６９】
ストレージコントローラ１２のパリティブロック配置算出部２２はまず、対象ストライプグループ番号ｓｇ＿ｎｏ、アレイ内ドライブ数ｄｒｖ＿ｎｕｍ、管理ブロックサイズｂｌｋ＿ｓｚ、管理ブロック境界オフセットｂｄｒ＿ｏｆｓ及び管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍをローカルメモリ１２６のワーク領域に設定する（ステップＳ１）。このステップＳ１においてパリティブロック配置算出部２２は、パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋを変数として定義する。パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋは、前記ワーク領域に設定される。
【００７０】
前記対象ストライプグループ番号ｓｇ＿ｎｏは、目的のストライプグループ（つまりパリティブロック配置位置算出の対象となるストライプグループ）のストライプグループ番号である。前記アレイ内ドライブ数ｄｒｖ＿ｎｕｍ、前記管理ブロックサイズｂｌｋ＿ｓｚ及び前記管理ブロック境界オフセットｂｄｒ＿ｏｆｓは、アレイ管理テーブル２８を参照することにより設定される。前記管理ブロック境界オフセットｂｄｒ＿ｏｆｓは、ＳＳＤアレイ１１０−＊の生成直後は、初期値０に設定される。図４のアレイ管理テーブル２８の例では、ｄｒｖ＿ｎｕｍ＝７、ｂｌｋ＿ｓｚ＝２１、ｂｄｒ＿ｏｆｓ＝０である。
【００７１】
前記管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍは、前記対象ストライプグループの管理ブロック内の相対位置を示すストライプ番号である。前記管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍの範囲は０乃至２０である。前記管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍは、次式
ｂｌｋ＿ｎｕｍ
＝（（ｓｇ＿ｎｏ＋ｂｌｋ＿ｓｚ）−ｂｄｒ＿ｏｆｓ） ％ ｂｌｋ＿ｓｚ
により算出される。この式における記号％は、（（ｓｇ＿ｎｏ＋ｂｌｋ＿ｓｚ）−ｂｄｒ＿ｏｆｓ）をｂｌｋ＿ｓｚで除することによって商の整数部を算出した場合の剰余を取得する演算を示す。管理ブロック境界オフセットｂｄｒ＿ｏｆｓが０の図５の配置では、例えばストライプグループ番号ｓｇ＿ｎｏが０または２１のストライプグループの管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍは０となる。同様に、ストライプグループ番号ｓｇ＿ｎｏが２０のストライプグループの管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍは２０となる。
【００７２】
パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋは、パリティブロックＰの配置位置（つまりパリティブロックＰが配置されるドライブ）が全て異なる連続するストライプグループ（より詳細にはストライプグループ番号ｓｇ＿ｎｏが連続するストライプグループ）の数（範囲）を示す。パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋは、６，５，４，３，２または１のいずれかである。パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋの最大値６は、ｄｒｉｖｅ＿ｎｕｍ−１に一致する。
【００７３】
次にパリティブロック配置算出部２２は、以下のループＳ２を、ｉ＝０からｉ＝ｄｒｖ＿ｎｕｍ−２（＝５）までの範囲の変数ｉについて順に繰り返す。但し、後述するステップＳ２ｂの判定がＹｅｓの場合、パリティブロック配置算出部２２は、ループＳ２から抜ける。
【００７４】
まずパリティブロック配置算出部２２は、パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋを、次式
ｉｎｔ＿ｂｌｋ＝ｄｒｖ＿ｎｕｍ−１−ｉ
により算出する（ステップＳ２ａ）。ｉ＝０の場合、パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋは６となる。ｉｎｔ＿ｂｌｋ＝６は、管理ブロック内のストライプ番号が０乃至５の範囲のストライプグループの集合を指す。なお、ｉｎｔ＿ｂｌｋ＝５は、管理ブロック内のストライプ番号が６乃至１０の範囲のストライプグループの集合を指し、ｉｎｔ＿ｂｌｋ＝４は、管理ブロック内のストライプ番号が１１乃至１４の範囲のストライプグループの集合を指す。同様に、ｉｎｔ＿ｂｌｋ＝３は、管理ブロック内のストライプ番号が１５乃至１７の範囲のストライプグループの集合を指し、ｉｎｔ＿ｂｌｋ＝２は、管理ブロック内のストライプ番号が１８乃至１９の範囲のストライプグループの集合を指す。そしてｉｎｔ＿ｂｌｋ＝１は、管理ブロック内のストライプ番号が２０のストライプグループを指す。
【００７５】
次にパリティブロック配置算出部２２は、管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが、算出されたｉｎｔ＿ｂｌｋよりも小さいかを判定する（ステップＳ２ｂ）。この判定は、対象ストライプグループが、算出されたｉｎｔ＿ｂｌｋの示すストライプグループの範囲に入っているかをチェックするために行われる。本実施形態のようにｉｎｔ＿ｂｌｋ＝６の場合、管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが０乃至５のいずれかであれば、ステップＳ２ｂの判定はＹｅｓとなる。この場合、パリティブロック配置算出部２２は、ループＳ２から抜けてステップＳ３に進む。そしてパリティブロック配置算出部２２は、前記管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、前記パリティブロック配置位置を示すドライブメンバ番号ｐｄｒｖ＿ｎｏとして設定する。これにより前記管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが０，１，２，３，４または５（つまり６未満）であれば（ステップＳ２ｂのＹｅｓ）、パリティブロック配置位置ドライブメンバ番号ｐｄｒｖ＿ｎｏはｂｌｋ＿ｎｕｍに一致する。
【００７６】
これに対し、前記管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが６未満でないならば（ステップＳ２ｂのＮｏ）、パリティブロック配置算出部２２は、対象ストライプグループがパリティ連続ストライプ区切りｉｎｔ＿ｂｌｋ＝６（つまり管理ブロック内のストライプ番号が０乃至５の範囲のストライプグループの集合）から外れていると判定する。この場合、パリティブロック配置算出部２２は、対象ストライプグループが次のパリティ連続ストライプ区切りｉｎｔ＿ｂｌｋ＝５に入っているかを判定するために、管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、現在のパリティ連続ストライプ区切りｉｎｔ＿ｂｌｋ＝６だけディクリメントする（ステップＳ２ｃ）。
【００７７】
ｉ＝０の場合におけるディクリメント後の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍは、パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋ＝６（管理ブロック内のストライプ番号が０乃至５の範囲のストライプグループの集合）を除く管理ブロック内の相対位置を示す。この点でディクリメント後の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍは、ステップＳ１で設定された管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍと異なる。
【００７８】
次にパリティブロック配置算出部２２は、変数ｉをｉ＝０からｉ＝１にインクリメントして、前記ステップＳ２ａを再度実行する。この場合、パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋは６から５に更新される。そしてパリティブロック配置算出部２２は、前記ディクリメント後の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが、現在のｉｎｔ＿ｂｌｋ＝５よりも小さいかを判定する（ステップＳ２ｂ）。もし、ステップＳ１で設定された管理ブロック内対象ストライプ番号（以下、初期管理ブロック内対象ストライプ番号と称する）ｂｌｋ＿ｎｕｍが６乃至１０のいずれかであれば、ステップＳ２ｂの判定はＹｅｓとなる。この場合、パリティブロック配置算出部２２は、ループＳ２から抜けてステップＳ３に進む。
【００７９】
ステップＳ３においてパリティブロック配置算出部２２は、現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、前記パリティブロック配置位置を示すドライブメンバ番号ｐｄｒｖ＿ｎｏとして設定する。ここで前記初期管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが６，７，８，９または１０であり、したがって現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが０，１，２，３または４であるものとする（ステップＳ２ｂのＹｅｓ）。この場合、ｐｄｒｖ＿ｎｏは現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍ（つまり、０，１，２，３または４）に一致する。
【００８０】
これに対し、前記現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが現在のｉｎｔ＿ｂｌｋ＝５未満でないならば（ステップＳ２ｂのＮｏ）、パリティブロック配置算出部２２は、対象ストライプグループが当該現在のｉｎｔ＿ｂｌｋ＝５（つまり管理ブロック内のストライプ番号が６乃至１０の範囲のストライプグループの集合）から外れていると判定する。この場合、パリティブロック配置算出部２２は、対象ストライプグループが次のパリティ連続ストライプ区切りｉｎｔ＿ｂｌｋ＝４に入っているかを判定するために、管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、現在のパリティ連続ストライプ区切りｉｎｔ＿ｂｌｋ＝５だけディクリメントする（ステップＳ２ｃ）。
【００８１】
次にパリティブロック配置算出部２２は、変数ｉをｉ＝１からｉ＝２にインクリメントして、前記ステップＳ２ａを再度実行する。この場合、パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋは５から４に更新される。そしてパリティブロック配置算出部２２は、現在の（ディクリメント後の）管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが、現在のｉｎｔ＿ｂｌｋ＝４よりも小さいかを判定する（ステップＳ２ｂ）。もし、初期管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが１１乃至１４のいずれかであれば、ステップＳ２ｂの判定はＹｅｓとなる。この場合、パリティブロック配置算出部２２は、ループＳ２から抜けてステップＳ３に進む。ステップＳ３においてパリティブロック配置算出部２２は、現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、前記パリティブロック配置位置を示すドライブメンバ番号ｐｄｒｖ＿ｎｏとして設定する。ここで前記初期管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが１１，１２，１３または１４であり、したがって現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが０，１，２，または３であるものとする（ステップＳ２ｂのＹｅｓ）。この場合、ｐｄｒｖ＿ｎｏは現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍ（つまり、０，１，２または３）に一致する。
【００８２】
これに対し、前記現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが現在のｉｎｔ＿ｂｌｋ＝４未満でないならば（ステップＳ２ｂのＮｏ）、パリティブロック配置算出部２２は、対象ストライプグループが当該現在のｉｎｔ＿ｂｌｋ＝４（つまり管理ブロック内のストライプ番号が１１乃至１４の範囲のストライプグループの集合）から外れていると判定する。この場合、パリティブロック配置算出部２２は、対象ストライプグループが次のパリティ連続ストライプ区切りｉｎｔ＿ｂｌｋ＝３に入っているかを判定するために、管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、現在のｉｎｔ＿ｂｌｋ＝４だけディクリメントする（ステップＳ２ｃ）。
【００８３】
次にパリティブロック配置算出部２２は、変数ｉをｉ＝２からｉ＝３にインクリメントして、前記ステップＳ２ａを再度実行する。この場合、パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋは４から３に更新される。そしてパリティブロック配置算出部２２は、現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが、現在のｉｎｔ＿ｂｌｋ＝３よりも小さいかを判定する（ステップＳ２ｂ）。もし、初期管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが１５乃至１７のいずれかであれば、ステップＳ２ｂの判定はＹｅｓとなる。この場合、パリティブロック配置算出部２２は、ループＳ２から抜けてステップＳ３に進む。ステップＳ３においてパリティブロック配置算出部２２は、現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、前記パリティブロック配置位置を示すドライブメンバ番号ｐｄｒｖ＿ｎｏとして設定する。ここで前記初期管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが１５，１６または１７であり、したがって現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが０，１または２であるものとする（ステップＳ２ｂのＹｅｓ）。この場合、ｐｄｒｖ＿ｎｏは現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍ（つまり、０，１または２）に一致する。
【００８４】
これに対し、前記現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが現在のｉｎｔ＿ｂｌｋ＝３未満でないならば（ステップＳ２ｂのＮｏ）、パリティブロック配置算出部２２は、対象ストライプグループが当該現在のｉｎｔ＿ｂｌｋ＝３（つまり管理ブロック内のストライプ番号が１５乃至１７の範囲のストライプグループの集合）から外れていると判定する。この場合、パリティブロック配置算出部２２は、対象ストライプグループが次のパリティ連続ストライプ区切りｉｎｔ＿ｂｌｋ＝２に入っているかを判定するために、管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、現在のｉｎｔ＿ｂｌｋ＝３だけディクリメントする（ステップＳ２ｃ）。
【００８５】
次にパリティブロック配置算出部２２は、変数ｉをｉ＝３からｉ＝４にインクリメントして、前記ステップＳ２ａを再度実行する。この場合、パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋは３から２に更新される。そしてパリティブロック配置算出部２２は、現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが、現在のｉｎｔ＿ｂｌｋ＝２よりも小さいかを判定する（ステップＳ２ｂ）。もし、初期管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが１８または１９のいずれかであれば、ステップＳ２ｂの判定はＹｅｓとなる。この場合、パリティブロック配置算出部２２は、ループＳ２から抜けてステップＳ３に進む。ステップＳ３においてパリティブロック配置算出部２２は、現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、前記パリティブロック配置位置を示すドライブメンバ番号ｐｄｒｖ＿ｎｏとして設定する。ここで前記初期管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが１８または１９であり、したがって現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが０または１であるものとする（ステップＳ２ｂのＹｅｓ）。この場合、ｐｄｒｖ＿ｎｏは現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍ（つまり、０または１）に一致する。
【００８６】
これに対し、前記現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが現在のｉｎｔ＿ｂｌｋ＝２未満でないならば（ステップＳ２ｂのＮｏ）、パリティブロック配置算出部２２は、対象ストライプグループが当該現在のｉｎｔ＿ｂｌｋ＝２（つまり管理ブロック内のストライプ番号が１８乃至１９の範囲のストライプグループの集合）から外れていると判定する。この場合、パリティブロック配置算出部２２は、対象ストライプグループが次のパリティ連続ストライプ区切りｉｎｔ＿ｂｌｋ＝１に入っているかを判定するために、管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、現在のｉｎｔ＿ｂｌｋ＝２だけディクリメントする（ステップＳ２ｃ）。
【００８７】
次にパリティブロック配置算出部２２は、変数ｉをｉ＝４からｉ＝５にインクリメントして、前記ステップＳ２ａを再度実行する。この場合、パリティ連続ストライプ区切りｉｎｔ＿ｂｌｋは２から１に更新される。そしてパリティブロック配置算出部２２は、現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが、現在のｉｎｔ＿ｂｌｋ＝１よりも小さいかを判定する（ステップＳ２ｂ）。もし、初期管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが２０であれば、ステップＳ２ｂの判定はＹｅｓとなる。この場合、パリティブロック配置算出部２２は、ループＳ２から抜けてステップＳ３に進む。ステップＳ３においてパリティブロック配置算出部２２は、現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍを、前記パリティブロック配置位置を示すドライブメンバ番号ｐｄｒｖ＿ｎｏとして設定する。ここで前記初期管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが２０であり、したがって現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍが０であるものとする（ステップＳ２ｂのＹｅｓ）。この場合、ｐｄｒｖ＿ｎｏは現在の管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍ（つまり０）に一致する。
【００８８】
パリティブロック配置算出部２２は、上述のパリティブロック配置位置算出処理を、ＳＳＤアレイ１１０−＊を構成する全てのストライプグループについて実施することにより、ストライプグループ毎のパリティブロック配置位置を示すパリティブロック配置ドライブメンバ番号ｐｄｒｖ＿ｎｏを算出することができる。
【００８９】
アレイ管理テーブル２８及び２９の内容が図４の場合、上述のようなパリティブロック配置ドライブメンバ番号ｐｄｒｖ＿ｎｏの算出により、例えばストライプグループ番号ｓｇ＿ｎｏが０，１，２，３及び５のストライプグループのパリティブロックＰが配置されるべきドライブのドライブメンバ番号（パリティブロック配置ドライブメンバ番号）ｐｄｒ＿ｎｏは、それぞれ、０，１，２，３，４及び５となる（図５参照）。同様に、ストライプグループ番号ｓｇ＿ｎｏが６，７，８，９及び１０のストライプグループのパリティブロックＰが配置されるべきドライブのパリティブロック配置ドライブメンバ番号ｐｄｒ＿ｎｏは、それぞれ、０，１，２，３及び４となる（図５参照）。
【００９０】
同様に、ストライプグループ番号ｓｇ＿ｎｏが１１，１２，１３及び１４のストライプグループのパリティブロックＰが配置されるべきドライブのパリティブロック配置ドライブメンバ番号ｐｄｒ＿ｎｏは、それぞれ、０，１，２及び３となる（図５参照）。同様に、ストライプグループ番号ｓｇ＿ｎｏが１５，１６及び１７のストライプグループのパリティブロックＰが配置されるべきドライブのパリティブロック配置ドライブメンバ番号ｐｄｒ＿ｎｏは、それぞれ、０，１及び２となる（図５参照）。同様に、ストライプグループ番号ｓｇ＿ｎｏが１８及び１９のストライプグループのパリティブロックＰが配置されるべきドライブのパリティブロック配置ドライブメンバ番号ｐｄｒ＿ｎｏは、それぞれ、０及び１となる（図５参照）。同様に、ストライプグループ番号ｓｇ＿ｎｏが２０のストライプグループのパリティブロックＰが配置されるべきドライブのパリティブロック配置ドライブメンバ番号ｐｄｒ＿ｎｏは０となる（図５参照）。
【００９１】
次に、本実施形態で適用されるデータブロック配置位置算出処理の典型的な手順について、アレイ管理テーブル２８及び２９の内容が図４の場合を例に、図７のフローチャートを参照して説明する。データブロック配置位置算出処理とは、目的のストライプグループ内の目的のデータブロックが配置されるドライブの位置（データブロック配置位置）を算出するための処理である。ここでは、データブロック配置位置として、データブロックが配置されるドライブのドライブメンバ番号が算出される。
【００９２】
ストレージコントローラ１２のデータブロック配置算出部２３はまず、対象ストライプグループ番号ｓｇ＿ｎｏ、対象データブロック番号ｄｂｌｋ＿ｎｏ、アレイ内ドライブ数ｄｒｖ＿ｎｕｍ（＝７）、管理ブロックサイズｂｌｋ＿ｓｚ（＝２１）、管理ブロック境界オフセットｂｄｒ＿ｏｆｓ（＝０）及び管理ブロック内対象ストライプ番号ｂｌｋ＿ｎｕｍをローカルメモリ１２６のワーク領域に設定する（ステップＳ１１）。対象ストライプグループ番号ｓｇ＿ｎｏは目的のデータブロックＤｊを含むストライプグループ（目的のストライプグループ）のストライプグループ番号である。対象データブロック番号ｄｂｌｋ＿ｎｏは、前記目的のデータブロックＤｊのデータブロック番号である（ｊ＝ｄｂｌｋ＿ｎｏ）。前記目的のデータブロックは、前記目的のストライプグループにおける６つのデータブロックＤ０乃至Ｄ５の１つである。
【００９３】
次にデータブロック配置算出部２３は、対象ストライプグループ番号ｓｇ＿ｎｏの示す目的のストライプグループにおけるパリティブロック配置位置を、パリティブロック配置算出部２２により算出させる（ステップＳ１２）。つまりパリティブロック配置算出部２２は、前記パリティブロック配置位置を示すドライブメンバ番号ｐｄｒｖ＿ｎｏを、図６のフローチャートに示すパリティブロック配置位置算出処理により算出する。
【００９４】
次にデータブロック配置算出部２３は、算出されたパリティ配置ドライブメンバ番号ｐｄｒｖ＿ｎｏ、対象データブロック番号ｄｂｌｋ＿ｎｏ及びアレイ内ドライブ数ｄｒｖ＿ｎｕｍ（＝７）に基づいて、対象データブロック番号ｄｂｌｋ＿ｎｏの示す目的のデータブロックＤｊ（ｊ＝ｄｂｌｋ＿ｎｏ）が配置されるべきデータブロック配置位置を算出する（ステップＳ１３）。即ちデータブロック配置算出部２３は、データブロックＤｊ（ｊ＝ｄｂｌｋ＿ｎｏ）が配置されるべきデータブロック配置位置を示すドライブメンバ番号（データブロック配置ドライブメンバ番号）ｄｂｌｋ＿ｄｒｖを、次式
ｄｂｌｋ＿ｄｒｖ
＝（（ｐｄｒｖ＿ｎｏ＋ｄｂｌｋ＿ｎｏ＋１） ％ ｄｒｖ＿ｎｕｍ
により算出する。
【００９５】
データブロック配置算出部２３は、上述のデータブロック配置位置算出処理を、ＳＳＤアレイ１１０−＊を構成する全てのストライプグループのデータブロックＤ０乃至Ｄ５について実施することにより、ストライプグループ毎で且つデータブロック毎に当該データブロックの配置位置を示すデータブロック配置ドライブメンバ番号ｄｂｌｋ＿ｄｒｖを算出することができる。
【００９６】
このようなデータブロック配置ドライブメンバ番号ｄｂｌｋ＿ｄｒｖの算出により、アレイ管理テーブル２８及び２９の内容が図４の場合、例えばストライプグループ番号ｓｇ＿ｎｏが０のストライプグループのデータブロックＤ０，Ｄ１，Ｄ２，Ｄ３，Ｄ４及びＤ５が配置されるべきドライブのドライブメンバ番号（データブロック配置ドライブメンバ番号）ｄｂｌｋ＿ｄｒｖは、それぞれ、１，２，３，４，５及び６となる。同様に、例えばストライプグループ番号ｓｇ＿ｎｏが１のストライプグループのデータブロックＤ０，Ｄ１，Ｄ２，Ｄ３，Ｄ４及びＤ５が配置されるべきドライブのドライブメンバ番号ｄｂｌｋ＿ｄｒｖは、それぞれ、２，３，４，５，６及び０となる。
【００９７】
上述のパリティブロック配置位置算出処理及びデータブロック配置位置算出処理により、図５に示されるようなパリティ配置パターンでパリティブロックＰとデータブロックＤ０乃至Ｄ５が配置される。図５の例では、ドライブメンバ番号が最も大きいＳＳＤにはパリティブロックＰは配置されないことに注意されるべきである。また、図５の例では、ＳＳＤアレイ１１０−＊の各管理ブロックにおいて、ドライブメンバ番号が１減少する毎に、パリティブロックＰの配置数が１増加するように、当該パリティブロックＰが配置される。このようなパリティブロックＰの配置により、管理ブロックにおけるパリティブロックの配置数は、ドライブメンバ番号が０，１，２，３，４，５及び６のドライブ（ＳＳＤ１１−＊）において、それぞれ、６，５，４，３，２，１及び０となる。つまり本実施形態によれば、管理ブロックを単位に、パリティブロックＰが規則的に且つ不均一に配置される。
【００９８】
このように本実施形態によれば、ＳＳＤアレイ１１０−＊内のＳＳＤ−＃０乃至ＳＳＤ−＃６（ドライブ）に、パリティブロックＰ（つまり、ライトアクセスのホットスポットであるパリティブロックＰ）が不均一に配置される。このため、ＳＳＤ−＃０乃至ＳＳＤ−＃６に配置されるパリティブロックＰの数の相違に対応するように、ＳＳＤ−＃０乃至ＳＳＤ−＃６にそれぞれの書き込み回数も相違する。これにより、ＳＳＤアレイ１１０−＊内の複数のＳＳＤ１１−＊において書き込み回数が同時に上限に達するのを防止できる。よって本実施形態によれば、ＳＳＤアレイ１１０−＊内の複数のＳＳＤ１１−＊において書き込み回数の上限に達したことを要因とするＳＳＤの多重故障によるアレイ閉塞を防止できる。
【００９９】
また本実施形態によれば、各ストライプグループのデータブロックＤ０乃至Ｄ５は、図７のデータブロック配置位置算出処理により、一般的なＲＡＩＤレベル５のＳＳＤアレイの場合と異なって、当該ストライプグループのパリティブロック配置位置を起点に配置される。このようなデータブロック配置を適用する理由は次の通りである。今、パリティブロックＰが最も多く配置されているＳＳＤの書き込み回数が上限に達したために、当該ＳＳＤが交換されるものとする。この場合、一般的なＲＡＩＤレベル５のＳＳＤアレイでは、全てのストライプグループで、パリティブロックＰ及びデータブロックＤ０乃至Ｄ５の再配置が必要となる。これに対し本実施形態では、上述のデータブロック配置により、最小のパリティブロックＰ及びデータブロックＤ０乃至Ｄ５の再配置の実行で、前記パリティ配置パターンを維持することができる。この再配置については後述する。
【０１００】
次に、ホスト２からストレージ装置１のストレージコントローラ１２に、ＳＳＤアレイ１１０−＊へのアクセスが要求された場合の動作について説明する。この動作について、図８Ａ及び８Ｂのフローチャートを参照して説明する。図８Ａは、本実施形態で適用されるブロック特定処理の典型的な手順を説明するためのフローチャートの一部を示す図であり、図８Ｂは、当該フローチャートの残りを示す図である。
【０１０１】
ストレージコントローラ１２のブロック特定部２４は、図８Ａ及び８Ｂのフローチャートに従って前記ブロック特定処理を実行する。このブロック特定処理は、ホスト２によって要求されたアクセス対象データブロックを計算により特定するための処理である。
【０１０２】
まずブロック特定部２４は、アクセス対象領域スタートアドレスｓｔａ＿ａｄｒ、アクセスデータサイズｄ＿ｓｚ、アレイ内ドライブ数ｄｒｖ＿ｎｕｍ及びストライプサイズｓｂ＿ｓｚをローカルメモリ１２６のワーク領域に設定する（ステップＳ２１）。このステップＳ２１においてブロック特定部２４は、ストライプグループ内総データブロックサイズ（以下、総データブロックサイズと称する）ｓｇ＿ｓｚ、アクセス対象領域エンドアドレスｅｎｄ＿ａｄｒ、アクセス対象ストライプグループ番号ａｃｓ＿ｓｇ［］、アクセス対象データブロック番号ａｃｓ＿ｄｂｌｋ［］、ブロック内アクセスオフセットアドレスａｃｓ＿ｏｆｓ［］、ブロック内アクセスサイズａｃｓ＿ｓｚ［］、アクセス対象データブロック数ａｃｓ＿ｎｕｍ及びアクセス対象データブロックエンドアドレスａｃｓ＿ｅｎｄを、変数として定義する。これらの変数は、前記ワーク領域内に設定される。
【０１０３】
アクセス対象領域スタートアドレスｓｔａ＿ａｄｒは、ホスト２により要求されたアクセス対象領域のスタートアドレスを示す。アクセスデータサイズｄ＿ｓｚは、アクセス対象領域のサイズを示す。総データブロックサイズｓｇ＿ｓｚは、ストライプグループ内の全てのデータブロックのサイズを示す。アクセス対象領域エンドアドレスｅｎｄ＿ａｄｒは、アクセス対象領域の終端のアドレスに１が加算されたアドレスを示す。
【０１０４】
アクセス対象ストライプグループ番号ａｃｓ＿ｓｇ［］は、アクセス対象ストライプグループの番号（ストライプグループ番号）を示す。アクセス対象データブロック番号ａｃｓ＿ｄｂｌｋ［］は、アクセス対象データブロックの番号（データブロック番号）を示す。ブロック内アクセスオフセットアドレスａｃｓ＿ｏｆｓ［］は、アクセス対象データブロックの始端からアクセス対象領域スタートアドレスｓｔａ＿ａｄｒまでのオフセットを示す。ブロック内アクセスサイズａｃｓ＿ｓｚ［］は、アクセス対象データブロックの実際にアクセスされるべきサイズであり、当該データブロックにおけるアクセス対象領域スタートアドレスｓｔａ＿ａｄｒの位置から当該データブロックの終端までのサイズを示す。アクセス対象データブロック数ａｃｓ＿ｎｕｍは、アクセス対象データブロックの数を示す。アクセス対象データブロックエンドアドレスａｃｓ＿ｅｎｄは、アクセス対象データブロックの終端のアドレスを示す。
【０１０５】
次にブロック特定部２４は、総データブロックサイズｓｇ＿ｓｚを、ストライプサイズｓｂ＿ｓｚ及びアレイ内ドライブ数ｄｒｖ＿ｎｕｍに基づいて次式
ｓｇ＿ｓｚ＝ｓｂ＿ｓｚ×（ｄｒｖ＿ｎｕｍ−１）
により算出する（ステップＳ２２）。またブロック特定部２４は、アクセス対象領域エンドアドレスｅｎｄ＿ａｄｒを、アクセス対象領域スタートアドレスｓｔａ＿ａｄｒ及びアクセスデータサイズｄ＿ｓｚに基づいて、次式
ｅｎｄ＿ａｄｒ＝ｓｔａ＿ａｄｒ＋ｄ＿ｓｚ
により算出する（ステップＳ２３）。
【０１０６】
次にブロック特定部２４は、ループＳ２４を実行することにより、アクセス対象データブロックのリストを生成する。ここで、ストレージコントローラ１２からＳＳＤアレイ１１０−＊に対して同時にアクセス可能なブロックの数をｎとすると、ブロック特定部２４は、ループＳ２４を、ｉ＝０からｉ＝ｎ−１までの範囲の変数ｉについて以下に述べるように順に繰り返す。但し、後述するステップＳ２４ｅの判定がＮｏの場合、パリティブロック配置算出部２２は、ループＳ２４から抜ける。
【０１０７】
ループＳ２４においてブロック特定部２４は、アクセス対象ストライプグループ番号ａｃｓ＿ｓｇ［ｉ］、アクセス対象データブロック番号ａｃｓ＿ｄｂｌｋ［ｉ］、ブロック内アクセスオフセットアドレスａｃｓ＿ｏｆｓ［ｉ］、ブロック内アクセスサイズａｃｓ＿ｓｚ［ｉ］及びアクセス対象データブロックエンドアドレスａｃｓ＿ｅｎｄを算出する（ステップＳ２４ａ）。このステップＳ２４ａの詳細は次の通りである。
【０１０８】
まずブロック特定部２４はステップＳ２４ａにおいて、アクセス対象ストライプグループ番号ａｃｓ＿ｓｇ［ｉ］を、アクセス対象領域スタートアドレスｓｔａ＿ａｄｒ及び総データブロックサイズｓｇ＿ｓｚに基づいて、次式
ａｃｓ＿ｓｇ［ｉ］＝ｓｔａ＿ａｄｒ／ｓｇ＿ｓｚ
により算出する。またブロック特定部２４はステップＳ２４ａにおいて、アクセス対象データブロック番号ａｃｓ＿ｄｂｌｋ［ｉ］を、アクセス対象領域スタートアドレスｓｔａ＿ａｄｒ、総データブロックサイズｓｇ＿ｓｚ及びストライプサイズｓｂ＿ｓｚに基づいて、次式
ａｃｓ＿ｄｂｌｋ［ｉ］
＝（ｓｔａ＿ａｄｒ ％ ｓｇ＿ｓｚ）／ｓｂ＿ｓｚ
により算出する。ここで、（ｓｔａ＿ａｄｒ ％ ｓｇ＿ｓｚ）における％は、ｓｔａ＿ａｄｒをｓｇ＿ｓｚで除することによって商の整数部を算出した場合の剰余を取得する演算を示す。
【０１０９】
またブロック特定部２４はステップＳ２４ａにおいて、ブロック内アクセスオフセットアドレスａｃｓ＿ｏｆｓ［ｉ］を、アクセス対象領域スタートアドレスｓｔａ＿ａｄｒ、総データブロックサイズｓｇ＿ｓｚ及びストライプサイズｓｂ＿ｓｚに基づいて、次式
ａｃｓ＿ｏｆｓ［ｉ］
＝（ｓｔａ＿ａｄｒ ％ ｓｇ＿ｓｚ） ％ ｓｂ＿ｓｚ
により算出する。またブロック特定部２４はステップＳ２４ａにおいて、ブロック内アクセスサイズａｃｓ＿ｓｚ［ｉ］を、ストライプサイズｓｂ＿ｓｚ及び算出されたブロック内アクセスオフセットアドレスａｃｓ＿ｏｆｓ［ｉ］に基づいて、次式
ａｃｓ＿ｓｚ［ｉ］＝ｓｂ＿ｓｚ−ａｃｓ＿ｏｆｓ［ｉ］
により算出する。更にブロック特定部２４はステップＳ２４ａにおいて、アクセス対象データブロックエンドアドレスａｃｓ＿ｅｎｄを、アクセス対象領域スタートアドレスｓｔａ＿ａｄｒ、算出されたブロック内アクセスオフセットアドレスａｃｓ＿ｏｆｓ［ｉ］及びストライプサイズｓｂ＿ｓｚに基づいて、次式
ａｃｓ＿ｅｎｄ＝ｓｔａ＿ａｄｒ−ａｃｓ＿ｏｆｓ［ｉ］＋ｓｂ＿ｓｚ
により算出する。
【０１１０】
次にブロック特定部２４は、ステップＳ２４ａで算出されたアクセス対象データブロックエンドアドレスａｃｓ＿ｅｎｄが、アクセス対象領域エンドアドレスｅｎｄ＿ａｄｒより大きいかを判定する（ステップＳ２４ｂ）。もし、ａｃｓ＿ｅｎｄがｅｎｄ＿ａｄｒよりも大きいならば（ステップＳ２４ｂのＹｅｓ）、ブロック特定部２４は、ステップＳ２４ａで算出されたブロック内アクセスサイズａｃｓ＿ｓｚ［ｉ］を、ａｃｓ＿ｅｎｄとｅｎｄ＿ａｄｒとの差分だけ、次式
ａｃｓ＿ｓｚ［ｉ］
＝ａｃｓ＿ｓｚ［ｉ］−（ａｃｓ＿ｅｎｄ−ｅｎｄ＿ａｄｒ）
により補正する（ステップＳ２４ｃ）。そしてブロック特定部２４はステップＳ２４ｄに進む。これに対し、ａｃｓ＿ｅｎｄがｅｎｄ＿ａｄｒよりも大きくないならば（ステップＳ２４ｃのＮｏ）、ブロック特定部２４は、ステップＳ２４ｃをスキップしてステップＳ２４ｄに進む。
【０１１１】
ステップＳ２４ｄにおいてブロック特定部２４は、アクセス対象領域スタートアドレスｓｔａ＿ａｄｒを、現在のブロック内アクセスサイズａｃｓ＿ｓｚ［ｉ］だけ、次式
ｓｔａ＿ａｄｒ＝ｓｔａ＿ａｄｒ＋ａｃｓ＿ｓｚ［ｉ］
により更新する。次にブロック特定部２４は、更新されたアクセス対象領域スタートアドレスｓｔａ＿ａｄｒがアクセス対象領域エンドアドレスｅｎｄ＿ａｄｒよりも小さいかを判定する（ステップＳ２４ｅ）。
【０１１２】
もし、ｓｔａ＿ａｄｒがｅｎｄ＿ａｄｒよりも小さいならば（ステップＳ２４ｅのＹｅｓ）、ブロック特定部２４は、新たなアクセス対象ブロックが存在すると判定する。この場合、ブロック特定部２４は、変数ｉをインクリメントする。そして、このインクリメント後の変数ｉが同時アクセス可能ブロック数ｎ未満であるならば、当該インクリメント後の変数ｉを用いて、ループＳ２４を再び実行する。
【０１１３】
一方、ｓｔａ＿ａｄｒがｅｎｄ＿ａｄｒよりも小さくないならば（ステップＳ２４ｅのＮｏ）、ブロック特定部２４はループＳ２４を抜けてステップＳ２５に進む。また、インクリメント後の変数ｉが同時アクセス可能ブロック数ｎ未満でない場合にも、ブロック特定部２４はループＳ２４を抜けてステップＳ２５に進む。
【０１１４】
ステップＳ２５においてブロック特定部２４は、アクセス対象データブロック数ａｃｓ＿ｎｕｍを現在の変数ｉの値に設定する。このとき、前記ワーク領域には、０からｉまでの変数ｉ毎に、アクセス対象ストライプグループ番号ａｃｓ＿ｓｇ［ｉ］、アクセス対象データブロック番号ａｃｓ＿ｄｂｌｋ［ｉ］、ブロック内アクセスオフセットアドレスａｃｓ＿ｏｆｓ［ｉ］及びブロック内アクセスサイズａｃｓ＿ｓｚ［ｉ］が、アクセス対象データブロックリストの要素として設定されている。
【０１１５】
ブロック特定部２４は、アクセス対象ストライプグループ番号ａｃｓ＿ｓｇ［］毎に、当該アクセス対象ストライプグループ番号ａｃｓ＿ｓｇ［］を、対象ストライプグループ番号ｓｇ＿ｎｏとして設定する（ステップＳ２６）。ステップＳ２６においてブロック特定部２４は、アクセス対象データブロック番号ａｃｓ＿ｄｂｌｋ［］毎に、当該アクセス対象データブロック番号ａｃｓ＿ｄｂｌｋ［］を、対象データブロック番号ｄｂｌｋ＿ｎｏとして設定する。
【０１１６】
ステップＳ２６においてブロック特定部２４は更に、対象ストライプグループ番号ｓｇ＿ｎｏ毎に、当該対象ストライプグループ番号ｓｇ＿ｎｏの示すアクセス対象ストライプグループにおけるパリティブロック配置位置を、図６のフローチャートに従ってパリティブロック配置算出部２２により算出させる。ステップＳ２６においてブロック特定部２４は更に、対象データブロック番号ｄｂｌｋ＿ｎｏ毎に、当該対象データブロック番号ｄｂｌｋ＿ｎｏの示すアクセス対象データブロックの配置位置を、図７のフローチャートに従ってデータブロック配置算出部２３により算出させる。つまりブロック特定部２４は、アクセス対象データブロックと、当該アクセス対象データブロックが存在するストライプグループ内のパリティブロック（以下、アクセス対象パリティブロックと称する）とを特定する。
【０１１７】
アレイアクセスコントローラ２７は、対象データブロック番号ｄｂｌｋ＿ｎｏ毎に特定されたアクセス対象データブロックにアクセスする（ステップＳ２７）。より詳細に述べるならば、アレイアクセスコントローラ２７は、前記特定されたアクセス対象データブロック内のａｃｓ＿ｏｆｓ［］を先頭とする位置からａｃｓ＿ｓｚ［］で示されるサイズの領域にアクセスする。このアクセスは、リードアクセスとライトアクセスとで次のように異なる。
【０１１８】
まず、ホスト２からリードアクセスが要求されている場合、アレイアクセスコントローラ２７は、ＳＳＤアレイ１１０−＊内の前記特定されたアクセス対象データブロックからデータをリードする。また、ホスト２からライトアクセスが要求されている場合、アレイアクセスコントローラ２７は、前記特定されたアクセス対象データブロックのデータ（旧データ）と前記特定されたアクセス対象パリティブロックのデータ（旧パリティ）とをリードする。アレイアクセスコントローラ２７は、旧データをホスト２からのライトデータで新データに更新する。アレイアクセスコントローラ２７は、この新データと旧パリティとに基づき（例えば、この新データと旧パリティとの間の排他的論理和演算により）新パリティを生成する。アレイアクセスコントローラ２７は、新データを前記特定されたアクセス対象データブロックに、新パリティを前記特定されたパリティブロックに、それぞれライトする。
【０１１９】
本実施形態では、ＳＳＤアレイ１１０−＊内のＳＳＤ−＃０乃至ＳＳＤ−＃６（ＳＳＤ１１−０乃至１１−６）に配置されるパリティブロックＰの数が不均一となるように、パリティブロックＰが管理ブロック単位で規則的に分散配置される。このようなパリティブロックＰの不均一な配置が維持された状態で、ＳＳＤアレイ１１０−＊の使用が継続されるものとする。
【０１２０】
すると、ＳＳＤアレイ１１０−＊内でパリティブロックＰの配置数が最も多いＳＳＤ（つまり、ドライブスロット＃０に接続されているＳＳＤ−＃０）の書き込み回数が最初に上限に到達する。そうなった場合、従来技術では、ホットスペアＳＳＤがＳＳＤアレイ１１０−＊に割り当てられて、ＳＳＤ−＃０（第１のＳＳＤ）の全データがホットスペアＳＳＤに退避される。ここでは、ホットスペアＳＳＤは、ドライブスロット＃７に接続されていて且つ待機状態にあるものとする。
【０１２１】
ＳＳＤ−＃０（第１のＳＳＤ）の全データがホットスペアＳＳＤに退避されると、ＳＳＤ−＃０が他のＳＳＤ（第２のＳＳＤ）に交換される。つまり、ＳＳＤ−＃０がドライブスロット＃０から取り外されて、前記他のＳＳＤが新たに当該ドライブスロット＃０に接続される。その後、ホットスペアＳＳＤのデータが前記他のＳＳＤ（以下、交換ＳＳＤと称する）に書き直される。この書き直しは、コピーバックと呼ばれ、当該書き直しによりＳＳＤ交換処理は終了する。
【０１２２】
しかし、このようなＳＳＤ交換処理では、交換ＳＳＤはＳＳＤ−＃０と同様に、ＳＳＤアレイ１１０−＊内でパリティブロックＰの配置数が最も多いＳＳＤとなる。この場合、ＳＳＤアレイ１１０−＊内のＳＳＤの書き込み回数は、当該ＳＳＤにおけるパリティブロックＰの配置数の大小関係に比例しなくなる。つまり、ＳＳＤアレイ１１０−＊内のＳＳＤの書き込み回数の大小関係は、当該ＳＳＤにおけるパリティブロックＰの配置数の大小関係に一致しなくなる。すると、ＳＳＤアレイ１１０−＊内の全ＳＳＤに関し、書き込み回数の上限に到達する順序を制御できない状態となる。そこで本実施形態においてドライブ交換コントローラ２５（より詳細には、ドライブ交換コントローラ２５のブロック再配置部２５０）は、交換ＳＳＤが最もパリティブロックＰの配置数が少ない状態（より詳細には、パリティブロックＰが配置されない状態）となるよう、ＳＳＤアレイ１１０−＊内でパリティブロックＰとデータブロックＤ０乃至Ｄ５をコピーにより再配置する。
【０１２３】
図９は、本実施形態で適用されるブロック再配置について、図５に示されるように配置されていたパリティブロックＰ及びデータブロックＤ０乃至Ｄ５の再配置が全て終了した後の状態を例に、アレイ管理テーブル２８及び２９と関連付けて示す。但し、管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）、ドライブメンバ番号、パリティブロックＰ及びデータブロックＤ０乃至Ｄ６については、再配置前の状態も示されている。図９において、記号→を含む“Ａ→Ｂ”の記述は、再配置前の状態がＡで再配置後の状態がＢであることを示す。
【０１２４】
図９は、ドライブスロット＃０に接続されていたＳＳＤ−＃０が交換されて、パリティブロックＰ及びデータブロックＤ０乃至Ｄ５が再配置される場合を前提としている。このブロック再配置においてブロック再配置部２５０は、図９に示されるように、管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）を１増加する。これにより管理ブロックの開始ストライプグループの位置は、再配置前（図５参照）と比較して、ストライプグループ番号が増加する方向に１ずれる。この場合、再配置前の管理ブロックの開始ストライプグループは、再配置後の管理ブロックの終了ストライプグループとなる。
【０１２５】
ブロック再配置部２５０はまた、ドライブスロット＃０に新たに接続された交換ＳＳＤ（交換ＳＳＤが便宜的にＳＳＤ−＃０と表記されることもある）のドライブメンバ番号を６にする。このことは、交換ＳＳＤ（ＳＳＤ−＃０）のドライブメンバ番号が、図９に示されるように０から６に変更されることと等価である。このドライブメンバ番号の割り当て（変更）により、交換ＳＳＤ（ＳＳＤ−＃０）は、パリティブロックＰが配置されないドライブとして用いられる。
【０１２６】
ブロック再配置部２５０はまた、ドライブスロット＃０以外のドライブスロット＃１乃至＃６に接続されているＳＳＤ−＃１乃至ＳＳＤ−＃６のドライブメンバ番号１乃至６を１減少する。つまりブロック再配置部２５０は、ＳＳＤ−＃１乃至ＳＳＤ−＃６のドライブメンバ番号を、それぞれ１乃至６から０乃至５に変更する。
【０１２７】
前述したように、本実施形態においてＳＳＤ−＃０乃至ＳＳＤ−＃６に管理ブロック単位で配置されるパリティブロックＰの数は、当該ＳＳＤ−＃０乃至ＳＳＤ−＃６のドライブメンバ番号に依存する。ＳＳＤ−＃１乃至ＳＳＤ−＃６のドライブメンバ番号が上述のように０乃至５に変更された場合、当該ＳＳＤ−＃１乃至ＳＳＤ−＃６に管理ブロック単位で配置されるパリティブロックＰの数が５乃至０から６乃至１となるように、パリティブロックＰ及びデータブロックＤ０乃至Ｄ５が再配置される必要がある。更に、ドライブスロット＃０に新たに接続された交換ＳＳＤ（ＳＳＤ−＃０）に管理ブロック単位で配置されるパリティブロックＰの数が０となるように、パリティブロックＰ及びデータブロックＤ０乃至Ｄ５が再配置される必要もある。
【０１２８】
つまり本実施形態では、パリティブロックＰ及びデータブロックＤ０乃至Ｄ５の再配置のために、前記パリティ配置パターンが変更される。但し、変更前のパリティ配置パターンの起点となる位置（つまり管理ブロックの先頭のストライプグループに配置されるパリティブロックＰの位置）及び変更後のパリティ配置パターンの起点となる位置を基準とするならば、両パターンの相対的な位置関係は管理ブロック内の全てのストライプグループにおいて一致する。したがって、パリティ配置パターンは、論理的には変更されないといえる。
【０１２９】
管理ブロック単位に上述のパリティ配置パターンを適用する本実施形態では、上述のドライブメンバ番号の変更により、以下に述べるように、パリティブロックＰ及びデータブロックＤ０乃至Ｄ５の再配置を最小限に抑えることができる。まず本実施形態では、交換ＳＳＤ（ＳＳＤ−＃０）は、パリティブロックＰが配置されないドライブとして用いられる。そのためには、交換ＳＳＤ（ＳＳＤ−＃０）内の全てのパリティブロックＰと、当該パリティブロックＰを含むストライプグループ内のデータブロックＤ０乃至Ｄ６とが再配置されれば良い。
【０１３０】
そこでブロック再配置部２５０は、交換ＳＳＤ（ＳＳＤ−＃０）内のパリティブロックＰが配置されているストライプブロックを含むストライプグループ（以下、再配置対象ストライプグループと称する）についてのみ、パリティブロックＰ及びデータブロックＤ０乃至Ｄ５を再配置する。ブロック再配置部２５０は、この再配置を、管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）が１増加された後の新たな管理ブロックを単位に、前述のパリティ配置パターン（配置規則）に従って実行する。
【０１３１】
図９の例では、再配置対象ストライプグループは、ストライプグループ番号が０，６，１１，１５，１８，２０及び２１のストライプグループを含む。これらのストライプグループは、交換前のＳＳＤ（ＳＳＤ−＃０）にパリティブロックＰが格納されていたストライプブロックを含むストライプグループに相当する。ブロック再配置部２５０は、ストライプグループ番号が０，６，１１，１５，１８，２０及び２１のストライプグループ内で、交換前のＳＳＤ（ＳＳＤ−＃０）に配置（格納）されていたパリティブロックＰ（パリティデータ）を、それぞれＳＳＤ−＃１，ＳＳＤ−＃６，ＳＳＤ−＃５，ＳＳＤ−＃４，ＳＳＤ−＃３，ＳＳＤ−＃２及びＳＳＤ−＃１に再配置（コピー）する。
【０１３２】
図９に示すような、最小限のパリティブロックＰ及びデータブロックＤ０乃至Ｄ５の再配置でありながら、管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）が１増加された後の新たな管理ブロックを単位に、前述のパリティ配置パターン（配置規則）に沿ったパリティブロックＰ及びデータブロックＤ０乃至Ｄ５の配置状態を維持することができる。つまり本実施形態によれば、パリティブロック配置位置、データブロック配置位置、アクセス対象データブロック及びアクセス対象パリティブロックが、図６、図７、図８Ａ及び８Ｂのフローチャートに従って算出可能な状態に、ＳＤＤ交換後のＳＳＤアレイ１１０−＊を維持することができる。
【０１３３】
本実施形態で適用されるパリティ配置パターン（配置規則）によれば、ＳＳＤアレイ１１０−＊内でパリティブロックＰが配置されない唯一のドライブ（ＳＳＤ）が存在する。また本実施形態では、交換ＳＳＤ（ＳＳＤ−＃０）は、パリティブロックＰが配置されないドライブとして用いられる。このため本実施形態によれば、交換ＳＳＤ（ＳＳＤ−＃０）内のパリティブロックＰが配置されているストライプブロックを含むストライプグループを、再配置対象ストライプグループとして簡単に特定することができる。また、ドライブ交換後のブロック再配置を最小限に抑えることができる。更に最小限のブロック再配置で、パリティブロック配置位置及びデータブロック配置位置の規則性を維持することができる。これにより、パリティブロック配置位置及びデータブロック配置位置の管理を、メモリを大量に消費する配置位置管理テーブルを用いることなく実現することができる。
【０１３４】
更に本実施形態によれば、交換ＳＳＤ（ＳＳＤ−＃０）にはパリティブロックＰが配置されず、他のＳＳＤ−＃１乃至ＳＳＤ−＃６に管理ブロック単位で配置されるパリティブロックＰの数は、５乃至０から６乃至１に１増加される。これにより本実施形態によれば、例えば書き込み回数の降順にＳＳＤアレイ１１０−＊内のＳＳＤ−＃０乃至ＳＳＤ−＃６を並べた場合の順番を、パリティブロックＰの配置数の降順に当該ＳＳＤ−＃０乃至ＳＳＤ−＃６を並べた場合の順番に、ブロック再配置後においても一致させることができる。つまり、ＳＳＤ−＃０乃至ＳＳＤ−＃６の書き込み回数の大小関係を、当該ＳＳＤ−＃０乃至ＳＳＤ−＃６におけるパリティブロックＰの配置数の大小関係に一致させることができる。よって、ブロック再配置後にＳＳＤアレイ１１０−＊が継続的に運用された場合に、書き込み回数が最初に上限に達するＳＳＤ１１−＊を、パリティブロックＰが最も多く配置されているＳＳＤに維持することができる。これによりブロック再配置後においても、ＳＳＤアレイ１１０−＊内で、複数のＳＳＤ１１−＊の書き込み回数が同時期に上限に近づく状態が発生するのを防止できる。
【０１３５】
さて、パリティブロックＰ及びデータブロックＤ０乃至Ｄ６の再配置中も、前述したパリティブロック配置位置の算出と、データブロック配置位置の算出と、アクセス対象データブロックの特定と、アクセス対象パリティブロックの特定とに関する整合性が維持されなければならない。そのためブロック再配置部２５０は、パリティブロックＰ及びデータブロックＤ０乃至Ｄ６の再配置前に、管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）の値をＰＲブロック境界オフセット（再配置前管理ブロック境界オフセット）にコピーし、且つドライブメンバ番号を、ＰＲメンバ番号（再配置前メンバ番号）にコピーする。つまりブロック再配置部２５０は、ＰＲブロック境界オフセットをブロック再配置前の管理ブロック境界オフセットに、ＰＲメンバ番号をブロック再配置前のドライブメンバ番号に、それぞれ設定する。
【０１３６】
そしてブロック再配置部２５０は、Ｒストライプグループ番号（再配置中ストライプ番号、つまりブロック再配置中のストライプグループを示すストライプ番号）を、全再配置対象ストライプグループのストライプグループ番号の昇順に更新しながら、パリティブロックＰ及びデータブロックＤ０乃至Ｄ６を再配置する。つまりブロック再配置部２５０は、Ｒストライプグループ番号を、全再配置対象ストライプグループの先頭ストライプグループのストライプグループ番号から順に更新しながら、当該再配置対象ストライプグループ毎にブロック再配置を実行する。
【０１３７】
ブロック再配置判定部２６は、Ｒストライプグループ番号に基づいて、ＳＳＤアレイ１１０−＊内のブロック再配置が完了した領域（以下、再配置完了領域と称する）とブロック再配置が未完了の領域（以下、再配置未完了領域と称する）とを判別する。また、ブロック再配置判定部２６は、この判別の結果に基づいて、判別された領域毎に、図６、図７、図８Ａ及び８Ｂのフローチャートに従う処理で使用される一部のパラメータ値を切り替える。ここでは、前記一部のパラメータ値は、パリティブロック配置ドライブメンバ番号（ｐｄｒｖ＿ｎｏ）、データブロック配置ドライブメンバ番号（ｄｂｌｋ＿ｄｒｖ）及び管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）である。
【０１３８】
図１０は、パラメータ値切り替えの例をテーブル形式で示す。アクセス対象領域が再配置完了領域である場合、パリティブロック配置ドライブメンバ番号（ｐｄｒｖ＿ｎｏ）及びデータブロック配置ドライブメンバ番号（ｄｂｌｋ＿ｄｒｖ）にはアレイ管理テーブル２９に登録されているドライブメンバ番号が用いられ、管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）には、アレイ管理テーブル２８に登録されている管理ブロック境界オフセットが用いられる。一方、アクセス対象領域が再配置未完了領域である場合、パリティブロック配置ドライブメンバ番号（ｐｄｒｖ＿ｎｏ）及びデータブロック配置ドライブメンバ番号（ｄｂｌｋ＿ｄｒｖ）にはアレイ管理テーブル２９に登録されているＰＲメンバ番号（再配置前メンバ番号）が用いられ、管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）には、アレイ管理テーブル２８に登録されているＰＲブロック境界オフセットが用いられる。
【０１３９】
さて、ブロック再配置の実行中は、ＳＳＤアレイ１１０−＊内に再配置完了領域と再配置未完了領域とが発生する。そのためブロック再配置部２５０は、ブロック再配置を開始する前に、アレイ管理テーブル２８内のＰＲブロック境界オフセットのフィールド及びアレイ管理テーブル２９内の再配置前メンバ番号のフィールドに、ブロック再配置が開始される前におけるアレイ管理テーブル２８内の管理ブロック境界オフセットの値及びアレイ管理テーブル２９内のドライブメンバ番号を格納する。
【０１４０】
これにより、ホスト２からのアクセス要求で指定されるアクセス領域が再配置未完了領域であった場合も、ブロック再配置判定部２６は、アクセス対象データブロック及びアクセス対象パリティブロックを特定することができる。ここで、ＳＳＤアレイ１１０−＊内の再配置完了領域と再配置未完了領域との境界は、アレイ管理テーブル２８内のＲストライプグループ番号により特定される。
【０１４１】
ブロック再配置判定部２６は、Ｒストライプグループ番号で示されるストライプグループへのアクセスの場合、当該ストライプグループを対象にブロック再配置が実行されていると判断する。この場合、ブロック再配置判定部２６は、ブロック再配置が完了するまでホスト２から要求されたアクセスを保留するようにアレイアクセスコントローラ２７に通知する。
【０１４２】
ブロック再配置判定部２６は、アクセス対象データブロックが存在するストライプグループ（以下、対象ストライプグループと称する）のストライプグループ番号がＲストライプグループ番号よりも小さければ、当該対象ストライプグループは再配置完了領域であると判別する。これに対し、前記対象ストライプグループのストライプグループ番号がＲストライプグループ番号よりも大きければ、ブロック再配置判定部２６は、当該対象ストライプグループは再配置未完了領域であると判別する。ブロック特定部２４は、この判別結果に基づき、再配置完了領域内または再配置未完了領域内のアクセス対象データブロックを特定する。
【０１４３】
以下、本実施形態で適用される再配置完了／再配置未完了判定処理の典型的な手順について図１１のフローチャートを参照して説明する。再配置完了／再配置未完了判定処理は、対象ストライプグループが再配置完了領域であるか或いは再配置未完了領域であるかを判定するための処理である。
【０１４４】
まずブロック再配置判定部２６は、アクセス対象領域スタートアドレスｓｔａ＿ａｄｒ、アクセスデータサイズｄ＿ｓｚ、アレイ内ドライブ数ｄｒｖ＿ｎｕｍ、ストライプサイズｓｂ＿ｓｚ及びＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏをローカルメモリ１２６のワーク領域に設定する（ステップＳ３１）。このステップＳ３１においてブロック特定部２４は、総データブロックサイズｓｇ＿ｓｚ、アクセス対象先頭ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａ及びアクセス対象最終ストライプグループ番号ｓｇ＿ｎｏ＿ｅｎｄを、変数として定義する。これらの変数は、前記ワーク領域内に設定される。アクセス対象先頭ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａは、ホスト２により要求されたアクセス対象領域の始端が属するストライプグループのストライプグループ番号を示す。アクセス対象最終ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａは、前記アクセス対象領域の終端が属するストライプグループのストライプグループ番号を示す。
【０１４５】
次にブロック再配置判定部２６は、総データブロックサイズｓｇ＿ｓｚを算出する（ステップＳ３２）。このブロック再配置判定部２６による総データブロックサイズｓｇ＿ｓｚの算出は、ブロック特定部２４によって総データブロックサイズｓｇ＿ｓｚが算出される場合（ステップＳ２１）と同様に実行される。
【０１４６】
ステップＳ３２においてブロック再配置判定部２６は、アクセス対象先頭ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａを、アクセス対象領域スタートアドレスｓｔａ＿ａｄｒ及び総データブロックサイズｓｇ＿ｓｚに基づいて、次式
ｓｇ＿ｎｏ＿ｓｔａ＝ｓｔａ＿ａｄｒ／ｓｇ＿ｓｚ
により算出する。ステップＳ３２においてブロック再配置判定部２６は更に、アクセス対象最終ストライプグループ番号ｓｇ＿ｎｏ＿ｅｎｄを、アクセス対象領域スタートアドレスｓｔａ＿ａｄｒ、アクセスデータサイズｄ＿ｓｚ及び総データブロックサイズｓｇ＿ｓｚに基づいて、次式
ｓｇ＿ｎｏ＿ｅｎｄ＝（ｓｔａ＿ａｄｒ＋ｄ＿ｓｚ−１）／ｓｇ＿ｓｚ
により算出する。
【０１４７】
次にブロック再配置判定部２６は、アクセス対象先頭ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａまたはアクセス対象最終ストライプグループ番号ｓｇ＿ｎｏ＿ｅｎｄがＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏに等しいかを判定する（ステップＳ３３）。もし、ステップＳ３３の判定がＮｏであるなら、ブロック再配置判定部２６はステップＳ３４に進む。
【０１４８】
ステップＳ３４においてブロック再配置判定部２６は、アクセス対象先頭ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａがＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏよりも小さく、且つアクセス対象最終ストライプグループ番号ｓｇ＿ｎｏ＿ｅｎｄがＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏよりも大きいかを判定する。もし、ステップＳ３４の判定がＮｏであるなら、ブロック再配置判定部２６はステップＳ３５に進む。
【０１４９】
ステップＳ３５においてブロック再配置判定部２６は、アクセス対象先頭ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａがＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏよりも小さいかを判定する。ここで、ステップＳ３５の判定がＹｅｓであるものとする。つまりアクセス対象先頭ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａがＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏよりも小さく、且つアクセス対象最終ストライプグループ番号ｓｇ＿ｎｏ＿ｅｎｄがＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏよりも大きくないものとする。この場合、ブロック再配置判定部２６は、アクセス対象領域は再配置完了領域であると判定する。するとブロック特定部２４は、ホスト２からのアクセス要求を再配置完了領域へのアクセスとして処理し、当該再配置完了領域内のアクセス対象データブロックを特定する（ステップＳ３６）。これによりアレイアクセスコントローラ２７は、特定されたアクセス対象データブロックにアクセスする。
【０１５０】
これに対し、ステップＳ３５の判定がＮｏであるものとする。つまりアクセス対象先頭ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａがＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏよりも大きいものとする。この場合、ブロック再配置判定部２６は、アクセス対象領域は再配置未完了領域であると判定する。するとブロック特定部２４は、ホスト２からのアクセス要求を再配置未完了領域へのアクセスとして処理し、当該再配置未完了領域内のアクセス対象データブロックを特定する（ステップＳ３７）。これによりアレイアクセスコントローラ２７は、特定されたアクセス対象データブロックにアクセスする。
【０１５１】
一方、ステップＳ３３の判定がＹｅｓであるものとする。つまりアクセス対象先頭ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａまたはアクセス対象最終ストライプグループ番号ｓｇ＿ｎｏ＿ｅｎｄがＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏに等しいものとする。この場合、ブロック再配置判定部２６はアクセス対象領域にブロック再配置中の領域が含まれていると判断して、ステップＳ３８に進む。
【０１５２】
次に、ステップＳ３４の判定がＹｅｓであるものとする。つまり、アクセス対象先頭ストライプグループ番号ｓｇ＿ｎｏ＿ｓｔａがＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏよりも小さく、且つアクセス対象最終ストライプグループ番号ｓｇ＿ｎｏ＿ｅｎｄがＲストライプグループ番号ｒｅａｌｏｃ＿ｎｏよりも大きいものとする。この場合も、ブロック再配置判定部２６はアクセス対象領域にブロック再配置中の領域が含まれていると判断して、ステップＳ３８に進む。
【０１５３】
ステップＳ３８においてブロック再配置判定部２６は、アクセス対象領域にブロック再配置中の領域が含まれていることから、ブロック再配置が完了するまでホスト２から要求されたアクセスを保留するようにアレイアクセスコントローラ２７に通知する。そしてブロック再配置判定部２６はステップＳ３１に戻る。
【０１５４】
本実施形態によれば、ＳＳＤアレイ１１０−＊におけるパリティブロックＰ及びデータブロックＤ０乃至Ｄ６の配置位置が、複数の連続するストライプグループから構成される管理ブロックを単位に、予め定められたパリティ配置パターン（配置規則）に基づいて管理される。よって本実施形態によれば、ＳＳＤアレイ１１０−＊におけるパリティブロックＰ及びデータブロックＤ０乃至Ｄ６の配置位置の管理にマップテーブルを用いる必要がなく、当該管理を少量のメモリ容量で実現できる。
【０１５５】
また本実施形態によれば、ＳＳＤアレイ１１０−＊を構成する複数のＳＳＤ（より詳細には、ＳＳＤ−＃０乃至ＳＳＤ−＃６）のうち書き込み回数が上限に達したＳＳＤが交換される場合にのみ、ブロック再配置が実行される。このため、ブロック再配置に起因する各ＳＳＤの書き込み回数の増加を最小限に抑えることができる。
【０１５６】
［変形例］
次に前記実施形態の変形例について説明する。この変形例の特徴は、ホットスペアＳＳＤを利用して自動的なＳＳＤ交換を実現することにある。まず、前記実施形態においてブロック再配置部２５０によって実行されるブロック再配置の概要について以下に述べる。前述したようにブロック再配置部２５０はブロック再配置において、管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）を１増加する。またブロック再配置部２５０は、交換ＳＳＤ（ＳＳＤ−＃０）のドライブメンバ番号を６に設定することで、当該交換ＳＳＤ（ＳＳＤ−＃０）をパリティブロックＰが配置されないドライブとして定義する。またブロック再配置部２５０は、他のＳＳＤ（ＳＳＤ−＃１乃至ＳＳＤ−＃６）のドライブメンバ番号を１増加する。そしてブロック再配置部２５０は、交換ＳＳＤ（ＳＳＤ−＃０）内のパリティブロックＰが配置されているストライプブロックを含むストライプグループ（再配置対象ストライプグループ）についてのみ、更新後の管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）及びドライブメンバ番号に基づいて、パリティブロックＰ及びデータブロックＤ０乃至Ｄ６を再配置する。
【０１５７】
ブロック再配置部２５０は、ブロック再配置が開始されるストライプグループのストライプグループ番号を、Ｒストライプ番号（パリティ再配置中ストライプグループ番号）ｒｅｌｏｃ＿ｎｏとして登録する。そしてブロック再配置部２５０は、現在の再配置対象ブロック（パリティブロックＰまたはデータブロックＤｊ）が存在するＳＳＤ１１−＊のドライブスロット番号を、Ｒドライブスロット番号（パリティ再配置中ドライブスロット番号）として登録しながらブロック再配置を実行する。
【０１５８】
前記実施形態では、ドライブスロット＃７にホットスペアＳＳＤ（以下、ＳＳＤ−ＳＰと称する）が接続されている。この状態で、例えばＳＳＤ−＃０を交換する場合、ドライブ交換コントローラ２５は、ＳＳＤ−＃０の全データをＳＳＤ−ＳＰ（つまりＳＳＤアレイ１１０−＊に割り当てられたホットスペアＳＳＤ）に退避する。この退避の後に、ＳＳＤ−＃０が他のＳＳＤに交換されると、ドライブ交換コントローラ２５は、ＳＳＤ−ＳＰのデータを当該他のＳＳＤ（つまり交換ＳＳＤ）に書き直す。するとブロック再配置部２５０は、上述のブロック再配置を実行する。なお、ブロック再配置部２５０がドライブ交換コントローラ２５から独立に備えられていても構わない。
【０１５９】
図１２は、前記実施形態で適用されるブロック再配置について、図５に示されるように配置されていたパリティブロックＰ及びデータブロックＤ０乃至Ｄ５の再配置中の状態を例に、アレイ管理テーブル２８及び２９と関連付けて示す。このように図１２は、ブロック再配置中の状態を示す点で、ブロック再配置が完了した後の状態を示す図９とは相違する。また図１２は、図９では省略されていたＳＳＤ−ＳＰの状態も示す。
【０１６０】
図１２の例では、ストライプグループ番号が２８のストライプグループを対象にブロック再配置が実行されているものとする。つまりストライプグループ番号が２７のストライプグループまでブロック再配置が完了しているものとする。ＳＳＤ−ＳＰのドライブメンバ番号及びＰＲメンバ番号（再配置前メンバ番号）は、交換ＳＳＤ（ＳＳＤ−＃０）のそれと同一である。
【０１６１】
図１２から明らかなように、ＳＳＤ−ＳＰのデータを含めるならば、ＳＳＤアレイ１１０−＊には、同一ストライプグループ上に１組のみ格納データが同じストライプブロックが存在する。つまり、交換ＳＳＤ（ＳＳＤ−＃０）内のストライプブロック及びＳＳＤ−ＳＰ内のストライプブロックの組が存在する。ブロック再配置部２５０は、それを利用してブロック再配置を実行する。
【０１６２】
ここで、ブロック再配置中にストレージ装置１の電源が遮断されたために、ブロック再配置が中断されたものとする。その後、電源が復旧してストレージ装置１が再起動されたものとする。この場合、ブロック再配置部２５０は、ブロック再配置が中断された状態からブロック再配置を再開する。ブロック再配置部２５０は、このブロック再配置を確実に再開できるように、少なくともＲストライプグループ番号及びＲドライブスロット番号を、フラッシュメモリ、或いはハードディスクドライブのような不揮発性ストレージに保存しながらブロック再配置を実行する。
【０１６３】
さて、本変形例においてドライブ交換コントローラ２５は、ＳＳＤ−ＳＰを交換ＳＳＤとしてＳＳＤアレイ１１０−＊に組み込むことで、自動的なＳＳＤ交換を実現する。以下、この自動的なＳＳＤ交換について説明する。
【０１６４】
今、前記実施形態と同様に、ＳＳＤ−＃０の書き込み回数が上限に達したものとする。この場合、ドライブ交換コントローラ２５は、ＳＳＤ−ＳＰをＳＳＤアレイ１１０−＊に割り当てて、ＳＳＤ−＃０の全データ当該ＳＳＤ−ＳＰにコピー（退避）する。そしてドライブ交換コントローラ２５は、ＳＳＤ−＃０（つまり、書き込み回数が上限に達したＳＳＤ−＃０）をＳＳＤアレイ１１０−＊から除外し、且つＳＳＤ−ＳＰを交換ＳＳＤ（新たなＳＳＤ−＃０）と見なす。この状態でブロック再配置部２５０は、前記実施形態と同様にブロック再配置を実行する。前記実施形態と相違するのは、交換ＳＳＤ（ＳＳＤ−＃０）が、ドライブスロット＃７に接続されているＳＳＤ−ＳＰ（以下、第１のＳＳＤ−ＳＰと称する）である点である。
【０１６５】
さてブロック再配置の開始に際し、ブロック再配置部２５０は、書き込み回数が上限に達したＳＳＤ−＃０のドライブメンバ番号を０から６に変更する。またブロック再配置部２５０は、交換ＳＳＤと見なされる第１のＳＳＤ−ＳＰのドライブメンバ番号を６に設定する。ブロック再配置部２５０はまた、他のＳＳＤ−＃１乃至ＳＳＤ−＃６のドライブメンバ番号１乃至６を１減少する。図１２には、変更後のドライブメンバ番号が記述されている。
【０１６６】
ドライブ交換コントローラ２５は、ブロック再配置の完了後、書き込み回数が上限に達したＳＳＤ−＃０（つまりＳＳＤ１１−０）を新たにホットスペアＳＳＤ（ＳＳＤ−ＳＰ）と定義し直す。具体的には、ＳＳＤ−＃０（つまりＳＳＤ１１−０）の属性を、ＳＳＤアレイ１１０−０に用いられるＳＳＤ（ＳＳＤ−＃０）から、ホットスペアＳＳＤに変更する。この属性変更後のＳＳＤ−＃０を、ＳＳＤ−ＳＰ（より詳細には、第２のＳＳＤ−ＳＰ）と表記する。ドライブ交換コントローラ２５は、前記第２のＳＳＤ−ＳＰを、書き込み回数の上限に達したことに起因する故障ドライブとして扱う。これによりドライブ交換コントローラ２５は、前記第２のＳＳＤ−ＳＰ（つまりＳＳＤ１１−０）をＳＳＤアレイ１１０−＊から分離する。
【０１６７】
またドライブ交換コントローラ２５は、ブロック再配置に際してＳＳＤアレイ１１０−＊に割り当てられた前記第１のＳＳＤ−ＳＰを、書き込み回数の上限に達したＳＳＤ−＃０（ＳＳＤ１１−０）に代えて、ＳＳＤアレイ１１０−＊に用いられるＳＳＤとして定義する。具体的には、前記第１のＳＳＤ−ＳＰの属性を、ＳＳＤ−ＳＰ（ホットスペアＳＳＤ）からＳＳＤアレイ１１０−＊に用いられるＳＳＤに変更する。この属性変更後の前記第１のＳＳＤ−ＳＰを、便宜的にＳＳＤ−＃０と表記する。
【０１６８】
本変形例において、ＳＳＤ−＃０（つまり書き込み回数の上限に達したＳＳＤ−＃０）及びＳＳＤ−ＳＰの属性が上述のように変更される。そこでブロック再配置部２５０は、属性がＳＳＤ−ＳＰからＳＳＤ−＃０に変更され、且つドライブメンバ番号が６に設定されたＳＳＤと、ドライブメンバ番号が１乃至６から０乃至５に更新されたドライブＳＳＤ−＃１乃至ＳＳＤ−＃６を対象とするブロック再配置を行う。本変形例によれば、前記実施形態と異なり、書き込み回数の上限に達したＳＳＤ−＃０を、ブロック再配置のために他のＳＳＤ（交換ＳＳＤ）に交換する必要がない。つまり本変形例によれば、待機状態にあるＳＳＤ−ＳＰを用いて自動的なＳＳＤ交換を実現できる。
【０１６９】
図１３は、本変形例で適用されるブロック再配置について、図５に示されるように配置されていたパリティブロックＰ及びデータブロックＤ０乃至Ｄ５の再配置が全て終了した後の状態を、アレイ管理テーブル２８及び２９と関連付けて示す。但し、管理ブロック境界オフセット（ｂｄｒ＿ｏｆｓ）、パリティブロックＰ及びデータブロックＤ０乃至Ｄ６については、再配置前の状態も示されている。
【０１７０】
以上説明した少なくとも１つの実施形態によれば、アレイにおける誤り訂正符号ブロック配置位置を簡単に管理することができる、ストレージ装置、ストレージコントローラ及び方法を提供できる。
【０１７１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【図１】
2014041638.tif 000003
【図２】
2014041638.tif 000004
【図３】
2014041638.tif 000005
【図４】
2014041638.tif 000006
【図５】
2014041638.tif 000007
【図６】
2014041638.tif 000008
【図７】
2014041638.tif 000009
【図８Ａ】
2014041638.tif 000010
【図８Ｂ】
2014041638.tif 000011
【図９】
2014041638.tif 000012
【図１０】
2014041638.tif 000013
【図１１】
2014041638.tif 000014
【図１２】
2014041638.tif 000015
【図１３】
2014041638.tif 000016
【国際調査報告】
2014041638.tif 000017
2014041638.tif 000018
2014041638.tif 000019
2014041638.tif 000020