(57)【要約】【課題】煩雑な作業を削減し、誤動作を防止する。【解決手段】リカバリ対応表１１ａにリカバリ範囲が未登録のストレージの機種があるとき、リカバリ範囲検出手段１２は、このストレージに格納されるエラー検出符号を書き換え、媒体エラーを発生させる。そして、ブロック単位ごとに媒体エラーの有無を調べ、エラー発生領域を検出し、リカバリ範囲を特定する。特定されたリカバリ範囲は、ストレージの機種に対応付けてリカバリ対応表１１ａに登録する。リカバリ処理手段１３は、媒体エラー発生時、リカバリ対応表１１ａに基づいてリカバリの対象領域を特定し、リカバリ処理を行う。【選択図】図１
2011008663.tif 000002
【特許請求の範囲】
【請求項１】
冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置において、
データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段と、
前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録するリカバリ範囲検出手段と、
通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行うリカバリ処理手段と、
を有することを特徴とするストレージ制御装置。
【請求項２】
前記リカバリ範囲は、前記ストレージの物理記憶領域を所定のサイズで分割したブロックを単位として、１または連続する複数ブロックが接続される領域であり、
前記リカバリ範囲検出手段は、前記エラー検出符号を書き換えた後、前記ストレージから前記ブロック単位でデータ読み出しを行い、前記データ読み出しのときに前記媒体エラーが発生したブロックの数を計測し、計測されたリカバリブロック数または前記リカバリブロック数に応じた設定値を前記リカバリ範囲とする、
ことを特徴とする請求項１記載のストレージ制御装置。
【請求項３】
前記リカバリ範囲検出手段は、読み出し命令によって任意の前記ブロックのデータを読み出し、該ブロックのデータとともに読み出される該ブロックを含む前記リカバリ範囲に対応する前記エラー検出符号を書き換え、該ブロックの領域の直後の前記ブロックから後方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の終了ブロックを検出するとともに、該ブロックの領域の直前の前記ブロックから前方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の開始ブロックを検出し、検出された前記開始ブロックから前記終了ブロックの範囲を前記リカバリ範囲とする、
ことを特徴とする請求項２記載のストレージ制御装置。
【請求項４】
前記リカバリ範囲検出手段は、前記物理記憶領域の先頭ブロックから前記媒体エラーが発生した連続ブロックの直前のブロックまでのブロック数を計測したブロック数が、計測された前記リカバリブロック数の整数倍であるかどうかを判定し、整数倍でないと判定されたときは、前記リカバリブロック数を無効とする、
ことを特徴とする請求項２〜３記載のストレージ制御装置。
【請求項５】
冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ装置のデータ回復方法において、
リカバリ範囲検出手段が、データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段から前記リカバリ対応表を読み出し、前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録する手順と、
リカバリ処理手段が、通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行う手順と、
を実行することを特徴とするストレージ装置のデータ回復方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置及びストレージ装置のデータ回復方法に関し、特に、冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置及びストレージ装置のデータ回復方法に関する。
【背景技術】
【０００２】
近年、ストレージ装置の大容量化が急速に進んでおり、ストレージ故障時に受ける被害はますます大きくなっている。このようなデータ損失を防ぎ、処理性能を向上するための技術として、ＲＡＩＤ（Redundant Array of Inexpensive Disks）がある。また、近年、半導体記憶装置の大容量化と低価格化も急速に進んでおり、従来ハードディスク（ＨＤＤ；Hard Disk Drive）で構成することが一般的であったＲＡＩＤ装置にも搭載されるようになってきている。このような半導体ディスク装置として、ＳＳＤ（Solid State Drive）がある。ＳＳＤは、フラッシュメモリを利用した記憶装置で、高速、省電力、小型・計量、耐衝撃性などの特徴がある。
【０００３】
一般に、半導体ディスク装置へのデータ書き込みの際には、データに誤り訂正符号（ＥＣＣ；Error Correction Code）が付加される。データの読み出し時には、ＥＣＣを用いたデータのエラー検出と訂正処理が行われる。このＥＣＣを算出するデータ範囲は、半導体ディスク装置の製品の種別ごとに固有の値が設定されている。例えば、ＳＳＤのデータ領域の管理単位であるブロックごと、あるいは連続するブロックをまとめて、２ブロックまたは４ブロックごとなど、各々最適な範囲が設定される。また、バッファメモリから転送される単位量のデータをさらに複数のバンクに分割し、バンクごとにＥＣＣを設定する半導体ディスク装置がある。（例えば、特許文献１参照）。以下、製品の種別を機種と呼ぶ。機種は、例えば、製品に設定される型名または型番によって識別することができる。
【０００４】
また、ＥＣＣなどのエラー検出符号によって媒体エラーが検出されたとき、ＲＡＩＤ装置では、ストレージ制御装置が、冗長構成をとる他のストレージのデータを用いて、エラーが検出されたストレージ内のデータを回復する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−２０７７２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、従来のストレージ制御装置では、予めリカバリ範囲の設定が必要になるという問題がある。
ＲＡＩＤ装置のデータ回復処理（以下、リカバリ処理とする）では、媒体エラーとなったデータ領域を含むエラー検出符号の対象範囲全体をリカバリ範囲として処理が行われる。例えば、エラー検出符号が２ブロック単位で生成される場合は、媒体エラーが検出された領域を含むエラー検出符号の対象領域である２ブロックがリカバリ範囲となる。また、２ブロック対応のリカバリ処理も必要となる。このため、リカバリ処理を制御するストレージ制御装置に対し、予めリカバリ範囲を登録しておくことが必要であった。
【０００７】
特に、半導体ディスク装置は、機種ごとに固有のリカバリ範囲が設定され、かつ、後から変更することは難しい。このため、ＲＡＩＤ構成に半導体ディスク装置を含む場合には、半導体ディスク装置の機種の仕様を調べ、事前に機種固有のリカバリ範囲の登録を行うという作業が必要であった。さらに、新規機種の追加や、機種が交換されたときは、リカバリ範囲に関する登録情報を変更しなければならなかった。しかしながら、機種変更や機種追加の度にリカバリ範囲を登録する作業は、非常に煩わしいものである。また、人手による作業であるため登録ミスや登録忘れもあり、このような場合には、ストレージ装置が誤動作する恐れがあった。なお、半導体ディスク装置に限らず、ストレージが格納するデータに対し、固有のエラー検出符号を付加する場合には、同様の問題が発生する。
【０００８】
上記課題を解決するために、リカバリ範囲を自動で検出してデータ回復処理を行うことにより、煩雑な作業が削減され、かつ、誤動作の防止が可能なストレージ制御装置及びストレージ装置のデータ回復方法、が提供される。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、記憶手段と、リカバリ範囲検出手段と、リカバリ処理手段とを有し、冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置が提供される。ストレージ群は、データ書き込み時、所定のリカバリ範囲ごとにデータのエラー検出符号を生成し、データとエラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する。記憶手段には、ストレージ群について、ストレージ群に属するストレージと、ストレージに設定されるリカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される。リカバリ範囲検出手段は、リカバリ対応表に未登録のストレージが検出されたときは、対応表に未登録のストレージの物理記憶領域に格納される任意のエラー検出符号を書き換える。エラー検出符号を書き換えたストレージの物理記憶領域のうち、エラー検出符号の書き換えによって媒体エラーが発生したエラー発生領域を検出する。そして、検出されたエラー発生領域をリカバリ範囲として特定し、特定されたリカバリ範囲をストレージに対応付けてリカバリ対応表に登録する。リカバリ処理手段は、通常運転時に媒体エラーが発生したときは、媒体エラーの生じたデータ領域と、データ領域に対応する故障ストレージとを検出する。また、リカバリ対応表を用いて故障ストレージに対応するリカバリ範囲を特定し、リカバリ範囲に基づいて媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出する。そして、冗長化された他のストレージに格納されるデータを用いてリカバリ領域のデータの回復処理を行う。
【００１０】
また、上記課題を解決するために、上記ストレージ制御装置と同様の処理手順を実行するストレージ装置のデータ回復方法が提供される。
【発明の効果】
【００１１】
開示のストレージ制御装置及びストレージ装置のデータ回復方法によれば、リカバリ範囲が自動で検出されてリカバリ対応表に登録され、媒体エラー発生時にはリカバリ対応表を用いてリカバリ領域が特定されてデータ回復処理が行われる。これにより、予め登録するという煩雑な作業を削減し、かつ登録ミスによるストレージ装置の誤動作を防止することができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態のストレージ装置の構成例を示した図である。
【図２】リカバリ範囲の一例を示した図である。
【図３】リカバリ対応表の一例を示した図である。
【図４】第２の実施の形態のマルチノードディスクシステムの構成例を示した図である。
【図５】制御ノードのハードウェア構成例を示した図である。
【図６】ＥＣＣの書き換え手順の一例を示した図である。
【図７】リカバリブロック数の検出処理の一例を示した図である。
【図８】媒体エラー発生時のリカバリ処理の一例を示した図である。
【図９】リカバリ範囲検出処理の手順を示したフローチャートである。
【図１０】最大ＬＢＡ特定処理の手順を示したフローチャートである。
【図１１】媒体エラー発生時のリカバリ処理の手順を示したフローチャートである。
【発明を実施するための形態】
【００１３】
以下、実施の形態を、図面を参照して説明する。
図１は、第１の実施の形態のストレージ装置の構成例を示した図である。
ストレージ装置は、ストレージ制御装置１と、複数のストレージ２０ａ，２０ｂ，２０ｃを有するストレージ群２とを有する。
【００１４】
まず、ストレージ群２について説明する。ストレージ群２を構成するストレージ２０ａ，２０ｂ，２０ｃは、冗長化されており、いずれかのストレージのデータ領域のデータに異常が検出されたときは、他のストレージの冗長データを用いて異常検出のデータ領域のデータを回復することができる。ストレージ２０ａ，２０ｂ，２０ｃの物理記憶領域は、所定のブロック単位に分割されて管理される。また、ストレージ２０ａ，２０ｂ，２０ｃは、データを物理記憶領域に書き込む際、１または連続する所定のブロック数ごとにエラー検出符号を生成し、データとともに物理記憶領域に格納する。何ブロックごとにエラー検出符号を生成するかは、予めストレージごとに決められている。この範囲は、ストレージの製品種別、すなわち機種ごとに固有となっている場合が多い。なお、エラー検出符号が生成される範囲は、リカバリ処理の対象のリカバリ範囲になる。エラー検出符号としては、ＥＣＣなどが用いられる。
【００１５】
ストレージ制御装置１は、記憶手段１１、リカバリ範囲検出手段１２、リカバリ処理手段１３及びアクセス手段１４を有し、ストレージ群２に属するストレージ２０ａ，２０ｂ，２０ｃに媒体エラーが発生したときのデータ回復処理などを行う。
【００１６】
記憶手段１１には、リカバリ範囲検出手段１２が生成したリカバリ対応表１１ａが格納される。リカバリ対応表１１ａには、ストレージ２０ａ，２０ｂ，２０ｃに対応付けて、それぞれがリカバリ処理を一括して行わなければならないリカバリ範囲の大きさが登録される。なお、リカバリ範囲は、ストレージの機種ごとに予め固有の値で設定されている場合が多い。そこで、リカバリ対応表１１ａでは、ストレージの機種に対応付けてリカバリ範囲の大きさを登録するとしてもよい。リカバリ範囲の大きさがストレージの機種に対応付けられているリカバリ対応表１１ａを用いるときは、対象のストレージの機種を特定し、特定されたストレージの機種に基づいてリカバリ対応表１１ａを検索する。
【００１７】
リカバリ範囲検出手段１２は、ストレージ群２に属するストレージ２０ａ，２０ｂ，２０ｃの機種ごとにリカバリ範囲を検出し、リカバリ対応表１１ａに登録する処理を行う。一般に、リカバリ範囲はストレージの機種固有であるので、リカバリ範囲の検出はストレージの１機種につき、１回行えばよい。リカバリ範囲の検出では、まず、対象ストレージの物理記憶領域に格納されるエラー検出符号を壊し、意図的に媒体エラーを発生させる。媒体エラーは、ストレージ２０ａ，２０ｂ，２０ｃがデータの読み出し要求を受けた時などに、読み出したデータから生成したエラー検出符号と、物理記憶領域に格納されるエラー検出符号とが不一致のときに発生する。エラー検出符号が破壊されると、対応するリカバリ範囲に該当する領域からデータを読み出したとき、媒体エラーが発生する。そこで、対象ストレージからデータを順次読み出し、媒体エラーが発生したエラー発生領域を検出する。そして、検出されたエラー発生領域に基づいて、リカバリ範囲を特定する。リカバリ範囲は、リカバリの対象となるサイズを示し、ブロック数やブロック数に応じた設定値で表される。特定されたリカバリ範囲は、処理を行ったストレージの機種に対応付けてリカバリ対応表１１ａに登録する。なお、媒体エラーの発生確認は、媒体エラーがチェックされる単位、例えば、ブロック単位で行う。詳細は、後述する。
【００１８】
リカバリ処理手段１３は、通常処理において、媒体エラーが検出されたとき、媒体エラーが発生したデータ領域を含むリカバリ領域のデータを回復させる。アクセス要求の応答として媒体エラーが検出されたときは、アクセス要求に基づいてデータ領域と、ストレージとを特定する。また、媒体エラーを通知した応答に媒体エラーの発生箇所が設定されているときは、これを用いて特定してもよい。こうして、エラー発生のストレージと、エラーのデータ領域とが特定された後は、エラー発生のストレージの機種を特定し、リカバリ対応表１１ａを検索して、このストレージの機種に対応するリカバリ範囲の大きさを抽出する。そして、抽出されたリカバリ範囲と、媒体エラーが検出されたデータ領域に基づいて、リカバリ領域を決定する。例えば、リカバリ範囲が２ブロックの場合は、媒体エラーが発生したデータ領域を含む２ブロックがリカバリ領域になる。そして、リカバリ領域を冗長構成に基づいて復元されるデータで上書きし、データの回復を行う。
【００１９】
アクセス手段１４は、リカバリ処理手段１３及びリカバリ範囲検出手段１２からの指示に従って、ストレージ群２に属するストレージ２０ａ，２０ｂ，２０ｃへ読み出し（Ｒ）要求または書き込み（Ｗ）要求を送信し、応答を受信する。エラーが発生したときは、応答にエラー通知が含まれる。受信した応答とエラー通知は、要求元のリカバリ範囲検出手段１２及びリカバリ処理手段１３に転送する。
【００２０】
このような構成のストレージ装置の動作及びデータ回復方法について説明する。ここでは、リカバリ範囲は機種ごとに固有であるとする。
ストレージ群２のストレージ２０ａ，２０ｂ，２０ｃは、それぞれ機種固有のリカバリ範囲が設定されている。図２は、リカバリ範囲の一例を示した図である。（Ａ）は２ブロックでエラー検出符号作成の場合、（Ｂ）は４ブロックでエラー検出符号作成の場合、（Ｃ）は８ブロックでエラー検出符号作成の場合、を示している。なお、図はブロックとエラー検出符号の関係を示したもので、物理記憶領域の構成を示すものではない。エラー検出符号は、物理記憶領域の任意の領域に格納される。
【００２１】
（Ａ）２ブロックでエラー検出符号作成の場合では、ブロック＃０〜＃１、ブロック＃２〜＃３というように、２ブロック単位でエラー検出符号が作成される。従って、リカバリ範囲２０１は、２ブロックになる。例えば、ブロック＃０〜＃１に対応するエラー検出符号が壊されると、ブロック＃０及びブロック＃１で媒体エラーが発生する。ブロック＃２〜＃３は正常に読み出すことができる。
【００２２】
（Ｂ）４ブロックでエラー検出符号作成の場合では、ブロック＃０〜＃３、ブロック＃４〜＃７というように、４ブロック単位でエラー検出符号が作成される。従って、リカバリ範囲２０２は、４ブロックになる。例えば、ブロック＃０〜＃３に対応するエラー検出符号が壊されると、ブロック＃０〜＃３のすべてで媒体エラーが発生する。ブロック＃４〜＃７は正常に読み出すことができる。
【００２３】
（Ｃ）８ブロックでエラー検出符号作成の場合では、ブロック＃０〜＃７というように、８ブロック単位でエラー検出符号が作成される。従って、リカバリ範囲２０３は、８ブロックになる。例えば、ブロック＃０〜＃７に対応するエラー検出符号が壊されると、ブロック＃０〜＃７のすべてで媒体エラーが発生する。
【００２４】
ストレージ制御装置１の動作について説明する。
ストレージ制御装置１の立ち上がり時、あるいは、新たなストレージが接続されたとき、リカバリ範囲検出手段１２が処理を開始する。リカバリ範囲検出手段１２は、記憶手段１１からリカバリ対応表１１ａを読み出し、管理下のストレージ２０ａ，２０ｂ，２０ｃの機種について、リカバリ範囲が登録されているか否かを照合する。未登録の機種があったときは、この機種に該当するストレージを用いてリカバリ範囲を検出する。ここで、ストレージ２０ａの機種が未登録であるとする。リカバリ範囲検出手段１２は、アクセス手段１４を介してストレージ２０ａに格納される任意のリカバリ範囲に対応するエラー検出符号を書き換え、エラー検出符号を破壊する。例えば、任意のブロックのデータを読み出し、付加されるエラー検出符号を書き換え、当該ブロックのデータとともに書き込んで、エラー検出符号を壊す。
【００２５】
続いて、媒体エラーのエラー発生領域を検出する。アクセス手段１４を介してブロックのデータを順次読み出し、媒体エラーの発生有無をチェックする。例えば、図２の例でブロック＃１を対象範囲とするエラー検出符号を壊したとする。ブロック＃０から順次データ読み出しを行うと、（Ａ）の場合は、ブロック＃０〜＃１で媒体エラーが発生し、ブロック＃２で正常となる。（Ｂ）の場合は、ブロック＃０〜＃３で媒体エラーが発生し、ブロック＃４で正常となる。（Ｃ）の場合は、ブロック＃０〜＃７で媒体エラーが発生し、ブロック＃８で正常となる。このようにエラー発生領域を検出すれば、リカバリ範囲が特定される。（Ａ）の場合は２ブロック、（Ｂ）の場合は４ブロック、（Ｃ）の場合は８ブロックになる。特定されたリカバリ範囲は、リカバリ対応表１１ａに登録される。
【００２６】
図３は、リカバリ対応表の一例を示した図である。
リカバリ対応表１１０は、ストレージ機種１１０ａに対応付けて、リカバリ範囲としてリカバリブロック数１１０ｂが登録されている。例えば、ストレージ機種「ＸＸＸＸＸＸ」は、リカバリブロック数が「２ブロック（Ｂｌｏｃｋ）」である。
【００２７】
リカバリ処理手段１３は、媒体エラーが通知されたときは、媒体エラーが発生したストレージ及びデータ領域を特定する。そして、リカバリ対応表１１ａを参照してこのストレージの機種に設定されるリカバリ範囲を特定し、リカバリ範囲とデータ領域からリカバリ領域を特定する。さらに、リカバリ領域のデータを冗長構成に基づいて復元し、復元データをリカバリ領域に上書きしてデータ回復処理を行う。
【００２８】
上記のストレージ制御装置及びそのストレージ装置のデータ回復方法によれば、ストレージの機種に固有のリカバリ範囲が自動検出され、リカバリ対応表に登録される。そして、ストレージに媒体エラー発生時には、リカバリ対応表に基づいてリカバリ範囲のデータが回復される。このように、利用者が予め機種ごとのリカバリ範囲を登録しておかなくてもよいため、利用者に掛かる負担を削減し、利用者の利便性を向上させることができる。同様に、新たにストレージを追加する際の利用者の作業も軽減することができる。また、人手による作業ではないため、登録ミスや登録忘れを防止することが可能であり、結果として、ストレージ装置の誤動作を防ぐこともできる。
【００２９】
以下、発明の実施の形態をＲＡＩＤ構成のマルチノードディスクシステムの場合で説明する。このマルチノードディスクシステムは、ＲＡＩＤ０を除くすべてのＲＡＩＤレベルについて適用することができる。
【００３０】
図４は、第２の実施の形態のマルチノードディスクシステムの構成例を示した図である。
マルチノードディスクシステムは、ネットワーク６００を介して、制御ノード１００、複数のディスクノード２１０，２２０、管理ノード３００及びアクセスノード４００が接続されている。
【００３１】
制御ノード１００は、ディスクノード２１０，２２０及びＳＳＤ２１１，２１２，２２１，２２２を管理するストレージ制御装置として機能する。そして、仮想的な論理ボリュームを、物理記憶領域を備えたＳＳＤ２１１，２１２，２２１，２２２に割り当てる割当制御や、ＳＳＤ２１１，２１２，２２１，２２２に格納されるデータのエラー検出時にデータを回復させるデータ回復処理を行う。
【００３２】
ディスクノード２１０にはＳＳＤ２１１，２１２、ディスクノード２２０にはＳＳＤ２２１，２２２、がそれぞれ接続されている。ＳＳＤ２１１，２１２，２２１，２２２の物理記憶領域は、ブロック単位に分割されている。ディスクノード２１０，２２０は、例えば、ＩＡ（Intel Architecture）と呼ばれるアーキテクチャのコンピュータである。そして、接続されたＳＳＤ２１１，２１２，２２１，２２２に格納されるデータをアクセスノード４００経由で端末装置に提供する。ブロック単位のデータ書き込み要求時には、ＳＳＤ２１１，２１２，２２１，２２２の機種ごとに決まっている１または連続する複数のブロックごとにＥＣＣを作成し、データとともにＳＳＤ物理記憶領域に格納する。データ読み出し要求時には、ＥＣＣを用いたデータチェックを行い、データのエラーチェック結果とともに読み出しデータをアクセスノード４００経由で端末装置に返す。ＥＣＣ異常が検出されたときは、媒体エラーを発生させる。なお、図４では、ディスクノード２１０，２２０が複数のＳＳＤを管理するとしたが、個々のＳＳＤがディスクノード２１０，２２０の機能を有するとしてもよい。
【００３３】
アクセスノード４００は、ディスクノード２１０，２２０のそれぞれが管理しているデータの格納場所を認識しており、ネットワーク５００を介して入力される端末装置からの要求に応答して、ディスクノード２１０，２２０へデータアクセスを行う。
【００３４】
管理ノード３００は、マルチノードディスクシステム全体を管理する。また、管理者の指示に従って、論理ボリュームの割当指示を制御ノード１００に通知する。
次に、各ノードのハードウェア構成を、制御ノード１００を例に説明する。
【００３５】
図５は、制御ノードのハードウェア構成例を示した図である。
制御ノード１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０５を介してＲＡＭ（Random Access Memory）１０２、ＨＤＤ１０３及び通信インタフェース１０４が接続されている。
【００３６】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションのプログラムが格納される。通信インタフェース１０４は、ネットワーク６００に接続されている。通信インタフェース１０４は、ネットワーク６００を介して、ディスクノード２１０，２２０、管理ノード３００及びアクセスノード４００など、マルチノードディスクシステムを構成する他のコンピュータとの間でデータの送受信を行う。
【００３７】
なお、図５には、制御ノード１００のハードウェア構成を示したが、ディスクノード２１０，２２０、管理ノード３００及びアクセスノード４００のハードウェア構成も同様である。
【００３８】
上記の構成のマルチノードディスクシステムにおける制御ノード１００のデータ回復処理について、具体例を用いて説明する。
システムの立ち上がり時、制御ノード１００は、管理下のＳＳＤ２１１，２１２，２２１，２２２に関するリカバリ範囲情報を持っているかどうかを確認する。リカバリ対応表を検索し、管理下のＳＳＤ２１１，２１２，２２１，２２２の機種が登録されているかどうかを確認する。登録されていない機種があれば、リカバリ範囲検出処理を起動する。また、動作中に、新たにＳＳＤが追加されたときや交換された場合も、同様のチェックを行い、リカバリ対応表に未登録のＳＳＤがあれば、リカバリ範囲検出処理を起動する。
【００３９】
リカバリ範囲検出処理では、ＥＣＣを壊してＥＣＣ異常を発生させ、ＥＣＣ異常が発生したエラー発生領域に属するブロックの数を計測し、リカバリ対象のリカバリブロック数を検出する。ＥＣＣを壊すとは、ＥＣＣと、ＥＣＣの対象領域のデータとの関係を不整合にすることであり、ここでは正常なＥＣＣの値を書き換えることによって壊す。
【００４０】
図６は、ＥＣＣの書き換え手順の一例を示した図である。
図６のＥＣＣ２０２０は、ブロック＃０〜＃３の４ブロックのデータに基づいて生成され、ＳＳＤの記憶領域に格納されている。
【００４１】
ＥＣＣの書き換えのため、メモリ上にある程度の余裕を持たせた適当な大きさのバッファを用意し、ＳＣＳＩ（Small Computer System Interface）の“ｒｅａｄ  ｌｏｎｇコマンド”で１ブロックのデータを読み出す（１）。図６の例では、ブロック＃１の部分を読み出している。コマンドを受け取ったＳＳＤは、ブロック＃１のデータに、ＥＣＣを付加した応答を返す。図６の例では、ＳＳＤからの読み出しデータとして、ブロック＃１のデータ５１２バイト（Ｂ）と、Ｎバイト（Ｂ）のＥＣＣ２０２２を受信する。読み出しデータに付加されてくるＥＣＣのサイズは、ＳＳＤの機種により異なる。ＳＳＤから“ｒｅａｄ  ｌｏｎｇコマンド”を用いて読み出すときは、「１ブロックのバイト数＋ＥＣＣのバイト数」を正確に指定しなければ、正常応答が返らない。このため、実際には、「１ブロックのバイト数＋１バイト」から始めて、正常な応答が得られるまで、ＥＣＣのバイト数を１バイトずつ増やしながら、“ｒｅａｄ  ｌｏｎｇコマンド”を発行する。なお、ブロック＃１に付加されたＥＣＣ２０２２は、ＥＣＣ２０２０と同じであり、ブロック＃０〜＃３を対象範囲として生成されたものである。
【００４２】
続いて、ＥＣＣの一部を壊す（２）。例えば、受信してバッファに格納されるＥＣＣ２０２２の最後の１バイトを違う値に変更する。最後の１バイトについてビット反転を行うなどして、ＥＣＣを壊し、ＥＣＣ２０２３を作成する。
【００４３】
そして、壊したＥＣＣ２０２３と、（１）で読み出したブロック＃１のデータとを、“ｗｒｉｔｅ  ｌｏｎｇコマンド”を用いて書き込む（３）。例えば、ブロック＃１の部分について、「１ブロックのバイト数＋ＥＣＣのバイト数」を指定して書き込む。なお、“ｗｒｉｔｅ  ｌｏｎｇコマンド”によるデータ書き込みでは、ＥＣＣは再計算されない。
【００４４】
こうして、書き換えられたＥＣＣ２０２３が、ブロック＃０〜＃３のＥＣＣとしてＳＳＤに書き込まれる。これによって、ブロック＃０〜＃３の４ブロックすべてについて、データを読み出したときにＥＣＣ異常が発生する。
【００４５】
リカバリブロック数の検出処理について説明する。図７は、リカバリブロック数の検出処理の一例を示した図である。
図７では、例としてＳＳＤをＳＳＤ２１１、検出するリカバリブロック数は４であるとしている。
【００４６】
リカバリブロック数の計測処理では、ある程度のまとまった空き領域にリカバリ範囲検出用の計測領域を確保する。計測領域として、リカバリ範囲として予測される最大の領域が含まれる領域を用意する。例えば、２５６ブロック分のデータを格納できるような領域が用意される。また、予めＳＳＤ２１１にこのような空き領域が用意されているとしてもよい。
【００４７】
図７の例では、ＳＳＤ２１１の空き領域に、２５６ブロック分の計測領域２１１０が確保される。また、ＳＳＤ２１１のブロックは、ブロック＃０から順に番号が付与されているとし、計測領域２１１０に含まれる最小のブロック番号（以下、ＬＢＡ（Logical Block Address）とする）は、１０２２であるとする。すなわち、計測領域２１１０のブロック番号は、ＬＢＡ１０２２〜ＬＢＡ１２７８になる。
【００４８】
次に、計測領域２１１０全体を、“ｗｒｉｔｅコマンド”で上書きしておく。“ｗｒｉｔｅコマンド”を用いれば、データの上書き処理時、リカバリブロック数ごとにＥＣＣが作成される。また、計測領域２１１０全体を“ｒｅａｄコマンド”で読み出し、ＥＣＣ異常などのエラーが発生していないことを確認する。
【００４９】
こうして準備が整った後、計測領域２１１０の任意のブロック、例えば中央の１ブロックを対象ブロックとして、“ｒｅａｄ  ｌｏｎｇコマンド”によってＥＣＣを含むデータを読み出す。図７の例では、計測領域２１１０のブロックのうち、１２８番目のブロック（ＬＢＡ１１５０）２１１１が選択され、１ブロック分のデータとＥＣＣとが読み出される。続いて、読み出したＥＣＣを図６の手順で壊し、読み出したブロック２１１１のデータと、最後の１バイトを書き換えたＥＣＣとを“ｗｒｉｔｅ  ｌｏｎｇコマンド”で上書きする。こうして、ブロック２１１１を含むリカバリブロック数のブロックにＥＣＣ異常が発生するようになる。
【００５０】
ＥＣＣ異常が発生するブロックを検出するため、対象ブロック（ＬＢＡ１１５０）２１１１を中心として、前方向及び後方向に順次ＥＣＣ異常が発生しているかどうかを確認する。なお、前方向とは、ＬＢＡが小さくなる方向をいい、後方向はその逆である。
【００５１】
図７の例では、“ｗｒｉｔｅ  ｌｏｎｇコマンド”を行った対象ブロック（ＬＢＡ１１５０）２１１１の後方向に次のブロック（ＬＢＡ１１５１）２１１２について“ｒｅａｄコマンド”を用いてデータ読み出しを行う。ここでは、ＥＣＣ異常（ＮＧ）が検出される。ＥＣＣ異常が検出されたときは、後方向に次のブロック（ＬＢＡ１１５２）２１１３について“ｒｅａｄコマンド”を用いてデータ読み出しを行う。ここでは、正常応答（ＯＫ）が得られる。このように、正常応答が返るまで、後方向に順番にブロックのデータ読み出しを繰り返す。そして、ＥＣＣ異常が検出された最大ＬＢＡのブロック、図７の例ではブロック（ＬＢＡ１１５１）２１１２を記憶しておく。また、ＥＣＣ異常が検出された最大ＬＢＡのブロックまでにＥＣＣ異常を検出したブロック数（この場合は１）を記憶しておくとしてもよい。
【００５２】
次に、前方向についても同様の処理を行う。図７の例では、対象ブロック（ＬＢＡ１１５０）２１１１から前方向に、ブロック（ＬＢＡ１１４９）２１１４、ブロック（ＬＢＡ１１４８）２１１５、ブロック（ＬＢＡ１１４７）２１１６と、“ｒｅａｄコマンド”を用いてデータ読み出しを行う。ここでは、ブロック（ＬＢＡ１１４９）２１１４からはＥＣＣ異常（ＮＧ）応答、ブロック（ＬＢＡ１１４８）２１１５からはＥＣＣ異常（ＮＧ）応答、ブロック（ＬＢＡ１１４７）２１１６からは正常（ＯＫ）応答が得られている。そして、ＥＣＣ異常が検出された最小ＬＢＡのブロック、図７の例ではブロック（ＬＢＡ１１４８）２１１５を記憶しておく。また、ＥＣＣ異常が検出された最小ＬＢＡのブロックまでにＥＣＣ異常を検出したブロック数（この場合は２）を記憶しておくとしてもよい。
【００５３】
こうして、ＥＣＣ異常範囲は、ブロック（ＬＢＡ１１４８）２１１５から（ＬＢＡ１１５１）２１１２であることが検出される。リカバリ範囲は、ＬＢＡから、１１５１−１１４８＋１＝４と算出することができる。また、ＥＣＣ異常を検出した後方向のブロック数（１）、前方向のブロック数（２）及び対象ブロック数（１）を合算するとしてもよい。
【００５４】
さらに、ＥＣＣ異常範囲の開始ブロックのＬＢＡ「１１４８」が、リカバリブロック数「４」で割り切れるかどうかを確認する。ＳＳＤ２１１は、ＬＢＡ０からブロック数「４」ごとにリカバリ範囲が設定されるので、ＥＣＣ異常範囲の開始ブロック、すなわち、リカバリ領域の開始ブロックのＬＢＡは、リカバリブロック数で割り切れる。この例では、ＥＣＣ異常範囲の開始ブロックのＬＢＡ「１１４８」はリカバリブロック数「４」で割り切れるので、検出されたリカバリブロック数は正しいと判定される。
【００５５】
上記の処理により特定されたリカバリブロック数「４」は、ＳＳＤ２１１の機種に対応付けてリカバリ対応表に登録される。
次に、媒体エラー（ＥＣＣ異常）発生時のリカバリ処理について説明する。
【００５６】
図８は、媒体エラー発生時のリカバリ処理の一例を示した図である。
ＳＳＤ２１１のブロック（ＬＢＡ５１３）２１２１に対し、“ｒｅａｄコマンド”で読み出しを行ったとき、ＥＣＣ異常が検出されたとする。リカバリ対応表から得られる、ＳＳＤ２１１のリカバリブロック数「４」を用いて、ブロック（ＬＢＡ５１３）２１２１を含むリカバリ領域を算出する。リカバリ領域の開始ブロックのＬＢＡは、エラー発生ブロックのＬＢＡをリカバリブロック数で割った余りを引いた値であり、リカバリのサイズはリカバリブロック数になる。ここでは、リカバリ開始ブロック（ＬＢＡ５１２）２１２２からリカバリ終了ブロック（ＬＢＡ５１５）２１２３までが、リカバリ領域となる。このリカバリ領域のデータを、１ブロックずつ冗長構成からリカバリし、４ブロック分をリカバリする。
【００５７】
上記のマルチノードディスクシステムによれば、ＳＳＤの機種ごとに固有のリカバリブロック数がＳＳＤの空き領域を利用して自動的に検出される。これにより、利用者の登録作業を削減することができる。また、空き領域を用いるため、システムの動作に影響を及ぼさずに処理が行われる。
【００５８】
次に、制御ノード１００のリカバリ範囲検出処理手順及びデータ回復処理手順について、フローチャートを用いて詳細に説明する。
図９は、リカバリ範囲検出処理の手順を示したフローチャートである。
【００５９】
リカバリ対応表に未登録のＳＳＤ機種が検出され、処理が開始される。
［ステップＳ０１］  システム運用に利用されていない空き領域に設定したリカバリブロック数の計測領域が正常であるかどうかを確認する。計測領域にブロック単位でデータを上書きして、ＥＣＣを作成させる。続いて、ブロック単位でデータ読み出しを行って、ＥＣＣ異常などのエラーが発生しないことを確認する。
【００６０】
［ステップＳ０２］  ステップＳ０１で準備した計測領域の中央の１ブロックを読み出し、読み出しＥＣＣを書き換え、“ｗｒｉｔｅ  ｌｏｎｇコマンド”で上書きすることによってＥＣＣを破壊する。
【００６１】
［ステップＳ０３］  ステップＳ０２により発生するＥＣＣ異常範囲の終了ブロック、すなわち、ＥＣＣ異常範囲でＬＢＡが最大のブロックを検出する最大ＬＢＡ特定処理を行う。詳細は後述する。
【００６２】
［ステップＳ０４］  ステップＳ０２により発生するＥＣＣ異常範囲の開始ブロック、すなわち、ＥＣＣ異常範囲でＬＢＡが最小のブロックを検出する最小ＬＢＡ特定処理を行う。詳細は後述する。
【００６３】
［ステップＳ０５］  ステップＳ０３で検出されたＥＣＣ異常範囲の開始ブロックの最小ＬＢＡと、終了ブロックの最大ＬＢＡとに基づいて、リカバリブロック数を算出する。また、ＥＣＣ異常を検出したブロック数を記録しておき、このブロック数と、“ｗｒｉｔｅ  ｌｏｎｇコマンド”を用いた対象ブロックの数（１）とを合わせた数として求めてもよい。
【００６４】
［ステップＳ０６］  ステップＳ０４で特定されたＥＣＣ異常範囲の開始ブロックの最小ＬＢＡを、ステップＳ０５で算出されたリカバリブロック数で割る。
［ステップＳ０７］  ステップＳ０６の計算結果が整数であるかどうか、すなわち、割りきれるかどうかを判定する。整数であるときは、処理をステップＳ０８に進める。整数でないときは、算出されたリカバリブロック数が誤っている可能性があるので、リカバリ対応表に登録せず処理を終了する。
【００６５】
［ステップＳ０８］  ステップＳ０７で正しいと判定されたリカバリブロック数を、ＳＳＤの機種に対応付け、リカバリ対応表に登録し、処理を終了する。
ここで、最大ＬＢＡ特定処理について説明する。図１０は、最大ＬＢＡ特定処理の手順を示したフローチャートである。
【００６６】
［ステップＳ３１］  “ｗｒｉｔｅ  ｌｏｎｇコマンド”を用いてＥＣＣを壊すための書き込みを行ったブロックの次のブロックのＬＢＡを特定する。ＬＢＡ＝書き込みを行ったブロックのＬＢＡ＋１と算出することができる。
【００６７】
［ステップＳ３２］  指定されたＬＢＡに相当する対象ブロックのデータを“ｒｅａｄコマンド”で読み出し、媒体エラー（ＥＣＣ異常）が発生するかどうかを確認する。
［ステップＳ３３］  ステップＳ３２のデータ読み出しによって、媒体エラーが検出されたときは、処理をステップＳ３４に進める。媒体エラーが検出されなかったときは、処理をステップＳ３５に進める。
【００６８】
［ステップＳ３４］  媒体エラーが検出されたときは、対象ブロックのＬＢＡをインクリメントし、ステップＳ３２に処理を戻す。
［ステップＳ３５］  媒体エラーが検出されなかったときは、対象ブロックの１つ前のＬＢＡをＥＣＣ異常範囲の最大ＬＢＡとし、処理を終了する。
【００６９】
最小ＬＢＡ特定処理について説明する。最小ＬＢＡ特定処理では、図１０に示した最大ＬＢＡ特定処理が、ＬＢＡをインクリメントしながらＥＣＣ異常発生の範囲を検出するのに対し、ＬＢＡをディクリメントしながら同様の処理を行う。従って、図１０の処理手順を以下のように読み替えれば、最小ＬＢＡ特定処理の手順になる。ステップＳ３１の「次のブロック」は、「前のブロック（ＬＢＡ＝書き込みを行ったブロックのＬＢＡ―１）」と読み替える。ステップＳ３４の「ＬＢＡをインクリメント」は、「ＬＢＡをディクリメント」と読み替える。そして、ステップＳ３５の「最大ＬＢＡ＝対象ＬＢＡ―１」は、「最小ＬＢＡ＝対象ＬＢＡ＋１」と読み替える。
【００７０】
次に、媒体エラー（ＥＣＣ異常）発生時のリカバリ処理について説明する。図１１は、媒体エラー発生時のリカバリ処理の手順を示したフローチャートである。
［ステップＳ１０１］  媒体エラー（ＥＣＣ異常）が発生したＳＳＤの機種を特定する。
【００７１】
［ステップＳ１０２］  リカバリ対応表を用いて、ステップＳ１０１で特定されたＳＳＤの機種に対応するリカバリブロック数を抽出する。
［ステップＳ１０３］  媒体エラーが検出されたブロックのＬＢＡから、リカバリ開始ブロックのＬＢＡを算出する。リカバリ開始ブロックのＬＢＡは、媒体エラーの発生ＬＢＡをリカバリブロック数で割った余りを、媒体エラーの発生ＬＢＡから引いた値として算出される。
【００７２】
［ステップＳ１０４］  ステップＳ１０３で算出されたＬＢＡのブロックをリカバリ開始ブロックとし、リカバリ開始ブロックからリカバリブロック数分のブロックをリカバリの対象として、冗長構成に基づくリカバリ処理を行う。
【００７３】
以上の処理手順が行われることにより、媒体エラーが発生したデータ領域のリカバリ処理が実現される。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、ストレージ制御装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【００７４】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ（Digital Versatile Disc）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００７５】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【００７６】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）  冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置において、
データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段と、
前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録するリカバリ範囲検出手段と、
通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行うリカバリ処理手段と、
を有することを特徴とするストレージ制御装置。
【００７７】
（付記２）  前記リカバリ範囲は、前記ストレージの製品種別ごとに予め決められた固有の大きさに設定されており、前記リカバリ対応表は、前記ストレージの製品種別を識別可能にする機種に対応付けて前記リカバリ範囲の大きさが登録されている、
ことを特徴とする付記１記載のストレージ装置。
【００７８】
（付記３）  前記リカバリ範囲は、前記ストレージの物理記憶領域を所定のサイズで分割したブロックを単位として、１または連続する複数ブロックが接続される領域であり、
前記リカバリ範囲検出手段は、前記エラー検出符号を書き換えた後、前記ストレージから前記ブロック単位でデータ読み出しを行い、前記データ読み出しのときに前記媒体エラーが発生したブロックの数を計測し、計測されたリカバリブロック数または前記リカバリブロック数に応じた設定値を前記リカバリ範囲とする、
ことを特徴とする付記１記載のストレージ制御装置。
【００７９】
（付記４）  前記リカバリ範囲検出手段は、読み出し命令によって任意の前記ブロックのデータを読み出し、該ブロックのデータとともに読み出される該ブロックを含む前記リカバリ範囲に対応する前記エラー検出符号を書き換え、該ブロックの領域の直後の前記ブロックから後方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の終了ブロックを検出するとともに、該ブロックの領域の直前の前記ブロックから前方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の開始ブロックを検出し、検出された前記開始ブロックから前記終了ブロックの範囲を前記リカバリ範囲とする、
ことを特徴とする付記３記載のストレージ制御装置。
【００８０】
（付記５）  前記リカバリ範囲検出手段は、前記リカバリ範囲として予測される最大のデータ領域と前記エラー検出符号の格納領域とをリカバリ範囲検出用の計測領域として、対象の前記ストレージの物理記憶領域のうちユーザが利用していない空き領域に確保し、前記最大のデータ領域に所定のデータを書き込んで前記最大のデータ領域に対応する前記エラー検出符号を生成させ、前記計測領域を用いて前記リカバリ範囲を特定する、
ことを特徴とする付記３〜４記載のストレージ制御装置。
【００８１】
（付記６）  前記リカバリ範囲検出手段は、前記物理記憶領域の先頭ブロックから前記媒体エラーが発生した連続ブロックの直前のブロックまでのブロック数を計測したブロック数が、計測された前記リカバリブロック数の整数倍であるかどうかを判定し、整数倍でないと判定されたときは、前記リカバリブロック数を無効とする、
ことを特徴とする付記３〜５記載のストレージ制御装置。
【００８２】
（付記７）  前記ストレージは、該ストレージの製品種別ごとに予め決められた固有の大きさに前記リカバリ範囲が設定されており、データ書き込み時に、前記リカバリ範囲ごとに誤り訂正符号を付加し、書き込みデータとともに、前記書き込みデータに対応付けて前記誤り訂正符号を前記物理記憶領域に格納する半導体ディスクである、
ことを特徴とする付記１〜６記載のストレージ制御装置。
【００８３】
（付記８）  冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ装置のデータ回復方法において、
リカバリ範囲検出手段が、データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段から前記リカバリ対応表を読み出し、前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録する手順と、
リカバリ処理手段が、通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行う手順と、
を実行することを特徴とするストレージ装置のデータ回復方法。
【００８４】
（付記９）  冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うコンピュータを機能させるストレージ装置のデータ回復処理プログラムにおいて、
前記コンピュータを、
データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段から前記リカバリ対応表を読み出し、前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録するリカバリ範囲検出手段、
通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行うリカバリ処理手段、
として機能させることを特徴とするストレージ装置のデータ回復処理プログラム。
【符号の説明】
【００８５】
１  ストレージ制御装置
１１  記憶手段
１１ａ  リカバリ対応表
１２  リカバリ範囲検出手段
１３  リカバリ処理手段
１４  アクセス手段
２  ストレージ群
２０ａ，２０ｂ，２０ｃ  ストレージ
【図１】
2011008663.tif 000003
【図２】
2011008663.tif 000004
【図３】
2011008663.tif 000005
【図４】
2011008663.tif 000006
【図５】
2011008663.tif 000007
【図６】
2011008663.tif 000008
【図７】
2011008663.tif 000009
【図８】
2011008663.tif 000010
【図９】
2011008663.tif 000011
【図１０】
2011008663.tif 000012
【図１１】
2011008663.tif 000013