(57)【要約】【課題】記憶デバイスとして不揮発性メモリを用いたときに特有の問題について、性能劣化を防止しながら有効に対応し得るストレージシステム及びその制御方法を提案する。【解決手段】ストレージシステムに、１又は複数の不揮発性メモリチップを有する複数のメモリモジュールと、各メモリモジュールに対するデータの読み書きを制御するコントローラとを設け、メモリモジュールが、自メモリモジュール内の不揮発性メモリチップに障害が発生したときに、当該不揮発性メモリに格納されているデータのコピー先とする不揮発性メモリチップを決定し、障害が発生した不揮発性メモリチップに格納されていたデータをコピー先として決定した不揮発性メモリチップにコピーするようにした。【選択図】図１６
2008191966.tif 000002
【特許請求の範囲】
【請求項１】
上位装置にデータを読み書きするための記憶領域を提供するストレージシステムにおいて、
それぞれ前記記憶領域を提供する１又は複数の不揮発性メモリチップを有する複数のメモリモジュールと、
各前記メモリモジュールに対するデータの読み書きを制御するコントローラと
を備え、
前記メモリモジュールは、
自メモリモジュール内の前記不揮発性メモリチップに障害が発生したときに、当該不揮発性メモリに格納されているデータのコピー先とする前記不揮発性メモリチップを決定し、障害が発生した前記不揮発性メモリチップに格納されていた前記データをコピー先として決定した前記不揮発性メモリチップにコピーする
ことを特徴とするストレージシステム。
【請求項２】
前記コントローラは、ハードディスクドライブと接続するためのアダプタを備え、
各前記メモリモジュールは、前記コントローラの前記アダプタと接続するためのインタフェースを備える
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記メモリモジュールは、
前記不揮発性メモリチップ内のデータ書込み回数又はエラー回数が当該データ書込み回数又はエラー回数についてそれぞれ予め定められた閾値を超えたブロックを登録し、登録したブロック数が当該ブロック数について予め定められた閾値を超えた前記不揮発性メモリを、障害を有する不揮発性メモリとして登録する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項４】
前記メモリモジュールは、
自メモリモジュール内に存在するスペアの前記不揮発性メモリチップを管理するための第１の管理情報を保持し、
前記障害が発生した不揮発性メモリに格納されているデータのコピー先とする前記他の不揮発性メモリチップを前記第１の管理情報に基づいて決定し、
前記障害が発生した不揮発性メモリに格納されているデータを、必要に応じて修復しながら、コピー先として決定した前記不揮発性メモリチップにコピーする
ことを特徴とする請求項１に記載のストレージシステム。
【請求項５】
前記コントローラは、
スペアの前記メモリモジュールを管理するための第２の管理情報を保持し、
前記メモリモジュールは、
前記障害が発生した不揮発性メモリに格納されているデータのコピー先とする前記スペアのメモリジュール及び当該メモリモジュール内の前記不揮発性メモリチップを前記第２の管理情報に基づいて決定し、
前記障害が発生した不揮発性メモリに格納されているデータを、必要に応じて修復しながらコピー先として決定した前記スペアのメモリモジュール内のコピー先として決定した前記不揮発性メモリチップにコピーする
ことを特徴とする請求項１に記載のストレージシステム。
【請求項６】
前記ホストからの前記データは、同じグループを構成する複数の前記不揮発性メモリチップ内に、冗長性をもたせてかつ分離されて格納され、
前記メモリモジュールは、
自メモリモジュール内の各前記不揮発性メモリチップが属するグループを管理するための第３の管理情報を保持し、いずれかの当該不揮発性メモリチップに障害が発生したときに、前記第３の管理情報に基づいて、当該不揮発性メモリチップと同じ前記グループを構成する各前記不揮発性メモリから必要なデータを取得し、取得した前記データに基づいて、前記障害が発生した不揮発性メモリチップに格納されていたデータを修復する
ことを特徴とする請求項４に記載のストレージシステム。
【請求項７】
前記ホストからの前記データは、同じグループを構成する複数の前記不揮発性メモリチップ内に、冗長性をもたせてかつ分離されて格納され、
前記メモリモジュールは、
自メモリモジュール内の各前記不揮発性メモリチップが属するグループを管理するための第３の管理情報を保持し、いずれかの当該不揮発性メモリチップに障害が発生したときに、前記第３の管理情報に基づいて、当該不揮発性メモリチップと同じ前記グループを構成する各前記不揮発性メモリから必要なデータを取得し、取得した前記データに基づいて、前記障害が発生した不揮発性メモリチップに格納されていたデータを修復する
ことを特徴とする請求項５に記載のストレージシステム。
【請求項８】
上位装置にデータを読み書きするための記憶領域を提供するストレージシステムの制御方法において、
前記ストレージシステムは、
それぞれ前記記憶領域を提供する１又は複数の不揮発性メモリチップを有する複数のメモリモジュールと、
各前記メモリモジュールに対するデータの読み書きを制御するコントローラと
を有し、
前記メモリモジュールが、自メモリモジュール内の前記不揮発性メモリチップに障害が発生したときに、当該不揮発性メモリに格納されているデータのコピー先とする前記不揮発性メモリチップを決定する第１のステップと、
前記メモリモジュールが、前記障害が発生した不揮発性メモリチップに格納されていた前記データをコピー先として決定した前記不揮発性メモリチップにコピーする第２のステップと
を備えることを特徴とするストレージシステムの制御方法。
【請求項９】
前記メモリモジュールは、
前記不揮発性メモリチップ内のデータ書込み回数又はエラー回数が当該データ書込み回数又はエラー回数についてそれぞれ予め定められた閾値を超えたブロックを登録し、登録したブロック数が当該ブロック数について予め定められた閾値を超えた前記不揮発性メモリを、障害を有する不揮発性メモリとして登録する
ことを特徴とする請求項８に記載のストレージシステムの制御方法。
【請求項１０】
前記メモリモジュールは、
自メモリモジュール内に存在するスペアの前記不揮発性メモリチップを管理するための第１の管理情報を保持し、
前記第１のステップでは、
前記メモリモジュールは、前記障害が発生した不揮発性メモリに格納されているデータのコピー先とする前記他の不揮発性メモリチップを前記第１の管理情報に基づいて決定し、
前記第２のステップでは、
前記メモリモジュールは、前記障害が発生した不揮発性メモリに格納されているデータを、必要に応じて修復しながら、コピー先として決定した前記不揮発性メモリチップにコピーする
ことを特徴とする請求項８に記載のストレージシステムの制御方法。
【請求項１１】
前記コントローラは、
スペアの前記メモリモジュールを管理するための第２の管理情報を保持し、
前記第１のステップでは、
前記メモリモジュールは、前記障害が発生した不揮発性メモリに格納されているデータのコピー先とする前記スペアのメモリジュール及び当該メモリモジュール内の前記不揮発性メモリチップを前記第２の管理情報に基づいて決定し、
前記第２のステップでは、
前記障害が発生した不揮発性メモリに格納されているデータを、必要に応じて修復しながらコピー先として決定した前記スペアのメモリモジュール内のコピー先として決定した前記不揮発性メモリチップにコピーする
ことを特徴とする請求項８に記載のストレージシステムの制御方法。
【請求項１２】
前記ホストからの前記データは、同じグループを構成する複数の前記不揮発性メモリチップ内に、冗長性をもたせてかつ分離されて格納され、
前記メモリモジュールは、
自メモリモジュール内の各前記不揮発性メモリチップが属するグループを管理するための第３の管理情報を保持し、
前記第２のステップでは、
前記メモリモジュールは、自メモリモジュール内の前記不揮発性メモリチップに障害が発生したときに、前記第３の管理情報に基づいて、当該不揮発性メモリチップと同じ前記グループを構成する各前記不揮発性メモリから必要なデータを取得し、取得した前記データに基づいて、前記障害が発生した不揮発性メモリチップに格納されていたデータを修復する
ことを特徴とする請求項１０に記載のストレージシステムの制御方法。
【請求項１３】
前記ホストからの前記データは、同じグループを構成する複数の前記不揮発性メモリチップ内に、冗長性をもたせてかつ分離されて格納され、
前記メモリモジュールは、
自メモリモジュール内の各前記不揮発性メモリチップが属するグループを管理するための第３の管理情報を保持し、
前記第２のステップでは、
前記メモリモジュールは、自メモリモジュール内の前記不揮発性メモリチップに障害が発生したときに、前記第３の管理情報に基づいて、当該不揮発性メモリチップと同じ前記グループを構成する各前記不揮発性メモリから必要なデータを取得し、取得した前記データに基づいて、前記障害が発生した不揮発性メモリチップに格納されていたデータを修復する
ことを特徴とする請求項１１に記載のストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びその制御方法に関し、例えば記憶デバイスとしてフラッシュメモリを採用したストレージシステムに適用して好適なものである。
【背景技術】
【０００２】
従来、ストレージシステムにおける記憶デバイスとして、半導体メモリやハードディスクドライブが用いられている。半導体メモリは、アクセス速度が速く、小型、低消費電力及び高信頼性という利点を有する反面、単位ビット当たりのコストが高価という欠点を有する。一方、ハードディスクドライブは、半導体メモリに比べてアクセス速度が遅く、大型、高消費電力及び低信頼性という欠点がある反面、単位ビット当たりのコストが半導体メモリに比べて格段的に安価という利点を有する。
【０００３】
このため、近年では、ストレージシステムにおける記憶デバイスとしてはハードディスクドライブが主流となっており、これに伴ってハードディスクドライブに関する技術革新が相次いで行なわれ、ハードディスクドライブにおける単位面積当たりの記憶容量も飛躍的に向上している。
【０００４】
またハードディスクドライブの弱点である信頼性についても、ＲＡＩＤ（Redundant Array of Inexpensive Disks）技術の適用により向上しており、近年では、数ＴＢの容量を有する大型記憶システムも市場に登場している。
【０００５】
ところで、近年では、データの書き換えが自由に行なえ、かつ電源を切ってもデータが消滅しない半導体メモリであるフラッシュメモリが記憶デバイスとして広く利用されるようになってきている。そしてこのような普及に伴って、フラッシュメモリの単位ビット当たりのコストも低下してきている。
【０００６】
かかる状況のもと、今後、記憶デバイスとしてフラッシュメモリを搭載したストレージ装置が登場することが予想される。そして、このような構成を採用することによって、アクセス速度が速く、かつ消費電力が少ないストレージ装置を構築できるものと考えられる。
【０００７】
なお下記特許文献１には、フラッシュメモリとハードディスクドライブとを混載したストレージが提案されている。
【特許文献１】特開２００４−２１８１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、フラッシュメモリは、通常、１０万回程度の書込み回数しか保証されていない。このためフラッシュメモリをストレージシステムの記憶デバイスとして採用する場合、このようなフラッシュメモリの回数制限等に伴う記憶デバイス間でのデータ移動がある程度の頻度で行なわれるものと考えられる。なお、フラッシュメモリのチップ当たりの容量を考慮すると、フラッシュメモリを搭載したストレージでは、膨大な数のメモリチップを搭載することになるものと考えられる。
【０００９】
しかしながら、このような記憶デバイス間でのデータ移行の制御をストレージシステムのコントローラで行なう場合、コントローラの負荷が増加し、これに伴ってストレージシステムにおけるデータ入出力処理等の他の処理の性能を劣化させるなどの悪影響を及ぼすおそれがある。
【００１０】
本発明は以上の点を考慮してなされたもので、記憶デバイスとして不揮発性メモリを用いたときに特有の問題について、性能劣化を防止しながら有効に対応し得るストレージシステム及びその制御方法を提案しようとするものである。
【課題を解決するための手段】
【００１１】
かかる課題を解決するため本発明においては、上位装置にデータを読み書きするための記憶領域を提供するストレージシステムにおいて、それぞれ前記記憶領域を提供する１又は複数の不揮発性メモリチップを有する複数のメモリモジュールと、各上前記メモリモジュールに対するデータの読み書きを制御するコントローラとを備え、前記メモリモジュールは、自メモリモジュール内の前記不揮発性メモリチップに障害が発生したときに、当該不揮発性メモリに格納されているデータのコピー先とする前記不揮発性メモリチップを決定し、前記障害が発生した不揮発性メモリチップに格納されていた前記データをコピー先として決定した前記不揮発性メモリチップにコピーすることを特徴とする。
【００１２】
また本発明においては、上位装置にデータを読み書きするための記憶領域を提供するストレージシステムの制御方法において、前記ストレージシステムは、それぞれ前記記憶領域を提供する１又は複数の不揮発性メモリチップを有する複数のメモリモジュールと、各前記メモリモジュールに対するデータの読み書きを制御するコントローラとを有し、前記メモリモジュールが、自メモリモジュール内の前記不揮発性メモリチップに障害が発生したときに、当該不揮発性メモリに格納されているデータのコピー先とする前記不揮発性メモリチップを決定する第１のステップと、前記メモリモジュールが、前記障害が発生した不揮発性メモリチップに格納されていた前記データをコピー先として決定した前記不揮発性メモリチップにコピーする第２のステップとを備えることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、記憶デバイスとして不揮発性メモリを用いたときに特有の問題について、性能劣化を防止しながら有効に対応し得るストレージシステム及びその制御方法を実現できる。
【発明を実施するための最良の形態】
【００１４】
以下図面について、本発明の一実施の形態を詳述する。
【００１５】
（１）第１の実施の形態
（１−１）本実施の形態によるストレージシステムの構成
（１−１−１）ストレージシステムの外観構成
図１において、１は全体として本実施の形態によるストレージシステムを示す。このストレージシステム１は、データの入出力制御を行なう記憶制御装置２と、当該記憶制御装置２の左右両側にそれぞれ複数配置された記憶装置３とから構成される。
【００１６】
記憶制御装置２は、直方体形状の記憶制御装置用筐体内に、冷却ファンユニット１０、ＦＭ（Flash Memory）モジュール１１、ＰＢＣ（Port Bypass Circuit）ボード１２、論理基板１３、ＡＣボックス１４、電源モジュール１５及びバッテリ１６がそれぞれ１又は複数複数収容されて構成される。
【００１７】
冷却ファンユニット１０は、１又は複数のファンを内蔵するユニットであり、ＦＭモジュール１１及び論理基板１３等において発生した熱を記憶制御装置用筐体の外部に排出するために用いられる。
【００１８】
ＦＭモジュール１１は、例えば図４（Ａ）に示すように、それぞれ複数のＦＭチップと呼ぶ）２０が実装された複数のフラッシュメモリユニット２１が、所定大きさのベースボード２２上に交換自在に装着されて構成される。このベースボード２２の後端側にはＦＭ制御ＬＳＩ（Large Scale Integration circuit）２３が実装されており、このＦＭ制御ＬＳＩ２３内に形成された後述のデータ入出力処理部４０（図７）によって、そのＦＭモジュール１１内の各ＦＭチップ２０に対するデータの入出力が制御される。
【００１９】
またＦＭモジュール１１の後端部側にはコネクタ２４が設けられており、このコネクタを記憶制御装置２に配設された図示しないマザーボード上のコネクタに嵌め合わせることによって、当該ＦＭモジュール１１をマザーボードに物理的及び電気的に接続することができるようになされている。
【００２０】
なお、ベースボード２３は、図４（Ｂ）に示すように、ＦＭ制御ＬＳＩ２３が搭載された後端部分２３Ｂがベースボード本体２３Ａに自在に着脱できるように構成するようにしてもよく、このようにすることによってＦＭ制御ＬＳＩ２３に不具合が生じた場合にその交換を容易に行い得るようにすることができる。
【００２１】
ＰＢＣボード１２は、記憶制御装置２内の同じ段に装填された各ＦＭモジュール１１を電気的に接続する通信経路を備える。図３（Ｂ）に示すように、このＰＢＣボード１２を介して複数のＦＭモジュール１１が直列にかつ通信可能な状態に接続されることにより、後述のようにＦＣ（Fibre Channel）ループ２５（図５）が形成されることになる。
【００２２】
論理基板１３は、それぞれ図６について後述するチャネルアダプタ３３、データ転送制御部３４、キャッシュメモリ３５、ローカルメモリ３６、マイクロプロセッサ３７又はＦＭアダプタ３８等が形成されて構成される。これら論理基板１３は、記憶制御装置２に配置されたバックボードに挿抜自在に接続されており、このバックボードを介して記憶制御装置２に装填された他の論理基板１３等との間で通信を行い得るようになされている。
【００２３】
ＡＣボックス１４は、ストレージシステム１に対する商用交流電力の取り入れ口であり、ブレーカとして機能する。ＡＣボックス１４に取り入れられた商用交流電力は、電源モジュール１５に供給される。電源モジュール１５は、ＡＣボックス１４から与えられる商用交流電力を直流電力に変換し、これを論理基板１３やＦＭモジュール１１及び冷却ファン１０等に供給する。
【００２４】
またバッテリ１６は、停電時や電源モジュール１５の異常時に、記憶制御装置２内の各部位に電力を供給するための予備電源として用いられる。
【００２５】
一方、記憶装置３は、図１及び図２に示すように、記憶装置用筐体内に、冷却ファンユニット１０、複数のＦＭモジュール１１、ＰＢＣボード１２、ＡＣボックス１４、電源モジュール１５及びバッテリ１６がそれぞれ複数収納されて構成される。これら冷却ファンユニット１１等は上述した記憶制御装置２の冷却ファンユニット１１等と同じものであるため、ここでの説明は省略する。
【００２６】
図３（Ａ）は、記憶制御装置２及び各記憶装置３間の接続構成を示している。記憶制御装置２には、ＦＭアダプタ３８（図６参照）が形成された論理基板１３が複数設けられる。これらＦＭアダプタ３８は２つで１つのクラスタを構成しており、これにより各ＦＭモジュール１１へのアクセス系統が二重化されている。かくして、一方のＦＭアダプタ３８に障害が発生してそのＦＭアダプタ３８があるＦＭモジュール１１にアクセスできなくなった場合にも、他方のＦＭアダプタ３８からそのＦＭモジュール１１にアクセスすることが可能となる。
【００２７】
記憶制御装置２や記憶装置３に装填されたＰＢＣボード１２のうちの２以上のＰＢＣボード１２がＦＣケーブルを介して直列に接続される。そして直列に接続された２以上のＰＢＣボード１２のうちの先頭のＰＢＣボード１２が、ＦＣケーブルを介してＦＭアダプタ３８が形成された論理基板１３と接続される。これにより図５に示すように、ＦＣ−ＡＬ（Fiber Channel Arbitrated Loop）の規格に従ったＦＣループ２５が形成される。
【００２８】
記憶装置３には、複数のＦＣループ２５が設けられ、図５に示すように、各ＦＣループ２５に複数のＦＭモジュール１１が接続される。各ＦＭモジュール１１は、自分に接続されたＦＣループ２５を介して、そのＦＣループ２５に接続されている複数のＦＭモジュール１１のうちの所望のＦＭモジュール１１にアクセスすることができる。
【００２９】
（１−１−２）ストレージシステムの内部構成
図６は、かかるストレージシステム１の内部構成を示す。この図６に示すように、記憶制御装置２は、それぞれ異なるホスト３０に接続される０系及び１系のストレージコントローラ３１Ａ，３１Ｂと、これらストレージコントローラ３１Ａ，３１Ｂ間を通信可能な状態に接続するコントローラ間接続経路３２と、複数のＦＭモジュール１１とから構成される。
【００３０】
コントローラ間接続経路３２としては、例えば１レーン片方向当たり（最大８レーン）のデータ転送量が2.5〔Gbit/sec〕と高速なデータ通信を実現するＰＣＩ（Peripheral Component Interconnect）−Ｅｘｐｒｅｓｓ規格に準拠したバスが適用される。０系及び１系のストレージコントローラ３１Ａ，３１Ｂ間におけるデータや各種コマンドの送受は、すべてこのコントローラ間接続経路３２を介して行なわれる。
【００３１】
各ストレージコントローラ３１Ａ，３１Ｂは、それぞれ自己に接続されたホスト３０からの要求に応じて、記憶制御装置２や記憶装置３に装填されたＦＭモジュール１１内の対応するＦＭチップ２０（図２０）に対するデータの読み書きを制御する機能を有し、それぞれチャネルアダプタ３３、データ転送制御部３４、キャッシュメモリ３５、ローカルメモリ３６、マイクロプロセッサ３７及びＦＭアダプタ３８などを備える。
【００３２】
チャネルアダプタ３３は、ホスト３０との間のインタフェースとして機能するもので、１又は複数の通信ポートを備える。通信ポートは、そのストレージコントローラ３１Ａ，３１Ｂをネットワークやホスト３０に接続するためのものであり、例えばＩＰ（Internet Protocol）アドレスやＷＷＮ（World Wide Name）などの固有のネットワークアドレスがそれぞれ割り当てられる。
【００３３】
またチャネルアダプタ３３は、ホスト３０との間の通信時におけるプロトコル制御を行う。このチャネルアダプタ３３のプロトコル制御機能により、ホスト３０及びストレージシステム３３Ａ，３３Ｂ間においてＦＣプロトコルやｉＳＣＳＩプロトコル又はＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）プロトコル等に従ったデータやコマンドの送受が行われる。
【００３４】
データ転送制御部３４は、０系及び１系のストレージコントローラ３１Ａ，３１Ｂ間のデータ転送と、０系又は１系のストレージコントローラ３１Ａ，３１Ｂ内の各要素間でのデータ転送を制御する機能を備える。またデータ転送制御部３１Ａ，３１Ｂは、自系のマイクロプロセッサ３７からの指示により、ホスト３０から与えられた書込み対象のデータをキャッシュメモリ３５に多重書きする機能を備える。具体的には、０系又は１系のマイクロプロセッサ３７が自系のキャッシュメモリ３５にデータを格納した場合、このデータを他系のキャッシュメモリ３５にも書き込む（二重書き）。
【００３５】
キャッシュメモリ３５は、例えばＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）等の揮発メモリから構成され、主としてＦＭモジュール１１に読み書きするデータを一時的に記憶するために用いられる。またローカルメモリ３６は、各種制御プログラムを記憶するために用いられるほか、マイクロプロセッサ３７のワークメモリとしても用いられる。
【００３６】
マイクロプロセッサ３７は、それぞれ自系のストレージコントローラ３１Ａ，３１Ｂ全体の動作制御を司る機能を有する。マイクロプロセッサ３７による各種処理は、予めローカルメモリ３６に格納された制御プログラムに従って行なわれる。
【００３７】
ＦＭアダプタ３８は、ＣＰＵやメモリ等を備えたマイクロコンピュータシステムとして構成され、ＦＭモジュール１１との通信時におけるプロトコル制御を行うインタフェースとして機能する。本実施の形態においては、ＦＭアダプタ３８として、フラッシュメモリ専用のアダプタではなく、現行のハードディスクドライブと通信を行なうための既存のディスクアダプタが適用される。
【００３８】
なお、管理装置３９は、ストレージシステム１の保守及び管理のために操作されるコンピュータ装置であり、例えばノート型のパーソナルコンピュータから構成される。保守管理装置３９は、ストレージシステム１内の障害発生を監視してディスプレイ画面（図示せず）に表示したり、ホスト３０からの指令に基づいてＦＭモジュール１１の閉塞処理等を指示したりすることができる。
【００３９】
ＦＭモジュール１１は、図７に示すように、ＦＭ制御ＬＳＩ２３（図４）に形成されたデータ入出力処理部４０及び複数のＦＭチップ２０を備えて構成される。
【００４０】
データ入出力処理部４０は、ＦＣインタフェース部４１、ＦＭコントローラ４２、ＦＣ‐ＦＭ変換部４３及びＦＭインタフェース部４４を備える。
【００４１】
ＦＣインタフェース部４１は、図６について上述した記憶制御部装置２のストレージコントローラ３１Ａ，３１Ｂとの間のインタフェースであり、ＦＭインタフェース部４４は、そのＦＭモジュール１１内に収納された各ＦＭチップ２０との間のインタフェースである。またＦＭコントローラ４２は、そのＦＭモジュール１１全体の動作制御を司るプロセッサとして機能する。
【００４２】
ＦＣ‐ＦＭ変換部４３は、ストレージコントローラ３１Ａ，３１ＢのＦＭアダプタ３８とＦＭモジュール１１とを接続するためのインタフェースであり、ＦＭインタフェース部４１及びＦＭコントローラ４２間に接続されたＦＣ側変換処理部４５と、ＦＭコントローラ４２及びＦＭインタフェース部４４間に接続されたＦＭ側変換処理部４６とから構成される。
【００４３】
このうちＦＣ側変換処理部４５は、ＦＣコマンド送受信部５０、ＦＣデータ転送部５１、コマンド変換部５２、チップ情報送信部５３及びデータバッファ５４を備える。
【００４４】
ＦＣ側変換処理部４５のＦＣコマンド送信部５０は、ＦＣループ２５（図５）を介してＦＣプロトコルのコマンドをＦＭアダプタ３８に送信する送信機能と、データコピーの際のイニシエータとして機能するイニシエータ機能とを備える。またＦＣデータ転送部５１は、ＦＣループ２５を介してＦＭアダプタ３８及び他のＦＭモジュール１１との間でデータの送受信を行う。
【００４５】
さらにコマンド変換部５２は、受信したＦＣプロトコルに準拠したコマンドをＦＭ用のコマンドにプロトコル変換し、又はＦＭ用のコマンドをＦＣプロトコルに準拠したコマンドに変換する。
【００４６】
チップ情報送信部５３は、後述のようなＦＭチップ２０間におけるデータコピーの最中又は終了後におけるブロックアドレス情報等をＦＭアダプタ３８に送信する機能を有する。データバッファ５４は、ＦＣインタフェース部４１及びＦＭコントローラ４２間を通過するデータを一時的に記憶するために用いられるメモリである。
【００４７】
またＦＭ側変換処理部４６は、ＦＭコマンド発行部５５、ＦＭデータ転送部５６、エラー送信部５７、ＥＣＣ（Error Correction Code）生成・検証部５８、ＦＭステータス監視部５９及びデータバッファ部６０を備えて構成される。
【００４８】
ＦＭコマンド発行部は５５、ＦＭチップ２０に対してフラッシュメモリ用の規格に準拠した各種コマンドをパラレルで発行する機能を有し、ＦＭデータ転送部５６は、各ＦＭチップ２０との間で読書き対象のデータをパラレルで送受する機能をする。
【００４９】
またエラー送信部５７は、そのＦＭモジュール１１内においてエラーが発生したときにこれをストレージコントローラ３１Ａ，３１ＢのＦＭアダプタ３８に通知する機能を有し、ＥＣＣ生成・検証部５８は、ＦＭチップ２０に対するデータの読み書き時におけるＥＣＣの生成処理や検証処理を行う機能を有する。
【００５０】
さらにＦＭステータス監視部５９は、そのＦＭモジュール１１内のＦＭチップ２０ごとのステータス（障害の有無や動作状態）を監視する。データバッファ６０は、そのＦＭモジュール１１内のＦＭチップ２０に読み書きするデータを一時的に記憶するために用いられる。
【００５１】
ＦＭチップ２０は、書き換え可能な不揮発性の半導体メモリチップである。これらＦＭチップ２０は、ストレージコントローラ３１Ａ，３１ＢによりＲＡＩＤ方式で運用される。図５及び図８に示すように、１つのＦＭモジュール１１内に存在する１若しくは複数のＦＭチップ２０、又は複数のＦＭモジュール１１を跨ぐ複数のＦＭチップ２０により一つのＲＡＩＤグループ６１が形成され、このＲＡＩＤグループ６１内の各ＦＭチップ２０が提供する物理的な記憶領域上に１又は複数の論理的な記憶領域であるＬＤＥＶ（Logical Device）６２が形成される。
【００５２】
また各ＬＤＥＶ６２は、それぞれストレージコントローラ３１Ａ，３１Ｂがホスト３０に提供する仮想的な論理ボリュームでなる論理ユニット６３と対応付けられる。この場合の対応関係としては、図８に示すように、１つの論理ユニット６３に対して１つのＬＤＥＶ６２が対応付けられる場合のほか、１つの論理ユニット６３に対して複数のＬＤＥＶ６２が対応付けられる場合や、１つのＬＤＥＶ６２が複数の論理ユニット６３に対応付けられる場合がある。
【００５３】
各論理ユニット６３には、それぞれ固有の識別番号（ＬＵＮ：Logical Unit Number）が割り当てられる。また論理ユニット６３内の記憶領域は、所定大きさの論理的なブロックを単位として管理され、各ブロックに固有の識別番号（ＬＢＡ：Logical Block Address）が割り当てられる。そして論理ユニット６３に対するデータの入出力は、これらＬＵＮとＬＢＡとを組み合わせたものをアドレスとして、当該アドレスを指定して行われる。
【００５４】
このためストレージコントローラ３１Ａ，３１ＢのＦＭアダプタ３８（図６）は、図示しない内部メモリ内、または、ローカルメモリ３６内に図９に示すような第１のアドレス変換テーブル６４を有する。
【００５５】
この第１のアドレス変換テーブル６４は、ホスト３０が認識する論理ユニット６３上のＬＢＡと、ＬＤＥＶ６２の識別番号（ＬＤＥＶ番号）、そのＬＤＥＶ６２内のＬＢＡ、そのＬＤＥＶ６２を構成する記憶領域を提供するＦＭモジュール１１の識別番号（ＦＭモジュール番号）、そのＦＭモジュール１１内のＬＢＡとの対応関係を管理するためのテーブルであり、「ホスト」欄６４Ａ及び「ＦＭアダプタ」欄６４Ｂから構成される。
【００５６】
「ホスト」欄６４Ａは、「ＬＵＮ」欄６４Ａ１及び「ＬＢＡ」欄６４Ａ２から構成される。そして「ＬＵＮ」欄６４Ａ１には、ホスト３０が認識する（すなわちストレージシステム１がホスト３０に提供する）各論理ユニット６３のＬＵＮが格納され、「ＬＢＡ」欄６４Ａ２には、ホスト３０が認識するその論理ユニット６３内の各ブロックにそれぞれ付与されたＬＢＡの範囲が格納される。
【００５７】
また「ＦＭアダプタ」欄６４Ｂは、「ＬＤＥＶ番号」欄６４Ｂ１、「内部ＬＢＡ」欄６４Ｂ２、「ＦＭモジュール番号」欄６４Ｂ３及び「ＦＭモジュール内アドレス」欄６４Ｂ４から構成される。
【００５８】
そして「ＬＤＥＶ番号」欄６４Ｂ１には、対応する論理ユニット６３に対応付けられたＬＤＥＶ６２の識別番号が格納され、「内部ＬＢＡ」欄６４Ｂ２には、同じ列の「ＬＢＡ」欄６４Ａ２に格納されたＬＢＡの範囲に対応するそのＬＤＥＶ６２内に存在するブロックのＬＢＡの範囲が格納される。また「ＦＭモジュール番号」欄６４Ｂ３には、そのＬＤＥＶ６２を提供するＲＡＩＤグループ６１（図８）を構成するＦＭモジュール１１の識別番号が格納され、「ＦＭモジュール内ＬＢＡ」欄６４Ｂ４には、これらＦＭモジュール１１におけるそのＬＤＥＶ６２に対応付けられた記憶領域内に存在するブロックのＬＢＡの範囲が格納される。
【００５９】
従って、例えば図９の例では、ホスト３０が認識するＬＵＮが「１」の論理ユニット６３のＬＢＡは「０〜１１９９９」の範囲であり、その論理ユニット６３はストレージシステム１内では識別番号が「１」のＬＤＥＶ６２と対応付けられ、そのＬＤＥＶ６２のＬＢＡは「０〜１１９９９」であることが分かる。またそのＬＤＥＶ６２は、１つのＲＡＩＤグループ６１を構成する識別番号が「１」〜「４」のＦＭモジュール１１内でのＬＢＡが「０」〜「３９９９」の範囲の記憶領域と対応付けられていることが分かる。
【００６０】
そしてストレージコントローラ３１Ａ，３１Ｂ（図６）のＦＭアダプタ３８は、ホスト３０からホストアダプタ３３を介して論理ユニット６３上のアドレスを指定したデータ入出力要求（データ書込み要求又はデータ読出し要求）が与えられた場合、かかる第１のアドレス変換テーブル６４を参照して、そのアドレスをストレージコントローラ３１Ａ，３１Ｂが管理するＬＤＥＶ６２上でのアドレスに変換し、さらにそのＬＤＥＶ６２上でのアドレスをＦＭモジュール１１内でのアドレスに変換し、このアドレスをデータ入出力先として指定したデータ入出力要求を対応するＦＭモジュール１１に送信する。
【００６１】
また各ＦＭモジュール１１のＦＭコントローラ４２（図７）は、それぞれ図示しない内部メモリ内に図１０に示す第２のアドレス変換テーブル６５を保持している。
【００６２】
この第２のアドレス変換テーブル６５は、ストレージコントローラ３１Ａ，３１Ｂが認識するＦＭモジュール１１内の各ブロックのＬＢＡと、そのＦＭモジュール１１内のＦＭチップ２０の識別番号と、そのＦＭチップ２０内の記憶領域内のブロックアドレスとの関係を管理するためのテーブルであり、「ＦＭモジュール内ＬＢＡ」欄６５Ａ、「ＦＭチップ番号」欄６５Ｂ及び「ＦＭチップ内アドレス」欄６５Ｃから構成される。
【００６３】
「ＦＭチップ番号」欄６５Ｂには、対応するＦＭチップ２０の識別番号が格納され、「ＦＭチップ内アドレス」欄６５Ｃには、そのＦＭチップ２０内の物理アドレス（各ブロックのブロックアドレス）範囲が格納される。また「ＦＭモジュール内ＬＢＡ」欄６５Ａには、そのＦＭチップ２０内の物理アドレスに対応するＦＭモジュール１１上でのＬＢＡの範囲が格納される。
【００６４】
従って、例えば図１０の例では、そのＦＭモジュール１１が提供するＬＢＡが「０〜３９９」の記憶領域は、識別番号が「１」のＦＭチップ２０が提供するアドレスが「０〜３９９」の範囲の記憶領域と対応付けられており、またそのＦＭモジュール１１が提供するＬＢＡが「４００〜７９９」の記憶領域は、識別番号が「２」のＦＭチップ２０が提供するアドレスが「０〜３９９」の範囲の記憶領域と対応付けられていることが分かる。
【００６５】
そしてＦＭモジュール１１のＦＭコントローラ４２は、ストレージコントローラ３１Ａ，３１ＢのＦＭアダプタ３８から自ＦＭモジュール１１内のＬＢＡを指定したデータ入出力要求が与えられた場合には、この第２のアドレス変換テーブル６５を参照して、そのアドレスを対応するＦＭチップ２０の識別番号及びそのＦＭチップ２０内でのアドレスに変換し、このアドレス位置に対するデータ入出力処理を実行する。
【００６６】
（１−２）コレクションコピー機能及びダイナミックスペアリング機能
（１−２−１）チップ管理テーブル及びブロック管理テーブルの構成
次に、かかるストレージシステム１に搭載されたコレクションコピー機能及びダイナミックスペアリング機能について説明する。
【００６７】
本実施の形態によるストレージシステム１には、ＦＭモジュール１１内のいずれかのＦＭチップ２０に障害が生じた場合に、その障害が生じたＦＭチップ（以下、これを障害ＦＭチップと呼ぶ）２０に格納されたデータを修復しながら他のＦＭチップ２０にコピーするコレクションコピー機能と、当該データを障害ＦＭチップ２０から読み出して他のＦＭチップ２０にコピーするダイナミックスペアリング機能とが搭載されている。
【００６８】
この場合、コレクションコピー機能に基づく上述のようなコレクションコピー処理としては、修復したデータを同じＦＭモジュール１１内の他のＦＭチップ２０にコピーする第１のコレクションコピー処理と、修復したデータを他のＦＭモジュール１１内のＦＭチップ２０にコピーする第２のコレクションコピー処理とがある。
【００６９】
同様に、ダイナミックスペアリング機能に基づく上述のようなダイナミックスペアリング処理としては、障害ＦＭチップ２０から読み出したデータを同じＦＭモジュール１１内の他のＦＭチップ２０にコピーする第１のダイナミックスペアリング処理と、障害ＦＭチップ２０から読み出したデータを他のＦＭモジュール１１内のＦＭチップ２０にコピーする第２のダイナミックスペアリング処理とがある。
【００７０】
そして本ストレージシステム１では、このようなコレクションコピー機能及びダイナミックスペアリング機能を実現するための手段として、各ＦＭモジュール１１のＦＭコントローラ４２（図７）がそれぞれ図１１に示すようなチップ管理テーブル７０及び図１２に示すようなブロック管理テーブル７１を保持している。
【００７１】
このうちチップ管理テーブル７０は、ＦＭモジュール１１のＦＭコントローラ４２が自ＦＭモジュール内の各ＦＭチップ２０について、障害の有無を管理するために使用するテーブルであり、図１１に示すように、「スペアＦＭチップの有無」欄７０Ａ、「ＦＭチップ番号」欄７０Ｂ、「障害ブロック数閾値」欄７０Ｃ、「障害ブロック数」欄７０Ｄ、「エラーフラグ」欄７０Ｅ、「ＲＡＩＤ構成有無」欄７０Ｆ及び「状態」欄７０Ｇから構成される。
【００７２】
このうち「スペアＦＭチップの有無」欄７０Ａには、そのＦＭモジュール１１内にスペア（予備）のＦＭチップ（以下、これをスペアＦＭチップと呼ぶ）２０が存在するか否かの情報（有／無）と、スペアＦＭチップ２０が存在する場合には、その識別番号（ＦＭチップ番号）とが格納される。
【００７３】
また「ＦＭチップ番号」欄７０Ｂには、そのＦＭモジュール１１内に存在する各ＦＭチップ２０の識別番号がそれぞれ格納され、「障害ブロック数」欄７０Ｄには、そのＦＭチップ２０内の障害が発生したブロック数（以下、これを障害ブロック数と呼ぶ）が格納される。
【００７４】
さらに「障害ブロック数閾値」欄７０Ｃには、そのＦＭチップ２０について予め設定された障害ブロック数の閾値（以下、これを障害ブロック数閾値と呼ぶ）が格納され、「エラーフラグ」欄７０Ｅには、障害ブロック数が障害ブロック数閾値を超えた場合にエラーフラグ（「１」）が格納される。
【００７５】
さらに「ＲＡＩＤ構成の有無」欄７０Ｆには、そのＦＭチップ２０がいずれかのＲＡＩＤグループ６１（図８）を構成しているか否かの情報（有／無）と、そのＦＭチップ２０がいずれかのＲＡＩＤグループ６１を構成している場合には、そのＲＡＩＤグループ６１の識別番号（ＲＡＩＤグループ番号）が格納される。
【００７６】
さらに「状態」欄７０Ｇには、ＦＭチップ２０がデータ格納領域として割り当てられているか否かの情報（割当・未割当）が格納される。本実施の形態では、あるＦＭチップ２０に障害が生じた場合、当該ＦＭチップ２０のデータを格納するチップとして、「スペアＦＭチップの有無欄」７０Ａで管理するスペアＦＭチップ２０を使用する。しかし、スペアＦＭチップがない場合など、ＦＭコントローラ４２は、チップ管理テーブル７０の「状態」欄７０Ｇを参照して、データが割り当てられていないＦＭチップ２０を指定して、データを格納する形態としても良い。
【００７７】
従って、例えばこの図１１の例の場合、そのＦＭモジュール１１には、スペアＦＭチップ２０として識別番号が「ｎ−２」〜「ｎ」のＦＭチップ２０が存在することが分かる。また例えば識別番号が「２」のＦＭチップ２０については、障害ブロック数閾値が「100」、現在の障害ブロック数が「１」であり、識別番号が「１」のＲＡＩＤグループ６１を構成していることが分かる。
【００７８】
またブロック管理テーブル７１は、ＦＭモジュール１１のＦＭコントローラ４２が、自ＦＭモジュール１１内に存在するＦＭチップ２０のブロックごとのステータスを管理するためのテーブルであり、ＦＭチップ２０ごとに作成される。このブロック管理テーブル７１は、図１２に示すように、「スペアブロックの有無」欄７１Ａ、「ブロックアドレス」欄７１Ｂ、「書込み回数閾値」欄７１Ｃ、「書込み回数」欄７１Ｄ、「エラー回数閾値」欄７１Ｅ、「エラー回数」欄７１Ｆ及び「エラーフラグ」欄７１Ｇから構成される。
【００７９】
このうち「スペアブロックの有無」欄７１Ａには、そのＦＭチップ２０内にスペアのブロック（以下、これをスペアブロックと呼ぶ）が存在するか否かの情報（有／無）と、スペアブロックが存在する場合には、そのブロックアドレスが格納される。また「ブロックアドレス」欄７１Ｂには、そのＦＭチップ２０内に存在する各ブロックのブロックアドレスがそれぞれ格納される。
【００８０】
「書込み回数」欄７１Ｄには、そのブロックにデータが書き込まれた回数が格納され、「書込み回数閾値」欄７１Ｃには、そのブロックについて予め設定された書込み回数の閾値（以下、これを書込み回数閾値と呼ぶ）が格納される。
【００８１】
また「エラー回数」欄７１Ｆには、そのブロックにおいて発生した読出しエラー又は書込みエラーの回数が格納され、「エラー回数閾値」欄７１Ｅには、そのブロックについて予め設定された、そのブロックが使えないと判定するためのエラー回数の閾値（以下、これをエラー回数閾値と呼ぶ）が格納される。
【００８２】
さらに「エラーフラグ」欄７１Ｇには、そのブロックに対するデータの書込み回数が書込み回数閾値を超え、又はそのブロックにおいて発生した読出しエラー若しくは書込みエラーの回数がエラー回数閾値を超えた場合にエラーフラグが格納される。
【００８３】
従って、例えばこの図１２の例の場合、対応するＦＭチップ２０には、スペアブロックとしてアドレスが「ｍ−３」〜「ｍ」のブロックが存在することが分かる。また例えばアドレスが「２」のブロックについては、書込み回数閾値として「100000」回、エラー回数閾値として「30」回がそれぞれ設定され、現在の書込み回数は「1122」回、エラー回数は「１」回で、障害が発生していない（エラーフラグが立っていない）ことが分かる。
【００８４】
（１−２−２）データ書込み／テーブル更新処理及びデータ読出し処理／テーブル更新処理
ここで、各ＦＭモジュール１１のＦＭコントローラ４２は、これらチップ管理テーブル７０及びブロック管理テーブル７１を、図１３及び図１４に示すデータ書込み／テーブル更新処理手順や図１５に示すデータ読出し／テーブル更新処理手順に従って、データ書込み処理やデータ読出し処理の際に必要に応じて更新する。
【００８５】
すなわち、このストレージシステム１の場合、ストレージコントローラ３１Ａ，３１Ｂ（図６）のチャネルアダプタ３３は、ホスト３０から書込み対象のデータと、その格納先のアドレスを指定したデータ書込み要求とが与えられると、まず、このデータをキャッシュメモリ３５に二重書きし（ＳＰ１）、この後かかるデータ書込み要求に基づくデータ書込み処理のジョブを、データ転送制御部３４を介してローカルメモリ３６に登録する（ＳＰ２）。
【００８６】
このときマイクロプロセッサ３７は、定期的にローカルメモリ３６を監視しており、かかるジョブを検出し、その内容を確認すると（ＳＰ３）、図９について上述した第１のアドレス変換テーブル６４を参照して、書込み対象のデータを書き込むべきＦＭモジュール１１、ＦＭチップ２０及びそのＦＭチップ２０が構成するＲＡＩＤグループ６１（図８）等を確認すると共に、必要なデータを対応するＦＭモジュール１１内の対応するＦＭチップ２０から読み出してパリティを計算する（ＳＰ４）。
【００８７】
続いてマイクロプロセッサ３７は、ＦＭアダプタ３８を制御することにより、かかるＦＭモジュール１１との間のコネクションを確立させ（ＳＰ５）、その後書込み対象のデータを、書込み先のＦＭチップ２０の識別番号と当該ＦＭチップ２０内のＬＢＡとを指定したデータ書込みコマンドと共に対応するＦＭモジュール１１に送信する（ＳＰ６）。なお、この際マイクロプロセッサ３７は、書込み対象のデータを所定単位で順次分離し、得られた分離データを冗長性をもたせて対応するＲＡＩＤグループ６１を構成する複数のＦＭチップ２０に書き込ませるように、各分離データ及び冗長データの書き込み先を指定する。
【００８８】
かかるデータ書込みコマンド及び書込み対象のデータを受信したＦＭモジュール１１側では、データ入出力処理部４０（図７）のＦＣ‐ＦＭ変換部４３において、このデータ書込みコマンドをフラッシュメモリ用のコマンドにプロトコル変換する（ＳＰ７）。
【００８９】
またデータ入出力処理部４０のＦＭコントローラ４２は、このプロトコル変換されたデータ書込みコマンドと第２のアドレス変換テーブル６５（図１０）とに基づいて、その書込み対象のデータを書き込むべきＦＭチップ２０を確認すると共に、そのＦＭチップ２０にデータを書き込む際に当該データに付加するＥＣＣ（チップ内ＥＣＣ）を計算する（ＳＰ８）。
【００９０】
次いでＦＭコントローラ４２は、この書込みデータ又はＥＣＣの１ブロック分を指定されたＦＭチップ２０内の指定されたアドレス位置に書き込む（ＳＰ９）。この場合におけるＦＭコントローラ４２の具体的な処理内容については後述する。この後ＦＭコントローラ４２は、かかるデータ書き込みが行なわれたブロックに対応するブロック管理テーブル７１（図１２）上の「書込み回数」欄７１Ｄに格納された書込み回数を１増加させる（ＳＰ１０）。
【００９１】
続いてＦＭコントローラ４２は、このときデータ書き込みが行われたＦＭチップ２０内のブロックについて、ブロック管理テーブル７１（図１２）の対応する「書込み回数」欄７１Ｄ及びこれに対応する「書込み回数閾値」欄７１Ｃを参照して、そのブロックへのデータ書込み回数が当該ブロックについて設定された書込み回数閾値を超えたか否かを判断する（ＳＰ１１）。そしてＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ１７に進む。
【００９２】
これに対してＦＭコントローラ４２は、かかる判断において肯定結果を得ると、ブロック管理テーブル７１上のそのブロックに対応する「エラーフラグ」欄７１Ｇにエラーフラグを格納する（ＳＰ１２）。この結果このブロックは障害（エラー）が生じたブロックとして登録されることとなる。また、このときＦＭコントローラ４２は、これと併せてチップ管理テーブル７０（図１１）上のそのＦＭチップ２０に対応する「障害ブロック数」欄７０Ｃに格納された障害ブロック数を１増加させる。
【００９３】
続いてＦＭコントローラ４２は、ブロック管理テーブル７１の「スペアブロックの有無」欄７１Ａを参照して、そのＦＭチップ２０内に未使用のスペアブロックが存在するか否かを判断する（ＳＰ１３）。
【００９４】
ＦＭコントローラ４２は、この判断において否定結果を得ると、ＦＣ‐ＦＭ変換部４３（図７）を制御して、ストレージコントローラ３１Ａ，３１ＢのＦＭアダプタ３８にエラー通知を送信させる（ＳＰ２４）。この結果、このエラー通知に基づくエラー報告がストレージコントローラ３１Ａ，３１Ｂから対応するホスト３０に送信される。そしてＦＭコントローラ４２は、この後、すべてのデータの書き込みが完了したか否かを判断し（ＳＰ２５）、肯定結果を得るとステップＳＰ９に戻り、これに対して肯定結果を得ると、このデータ書込み／テーブル更新処理を終了する。
【００９５】
これに対してＦＭコントローラ４２は、ステップＳＰ１３の判断において肯定結果を得ると、ＦＣ‐ＦＭ変換部４３を制御することにより、ステップＳＰ９においてブロックへの書込みを行ったデータを、ステップＳＰ１３において存在を確認したスペアブロックにコピーさせる（ＳＰ１４）。
【００９６】
続いてＦＭコントローラ４２は、チップ管理テーブル７０上のデータ書込みが行われたＦＭチップ２０に対応する「障害ブロック数閾値」欄７０Ｃ及び「障害ブロック数」欄７０Ｄを参照して、そのＦＭチップ２０における障害ブロック数が当該ＦＭチップ２０について予め定められた障害ブロック数閾値を超えたか否かを判断する（ＳＰ１５）。
【００９７】
ＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ１７に進み、これに対して肯定結果を得ると、チップ管理テーブル７０上のそのＦＭチップ２０に対応する「エラーフラグ」欄７０Ｅにエラーフラグを格納した後（ＳＰ１６）、ステップＳＰ１７に進む。
【００９８】
一方、ＦＭコントローラ４２は、ステップＳＰ１７に進むと、かかる書込み対象のデータの書き込みが成功したか否か（すなわちデータを書き込めたか否か）を判断する（ＳＰ１７）。そしてＦＭコントローラ４２は、この判断において肯定結果を得ると、すべてのデータの書き込みが完了したか否かを判断する（ＳＰ２５）。
【００９９】
ＦＭコントローラ４２は、この判断において肯定結果を得るとステップＳＰ９に戻り、この後すべてのデータの書き込みを完了するまで同様の処理を繰り返す（ＳＰ９〜ＳＰ２５−ＳＰ９）。またＦＭコントローラ４２は、やがてすべてのデータを書き終えることによりステップＳＰ２５の判断において肯定結果を得ると、このデータ書込み／テーブル更新処理を終了する。
【０１００】
これに対してＦＭコントローラ４２は、ステップＳＰ１７の判断において否定結果を得ると、ＦＣ‐ＦＭ変換部４３（図７）を制御して、ストレージコントローラ３１Ａ，３１ＢのＦＭアダプタ３８に書込みエラー通知を送信させる（ＳＰ１８）。この結果、この書込みエラー通知に基づくエラー報告がストレージコントローラ３１Ａ，３１Ｂから対応するホスト３０に送信される。
【０１０１】
次いでＦＭコントローラ４２は、ステップＳＰ９のデータ書込み処理においてデータの書き込みに失敗したブロックについて、ブロック管理テーブル７１上の対応する「エラー回数」欄７１Ｆに格納されたエラー回数を１増加させる（ＳＰ１９）。
【０１０２】
またＦＭコントローラ４２は、そのブロックについて、ブロック管理テーブル７１の対応する「エラー回数」欄７１Ｆ及び「エラー回数閾値」欄７１Ｅを参照して、そのブロックにおけるエラー回数が当該ブロックについて設定されたエラー回数閾値を超えたか否かを判断する（ＳＰ２０）。
【０１０３】
そしてＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ２２に進み、これに対して肯定結果を得ると、ブロック管理テーブル７１上のそのブロックに対応する「エラーフラグ」欄７１Ｇにエラーフラグを格納する（ＳＰ２１）。この結果このブロックは障害が生じたブロックとして登録されることとなる。また、このときＦＭコントローラ４２は、これと併せてチップ管理テーブル７０上のそのＦＭチップ２０に対応する「障害ブロック数」欄７０Ｄに格納された障害ブロック数を１増加させる。
【０１０４】
この後ＦＭコントローラ４２は、チップ管理テーブル７０のそのＦＭチップ２０に対応する「障害ブロック数」欄７０Ｄ及び「障害ブロック数閾値」欄７０Ｃを参照して、そのＦＭチップ２０における障害ブロック数が当該ＦＭチップ２０について定められた障害ブロック数閾値を超えたか否かを判断する（ＳＰ２２）。
【０１０５】
そしてＦＭコントローラ４２は、この判断において否定結果を得るとこのデータ書込み／テーブル更新処理を終了し、これに対して肯定結果を得ると、チップ管理テーブル７０上のそのＦＭチップ２０に対応する「エラーフラグ」欄７０Ｅにエラーフラグを格納する（ＳＰ２３）。これによりそのＦＭチップ２０は、障害が生じたＦＭチップとして登録されることとなる。
【０１０６】
そしてＦＭコントローラ４２は、この後すべてのデータの書き込みが完了したか否かを判断し（ＳＰ２５）、肯定結果を得るとステップＳＰ９に戻り、これに対して肯定結果を得ると、このデータ書込み／テーブル更新処理を終了する。
【０１０７】
一方、ストレージコントローラ３１Ａ,３１Ｂ（図６）のチャネルアダプタ３３は、ホスト３０からアドレスを指定したデータ読出し要求が与えられると、図１５に示すデータ読出し／テーブル更新処理手順に従って、まず、読出し対象のデータがキャッシュメモリ３７に格納されているか否かを判断する（ＳＰ３０）。
【０１０８】
そしてチャネルアダプタ３３は、この判断において否定結果を得ると、かかる読出し対象のデータをキャッシュメモリ３７から読み出し（ＳＰ３１）、これをホスト３０に送信した後、このデータ読出し／テーブル更新処理を終了する。
【０１０９】
これに対してチャネルアダプタ３３は、この判断において肯定結果を得ると、かかるデータ読出し要求に基づくデータ読出し処理のジョブを、データ転送制御部３４を介してローカルメモリ３６に登録する（ＳＰ３２）。
【０１１０】
このときマイクロプロセッサ３７は、上述のように定期的にローカルメモリ３６を監視しており、かかるジョブを検出し、その内容を確認すると（ＳＰ３３）、図９について上述した第１のアドレス変換テーブル６４を参照して、データを読み出すべきＦＭモジュール１１、ＦＭチップ２０及びそのＦＭチップ２０が構成するＲＡＩＤグループ６１（図８）等を確認する（ＳＰ３４）。
【０１１１】
続いてマイクロプロセッサ３７は、ＦＭアダプタ３８を制御することにより、かかるＦＭモジュール１１との間のコネクションを確立させ（ＳＰ３５）、その後読出し対象のデータが格納されているＦＭチップ２０の識別番号と当該ＦＭチップ２０内のアドレスとを指定したデータ読出しコマンドをＦＭモジュール１１に送信する（ＳＰ３６）。
【０１１２】
かかるデータ読出しコマンドを受信したＦＭモジュール１１側では、データ入出力処理部４０（図７）のＦＣ‐ＦＭ変換部４３において、このデータ読出しコマンドをＦＭ用のプロトコルにプロトコル変換する（ＳＰ３７）。
【０１１３】
またデータ入出力部４３のＦＭコントローラ４２は、このプロトコル変換されたデータ読出しコマンドと第２のアドレス変換テーブル６５（図１０）とに基づいて、その読出し対象のデータが格納されているＦＭチップ２０を確認する（ＳＰ３８）。
【０１１４】
次いでＦＭコントローラ４３は、読出し対象のデータを対応するＲＡＩＤグループ６１を構成する複数のＦＭチップ２０内の対応するアドレス位置からそれぞれ１ブロック分ずつ読み出す（ＳＰ３９）。この場合におけるＦＭコントローラ４２の具体的な処理内容については後述する。この後ＦＭコントローラ４２は、かかるデータの読み出しが成功したか否か（すなわち、データが読み出せたか否か）を判断する（ＳＰ４０）。
【０１１５】
そしてＦＭコントローラ４２は、この判断において肯定結果を得ると、読み出したデータのＥＣＣを計算し（ＳＰ４１）、計算したＥＣＣに基づいて、かかるデータが正しいか否かを検証する（ＳＰ４２）。
【０１１６】
ＦＭコントローラ４２は、この検証において肯定結果を得ると、読み出した１ブロック分のデータをストレージコントローラ３１Ａ，３１Ｂに送信する（ＳＰ４３）。かくして、かかる複数のＦＭチップ２０から読み出されたデータは、この後ストレージコントローラ３１Ａ，３１Ｂにおいて結合されて元のデータフォーマットのデータに復元される。そしてこの復元されたデータが対応するホスト３０に送信される。
【０１１７】
この後ＦＭコントローラは、すべてのデータの読み出しが完了したか否かを判断する（ＳＰ５０）。そしてＦＭコントローラ４２は、この判断において肯定結果を得るとステップＳＰ３９に戻り、この後すべてのデータの読み出しを完了するまで同様の処理を繰り返す（ＳＰ３９〜ＳＰ５０−ＳＰ３９）。またＦＭコントローラ４２は、やがてすべてのデータを読み出し終えることによりステップＳＰ５０の判断において肯定結果を得ると、このデータ書込み／テーブル更新処理を終了する。
【０１１８】
これに対してＦＭコントローラ４２は、ステップＳＰ４０やステップＳＰ４２の判断において否定結果を得ると、ＦＣ‐ＦＭ変換部４３（図７）を制御して、ストレージコントローラ３１Ａ，３１ＢのＦＭアダプタ３８に読出しエラー通知を送信させる（ＳＰ４４）。この結果、この読出しエラー通知に基づくエラー報告がストレージコントローラ３１Ａ，３１Ｂから対応するホスト３０に送信される。
【０１１９】
次いでＦＭコントローラ４２は、データの読み出しに失敗したそのブロックについて、ブロック管理テーブル７１上の対応する「エラー回数」欄７１Ｆに格納されたエラー回数を１増加させる（ＳＰ４５）。またＦＭコントローラ４２は、かかるブロックについて、ブロック管理テーブル７１の対応する「エラー回数」欄７１Ｆ及び「エラー回数閾値」欄７１Ｅを参照して、そのブロックにおけるエラー回数が当該ブロックについて設定されたエラー回数閾値を超えたか否かを判断する（ＳＰ４６）。
【０１２０】
そしてＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ４８に進み、これに対して肯定結果を得ると、ブロック管理テーブル７１上のそのブロックに対応する「エラーフラグ」欄７１Ｇにエラーフラグを格納する（ＳＰ４７）。この結果このブロックは障害が生じたブロックとして登録されることとなる。またこのときＦＭコントローラ４２は、これと併せてチップ管理テーブル７０上のそのＦＭチップ２０に対応する「障害ブロック数」欄７０Ｄに格納された障害ブロック数を１増加させる。
【０１２１】
この後ＦＭコントローラ４２は、チップ管理テーブル７０のそのＦＭチップ２０に対応する「障害ブロック数」欄７０Ｄ及び「障害ブロック数閾値」欄７０Ｃを参照して、そのＦＭチップ２０における障害ブロック数が当該ＦＭチップ２０について定められた障害ブロック数閾値を超えたか否かを判断する（ＳＰ４８）。
【０１２２】
そしてＦＭコントローラ４２は、この判断において否定結果を得ると、すべてのデータの読み出しが完了したか否かを判断する（ＳＰ５０）。そしてＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ３９に戻り、これに対して肯定結果を得るとこのデータ読出し／テーブル更新処理を終了する。
【０１２３】
これに対してＦＭコントローラ４２は、ステップＳＰ４８の判断において肯定結果を得ると、チップ管理テーブル７０上のそのＦＭチップ２０に対応する「エラーフラグ」欄７０Ｅにエラーフラグを格納する（ＳＰ４９）。これによりそのＦＭチップ２０は、障害が生じたＦＭチップとして登録されることとなる。
【０１２４】
そしてＦＭコントローラ４２は、この後ステップＳＰ５０に進んですべてのデータの読み出しが完了したか否かを判断する（ＳＰ５０）。そしてＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ３９に戻り、これに対して肯定結果を得るとこのデータ読出し／テーブル更新処理を終了する。
【０１２５】
（１−２−３）コレクションコピー処理及びダイナミックスペアリング処理
（１−２−３−１）障害ＦＭチップデータコピー処理
次に、かかるチップ管理テーブル７０（図１１）及びブロック管理テーブル７１（図１２）を用いて行なわれる上述の第１及び第２のコレクションコピー処理並びに第１及び第２のダイナミックスペアリング処理の具体的な処理内容について説明する。
【０１２６】
図１６は、ＦＭモジュール１１内のいずれかのＦＭチップ２０に障害が発生した場合における、そのＦＭモジュール１１のＦＭコントローラ４２の処理内容を示すフローチャートである。ＦＭコントローラ４２は、自ＦＭモジュール１１のＦＭチップ２０に障害が発生した場合、障害ＦＭチップ２０に格納されたデータを修復できるか否か及び自ＦＭモジュール１１内にスペアＦＭチップ２０が存在するか否かに基づいて、第１及び第２のコレクションコピー処理並びに第１及び第２のダイナミックスペアリング処理の中から最も適した１つの処理を選択してこれを実行する。
【０１２７】
すなわち、かかるＦＭコントローラ４２は、それぞれ自己が保持する図１１について上述したチップ管理テーブル７０の「エラーフラグ」欄７０Ｅを常時監視している（ＳＰ６０）。
【０１２８】
そしてＦＭコントローラ４２は、いずれかの「エラーフラグ」欄７０Ｅにエラーフラグが格納されると、そのＦＭチップ２０におけるそのときデータの読み書きを行おうとしたブロック以外の他のブロックからデータを読み出せるか否かを検証する（ＳＰ６１）。
【０１２９】
ＦＭコントローラ４２は、この判断において否定結果を得ると、チップ管理テーブル７０上の「スペアチップの有無」欄７０Ａを参照して、自ＦＭモジュール１１内にスペアＦＭチップ２０が存在するか否かを判断する（ＳＰ６２）。そしてＦＭコントローラ４２は、この判断において肯定結果を得た場合には第１のコレクションコピー処理を実行し（ＳＰ６３）、否定結果を得た場合には第２のコレクションコピー処理を実行する（ＳＰ６４）。
【０１３０】
一方、ＦＭコントローラ４２は、ステップＳＰ６１の判断において肯定結果を得ると、チップ管理テーブル７０上の「スペアチップの有無」欄７０Ａを参照して、自ＦＭモジュール１１内にスペアＦＭチップ２０が存在するか否かを判断する（ＳＰ６５）。そしてＦＭコントローラ４２は、この判断において肯定結果を得た場合には第１のダイナミックスペアリング処理を実行し（ＳＰ６６）、否定結果を得た場合には第２のダイナミックスペアリング処理を実行する（ＳＰ６７）。
【０１３１】
（１−２−３−２）第１のコレクションコピー処理
図１７は、上述した第１のコレクションコピー処理の概要を示す。この第１のコレクションコピー処理では、いずれかのＦＭチップ２０に障害が発生したＦＭモジュール（以下、これを障害ＦＭモジュールと呼ぶ）１１のＦＭコントローラ４２が、かかる障害ＦＭチップ２０が属するＲＡＩＤグループ６１の他のＦＭチップ２０が収納された他のＦＭモジュール１１に対して必要なデータの転送を依頼する。
【０１３２】
そして、障害ＦＭモジュール１１のＦＭコントローラ４２は、かかる他のＦＭモジュール１１から送信されるデータに基づいて障害ＦＭチップ２０に格納されていたデータを修復し、修復したデータをその障害ＦＭモジュール１１内のスペアＦＭチップ２０に書き込む。
【０１３３】
図１８は、このような第１のコレクションコピー処理の具体的な流れを示すフローチャートである。障害ＦＭモジュール１１のＦＭコントローラ４２は、図１６について上述した障害ＦＭチップデータコピー処理のステップＳＰ６３に進むと、この第１のコレクションコピー処理を開始し、まず、チップ管理テーブル７０を参照して、障害ＦＭチップ２０に格納されていたデータの修復データを格納する自ＦＭモジュール１１内のスペアＦＭチップ２０を決定する（ＳＰ７０）。
【０１３４】
続いてＦＭコントローラ４２は、障害ＦＭチップ２０が属するＲＡＩＤグループ６１内の他のＦＭチップ２０の識別番号などの、当該障害ＦＭチップ２０が属するＲＡＩＤグループ６１に関する各種情報（以下、これらをＲＡＩＤグループ情報と呼ぶ）の送信をストレージコントローラ３１Ａ，３１Ｂに依頼し、これを取得する（ＳＰ７１）。
【０１３５】
次いでＦＭコントローラ４２は、ステップＳＰ７０において修復データの格納先として決定したスペアＦＭチップ２０内のかかる修復データのコピーを開始するブロックのアドレスを設定（ブロックアドレスを初期化）する（ＳＰ７２）。
【０１３６】
この後ＦＭコントローラ４２は、ステップＳＰ７１において取得したＲＡＩＤグループ情報に基づき、ＦＭアダプタ３８を介して、障害ＦＭチップ２０と同じＲＡＩＤグループ６１を構成する他のＦＭチップ２０からそのとき対象としているデータを１ブロック分だけ修復するのに必要なデータを読み出して自ＦＭモジュール１１に送信するよう、対応する他のＦＭモジュール１１のＦＭコントローラ４２にデータ送信を依頼する（ＳＰ７３）。
【０１３７】
そしてＦＭコントローラ４２は、かかる他のＦＭモジュール１１からＦＭアダプタ３８を介して１ブロック分の必要なデータが転送されてくると、これらのデータに基づいて障害ＦＭチップ２０に格納されていたデータを修復し（ＳＰ７４）、得られた１ブロック分の修復データを、ステップＳＰ７０において決定したスペアＦＭチップ２０内のそのときデータ書込み先として設定されているアドレス（初期時にはステップＳＰ７２において設定されたアドレス）のブロックに書き込む（ＳＰ７５）。
【０１３８】
次いでＦＭコントローラ４２は、かかるスペアＦＭチップ２０内における修復データの書込み先のブロックのアドレスとして設定されている値を、ステップＳＰ７５において修復データを書き込んだブロックの次のアドレス（つまりステップＳＰ７５において修復データを書き込んだブロックのアドレスよりも「１」だけ大きいアドレス）に更新する（ＳＰ７６）。
【０１３９】
この後ＦＭコントローラ４２は、障害ＦＭチップ２０内のすべてのブロックについて上述のようなコレクションコピーを終了したか否かを判断する（ＳＰ７７）。そしてＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ７３に戻り、この後かかる障害ＦＭチップ２０内のすべてのブロックに対する同様の処理が終了するまでステップＳＰ７３〜ステップＳＰ７７の処理を繰り返す。
【０１４０】
またＦＭコントローラ４２は、やがて障害ＦＭチップ２０内のすべてのブロックに対するコレクションコピーが完了すると、かかる修復データが格納されたスペアＦＭチップ２０を障害ＦＭチップ２０に代えて使用する旨のチップ情報をＦＭアダプタ３８に送信する（ＳＰ７８）。なお、このチップ情報を受信したＦＭアダプタ３８は、後述する図３１のステップＳＰ２０３の処理のために、このチップ情報に含まれるスペアＦＭチップ２０における元のデータが書き込まれていたブロックのアドレスを、修復データが書き込まれたブロックのアドレスに更新する。そしてＦＭコントローラ４２は、この後この第１のコレクションコピー処理を終了する。
【０１４１】
（１−２−３−３）第２のコレクションコピー処理
図１９は、上述した第２のコレクションコピー処理の概要を示す。この第２のコレクションコピー処理では、障害ＦＭモジュール１１内のＦＭコントローラ４２が、スペアのＦＭモジュール（以下、これをスペアＦＭモジュールと呼ぶ）１１のＦＭコントローラ４２に障害ＦＭチップ２０に格納されたデータの修復コピーを依頼する。
【０１４２】
修復コピーを依頼されたスペアＦＭモジュール１１のＦＭコントローラ４２は、障害ＦＭチップ２０と共に同じＲＡＩＤグループ６１を構成する他のＦＭモジュール１１のＦＭコントローラ４２に対して必要なデータの転送を依頼する。
【０１４３】
そして、かかるスペアＦＭモジュール２２のＦＭコントローラ４２は、かかる他のＦＭモジュール１１から送信されるデータに基づいて障害ＦＭチップ２０に格納されていたデータを修復し、修復したデータを自ＦＭモジュール１１内のＦＭチップ２０に書き込む。
【０１４４】
図２０は、このような第２のコレクションコピー処理の具体的な流れを示すフローチャートである。障害ＦＭモジュール１１のＦＭコントローラ４２は、図１６について上述した障害ＦＭチップデータコピー処理のステップＳＰ６４に進むとこの第２のコレクションコピー処理を開始し、まず、ストレージコントローラ３１Ａ,３１ＢのＦＭアダプタ３８からスペアＦＭモジュール１１に関する情報（以下、これをスペアＦＭモジュール情報と呼ぶ）を取得し、取得したスペアＦＭモジュール情報に基づいて、障害ＦＭチップ２０に格納されていたデータのコレクションコピー先となるスペアＦＭモジュール１１と当該スペアＦＭモジュール内のＦＭチップ２０とを選択し決定する（ＳＰ８０）。
【０１４５】
そして障害ＦＭモジュール１１のＦＭコントローラ４２は、このスペアＦＭモジュール１１のＦＭコントローラ４２に対して、障害ＦＭチップ２０に格納されていたデータのかかるＦＭチップへの修復コピーを依頼する（ＳＰ８１）。
【０１４６】
一方、この依頼を受けたスペアＦＭモジュール１１のＦＭコントローラ４２は、ステップＳＰ８０において決定されたＦＭチップ２０内のコレクションコピーを開始するブロックのアドレスを設定する（ＳＰ８２）。またＦＭコントローラ４２は、障害ＦＭチップ２０が属するＲＡＩＤグループ６１のＲＡＩＤグループ情報を送信するようＦＭアダプタ３８に依頼し、これを取得する（ＳＰ８３）。
【０１４７】
この後スペアＦＭモジュール１１のＦＭコントローラ４２は、このＲＡＩＤグループ情報に基づき、ＦＭアダプタ３８を介して、障害ＦＭチップ２０と同じＲＡＩＤグループ６１を構成するＦＭチップ２０から、障害ＦＭチップ２０の１ブロック分のデータを修復するのに必要なデータを読み出して自ＦＭモジュール１１に送信するよう、対応する各ＦＭモジュール１１にデータ送信を依頼する（ＳＰ８４）。
【０１４８】
そしてスペアＦＭモジュール１１のＦＭコントローラ４２は、これらすべての他のＦＭモジュール１１からＦＭアダプタ３８を介して必要なデータが転送されてくると、これらのデータに基づいて障害ＦＭチップ２０に格納されていた1ブロック分のデータを修復し（ＳＰ８５）、得られた修復データを、自ＦＭモジュール１１内のステップＳＰ８４において指定されたＦＭチップ２０に書き込む（ＳＰ８６）。
【０１４９】
次いでスペアＦＭモジュール１１のＦＭコントローラ４２は、このＦＭチップ２０内における修復データの書込み先のブロックのアドレスとして設定されている値を、ステップＳＰ８６において修復データを書き込んだブロックの次のアドレスに更新する（ＳＰ８７）。
【０１５０】
この後スペアＦＭモジュール１１のＦＭコントローラ４２は、障害ＦＭチップ２０内のすべてのブロックについて上述のようなコレクションコピーを終了したか否かを判断する（ＳＰ８８）。そしてかかるＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ８３に戻り、この後かかる障害ＦＭチップ２０内のすべてのブロックに対する同様の処理が終了するまでステップＳＰ８３〜ステップＳＰ８８の処理を繰り返す。
【０１５１】
またスペアＦＭモジュール１１のＦＭコントローラ４２は、やがて障害ＦＭチップ２０内のすべてのブロックに対するコレクションコピーが完了すると、かかる修復データが格納されたＦＭチップ２０を障害ＦＭチップ２０に代えて使用する旨のチップ情報をＦＭアダプタ３８に送信する（ＳＰ８８）。
【０１５２】
そしてＦＭアダプタ３８は、このチップ情報を受信すると、これに応じて対応するデータの格納先を、かかるスペアＦＭモジュール１１内のかかるＦＭチップ２０に変換するアドレス変換処理を実行する（ＳＰ８９）。これによりこの第２のコレクションコピー処理が終了する。
【０１５３】
なお、このような第２のコレクションコピー処理としては、上述のようにスペアＦＭモジュール１１のＦＭコントローラ４２が主導して行なう方法のほかに、障害ＦＭモジュール１１のＦＭコントローラ４２が主導して行なう方法も適用することができる。
【０１５４】
図２１は、かかる第２のコレクションコピー処理を障害ＦＭモジュール１１のＦＭコントローラ４２が主導して行なう場合の処理手順を示している。
【０１５５】
この場合、障害ＦＭモジュール１１のＦＭコントローラ４２は、まず、ストレージコントローラ３１Ａ，３１ＢのＦＭアダプタ３８からスペアＦＭモジュール情報を取得し、取得したスペアＦＭモジュール情報に基づいて、障害ＦＭチップ２０に格納されていたデータのコレクションコピー先となるスペアＦＭモジュール１１と当該スペアＦＭモジュール内のＦＭチップ２０とを選択し決定する（ＳＰ９０）。
【０１５６】
続いて障害ＦＭモジュール１１のＦＭコントローラ４２は、ＦＭアダプタ３８から障害ＦＭチップ２０が属するＲＡＩＤグループのＲＡＩＤグループ情報を取得し（ＳＰ９１）、この後ステップＳＰ９０において修復データの格納先として決定したスペアＦＭチップ２０内のかかる修復データのコピーを開始するブロックのアドレスを設定する（ＳＰ９２）。
【０１５７】
この後、障害ＦＭモジュール１１のＦＭコントローラ４２は、ステップＳＰ９１において取得したＲＡＩＤグループ情報に基づき、ＦＭアダプタ３８を介して、障害ＦＭチップ２０と同じＲＡＩＤグループ６１を構成するＦＭチップ２０から障害ＦＭチップ２０の１ブロック分のデータを修復するのに必要なデータを読み出し、これをステップＳＰ９０においてコピー先として決定したＦＭチップ２０に書き込むべき旨のデータ書込み要求と共にステップＳＰ９０において決定したスペアＦＭモジュール１１に送信するよう、対応するＦＭモジュール１１に依頼する（ＳＰ９３）。
【０１５８】
かくして、かかる依頼を受けた各ＦＭモジュール１１のＦＭコントローラ４２は、必要なデータを対応するＦＭチップ２０から読み出し、これをかかるデータ書込み要求と共にＦＭアダプタ３８を介して指定されたスペアＦＭモジュール１１に送信する。
【０１５９】
そして、対応する各ＦＭモジュール１１からこのようなデータ及びデータ書込み要求を受信したスペアＦＭモジュール１１のＦＭコントローラ４２は、当該データに基づいて障害ＦＭチップ２０に格納されていた1ブロック分のデータを修復し（ＳＰ９４）、得られた修復データを指定されたＦＭチップ２０内のそのときデータ書込み先として設定されているアドレスのブロックに書き込む（ＳＰ９５）。
【０１６０】
この後、障害ＦＭモジュール１１のＦＭコントローラ４２は、かかる修復データが書き込まれたＦＭチップ２０内における修復データの書込み先のブロックのアドレスとして設定されている値を、ステップＳＰ９５において修復データを書き込んだブロックの次のアドレスに更新する（ＳＰ９６）。
【０１６１】
続いて障害ＦＭモジュール１１のＦＭコントローラ４２は、障害ＦＭチップ２０内のすべてのブロックについて上述のようなコレクションコピーを終了したか否かを判断する（ＳＰ９７）。そしてかかるＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ９３に戻り、この後かかる障害ＦＭチップ２０内のすべてのブロックに対する同様の処理が終了するまでステップＳＰ９３〜ステップＳＰ９７の処理を繰り返す。
【０１６２】
また障害ＦＭモジュール１１のＦＭコントローラ４２は、やがて障害ＦＭチップ２０内のすべてのブロックに対するコレクションコピーが完了すると、かかる修復データが格納されたスペアＦＭチップ２０を障害ＦＭチップ２０に代えて使用する旨のチップ情報をＦＭアダプタ３８に送信する（ＳＰ９８）。
【０１６３】
そしてＦＭアダプタ３８は、このチップ情報を受信すると、これに応じて対応するデータの格納先をかかるスペアＦＭモジュール１１内のかかるＦＭチップ２０に変換するアドレス変換処理を実行する（ＳＰ９９）。これによりこの第２のコレクションコピー処理が終了する。
【０１６４】
（１−２−３−４）第１のダイナミックスペアリング処理
図２２は、上述した第１のダイナミックスペアリング処理の概要を示す。この第１のダイナミックスペアリング処理では、障害ＦＭモジュール１１内のＦＭコントローラ４２がかかる障害ＦＭチップ２０に格納されたデータを必要に応じて修復しながら自ＦＭモジュール１１内の障害が発生していないＦＭチップ２０に書き込む。
【０１６５】
図２３は、このような第１のダイナミックスペアリング処理の具体的な流れを示すフローチャートである。障害ＦＭモジュール１１のＦＭコントローラ４２は、図１６について上述した障害ＦＭチップデータコピー処理のステップＳＰ６６に進むと、この第１のダイナミックスペアリング処理を開始し、まず、自ＦＭモジュール１１内のスペアＦＭチップ２０の中から、障害ＦＭチップ２０に格納されていたデータのコピー先となるＦＭチップ２０を選択し決定する（ＳＰ１００）。
【０１６６】
続いてＦＭコントローラ４２は、ステップＳＰ１００において決定したＦＭチップ２０内のコレクションコピーを開始するブロックのアドレスを設定する（ＳＰ１０１）。また、ＦＭコントローラ４２は、障害ＦＭチップ２０から１ブロック分のデータを読み出すデータ読出し処理を実行し（ＳＰ１０２）、この後、このデータ読出し処理が成功したか否か（すなわち、かかる１ブロック分のデータを読み出せたか否か）を判断する（ＳＰ１０３）。
【０１６７】
そしてＦＭコントローラ４２は、この判断において肯定結果を得ると、読み出した１ブロック分のデータをステップＳＰ１００において修復データのコピー先として決定した自ＦＭモジュール１１内のスペアＦＭチップ２０に書き込む（ＳＰ１０７）。
【０１６８】
これに対してＦＭ４２コントローラは、かかるステップＳＰ１０３の判断において否定結果を得ると、障害ＦＭチップ２０が属するＲＡＩＤグループ６１のＲＡＩＤグループ情報を送信するようＦＭアダプタ３８に依頼し、これを取得する（ＳＰ１０４）。
【０１６９】
この後ＦＭコントローラ４２は、このＲＡＩＤグループ情報に基づき、ＦＭアダプタ３８を介して、障害ＦＭチップ２０と同じＲＡＩＤグループ６１を構成するＦＭチップ２０から、障害ＦＭチップ２０の１ブロック分のデータを修復するのに必要なデータを読み出して自ＦＭモジュール１１に送信するよう、対応するＦＭモジュール１１に依頼する（ＳＰ１０５）。
【０１７０】
そしてスペアＦＭモジュール１１のＦＭコントローラ４２は、これらすべての他のＦＭモジュール１１からＦＭアダプタ３８を介して必要なデータが転送されてくると、これらのデータに基づいて障害ＦＭチップ２０に格納されていた1ブロック分のデータを修復し（ＳＰ１０６）、得られた修復データを、自ＦＭモジュール１１内のステップＳＰ１００において決定したＦＭチップ２０に書き込む（ＳＰ１０７）。
【０１７１】
次いでＦＭコントローラ４２は、このＦＭチップ２０内における修復データの書込み先のブロックのアドレスとして設定されている値を、ステップＳＰ７５において修復データを書き込んだブロックの次のアドレスに更新する（ＳＰ１０８）。
【０１７２】
この後ＦＭコントローラ４２は、障害ＦＭチップ２０内のすべてのブロックについて上述のようなコレクションコピーを終了したか否かを判断する（ＳＰ１０９）。そしてＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ１０２に戻り、この後かかる障害ＦＭチップ２０内のすべてのブロックに対する同様の処理が終了するまでステップＳＰ１０２〜ステップＳＰ１０９の処理を繰り返す。
【０１７３】
またＦＭコントローラ４２は、やがて障害ＦＭチップ２０内のすべてのブロックに対するダイナミックスペアリングによるデータコピーが完了すると、かかる修復データが格納されたＦＭチップ２０を障害ＦＭチップ２０に代えて使用する旨のチップ情報をストレージコントローラ３１Ａ，３１Ｂに送信する（ＳＰ１１０）。なお、このチップ情報を受信したＦＭコントローラ４２は、このチップ情報に含まれるスペアＦＭチップ２０における元のデータが書き込まれていたブロックのアドレスを、修復データが書き込まれたブロックのアドレスに更新する。そしてＦＭコントローラ４２は、この後この第１のダイナミックスペアリング処理を終了する。
【０１７４】
（１−２−３−５）第２のダイナミックスペアリング処理
図２４は、上述した第２のダイナミックスペアリング処理の概要を示す。この第２のダイナミックスペアリング処理では、障害ＦＭチップ２０のデータを、そのコピー先となるスペアＦＭモジュール１１のＦＭコントローラ４２が必要に応じて修復しながら自ＦＭモジュール１１内のＦＭチップ２０に書き込む。
【０１７５】
図２５は、このような第２のダイナミックスペアリング処理の具体的な流れを示すフローチャートである。障害ＦＭモジュール１１のＦＭコントローラ４２は、図１６について上述した障害ＦＭチップデータコピー処理のステップＳＰ６７に進むとこの第２のダイナミックスペアリング処理を開始して、まず、スペアＦＭモジュール情報をストレージコントローラ３１Ａ，３１Ｂから取得し、取得したスペアＦＭモジュール情報に基づいて、障害ＦＭチップ２０に格納されたデータのコピー先となるスペアＦＭモジュール１１と当該スペアＦＭモジュール１１内のＦＭチップ２０とを選択し決定する（ＳＰ１２０）。
【０１７６】
そして障害ＦＭモジュール１１のＦＭコントローラ４２は、このスペアＦＭモジュール１１のＦＭコントローラ４２に対して、ＦＭアダプタ３８を介して、コピー先のＦＭモジュール１１及びＦＭチップ２０としてステップＳＰ１２０において決定したＦＭモジュール１１及びＦＭチップ２０を指定して、障害ＦＭチップ２０に格納されていたデータのダイナミックスペアリングを依頼する（ＳＰ１２１）。
【０１７７】
かかるダイナミックスペアリングの依頼を受けたスペアＦＭモジュール１１のＦＭコントローラ４２は、ステップＳＰ１２０においてデータコピー先として決定されたスペアＦＭチップ２０内のかかる修復データのコピーを開始するブロックのアドレスを設定（ブロックアドレスを初期化）する（ＳＰ１２２）。
【０１７８】
また、かかるスペアＦＭモジュール１１のＦＭコントローラ４２は、障害ＦＭモジュール１１にアクセスして障害ＦＭチップ２０から１ブロック分のデータを読み出し（ＳＰ１２３）、この後、このデータを読み出せたか否かを判断する（ＳＰ１２４）。
【０１７９】
スペアＦＭモジュール１１のＦＭコントローラ４２は、この判断において肯定結果を得ると、読み出した１ブロック分のデータをステップＳＰ１２０においてコピー先として指定された決定したＦＭチップ２０に書き込む（ＳＰ１２８）。
【０１８０】
これに対してスペアＦＭモジュール１１のＦＭコントローラ４２は、障害ＦＭチップ２０が属するＲＡＩＤグループ６１のＲＡＩＤグループ情報を送信するようＦＭアダプタ３８に依頼し、これを取得する（ＳＰ１２５）。
【０１８１】
この後スペアＦＭモジュール１１のＦＭコントローラ４２は、このＲＡＩＤグループ情報に基づき、ＦＭアダプタ３８を介して、障害ＦＭチップ２０と同じＲＡＩＤグループ６１を構成するＦＭチップ２０から、障害ＦＭチップ２０の１ブロック分のデータを修復するのに必要なデータを読み出して自ＦＭモジュール１１に送信するよう、対応する各ＦＭモジュール１１に依頼する（ＳＰ１２６）。
【０１８２】
そしてスペアＦＭモジュール１１のＦＭコントローラ４２は、これらすべての他のＦＭモジュール１１からＦＭアダプタ３８を介して必要なデータが転送されてくると、これらのデータに基づいて障害ＦＭチップ２０に格納されていた1ブロック分のデータを修復し（ＳＰ１２７）、得られた修復データをステップＳＰ１２１においてコピー先として指定されたＦＭチップ２０内のそのときデータ書込み先として設定されているアドレス（初期時にはステップＳＰ７２において設定されたアドレス）のブロックに書き込む（ＳＰ１２８）。
【０１８３】
次いでスペアＦＭモジュールのＦＭコントローラ４２は、かかるスペアＦＭチップ２０内における修復データの書込み先のブロックのアドレスとして設定されている値を、ステップＳＰ１２８において修復データを書き込んだブロックの次のアドレスに更新する（ＳＰ１２９）。
【０１８４】
この後スペアＦＭモジュール１１のＦＭコントローラ４２は、障害ＦＭチップ２０内のすべてのブロックについて上述のようなダイナミックスペアリングを終了したか否かを判断する（ＳＰ１３０）。そしてかかるＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ１２３に戻り、この後かかる障害ＦＭチップ２０内のすべてのブロックに対する同様の処理が終了するまでステップＳＰ１２３〜ステップＳＰ１３０の処理を繰り返す。
【０１８５】
またスペアＦＭモジュール１１のＦＭコントローラ４２は、やがて障害ＦＭチップ２０内のすべてのブロックに対するコレクションコピーが完了すると、かかる修復データが格納されたスペアＦＭチップ２０を障害ＦＭチップ２０に代えて使用する旨のチップ情報をＦＭアダプタ３８に送信する（ＳＰ１３１）。
【０１８６】
そしてＦＭアダプタ３８は、このチップ情報を受信すると、これに応じて対応するデータの格納先を、かかるスペアＦＭモジュール１１内のかかるＦＭチップ２０に変換するアドレス変換処理を実行する（ＳＰ１３２）。これによりこの第２のダイナミックスペアリング処理が終了する。
【０１８７】
なお、このような第２のダイナミックスペアリング処理としては、上述のようにスペアＦＭモジュール１１のＦＭコントローラ４２が主導して行なう方法のほかに、障害ＦＭモジュール１１のＦＭコントローラ４２が主導して行なう方法も適用することができる。
【０１８８】
図２６は、かかる第２のダイナミックスペアリング処理を障害ＦＭモジュール１１のＦＭコントローラ４２が主導して行なう場合の処理手順を示している。
【０１８９】
この場合障害ＦＭモジュール１１のＦＭコントローラ４２は、まず、ストレージコントローラ３１Ａ，３１ＢのＦＭアダプタ３８からスペアＦＭモジュール情報を取得し、取得したスペアＦＭモジュール情報に基づいて、障害ＦＭチップ２０に格納されていたデータのコレクションコピー先となるスペアＦＭモジュール１１と当該スペアＦＭモジュール内のＦＭチップ２０とを選択し決定する（ＳＰ１４０）。
【０１９０】
続いて障害ＦＭモジュール１１のＦＭコントローラ４２は、ＦＭアダプタ３８から障害ＦＭチップ２０が属するＲＡＩＤグループ６１のＲＡＩＤグループ情報を取得し（ＳＰ１４１）、この後ステップＳＰ１４０においてコレクションコピー先として決定したスペアＦＭチップ２０内のかかるコレクションコピーを開始するブロックのアドレスを設定する（ＳＰ１４２）。
【０１９１】
この後障害ＦＭモジュール１１のＦＭコントローラ４２は、障害ＦＭチップ２０からの１ブロック分のデータを読み出すデータ読出し処理を実行し（ＳＰ１４３）、当該データ読出し処理が成功したか否か（すなわち、データを読み出せたか否か）を判断する（ＳＰ１４４）。
【０１９２】
障害ＦＭモジュール１１のＦＭコントローラ４２は、この判断において肯定結果を得ると、この障害ＦＭチップ２０から読み出した１ブロック分のデータを、ＦＭアダプタ３８を介して、ステップＳＰ１４０においてコピー先として決定したＦＭチップ２０に書き込むべき旨のデータ書込みコマンドと共にステップＳＰ１４０において決定したスペアＦＭモジュール１１に転送する（ＳＰ１４５）。そして、このデータを受信したスペアＦＭモジュール１１のＦＭコントローラ４２は、当該データを指定されたＦＭチップ２０に書き込む（ＳＰ１４８）。
【０１９３】
一方、障害ＦＭモジュール１１のＦＭコントローラ４２は、ステップＳＰ１４４の判断において否定結果を得ると、ステップＳＰ１４１において取得したＲＡＩＤグループ情報に基づき、ＦＭアダプタ３８を介して、障害ＦＭチップ２０と同じＲＡＩＤグループ６１を構成するＦＭチップ２０から障害ＦＭチップ２０の１ブロック分のデータを修復するのに必要なデータを読み出し、これをステップＳＰ１４０においてコピー先として決定したＦＭチップ２０に書き込むべき旨のデータ書込み要求と共にステップＳＰ１４０において決定したスペアＦＭモジュール１１に送信するよう、対応するＦＭモジュール１１に依頼する（ＳＰ１４６）。
【０１９４】
かくして、かかる依頼を受けた各ＦＭモジュール１１のＦＭコントローラ４２は、必要なデータを対応するＦＭチップ２０から読み出し、これをかかるデータ書込み要求と共にＦＭアダプタ３８を介して指定されたスペアＦＭモジュール１１に送信する。
【０１９５】
そして、対応する各ＦＭモジュール１１からこのようなデータ及びデータ書込み要求を受信したスペアＦＭモジュール１１のＦＭコントローラ４２は、当該データに基づいて障害ＦＭチップ２０に格納されていた1ブロック分のデータを修復し（ＳＰ１４７）、得られた修復データを指定されたＦＭチップ２０内のそのときデータ書込み先として設定されているアドレスのブロックに書き込む（ＳＰ１４８）。
【０１９６】
この後、障害ＦＭモジュール１１のＦＭコントローラ４２は、かかるＦＭチップ２０内におけるデータの書込み先のブロックのアドレスとして設定されている値を、ステップＳＰ１４８においてデータを書き込んだブロックの次のアドレスに更新する（ＳＰ１４９）。
【０１９７】
続いて障害ＦＭモジュール１１のＦＭコントローラ４２は、障害ＦＭチップ２０内のすべてのブロックについて上述のようなダイナミックスペアリングを終了したか否かを判断する（ＳＰ１５０）。そしてかかるＦＭコントローラ４２は、この判断において否定結果を得るとステップＳＰ１４３に戻り、この後かかる障害ＦＭチップ２０内のすべてのブロックに対する同様の処理が終了するまでステップＳＰ１４３〜ステップＳＰ１５０の処理を繰り返す。
【０１９８】
また障害ＦＭモジュール１１のＦＭコントローラ４２は、やがて障害ＦＭチップ２０内のすべてのブロックに対するダイナミックスペアリングが完了すると、かかる修復データが格納されたスペアＦＭチップ２０を障害ＦＭチップ２０に代えて使用する旨のチップ情報をＦＭアダプタ３８に送信する（ＳＰ１５１）。
【０１９９】
そしてＦＭアダプタ３８は、このチップ情報を受信すると、これに応じて対応するデータの格納先をかかるスペアＦＭモジュール１１内のかかるＦＭチップ２０に変換するアドレス変換処理を実行する（ＳＰ１５２）。これによりこの第２のダイナミックスペアリング処理が終了する。
【０２００】
（１−２−４）データ書込み処理及びデータ読出し処理
次に、本実施の形態によるストレージシステム１において行なわれる、上述のようなコレクションコピー機能及びダイナミックスペアリング機能を考慮したデータ書込み処理及びデータ読出し処理の具体的な処理内容について説明する。
【０２０１】
図２７は、図１３及び図１４について上述したデータ書込み／テーブル更新処理のステップＳＰ９において行われるデータ書込み処理の具体的な内容を示すフローチャートである。
【０２０２】
ＦＭモジュール１１のＦＭコントローラ４２は、データ書込み／テーブル更新処理のステップＳＰ９に進むとこのデータ書込み処理を開始し、まず、書込み対象のデータの書込み先のＦＭチップ２０が、現在、上述のコレクションコピー機能又はダイナミックスペアリング機能に基づくコピー中のＦＭチップ２０であるか否かを判断する（ＳＰ１６０）。
【０２０３】
ＦＭコントローラ４２は、この判断において否定結果を得ると、通常のデータ書込み処理を行い（ＳＰ１６１）、この後このデータ書込み処理を終了して、データ書込み／テーブル更新処理に戻る。
【０２０４】
これに対してＦＭコントローラ４２は、ステップＳＰ１６０の判断において肯定結果を得ると、そのコピーのコピーモードが第１のコレクションモードであるか否かを判断する（ＳＰ１６２）。そしてＦＭコントローラ４２は、この判断において肯定結果を得ると、自ＦＭモジュール１１内のコピー先のＦＭチップ２０における対応するブロックに書込み対象のデータを書き込む（ＳＰ１６３）。そしてＦＭコントローラ４２は、この後、このデータ書込み処理を終了して、データ書込み／テーブル更新処理に戻る。
【０２０５】
またＦＭコントローラ４２は、ステップＳＰ１６２の判断において否定結果を得ると、そのコピーのコピーモードが第２のコレクションモードであるか否かを判断する（ＳＰ１６４）。そしてＦＭコントローラ４２は、この判断において肯定結果を得ると、書込み対象のデータを、書き込み先のアドレスを指定したデータ書込み要求と共にコピー先のＦＭモジュール１１に送信する（ＳＰ１６５）。そしてＦＭコントローラ４２は、この後、このデータ書込み処理を終了して、データ書込み／テーブル更新処理に戻る。
【０２０６】
さらにＦＭコントローラ４２は、ステップＳＰ１６６の判断において否定結果を得ると、そのコピーのコピーモードが第１のダイナミックスペアリングモードであるか否かを判断する（ＳＰ１６６）。そしてＦＭコントローラ４２は、この判断において肯定結果を得ると、そのとき書込み対象のデータを書き込むべきブロックが、ダイナミックスペアリング処理が完了したブロックであるか否かを判断する（ＳＰ１６７）。
【０２０７】
ＦＭコントローラ４２は、この判断において肯定結果を得ると、かかる書込み対象のデータを自ＦＭモジュール１１内のコピー元のＦＭチップ２０における対応するブロックに書き込む（ＳＰ１６８）。そしてＦＭコントローラ４２は、この後、このデータ書込み処理を終了して、データ書込み／テーブル更新処理に戻る。
【０２０８】
これに対してＦＭコントローラ４２は、ステップＳＰ１６７の判断において否定結果を得ると、書込み対象のデータを、書き込み先のアドレスを指定したデータ書込み要求と共にコピー先のＦＭモジュール１１に送信する（ＳＰ１６９）。そしてＦＭコントローラ４２は、この後、このデータ書込み処理を終了して、データ書込み／テーブル更新処理に戻る。
【０２０９】
さらにＦＭコントローラ４２は、ステップＳＰ１６６の判断において否定結果を得ると、そのとき書込み対象のデータを書き込むべきブロックが、ダイナミックスペアリング処理が完了したブロックであるか否かを判断する（ＳＰ１７０）。
【０２１０】
ＦＭコントローラ４２は、この判断において肯定結果を得ると、書込み対象のデータを、書き込み先のアドレスを指定したデータ書込み要求と共にコピー先のＦＭモジュール１１に送信する（ＳＰ１７１）、このデータ書込み処理を終了する。そしてＦＭコントローラ４２は、この後、このデータ書込み処理を終了して、データ書込み／テーブル更新処理に戻る。
【０２１１】
これに対してＦＭコントローラは、ステップＳＰ１７０の判断において否定結果を得ると、かかる書込み対象のデータを自ＦＭモジュール１１内のコピー先のＦＭチップにおける対応するブロックに書き込む（ＳＰ１７２）。そしてＦＭコントローラ４２は、この後、このデータ書込み処理を終了して、データ書込み／テーブル更新処理に戻る。
【０２１２】
一方、図２８は、図１５について上述したデータ読出し／テーブル更新処理のステップＳＰ３９において行われるデータ読出し処理の具体的な内容を示すフローチャートである。
【０２１３】
ＦＭモジュール１１のＦＭコントローラ４２は、データ読出し／テーブル更新処理のステップＳＰ３９に進むとこのデータ読出し処理を開始し、まず、読出し対象のデータが格納されているＦＭチップ２０が、現在、上述のコレクションコピー機能又はダイナミックスペアリング機能に基づくコピー中のＦＭチップ２０であるか否かを判断する（ＳＰ２５０）。
【０２１４】
ＦＭコントローラ４２は、この判断において否定結果を得ると、通常のデータ読出し処理を行い（ＳＰ２５１）、この後このデータ読出し処理を終了して、データ読出し／テーブル更新処理に戻る。
【０２１５】
これに対してＦＭコントローラ４２は、ステップＳＰ２５０の判断において肯定結果を得ると、そのコピーのコピーモードが第１のコレクションモードであるか否かを判断する（ＳＰ２５２）。そしてＦＭコントローラ４２は、この判断において肯定結果を得ると、そのとき読み出すべきデータが格納されているブロックが、コレクションコピーが完了したブロックであるか否かを判断する（ＳＰ２５３）。
【０２１６】
ＦＭコントローラ４２は、この判断において否定結果を得ると、図１８について上述した第１のコレクションコピー処理のステップＳＰ７３及びステップＳＰ７４と同様の処理により元のデータを修復する（ＳＰ２５４）。そしてＦＭコントローラ４２は、この後、このデータ読出し処理を終了して、データ読出し／テーブル更新処理に戻る。
【０２１７】
これに対してＦＭコントローラ４２は、ステップＳＰ２５３の判断において肯定結果を得ると、コピー先のＦＭチップ２０からデータを読み出し、当該データをストレージコントローラ３１Ａ，３１Ｂに送信する（ＳＰ２５５）。そしてＦＭコントローラ４２は、この後、このデータ読出し処理を終了して、データ読出し／テーブル更新処理に戻る。
【０２１８】
またＦＭコントローラ４２は、ステップＳＰ２５２の判断において否定結果を得ると、そのコピーのコピーモードが第２のコレクションモードであるか否かを判断する（ＳＰ２５６）。そしてＦＭコントローラ４２は、この判断において否定結果を得ると、この後ステップＳＰ２５３〜ステップＳＰ２５５と同様にして読出し対象のデータを取得する（ＳＰ２５７〜ＳＰ２５９）。そしてＦＭコントローラ４２は、この後、このデータ読出し処理を終了して、データ読出し／テーブル更新処理に戻る。
【０２１９】
一方、ＦＭコントローラ４２は、ステップＳＰ２５６の判断において否定結果を得ると、そのコピーのコピーモードが第１のダイナミックスペアリングモードであるか否かを判断する（ＳＰ１８０）。そしてＦＭコントローラ４２は、この判断において肯定結果を得ると、そのとき読み出すべきデータが格納されているブロックが、ダイナミックスペアリングによるコピーが完了したブロックであるか否かを判断する（ＳＰ１８１）。
【０２２０】
ＦＭコントローラ４２は、この判断において肯定結果を得ると、コピー先のＦＭチップ２０からデータを読み出し、当該データをストレージコントローラ３１Ａ，３１Ｂに送信する（ＳＰ１８２）。そしてＦＭコントローラ４２は、この後、このデータ読出し処理を終了して、データ読出し／テーブル更新処理に戻る。
【０２２１】
これに対してＦＭコントローラ４２は、かかる判断において否定結果を得ると、コピー元のＦＭチップ（すなわち障害ＦＭチップ）２０から読出し対象のデータを読み出すデータ読出し処理を実行する（ＳＰ１８３）。
【０２２２】
そしてＦＭコントローラ４２は、かかるデータ読出し処理により読出し対象のデータを読み出せたか否かを判断し（ＳＰ１８４）、肯定結果を得ると、読み出したデータをストレージコントローラ３１Ａ，３１Ｂに送信する。そしてＦＭコントローラ４２は、この後、このデータ読出し処理を終了して、データ読出し／テーブル更新処理に戻る。
【０２２３】
これに対してＦＭコントローラ４２は、ステップＳＰ１８４の判断において否定結果を得ると、ステップＳＰ２５４と同様にして元のデータを修復する（ＳＰ１８５）。そしてＦＭコントローラ４２は、この後、このデータ読出し処理を終了して、データ読出し／テーブル更新処理に戻る。
【０２２４】
他方、ＦＭコントローラ４２は、ステップＳＰ１８０の判断において否定結果を得ると、ステップＳＰ１８１〜ステップＳＰ１８５と同様にして読出し対象のデータを取得する（ＳＰ１８６〜ＳＰ１９０）。そしてＦＭコントローラ４２は、この後、このデータ読出し処理を終了して、データ読出し／テーブル更新処理に戻る。
【０２２５】
なお、図１７〜図２８について上述したようにＦＭアダプタ３８を経由して転送する読出し対象又は書込み対象のデータのデータフォーマットを図２９に示す。
【０２２６】
本実施の形態の場合、読出し対象又は書込み対象のデータはこの図２９のデータ部８１に格納され、このデータ部８１の前後にそれぞれヘッダ部８０及びフッタ部８２が付加される。そしてヘッダ部８０には、送信先アドレス情報として、送信先のＦＭモジュール１１が接続されているＦＣループ２５（図５）の識別番号（ループＩＤ）と、送信先のＦＭモジュール１１の識別番号（ＦＭモジュールＩＤ）とが格納され、送信元アドレス情報として、送信元のＦＭモジュール１１が接続されているＦＣループ２５の識別番号及び送信元のＦＭモジュール１１の識別番号が格納される。
【０２２７】
（１−３）本実施の形態の効果
以上の構成において、ＦＭモジュール１１のＦＭコントローラ４２は、自ＦＭモジュール１１内のＦＭチップ２０に障害が発生した場合、そのＦＭチップ（障害ＦＭチップ）２０に格納されているデータのコピー先とするＦＭチップ２０を決定し、障害ＦＭチップに格納されていたデータをコピー先として決定したＦＭチップ２０にコピーする。
【０２２８】
従って、このストレージシステム１では、かかる障害ＦＭチップ２０からのデータ移動が障害ＦＭモジュール１１又はコピー先のＦＭモジュール１１のＦＭコントローラ４２が主導して行なわれるため、ストレージコントローラ３１Ａ，３１Ｂ（ＦＭアダプタ３８）の負荷を増加させることがない。よって、ストレージシステム１におけるデータ入出力処理等の他の処理の性能を劣化させるなどの悪影響を及ぼすことなく、障害が発生したＦＭチップ２０内のデータを他のＦＭチップ２０に移動させることができる。
【０２２９】
以上の構成によれば、性能劣化を防止しながら有効に対応し得るストレージシステムを実現できる。
【０２３０】
（２）第２の実施の形態
上述の第１の実施の形態においては、上述した第１及び第２のコレクションコピー処理を、ストレージコントローラ３１Ａ，３１Ｂから独立して、障害ＦＭモジュール１１のＦＭコントローラ４２又はコレクションコピー処理を依頼されたスペアＦＭモジュール１１のＦＭコントローラ４２が主導して行う場合について説明した。
【０２３１】
これに対して第２の実施の形態によるストレージシステム９０（図１、図６）では、図３０に示すように、ＦＭモジュール９４のＦＭコントローラ９３が自ＦＭモジュール９３内のＦＭチップ２０に障害が発生した場合、ＦＭアダプタ９２に対し、障害ＦＭチップ２０から同じ又は他のＦＭモジュール９４内のＦＭチップ２０へのコレクションコピーを依頼し、ＦＭアダプタ９２が主導してかかるコレクションコピー処理を実行する。
【０２３２】
図３１は、このようなコレクションコピー処理の依頼を受けたストレージコントローラ９１のＦＭアダプタ９２（図３０）の処理内容を示すフローチャートである。
【０２３３】
ＦＭアダプタ９２は、いずれかのＦＭモジュール（障害ＦＭモジュール）９４よりかかるコレクションコピー処理の依頼を受けると、このコレクションコピー処理を開始し、まず、障害ＦＭチップ２０に格納されたデータのコピー先となるＦＭチップ２０を決定する（ＳＰ２１０）。
【０２３４】
具体的に、ＦＭアダプタ９２は、障害ＦＭモジュール９４が第１のコレクションコピーモードであるときには、障害ＦＭモジュール９４に対して当該障害ＦＭモジュール９４内のスペアＦＭチップ２０に関する情報を問い合わせ、スペアＦＭチップ２０が存在するときには、そのうちの１つのスペアＦＭチップ２０をコピー先に決定する。またＦＭアダプタ９２は、障害ＦＭモジュール９４が第１のコレクションコピーモードであるときには、自己が保持するスペアＦＭモジュール情報に基づいて、コピー先のスペアＦＭモジュール９４と、そのスペアＦＭモジュール９４内のＦＭチップ２０とを決定することになる。
【０２３５】
続いてＦＭアダプタ９２は、障害ＦＭチップ２０と同じＲＡＩＤグループ６１を構成する他のＦＭチップ２０から読み出したデータに基づいて障害ＦＭチップ２０に格納されていたデータを修復し、これをステップＳＰ２１０において決定したＦＭチップ２０に書き込むべき旨のコレクション書き込み処理を、コピー先のＦＭモジュール（障害ＦＭモジュール又はスペアＦＭモジュール）９４に要求する（ＳＰ２１１）。
【０２３６】
この後ＦＭアダプタ９２は、かかる他のＦＭチップ２０を内蔵する各ＦＭモジュール９４のＦＭコントローラ９３に対して、当該ＦＭチップ２０から対応するデータを読み出し、これをステップＳＰ２１０において決定したＦＭモジュール９４に転送すべき旨のデータ転送要求を送信する（ＳＰ２１２）。
【０２３７】
そしてＦＭアダプタ９２は、この後、かかるコレクションコピー処理が終了すると、対応するデータの格納先を、かかるスペアＦＭモジュール９４内のかかるＦＭチップ２０に変換するアドレス変換処理を実行し（ＳＰ２１３）、この後このコレクションコピー処理を終了する。
【０２３８】
このようにこの第２の実施の形態によるストレージシステム９０では、かかる第１及び第２のコレクションコピー処理をＦＭアダプタ９２が主導して行うため、ＦＭアダプタ９２の処理性能が高く、かかる障害ＦＭモジュール９４から他のＦＭモジュール９４へのデータ移動がＦＭアダプタ９２の大きな負荷とならないような場合に、障害ＦＭモジュール９４のＦＭコントローラ９３や、スペアＦＭモジュール９４のＦＭコントローラ９３の処理負荷を軽減することができる。かくするにつき、障害ＦＭモジュール９４から他のＦＭモジュール９４へのデータ移動に伴う負荷増加に起因するＦＭモジュール９４のデータ読書き性能の劣化を有効に防止することができる。
【０２３９】
（３）第３の実施の形態
第１の実施の形態によるストレージシステム１では、ＦＭチップ２０単位でのコレクションコピーやダイナミックスペアリングを行っているが、本実施の形態によるストレージシステム１００（図１、図６）では、これに加えてさらに、図３２に示すように、ＦＭモジュール１０５内において予め定められた閾値（以下、これを障害チップ数閾値と呼ぶ）を超える数のＦＭチップ２０に障害が発生した場合に、ＦＭモジュール１０５単位でのコレクションコピーやダイナミックスペアリングを行うことを特徴とする。
【０２４０】
図３３は、このようなＦＭモジュール１０５単位でのコピー処理（以下、これをＦＭモジュールコピー処理と呼ぶ）に関する障害ＦＭモジュール１０５のＦＭコントローラ１０４の処理内容を示すフローチャートである。
【０２４１】
かかるＦＭコントローラ１０４は、図１０について上述したチップ管理テーブル６４に基づいて、自ＦＭモジュール１０５内の障害ＦＭチップ数を常時監視しており（ＳＰ２１０）、この障害ＦＭチップ数が障害チップ数閾値を超えると、自ＦＭモジュール１０５内のすべてのデータをコレクションコピー処理又はダイナミックスペアリング処理によりスペアＦＭモジュール１０５にコピーするようストレージコントローラ１０１のＦＭアダプタ１０３に依頼し（ＳＰ２２１）、この後、このＦＭモジュールコピー処理を終了する。
【０２４２】
一方、このＦＭモジュールコピー処理の依頼を受けたＦＭアダプタ１０３は、コピー先となるスペアＦＭモジュール１０５のＦＭコントローラ１０４に対して、かかるＦＭモジュールコピー処理を依頼してきたＦＭモジュール（障害ＦＭモジュール）１０５内のすべてのデータをコレクションコピー処理又はダイナミックスペアリング処理により当該スペアＦＭモジュール１０５にコピーすべき指示を与える。またＦＭアダプタ１０３は、この際、スペアＦＭモジュール１０５のＦＭコントローラ１０４に対して、障害ＦＭモジュール１０５内の各データを復元するために必要なデータの位置情報（障害ＦＭモジュール１０５と共にＲＡＩＤグループを構成する他のＦＭモジュール１０５内の対応するデータのアドレス）をスペアＦＭモジュール１１のＦＭコントローラ１０４に送信する。
【０２４３】
かかる指示を受けたスペアＦＭモジュール１０５のＦＭコントローラ１０４は、ＦＭアダプタ１０３から与えられた対応するデータの位置情報に基づいて、ＦＭアダプタ１０３を介して対応するＦＭモジュール１０５のＦＭコントローラ１０４に必要なデータの送信を依頼する。そしてスペアＦＭモジュール１０５のＦＭコントローラ１０４は、この依頼に応じて対応する各ＦＭモジュール１０５から必要なデータが送信されると、このデータに基づいて障害ＦＭモジュール１０５に格納されていたデータを復元し、これを自ＦＭモジュール１０５内のＦＭチップ２０に格納する。そしてスペアＦＭモジュール１０５のＦＭコントローラ１０４は、このようにして障害ＦＭモジュール１０５に格納されていたすべてのデータのコレクションコピー処理又はダイナミックスペアリング処理を終了すると、ＦＭモジュールコピー処理を終了する。
【０２４４】
このように本実施の形態によるストレージシステム１００では、障害ＦＭチップ数が障害ＦＭチップ数閾値を超えたＦＭモジュール１０５単位でのコピーをも行うため、その間におけるＦＭアダプタ１０３の負荷は増加するものの、データ保護に関してより高い信頼性を得ることができる。
【０２４５】
（４）他の実施の形態
なお上述の第１〜第３実施の形態においては、ストレージコントローラ３１Ａ，３１ＢのＦＭアダプタ３８に対してＦＭモジュール１１を直列かつループ状に接続するようにした場合について述べたが、本発明はこれに限らず、例えば図６との対応部分に同一符号を付した図３４に示すように、エキスパンダ１１１を用いて各ＦＭモジュール１１をストレージコントローラ１１０のＦＭアダプタ３８に対して並列的に接続するようにしてもよい。
【０２４６】
またこの場合において、図３５に示すように、記憶制御装置１２０や各記憶装置１２１内にもエキスパンダ１２２を配置し、これらのエキスパンダ１２２を介して記憶制御装置１２０及び各記憶装置１２１間並びに記憶制御装置１２０及び各記憶装置１２１内の各ＦＭモジュール１１間を接続するようにしてもよい。
【０２４７】
さらに上述の第１〜第３の実施の形態においては、記憶制御装置２や各記憶装置３にＦＭモジュール１１のみを搭載するようにした場合について述べたが、本発明はこれに限らず、例えば図６との対応部分に同一符号を付した図３６に示すように、ＦＭモジュール１１及びハードディスクドライブ１３０を混載するようにしてもよい。この場合において、例えばこの図３６に示すように、どの記憶デバイスがＦＭモジュール１１でどの記憶デバイスがハードディスクドライブ１３０であるかを管理装置３９において確認できるようにしておけば、これらＦＭモジュール１１及びハードディスクドライブ１３０の管理を容易化することができる。
【０２４８】
さらに上述の第１〜第３の実施の形態においては、不揮発性メモリとしてフラッシュメモリを適用するようにした場合について述べたが、本発明はこれに限らず、この他種々の不揮発性メモリを広く適用することができる。
【０２４９】
さらに上述の第３の実施の形態においては、ＦＭモジュール１０５内において障害チップ数閾値を超える数のＦＭチップ２０に障害が発生した場合に、ＦＭモジュール１０５単位でのコレクションコピーやダイナミックスペアリングを行うようにした場合について述べたが、本発明はこれに限らず、例えばストレージコントローラ１０１のＦＭアダプタ１０３及びＦＭモジュール１０５間のリンク障害が発生した場合にも同様にＦＭモジュール１０５単位でのコレクションコピーやダイナミックスペアリングを行うようにしても良い。この場合は、ＦＭアダプタ１０３が各ＦＭモジュール１０５との間のリンク状態を監視し、リンク障害を検知したときに、上述と同様にしてコレクションコピーやダイナミックスペアリングを行なわせるようすれば良い。この場合において、このようなコレクションコピー処理やダイナミックスペアリング処理については、スペアＦＭモジュール１０５のＦＭコントローラ１０４が主導して行なっても良いし、ＦＭアダプタ１０３が主導して行なっても良い。これは第３の実施の形態においても同様である。
【産業上の利用可能性】
【０２５０】
本発明は、記憶デバイスとしてフラッシュメモリを採用した種々の構成のストレージシステムに広く適用することができる。
【図面の簡単な説明】
【０２５１】
【図１】本実施の形態によるストレージシステムの外観構成を示す斜視図である。
【図２】（Ａ）は記憶装置の正面構成を示す正面図、（Ｂ）は記憶装置の内部構成を示す側面からの透視図、（Ｃ）は記憶装置の背面構成を示す背面図である。
【図３】（Ａ）は本実施の形態によるストレージシステムの結線構成を示す概念図であり、（Ｂ）はＰＢＣボードを介したＦＭモジュール間の結線構成を示す概念図である。
【図４】（Ａ）は本実施の形態によるＦＭモジュールの内部構成を示す斜視図であり、（Ｂ）はその変形例を示す略線図である。
【図５】ＦＣループの説明に供する概念図である。
【図６】本実施の形態によるストレージシステムの内部構成を示すブロック図である。
【図７】ＦＭモジュールのデータ入出力処理部の構成を示すブロック図である。
【図８】論理ユニット、ＬＤＥＶ及びＦＭチップが提供する記憶領域間の対応関係の説明に供する概念図である。
【図９】第１のアドレス変換テーブルを示す概念図である。
【図１０】第２のアドレス変換テーブルを示す概念図である。
【図１１】チップ管理テーブルを示す概念図である。
【図１２】ブロック管理テーブルを示す概念図である。
【図１３】データ書込み／テーブル更新処理の処理手順を示すフローチャートである。
【図１４】データ書込み／テーブル更新処理の処理手順を示すフローチャートである。
【図１５】データ読出し／テーブル更新処理の処理手順を示すフローチャートである。
【図１６】障害ＦＭチップデータコピー処理の処理手順を示すフローチャートである。
【図１７】第１のコレクションコピー処理の概要を示す概念図である。
【図１８】第１のコレクションコピー処理の流れを示すフローチャートである。
【図１９】第２のコレクションコピー処理の概要を示す概念図である。
【図２０】第２のコレクションコピー処理の流れを示すフローチャートである。
【図２１】第２のコレクションコピー処理の変形例を示すフローチャートである。
【図２２】第１のダイナミックスペアリング処理の概要を示す概念図である。
【図２３】第１のダイナミックスペアリング処理の流れを示すフローチャートである。
【図２４】第２のダイナミックスペアリング処理の概要を示す概念図である。
【図２５】第２のダイナミックスペアリング処理の流れを示すフローチャートである。
【図２６】第２のダイナミックスペアリング処理の変形例を示すフローチャートである。
【図２７】データ書込み処理の処理手順を示すフローチャートである。
【図２８】データ読出し処理の処理手順を示すフローチャートである。
【図２９】ＦＭコントローラから書込み対象のデータをコピー先のＦＭモジュールに送信する際のデータフォーマットの説明に供する概念図である。
【図３０】第２の実施の形態によるコレクションコピー処理の概要を示す概念図である。
【図３１】図３０のコレクションコピー処理に関するマイクロプロセッサの処理内容を示すフローチャートである。
【図３２】第３の実施の形態によるＦＭモジュール単位でのコピー処理の概要を示す概念図である。
【図３３】図３２のコピー処理に関するＦＭコントローラの処理内容を示すフローチャートである。
【図３４】他の実施の形態の説明に供するブロック図である。
【図３５】他の実施の形態の説明に供するブロック図である。
【図３６】他の実施の形態の説明に供するブロック図である。
【符号の説明】
【０２５２】
１，９０，１００……ストレージシステム、２，１１０……記憶制御装置、３，１１１……記憶装置、１１……ＦＭモジュール、２０……ＦＭチップ、３０……ホスト、３１Ａ，３１Ｂ……ストレージコントローラ、３６……ローカルメモリ、３７……マイクロプロセッサ、３８……ＦＭアダプタ、４０……データ入出力制御部、４２……ＦＭコントローラ、６１……ＲＡＩＤグループ、６２……ＬＤＥＶ、６３……論理ユニット、６４，６５……アドレス変換テーブル、７０……チップ管理テーブル、７１……ブロック管理テーブル、１１１，１２２……エキスパンダ、１３０……ハードディスクドライブ。
【図１】
2008191966.tif 000003
【図２】
2008191966.tif 000004
【図３】
2008191966.tif 000005
【図４】
2008191966.tif 000006
【図５】
2008191966.tif 000007
【図６】
2008191966.tif 000008
【図７】
2008191966.tif 000009
【図８】
2008191966.tif 000010
【図９】
2008191966.tif 000011
【図１０】
2008191966.tif 000012
【図１１】
2008191966.tif 000013
【図１２】
2008191966.tif 000014
【図１３】
2008191966.tif 000015
【図１４】
2008191966.tif 000016
【図１５】
2008191966.tif 000017
【図１６】
2008191966.tif 000018
【図１７】
2008191966.tif 000019
【図１８】
2008191966.tif 000020
【図１９】
2008191966.tif 000021
【図２０】
2008191966.tif 000022
【図２１】
2008191966.tif 000023
【図２２】
2008191966.tif 000024
【図２３】
2008191966.tif 000025
【図２４】
2008191966.tif 000026
【図２５】
2008191966.tif 000027
【図２６】
2008191966.tif 000028
【図２７】
2008191966.tif 000029
【図２８】
2008191966.tif 000030
【図２９】
2008191966.tif 000031
【図３０】
2008191966.tif 000032
【図３１】
2008191966.tif 000033
【図３２】
2008191966.tif 000034
【図３３】
2008191966.tif 000035
【図３４】
2008191966.tif 000036
【図３５】
2008191966.tif 000037
【図３６】
2008191966.tif 000038