(57)【特許請求の範囲】
【請求項１】
外部装置に接続されたストレージシステムであって、
複数のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループを構成する複数のフラッシュパッケージと、
前記複数のフラッシュパッケージに接続され前記外部装置からアクセス要求を受け付ける第１のコントローラと
を備え、
各フラッシュパッケージは、
複数の物理ブロックで構成された複数のフラッシュチップと、
前記複数のフラッシュチップに接続された第２のコントローラと
を有し、
前記第１のコントローラが、複数の論理チャンクで構成された仮想的な論理ユニットである仮想ユニットと、複数の物理チャンクとを管理し、
前記複数の物理チャンクは、前記複数のＲＡＩＤグループに基づく複数の論理的な記憶領域であり、
各物理チャンクは、いずれかのＲＡＩＤグループを構成する二以上のフラッシュパッケージに基づいており、
一つの物理チャンクには、その一つの物理チャンクの基になっているＲＡＩＤグループについての複数の論理ブロックのうちの二以上の論理ブロックが割り当てられており、
前記第１のコントローラは、どの論理チャンクにどの物理チャンクが割り当てられているかの仮想／実対応関係を管理し、
前記第２のコントローラは、どの論理ブロックにどの一以上の物理ブロックが割り当てられているかの論理／物理対応関係と、その第２のコントローラがあるフラッシュパッケージが有する空きブロックの総数であるトータル空きブロック数とを管理し、
前記第１のコントローラが受け付けたアクセス要求がライト要求の場合、前記第１のコントローラは、前記ライト要求を基に特定されるライト先の論理チャンクに物理チャンクが割り当てられているか否かを前記仮想／実対応関係を基に判断し、その判断の結果が否定的の場合、いずれかの未割当ての物理チャンクを前記ライト先の論理チャンクに割り当て、前記割り当てた物理チャンクに、前記ライト要求に付随するデータを書き込み、
前記第１のコントローラは、物理チャンクにデータを書き込む場合、その物理チャンクに従うアドレスを指定したライト指示を、そのアドレスを管理する第２のコントローラに送信し、そのライト指示を受けた第２のコントローラが、そのライト指示で指定されているアドレスを有する論理ブロックに割り当てられた物理ブロックに、そのライト指示の対象のデータを書き込み、
前記第１のコントローラは、物理チャンクからデータを読み出す場合、前記第１のコントローラは、その物理チャンクに従うアドレスを指定したリード指示を、そのアドレスを管理する第２のコントローラに送信し、そのリード指示を受けた第２のコントローラが、そのリード指示で指定されているアドレスを有する論理ブロックに割り当てられている物理ブロックを前記論理／物理対応関係を基に特定し、特定された物理ブロックからデータを読み出し、そのデータを前記第１のコントローラに送信し、
前記第２のコントローラは、或るライト指示に従う書き込みに失敗した場合、ライトエラーを前記第１のコントローラに応答し、
前記第１のコントローラは、前記或るライト指示の送信先の第２のコントローラからライトエラーを受けた場合、前記送信先の第２のコントローラに対応したフラッシュパッケージのトータル空きブロック数が所定の閾値未満か否かを判断し、その判断の結果が肯定的である場合にライトエラーハンドリング処理を実行し、
前記ライトエラーハンドリング処理において、
（Ｈ１）前記第１のコントローラが、前記或るライト指示に従うライト先領域に関わる物理チャンクを特定し；
（Ｈ２）前記第１のコントローラが、前記ライト先領域を有するフラッシュパッケージを含んだＲＡＩＤグループである第１のＲＡＩＤグループとは別の第２のＲＡＩＤグループを選択し；
（Ｈ３）前記第１のコントローラが、前記特定された物理チャンクである第１の物理チャンクからデータを読み出し、読み出したデータを、前記第２のＲＡＩＤグループが基になっている複数の物理チャンクのうちの未割当ての物理チャンクである第２の物理チャンクに書き込み；
（Ｈ４）前記第１のコントローラが、前記第１の物理チャンクの割当先の論理チャンクに対し、前記第１の物理チャンクに代えて前記第２の物理チャンクを割り当て；
（Ｈ５）前記第１のコントローラが、前記第１のＲＡＩＤグループに基づく全ての未割当ての物理チャンクを管理対象から外し、
（Ｈ６）前記第１のコントローラが、前記第１のＲＡＩＤグループを構成する各フラッシュパッケージが有する各第２のコントローラに、前記第１の物理チャンクに従うアドレスを含んだ解放指示と、管理対象から外された未割当ての物理チャンクに従うアドレスを含んだ解放指示とを送信し、解放指示を受けた第２のコントローラが、その解放指示で指定されているアドレスを有する論理ブロック部分に対応する物理ブロック部分を特定し、特定された物理ブロック部分を解放可能として管理し、解放可能として管理された物理ブロック部分を有する物理ブロックの全域が解放可能か否かを判断し、その判断の結果が肯定的の場合に、その物理ブロックを、その物理ブロックの割当先の論理ブロックから解放し、前記解放された物理ブロックを空きブロックとして管理し、
前記第１のコントローラは、未割当ての物理チャンクを管理対象から外したことに伴って物理チャンクの数に対する割当て済み物理チャンクの数の比率が所定の閾値を超えた場合、警告を発する、
ストレージシステム。
【請求項２】
前記第２のコントローラは、解放する物理ブロックに対して消去処理を行い消去処理が施された物理ブロックを空きブロックとして管理するようになっており、
前記第１のコントローラは、各フラッシュパッケージのトータル消去回数を管理し、
前記トータル消去回数は、そのトータル消去回数に対応するフラッシュパッケージが有する各物理ブロックに対する消去処理回数の合計であり、
前記第２のＲＡＩＤグループは、書込み対象のデータを記憶するために必要な空きブロック数以上の空きブロックを有し、且つ、前記第１のＲＡＩＤグループ以外のＲＡＩＤグループのうちトータル消去回数が最も少ないＲＡＩＤグループである、
請求項１記載のストレージシステム。
【請求項３】
前記第１のコントローラは、第１のＲＡＩＤグループ内の第１のフラッシュパッケージ内の第１のフラッシュチップに障害が発生した場合、前記第１のＲＡＩＤグループ内の、前記第１のフラッシュパッケージ以外のフラッシュパッケージからそれぞれデータを読み出し、読み出されたデータを用いて、前記第１のフラッシュチップ内のデータを復元し、復元されたデータを、前記第１のフラッシュパッケージ内の前記第１のフラッシュチップ以外のいずれかのフラッシュチップに書き込む、
請求項１又は２記載のストレージシステム。
【請求項４】
前記第２のコントローラは、各物理ブロックの消去回数を管理し、
前記第２のコントローラは、解放される物理ブロックに対して消去処理を行った際に、消去処理が行われた物理ブロックの消去回数が所定の閾値を超えたか否かを判断し、その判断の結果が否定的の場合、前記消去処理が行われた物理ブロックを空きブロックとして管理し、その判断の結果が肯定的の場合、前記消去処理が行われた物理ブロックを割当て不可能な物理ブロックとして管理する、
請求項１乃至３のうちのいずれか１項に記載のストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
ハードディスクの代わりにフラッシュメモリを記憶媒体としたストレージシステムが考えられる。フラッシュメモリ（例えばＮＡＮＤ型のフラッシュメモリ）は、複数のフラッシュメモリチップ（以下、フラッシュチップ）で構成されている。各フラッシュチップは、複数の物理ブロックで構成されている。
【０００３】
フラッシュメモリは、ハードディスクに比べて高速動作可能で、かつ、消費電力が低いという利点を持つ。しかし、一方で、次のような制限もある。
【０００４】
第１に、メモリの各ビットの更新は１から０（または０から１）の一方向に限定される点である。逆の更新が必要な場合は、物理ブロックに対して消去処理を行い、物理ブロックを構成する全てのセルのビットを１（または０）に変更する必要がある。
【０００５】
第２に、各物理ブロックの消去回数には上限がある点である。例えば、ＮＡＮＤ型フラッシュメモリの場合、各物理ブロックの消去回数の上限は、一万から十万回程度である。
【０００６】
以上の理由から、ストレージシステムの記憶媒体としてハードディスクの代わりにフラッシュメモリが採用された場合、物理ブロック毎の書き換え頻度の偏りによって、一部の物理ブロックのみが消去回数の上限に達して使えなくなってしまうおそれがある。例えば、一般的なファイルシステムでは、ディレクトリ又はiノードに割り当てられた論理ブロックに対する書き換えの頻度は他の論理ブロックに対する書き換えよりも高いので、ディレクトリ又はiノードに割り当てられた論理ブロックに割り当てられている物理ブロックの消去回数が上限に達する可能性が高い。
【０００７】
この問題に対し、特許文献１に示すように、使えなくなった物理ブロック（不良ブロック）に対して代替となる物理ブロック（代替ブロック）を割り当てることで、記憶装置としての寿命を延ばす技術が知られている。
【０００８】
また、特許文献２に示すように、動的に論理／物理マッピング（例えば論理ブロックと物理ブロックの対応関係）を変更することによって物理ブロックの消去回数を平準化する技術（ウェアレベリング）も知られている。ウェアレベリングのアルゴリズムには、ダイナミックウェアレベリングと、スタティックウェアレベリングとがある。ダイナミックウェアレベリングは、データ更新に伴う物理ブロック消去時に、なるべく消去回数の少ない空きブロックへデータを移動することである。スタティックウェアレベリングでは、更新されないデータ（スタティックなデータ）も移動の対象となり得る。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平５−２０４５６１号公報
【特許文献２】米国特許５４７９６３８号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１０】
消去回数が偏ると、多くの使用不可能な物理ブロック（寿命が尽きた物理ブロック）が発生し得る。そうすると、論理ブロックに割当て可能な物理ブロック（空きブロック）が枯渇し、それ故、ストレージシステムに新たにデータを格納することができなくなる。
【００１１】
従って、本発明の一つの目的は、ストレージシステム内で効率的にウェアレベリングが行われるようにすることにある。
【課題を解決するための手段】
【００１２】
ストレージシステムが、一以上のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループを構成する複数のフラッシュパッケージと、複数のフラッシュパッケージに接続されたコントローラとを備える。各フラッシュパッケージは、複数の物理ブロックで構成された複数のフラッシュチップを有する。コントローラは、不要領域に関わる対象領域を特定し、その対象領域に属する論理ブロックに割り当てられている物理ブロックをその論理ブロックから解放し、解放された物理ブロックを空きブロックとして管理する。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の一実施形態に係る計算機システムの構成例を示す図である。
【図２】図２は、論理ユニット管理情報１２の一例を示す図である。
【図３】図３は、プール管理情報１３の一例を示す図である。
【図４】図４は、ドライブ５の構成例を示す図である。
【図５】図５は、フラッシュメモリ管理情報４５の一例を示す図である。
【図６】図６は、ドライブコントローラ２２０が行うセクタ解放処理の一例を示すフローチャートである。
【図７】図７は、ブロック解放処理（図６のステップ７４）の一例を示すフローチャートである。
【図８】図８は、論理ユニット削除処理の一例を示すフローチャートである。
【図９】図９は、チャンク解放処理（図８のステップ９３）のフローチャートである。
【図１０】図１０は、ホスト計算機２からの解放要求に応答してストレージコントローラ４がドライブ５に解放指示を送信する例の説明図である。
【図１１】図１１は、ホスト計算機２から解放要求を受けたストレージコントローラ４が行う領域解放処理の一例を示すフローチャートである。
【図１２】図１２は、空きブロック不足によるライト失敗に応答して行われるデータ移行処理の説明図である。
【図１３】図１３は、ライト失敗を契機に行われるライトエラーハンドリング処理の一例を示すフローチャートである。
【図１４】図１４は、ＲＡＩＤ５（３Ｄ＋１Ｐ）のＲＡＩＤグループについてのフラッシュメモリデータ回復処理の説明図である。
【図１５】図１５は、方法１に従うフラッシュメモリデータ回復処理の一例を示すフローチャートである。
【図１６】図１６は、方法２に従うフラッシュメモリデータ回復処理の一例を示すフローチャートである。
【図１７】図１７は、方法３に従うフラッシュメモリデータ回復処理の一例を示すフローチャートである。
【図１８】図１８は、空きチャンク抹消処理の一例を示すフローチャートである。
【図１９】図１９は、解放範囲の修正の一例の説明図である。
【図２０】図２０は、解放範囲修正処理の一例を示すフローチャートである。
【図２１】図２１は、データ回復処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の一実施形態を説明する。
【００１５】
まず、その説明で使用される用語の説明を行う。
【００１６】
一般に、いわゆるブロックストレージにおけるデータの読み書きの最小単位は「ブロック」と呼ばれるが、フラッシュメモリでは、フラッシュメモリの消去単位が「ブロック」と呼ばれる。本実施形態の説明では、これらを区別するために、フラッシュメモリの消去単位を「ブロック」と呼び、データの読み書きの最小単位を「セクタ」と呼ぶことにする。本実施形態では、一つのブロックが複数のセクタを含む。具体的には、例えば、フラッシュメモリは、ＮＡＮＤ型のフラッシュメモリである。そのため、例えば、フラッシュメモリは、複数のフラッシュチップで構成され、フラッシュチップは、複数の物理ブロックで構成され、物理ブロックは、複数の物理ページで構成される。ＮＡＮＤ型のフラッシュメモリでは、読み書きの単位が「ページ」であり、消去単位が「ブロック」である。しかし、本発明は、そのようなフラッシュメモリを有するストレージシステムに限らず、他の構成を有するフラッシュメモリを備えたストレージシステムについても適用可能である。
【００１７】
続いて、「チャンク」という用語を説明する。ストレージコントローラ（後述）が記憶領域を管理するうえで、いわゆる論理ユニットよりも小さい単位で管理を行うことで、記憶領域の割当、解放及び移動といった制御をより柔軟に行うことができる。この記憶領域の管理単位を、本実施形態の説明では「チャンク」と呼ぶ。以下の実施形態では、一つの仮想ユニットが複数の論理チャンクを有し、いずれかの論理チャンクに書込みがある場合にその論理チャンクに物理チャンクが割り当てられる。しかし、本発明は、そのような容量仮想化機能を有するストレージシステムに限らず、記憶領域がボリューム単位で管理されるストレージシステムにも適用可能である。例えば、一つの論理ユニットが一つのチャンクで構成されているとみなされても良い。
【００１８】
次に、本実施形態の概要を説明する。
【００１９】
ストレージシステムは、ストレージコントローラと、フラッシュメモリを記憶媒体とする複数のドライブとを有する。各ドライブは、ドライブコントローラを有する。
【００２０】
ストレージコントローラは、論理ユニットのアドレスと各ドライブの論理アドレスとの対応関係を管理する。ドライブのコントローラは、ドライブの論理アドレスと物理アドレスとの対応関係を管理する。
【００２１】
ストレージコントローラは、不要領域に関する対象領域を特定し、特定された対象領域のアドレスを指定した解放指示をドライブに送信する。ここで言う不要領域は、例えば、以下の（１）〜（５）のうちの少なくとも一つ：
（１）ホストが削除したファイルが格納されていた領域であって、ホストのファイルシステム内の領域；
（２）削除された論理ユニット；
（３）仮想ユニット内のいずれかの論理チャンクから解放された物理チャンク；
（４）或るドライブから別のドライブへ移動したデータが格納されていた移動元領域；
（５）特定のパターンのデータ（例えば“０”データ）が繰り返し書き込まれる領域、
が考えられる。対象領域は、前述した不要領域と同じであっても良いし、その不要領域よりも大きくても小さくても良い。対象領域は、例えば、不要領域に基づくＲＡＩＤグループのＲＡＩＤタイプを基に決定される。
【００２２】
ドライブコントローラは、その解放指示に応じて、指定されたアドレスを有する論理ブロック部分に対応した物理ブロック部分を解放可能として管理する。ドライブコントローラは、物理ブロックの全域が解放可能として管理されていれば、その物理ブロックを論理ブロックから解放する。つまり、ドライブコントローラは、その物理ブロックの論理ブロックに対する割当てを解除する。ドライブコントローラは、解放された物理ブロックに対して消去処理を行う。ドライブコントローラは、その物理ブロックのこれまでの消去回数が所定の閾値を超えたか否かを判断する。その判断の結果が否定的であれば、ドライブコントローラは、その物理ブロックを割当て可能な物理ブロック（空きブロック）として管理する。これにより、空きブロックを増やすことができるので、ウェアレベリングの効率の向上が期待できる。なお、上記の判断の結果が肯定的であれば、ドライブコントローラは、その物理ブロックを割当て不可能な物理ブロック（不良ブロック）として管理する。
【００２３】
また、ストレージコントローラは、或るドライブへのライトに失敗し、且つ、その失敗の原因が、そのドライブ内で空きブロックが不足していることであれば、その或るドライブから別のドライブへデータを移動する。そして、ストレージコントローラは、元のドライブに対して、移動されたデータが格納されていた記憶領域のアドレスを指定した解放指示を送信する。
【００２４】
また、ストレージコントローラは、或るドライブ内のフラッシュチップに障害が生じた場合に、その障害が生じたチップ内のデータを、他のドライブ内のデータを基に復元し、復元されたデータを、上記或るドライブ内の別のフラッシュチップに書き込む。これにより、一つのドライブの記憶領域を効率的に使用することができる。
【００２５】
また、ストレージコントローラは、記憶領域が残り少なくなった場合に、管理者に警告を発する。具体的には、例えば、ストレージコントローラは、未割当ての物理チャンクが少なくなった場合に、管理者が使用する計算機に警告を表す情報を出力する。
【００２６】
以下、図面を参照して、本実施形態を詳細に説明する。なお、以下の説明では、ストレージコントローラが外部装置（例えばホスト計算機）から受け付けるコマンドを「要求」と言い、ドライブがストレージコントローラから受け付けるコマンドを「指示」と言う。
【００２７】
図１は、本発明の一実施形態に係る計算機システムの構成例を示す図である。
【００２８】
ストレージシステム１には、外部装置の一種でありＩ／Ｏ（Input/Output）要求を発行するホスト計算機２や、ストレージシステム１を管理する計算機である管理サーバ３が接続される。
【００２９】
ストレージシステム１は、ストレージコントローラ４と、複数のドライブ５とを備える。ドライブ５はＳＳＤ（Solid State Drive）であっても良い。
【００３０】
複数のドライブ５を基に複数のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループが構成されている。ＲＡＩＤグループは、二以上のドライブ５で構成されている。ＲＡＩＤグループには、そのＲＡＩＤグループについて予め定義されたＲＡＩＤタイプに従って、ストレージコントローラ４によりデータが格納される。
【００３１】
ストレージコントローラ４と、各ドライブ５内のドライブコントローラ２２０（図４参照）とによって、例えば、コントローラ１４０が構成されている。
【００３２】
ストレージコントローラ４は、ストレージシステム１の制御を行う一つ以上のマイクロプロセッサ（以下、ＭＰと表記）６と、制御を行うためのデータおよびプログラムを保持する制御メモリ７と、データをキャッシュするためのメモリであるキャッシュメモリ８と、ホスト計算機２とデータを授受する一つ以上のホストアダプタ９と、管理サーバ３と通信する一つ以上の管理ポート１０と、ドライブ５、キャッシュメモリ８、ホストアダプタ９及びＭＰ６などを相互に接続する内部ネットワーク１１とを備える。制御メモリ７とキャッシュメモリ８は同一のメモリとしてもよい。ホスト計算機２からドライブ５に書き込まれるデータ、及び、ドライブ５からホスト計算機２に読みだされるデータは、キャッシュメモリ８に一時記憶される。つまり、ホスト計算機２によって読み書きされるデータは、キャッシュメモリ８を介して、ドライブ５に入出力される。
【００３３】
制御メモリ７は、各論理ユニットに関する情報を含んだ論理ユニット管理情報１２と、ストレージプールに関する情報を含んだプール管理情報１３とを格納する。
【００３４】
ストレージコントローラ４は、複数の論理チャンクで構成されている仮想ユニット（仮想ボリューム）と、プールとを管理する。プールは、複数の物理チャンクを含む。複数の物理チャンクは、複数のＲＡＩＤグループに基づく複数の論理的な記憶領域である。具体的には、例えば、プールが、ＲＡＩＤグループに基づく複数の論理ユニットで構成されており、各論理ユニットが、複数の物理チャンクで構成されている。各物理チャンクは、いずれかのＲＡＩＤグループを構成する二以上のドライブ５に基づいている。物理チャンクには、その物理チャンクの基になっているＲＡＩＤグループについての複数の論理ブロックのうちの二以上の論理ブロックが割り当てられている。ストレージコントローラ４は、ホスト計算機２からライト要求を受けた場合、そのライト要求で指定されているアドレスから特定される論理チャンク（ライト先論理チャンク）に物理チャンクが割り当てられていなければ、プール内の未割当ての物理チャンクをライト先論理チャンクに割当てる。
【００３５】
図２は、論理ユニット管理情報１２の一例を示す図である。
【００３６】
論理ユニット管理情報１２は、論理ユニット毎に存在する。論理ユニット管理情報１２は、プール割当テーブル２１と、割当済セクタビットマップ２３とを含む。
【００３７】
プール割当テーブル２１は、論理ユニット管理情報１２に対応する論理ユニット（以下、図２の説明において「対象論理ユニット」と言う）に対する物理チャンクの割当を管理するためのテーブルである。具体的には、テーブル２１は、対象論理ユニット（仮想ユニット）を構成する各論理チャンクと、各論理チャンクに割り当てられた物理チャンクとの対応関係を表す。物理チャンクを表す情報は、例えば、ＲＡＩＤグループ番号２４と開始アドレス２５とで構成される。物理チャンクが割り当てられていない論理チャンクに対応したＲＡＩＤグループ番号２４および開始アドレス２５は、無効な値（例えばＮＵＬＬ）である。情報２４及び２５について、一つの物理チャンク（以下、この段落において「対象物理チャンク」）を例に採って説明する。ＲＡＩＤグループ番号２４は、対象物理チャンクの基になっているＲＡＩＤグループの番号である。開始アドレス２５は、そのＲＡＩＤグループの記憶空間での、対象物理チャンクの開始アドレスである。ストレージコントローラ４は、以下の（Ａ）及び（Ｂ）：
（Ａ）ホスト計算機２からのアクセス要求で指定されているアドレス；
（Ｂ）（Ａ）のアドレスを有する論理チャンクに割り当てられた物理チャンクのＲＡＩＤグループ番号２４および開始アドレス２５、
を基に所定の計算を行うことで、ドライブ５に指定するアドレス（論理ブロック群におけるアドレス）を算出することができる。
【００３８】
割当済セクタビットマップ２３は、ストレージコントローラ４が対象論理ユニット内の各論理セクタに対してドライブ５の記憶領域を割り当てる必要があるか否かを表すビットマップである。各論理チャンクが、複数のセクタを有しても良いし、各セクタが複数の論理チャンクを有しても良い。つまり、論理チャンクがセクタより大きくても良いし、セクタが論理チャンクより大きくても良い。例えば、ストレージコントローラ４は、セクタ０のアドレスを指定したライト要求を上位装置（ホスト計算機２）から受けた場合、そのセクタ０に対応するビット０（割当済セクタビットマップ２３内のビット）を、ＯＮ（１）に更新する。一方、ストレージコントローラ４は、セクタ０のアドレスを指定した解放要求をホスト計算機２から受けた場合、上記ビット０をＯＦＦ（０）に更新する。以下、ＯＮ（１）になっているビットを「オンビット」と言い、ＯＦＦ（０）になっているビットを「オフビット」と言う。
【００３９】
図３は、プール管理情報１３の一例を示す図である。
【００４０】
プール管理情報１３は、プール毎に存在する。プール管理情報１３は、その情報１３に対応するプール（以下、図３の説明において「対象プール」と言う）内の空きチャンク（未割当ての物理チャンク）を管理する空きチャンクリスト３１と、対象プール内の空きチャンクの個数を格納する空きチャンクカウンタ３２と、対象プールを構成する全物理チャンクの個数を格納する総チャンクカウンタ３３とを含む。空きチャンクリスト３１は、空きチャンクのＲＡＩＤグループ番号３４および開始アドレス３５を並べたリストである。
【００４１】
図４は、ドライブ５の構成例を示す図である。
【００４２】
ドライブ５は、ドライブコントローラ２２０と、フラッシュパッケージ２３０とを有する。フラッシュパッケージ２３０は、複数のフラッシュチップ４３を有する。
【００４３】
ドライブコントローラ２２０は、ドライブの制御を行う一つ以上のプロセッサ（ドライブプロセッサ）４１と、制御を行うためのデータおよびプログラムを保持するメインメモリ４２と、ストレージコントローラ４とデータを授受する一つ以上のポート４４とを備える。
【００４４】
メインメモリ４２は、フラッシュチップ４３に関する情報を含んだフラッシュメモリ管理情報４５を格納する。なお、メインメモリ４２の実装方法は、図４の形態に限らない。例えば、メインメモリ４２は、ドライブプロセッサ４１を含んだ回路に内蔵されていてもよいし、フラッシュパッケージ２３０の一部領域がメインメモリ４２として用いられてもよい。
【００４５】
図５は、フラッシュメモリ管理情報４５の一例を示す。なお、図５では、論理ブロックを「ＬＢ」と略記し、物理ブロックを「ＰＢ］と略記している。
【００４６】
フラッシュメモリ管理情報４５は、ブロック割当テーブル５１と、空きブロックリスト５２と、空きブロックカウンタ５３と、割当済ブロックカウンタ５４と、不良ブロックカウンタ５５と、ブロック消去カウンタリスト５６と、トータル消去回数カウンタ５７と、割当済セクタビットマップ５８とを含む。
【００４７】
ブロック割当テーブル５１は、各論理ブロックと、各論理ブロックに割り当てられた物理ブロックとの対応関係を表す。物理ブロック情報は、例えば、チップ番号５９およびブロック番号６０で構成される。物理ブロックが割り当てられていない論理ブロックに対応する情報５９及び６０は、無効な値（例えばＮＵＬＬ）である。情報５９及び６０について、一つの物理ブロック（以下、この段落において「対象物理ブロック」）を例に採って説明する。チップ番号５９は、対象物理チャンクを含んだフラッシュチップ４３の番号である。ブロック番号６０は、対象物理ブロックを表す番号である。
【００４８】
空きブロックリスト５２は、空きブロック（割当て可能な物理ブロック）のチップ番号６１およびブロック番号６２を並べたリストである。
【００４９】
空きブロックカウンタ５３は、空きブロックの個数を格納するカウンタである。
【００５０】
割当済ブロックカウンタ５４は、論理ブロックに割り当てられている物理ブロックの個数を格納するカウンタである。
【００５１】
不良ブロックカウンタ５５は、不良ブロック（故障や寿命等により使えなくなり割当て不可能になった物理ブロック）の個数を格納するカウンタである。
【００５２】
ブロック消去カウンタリスト５６は、各物理ブロックの消去回数を格納するブロック消去カウンタ６３のリストである。
【００５３】
トータル消去回数カウンタ５７は、当該ドライブ内のトータル消去回数を格納するカウンタである。つまり、カウンタ５７の値（トータル消去回数）は、全てのカウンタ６３の値（消去回数）の合計である。ドライブコントローラ２２０は、ドライブ５内のいずれかの物理ブロックに対して消去処理を行う都度に、その物理ブロックに対応するブロック消去カウンタ６３の値を１増やし、トータル消去回数カウンタ５７の値を１増やす。トータル消去回数カウンタ５７の値は、例えば、後述の移動先ＲＡＩＤグループを判断する際の判断材料の一つとなる。
【００５４】
割当済セクタビットマップ５８は、ドライブ５内の各論理セクタに対して物理的な記憶領域を割り当てる必要があるか否かを表すビットマップである。各論理ブロックが、複数のセクタを有しても良いし、各セクタが複数の論理ブロックを有しても良い。つまり、論理ブロックがセクタより大きくても良いし、セクタが論理ブロックより大きくても良い。例えば、ドライブコントローラ２２０は、セクタ０のアドレスを指定したライト指示を上位装置（ストレージコントローラ４）から受けた場合、そのセクタ０に対応するビット０（割当済セクタビットマップ５８内のビット）を、ＯＮ（１）に更新する。一方、ドライブコントローラ２２０は、セクタ０のアドレスを指定した解放指示（ＵＮＭＡＰ指示）をストレージコントローラ４から受けた場合、上記ビット０をＯＦＦ（０）に更新する。
【００５５】
以下、ストレージコントローラ４から物理ブロックへのアクセスの流れを説明する。なお、ストレージコントローラ４は、どの論理チャンクにどの物理チャンクが割り当てられているかの対応関係（プール割当テーブル２１）を管理している。ストレージコントローラ４は、どの物理チャンクにどの二以上の論理ブロックが割り当てられているかの対応関係（チャンク／ブロック対応関係）を管理しても良い。
【００５６】
ストレージコントローラ４は、ホスト計算機２からライト要求を受けた場合、そのライト要求から特定される論理チャンク（ライト先の論理チャンク）に物理チャンクが割り当てられているか否かをプール割当テーブル２１を基に判断する。その判断の結果が否定的の場合、ストレージコントローラ４は、ライト先の論理チャンクに空きチャンク（未割当ての物理チャンク）を割り当て、割り当てた物理チャンクに、ライト要求に付随するデータを書き込む。
【００５７】
ストレージコントローラ４は、物理チャンクにデータを書き込む場合、その物理チャンクについての情報２４及び２５を基に特定されるアドレスを指定したライト指示を、そのアドレスを管理するドライブコントローラ２２０に送信する。そのライト指示を受けたドライブコントローラ２２０が、ブロック割当テーブル５１（つまりブロック対応関係）を基に、そのライト指示で指定されているアドレスを有する論理ブロック（ライト先の論理ブロック）に物理ブロックが割り当てられているか否かを判断する。その判断の結果が否定的の場合に、ドライブコントローラ２２０は、空きブロックリスト５２を基に空きブロックを選択し、その空きブロックをライト先の論理ブロックに割当て、割り当てた物理ブロック（空きブロック）に、そのライト指示の対象のデータを書き込む。
【００５８】
ストレージコントローラ４は、ホスト計算機２からリード要求を受けた場合、そのリード要求から特定される論理チャンク（リード元の論理チャンク）に割り当てられている物理チャンクをプール割当テーブル２１を基に特定する。ストレージコントローラ４は、特定された物理チャンクからデータを読み出し、読み出したデータをホスト計算機２に送信する。
【００５９】
ストレージコントローラ４は、物理チャンクからデータを読み出す場合、その物理チャンクについての情報２４及び２５を基に特定されるアドレスを指定したリード指示を、そのアドレスを管理するドライブコントローラ２２０に送信する。そのリード指示を受けたドライブコントローラ２２０が、そのリード指示で指定されているアドレスを有する論理ブロックに割り当てられている物理ブロックをブロック割当テーブル５１を基に特定する。ドライブコントローラ２２０が、特定された物理ブロックからデータを読み出し、そのデータをストレージコントローラ４に送信する。
【００６０】
以下、本実施形態で行われる処理を説明する。なお、以下の説明において、ドライブコントローラ２２０が行う処理は、ドライブプロセッサ４１が行い、ストレージコントローラ４が行う処理は、ＭＰ６が行う。
【００６１】
図６は、セクタ解放処理の一例を示すフローチャートである。
【００６２】
ドライブコントローラ２２０は、ストレージコントローラ４から解放指示を受ける（ステップ７１）。解放指示は、解放対象のアドレス範囲を表すパラメータ群を含む。パラメータ群は、例えば、ドライブ５の解放すべき範囲における先頭アドレス（ＬＢＡ（Logical Block Address））と、解放すべき範囲の大きさ（セクタ数）とを含む。
【００６３】
ドライブコントローラ２２０は、その解放指示で指定されているアドレス範囲に含まれる論理セクタに対応するビット（割当済セクタビットマップ５８内のビット）を、ＯＦＦ（０）に更新する（ステップ７２）。
【００６４】
ドライブコントローラ２２０は、論理ブロック内の全ての論理セクタが未割当状態（ＯＦＦ（０））になったか否かを判断する（ステップ７３）。もし、その判断の結果が肯定的であれば（ステップ７３：ＹＥＳ）、ドライブコントローラ２２０は、その論理ブロックに割り当てられている物理ブロック（以下、解放対象ブロック）をその論理ブロックから解放するブロック解放処理を行う（ステップ７４）。
【００６５】
その後、ドライブコントローラ２２０は、ストレージコントローラ４へレスポンスを送信する（ステップ７５）。
【００６６】
図７は、ブロック解放処理（図６のステップ７４）の一例を示すフローチャートである。
【００６７】
ドライブコントローラ２２０は、解放対象ブロックに対して消去処理を行う（ステップ８１）。消去処理は、このタイミングに限らず、別のタイミングで行われても良い。
【００６８】
次に、ドライブコントローラ２２０は、解放対象ブロックのマッピング情報を消去する（ステップ８２）。具体的には、例えば、ドライブコントローラ２２０は、解放対象ブロックに対応した情報５９及び６０（ブロック割当テーブル５１内の情報）をＮＵＬＬに更新する。ドライブコントローラ２２０は、解放対象ブロックについての消去回数に１を加算する（ステップ８３）。
【００６９】
次に、ドライブコントローラ２２０は、解放対象ブロックの消去回数（消去カウンタ６３の値）が上限値を超えたか否かを判断する（ステップ８４）。
【００７０】
ステップ８４の判断の結果が肯定的であれば（ステップ８４：ＹＥＳ）、ドライブコントローラ２２０は、解放対象ブロックを不良ブロックとして管理する。具体的には、ドライブコントローラ２２０は、解放対象ブロックのチップ番号及びブロック番号を不良ブロックリストに追加する（ステップ８５）。なお、不良ブロックリストは、図示しないが、フラッシュメモリ管理情報４５に含まれているリストであって、空きブロックリスト５２と同様の構成を有するリストである。
【００７１】
ステップ８４の判断の結果が否定的であれば（ステップ８４：ＮＯ）、ドライブコントローラ２２０は、解放された物理ブロックを空きブロックとして管理する。具体的には、ドライブコントローラ２２０は、解放された物理ブロックのチップ番号及びブロック番号を空きブロックリスト５２に追加する（ステップ８６）。
【００７２】
さて、ストレージコントローラ４がドライブ５に解放指示を送信する契機の一例として、管理サーバ３がストレージコントローラ４に対して論理ユニットの削除要求を送信したことが考えられる。この場合、ストレージコントローラ４は、削除要求の対象の論理ユニット（仮想ユニット）に割り当てられている全ての物理チャンクを解放する。そして、このチャンク解放処理において、ストレージコントローラ４は、ドライブ５に対して解放指示を送信する。
【００７３】
図８は、論理ユニット削除処理の一例を示すフローチャートである。
【００７４】
ストレージコントローラ４は、論理ユニット削除要求を受けた場合（ステップ９１）、その要求で指定されている論理ユニット（対象論理ユニット）の先頭の論理チャンクを処理対象の論理チャンクとして選択する（ステップ９２）。
【００７５】
次に、ストレージコントローラ４は、処理対象の論理チャンクから物理チャンクを解放するチャンク解放処理（図９参照）を行う（ステップ９３）。
【００７６】
ストレージコントローラ４は、対象論理ユニット内の全ての論理チャンクから物理チャンクが解放されたら（ステップ９４：ＹＥＳ）、処理を終了する。そうでなければ（ステップ９４：ＮＯ）、ストレージコントローラ４は、次の論理チャンクを処理対象の論理チャンクとして選択し（ステップ９５）、ステップ９３からの処理を繰り返す。
【００７７】
図９は、チャンク解放処理（図８のステップ９３）の一例を示すフローチャートである。
【００７８】
ストレージコントローラ４は、解放すべきセクタを決定する（ステップ１０１）。「解放すべきセクタ」とは、処理対象の論理チャンクに含まれる論理セクタであり、具体的には、例えば、割当済セクタビットマップ２３におけるオンビットに対応した論理セクタである。
【００７９】
ストレージコントローラ４は、解放すべき論理セクタのドライブ５におけるアドレス範囲を指定した解放指示を、そのアドレス範囲を管理するドライブ５に送信する（ステップ１０２）。物理チャンクが、その物理チャンクの基になっているＲＡＩＤグループを構成する複数のドライブ５に跨っている場合、ストレージコントローラ４は、それら複数のドライブ５にそれぞれ解放指示を送信する。
【００８０】
その解放指示に応答して、ドライブ５によってセクタ解放処理（図６参照）が行われ、ストレージコントローラ４は、ドライブ５から応答を受ける（ステップ１０３）。
【００８１】
そして、ストレージコントローラ４は、処理対象の論理チャンクに割り当てられていた物理チャンクを未割当として管理する。具体的には、ストレージコントローラ４は、処理対象の論理チャンクに対応したＲＡＩＤグループ番号２４及び開始アドレス２５（プール割当テーブル２１内の情報）をＮＵＬＬに更新する（ステップ１０４）。そして、ストレージコントローラ４は、その論理チャンクに割り当てられていた物理チャンクのＲＡＩＤグループ番号及び開始アドレスを空きチャンクリスト３１に追加する（ステップ１０５）。
【００８２】
以上の説明によれば、論理ユニットが削除されることに限らず、例えば、いずれかの論理チャンクから動的に物理チャンクが解放された場合に、物理チャンクに属する論理ブロックから物理ブロックを解放することも可能である。
【００８３】
さて、次に、ストレージコントローラ４がドライブ５に解放指示を送信する契機の別の例として、ホスト計算機２がストレージコントローラ４に或るアドレス範囲を指定した解放要求（ＵＮＭＡＰ要求）を送信するケースがある。
【００８４】
図１０は、ホスト計算機２からの解放要求に応答してストレージコントローラ４がドライブ５に解放指示を送信する例の説明図である。
【００８５】
具体的には、例えば、ホスト計算機２のファイルシステムが管理する記憶空間からファイルが削除されたとする。この場合、ホスト計算機２（例えばファイルシステム或いはオペレーティングシステム）が、削除されたファイルが記憶されていた領域のアドレス範囲を指定した解放要求を、ストレージシステム１に送信する。つまり、ホスト計算機２が、ホスト計算機２にとって不要な記憶領域のアドレス範囲を指定した解放要求を送信する機能（インターフェース）を有する。これにより、ストレージシステム１に、ホスト計算機２にとって不要な領域を知らしめることができる。
【００８６】
ストレージコントローラ４は、ホスト計算機２から解放要求を受信し、その解放要求に応答して、その解放要求で指定されているアドレス範囲に属する論理セクタ（つまり解放すべきセクタ）を決定する。ストレージコントローラ４は、決定された論理セクタのドライブ５におけるアドレス範囲を指定した解放指示（つまり、削除されたファイルの領域に相当するアドレス範囲を指定した解放指示）を、そのアドレス範囲を管理するドライブ５に送信する。
【００８７】
その解放指示に応答して、ドライブ５によってセクタ解放処理（図６参照）が行われる。すなわち、解放指示で指定されたアドレス範囲に従う、ドライブ５で管理される論理セクタが解放対象として管理され、論理ブロック内の全ての論理セクタが解放対象となっていれば、その論理ブロックから物理ブロックが解放される。
【００８８】
なお、ストレージシステム１は、例えばＮＡＳ（Network Attached Storage）システムであっても良い。その場合、ストレージシステム１は、ホスト計算機２から削除されたファイルの領域を指示される。
【００８９】
図１１は、ホスト計算機２から解放要求を受けたストレージコントローラ４が行う領域解放処理の一例を示すフローチャートである。
【００９０】
ストレージコントローラ４は、ホスト計算機２から解放要求を受ける（ステップ１１１）。
【００９１】
次に、ストレージコントローラ４は、その解放要求で指定されているアドレス範囲に対応したビット（割当済セクタビットマップ２３内のビット）を、ＯＦＦ（０）に更新する（ステップ１１２）。
【００９２】
次に、ストレージコントローラ４は、その解放要求で指定されているアドレス範囲を基に解放すべき論理セクタを決定する（ステップ１１３）。ここで決定される論理セクタは、ホスト計算機２から指定されたアドレス範囲の全域の論理セクタであるとは限らず、そのアドレス範囲の基になっているＲＡＩＤグループのＲＡＩＤタイプ（例えば、ＲＡＩＤ５（３Ｄ＋１Ｐ）、ＲＡＩＤ５（４Ｄ＋１Ｐ））を基に決定される。具体的には、ストレージコントローラ４は、ステップ１１３で、図１９及び図２０を参照して説明する解放範囲修正処理を行う。
【００９３】
次に、ストレージコントローラ４は、ステップ１１３で決定された論理セクタのドライブ５でのアドレス範囲を指定した解放指示を、ドライブ５に送信する（ステップ１１４）。その解放指示に応答して、ドライブ５によってセクタ解放処理（図６参照）が行われ、ストレージコントローラ４は、ドライブ５からレスポンスを受信する（ステップ１１５）。
【００９４】
ストレージコントローラ４は、論理チャンク内の全論理セクタが解放対象か否かを判断する（ステップ１１６）。具体的には、ストレージコントローラ４は、論理チャンクの全論理セクタに対応するビット（割当済セクタビットマップ２３内のビット）がＯＦＦ（０）であるか否かを判断する。
【００９５】
ステップ１１６の判断の結果が肯定的であれば、ストレージコントローラ４は、その論理チャンクについて、前述したチャンク解放処理（図９参照）を行う（ステップ１１７）。
【００９６】
その後、ストレージコントローラ４は、解放要求に対するレスポンスをホスト計算機２へ送信する（ステップ１１８）。
【００９７】
ところで、フラッシュメモリは消去回数が限られているので、使用しているうちに不良ブロックが増えていく。不良ブロックが増えるということは、使用可能な物理ブロックが減るということである。
【００９８】
そこで、或るドライブ５内で使用可能な物理ブロックが枯渇した場合、そのドライブ５から別のドライブへデータが移動され、データの移動元の領域に属する論理ブロックから物理ブロックが解放される。解放された物理ブロックに対して、消去処理が行われ、消去回数が上限値以下であれば、その物理ブロックは空きブロックとされる。空きブロックには、データを読み書きすることが可能である。これにより、ドライブ５の長寿命化が期待できる。
【００９９】
図１２は、空きブロック不足によるライト失敗に応答して行われるデータ移行処理の説明図である。
【０１００】
例えば、ＲＡＩＤグループ１を構成するドライブＡ〜ＤのうちドライブＡの空きブロックが不足しており、空きブロック不足が原因でドライブＡにおいてデータの書き込みに失敗した場合、ドライブＡのドライブコントローラ２２０は、ストレージコントローラ４からのライト指示に対するレスポンスとして、「失敗」のステータスを含んだレスポンスを返す。レスポンスは、「失敗」のステータスの他に、失敗の原因が空きブロックの不足であることを表す情報を含む。レスンポンスが失敗の原因を表す情報を含むことに代えて、ストレージコントローラ４が、ライト失敗の原因を、ドライブ５に別途問い合わせることで取得しても良い。
【０１０１】
ストレージコントローラ４は、ライト失敗範囲を含む物理チャンク（第１の物理チャンク）が割り当てられている論理チャンク（以下、図１２の説明において「対象論理チャンク」と言う）に対し、第１の物理チャンクに代えて、第２の物理チャンクを割り当てる。ライト失敗範囲とは、ライト失敗のレスポンスに対応したライト指示で指定したアドレス範囲（ライト先範囲）であり、具体的には、ドライブＡに基づくアドレス範囲である。第１の物理チャンクは、ＲＡＩＤグループ１に基づく物理チャンク（ソースチャンク）である。第２の物理チャンクは、ＲＡＩＤグループ１とは別のＲＡＩＤグループであるＲＡＩＤグループ２に基づく物理チャンク（デスティネーションチャンク）である。
【０１０２】
ストレージコントローラ４は、第１の物理チャンクから第２の物理チャンクにデータを移動する。具体的には、ストレージコントローラ４は、ドライブＡ〜Ｄから、第１のチャンクにおけるデータのうちキャッシュメモリ８に残っていないデータを読出し、読みだされたデータとドライブＡに書き込まれなかったデータ（例えばキャッシュメモリ８に残っているデータ）とを含んだデータ（第１の物理チャンクに書き込まれるべきデータ）を、第２の物理チャンクに書き込む。
【０１０３】
移動が完了した場合、ストレージコントローラ４は、第１の物理チャンクに対応する論理セクタの解放指示を移動元ドライブＡ〜Ｄに送信する。このとき、解放指示を受けたドライブＡ〜Ｄは、指定されたアドレス範囲に相当する論理セクタを解放対象として管理する。
【０１０４】
なお、この例では、ＲＡＩＤグループ１（移動元ＲＡＩＤグループ）は、ライト失敗範囲を有するＲＡＩＤグループであるが、トータル消去回数５７が所定の閾値を超えたドライブを有するＲＡＩＤグループであってもよい。
【０１０５】
図１３は、ライト失敗を契機に行われるライトエラーハンドリング処理の一例を示すフローチャートである。以下、ライト失敗のレスポンスの送信元のドライブ５を「エラードライブ５」と言い、エラードライブ５を含んだＲＡＩＤグループを「ＲＡＩＤグループ１」とい言う。
【０１０６】
ストレージコントローラ４は、ライト失敗のレスポンスをエラードライブ５から受け、ライト失敗の原因を判断する（ステップ１３２）。例えば、レスポンスに含まれているエラー原因情報を解析する、或いは、エラードライブ５に別途問合せを出すことにより、ライト失敗の原因を特定することができる。
【０１０７】
ライト失敗の原因がエラードライブ５での空きブロックの不足である場合（ステップ１３２：ＹＥＳ）ストレージコントローラ４は、ＲＡＩＤグループ２に含まれる空きチャンク（未割当ての物理チャンク）を、移動先として選択する（ステップ１３３）。ＲＡＩＤグループ２は、物理チャンク内のデータを記憶するために必要な空きブロック数以上の空きブロックを有し、且つ、ＲＡＩＤグループ１以外のＲＡＩＤグループのうちトータル消去回数が最も少ないＲＡＩＤグループである、具体的には、例えば、ストレージコントローラ４は、ＲＡＩＤグループ１以外のＲＡＩＤグループの空きブロック数とトータル消去回数とを調べ、空きブロック数が必要ブロック数（物理チャンク内のデータを格納するために必要なブロック）数より多いＲＡＩＤグループのうち、トータル消去回数が最も少ないＲＡＩＤグループに基づく空きチャンクを、移動先として選択する。なお、「ＲＡＩＤグループの空きブロック数」とは、そのＲＡＩＤグループに属する各ドライブの空きブロックカウンタ５３の値のうち最も小さい値に、ＲＡＩＤグループに属するドライブの台数を掛けた値のことである。「ＲＡＩＤグループのトータル消去回数」とは、そのＲＡＩＤグループに属する各ドライブ５のトータル消去回数カウンタ５７の値のうち最も大きい値のことであるとする。
【０１０８】
次に、ストレージコントローラ４は、ライト失敗範囲を含む物理チャンク（移動元チャンク）から、ステップ１３３で選択した物理チャンク（移動先チャンク）へデータを移動する（ステップ１３４）。このとき、移動されるデータには、ライトに失敗したデータも含まれている。詳しくは、図１２を参照して説明した通りである。
【０１０９】
ストレージコントローラ４は、プール割当テーブル２１を更新する（ステップ１３５）。具体的には、ストレージコントローラ４は、移動元チャンクに割り当てられている論理チャンクに対応したＲＡＩＤグループ番号２４及び開始アドレス２５を、移動元チャンクのＲＡＩＤグループ番号及び開始アドレスから、移動先チャンクのＲＡＩＤグループ番号及び開始アドレスに更新する。
【０１１０】
そして、ストレージコントローラ４は、ＲＡＩＤグループ１（移動元のＲＡＩＤグループ）に基づく全ての空きチャンクを、空きチャンクリスト２２から抹消する（ステップ１３６）。これにより、ＲＡＩＤグループ１に基づく物理チャンクが今後論理チャンクに割り当てられることを防ぐことができる。ＲＡＩＤグループ１に対する書き込みの失敗は、空きブロック不足が原因であったので、このステップ１３６の処理により、今後再び空きブロック不足が原因で書き込みに失敗する可能性を軽減することができる。なお、ステップ１３６は、図１８のステップ１９１に相当する。それ故、ステップ１３６が行われると、図１８のステップ１９２以降が行われる。これにより、ステップ１３６を契機としてプール容量が枯渇した場合、管理者に警告を発することができる。
【０１１１】
次に、ストレージコントローラ４は、移動元チャンクと、ステップ１３６で登録を抹消した空きチャンク（抹消チャンク）とに基づく全てのドライブ５（ＲＡＩＤグループ１内のドライブ５）に対し、移動元チャンク及び抹消チャンクのドライブ５におけるアドレス範囲を指定した解放指示を送信する（ステップ１３７）。これにより、各ドライブ５で、セクタ解放処理（図６参照）が行われ、ストレージコントローラ４は、これらのドライブ５から、解放指示に対するレスポンスを受領する（ステップ１３８）。
【０１１２】
ＲＡＩＤグループ１において解放され空きブロックとされた物理ブロックは、ＲＡＩＤグループ１に基づくいずれかの論理ブロックに割当て可能である。例えば、ＲＡＩＤグループ１に基づくいずれかの割当て済み物理チャンクに対してデータの書き換えが頻繁に行われた場合、その物理チャンクに基づく論理ブロックに、ＲＡＩＤグループ１内の空きブロックの割当てが可能である。
【０１１３】
ところで、本実施形態では、或るドライブ５内のフラッシュチップ４３が故障した場合、以下に説明するチップ障害ハンドリング処理によって、障害が生じたフラッシュチップ（以下、障害チップ）４３に格納されていたデータを復元することができる。
【０１１４】
図１４は、ＲＡＩＤ５（３Ｄ＋１Ｐ）のＲＡＩＤグループについてのフラッシュメモリデータ回復処理の説明図である。
【０１１５】
ドライブＤ内の或るフラッシュチップ４３が故障した場合、ストレージコントローラ４は、障害チップ４３に格納されている各セクタデータ（セクタサイズのデータ）について、
（ａ）障害チップ４３内のデータを含んだデータセット内の他のデータを記憶する、他のドライブＡ〜Ｃ内の良品チップ（故障の生じていないチップ）から、データを読み出す；
（ｂ）読みだされたデータを用いたパリティ演算を行うことで、障害チップ４３内のデータを復元する；
（ｃ）復元したデータを、障害チップ４３を含んだドライブＤ内のいずれかの良品チップに格納する、
を行う。なお、「データセット」は、ＲＡＩＤグループに書き込まれるデータの単位である。例えば、ＲＡＩＤ５であれば、複数のユーザデータとそれに基づいて生成されたパリティデータとを含んだデータである。
【０１１６】
ところで、論理アドレス（ＬＢＡ）と物理アドレス（フラッシュメモリチップ番号／ブロック番号）との対応関係は、ドライブ５内で管理されているため、或るフラッシュチップ４３が故障した時点では、ストレージコントローラ４は、どの論理アドレスのデータが失われたか分からない。そこで、ストレージコントローラ４は、
（方法１）データが失われた範囲をドライブ５に問い合わせ、回答された範囲について、データ復元処理を行う；
（方法２）ドライブ５全体に対してデータ復元処理を行う；
（方法３）ドライブ５の先頭から順にリードし、リードできなかった箇所について、データ復元処理を行う、
の少なくとも一つの方法に従って、フラッシュメモリデータ回復処理を行う。
【０１１７】
図１５は、方法１に従うフラッシュメモリデータ回復処理の一例を示すフローチャートである。
【０１１８】
ストレージコントローラ４は、論理アドレス空間上の故障範囲、すなわち、失われたデータのアドレス範囲（先頭アドレスおよびセクタ数）を、障害チップを含むドライブ（図１４の例ではドライブＤに相当、以下、「不良ドライブ」と呼ぶ）から取得する（ステップ１５１）。このとき、すべての故障範囲のリストを一度に取得するような方式も考えられるが、この例では、１箇所ずつ故障範囲が取得される。
【０１１９】
もし、不良ドライブが有する障害チップ内の全データが回復済みであれば（ステップ１５２：ＹＥＳ）、ストレージコントローラ４からの問い合わせに対し、不良ドライブ内のドライブコントローラ２２０は、例えばＮＵＬＬを返す。それを受けたストレージコントローラ４は、データ復元が完了したことを認識する。全てのデータを復元したら、ストレージコントローラ４は、このフラッシュメモリデータ回復処理を終了する。
【０１２０】
一方、故障範囲が残っている場合（ステップ１５２：ＮＯ）、ストレージコントローラ４は、不良ドライブを含んだＲＡＩＤグループ内の他のドライブから、データ（ユーザデータ又はパリティデータ）を読み出す（ステップ１５３）。
【０１２１】
次に、ストレージコントローラ４は、読み出したデータを用いたパリティ演算を行うことにより、失われたデータを復元する（ステップ１５４）。
【０１２２】
次に、ストレージコントローラ４は、復元したデータを不良ドライブに書き込む（ステップ１５５）。このとき、不良ドライブ内のドライブコントローラ２２０は、復元したデータを、良品チップ（正常なフラッシュチップ）内の空きブロックに書き込む。
【０１２３】
ただし、不良ドライブ内には、この書き込みに必要な空きブロックが残っておらず、それ故、書き込みに失敗する可能性がある。
【０１２４】
もし、書き込みに失敗したならば（ステップ１５６：ＹＥＳ）、図１３に示したライトエラーハンドリング処理が行われる（ステップ１５７）。こうすることで、データを適宜別のＲＡＩＤグループへ移すことができる。
【０１２５】
図１６は、方法２に従うフラッシュメモリデータ回復処理の一例を示すフローチャートである。方法２によれば、不良ドライブ５全体についてデータ復元を行う。
【０１２６】
ストレージコントローラ４は、不良ドライブの全域を指定した解放指示を不良ドライブに送信する（ステップ１６２）。これにより、不良ドライブにおいてセクタ解放処理（図６参照）が行われ、その結果、不良ドライブの全領域（論理アドレス０から最終論理アドレスまで）に割り当てられていた全ての物理ブロックが解放される。
【０１２７】
次に、ストレージコントローラ４は、不良ドライブの先頭の物理ブロックを処理対象として選択する（ステップ１６３）。
【０１２８】
次に、ストレージコントローラ４は、不良ドライブを含んだＲＡＩＤグループ内の他のドライブから、ステップ１６３で選択した処理対象の物理ブロック内のデータを含んだデータセットに含まれるデータ（ユーザデータ又はパリティデータ）を読み出す（ステップ１６４）。
【０１２９】
次に、ストレージコントローラ４は、読み出したデータを用いたパリティ演算を行うことにより、失われたデータ（ステップ１６３で選択した処理対象の物理ブロック内のデータ）を復元する（ステップ１６５）。
【０１３０】
次に、ストレージコントローラ４は、復元したデータを不良ドライブに書き込む（ステップ１６６）。もし、書き込みに失敗したならば（ステップ１６７：ＹＥＳ）、ライトエラーハンドリング処理（図１３参照）が行われる（ステップ１６８）。
【０１３１】
ストレージコントローラ４は、不良ブロックにおける次の物理ブロックを処理対象として選択する（ステップ１６９）。
【０１３２】
不良ブロック内の全ての物理ブロックについてステップ１６４以降が行われた場合（ステップ１６９で物理ブロックを選択できなかった場合）（ステップ１７０：ＹＥＳ）、このフラッシュメモリデータ回復処理は完了となる。まだ、処理すべき物理ブロックが残っていた場合（ステップ１６９で物理ブロックを選択できた場合）（ステップ１７０：ＮＯ）、ステップ１６４以降の処理が行われる。
【０１３３】
図１７は、方法３に従うフラッシュメモリデータ回復処理の一例を示すフローチャートである。方法３によれば、ストレージコントローラ４は、不良ドライブの先頭から順にリードを行い、リードできなかった箇所についてデータ復元処理を行う。
【０１３４】
ストレージコントローラ４は、不良ドライブから、ブロックサイズを表す情報を取得する（ステップ１７１）。
【０１３５】
次に、ストレージコントローラ４は、不良ドライブの先頭の物理ブロックを処理対象として選択する（ステップ１７２）。
【０１３６】
次に、ストレージコントローラ４は、不良ドライブ内の処理対象の物理ブロックからデータをリードする（ステップ１７３）。
【０１３７】
もし、リードに失敗したならば（ステップ１７４：ＹＥＳ）、ストレージコントローラ４は、ステップ１７５〜１７７を行う。すなわち、ストレージコントローラ４は、不良ドライブを含んだＲＡＩＤグループ内の他のドライブから、ステップ１７３で選択した処理対象の物理ブロック内のデータを含んだデータセットに含まれるデータ（ユーザデータ又はパリティデータ）を読み出す（ステップ１７５）。ストレージコントローラ４は、読み出したデータを用いたパリティ演算を行うことにより、失われたデータ（ステップ１７３で選択した処理対象の物理ブロック内のデータ）を復元する（ステップ１７６）。ストレージコントローラ４は、復元したデータを不良ドライブに書き込む（ステップ１７７）。もし、その書き込みに失敗したならば（ステップ１７８：ＹＥＳ）、ライトエラーハンドリング処理（図１３参照）が行われる（ステップ１７９）。
【０１３８】
ストレージコントローラ４は、ステップ１７４：ＮＯ、又は、ステップ１７８：ＮＯの場合、不良ドライブ内の次の物理ブロックを処理対象として選択する（ステップ１８０）。
全ての物理ブロックに対して処理が行われた場合（ステップ１８０で物理ブロックを選択できなかった場合）（ステップ１８１：ＹＥＳ）、このフラッシュメモリデータ回復処理は完了となる。まだ処理すべきブロックが残っていた場合（ステップ１８０で物理ブロックを選択できた場合）（ステップ１８１：ＮＯ）、ステップ１７３以降の処理が行われる。
【０１３９】
ところで、ドライブ５内の空きブロック不足やフラッシュチップ４３の故障に伴い、空きチャンクリスト２２から空きチャンクの登録が抹消されることがある。このため、プールの容量が減少する。空きチャンクが無くなると、物理チャンクの割当ができず、それ故、ホスト計算機２からのライト要求に付随するデータを記憶できなくなる可能性がある。そうなる前に、プールの容量を増やす（空きチャンクを増やす）ことが望ましい。
【０１４０】
そこで、ストレージコントローラ４は、空きチャンクの抹消時にプール使用率（＝プール使用量／プール容量）を計算し、算出されたプール使用率が所定の閾値を超えた場合、管理サーバ３に警告を送信する。なお、「プール容量」とは、プールに登録された物理チャンクの総容量である。「プール使用量」とは、プールに登録された物理チャンクのうち論理チャンクに割り当てられている物理チャンクの総容量である。プール使用率を計算する契機は、前述のもののほか、プール使用量が増えたときがあっても良い。
【０１４１】
図１８は、空きチャンク抹消処理の一例を示すフローチャートである。
【０１４２】
ストレージコントローラ４は、空きチャンクリスト２２から、登録抹消対象の物理チャンクのエントリを消す（ステップ１９１）。
【０１４３】
次に、ストレージコントローラ４は、プール容量から、抹消した物理チャンクの容量を差し引く（ステップ１９２）。
【０１４４】
次に、ストレージコントローラ４は、プール使用率を計算する（ステップ１９３）。
【０１４５】
算出されたプール使用率が所定の閾値を超えている場合（ステップ１９４：ＹＥＳ）、ストレージコントローラ４は、管理サーバ３に警告を送信する（ステップ１９５）。
【０１４６】
さて、ストレージシステム１において、複数のドライブのデータ（ユーザデータ）を用いてパリティデータ（例えばエラー訂正コード）が作成される場合（例えば、ＲＡＩＤ５やＲＡＩＤ６の場合）、解放範囲を決定する上で、次のような工夫が考えられる。
【０１４７】
例えば、或るユーザデータＤ１、Ｄ２及びＤ３からパリティデータＰ１が作られ、各ユーザデータＤ１〜Ｄ３およびパリティデータＰ１が、４つのドライブ（一つのＲＡＩＤグループ）に格納されるとする。また、解放された領域に対するリード指示をドライブ５が受けた場合、そのドライブ５が返すデータは、不定であるとする。そして、例えば、ホスト計算機２からの解放要求に従って、Ｄ１が格納されている領域のみを解放し、その後に、Ｄ２を格納したドライブが故障した場合を考える。このとき、ストレージコントローラ４は、ユーザデータＤ１及びＤ３とパリティデータＰ１とを三つのドライブからリードしてユーザデータＤ２を復元しようとするが、ユーザデータＤ１は不定なので、誤ったデータが作られるおそれがある。
【０１４８】
したがって、データの整合性を保つためには、データセットに含まれる全てのユーザデータが格納された論理セクタ（論理ユニットにおける論理セクタ）が解放された場合にのみ当該データセットが格納された論理セクタ（ドライブが管理する論理セクタ）が解放対象とされるよう、解放範囲を修正する必要がある。
【０１４９】
図１９は、解放範囲の修正の一例の説明図である。なお、この図では、ＲＡＩＤ５（３Ｄ＋１Ｐ）の例を示しているが、他のＲＡＩＤタイプ（ＲＡＩＤレベル、及び／又は、ＲＩＤグループを構成するドライブ数）でも同様の方法を適用することができる。
【０１５０】
ＲＡＩＤグループの記憶空間は、複数のストライプ列で構成されている。一つのストライプ列は、そのＲＡＩＤグループを構成する複数のドライブにそれぞれ対応した複数のストライプで構成されている。図１９の例によれば、一つのストライプ列は、四つのストライプで構成されている。一つのストライプが、一つのドライブに基づいている。各ストライプには、ユーザデータ又はパリティデータが格納される。
【０１５１】
以下、パリティデータの基になる複数のユーザデータが格納される複数のストライプに相当する領域を「パリティサイクル領域」という。図１９の例によれば、三つのストライプ毎にパリティデータが作られるため、パリティサイクル領域のサイズは、ストライプサイズの３倍である。
【０１５２】
例えば、ホスト計算機２からの解放要求で指定されているアドレス範囲が、パリティサイクル領域の範囲の境界に合っていない場合、ストレージコントローラ４は、その解放範囲をパリティサイクルの境界に合うように補正する。すなわち、ホスト計算機２から指定された解放範囲を解放範囲Ａとした場合、ドライブ５に指定する解放範囲Ｂは、解放範囲Ａ内の先頭のパリティサイクル領域の先頭のセクタから、解放範囲Ａ内の末尾のパリティサイクルの末尾のセクタまでである。
【０１５３】
図２０は、解放範囲修正処理の一例を示すフローチャートである。
【０１５４】
まず、ストレージコントローラ４は、先頭のアドレスを、パリティサイクル領域の境界に合うように補正する（ステップ２１１）。具体的には、ホスト計算機２から指定された解放範囲の先頭アドレスをＳ、パリティサイクル領域のサイズをＰとすると、修正された先頭アドレスＳ’は、次の式（１）、
Ｓ’＝ｉｎｔ（（Ｓ＋（Ｐ−１））／Ｐ）× Ｐ      ・・・（１）
で求められる。ただし、ｉｎｔ（Ａ）は、Ａを超えない最大の整数を表す。
【０１５５】
次に、ストレージコントローラ４は、終端のアドレスを、パリティサイクル領域の境界に合うように補正する（ステップ２１２）。具体的には、ホスト計算機２から指定された解放範囲の終端アドレスをＥ、パリティサイクル領域のサイズをＰとすると、修正された終端アドレスＥ’は、次の式（２）、
Ｅ’＝ｉｎｔ（（Ｅ＋１）／Ｐ）× （Ｐ−１）      ・・・（２）
で求められる。
【０１５６】
次に、ストレージコントローラ４は、修正された先頭アドレスＳ’から修正された終端アドレスＥ’までに対応する各ドライブ上のセクタと、この範囲のデータに対応するパリティデータが格納された各ドライブ上のセクタとを、解放すべきセクタとして選択する（ステップ２１３）。ここで選択されたセクタに相当するアドレスを指定した解放指示が、ストレージコントローラ４からドライブ５に送信される。
【０１５７】
ところで、図１４等を参照して、フラッシュチップ４３が故障した場合に行われるフラッシュメモリデータ回復処理を説明したが、故障の原因が、フラッシュチップ４３の経年変化（ブロック消去による劣化を含む）やドライブ５内の共通部品に起因するものであった場合は、復元したデータを不良ドライブ５へ格納しても、再び故障が起こるおそれがある。
【０１５８】
そこで、フラッシュチップ４３の偶発的な故障以外の場合は、不良ドライブとは別のドライブ（例えば、予め搭載されているスペアドライブのような新しいドライブ）に、復元されたデータが格納されてもよい。
【０１５９】
図２１は、データ回復処理の一例を示すフローチャートである。
【０１６０】
このデータ回復処理によれば、すでに説明したフラッシュメモリデータ回復処理を行うか、或いは、その処理を行わず別の処理を行うかが判断される。
【０１６１】
まず、ストレージコントローラ４は、ドライブに起こった故障が、フラッシュチップ４３の偶発的故障であったか否かを判断する（ステップ２２１）。具体的には、例えば、ストレージコントローラ４は、下記（Ｘ）及び（Ｙ）：
（Ｘ）不良ドライブの消去回数が所定の閾値を超えたか否か；
（Ｙ）不良ドライブの製造年月日から一定の期間が経過したか否か、
のうちの少なくとも一つの結果が肯定的であれば、偶発的故障ではないと判断する。
【０１６２】
ステップ２２１の判断の結果が肯定的の場合（ステップ２２１：ＹＥＳ）、前述したフラッシュメモリフラッシュメモリデータ回復処理（図１５〜図１７のいずれかの処理）が行われる（ステップ２２２）。
【０１６３】
一方、ステップ２２１の判断の結果が否定的の場合（ステップ２２１：ＮＯ）、ストレージコントローラ４は、不良ドライブ内のすべてのデータを、不良ドライブを含んだＲＡＩＤグループ内の他のドライブに格納されたデータを用いて復元し、復元したデータを、新しいドライブに書き込む（ステップ２２３）。
【０１６４】
さて、以上の説明によれば、物理ブロックの解放の契機として幾つかの契機があるが、上記の契機に限らず、他の契機を採用可能である。例えば、ホスト計算機２から解放要求という明示的な要求を受けた契機に限らず、特定のパターンのデータ（以下、パターンデータ）が繰り返し書き込まれることを意味する非明示的な要求を受けた場合であっても、物理ブロックの解放を行うことができる。ここで言う非明示的な要求は、パターンデータが繰り返し書き込まれることになる通常のライト要求であっても良いし、パターンデータを繰り返し書き込むことを明示したライトセイム要求（例えばＳＣＳＩコマンドにおけるＷＲＩＴＥ  ＳＡＭＥコマンド）であってもよい。ライトセイム要求とは、指定した領域全体に、指定したパターンデータ（例えば全ビット０）を書かせる要求である。例えば、実チャンクが割り当てられていない論理チャンクのアドレスを指定したリード要求に対し、ストレージコントローラ４が全ビット０のデータを返送すると決めておけば、ライトセイム要求等によって物理チャンク内のデータが全ビット０になったときに、ストレージコントローラ４は、その物理チャンクを解放することができる。ドライブ５のブロックに関しても同様のことが可能である。例えば、フラッシュメモリ管理情報４５に割当済セクタビットマップ５８を含めるとしたが、ステップ７３において割当済セクタビットマップ５８を調べる代わりに、当該ブロック内のデータが全てゼロであるか否かを調べるようにすれば、割当済セクタビットマップ５８を省くこともできる。
【０１６５】
以上、本実施形態によれば、効率的に空きブロックが増えていく。これにより、ウェアレベリングの効率の向上が期待できる。
【０１６６】
以上、本発明の一つの実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【０１６７】
例えば、ドライブコントローラ２２０は、ドライブ５の外に設けられても良い。その場合、ドライブコントローラ２２０の数は、フラッシュパッケージ２３０の数よりも多くても少なくても良い。具体的には、例えば、Ｘ個（Ｘは二以上の整数）のフラッシュパッケージ２３０につき一つのドライブコントローラ２２０が設けられても良い。この場合、一つのドライブコントローラ２２０は、Ｘ個のフラッシュパッケージ２３０のそれぞれについて、論理アドレスと物理アドレスとの対応関係などを管理する。
【０１６８】
また、例えば、ＲＡＩＤグループ間のデータ移動（チャンク単位のデータ移動）は、ストレージコントローラ４を介することなく行われても良い。具体的には、例えば、ストレージコントローラ４が、移動元アドレス及び移動先アドレスを、移動元及び／又は移動先に対応したドライブコントローラ２２０に通知し、移動元に対応したドライブコントローラ２２０と移動先に対応したドライブコントローラ２２０との間で、ストレージコントローラ４を介することなく、移動元チャンクに対応した論理ブロックに割り当てられている物理ブロック内のデータが、移動先チャンクに対応する論理ブロックに割り当てられる物理ブロックに移動されても良い。
【符号の説明】
【０１６９】
１：ストレージシステム
【図１】
0005342014.tif 000002
【図２】
0005342014.tif 000003
【図３】
0005342014.tif 000004
【図４】
0005342014.tif 000005
【図５】
0005342014.tif 000006
【図６】
0005342014.tif 000007
【図７】
0005342014.tif 000008
【図８】
0005342014.tif 000009
【図９】
0005342014.tif 000010
【図１０】
0005342014.tif 000011
【図１１】
0005342014.tif 000012
【図１２】
0005342014.tif 000013
【図１３】
0005342014.tif 000014
【図１４】
0005342014.tif 000015
【図１５】
0005342014.tif 000016
【図１６】
0005342014.tif 000017
【図１７】
0005342014.tif 000018
【図１８】
0005342014.tif 000019
【図１９】
0005342014.tif 000020
【図２０】
0005342014.tif 000021
【図２１】
0005342014.tif 000022