(57)【要約】  ストレージ装置は、複数のデータ消去単位である物理ブロックをそれぞれに有する複数のフラッシュメモリチップと、複数の物理ブロックの１つ以上に論理記憶領域を対応付けて論理記憶領域を提供するフラッシュコントローラと、をそれぞれに有する複数のフラッシュメモリデバイスと、それぞれが、複数のフラッシュメモリデバイスのそれぞれによって提供される論理記憶領域の一部を含む複数の仮想ドライブを管理し、複数の仮想ドライブをＲＡＩＤグループとして制御するＲＡＩＤコントローラと、を有する。
2015114744.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ消去単位である物理ブロックをそれぞれに有する複数のフラッシュメモリチップと、前記複数の物理ブロックの１つ以上に論理記憶領域を対応付けて論理記憶領域を提供するフラッシュコントローラと、をそれぞれに有する複数のフラッシュメモリデバイスと、  それぞれが、前記複数のフラッシュメモリデバイスのそれぞれによって提供される前記論理記憶領域の一部を含む複数の仮想ドライブを管理し、前記複数の仮想ドライブをＲＡＩＤグループとして制御するＲＡＩＤコントローラと、
を有するストレージ装置。
【請求項２】
前記複数の仮想ドライブのうち少なくとも一つは、前記複数のフラッシュメモリデバイスのうちの２つ以上によって提供される前記論理記憶領域の一部を含む
請求項１記載のストレージ装置。
【請求項３】
前記第１フラッシュメモリデバイスの第１フラッシュコントローラは、前記複数のブロックのうち１つ以上のブロックの障害を検出した場合、前記ＲＡＩＤコントローラにエラー情報を通知し、
前記ＲＡＩＤコントローラは、前記エラー情報を受信すると、前記故障したブロックに対応付けられている第１論理記憶領域を特定し、前記第１論理記憶領域に対応付けられている第１仮想ドライブを特定し、前記第１仮想ドライブと前記第１論理記憶領域との対応関係を、前記第１仮想ドライブと前記第１フラッシュメモリデバイスとは異なる第２フラッシュメモリデバイスの第２論理記憶領域との対応関係に変更する
請求項２記載のストレージ装置。
【請求項４】
前記ＲＡＩＤコントローラは、前記第１論理記憶領域のデータを、前記データに関連するデータとパリティとに基づいて復元し、前記第２論理記憶領域を指定して前記第２フラッシュドライブにライトする
請求項３記載のストレージ装置。
【請求項５】
前記障害は、あるブロックの消去回数が所定値以上の状態またはあるブロックを含むフラッシュメモリチップに障害が発生している状態である
請求項４記載のストレージ装置。
【請求項６】
前記第１フラッシュコントローラは、前記ＲＡＩＤコントローラからアクセス要求を受信し、前記アクセス要求の対象となるブロックに障害が発生している場合に前記ＲＡＩＤコントローラに前記エラー情報を通知する
請求項５記載のストレージ装置。
【請求項７】
前記第１フラッシュコントローラは、前記複数のフラッシュメモリチップの少なくとも１つに障害が発生したことを検出した場合、前記ＲＡＩＤコントローラに前記エラー情報を通知する
請求項６記載のストレージ装置。
【請求項８】
前記ＲＡＩＤコントローラは、前記エラー情報を受信した場合、前記複数のフラッシュドライブの１つから前記複数のブロックのうち障害が発生していないデータを格納可能な状態の物理ブロックの数である未使用ブロック数を取得し、前記未使用ブロック数に応じて前記第１仮想ドライブと対応付ける論理記憶領域を含むフラッシュメモリデバイスを選択する
請求項７記載のストレージ装置。
【請求項９】
前記ＲＡＩＤコントローラは、前記複数のフラッシュメモリデバイスのうちの第２フラッシュメモリデバイスから前記未使用ブロック数を取得し、前記第２フラッシュメモリデバイスの前記未使用ブロックの数が第１の値より小さい場合、前記第２フラッシュメモリデバイスが提供する論理記憶領域と第２仮想ドライブとの対応関係を、前記複数のフラッシュメモリデバイスのうち前記未使用ブロック数が第２の値より大きい第３フラッシュメモリデバイスが提供する論理記憶領域と第２仮想ドライブとの対応関係に変更する
請求項２記載のストレージ装置。
【請求項１０】
前記ＲＡＩＤコントローラは、前記複数の仮想ドライブから構成されるＲＡＩＤグループに基づく論理ユニットをホスト計算機に提供する
請求項２記載のストレージ装置。
【請求項１１】
前記ＲＡＩＤコントローラは、ホスト計算機に仮想論理ユニットを提供し、前記複数の仮想ドライブから構成されるＲＡＩＤグループの記憶領域を複数のチャンクに分割し、前記ホスト計算機から前記仮想論理ユニットへのライト要求を受信すると、前記チャンクを前記仮想論理ユニットに割り当てる
請求項２記載のストレージ装置。
【請求項１２】
複数のデータ消去単位である物理ブロックをそれぞれに有する複数のフラッシュメモリチップと、前記複数の物理ブロックの１つ以上に論理記憶領域を対応付け、前記複数のブロックのうち障害が発生していないデータを格納可能な状態の物理ブロックの数である未使用ブロック数を管理するフラッシュコントローラと、をそれぞれに有する複数のフラッシュメモリデバイスと、
それぞれが仮想記憶領域を有する複数の仮想ドライブを管理し、
前記複数の仮想ドライブをＲＡＩＤグループとして制御し、
前記複数のフラッシュメモリデバイスのそれぞれのフラッシュコントローラから、前記未使用ブロック数を取得し、
前記未使用ブロック数に応じて、前記複数のフラッシュメモリデバイスそれぞれの前記論理記憶領域のいずれかと、前記複数の仮想ドライブのうちの１つの前記仮想記憶領域と、の対応関係を決定する、
ＲＡＩＤコントローラと、
を有するストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に関する。
【背景技術】
【０００２】
ストレージ装置の高性能化を目的として、高速にアクセス可能なフラッシュメモリを記憶媒体とするフラッシュメモリデバイス（例えば、Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｅｖｉｃｅ：以下、ＳＳＤ）が用いられている。フラッシュメモリデバイスは、複数のフラッシュメモリチップを備え、各フラッシュメモリチップは複数の物理ブロックを備える。物理ブロックは、データを消去する単位である。フラッシュメモリの特性上、物理ブロックに消去処理を実行できる回数には限界があり、消去回数が限界を超えるとそのブロックはデータを格納することができなくなる。また、フラッシュメモリチップに物理的な障害が発生した場合も、データを格納することができなくなる。近年の半導体微細加工技術の進歩により、高密度に記録可能なフラッシュメモリチップが製造されているが、障害の発生率は増加し、物理ブロックの消去可能な回数は減少する傾向にある。【０００３】
このようなフラッシュメモリデバイスを備えるストレージ装置においてデータ格納の信頼性・可用性を向上させる技術として、複数のフラッシュメモリデバイスを利用する技術がある。特許文献１には、フラッシュメモリデバイスの物理ブロックに障害が検出された際、障害ブロックを含むフラッシュメモリデバイスのデータをスペアのフラッシュメモリデバイスへコピーし、フラッシュメモリデバイスを置き換える技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許８０４１９９１号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１の技術では、障害が検出されたフラッシュメモリデバイスに障害が発生していない使用可能な物理ブロックが残っていても、フラッシュメモリデバイス全体を置き換える必要がある。そのため、使用可能な物理ブロックが残っているにも関わらず、それらを有効利用できない点が課題である。
【課題を解決するための手段】
【０００６】
ストレージ装置は、複数のデータ消去単位である物理ブロックをそれぞれに有する複数のフラッシュメモリチップと、複数の物理ブロックの１つ以上に論理記憶領域を対応付けて論理記憶領域を提供するフラッシュコントローラと、をそれぞれに有する複数のフラッシュメモリデバイスと、それぞれが、複数のフラッシュメモリデバイスのそれぞれによって提供される論理記憶領域の一部を含む複数の仮想ドライブを管理し、複数の仮想ドライブをＲＡＩＤグループとして制御するＲＡＩＤコントローラと、を有する。
【発明の効果】
【０００７】
本発明には、フラッシュメモリデバイスの一つ以上のブロックに障害が発生した場合であっても、障害が発生していないデータ格納可能な複数のブロックを継続して利用できるという効果がある。
【図面の簡単な説明】
【０００８】
【図１】実施例１の概要を示す図である。
【図２】実施例１におけるストレージ装置の構成を示すブロック図である。
【図３】実施例１においてフラッシュメモリデバイスが内部的に記憶領域を管理する方法を概念的に示す図である。
【図４】実施例１においてＲＡＩＤコントローラが内部的に記憶領域を管理する方法を概念的に示す図である。
【図５】実施例１における仮想ドライブ管理テーブルの構成例を示す図である。
【図６】実施例１におけるＲＡＩＤグループ管理テーブルの構成例を示す図である。
【図７】実施例１におけるホストリード処理のフローチャートである。
【図８】実施例１におけるホストライト処理のフローチャートである。
【図９】実施例１におけるデステージ処理のフローチャートである。
【図１０】実施例１における未使用ブロック平準化処理のフローチャートである。
【図１１】実施例１における新格納先ＦＭＤ決定処理のフローチャートである。
【図１２】実施例２の概要を示す図である。
【図１３】実施例２におけるプール管理テーブルの構成例を示す図である。
【図１４】実施例２における仮想論理ユニット管理テーブルの構成例を示す図である。
【発明を実施するための形態】
【実施例１】
【０００９】
図１は本実施例の概要を示す図である。ストレージ装置４は、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）３を介してホスト計算機２と接続されている。また、ストレージ装置４は、管理計算機２０と接続されている。【００１０】
ストレージ装置４は、１又は複数のＦＭＤ（フラッシュメモリデバイス）６を備えている。各ＦＭＤ６はフラッシュメモリを記憶媒体とするデバイスである。【００１１】
ストレージ装置４は、ＦＭＤ６の上位記憶階層として仮想ドライブ９を設定する。１又は複数のＦＭＤ６が提供する記憶領域上に、１又は複数の仮想ドライブ９が設定される。仮想ドライブ９には複数の記憶領域が含まれ、各記憶領域は１つ以上のＦＭＤ６の記憶領域にマッピングされている。仮想ドライブ９の記憶領域からＦＭＤ６の記憶領域へのマッピングは、必要に応じて変更される。【００１２】
ストレージ装置は、仮想ドライブ９の上位記憶階層としてＲＡＩＤグループ１０を設定する。１又は複数の仮想ドライブ９が提供する記憶領域上に、１又は複数のＲＡＩＤグループ１０が設定される。各ＲＡＩＤグループ１０へ格納されたデータは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）処理によりパリティなどの冗長データが付加されて仮想ドライブ９へ格納される。【００１３】
ストレージ装置４は、ＲＡＩＤグループ１０の上位記憶階層として、ＲＡＩＤグループが有する記憶領域の全部または一部に対して複数の論理ユニット１１を設定する。論理ユニット１１はホスト計算機２に提供され、ホスト計算機２は、論理ユニット１１に対して読み書きを行う。【００１４】
本実施例により、フラッシュメモリデバイスの一部の物理記憶領域が故障した場合に、仮想ドライブ９の記憶領域とＦＭＤ６の記憶領域の対応関係（マッピング）の変更を行って故障していない領域を使い続けることができる。その結果、フラッシュメモリデバイスの寿命が長くなる。つまり、フラッシュメモリデバイスを頻繁に交換する必要がなくなり、新たなフラッシュメモリデバイスの購入や、保守及び交換のコストが低減される。特に、オンライントランザクション処理システムにおいては、ユーザにフラッシュメモリデバイスの高いアクセス性能を低いコストで提供可能となる。【００１５】
管理計算機２０は、表示装置及び入力装置を有する計算機である。管理計算機２０は、管理者による操作に従って、ストレージ装置４に対して設定や命令を送信したり、ストレージ装置４から情報を取得したりする。本実施例では、管理計算機２０は、マッピング変更先のフラッシュメモリデバイスが存在しない場合に、警告を示す情報をストレージ装置４から受信する。【００１６】
図２は、ストレージ装置４の構成を示すブロック図である。ストレージ装置４は、複数のＦＭＤ６と、ＦＭＤ６に対するデータの入出力を制御するＲＡＩＤコントローラ５を備えている。【００１７】
各ＦＭＤ６は、複数のＦＭチップ８とフラッシュコントローラ７を備えている。ＦＭチップ８は、不揮発性の半導体メモリである。フラッシュコントローラ７は、ＣＰＵ７１とメモリ７２を備えており、ＦＭチップ８に対するデータの入出力を制御する。【００１８】
ＲＡＩＤコントローラ５は、ＣＰＵ５１、キャッシュメモリ５２、メモリ５３、複数のポート５４及び不揮発メモリ５５を備えている。ＣＰＵ５１は、ＲＡＩＤコントローラ５全体の動作制御を司るプロセッサであり、不揮発メモリ５５に格納された各種プログラムをメモリ５３に読み出して実行する。メモリ５３は、ＣＰＵ５１により不揮発メモリ５５から読み出された各種プログラムを記憶するために用いられるほか、ＣＰＵ５１のワークメモリとしても用いられる。キャッシュメモリ５２は、主としてホスト計算機２とＦＭＤ６との間で授受されるデータを一時的に格納するために用いられる。各ポート５４は、ストレージ装置４をＳＡＮ３に接続するためのアダプタである。【００１９】
図３は、ＦＭＤ６が内部的に記憶領域を管理する方法を概念的に示す。ＦＭＤ６の各ＦＭチップ８には、複数の物理ブロック８１が含まれる。各物理ブロック８１は、固定サイズの記憶領域であり、そのサイズは例えば２メガバイトである。フラッシュメモリにおいて、物理ブロックはデータを一括消去する単位の記憶領域である。フラッシュメモリにおけるデータの書き換えは、物理ブロックごとのデータの消去を伴う。フラッシュメモリの特性上、物理ブロックのデータの消去を実行すると、その物理ブロックが劣化する。物理ブロックが劣化すると格納されたデータのエラー発生率が高まり、消去を繰り返すとそのブロックにはデータを格納することができなくなる。このように、物理ブロックの消去回数には限界がある。なお、消去回数の代わりにブロックへのデータの書込み回数を管理してもよい。【００２０】
また、各物理ブロックには、複数の物理ページが含まれる。各物理ページは、固定サイズの記憶領域であり、そのサイズは例えば８キロバイトである。フラッシュメモリにおいて、物理ページはデータの書込み及び読み出しをする単位の記憶領域である。フラッシュメモリではデータを上書きすることができないという特性があるため、ある物理ページに格納されたデータを更新する場合は、別の物理ページにデータが書込まれる。このため、ＦＭＤ６内には、更新データを書込むための余剰領域（以下、更新領域）が設けられている。【００２１】
ＦＭＤ６のフラッシュコントローラ７は、外部のＲＡＩＤコントローラ５に論理記憶空間を提供する。また、フラッシュコントローラ７は、論理記憶空間を所定のサイズ毎に区切って、複数の論理ブロックを管理する。本実施例では、フラッシュコントローラ７は、論理記憶空間を論理ブロック単位で外部に提供するものとする。しかし、フラッシュコントローラ７が外部に提供する論理記憶空間の管理単位は、内部での管理単位である論理ブロック単位とは異なっていてもよい。例えば、フラッシュコントローラ７は、ＲＡＩＤコントローラ５に５１２バイト単位で論理記憶空間を提供してもよい。この場合、ＲＡＩＤコントローラ５は、５１２バイト単位でアドレスを指定してＦＭＤ６にアクセスする。そして、フラッシュコントローラ７は、ＲＡＩＤコントローラ５が指定するアドレスに対応する論理ブロックを特定し、論理ブロックにマッピングされた物理ブロックにアクセスする。【００２２】
物理ブロック８１の状態には、使用中、未使用、使用中止のものがそれぞれある。ＦＭＤ６は、使用中の物理ブロック８１を、その物理ブロック８１にマッピングされている論理ブロック８２を通して外部に提供する。具体的には、ＦＭＤ６は、ＲＡＩＤコントローラ５からリード要求又はライト要求などの入出力要求を受信すると、入出力要求に含まれるパラメタから入出力の対象となる論理ブロック８２を求め、その論理ブロック８２がマッピングされている物理ブロック８１に対してデータの入出力を行う。論理ブロック８２と物理ブロック８１のマッピングを、メモリ７２内のテーブルにより管理する。本実施例では、ブロック単位でのマッピングを説明するが、ページ単位で論理ページと物理ページのマッピングを行ってもよい。なお、未使用のブロックとはデータが消去された状態であり、障害等が発生していない物理ブロックのことであり、更新領域として管理される。つまり、更新領域は、未使用ブロックの集合である。また、使用中止のブロックとは、消去回数が閾値を超えたブロックや、ＦＭチップの物理障害等でデータを格納不能となったブロックである。【００２３】
ＦＭＤ６のメモリ７２は、使用中、未使用、使用中止それぞれの物理ブロック８１の数を記憶している。ＣＰＵ７１は、物理ブロック８１の状態が変化した場合、メモリ７２に記憶されたそれぞれの状態の物理ブロック８１の数を更新する。【００２４】
ＦＭＤ６は、必要に応じて論理ブロック８２から物理ブロック８１へのマッピングを変更する。例えば、物理ブロック８１が予め決められた書込み回数の上限に達した場合、ＦＭＤ６は、その物理ブロック８１のデータを未使用の物理ブロック８１にコピーし、元の物理ブロック８１にマッピングされていた論理ブロック８２のマッピング先をコピー先の物理ブロック８１に変更する。その際、ＦＭＤ６は、元の物理ブロック８１を使用中から使用中止に変更し、コピー先の物理ブロック８１を未使用から使用中に変更する。【００２５】
図４は、ＲＡＩＤコントローラ５が内部的に記憶領域を管理する方法を概念的に示す。ＲＡＩＤコントローラ５は、後述するメモリ５３内のテーブルにより、１又は複数のＦＭＤ６の記憶領域を１又は複数の仮想ドライブ９として管理する。仮想ドライブ９には、複数の仮想ブロック９１が含まれる。本実施例では、各仮想ブロック９１は、固定サイズの記憶領域であり、そのサイズは物理ブロック８１のサイズと同じであるとする。ただし、各物理ブロック内の１つ以上の物理ページが更新領域として管理されている場合、更新領域を除いたサイズを仮想ブロックのサイズとしてもよい。ＲＡＩＤコントローラ５は、後述するメモリ５３内のテーブルにより、各仮想ブロック９１をいずれかの論理ブロック８２へマッピングする。一つの仮想ドライブ９の複数の仮想ブロック９１が、それぞれ異なるＦＭＤ６の論理ブロック８２へマッピングされてもよい。【００２６】
図５は、ＲＡＩＤコントローラ５が、仮想ドライブ９を管理するためにメモリ５３内に保持するテーブルである仮想ドライブ管理テーブル１１０の構成例を示す。ＲＡＩＤコントローラ５は、各仮想ドライブ９について仮想ドライブ管理テーブル１１０を保持する。仮想ドライブ管理テーブル１１０には、各仮想ブロック９１について、仮想ブロック＃１１１、ＦＭＤ＃１１２、論理ブロック＃１１３が登録される。【００２７】
仮想ブロック＃１１１は、仮想ドライブ９内で仮想ブロック９１を一意に特定するために利用される番号である。【００２８】
ＦＭＤ＃１１２は、仮想ブロック＃１１１によって特定される仮想ブロック９１がマッピングされている論理ブロック８２を含むＦＭＤ６を、ストレージ装置４内で一意に特定するために利用される番号である。【００２９】
論理ブロック＃１１３は、仮想ブロック＃１１１によって特定される仮想ブロック９１がマッピングされている論理ブロック８２を、ＦＭＤ６内で一意に特定するために利用される番号である。論理ブロック＃１１３は、論理ブロック８２の番号の代わりにＦＭＤ６が提供する論理アドレス空間内の論理ブロックに対応する論理アドレスの範囲が登録されてもよい。【００３０】
図６は、ＲＡＩＤコントローラ５がデータの信頼性・可用性を向上させるための処理であるＲＡＩＤ処理を行うために用いるテーブルであるＲＡＩＤグループ管理テーブル１００の構成例を示す。ＲＡＩＤグループ管理テーブル１００には、ＲＡＩＤグループ＃１０１、ＲＡＩＤレベル１０２、仮想ドライブ＃１０３、ＦＭＤ＃１０４が登録される。【００３１】
ＲＡＩＤグループ＃１０１は、ストレージ装置４内でＲＡＩＤグループ１０を一意に特定するために利用される番号である。【００３２】
ＲＡＩＤレベル１０２は、ＲＡＩＤ処理による冗長データの付加方法を識別するために利用される値である。ＲＡＩＤレベル１０２には、例えば、「ＲＡＩＤ−１」、「ＲＡＩＤ−５」、「ＲＡＩＤ−６」などがある。ＲＡＩＤレベル１０２が「ＲＡＩＤ−１」の場合、ＲＡＩＤコントローラ５は、ＲＡＩＤグループ１０へ格納されたデータを、２つの仮想ドライブ９へミラーリングする。ＲＡＩＤレベル１０２が「ＲＡＩＤ−５」の場合、ＲＡＩＤコントローラ５は、ＲＡＩＤグループへ格納された複数のデータに対して１つのパリティを計算し、各データとそれらに関連するパリティをそれぞれ異なる仮想ドライブ９へ格納する。本実施例では、複数のデータとその複数のデータに基づいて計算されたパリティをあわせてストライプと呼ぶ。ＲＡＩＤレベル１０２が「ＲＡＩＤ−６」の場合、ＲＡＩＤコントローラ５は、ＲＡＩＤグループ１０へ格納された複数のデータに対して２つのパリティを計算し、各データとそれらに関連する２つのパリティをそれぞれ異なる仮想ドライブ９へ格納する。【００３３】
仮想ドライブ＃１０３は、ＲＡＩＤグループ＃１０１によって特定されるＲＡＩＤグループ１０を構成する仮想ドライブ９を、ストレージ装置４内で特定するために利用される番号である。１つのＲＡＩＤグループ＃１０１に対して登録される仮想ドライブ＃１０３の個数は、そのＲＡＩＤグループ＃１０１に対して登録されているＲＡＩＤレベル１０２によって異なる。例えば、ＲＡＩＤレベル１０２が「ＲＡＩＤ−１」の場合、偶数個の仮想ドライブ＃１０３が登録される。ＲＡＩＤレベル１０２が「ＲＡＩＤ−５」の場合、３個以上の仮想ドライブ＃１０３が登録される。ＲＡＩＤレベル１０２が「ＲＡＩＤ−６」の場合、４個以上の仮想ドライブ＃１０３が登録される。【００３４】
ＦＭＤ＃１０４は、仮想ドライブ＃１０３によって特定される仮想ドライブ９の仮想ブロック９１がマッピングされ得る論理ブロック８２を含むＦＭＤ６を、ストレージ装置４内で特定するために利用される番号である。１つのＲＡＩＤグループ＃１０１に対して仮想ドライブ＃１０３より多くのＦＭＤ＃１０４が登録されてもよい。【００３５】
図７は、ＲＡＩＤコントローラ５が、ホスト計算機２からリード要求を受信した際に行う処理（ホストリード処理）を説明するフローチャートである。ホストリード処理は、ＲＡＩＤコントローラ５のＣＰＵ５１が、プログラムを実行することにより実現される。【００３６】
ＲＡＩＤコントローラ５は、ホスト計算機２からリード要求を受信すると（ＳＰ２００）、まず、リード先のＦＭＤ６と論理ブロック８２を特定する（ＳＰ２０１）。【００３７】
具体的には、ＲＡＩＤコントローラ５は、まず、受信したリード要求からリード先の論理ユニットとその論理ユニットの中のリード先の領域を特定するための情報（例えば、アドレス）を抽出し、抽出した情報を基にリード先の仮想ドライブ９と仮想ブロック９１を特定する。次に、ＲＡＩＤコントローラ５は、特定した仮想ドライブ９に対応する仮想ドライブ管理テーブル１１０を参照し、特定した仮想ブロック９１を識別するための番号が仮想ブロック＃１１１として登録されているエントリを特定する。そして、特定したエントリからＦＭＤ＃１１２と論理ブロック＃１１３を抽出する。【００３８】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ２０１で特定したＦＭＤ６へ、ステップＳＰ２０１で特定した論理ブロック８２をリードするためのリード要求を送信する（ＳＰ２０２）。【００３９】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ２０１で特定したＦＭＤ６から、ステップＳＰ２０２で送信したリード要求の応答を受信する（ＳＰ２０３）。ＲＡＩＤコントローラ５は、リード要求の応答にリードデータが含まれている場合、リードデータをキャッシュメモリ５２へ格納する。【００４０】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ２０３で受信した応答がエラー応答か否かを判定する（ＳＰ２０４）。【００４１】
ＲＡＩＤコントローラ５は、この判定において肯定結果を得ると（ＳＰ２０４：ＹＥＳ）、ステップＳＰ２０５に進む。肯定結果を得たということは、ステップＳＰ２０１で特定した論理ブロック８２がマッピングされている物理ブロック８１が故障したということである。このとき、ＲＡＩＤコントローラ５は、ＳＰ２０１の処理と同様にリードすることができなかった論理ブロック８２のデータと関連する同一ストライプの他のデータとパリティが格納されているＦＭＤ６と論理ブロック８２を特定し、各ＦＭＤから他のデータとパリティを読み出す。そして、ＲＡＩＤコントローラは、他のデータとパリティを基に、リードすることができなかったデータを再現し、キャッシュメモリ５２へ格納する。【００４２】
次に、ＲＡＩＤコントローラ５は、後述する新格納先ＦＭＤ決定処理により、再現したデータの新格納先のＦＭＤ６を決定する（ＳＰ２０６）。【００４３】
次に、ＲＡＩＤコントローラ５は、ステップ２０６で決定した新格納先のＦＭＤ６がステップＳＰ２０１で特定したリード先のＦＭＤ６と同一か否かを判定する（ＳＰ２０７）。【００４４】
ＲＡＩＤコントローラ５は、この判定において肯定結果を得ると（ＳＰ２０７：ＹＥＳ）、ステップＳＰ２０８に進む。肯定結果を得たということは、リード先のＦＭＤ６に未使用の物理ブロック８１が予め決められた閾値より多く残っているということである。このとき、ＲＡＩＤコントローラ５は、論理ブロック８２のマッピング先を未使用の物理ブロック８１へ変更することを指示するために、リード先のＦＭＤ６へ、ＲＥＡＳＳＩＧＮ  ＢＬＯＣＫＳ要求を送信する。【００４５】
次に、ＲＡＩＤコントローラ５は、ＳＰ２０８で送信したＲＥＡＳＳＩＧＮ  ＢＬＯＣＫＳ要求の応答を受信し（ＳＰ２０９）、ステップＳＰ２１０に進む。【００４６】
一方、ＲＡＩＤコントローラ５は、ステップＳＰ２０７の判定において否定結果を得ると（ＳＰ２０７：ＮＯ）、ステップＳＰ２１３に進む。否定結果を得たということは、ステップＳＰ２０１で特定したリード先のＦＭＤ６とは異なるＦＭＤ６へ再現したデータを格納するということである。このとき、ＲＡＩＤコントローラ５は、ステップＳＰ２０６で決定した新格納先のＦＭＤ６に含まれる論理ブロック８２の中から、新格納先の論理ブロック８２を決定する。【００４７】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ２１３の決定結果に基づいて仮想ドライブ管理テーブル１１０を更新する（ＳＰ２１４）。具体的には、ＲＡＩＤコントローラ５は、ステップＳＰ２０１で特定した仮想ドライブ９に対応する仮想ドライブ管理テーブル１１０を参照し、ステップＳＰ２０１で特定した仮想ブロック９１に対応するエントリを特定する。そして、ＲＡＩＤコントローラ５は、特定したエントリのＦＭＤ＃１１２をステップＳＰ２０６で決定した新格納先のＦＭＤ６を特定するための番号に設定し、論理ブロック＃１１３をステップＳＰ２１３で決定した新格納先の論理ブロック８２を特定するための番号に設定する。これにより、ＦＭＤ内の故障していないブロックを使用し続けることができ、故障ブロックの数が増加してもＦＭＤを閉塞せずに使用し続けることができる。【００４８】
ＲＡＩＤコントローラ５は、ステップＳＰ２１４を終えると、ステップＳＰ２１０に進む。【００４９】
ＲＡＩＤコントローラ５は、ステップＳＰ２１０に進むと、ステップＳＰ２０６で決定した新格納先のＦＭＤ６へ、再現したデータをライトするためのライト要求を送信する。【００５０】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ２１０で送信したライト要求の応答を受信し（ＳＰ２１１）、ステップＳＰ２１２に進む。【００５１】
一方、ＲＡＩＤコントローラ５は、ステップＳＰ２０４の判定において否定結果を得ると（ＳＰ２０４：ＮＯ）、ステップＳＰ２１２に進む。【００５２】
ＲＡＩＤコントローラ５は、ステップＳＰ２１２に進むと、ホスト計算機２へ、ステップＳＰ２００で受信したリード要求に対する応答を送信し（ＳＰ２１２）、ホストリード処理を終了する。  上記ホストリード処理のステップＳＰ２１０では、ＲＡＩＤコントローラ５は、ステップＳＰ２０５で再現したデータを新格納先のＦＭＤ６へライトするが、ライトせずにキャッシュメモリ５２にダーティデータとして残しておいてもよい。その場合、再現したデータは、後述するデステージ処理により、新格納先のＦＭＤ６へライトされる。【００５３】
また、上記ホストリード処理のステップＳＰ２０８では、ＲＡＩＤコントローラ５は、ステップＳＰ２０２でリードすることができなかった論理ブロック８２のマッピング先を変更するが、変更せずに仮想ブロック９１がマッピングされる論理ブロック８２を変更してもよい。その場合、ＲＡＩＤコントローラ５は、リード先のＦＭＤ６に含まれる論理ブロック８２の中から、新格納先の論理ブロック８２を決定する。そして、ステップＳＰ２１４と同様の手順で仮想ドライブ管理テーブル１１０を更新する。【００５４】
図８は、ＲＡＩＤコントローラ５が、ホスト計算機２からライト要求を受信した際に行う処理（ホストライト処理）を説明するフローチャートである。ホストライト処理は、ＲＡＩＤコントローラ５のＣＰＵ５１が、プログラムを実行することにより実現される。【００５５】
ＲＡＩＤコントローラ５は、ホスト計算機２からライト要求を受信すると（ＳＰ３００）、まず、ライトデータをキャッシュメモリ５２へ格納する（ＳＰ３０１）。【００５６】
具体的には、ＲＡＩＤコントローラ５は、まず、受信したライト要求からライト先の論理ユニットとその論理ユニットの中のライト先の領域を特定するための情報を抽出し、抽出した情報を基にライト先のＲＡＩＤグループ１０とそのＲＡＩＤグループ１０の中のライト先の仮想ブロックを特定する。そして、ＲＡＩＤコントローラ５は、ライトデータをキャッシュメモリ５２へ格納するとともに、格納したライトデータを管理するための情報をメモリ５３内のテーブルに設定する。この情報には、ライト先のＲＡＩＤグループ１０とそのＲＡＩＤグループ１０の中のライト先のブロックをそれぞれ特定するための番号が含まれる。【００５７】
次に、ＲＡＩＤコントローラ５は、ライトデータに関連するパリティを計算し、キャッシュメモリ５２へ格納する。パリティを計算する方法には様々なものがあるが、例えば、ＲＡＩＤ−５の場合、計算するパリティに関連するストライプのすべてのデータの排他的論理和を計算するという方法がある。【００５８】
次に、ＲＡＩＤコントローラ５は、後述するデステージ処理により、ライトデータとパリティをＦＭＤ６へ書き込む（ＳＰ３０３）。【００５９】
最後に、ＲＡＩＤコントローラ５は、ホスト計算機２へ、ステップＳＰ３００で受信したライト要求に対する応答を送信し（ＳＰ３０４）、ホストライト処理を終了する。【００６０】
上記ホストライト処理では、ＲＡＩＤコントローラ５は、ホスト計算機２へライト要求に対する応答を返す前にライトデータをＦＭＤ６へ書き込むが（ライトスルー）、ライトデータをＦＭＤ６へ書き込まずにホスト計算機２へ応答を返してもよい（ライトバック）。その場合、ＲＡＩＤコントローラ５は、ライトデータをＦＭＤ６へ書き込まずにキャッシュメモリ５２にダーティデータとして残し、後述するデステージ処理でＦＭＤ６へ書き込む。【００６１】
図９は、ＲＡＩＤコントローラ５が、キャッシュメモリ５２に格納されているデータまたはパリティを、ＦＭＤ６にデステージする際に行う処理（デステージ処理）を説明するフローチャートである。デステージ処理は、ＲＡＩＤコントローラ５のＣＰＵ５１が、プログラムを実行することにより実現される。【００６２】
ＲＡＩＤコントローラ５は、ライト要求をライトスルーで処理する場合、ライト要求に対する応答を送信する前にデステージ処理を実行する。一方、ＲＡＩＤコントローラ５は、ライト要求をライトバックで処理する場合、ライト要求とは非同期に、定期的にデステージ処理を実行する。【００６３】
デステージ処理では、ＲＡＩＤコントローラ５は、まず、ライト先のＦＭＤ６と論理ブロック８２を特定する（ＳＰ４００）。具体的には、ＲＡＩＤコントローラ５は、まず、キャッシュメモリ５２へ格納したライトデータを管理するためのメモリ５３内のテーブルを参照し、デステージするデータのライト先のＲＡＩＤグループ１０とそのＲＡＩＤグループ１０の中のライト先のブロックをそれぞれ特定する。次に、ＲＡＩＤコントローラ５は、その情報を基にライト先の仮想ドライブ９と仮想ブロック９１を特定する。次に、ＲＡＩＤコントローラ５は、特定した仮想ドライブ９と仮想ブロック９１に対応するＦＭＤ６と論理ブロック８２を特定する。具体的には、ＲＡＩＤコントローラ５は、特定した仮想ドライブ９に対応する仮想ドライブ管理テーブル１１０を参照し、特定した仮想ブロック９１を識別するための番号が仮想ブロック＃１１１として登録されているＦＭＤ＃１１２と論理ブロック＃１１３を抽出する。【００６４】
次に、ＲＡＩＤコントローラ５は、ＳＰ４００で特定したＦＭＤ６へ、デステージするデータまたはパリティをＳＰ４００で特定した論理ブロック８２へライトするためのライト要求を送信する（ＳＰ４０１）。【００６５】
次に、ＲＡＩＤコントローラ５は、ＳＰ４００で特定したＦＭＤ６から、ＳＰ４０１で送信したライト要求の応答を受信する（ＳＰ４０２）。【００６６】
次に、ＲＡＩＤコントローラ５は、ライト要求の応答がエラー応答か否かを判定する（ＳＰ４０３）。【００６７】
ＲＡＩＤコントローラ５は、この判定において肯定結果を得ると（ＳＰ４０３：ＹＥＳ）、ステップＳＰ４０４に進む。肯定結果を得たということは、ステップＳＰ４００で特定した論理ブロック８２にマッピングされている物理ブロック８１が故障したということである。このとき、ＲＡＩＤコントローラ５は、後述する新格納先ＦＭＤ決定処理により、デステージするデータの新格納先のＦＭＤ６を決定する。【００６８】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ４０４で決定したライト先のＦＭＤ６がステップＳＰ４００で特定したライト先のＦＭＤ６と同一か否かを決定する（ＳＰ４０５）。【００６９】
ＲＡＩＤコントローラ５は、この判定において肯定結果を得ると（ＳＰ４０５：ＹＥＳ）、ステップＳＰ４０６に進む。肯定結果を得たということは、ライト先のＦＭＤ６に未使用の物理ブロック８１が予め決められた閾値より多く残っているということである。このとき、ＲＡＩＤコントローラ５は、論理ブロック８２のマッピング先を未使用の物理ブロック８１へ変更することを指示するために、ライト先のＦＭＤ６へ、ＲＥＡＳＳＩＧＮ  ＢＬＯＣＫＳ要求を送信する。【００７０】
次に、ＲＡＩＤコントローラ５は、ＳＰ４０６で送信したＲＥＡＳＳＩＧＮ  ＢＬＯＣＫＳ要求の応答を受信し（ＳＰ４０７）、ステップＳＰ４０８に進む。【００７１】
一方、ＲＡＩＤコントローラ５は、ステップＳＰ４０５の判定において否定結果を得ると（ＳＰ４０５：ＮＯ）、ステップＳＰ４１０に進む。否定結果を得たということは、ステップＳＰ４００で特定したライト先のＦＭＤ６とは異なるＦＭＤ６へデステージするデータを格納するということである。このとき、ＲＡＩＤコントローラ５は、ステップＳＰ４０４で決定した新格納先のＦＭＤ６に含まれる論理ブロック８２の中から、新格納先の論理ブロック８２を決定する。また、ＲＡＩＤコントローラ５は、ステップＳＰ４００で特定したライト先のＦＭＤ６からデータを格納可能な物理記憶領域の残容量を取得し、残物理容量が閾値より小さい場合、ステップＳＰ４００で特定した論理ブロック８２を使用不能な論理ブロックとして管理する。例えば、残物理容量が論理記憶領域の容量より小さい場合、ＦＭＤ６は、ＲＡＩＤコントローラ５からデータを受領してもそのデータをフラッシュメモリに格納することができないため、ＲＩＡＤコントローラにエラー応答を送信することになる。このため、予め論理ブロックを使用不能として管理することで、ＲＡＩＤコントローラ５とＦＭＤ６間の不要な通信オーバーヘッドを削減することができる。【００７２】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ４１０の決定結果に基づいて仮想ドライブ管理テーブル１１０を更新する（ＳＰ４１１）。具体的には、ＲＡＩＤコントローラ５は、ステップＳＰ４００で特定した仮想ドライブ９に対応する仮想ドライブ管理テーブル１１０を参照し、ステップ４００で特定した仮想ブロック９１に対応するエントリを特定する。そして、ＲＡＩＤコントローラ５は、特定したエントリのＦＭＤ＃１１２をステップＳＰ４０４で決定した新格納先のＦＭＤ６を特定するための番号に設定し、論理ブロック＃１１３をステップＳＰ４１０で決定した新格納先の論理ブロック８２を特定するための番号に設定する。これにより、ＦＭＤ内の故障していないブロックを使用し続けることができ、故障ブロックの数が増加してもＦＭＤを閉塞せずに使用し続けることができる。【００７３】
ＲＡＩＤコントローラ５は、ステップＳＰ４１１を終えると、ステップＳＰ４０８に進む。【００７４】
ＲＡＩＤコントローラ５は、ステップＳＰ４０８に進むと、ステップＳＰ４０４で決定した新格納先のＦＭＤ６へ、デステージするデータをライトするためのライト要求を送信する。【００７５】
次に、ＲＡＩＤコントローラ５は、ＳＰ４０５で決定したＦＭＤ６から、ＳＰ４０８で送信したライト要求の応答を受信し（ＳＰ４０９）、デステージ処理を終了する。【００７６】
一方、ステップＳＰ４０３の判定において否定結果を得ると（ＳＰ４０３：ＮＯ）、ＲＡＩＤコントローラ５は、デステージ処理を終了する。【００７７】
上記デステージ処理のステップＳＰ４０６では、ＲＡＩＤコントローラ５は、ステップＳＰ４０１でライトすることができなかった論理ブロック８２のマッピング先を変更するが、変更せずに仮想ブロック９１がマッピングされる論理ブロック８２を変更してもよい。その場合、ＲＡＩＤコントローラ５は、ライト先のＦＭＤ６に含まれる論理ブロック８２の中から、新格納先の論理ブロック８２を決定する。そして、ステップＳＰ４１１と同様の手順で仮想ドライブ管理テーブル１１０を更新する。【００７８】
図１０は、ＲＡＩＤコントローラ５が、ストレージ装置４内の各ＦＭＤ６の未使用の物理ブロック８１の割合を平準化するために定期的に行う処理（未使用ブロック平準化処理）を説明するフローチャートである。未使用ブロック平準化処理は、ＲＡＩＤコントローラ５のＣＰＵ５１が、プログラムを実行することにより実現される。ＦＭＤ間で未使用の物理ブロックの数に偏りがあると、ＦＭＤ間で性能にばらつきが生じる。つまり、使用中の物理ブロックの数が多いＦＭＤにアクセスが集中することになり、特定のＦＭＤの性能が低下する。未使用ブロック平準化処理により、このようなＦＭＤ間の性能のばらつきを平準化することができる。また、未使用ブロック平準化処理により、予め未使用のブロック数を平準化しておくことができる。これにより、ホストリード／ライト処理に伴って別ＦＭＤへデータのコピーを行わなければならなくなる確率を下げることができ、ホスト計算機からのリード／ライト要求に対する応答遅延を回避することができる。【００７９】
未使用ブロック平準化処理では、ＲＡＩＤコントローラ５は、まず、ストレージ装置４内のＦＭＤ６を一つ選択する（ＳＰ５００）。【００８０】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ５００で選択したＦＭＤ６の未使用の物理ブロック８１の数が閾値未満か否かを判定する（ＳＰ５０１）。具体的には、ＲＡＩＤコントローラ５は、ステップＳＰ５００で選択したＦＭＤ６へ未使用の物理ブロック８１の数に関する問合せを行い、ＦＭＤ６から未使用のブロック８１の数を取得し、未使用のブロック８１の数が予め決められた閾値未満か否かを判定する。ＦＭＤ６がＲＡＩＤコントローラ５から問合せを受けると、ＦＭＤ６のＣＰＵ７１は、メモリ７２から未使用の物理ブロック８１の数を読み出し、ＲＡＩＤコントローラ５へ送信する。【００８１】
ＲＡＩＤコントローラ５は、この判定において肯定結果を得ると（ＳＰ５０１：ＹＥＳ）、ステップＳＰ５０２に進む。そして、ステップＳＰ５００で選択したＦＭＤ６に含まれる論理ブロック８２の中から、移動元の論理ブロック８１を一つ選択する。【００８２】
次に、ＲＡＩＤコントローラ５は、後述する新格納先ＦＭＤ決定処理により、移動先のＦＭＤ６を決定する（ＳＰ５０３）。【００８３】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ５０３で決定した移動先のＦＭＤ６に含まれる論理ブロック８２の中から、移動先の論理ブロック８２を決定する（ＳＰ５０４）。【００８４】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ５０２で選択した移動元の論理ブロック８１のデータを、ステップＳＰ５０４で決定した移動先の論理ブロック８２へコピーする（ＳＰ５０５）。【００８５】
次に、ＲＡＩＤコントローラ５は、仮想ドライブ管理テーブル１１０を更新する（ＳＰ５０６）。具体的には、ＲＡＩＤコントローラ５は、移動元の論理ブロック８２にマッピングされている仮想ブロック９１を含む仮想ドライブ９に対応する仮想ドライブ管理テーブル１１０を参照し、移動元の論理ブロック８２にマッピングされている仮想ブロック９１に対応するエントリを特定する。そして、ＲＡＩＤコントローラ５は、特定したエントリのＦＭＤ＃１１２を移動先のＦＭＤ６を特定するための番号に設定し、論理ブロック＃１１３を移動先の論理ブロック８２を特定するための番号に設定する。【００８６】
ＲＡＩＤコントローラ５は、ステップＳＰ５０６を終えると、ステップＳＰ５０７に進む。【００８７】
一方、ＲＡＩＤコントローラ５は、ステップＳＰ５０１の判定において否定結果を得ると（ＳＰ５０１：ＮＯ）、ステップＳＰ５０７に進む。【００８８】
ＲＡＩＤコントローラ５は、ステップＳＰ５０７に進むと、ストレージ装置４内のＦＭＤ６をすべて選択したか否を判定する。【００８９】
ＲＡＩＤコントローラ５は、この判定において肯定結果を得ると（ＳＰ５０７：ＹＥＳ）、未使用ブロック平準化処理を終了する。【００９０】
一方、ＲＡＩＤコントローラ５は、ステップＳＰ５０７の判定において否定結果を得ると（ＳＰ５０７：ＮＯ）、ステップＳＰ５００に進む。【００９１】
上記未使用ブロック平準化処理では、ＲＡＩＤコントローラ５が主体となって未使用の物理ブロック８１の数が閾値未満のＦＭＤ６を探すが、ＦＭＤ６が主体となって未使用の物理ブロック８１の数が閾値未満の場合にＲＡＩＤコントローラ５に通知してもよい。その場合、ＲＡＩＤコントローラ５は、ＦＭＤ６から通知を受信すると、ステップＳＰ５０２からステップＳＰ５０６を行う。ＦＭＤ６は、ＦＭチップの故障を検出したことを契機に、未使用の物理ブロックの数をチェックし、ＲＡＩＤコントローラ５に対して障害が発生したことを示す情報を通知してもよい。ＦＭチップが故障すると、使用可能な物理ブロックの数が大幅に減少するため、ＦＭＤ間の未使用物理ブロック数のばらつきも大きくなる。このため、ＦＭＤ６がＦＭチップの障害を検出したタイミングでＲＡＩＤコントローラ５に通知することで、ＲＡＩＤコントローラ５は、早期に未使用ブロック平準化処理を実行することができる。なお、ＦＭチップの障害とは、例えばＦＭチップ上の制御回路や配線の物理的な障害である。ＦＭチップ上の制御回路に障害が発生すると、そのＦＭチップ上の物理ブロックにデータのリード／ライトができなくなるため、すべての物理ブロックが使用不可となる。【００９２】
図１１は、ＲＡＩＤコントローラ５が、仮想ブロック９１のマッピング先の論理ブロック８２を変更する際、マッピング変更先のＦＭＤ６を決定するために行う処理（新格納先ＦＭＤ決定処理）を説明するフローチャートである。新格納先ＦＭＤ決定処理は、ＲＡＩＤコントローラ５のＣＰＵ５１が、プログラムを実行することにより実現される。【００９３】
新格納先ＦＭＤ決定処理では、ＲＡＩＤコントローラ５は、まず、マッピング変更先の候補のＦＭＤ６を一つ選択する（ＳＰ６００）。具体的には、ＲＡＩＤコントローラ５は、まず、ＲＡＩＤグループ管理テーブル１００を参照し、マッピング先を変更する仮想ブロック９１を含む仮想ドライブ９が登録されているエントリを特定する。そして、ＲＡＩＤコントローラ５は、特定したエントリのＦＭＤ＃１０４に登録されている番号の中から、番号を一つ選択する。【００９４】
次に、ＲＡＩＤコントローラ５は、ステップＳＰ６００で選択したＦＭＤ６の未使用の物理ブロック８１の数が閾値以上か否かを判定する（ＳＰ６０１）。具体的には、ＲＡＩＤコントローラ５は、ステップＳＰ６００で選択したＦＭＤ６へ未使用の物理ブロック８１の数に関する問合せを行い、ＦＭＤ６から未使用のブロック８１の数を取得し、未使用のブロック８１の数が予め決められた閾値未満か否かを判定する。ＦＭＤ６がＲＡＩＤコントローラ５から問合せを受けると、ＦＭＤ６のＣＰＵ７１は、メモリ７２から未使用の物理ブロック８１の数を読み出し、ＲＡＩＤコントローラ５へ送信する。未使用の物理ブロック数が閾値未満の場合、そのＦＭＤにデータを格納することができないか、格納できたとしてもすぐに未使用の物理ブロック数が少ない状態となり未使用ブロック数の平準化が必要となる可能性が高い。このため、未使用の物理ブロック数が閾値以上のＦＭＤを新格納先ＦＭＤとして選択するためにＳＰ６０１の判定を行う。【００９５】
ＲＡＩＤコントローラ５は、この判定において肯定結果を得ると（ＳＰ６０１：ＹＥＳ）、ステップＳＰ６０２に進む。そして、ＲＡＩＤコントローラ５は、マッピング変更対象のデータと同一ストライプの他のデータまたはパリティがステップＳＰ６００で選択したＦＭＤ６に存在するか否かを判定する。同一ストライプの複数のデータ及びパリティの２つ以上が同じＦＭＤに格納されると、冗長性が低下する。ＳＰ６０２の判定により、新格納先ＦＭＤとして冗長性が低下するＦＭＤを選択することを回避することができる。【００９６】
ＲＡＩＤコントローラ５は、この判定において肯定結果を得ると（ＳＰ６０２：ＹＥＳ）、ステップＳＰ６０３に進む。そして、ＲＡＩＤコントローラ５は、マッピング変更先の候補のＦＭＤ６をすべて選択したか否かを判定する。具体的には、ＲＡＩＤコントローラ５は、ステップＳＰ６００で特定したエントリのＦＭＤ＃１０４に登録されている番号をすべて選択したか否かを判定する。【００９７】
ＲＡＩＤコントローラ５は、この判定において肯定結果を得ると（ＳＰ６０３：ＹＥＳ）、ステップＳＰ６０４に進み、新格納先として適切なＦＭＤ６がないと判断する。この場合、新格納先ＦＭＤ決定処理を呼び出したホストリード処理、デステージ処理または未使用ブロック平準化処理は失敗する。ここで、ＲＡＩＤコントローラ５は、ホスト計算機２やストレージ装置４の管理計算機２０にＦＭＤの増設を促す警告を通知する。これにより、管理者はＦＭＤ６を増設すべき契機を知ることができる。【００９８】
ＲＡＩＤコントローラ５は、ステップＳＰ６０４を終えると、新格納先ＦＭＤ決定処理を終了する。【００９９】
一方、ＲＡＩＤコントローラ５は、ステップＳＰ６０１の判定において否定結果を得ると（ＳＰ６０１：ＮＯ）、ステップＳＰ６０３に進む。【０１００】
一方、ＲＡＩＤコントローラ５は、ステップＳＰ６０２の判定において否定結果を得ると（ＳＰ６０２：ＮＯ）、ステップＳＰ６０５に進み、マッピング変更先のＦＭＤ６をステップＳＰ６００で選択したＦＭＤ６に決定する。【０１０１】
一方、ＲＡＩＤコントローラ５は、ステップＳＰ６０３の判定において否定結果を得ると（ＳＰ６０３：ＮＯ）、ステップＳＰ６００に進む。【０１０２】
このように、ＲＡＩＤコントローラ５とＦＭＤ６が連携して情報をやり取りすることで、新格納先ＦＭＤ決定処理が行われる。この新格納先ＦＭＤ決定処理により、ＦＭＤの故障していない物理ブロックを活用するために他の適切なＦＭＤを選択することができる。
【実施例２】
【０１０３】
実施例１では、論理ユニットに、複数の仮想ドライブに基づくＲＡＩＤグループの記憶領域を、固定的に対応付ける構成について説明した。本実施例では、いわゆるシンプロビジョニング（Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ）技術を用いて作成される仮想的な論理ユニットに、複数の仮想ドライブに基づくＲＡＩＤグループの記憶領域を動的に割り当てる構成を説明する。【０１０４】
図１２は、本実施例の概要を示す図である。実施例１と共通する部分は説明を省略する。【０１０５】
シンプロビジョニング技術により作成される仮想的な論理ユニット（以下、仮想論理ユニット２３と呼ぶ）は、初期状態では仮想論理ユニット２３の各領域に特定の記憶領域が割り当てられていない。ＲＡＩＤコントローラ５は、ホスト計算機２から仮想論理ユニット２３上の位置（ＬＢＡ）を指定したライト要求を受信すると、当該位置に記憶領域が割り当てられているか確認し、割り当てられていない場合、その位置に記憶領域を割り当てる。【０１０６】
なお、ＲＡＩＤコントローラ５は、仮想論理ユニット２３上の記憶空間を複数の固定サイズ領域に分割して管理しており、この固定サイズ領域は「仮想チャンク２４」と呼ばれる。実施例２においては、一例として、１つの仮想チャンクのサイズは１ストライプのサイズと等しいものとする。【０１０７】
また、ストレージ装置４においては、仮想論理ユニット２３の仮想チャンクに対して割り当てることができるＲＡＩＤグループ１０の記憶領域を管理するために、プール２１という概念を定義している。ＲＡＩＤコントローラ５は、プール２１内のＲＡＩＤグループ１０の記憶領域を複数の固定サイズ領域に分割して管理しており、このプール２１内の固定サイズ領域は「チャンク２２」と呼ばれる。実施例２においては、一例として、１つのチャンクは１つのストライプを含むものとする。【０１０８】
ＲＡＩＤコントローラ５は、ホスト計算機２からのライト要求に応じて、仮想論理ユニット２３に記憶領域を割り当てる際、プール２１内に存在する複数のチャンクから少なくとも１つを選択して割り当てる。【０１０９】
図１３は、ＲＡＩＤコントローラ５が記憶領域の管理に用いるプール管理テーブル１３０の構成例を示す。プール管理テーブル１３０には、プール＃１３１、ＲＡＩＤグループ＃１３２、ＲＡＩＤレベル１３３、チャンク＃１３４、割当状態１３５、仮想ドライブ＃１３６、ＦＭＤ＃１３７が登録される。なお、プール＃１３１、チャンク＃１３４及び割当状態１３５以外の項目は図６と同様のため、以下では説明を省略する。【０１１０】
プール＃１３１は、ストレージ装置４内でプールを一意に特定するために利用される番号である。図１３に示す通り、１つのプールは１つ以上のＲＡＩＤグループを含む。【０１１１】
チャンク＃１３４は、プール２１内でチャンクを一意に特定するために利用される番号である。各ＲＡＩＤグループは複数のチャンクを含む。また、各チャンク２２はＲＡＩＤグループを構成する複数の仮想ドライブにまたがって定義される。【０１１２】
割当状態１３５は、各チャンク２２が仮想論理ユニット２３に割当済みであるか、未割当であるかを示す。ＲＡＩＤコントローラ５は、仮想論理ユニット２３へのライト要求を受領すると、未割当のチャンク２２を選択して仮想論理ユニット２３に割り当てる。【０１１３】
図１４は、ＲＡＩＤコントローラ５が仮想論理ユニットに割り当てられた記憶領域の管理に用いる仮想論理ユニット管理テーブル１４０の構成例を示す。仮想論理ユニット管理テーブル１４０には、仮想論理ユニット＃１４１、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）１４２、仮想チャンク＃１４３、割当済みチャンク＃１４４が登録される。【０１１４】
仮想論理ユニット＃１４１は、ストレージ装置４内で仮想論理ユニット２３を一意に特定するために利用される番号である。ストレージ装置４は、１つ以上の仮想論理ユニット２３を含む。【０１１５】
ＬＢＡ１４２は、仮想論理ユニット２３上の位置を特定するための値である。ホスト計算機２は、仮想論理ユニット２３のＬＢＡ１４２を指定してライト要求やリード要求を送信する。【０１１６】
仮想チャンク＃１４３は、仮想論理ユニット２３内で仮想チャンク２４を一意に特定するために利用される番号である。ＲＡＩＤコントローラ５は、仮想論理ユニット２３上のＬＢＡを所定のＬＢＡの範囲ごとに分割して、仮想チャンク２４として管理する。【０１１７】
割当済みチャンク＃１４４は、仮想チャンク２４に割り当てられているチャンク２２の番号を示す。また、割当済みチャンク＃１４４が「未割当」の場合は、当該仮想チャンク２４にチャンク２２が割り当てられていないことを示している。【０１１８】
例えば、ＲＡＩＤコントローラ５は、ホスト計算機２から、仮想論理ユニット＃１４１が「０」でありＬＢＡ１４２が「１０００−１９９９」の範囲内を指定するライト要求を受信した場合、当該ＬＢＡ範囲に対応する仮想チャンク２４にはチャンク２２が割り当てられていないため、プール管理テーブル１３０を参照して未割当のチャンク２２を割り当てる。また、ＲＡＩＤコントローラ５は、プール管理テーブル１３０に基づいて、ライト先のチャンク２２からライト先のＲＡＩＤグループ１０を特定することができる。【０１１９】
ライト処理及びリード処理については、チャンク２２からＲＡＩＤグループの対応関係を特定する以外の処理は実施例１と同様であるため説明を省略する。【０１２０】
未使用ブロック平準化処理（図１０）は、実施例１と同様であるため説明を省略する。【０１２１】
新格納先ＦＭＤ決定処理（図１１）のＳＰ６０４において、新格納先として適切なＦＭＤ６がないと判断された場合も、ＲＡＩＤコントローラ５は、管理計算機２０にＦＭＤ６の増設を促す警告を通知することができる。また、新格納先として適切なＦＭＤ６が存在する場合であっても、プールの容量が所定値以下となったら、ＲＡＩＤコントローラ５は管理計算機２０にプール容量の減少を通知しても良い。なお、プールの容量とは、プール内のＦＭＤ６がデータを格納可能な容量の合計である。新格納先ＦＭＤ６が存在しない場合は、ライト処理及びリード処理は失敗することになる。ＲＡＩＤコントローラ５は、プールの容量が所定値以下となったことを契機に管理計算機２０に通知することで、ＦＭＤ６の容量が枯渇する前に管理者は早期にＦＭＤ６の増設を行うことができる。【０１２２】
よって、シンプロビジョニングによる仮想論理ユニットに複数の仮想ドライブに基づくＲＡＩＤグループから記憶領域を割り当てる構成であっても、ＦＭＤ内の一部のブロックが故障した場合に、故障していないブロックを有効活用し、ＦＭＤを使用できる期間を引き延ばすことができる。
【符号の説明】
【０１２３】
４：ストレージ装置
６：ＦＭＤ（フラッシュメモリデバイス）
【図１】
2015114744.tif 000003
【図２】
2015114744.tif 000004
【図３】
2015114744.tif 000005
【図４】
2015114744.tif 000006
【図５】
2015114744.tif 000007
【図６】
2015114744.tif 000008
【図７】
2015114744.tif 000009
【図８】
2015114744.tif 000010
【図９】
2015114744.tif 000011
【図１０】
2015114744.tif 000012
【図１１】
2015114744.tif 000013
【図１２】
2015114744.tif 000014
【図１３】
2015114744.tif 000015
【図１４】
2015114744.tif 000016
【手続補正書】
【提出日】平成27年2月27日(2015.2.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のフラッシュメモリデバイスと、ＲＡＩＤコントローラを有し、
前記複数のフラッシュメモリデバイスのそれぞれは、複数のデータ消去単位である物理ブロックをそれぞれに有する複数のフラッシュメモリチップと、前記複数の物理ブロックの１つ以上に論理記憶領域を対応付けて前記ＲＡＩＤコントローラに論理記憶領域を提供するフラッシュコントローラと、を有し、
前記ＲＡＩＤコントローラは、それぞれが、前記複数のフラッシュメモリデバイスのそれぞれによって提供される前記論理記憶領域の一部を含む複数の仮想ドライブを管理し、前記複数の仮想ドライブをＲＡＩＤグループとして制御し、
前記複数のフラッシュメモリデバイスのうちの第１のフラッシュメモリデバイスの第１フラッシュコントローラは、前記複数の物理ブロックのうち１つ以上の物理ブロックの障害を検出した場合、前記ＲＡＩＤコントローラにエラー情報を通知し、
前記ＲＡＩＤコントローラは、前記エラー情報を受信すると、前記故障した物理ブロックに対応付けられている第１論理記憶領域を特定し、
前記第１論理記憶領域のデータを、前記データに関連するデータとパリティとに基づいて復元し、
前記第１論理記憶領域に対応付けられている第１仮想ドライブの第１仮想記憶領域を特定し、
前記第１フラッシュメモリデバイスから、前記複数のブロックのうち障害が発生していないデータを格納可能な状態の物理ブロックの数である第１未使用ブロック数を取得し、
前記第１未使用ブロック数が予め決められた第１閾値未満の場合、前記第１フラッシュメモリデバイスとは異なる第２フラッシュメモリデバイスから第２未使用ブロック数を取得し、前記第２未使用ブロック数が予め決められた第２閾値以上の場合、前記第１仮想ドライブの前記第１仮想記憶領域と対応付ける論理記憶領域を前記第２フラッシュドライブから選択することを決定し、
第１仮想記憶領域と前記第１論理記憶領域との対応関係を、前記第１仮想ドライブと前前記第２フラッシュメモリデバイスの第２論理記憶領域との対応関係に変更し、
前記第２論理記憶領域を指定して前記第２フラッシュドライブにライトする
ストレージ装置。
【請求項２】
前記障害は、あるブロックの消去回数が所定値以上の状態またはあるブロックを含むフラッシュメモリチップに障害が発生している状態である
請求項１記載のストレージ装置。
【請求項３】
前記第１フラッシュコントローラは、前記ＲＡＩＤコントローラからアクセス要求を受信し、前記アクセス要求の対象となるブロックに障害が発生している場合に前記ＲＡＩＤコントローラに前記エラー情報を通知する
請求項２記載のストレージ装置。
【請求項４】
前記第１フラッシュコントローラは、前記複数のフラッシュメモリチップの少なくとも１つに障害が発生したことを検出した場合、前記ＲＡＩＤコントローラに前記エラー情報を通知する
請求項３記載のストレージ装置。
【請求項５】
前記ＲＡＩＤコントローラは、前記エラー情報を受信した場合、前記複数のフラッシュドライブの１つから前記複数のブロックのうち障害が発生していないデータを格納可能な状態の物理ブロックの数である未使用ブロック数を取得し、前記未使用ブロック数に応じて前記第１仮想ドライブと対応付ける論理記憶領域を含むフラッシュメモリデバイスを選択する
請求項４記載のストレージ装置。
【請求項６】
前記ＲＡＩＤコントローラは、前記複数のフラッシュメモリデバイスのうちの第２フラッシュメモリデバイスから前記未使用ブロック数を取得し、前記第２フラッシュメモリデバイスの前記未使用ブロックの数が第１の値より小さい場合、前記第２フラッシュメモリデバイスが提供する論理記憶領域と第２仮想ドライブとの対応関係を、前記複数のフラッシュメモリデバイスのうち前記未使用ブロック数が第２の値より大きい第３フラッシュメモリデバイスが提供する論理記憶領域と第２仮想ドライブとの対応関係に変更する
請求項１記載のストレージ装置。
【請求項７】
前記ＲＡＩＤコントローラは、前記複数の仮想ドライブから構成されるＲＡＩＤグループに基づく論理ユニットをホスト計算機に提供する
請求項２記載のストレージ装置。
【請求項８】
前記ＲＡＩＤコントローラは、ホスト計算機に仮想論理ユニットを提供し、前記複数
の仮想ドライブから構成されるＲＡＩＤグループの記憶領域を複数のチャンクに分割し、前記ホスト計算機から前記仮想論理ユニットへのライト要求を受信すると、前記チャンクを前記仮想論理ユニットに割り当てる
請求項１記載のストレージ装置。
【国際調査報告】
2015114744.tif 000017
2015114744.tif 000018
2015114744.tif 000019
2015114744.tif 000020