(57)【特許請求の範囲】
【請求項１】
複数の記憶装置と、
前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御する制御装置と、
前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置と、
を備え、
前記制御装置は、
前記複数の記憶装置のそれぞれにおけるエラーの発生を監視し、エラーの発生状況を示す情報を記憶装置ごとにエラー情報記憶部に登録するエラー監視部と、
前記複数の記憶装置のうち一の記憶装置の使用を中止したとき、前記エラー情報記憶部に登録された情報を参照し、前記複数の記憶装置のうち前記一の記憶装置以外の記憶装置における過去のエラーの発生状況に基づいて、前記一の記憶装置以外の記憶装置の動作状況が良好であるかを判定し、良好でないと判定した場合、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納するリビルド処理を実行し、良好であると判定した場合、前記リビルド処理の実行を延期するとともに前記一の記憶装置以外の記憶装置におけるエラーの発生を監視し、前記一の記憶装置が交換されたことを検知するまでの間にエラーが発生した場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納するリビルド制御部と、
を有する、
ことを特徴とするストレージシステム。
【請求項２】
複数の記憶装置と、
前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御する制御装置と、
前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置と、
を備え、
前記制御装置は、
前記複数の記憶装置のそれぞれにおけるエラーの発生を監視し、エラーの発生に応じたエラー点数を記憶装置ごとにエラー情報記憶部に登録するエラー監視部と、
前記複数の記憶装置のうち一の記憶装置の使用を中止したとき、前記エラー情報記憶部を参照し、前記複数の記憶装置のうち前記一の記憶装置以外の少なくとも１つの記憶装置に対応するエラー点数が所定値以上である場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納し、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置が新たな記憶装置に交換されたことを検知した後、前記一の記憶装置に記憶されていたデータを生成して前記新たな記憶装置に格納するリビルド制御部と、
を有する、
ことを特徴とするストレージシステム。
【請求項３】
前記リビルド制御部は、前記一の記憶装置に記憶されていたデータを前記予備用記憶装置に格納した後、前記一の記憶装置が新たな記憶装置に交換されたことを検知したとき、前記予備用記憶装置に格納されたデータを前記新たな記憶装置に書き戻すことを特徴とする請求項２記載のストレージシステム。
【請求項４】
前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置の使用を中止してからの時間経過を監視し、一定時間が経過するまでに前記一の記憶装置が交換されなかった場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納することを特徴とする請求項２または３記載のストレージシステム。
【請求項５】
前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記複数の記憶装置のうち前記一の記憶装置以外の記憶装置におけるエラーの発生を監視し、前記一の記憶装置が交換されたことを検知するまでの間にエラーが発生した場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納することを特徴とする請求項２〜４のいずれか１項に記載のストレージシステム。
【請求項６】
前記エラー監視部は、前記複数の記憶装置のそれぞれにおいてエラーが発生したかを定期的に検査し、
前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置が交換されるまでの間、前記エラー監視部がエラーの発生を検査する間隔を前記一の記憶装置の使用を中止する前より短くする、
ことを特徴とする請求項５記載のストレージシステム。
【請求項７】
複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置において、
前記複数の記憶装置のそれぞれにおけるエラーの発生を監視し、エラーの発生状況を示す情報を記憶装置ごとにエラー情報記憶部に登録するエラー監視部と、
前記複数の記憶装置のうち一の記憶装置の使用を中止したとき、前記エラー情報記憶部に登録された情報を参照し、前記複数の記憶装置のうち前記一の記憶装置以外の記憶装置における過去のエラーの発生状況に基づいて、前記一の記憶装置以外の記憶装置の動作状況が良好であるかを判定し、良好でないと判定した場合、前記一の記憶装置に記憶されていたデータを生成して、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置に格納するリビルド処理を実行し、良好であると判定した場合、前記リビルド処理の実行を延期するとともに前記一の記憶装置以外の記憶装置におけるエラーの発生を監視し、前記一の記憶装置が交換されたことを検知するまでの間にエラーが発生した場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納するリビルド制御部と、
を有することを特徴とするストレージ制御装置。
【請求項８】
複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御する制御装置とを備えたストレージシステムにおけるストレージ制御方法であって、
前記制御装置が、
前記複数の記憶装置のそれぞれにおけるエラーの発生を監視して、エラーの発生状況を示す情報を記憶装置ごとにエラー情報記憶部に登録し、
前記複数の記憶装置のうち一の記憶装置の使用を中止したとき、前記エラー情報記憶部に登録された情報を参照し、前記複数の記憶装置のうち前記一の記憶装置以外の記憶装置における過去のエラーの発生状況に基づいて、前記一の記憶装置以外の記憶装置の動作状況が良好であるかを判定し、良好でないと判定した場合、前記一の記憶装置に記憶されていたデータを生成して、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置に格納するリビルド処理を実行し、良好であると判定した場合、前記リビルド処理の実行を延期するとともに前記一の記憶装置以外の記憶装置におけるエラーの発生を監視し、前記一の記憶装置が交換されたことを検知するまでの間にエラーが発生した場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納する、
ことを特徴とするストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム、ストレージ制御装置およびストレージ制御方法に関する。
【背景技術】
【０００２】
近年、ＨＤＤ（Hard Disk Drive）などの記憶装置を複数用いたストレージシステムが広く使用されている。このようなストレージシステムでは、一般的に、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）技術を用いて、データが２つ以上の記憶装置に冗長化されるような記録制御が行われることで、記録されるデータの安全性が高められている。
【０００３】
また、データが冗長化されたストレージシステムにおいて、故障などによって１つの記憶装置の使用が中止されると、使用が中止された記憶装置に記憶されていたデータが再構築されて、他の記憶装置に格納される。このような処理は、一般に「リビルド処理」と呼ばれる。多くのストレージシステムでは、ホットスペア（Hot Spare）と呼ばれる予備用記憶装置が用意されており、このホットスペアを用いてリビルド処理が行われることが多い。記憶装置が故障したとき、ホットスペアをデータ格納先としたリビルド処理が即座に行われることで、データが冗長化された状態に短時間で戻し、データの安全性を短時間で回復させることができる。
【０００４】
なお、予備用記憶装置を用いてデータの安全性を回復させる技術としては、例えば、エラー発生回数などを基に、故障発生の可能性が高い記憶装置を予測し、その記憶装置のデータを予備用記憶装置にあらかじめコピーしておく方法がある。
【０００５】
また、記憶装置の故障発生時の制御例としては、記憶装置での障害発生時に、冗長度に余裕がない場合には、通常の読み書き処理より障害回復処理を優先するように制御するシステムがある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−１２８７７３号公報
【特許文献２】特開２００５−１００２５９号公報
【特許文献３】特開平５−３１４６７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
リビルド処理では、使用を継続する残りの記憶装置の少なくとも１つからのデータ読み出しや、他の記憶装置へのデータ書き込みが行われる。このため、リビルド処理の実行中には、使用を継続する残りの記憶装置でのアクセス処理負荷や、記憶装置でのアクセスを制御する制御装置の処理負荷が高くなり、ホスト装置からの要求に応じたデータのアクセス速度が低下してしまう可能性がある。
【０００８】
上記のように、データが冗長化された状態で、記憶装置の使用を中止したとき、できるだけ早くリビルド処理が行われることで、データの冗長性を短時間で回復させることができる。しかしながら、記憶装置の使用中止から短時間でリビルド処理の実行を開始すると、記憶装置の使用中止後の所定期間において、ホスト装置からの要求に応じたデータのアクセス速度が低下してしまう可能性がある。
【０００９】
本発明はこのような課題に鑑みてなされたものであり、記憶装置の状況に応じてリビルド処理を実行できるようにしたストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、複数の記憶装置と、複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように複数の記憶装置に対するデータ記録を制御する制御装置とを備えたストレージシステムが提供される。このストレージシステムにおいて、制御装置は、エラー監視部と、リビルド制御部とを有する。エラー監視部は、複数の記憶装置のそれぞれにおけるエラーの発生を監視し、エラーの発生状況を示す情報を記憶装置ごとにエラー情報記憶部に登録する。リビルド制御部は、複数の記憶装置のうち一の記憶装置の使用を中止したとき、エラー情報記憶部に登録された情報を参照し、上記の複数の記憶装置のうち上記の一の記憶装置以外の記憶装置における過去のエラーの発生状況に基づいて、上記の一の記憶装置に記憶されていたデータを生成して他の記憶装置に格納するリビルド処理の実行タイミングを決定する。
【００１１】
また、上記目的を達成するために、上記の制御装置と同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。
【発明の効果】
【００１２】
上記のストレージシステム、ストレージ制御装置およびストレージ制御方法によれば、記憶装置におけるエラー発生状況に応じてリビルド処理の実行タイミングを決定できるようになる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態に係るストレージシステムの構成例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの全体構成例を示す図である。
【図３】ＣＭのハードウェア構成例を示す図である。
【図４】ＣＭの処理機能の構成例を示すブロック図である。
【図５】ディスク管理テーブルに登録される情報の例を示す図である。
【図６】ＲＡＩＤ管理テーブルに登録される情報の例を示す図である。
【図７】エラー点数テーブルに登録される情報の例を示す図である。
【図８】ホットスペアに対するリビルド処理およびコピーバック処理の実行手順例を示す図である。
【図９】図８の処理実行時におけるディスク管理テーブルおよびＲＡＩＤ管理テーブルの遷移例を示す図（その１）である。
【図１０】図８の処理実行時におけるディスク管理テーブルおよびＲＡＩＤ管理テーブルの遷移例を示す図（その２）である。
【図１１】図８の処理実行時におけるディスク管理テーブルおよびＲＡＩＤ管理テーブルの遷移例を示す図（その３）である。
【図１２】交換されたＨＤＤに対するリビルド処理の実行手順例を示す図である。
【図１３】図１２の処理実行時におけるディスク管理テーブルおよびＲＡＩＤ管理テーブルの遷移例を示す図である。
【図１４】エラー監視部によるパトロール処理手順の例を示すフローチャートである。
【図１５】リビルド制御部によるリビルド制御処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、実施の形態について図面を参照して詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るストレージシステムの構成例を示す図である。
【００１５】
図１に示すストレージシステム１は、複数の記憶装置１１〜１５と、制御装置２０とを備える。記憶装置１１〜１５のそれぞれは、例えば、ＨＤＤ、ＳＳＤ（Solid State Drive）などの不揮発性記憶装置である。なお、ストレージシステム１が備える記憶装置の数は、２以上の任意の数であればよい。
【００１６】
制御装置２０は、図示しないホスト装置からの、ストレージシステム１に含まれる記憶装置に記録されたデータに対するアクセスを制御する。また、制御装置２０は、ストレージシステム１に含まれる２以上の所定数の記憶装置を用いて、これら所定数の記憶装置に記録するデータが複数の記憶装置に冗長化されるように管理する。
【００１７】
ここで、データが複数の記憶装置に冗長化されるように管理するための記憶装置の単位を、「ＲＡＩＤグループ」と呼ぶ。図１の例では、４つの記憶装置１１〜１４が１つのＲＡＩＤグループに属するものとする。制御装置２０は、例えば、ＲＡＩＤ−１，４，５のいずれかを用いて、記憶装置１１〜１４においてデータが２重に冗長化されるように管理する。あるいは、制御装置２０は、ＲＡＩＤ−６を用いて、記憶装置１１〜１４においてデータが３重に冗長化されるように管理してもよい。
【００１８】
制御装置２０は、エラー監視部２１、エラー情報記憶部２２およびリビルド制御部２３を備える。エラー監視部２１およびリビルド制御部２３の処理は、例えば、制御装置２０が備える図示しないＣＰＵ（Central Processing Unit）が所定のプログラムを実行することで実現される。エラー情報記憶部２２は、例えば、ＳＳＤなどの各種の不揮発性記憶装置によって実現される。なお、エラー情報記憶部２２は、制御装置２０の外部に設けられていてもよい。
【００１９】
エラー監視部２１は、少なくとも、ＲＡＩＤグループに属する記憶装置１１〜１４におけるエラーの発生を監視し、エラーの発生状況を示す情報を記憶装置ごとにエラー情報記憶部２２に登録する。エラーの発生状況を示す情報としては、例えば、記憶装置ごとのエラー発生履歴、エラーの発生状況に応じて加算される記憶装置ごとのエラー点数などがある。
【００２０】
なお、エラー監視部２１は、例えば、記憶装置１１〜１４に対して定期的にアクセスすることで、エラーが発生したか否かを検査する。また、エラー監視部２１は、例えば、ホスト装置からのアクセス要求に応じて制御装置２０が記憶装置１１〜１４へアクセスしたときにエラーが検知された場合に、エラーが発生したことをエラー情報記憶部２２に登録してもよい。
【００２１】
リビルド制御部２３は、ＲＡＩＤグループに属する記憶装置１１〜１４のうち、いずれかの記憶装置の使用を中止したとき、使用を中止した記憶装置に記憶されていたデータを生成して他の記憶装置に格納する「リビルド処理」を実行する。
【００２２】
ここで、記憶装置の使用を中止する場合とは、例えば、故障により記憶装置にアクセスできなくなった場合、エラー監視部２１によって検知された、記憶装置におけるエラーの発生回数が所定数に達した場合、交換などを目的として記憶装置を取り外す場合などである。
【００２３】
以下、例として、図１に示すように、記憶装置１４の使用を中止するものとして説明する。
また、リビルド制御部２３は、リビルド処理において、ＲＡＩＤグループに属する記憶装置１１〜１４のうち、使用を中止した記憶装置１４以外の少なくとも１つの記憶装置に記憶されたデータを基に、記憶装置１４に記憶されていたデータを生成する。例えば、記憶装置１１〜１４を用いてＲＡＩＤ−５による書き込み制御が行われているものとすると、リビルド制御部２３は、記憶装置１１〜１３に記憶されたデータを基に、記憶装置１４に記憶されていたデータを計算によって復元する。また、記憶装置１１〜１４を用いてデータがミラーリングされている場合、リビルド制御部２３は、記憶装置１１〜１３のいずれかから、記憶装置１４に記憶されているデータに対応するミラーデータを読み出す。
【００２４】
なお、リビルド処理におけるデータの格納先は、任意に決定可能である。例えば、記憶装置１５が、ストレージシステム１にあらかじめ用意された予備用記憶装置であるものとすると、図１の点線矢印に示すように、リビルド処理におけるデータの格納先を、記憶装置１５とすることが可能である。
【００２５】
リビルド制御部２３は、記憶装置１４の使用を中止したとき、エラー情報記憶部２２に登録された記憶装置１１〜１３についての情報に基づいて、記憶装置１１〜１３における過去のエラー発生状況を判定し、その判定結果に基づいて、リビルド処理の実行タイミングを制御する。リビルド制御部２３は、記憶装置１１〜１３のうちの少なくとも１つについて、過去のエラー発生状況から過去の動作状況が良好でないと判定した場合には、それ以外の場合より早いタイミングでリビルド処理を実行する。
【００２６】
例えば、上記のようにエラー監視部２１がエラー情報記憶部２２に対してエラー点数を登録する場合、リビルド制御部２３は、エラー点数が所定のしきい値未満の場合、そのエラー点数に対応する記憶装置の過去のエラー発生回数が少なく、その記憶装置の過去の動作状況が良好であると判定する。一方、リビルド制御部２３は、エラー点数が所定のしきい値以上の場合、そのエラー点数に対応する記憶装置の過去の動作状況が良好でないと判定する。あるいは、リビルド制御部２３は、記憶装置において過去に一度もエラーが発生していない場合に、過去の動作状況が良好であると判定し、過去に一度でもエラーが発生していた場合に、過去の動作状況が良好でないと判定してもよい。
【００２７】
ここで、ＲＡＩＤグループに属する記憶装置１１〜１４では、データが冗長化されているので、１つの記憶装置１４の使用が中止された場合でも、残りの記憶装置１１〜１３を用いて、ホスト装置からの要求に基づくデータアクセス処理を継続できる。一方、リビルド処理では、使用を継続する記憶装置１１〜１３の少なくとも１つからのデータ読み出しや、記憶装置１５などの他の記憶装置へのデータ書き込みが行われる。このため、リビルド処理中には、記憶装置１１〜１３でのアクセス処理や制御装置２０によるアクセス制御処理の負荷が高くなり、ホスト装置からの要求に応じたデータアクセス速度が低下してしまう可能性がある。
【００２８】
記憶装置１４の使用が中止されたとき、できるだけ早くリビルド処理を実行することで、データの冗長度を使用中止前の状態に短時間で戻すことができ、データの安全性を保つことができる。その反面、リビルド処理の実行により、ホスト装置からの要求に応じたデータアクセス速度が低下してしまう可能性がある。
【００２９】
これに対し、記憶装置１４の使用中止時からリビルド処理の実行タイミングを遅らせることが可能であれば、例えば、業務時間外など、記憶装置へのアクセスが少ない任意の時間帯にリビルド処理を実行できるようになる。その反面、リビルド処理の実行タイミングが遅れるほど、データの安全性が低下している期間が長くなる。
【００３０】
リビルド制御部２３は、記憶装置１４の使用を中止したとき、記憶装置１１〜１３の少なくとも１つについての過去の動作状況が良好でない場合には、今後に記憶装置１１〜１３のいずれかで故障が発生する可能性が高いと推定する。この場合、リビルド制御部２３は、データの安全性を保つためにはできるだけ早くリビルド処理を実行すべきと判断し、過去の動作状況が良好である場合と比較して、リビルド処理を早いタイミングで実行する。
【００３１】
一方、リビルド制御部２３は、記憶装置１４の使用を中止したとき、記憶装置１１〜１３のすべてについての過去の動作状況が良好である場合には、今後に記憶装置１１〜１３のいずれかで故障が発生する可能性が低いと推定する。この場合、リビルド制御部２３は、ある程度の期間リビルド処理を実行しなくてもデータの安全性が保たれると判断し、過去の動作状況が良好でない場合と比較して、リビルド処理を遅いタイミングで実行する。これにより、データの安全性をできるだけ保ちつつも、記憶装置１４の使用を中止した後の所定期間における記憶装置１１〜１３でのアクセス処理負荷や制御装置２０の処理負荷を軽減することができる。
【００３２】
以上のリビルド制御部２３の処理によれば、故障した記憶装置１４以外の記憶装置１１〜１３における過去のエラー発生状況を参照することで、記憶装置１１〜１４に記憶されたデータの安全性をできるだけ保ちながら、リビルド処理の実行タイミングを決定できるようになる。
【００３３】
なお、リビルド制御部２３は、例えば、記憶装置１４の使用を中止したとき、記憶装置１１〜１３における過去のエラー発生状況に応じて、リビルド処理の実行タイミングだけでなく、リビルド処理におけるデータの格納先を変えてもよい。例えば、リビルド制御部２３は、記憶装置１１〜１３の少なくとも１つについての過去の動作状況が良好でない場合には、ストレージシステム１にあらかじめ用意された予備用の記憶装置１５に対して、記憶装置１４に記憶されていたデータを格納する。一方、リビルド制御部２３は、記憶装置１１〜１３のすべてについての過去の動作状況が良好である場合には、記憶装置１４が新たな記憶装置１４ａに交換されたことを検知した後、交換後の記憶装置１４ａに対して、記憶装置１４に記憶されていたデータを格納する（図１の破線矢印に対応）。
【００３４】
後者の処理によれば、記憶装置１４が搭載されていた位置に新たな記憶装置１４ａが搭載されることから、制御装置２０は、ＲＡＩＤグループの構成を記憶装置１４の使用中止前の状態に戻して、ＲＡＩＤグループにおけるアクセス制御を続行できる。従って、データの安全性をできるだけ保ちつつも、制御装置２０によるＲＡＩＤグループの管理を容易にすることができる。
【００３５】
さらに、記憶装置１５がいわゆるホットスペアである場合には、リビルド制御部２３は、リビルド処理において記憶装置１５にデータを格納した後、記憶装置１４が新たな記憶装置１４ａに交換されたときに、記憶装置１５に格納したデータを新たな記憶装置１４ａに書き戻す「コピーバック処理」を実行する。この場合、リビルド制御部２３は、上記のように、記憶装置１４の使用を中止する際に、記憶装置１１〜１３のすべてについての過去の動作状況が良好である場合には、リビルド処理におけるデータの格納先を交換後の記憶装置１４ａとすることで、コピーバック処理を実行する必要がなくなる。これにより、記憶装置１１〜１３，１４ａでのアクセス処理の負荷や、制御装置２０による処理負荷をさらに軽減できる。
【００３６】
〔第２の実施の形態〕
次に、第２の実施の形態として、ホットスペアの記憶装置を備えるとともに、ＲＡＩＤ−６を用いて記憶装置が管理されるストレージシステムの例について説明する。
【００３７】
図２は、第２の実施の形態に係るストレージシステムの全体構成例を示す図である。図２に示すストレージシステム１００は、ＣＥ（Controller Enclosure）２００、ＤＥ（Drive Enclosure）３００およびホスト装置４００を含む。
【００３８】
ＣＥ２００は、ＣＭ（Controller Module）２０１，２０２を備える。ＣＭ２０１，２０２のそれぞれは、ホスト装置４００からの要求に応じて、ＤＥ３００内の記憶装置に対するデータの読み書きを行う。ＣＭ２０１，２０２は、ＤＥ３００内の記憶装置によって実現される物理記憶領域をＲＡＩＤによって管理し、これらの物理記憶領域に対するアクセスを制御する。
【００３９】
なお、ＣＭは、ＣＥ２００内に１つのみ設けられてもよいし、３つ以上設けられてもよい。ただし、ＣＭが複数設けられることで、ＤＥ３００に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。
【００４０】
ＤＥ３００は、ＣＭ２０１，２０２からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態において、ＤＥ３００は、記憶装置としてＨＤＤを備えるディスクアレイ装置である。なお、ＤＥ３００が備える記憶装置としては、ＳＳＤなどの他の種類の不揮発性記憶装置を使用することもできる。また、ＣＥ２００には、複数のＤＥ３００が接続されていてもよい。
【００４１】
ホスト装置４００は、ユーザの操作に応じて、ＣＭ２０１，２０２に対して、ＤＥ３００内のＨＤＤへのアクセスを要求する。ホスト装置４００は、例えば、ユーザの操作に応じて、ＣＭ２０１，２０２のいずれかを通じて、ＤＥ３００内のＨＤＤからのデータの読み出しや、ＤＥ３００内のＨＤＤに対するデータの書き込みを行うことができる。
【００４２】
なお、ＣＥ２００内のＣＭ２０１，２０２は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、ＣＭ２０１についてのみ説明し、ＣＭ２０２についての説明を省略する。
【００４３】
図３は、ＣＭのハードウェア構成例を示す図である。
ＣＭ２０１は、ＣＰＵ２１１によって装置全体が制御されている。ＣＰＵ２１１には、ＲＡＭ（Random Access Memory）２１２および複数の周辺機器が、バス２１７を介して接続されている。ＲＡＭ２１２は、ＣＭ２０１の主記憶装置として使用され、ＣＰＵ２１１に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【００４４】
ＣＰＵ２１１には、周辺機器の例として、ＳＳＤ２１３、入力Ｉ／Ｆ（インタフェース）２１４、ＣＡ（Channel Adapter）２１５およびＤＩ（Drive Interface）２１６が接続されている。
【００４５】
ＳＳＤ２１３は、ＣＭ２０１の二次記憶装置として使用され、ＣＰＵ２１１によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、ＨＤＤなどの他の種類の不揮発性記憶装置が使用されてもよい。
【００４６】
入力Ｉ／Ｆ２１４には、操作キーなどを備える入力装置２１４ａが接続されている。入力Ｉ／Ｆ２１４は、入力装置２１４ａに対する操作入力に応じた信号をＣＰＵ２１１に出力する。
【００４７】
ＣＡ２１５は、ホスト装置４００とＣＭ２０１との間でデータを送受信するインタフェース処理を実行する。ＣＡ２１５とホスト装置４００とは、例えば、ＦＣ（Fibre Channel）規格に従って通信する。
【００４８】
ＤＩ２１６は、ＤＥ３００とＣＭ２０１との間でデータを送受信するインタフェース処理を実行する。ＤＩ２１６とＤＥ３００とは、例えば、ＳＡＳ（Serial Attached SCSI，SCSI：Small Computer System Interface）規格に従って通信する。
【００４９】
図４は、ＣＭの処理機能の構成例を示すブロック図である。
ＣＭ２０１は、アクセス制御部２２１、エラー監視部２２２およびリビルド制御部２２３を備える。これらの各処理ブロックの処理は、例えば、ＣＭ２０１のＣＰＵ２１１が所定のプログラムを実行することで実現される。また、ＣＭ２０１の記憶装置には、ディスク管理テーブル２３０、ＲＡＩＤ管理テーブル２４０およびエラー点数テーブル２５０が記憶される。ディスク管理テーブル２３０、ＲＡＩＤ管理テーブル２４０およびエラー点数テーブル２５０は、例えばＳＳＤ２１３に記憶される。
【００５０】
アクセス制御部２２１は、ホスト装置４００からの要求に応じて、ＤＥ３００内のＨＤＤにアクセスする。アクセス制御部２２１は、例えば、ホスト装置４００からデータの読み出し要求を受けたとき、要求されたデータをＤＥ３００内の所定のＨＤＤから読み出して、ホスト装置４００に送信する。一方、アクセス制御部２２１は、ホスト装置４００からデータの書き込み要求を受けたとき、ホスト装置４００から受信した書き込み対象のデータを、ＤＥ３００内の所定のＨＤＤに書き込む。
【００５１】
また、アクセス制御部２２１は、ディスク管理テーブル２３０およびＲＡＩＤ管理テーブル２４０に設定された情報に基づいて、ＤＥ３００内のＨＤＤに記録するデータをＲＡＩＤによって管理する。本実施の形態では、アクセス制御部２２１は、少なくともＲＡＩＤ−５，６を用いたデータ記録制御を行うことが可能になっている。
【００５２】
ディスク管理テーブル２３０は、ＤＥ３００に設けられるＨＤＤごとに、ＨＤＤの識別番号や、ＨＤＤの状態を示す情報を保持する。ＲＡＩＤ管理テーブル２４０は、それぞれ所定のＲＡＩＤレベルを用いて管理されるＲＡＩＤグループごとに、ＲＡＩＤグループの識別番号、適用されるＲＡＩＤレベル、ＲＡＩＤグループに属するＨＤＤを示す情報、ＲＡＩＤグループの制御状態を示す情報などを保持する。
【００５３】
アクセス制御部２２１は、ＲＡＩＤ管理テーブル２４０を参照することで、例えば、データを記録する際の記録先のＨＤＤや、その記録の際に用いるＲＡＩＤレベルなどを判定する。また、アクセス制御部２２１は、ＲＡＩＤ管理テーブル２４０に登録されたＨＤＤに対応するディスク管理テーブル２３０のレコードを参照することで、そのＨＤＤの状態を認識することができる。
【００５４】
さらに、アクセス制御部２２１は、ホスト装置４００からの要求に応じてＤＥ３００内のＨＤＤにアクセスしたとき、アクセス先のＨＤＤからの応答を基にエラーを検出した場合には、エラーを検出したことを、エラー検出先のＨＤＤを識別する情報とともに、エラー監視部２２２に通知する。また、アクセス制御部２２１は、エラー監視部２２２やリビルド制御部２２３からの要求に応じて、ＤＥ３００内のＨＤＤにアクセスする場合もある。
【００５５】
エラー監視部２２２は、ＤＥ３００内のＨＤＤのエラーの発生状況を定期的に監視する「パトロール処理」を実行する。パトロール処理では、エラー監視部２２２は、アクセス制御部２２１に、ＤＥ３００内のＨＤＤのそれぞれに対して所定のコマンドを定期的に送信させ、コマンドに対する応答からエラー発生の有無を判定する。なお、エラー監視部２２２は、ＲＡＩＤ管理テーブル２４０に登録された後述するパトロールフラグを参照し、パトロールフラグが「１」の場合には、「０」の場合よりエラー発生状況を検査する間隔を短くして、パトロールを強化する。
【００５６】
エラー監視部２２２は、ＨＤＤごとのエラーの発生状況を、エラー点数テーブル２５０に登録する。エラー点数テーブル２５０には、ＨＤＤの識別番号ごとにエラー点数が登録される。エラー監視部２２２は、エラーの発生を検出すると、エラー発生を検出したＨＤＤに対応する、エラー点数テーブル２５０内のエラー点数をインクリメントする。なお、エラー監視部２２２は、ホスト装置４００からの要求に応じたＨＤＤへのアクセス時に、アクセス制御部２２１からエラー検出の通知を受けた場合にも、エラーが検出されたＨＤＤに対応するエラー点数をインクリメントしてもよい。
【００５７】
さらに、エラー監視部２２２は、エラー点数テーブル２５０内のエラー点数が所定のしきい値に達した場合には、しきい値に達したエラー点数に対応するＨＤＤが故障したと判定する。このとき、エラー監視部２２２は、故障が発生したことを、故障したＨＤＤの識別情報とともにリビルド制御部２２３に通知する。なお、エラー監視部２２２は、例えば、エラー点数に関係なく、パトロール処理や、アクセス制御部２２１によるＨＤＤへのアクセス処理の際に、アクセス先のＨＤＤと接続できないなどの深刻なエラーを検出した場合にも、ＨＤＤが故障したと判定して、リビルド制御部２２３に通知してもよい。
【００５８】
リビルド制御部２２３は、エラー監視部２２２によってＤＥ３００内のＨＤＤの故障が検出された場合に、故障したＨＤＤに記録されていたデータを再構築して別のＨＤＤに格納する「リビルド処理」を、アクセス制御部２２１に実行させる。後述するように、リビルド制御部２２３は、エラー点数テーブル２５０のエラー点数に基づき、故障したＨＤＤと同じＲＡＩＤグループに属する他のＨＤＤにおける過去のエラー発生状況に応じて、リビルド処理によるデータの格納先を、ホットスペアのＨＤＤ、または、故障したＨＤＤと交換された新たなＨＤＤのいずれかに決定する。
【００５９】
また、リビルド制御部２２３は、データの格納先をホットスペアのＨＤＤとしてリビルド処理を実行させた場合には、その後にホットスペアのＨＤＤのデータを交換後の新たなＨＤＤに書き戻す「コピーバック処理」を、アクセス制御部２２１に実行させる。
【００６０】
さらに、リビルド制御部２２３は、リビルド処理やコピーバック処理の実行制御に伴って、ディスク管理テーブル２３０やＲＡＩＤ管理テーブル２４０の情報を更新することにより、アクセス制御部２２１に適用するＲＡＩＤレベルを変更する。
【００６１】
図５は、ディスク管理テーブルに登録される情報の例を示す図である。ディスク管理テーブル２３０には、ＤＥ３００内のＨＤＤごとにそれぞれレコード２３１が設けられる。各レコード２３１には、ＨＤＤを識別する「ディスク番号」と、ＨＤＤの状態を示す「ディスク状態」とが登録される。
【００６２】
「ディスク番号」は、ＣＭ２０１に接続されているＨＤＤのそれぞれをＣＭ２０１が管理するための番号であり、例えば、ＤＥ３００におけるＨＤＤの位置を示すものであってもよい。なお、図５の例のように、ディスク番号は「ＤＩＳＫ＃ｘｘｘｘ」で表されるものとし、以下の説明では、ディスク番号が「ＤＩＳＫ＃ｘｘｘｘ」であるＨＤＤを、単に「ＤＩＳＫ＃ｘｘｘｘ」と呼ぶ。
【００６３】
「ディスク状態」には、リビルド制御部２２３の処理により、例えば、「正常」「正常ＨＳ」「故障」「構築中」のいずれかを示す情報が設定される。
「正常」は、対応するＨＤＤが正常に動作していることを示す。ただし、対応するＨＤＤが正常に動作しており、かつそのＨＤＤがホットスペアとして設定されている場合には、ディスク状態には「正常ＨＳ」と設定される。なお、ストレージシステム１００の初期状態では、ＤＥ３００内のＨＤＤのうちあらかじめ決められたディスク番号に対応するＨＤＤが、ホットスペアに設定される。
【００６４】
「故障」は、対応するＨＤＤが故障していることを示す。ディスク状態が「故障」に設定される場合とは、エラー監視部２２２によって対応するＨＤＤが故障していると判定された場合である。また、故障と判定されたＨＤＤが新たなＨＤＤに交換されるまでの間、ディスク状態は「故障」に設定されたままになる。
【００６５】
「構築中」は、対応するＨＤＤを格納先としてリビルド処理またはコピーバック処理が行われていることを示す。
図６は、ＲＡＩＤ管理テーブルに登録される情報の例を示す図である。ＲＡＩＤ管理テーブル２４０には、ＣＭ２０１に設定されたＲＡＩＤグループごとにそれぞれレコード２４１が設けられる。各レコード２４１には、「ＲＡＩＤグループ番号」「ＲＡＩＤレベル」「使用ディスク数」「ＲＡＩＤグループ状態」「初期ディスク番号」「使用ディスク番号」「パトロールフラグ」が登録される。
【００６６】
「ＲＡＩＤグループ番号」は、ＲＡＩＤグループを識別する情報である。「ＲＡＩＤレベル」は、対応するＲＡＩＤグループに設定されるＲＡＩＤレベルを示す。「使用ディスク数」は、対応するＲＡＩＤグループに属するＨＤＤの数を示す。
【００６７】
「ＲＡＩＤグループ状態」は、対応するＲＡＩＤグループについて正常に運用されているかを示す情報である。「ＲＡＩＤグループ状態」には、リビルド制御部２２３の処理により、例えば「正常」「縮退中」「リビルド中」「コピーバック中」「ＨＳ使用中」「異常」のいずれかを示す情報が設定される。
【００６８】
「正常」は、対応するＲＡＩＤグループが正常に運用されていることを示す。「縮退中」は、ＲＡＩＤレベルがＲＡＩＤ−６に設定されている場合にのみ設定され得る。「縮退中」は、対応するＲＡＩＤグループに属するＨＤＤのうち１台が故障により縮退した状態であり、残りのＨＤＤによってＲＡＩＤ−５で運用を継続している状態を示す。
【００６９】
「リビルド中」は、対応するＲＡＩＤグループに属するＨＤＤのうちの１台を格納先としてリビルド処理が行われていることを示す。「コピーバック中」は、対応するＲＡＩＤグループに属するＨＤＤのうちの１台を格納先としてコピーバック処理が行われていることを示す。
【００７０】
「ＨＳ使用中」は、対応するＲＡＩＤグループが正常に運用されているものの、ＲＡＩＤグループに属するＨＤＤのうちの１台がホットスペアであることを示す。「異常」は、対応するＲＡＩＤグループが運用できない状態であることを示す。例えば、ＲＡＩＤグループに属するＨＤＤの故障によりデータを冗長化できない状態であることを示す。
【００７１】
「初期ディスク番号」および「使用ディスク番号」は、ともに対応するＲＡＩＤグループに属するＨＤＤを示す。「初期ディスク番号」の欄は、「使用ディスク数」に設定された数と同数だけ設けられる。また、「使用ディスク番号」の欄も、「使用ディスク数」に設定された数と同数だけ設けられる。
【００７２】
「初期ディスク番号」は、対応するＲＡＩＤグループに属するＨＤＤとして初期設定されたＨＤＤのディスク番号を示す。「ＲＡＩＤグループ状態」が「正常」である場合、「初期ディスク番号」に設定された番号に対応するＨＤＤが実際に使用される。「初期ディスク番号」には、ホットスペアのＨＤＤを示すディスク番号は設定されない。
【００７３】
「使用ディスク番号」は、対応するＲＡＩＤグループに属するものとして現在実際に使用されているＨＤＤのディスク番号を示す。「ＲＡＩＤグループ状態」が「正常」である場合、「使用ディスク番号」のそれぞれに設定されるディスク番号は、「初期ディスク番号」のそれぞれに設定されるディスク番号と一致する。一方、例えば、「ＲＡＩＤグループ状態」が「ＨＳ使用中」である場合、「使用ディスク番号」のうちの１つがホットスペアのＨＤＤのディスク番号を示すようになり、このディスク番号は、対応する「初期ディスク番号」に設定されたディスク番号と一致しない。
【００７４】
「パトロールフラグ」は、リビルド制御部２２３によって設定されるフラグ情報であり、エラー監視部２２２によるパトロールが強化されているか否かを示す。後述するように、ＲＡＩＤグループにおけるデータの冗長度が正常状態より低い状態（具体的には、ＲＡＩＤレベルがＲＡＩＤ−６からＲＡＩＤ−５に変更されている場合）において、パトロールが強化される。「パトロールフラグ」には、パトロールが強化されているとき、「１」が設定され、パトロールが強化されていないとき、「０」が設定される。なお、「パトロールフラグ」の初期値は「０」である。
【００７５】
図７は、エラー点数テーブルに登録される情報の例を示す図である。
エラー点数テーブル２５０には、ＤＥ３００内のＨＤＤごとにそれぞれレコード２５１が設けられる。各レコード２５１には、ＨＤＤを識別する「ディスク番号」と、エラー監視部２２２によって対応するＨＤＤのエラーが検出されるたびに累積加算される「エラー点数」とが設定される。なお、「エラー点数」の初期値は「０」である。
【００７６】
次に、ＣＭ２０１によるリビルド処理およびコピーバック処理について説明する。
ＣＭ２０１は、ＲＡＩＤグループに属するＨＤＤのうちの１つが故障した場合に、リビルド制御部２２３の制御の下で、ホットスペアのＨＤＤに対するリビルド処理と、故障したＨＤＤから交換された新たなＨＤＤ（以下、「交換されたＨＤＤ」と呼ぶ）に対するリビルド処理のどちらかを実行する。また、ＣＭ２０１は、ホットスペアに対するリビルド処理を実行した場合には、故障したＨＤＤが交換された後、交換されたＨＤＤに対するコピーバック処理を実行する。
【００７７】
図８は、ホットスペアに対するリビルド処理およびコピーバック処理の実行手順例を示す図である。また、図９〜図１１は、図８の処理実行時におけるディスク管理テーブルおよびＲＡＩＤ管理テーブルの遷移例を示す図である。これらの図８〜図１１を用いて、ホットスペアに対するリビルド処理と、その後のコピーバック処理について説明する。
【００７８】
図８の初期状態では、例えば図８の左下に示すように、ＤＥ３００内のＨＤＤのうち４台のＤＩＳＫ＃００００〜ＤＩＳＫ＃０００３が、ＲＡＩＤ−６で運用されるＲＡＩＤグループ「ＧＰ＃００」に属する。また、ＤＥ３００に設けられたＤＩＳＫ＃０１００は、ホットスペアに設定されている。
【００７９】
図９〜図１１には、ＲＡＩＤ管理テーブル２４０のレコード２４１のうち、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａを示す。また、図９〜図１１には、ディスク管理テーブル２３０のレコード２３１のうち、ＤＩＳＫ＃００００，＃０００１，＃０００２，＃０００３，＃０１００にそれぞれ対応するレコード２３１ａ，２３１ｂ，２３１ｃ，２３１ｄ，２３１ｅを示す。
【００８０】
図９の上段に示すように、ＲＡＩＤグループ「ＧＰ＃００」が正常に運用されている初期状態では、ＲＡＩＤ管理テーブル２４０のレコード２４１ａにおける「ＲＡＩＤグループ状態」には「正常」が設定され、「初期ディスク番号」および「使用ディスク番号」には、ともにＤＩＳＫ＃００００〜ＤＩＳＫ＃０００３が設定されている。また、「初期ディスク番号」に設定された各ディスク番号に対応する、ディスク管理テーブル２３０のレコード２３１ａ〜２３１ｄでは、すべての「ディスク状態」に「正常」が設定されている。さらに、ホットスペアのＤＩＳＫ＃０１００に対応するディスク管理テーブル２３０のレコード２３１ｅでは、「ディスク状態」に「正常ＨＳ」が設定されている。
【００８１】
以上の状態から、ＣＭ２０１のエラー監視部２２２がＤＩＳＫ＃０００２が故障したと判定したとする（図８のステップＳ１１）。エラー監視部２２２は、ＤＩＳＫ＃０００２が故障したことをリビルド制御部２２３に通知する。リビルド制御部２２３は、図９の下段に示すように、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」を「縮退」に更新するとともに、ＤＩＳＫ＃０００２に対応するレコード２３１ｃの「ディスク状態」を「故障」に更新する。
【００８２】
このようなテーブル更新処理により、リビルド制御部２２３は、アクセス制御部２２１に、データの冗長度を下げたＲＡＩＤ−５によってＲＡＩＤグループ「ＧＰ＃００」の運用を継続させる（図８のステップＳ１２）。アクセス制御部２２１は、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」が「縮退」に更新され、ＤＩＳＫ＃０００２に対応するレコード２３１ｃの「ディスク状態」が「故障」に更新されたことを認識すると、故障したＨＤＤ以外のＤＩＳＫ＃００００，＃０００１，＃０００３を用いたＲＡＩＤ−５によるデータ記録制御を実行する。
【００８３】
リビルド制御部２２３は、後述する判定処理を行い、その結果、リビルド処理におけるデータの格納先をホットスペアのＤＩＳＫ＃０１００に決定する。リビルド制御部２２３は、図１０の上段に示すように、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａにおいて、「ＲＡＩＤグループ状態」を「リビルド中」に更新するとともに、ＤＩＳＫ＃０００２が設定されていた「使用ディスク番号」をＤＩＳＫ＃０１００に更新する。さらに、リビルド制御部２２３は、ホットスペアのＤＩＳＫ＃０１００に対応するレコード２３１ｅの「ディスク状態」を「構築中」に更新する。
【００８４】
このようなテーブル更新処理により、リビルド制御部２２３は、アクセス制御部２２１に、ホットスペアのＤＩＳＫ＃０１００に対するリビルド処理を開始させる（図８のステップＳ１３）。アクセス制御部２２１は、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」が「リビルド中」に更新されたことを認識する。これとともに、アクセス制御部２２１は、故障したＨＤＤに対応する「使用ディスク番号」がＤＩＳＫ＃０１００に更新されていることから、リビルド処理におけるデータの格納先をＤＩＳＫ＃０１００と認識する。アクセス制御部２２１は、ＤＩＳＫ＃００００，＃０００１，＃０００３に記録されたデータを基に、故障したＤＩＳＫ＃０００２に記録されていたデータを再構築して、ホットスペアのＤＩＳＫ＃０１００に格納する。
【００８５】
なお、ＤＩＳＫ＃０１００に対するリビルド処理が実行されている間、アクセス制御部２２１は、ホスト装置４００からの要求に応じた、ＲＡＩＤグループ「ＧＰ＃００」に属するＨＤＤへのアクセス処理も継続する。
【００８６】
ここで、リビルド処理におけるデータの再構築の方法について補足説明する。
ＲＡＩＤグループ「ＧＰ＃００」が正常に運用されている状態では、アクセス制御部２２１は、ホスト装置４００からの書き込み対象データをストライプに分割し、分割したストライプのうち２つのストライプ（第１／第２のストライプ）を基に、それぞれ異なる演算方法によって第１／第２のパリティを計算する。アクセス制御部２２１は、第１／第２のストライプおよび第１／第２のパリティという４つのデータを、１つのデータが１つのＨＤＤに割り当てられるように、ＲＡＩＤグループ「ＧＰ＃００」に属する４つのＤＩＳＫ＃００００〜＃０００３に記録する。また、アクセス制御部２２１は、上記の第１／第２のストライプおよび第１／第２のパリティについての、ＤＩＳＫ＃００００〜＃０００３への割り当て方を順次変更していく。
【００８７】
故障したＤＩＳＫ＃０００２に記録されていた第１のストライプを再構築する場合、アクセス制御部２２１は、残りのＤＩＳＫ＃００００，＃０００１，＃０００３のうちの２つから、第２のストライプと、第１のパリティまたは第２のパリティとを読み出し、読み出したデータを基に第１のストライプを計算により復元する。故障したＤＩＳＫ＃０００２に記録されていた第２のストライプを再構築する場合も、同様に、アクセス制御部２２１は、残りのＤＩＳＫ＃００００，＃０００１，＃０００３のうちの２つから、第１のストライプと、第１のパリティまたは第２のパリティとを読み出し、読み出したデータを基に第２のストライプを計算により復元する。故障したＤＩＳＫ＃０００２に記録されていた第１のパリティまたは第２のパリティを再構築する場合、アクセス制御部２２１は、残りのＤＩＳＫ＃００００，＃０００１，＃０００３のうち２つから、第１／第２のストライプを読み出し、読み出したデータを基に第１のパリティまたは第２のパリティを再計算する。
【００８８】
ＤＩＳＫ＃０１００に対するリビルド処理が終了すると、リビルド制御部２２３は、図１０の下段に示すように、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」を「ＨＳ使用中」に更新するとともに、ＤＩＳＫ＃０１００に対応するレコード２３１ｅの「ディスク状態」を「正常」に更新する。
【００８９】
このようなテーブル更新処理により、リビルド制御部２２３は、アクセス制御部２２１に、ホットスペアのＨＤＤを用いて、ＲＡＩＤグループ「ＧＰ＃００」をＲＡＩＤ−６によって暫定的に運用させる（図８のステップＳ１４）。アクセス制御部２２１は、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」が「ＨＳ使用中」に更新され、かつ、ＤＩＳＫ＃０１００に対応するレコード２３１ｃの「ディスク状態」が「故障」に更新されたことを認識すると、レコード２４１ａの「使用ディスク」に設定されたＤＩＳＫ＃００００，＃０００１，＃０１００，＃０００３を用いたＲＡＩＤ−６によるデータ記録制御を実行する。
【００９０】
その後、管理者によって、故障したＤＩＳＫ＃０００２が新たなＨＤＤに交換される。リビルド制御部２２３は、例えばアクセス制御部２２１を通じて、ＤＩＳＫ＃０００２が交換されたことを検知する（図８のステップＳ１５）。ＤＩＳＫ＃０００２が交換されたことを検知したリビルド制御部２２３は、図１１の上段に示すように、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」を「コピーバック中」に更新するとともに、ＤＩＳＫ＃０００２に対応するレコード２３１ｃの「ディスク状態」を「構築中」に更新する。
【００９１】
このようなテーブル更新処理により、リビルド制御部２２３は、アクセス制御部２２１に、ＤＩＳＫ＃０００２に対するコピーバック処理を開始させる（図８のステップＳ１６）。アクセス制御部２２１は、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」が「コピーバック中」に更新されたことを認識する。このとき、アクセス制御部２２１は、「初期ディスク番号」に設定されたＨＤＤのうちＤＩＳＫ＃０００２に対応するレコード２３１ｃの「ディスク状態」が「構築中」に更新されていることから、コピーバック処理におけるデータの格納先がＤＩＳＫ＃０００２であることを認識するとともに、コピーバック処理におけるデータの読み出し元が、ＤＩＳＫ＃０００２が設定された「初期ディスク番号」に対応する「使用ディスク番号」に設定されたＤＩＳＫ＃０１００であることを認識する。アクセス制御部２２１は、ＤＩＳＫ＃０１００に記録されているデータをＤＩＳＫ＃０００２に転送する。
【００９２】
なお、ＤＩＳＫ＃０００２に対するコピーバック処理が実行されている間、アクセス制御部２２１は、ホスト装置４００からの要求に応じた、ＲＡＩＤグループ「ＧＰ＃００」に属するＨＤＤへのアクセス処理も継続する。
【００９３】
ＤＩＳＫ＃０００２に対するコピーバック処理が終了すると、リビルド制御部２２３は、図１１の下段に示すように、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」を「正常」に更新するとともに、ＤＩＳＫ＃０００２に対応するレコード２３１ｃの「ディスク状態」を「正常」に更新する。このようなテーブル更新処理により、リビルド制御部２２３は、ＲＡＩＤグループ「ＧＰ＃００」を正常な運用状態に復帰させる（図８のステップＳ１７）。
【００９４】
アクセス制御部２２１は、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」が「正常」に更新されたことを認識すると、レコード２４１ａの「使用ディスク」に設定されたＤＩＳＫ＃００００〜＃０００３を用いたＲＡＩＤ−６によるデータ記録制御を実行する。
【００９５】
また、リビルド制御部２２３は、ＤＩＳＫ＃０１００に対応するレコード２３１ｅの「ディスク状態」を「正常ＨＳ」に更新して、ＤＩＳＫ＃０１００をホットスペアとして使用可能な状態に戻す。
【００９６】
次に、図１２は、交換されたＨＤＤに対するリビルド処理の実行手順例を示す図である。また、図１３は、図１２の処理実行時におけるディスク管理テーブルおよびＲＡＩＤ管理テーブルの遷移例を示す図である。これらの図１２，図１３と、前述の図９とを用いて、交換されたＨＤＤに対するリビルド処理について説明する。
【００９７】
図１２の初期状態では、前述の図８と同様に、ＤＥ３００内のＨＤＤのうち４台のＤＩＳＫ＃００００〜ＤＩＳＫ＃０００３が、ＲＡＩＤ−６で運用されるＲＡＩＤグループ「ＧＰ＃００」に属する。また、ＤＥ３００に設けられたＤＩＳＫ＃０１００は、ホットスペアに設定されている。このとき、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａと、ＤＩＳＫ＃００００〜＃０００３，＃０１００にそれぞれ対応するレコード２３１ａ〜２３１ｅとは、図９の上段の状態となる。
【００９８】
この状態から、ＣＭ２０１のエラー監視部２２２がＤＩＳＫ＃０００２が故障したと判定したとする（図１２のステップＳ２１）。エラー監視部２２２は、ＤＩＳＫ＃０００２が故障したことをリビルド制御部２２３に通知する。リビルド制御部２２３は、図９の下段に示すように、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」を「縮退」に更新するとともに、ＤＩＳＫ＃０００２に対応するレコード２３１ｃの「ディスク状態」を「故障」に更新する。このようなテーブル更新処理により、ＲＡＩＤ−５によってＲＡＩＤグループ「ＧＰ＃００」の運用が継続される（図１２のステップＳ２２）。
【００９９】
リビルド制御部２２３は、後述する判定処理を行い、その結果、リビルド処理におけるデータの格納先を、交換後のＨＤＤと決定する。この場合、リビルド制御部２２３は、故障したＤＩＳＫ＃０００２が新たなＨＤＤに交換されたかを監視する。そして、ＤＩＳＫ＃０００２が新たなＨＤＤに交換されたことを検知すると（図１２のステップＳ２３）、リビルド制御部２２３は、図１３の上段に示すように、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」を「リビルド中」に更新するとともに、ＤＩＳＫ＃０００２に対応するレコード２３１ｃの「ディスク状態」を「構築中」に更新する。
【０１００】
このようなテーブル更新処理により、リビルド制御部２２３は、アクセス制御部２２１に、ＤＩＳＫ＃０００２に対するリビルド処理を開始させる（図１２のステップＳ２４）。アクセス制御部２２１は、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」が「リビルド中」に更新されたことを認識する。このとき、アクセス制御部２２１は、故障状態であったＤＩＳＫ＃０００２に対応するレコード２３１ｃの「ディスク状態」が「構築中」に更新されていることから、リビルド処理におけるデータの格納先がＤＩＳＫ＃０００２であることを認識する。アクセス制御部２２１は、ＤＩＳＫ＃００００，＃０００１，＃０００３に記録されたデータを基に、故障した交換前のＤＩＳＫ＃０００２に記録されていたデータを再構築して、交換されたＤＩＳＫ＃０００２に格納する。
【０１０１】
ＤＩＳＫ＃０００２に対するリビルド処理が終了すると、リビルド制御部２２３は、図１３の下段に示すように、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」を「正常」に更新するとともに、ＤＩＳＫ＃０００２に対応するレコード２３１ｃの「ディスク状態」を「正常」に更新する。このようなテーブル更新処理により、リビルド制御部２２３は、ＲＡＩＤグループ「ＧＰ＃００」を正常な運用状態に復帰させる（図１２のステップＳ２５）。
【０１０２】
アクセス制御部２２１は、ＲＡＩＤグループ「ＧＰ＃００」に対応するレコード２４１ａの「ＲＡＩＤグループ状態」が「正常」に更新されたことを認識すると、レコード２４１ａの「使用ディスク」に設定されたＤＩＳＫ＃００００〜＃０００３を用いたＲＡＩＤ−６によるデータ記録制御を実行する。
【０１０３】
ところで、ホットスペアのＨＤＤに対するリビルド処理を実行する場合には、図８に示したように、ＲＡＩＤグループに属するＨＤＤが故障したとき、即座にホットスペアのＨＤＤをデータの格納先として割り当てて、リビルド処理を開始できる。リビルド処理が終了するまでの期間では冗長度が低下するものの、リビルド処理が終了すると、データの冗長度を元の状態に復帰できる。従って、ＨＤＤに記録されたデータの安全性を比較的高く保つことができる。
【０１０４】
しかしながら、ホットスペアのＨＤＤはあくまで一時的なデータの格納先であることから、ホットスペアのＨＤＤに対するリビルド処理を実行した場合には、その後に、交換されたＨＤＤに対するコピーバック処理を実行する必要が生じる。コピーバック処理は、ＲＡＩＤグループに属するＨＤＤのうち故障していないＨＤＤからのデータ読み出し処理や、読み出したデータに基づくＣＭ２０１での計算処理などを含む。このため、ホスト装置４００からの要求に応じてアクセス制御処理を継続しつつ、コピーバック処理を実行すると、ＲＡＩＤグループに属するＨＤＤにおけるアクセス処理負荷や、ＣＭ２０１のＣＰＵ２１１の処理負荷が増大してしまう。これにより、ホスト装置４００からのアクセス要求に対する応答速度が低下する可能性があるという問題がある。最悪の場合には、ホスト装置４００からの要求に応じたＨＤＤへのアクセスを実行できない可能性もある。
【０１０５】
このような問題を回避するために、ＨＤＤの故障が発生したとき、ホットスペアのＨＤＤを用いず、交換されたＨＤＤに対するリビルド処理を実行することを望むユーザも存在する。図１２に示したように、交換されたＨＤＤに対するリビルド処理を実行した場合には、リビルド処理が終了すると、コピーバック処理を行うことなく、ＲＡＩＤグループを元通りに運用できる。このように、コピーバック処理を実行しない分だけ、ＨＤＤでのアクセス処理負荷やＣＭ２０１のＣＰＵ２１１の処理負荷を軽減でき、ホスト装置４００からのアクセス要求に対する応答速度が低下する可能性を低減できる。
【０１０６】
しかしながら、交換されたＨＤＤに対するリビルド処理を実行する場合には、ＨＤＤの故障が発生してから、リビルド処理が終了するまでの時間が長くなる可能性が高まる。リビルド処理が終了するまでの期間では、ＲＡＩＤ−６からＲＡＩＤ−５に変更されて運用が継続されることで、データの冗長度が低下した状態となる。このため、交換されたＨＤＤに対するリビルド処理を実行する場合は、ホットスペアのＨＤＤに対するリビルド処理を実行する場合と比較して、ＨＤＤに記録されたデータの安全性が低下するという問題がある。リビルド処理が終了するまでの間、ＲＡＩＤ−５で運用が継続されることで、さらに１台のＨＤＤが故障した場合にはデータの冗長度が失われてしまう。また、ＲＡＩＤ−５で運用された状態でさらに２台のＨＤＤが故障した場合には、データの一部が失われてしまう。そして、故障したＨＤＤが交換されるまでの時間が長くなるほど、記録されたデータの安全性は低くなる。
【０１０７】
本実施の形態のＣＭ２０１は、ＲＡＩＤグループに属する１台のＨＤＤが故障したとき、データの冗長度を落とした状態でも記録されたデータの安全性をある程度維持できる状態かを判定する。ＣＭ２０１は、記録されたデータの安全性をある程度維持できると判定した場合には、故障されたＨＤＤが交換されるのを待ち、交換されたＨＤＤをデータの格納先としたリビルド処理を実行する。これにより、記録されたデータの安全性をある程度維持しつつ、ＨＤＤでのアクセス負荷やＣＭ２０１の処理負荷を軽減する。一方、ＣＭ２０１は、記録されたデータの安全性を維持できないと判定した場合には、ホットスペアのＨＤＤをデータの格納先としたリビルド処理を実行し、記録されたデータの安全性が著しく低下することを防止する。
【０１０８】
以上のように、リビルド処理時のデータ格納先を交換されたＨＤＤまたはホットスペアのＨＤＤのどちらにするかを自動的に判定することで、ホスト装置４００からのアクセス要求に対する応答速度を維持したいというユーザの要望に応えることを可能にしつつ、記録されたデータの安全性もある程度維持できるようになる。
【０１０９】
以下、ＣＭ２０１の処理を、フローチャートを用いて説明する。なお、以下の図１４，図１５の処理では、処理対象のＲＡＩＤグループに設定されたＲＡＩＤレベルがＲＡＩＤ−６であるものとする。
【０１１０】
まず、図１４は、エラー監視部によるパトロール処理手順の例を示すフローチャートである。この図１４の処理は、ＲＡＩＤ管理テーブル２４０に登録されたＲＡＩＤグループごとに実行される。
【０１１１】
［ステップＳ４１］エラー監視部２２２は、自身が備える計時機能のカウント値を「０」にリセットする。
［ステップＳ４２］エラー監視部２２２は、アクセス制御部２２１に、ＲＡＩＤグループに属するＨＤＤに対するエラー検査を実行させる。
【０１１２】
具体的には、エラー監視部２２２は、ＲＡＩＤ管理テーブル２４０内の、処理対象のＲＡＩＤグループに対応するレコード２４１から、「初期ディスク番号」に設定されたディスク番号を読み込む。エラー監視部２２２はさらに、読み込んだディスク番号のうち、各ディスク番号に対応するディスク管理テーブル２３０内のレコード２３１における「ディスク状態」に「正常」が設定されたディスク番号を選別し、選別したディスク番号に対応するＨＤＤをエラー検査の実行対象に決定する。エラー監視部２２２は、エラー検査の実行対象に決定したＨＤＤのディスク番号をアクセス制御部２２１に通知し、エラー検査の実行対象のＨＤＤに対して所定のコマンドを送信するように要求する。
【０１１３】
アクセス制御部２２１は、エラー監視部２２２からの要求に応じて、エラー検査の実行対象のＨＤＤに対して所定のコマンドを送信する。アクセス制御部２２１は、コマンド送信に対する応答から、コマンド送信先のＨＤＤにおけるエラーの発生の有無を判定し、ＨＤＤごとのエラーの判定結果をエラー監視部２２２に通知する。
【０１１４】
［ステップＳ４３］エラー監視部２２２は、ステップＳ４２でのエラー検査の実行により、ＨＤＤでエラーが発生したかを判定する。エラー監視部２２２は、アクセス制御部２２１から１つ以上のＨＤＤでエラーが発生したことの通知を受けた場合（Ｓ４３：Ｙｅｓ）、ステップＳ４４の処理を実行する。一方、エラー監視部２２２は、アクセス制御部２２１から全ＨＤＤでエラーが発生しなかったことの通知を受けた場合（Ｓ４３：Ｎｏ）、ステップＳ４８の処理を実行する。
【０１１５】
［ステップＳ４４］エラー監視部２２２は、エラーが発生したＨＤＤのディスク番号を、リビルド制御部２２３に通知する。なお、このステップＳ４４の処理は、ステップＳ４３でエラーが発生したと判定され、かつ、後述するステップＳ４８で「Ｙｅｓ」と判定された場合に実行されてもよい。
【０１１６】
［ステップＳ４５］エラー監視部２２２は、エラーが発生したＨＤＤに対応するエラー点数テーブル２５０のエラー点数を「１」だけインクリメントする。なお、エラー監視部２２２は、例えば、発生したエラーの種類に応じた異なる値をエラー点数に加算してもよい。
【０１１７】
［ステップＳ４６］エラー監視部２２２は、ステップＳ４４で加点したエラー点数が所定の値に達したかを判定する。エラー監視部２２２は、エラー点数が所定値に達した場合（Ｓ４６：Ｙｅｓ）、ステップＳ４７の処理を実行する一方、エラー点数が所定値に達していない場合（Ｓ４６：Ｎｏ）、ステップＳ４８の処理を実行する。
【０１１８】
［ステップＳ４７］エラー監視部２２２は、エラー点数が所定値に達したＨＤＤについて、故障が発生したと判定する。エラー監視部２２２は、故障が発生したＨＤＤのディスク番号と、このＨＤＤが属するＲＡＩＤグループとを、リビルド制御部２２３に通知する。
【０１１９】
なお、故障が発生したＨＤＤが１台の場合、故障発生の通知を受けたリビルド制御部２２３は、後述する図１５の処理の実行を開始する。ただし、故障が発生したＨＤＤが２台以上の場合、リビルド制御部２２３は、例えば、ＲＡＩＤグループの運用を停止する。
【０１２０】
［ステップＳ４８］エラー監視部２２２は、ＲＡＩＤ管理テーブル２４０内の、処理対象のＲＡＩＤグループに対応するレコード２４１から、パトロールフラグに設定された値を読み込み、パトロールが強化されているかを判定する。パトロールフラグが「０」である場合（Ｓ４８：Ｎｏ）、エラー監視部２２２は、パトロールが強化されていないと判定して、ステップＳ４９の処理を実行する。一方、パトロールフラグが「１」である場合（Ｓ４８：Ｙｅｓ）、エラー監視部２２２は、パトロールが強化されていると判定して、ステップＳ５０の処理を実行する。
【０１２１】
［ステップＳ４９］エラー監視部２２２は、カウント上限値をＴ１（例えば１．０秒）に設定し、時間のカウントを開始する。
［ステップＳ５０］エラー監視部２２２は、カウント上限値を、Ｔ１より小さいＴ２（例えば０．２秒）に設定し、時間のカウントを開始する。
【０１２２】
［ステップＳ５１］エラー監視部２２２は、時間のカウント値が、ステップＳ４９またはステップＳ５０で設定されたカウント上限値に達したかを判定し、カウント上限値に達したとき（Ｓ５１：Ｙｅｓ）、ステップＳ４１の処理を実行する。これにより、ＨＤＤに対するエラー検査が再度実行される。
【０１２３】
以上の図１４の処理では、処理対象のＲＡＩＤグループに属するＨＤＤにおいてエラーが検出された場合（Ｓ４３：Ｙｅｓ）、エラー監視部２２２は、エラーが検出されたＨＤＤに対応するエラー点数を加点する（Ｓ４５）。このとき、加点したエラー点数が所定値に達した場合（Ｓ４６：Ｙｅｓ）には、エラー監視部２２２は、リビルド制御部２２３に対して故障の発生を通知する（Ｓ４７）。
【０１２４】
なお、エラー監視部２２２は、例えば、ステップＳ４２でのエラー検査や、ホスト装置４００からの要求に応じたアクセス制御部２２１によるＨＤＤへのアクセス処理において、深刻なエラーが検出された場合には、エラー点数に関係なく、リビルド制御部２２３に対して故障の発生を通知してもよい。
【０１２５】
また、図１４の処理において、エラー監視部２２２は、パトロールフラグが「１」である場合（Ｓ４８：Ｙｅｓ）には、「０」である場合（Ｓ４８：Ｎｏ）より、エラー検査を実行する間隔を短くする（Ｓ５０）。これにより、パトロールフラグが「１」である状態では、処理対象のＲＡＩＤグループに属するＨＤＤに対するパトロールが強化される。
【０１２６】
図１５は、リビルド制御部によるリビルド制御処理手順の例を示すフローチャートである。この図１５の処理は、図１４のステップＳ４７において、エラー監視部２２２からリビルド制御部２２３に対してＨＤＤの故障発生が通知されたときに、リビルド制御部２２３によって実行される。なお、図１５の処理は、ＨＤＤの故障発生時だけでなく、故障発生以外の要因でＨＤＤの使用が中止される場合に実行されてもよい。
【０１２７】
［ステップＳ６１］リビルド制御部２２３は、エラー監視部２２２から、故障が発生したＨＤＤのディスク番号と、このＨＤＤが属するＲＡＩＤグループの通知を受ける。リビルド制御部２２３は、エラー監視部２２２から通知されたディスク番号に対応するレコード２３１をディスク管理テーブル２３０から抽出し、抽出したレコード２３１における「ディスク状態」を「故障」に更新する。これとともに、リビルド制御部２２３は、エラー監視部２２２から通知されたＲＡＩＤグループに対応するレコード２４１をＲＡＩＤ管理テーブル２４０から抽出し、抽出したレコード２４１における「ＲＡＩＤグループ状態」を「縮退」に更新する。これにより、リビルド制御部２２３は、故障したＨＤＤが属するＲＡＩＤグループについて、データの冗長度が低下するＲＡＩＤ−５によって運用を継続させる。
【０１２８】
なお、以上のステップＳ６１の処理は、図８のステップＳ１２または図１２のステップＳ２２に対応する。
［ステップＳ６２］リビルド制御部２２３は、自身が備える計時機能のカウント値を「０」に初期化し、時間のカウントを開始する。
【０１２９】
［ステップＳ６３］リビルド制御部２２３は、ステップＳ６１でＲＡＩＤ管理テーブル２４０から抽出したレコード２４１において、「初期ディスク番号」に設定された未選択のディスク番号を１つ選択する。ただし、このステップＳ６３で選択の対象とするディスク番号には、ステップＳ６１で故障が発生したと判定されているＨＤＤのディスク番号を含まない。
【０１３０】
［ステップＳ６４］リビルド制御部２２３は、エラー点数テーブル２５０に基づき、ステップＳ６３で選択したディスク番号が示すＨＤＤについての過去のエラー発生状況を判定する。具体的には、リビルド制御部２２３は、ステップＳ６３で選択したディスク番号に対応するエラー点数を、エラー点数テーブル２５０から読み込む。リビルド制御部２２３は、読み込んだエラー点数が所定のしきい値Ｔｈ以上である場合（Ｓ６４：Ｙｅｓ）には、ステップＳ７３の処理を実行する一方、エラー点数がしきい値Ｔｈ未満である場合（Ｓ６４：Ｎｏ）には、ステップＳ６５の処理を実行する。なお、しきい値Ｔｈは、１以上の任意の値に設定可能である。
【０１３１】
［ステップＳ６５］リビルド制御部２２３は、ステップＳ６１でＲＡＩＤ管理テーブル２４０から抽出したレコード２４１の「初期ディスク番号」に設定されたディスク番号をすべて選択済みか判定する。リビルド制御部２２３は、未選択のディスク番号がある場合（Ｓ６５：Ｎｏ）、ステップＳ６３の処理を実行する一方、すべてのディスク番号を選択済みである場合（Ｓ６５：Ｙｅｓ）、ステップＳ６６の処理を実行する。
【０１３２】
［ステップＳ６６］リビルド制御部２２３は、ステップＳ６１でＲＡＩＤ管理テーブル２４０から抽出したレコード２４１の「パトロールフラグ」を、「０」から「１」に更新する。
【０１３３】
［ステップＳ６７］リビルド制御部２２３は、ステップＳ６３で選択したディスク番号が示すＨＤＤのうちの１つにおいて、エラー監視部２２２からエラーが発生したことの通知を受けたかを判定する。このステップＳ６７でエラー発生の通知を受ける場合とは、図１４のステップＳ４４で、エラー監視部２２２がリビルド制御部２２３にエラー発生を通知する場合である。リビルド制御部２２３は、エラー発生の通知を受けた場合（Ｓ６７：Ｙｅｓ）、ステップＳ７２の処理を実行する一方、エラー発生の通知を受けなかった場合（Ｓ６７：Ｎｏ）、ステップＳ６８の処理を実行する。
【０１３４】
［ステップＳ６８］リビルド制御部２２３は、ステップＳ６２で時間のカウントを開始してから、所定の時間Ｔが経過したかを判定する。リビルド制御部２２３は、時間Ｔが経過していない場合（Ｓ６８：Ｎｏ）、ステップＳ６９の処理を実行する一方、時間Ｔが経過した場合（Ｓ６８：Ｙｅｓ）、ステップＳ７２の処理を実行する。
【０１３５】
［ステップＳ６９］リビルド制御部２２３は、故障が発生したＨＤＤが新たなＨＤＤに交換されたかを判定する。なお、アクセス制御部２２１は、ＨＤＤがＤＥ３００から取り外された後、取り外された位置にＨＤＤが取り付けられて、取り付けられたＨＤＤとの通信が可能になったことを検知すると、ＨＤＤが交換されたことを、交換されたＨＤＤのディスク番号とともにリビルド制御部２２３に通知する。リビルド制御部２２３は、ＨＤＤが交換されたことを検知しなかった場合（Ｓ６９：Ｎｏ）、ステップＳ６７の処理を実行する一方、ＨＤＤが交換されたことを検知した場合（Ｓ６９：Ｙｅｓ）、ステップＳ７０の処理を実行する。
【０１３６】
［ステップＳ７０］リビルド制御部２２３は、ステップＳ６１でＲＡＩＤ管理テーブル２４０から抽出したレコード２４１の「パトロールフラグ」を、「０」に戻す。
［ステップＳ７１］リビルド制御部２２３は、アクセス制御部２２１に、交換されたＨＤＤに対するリビルド処理を開始させる。この処理は、図１２のステップＳ２４で説明した通りである。また、リビルド制御部２２３は、交換されたＨＤＤに対するリビルド処理が終了すると、図１２のステップＳ２５で説明したように、リビルド処理が終了したＲＡＩＤグループのＲＡＩＤレベルをＲＡＩＤ−６に戻して、このＲＡＩＤグループの運用状態をＨＤＤの故障前の状態に復帰させる。
【０１３７】
［ステップＳ７２］リビルド制御部２２３は、ステップＳ６１でＲＡＩＤ管理テーブル２４０から抽出したレコード２４１の「パトロールフラグ」を、「０」に戻す。
［ステップＳ７３］リビルド制御部２２３は、アクセス制御部２２１に、ホットスペアのＨＤＤに対するリビルド処理を開始させる。この処理は、図８のステップＳ１３で説明した通りである。また、リビルド制御部２２３は、ホットスペアのＨＤＤに対するリビルド処理が終了すると、図８のステップＳ１４〜Ｓ１７で説明した処理を実行する。
【０１３８】
以上の図１５の処理では、リビルド制御部２２３は、ＲＡＩＤ−６で運用されていたＲＡＩＤグループに属するＨＤＤが故障したとき、同じＲＡＩＤグループに属する他のＨＤＤについての過去のエラー発生状況を判定する（Ｓ６４）。
【０１３９】
リビルド制御部２２３は、いずれかのＨＤＤについてのエラー点数がしきい値Ｔｈ以上である場合（Ｓ６４：Ｙｅｓ）、同じＲＡＩＤグループに属する、故障したＨＤＤ以外のＨＤＤにおいて今後に故障が発生する可能性が高いと推定する。この場合、リビルド制御部２３は、データの安全性を保つためにはできるだけ早くリビルド処理を実行するべきと判断して、ホットスペアのＨＤＤに対するリビルド処理を即座に実行させる（Ｓ７３）。これにより、正常運用時よりデータの冗長性が低いＲＡＩＤ−５で運用される期間の長さが最小限になり、さらなるＨＤＤの故障によって、データの冗長性を失う、あるいはデータの一部を失うといった事態の発生確率を低くすることができる。
【０１４０】
一方、リビルド制御部２２３は、すべてのＨＤＤについてエラー点数がしきい値Ｔｈ未満である場合（Ｓ６４：Ｎｏ）には、同じＲＡＩＤグループに属する、故障したＨＤＤ以外のＨＤＤにおいて今後に故障が発生する可能性が低いと推定する。この場合、リビルド制御部２２３は、ある程度の期間リビルド処理を実行しなくてもデータの安全性が保たれると判断し、故障したＨＤＤが新たなＨＤＤに交換されるまで、リビルド処理を実行しない。そして、故障したＨＤＤが新たなＨＤＤが交換されると（Ｓ６９：Ｙｅｓ）、リビルド制御部２２３は、交換されたＨＤＤに対するリビルド処理を実行させる（Ｓ７１）。この場合、コピーバック処理を実行する必要がなくなり、ＲＡＩＤグループ内のＨＤＤにおけるアクセス処理負荷や、ＣＭ２０１のＣＰＵ２１１の処理負荷が軽減される。
【０１４１】
このように、同じＲＡＩＤグループに属する、故障したＨＤＤ以外のＨＤＤにおいて今後に故障が発生する可能性が低いと推定される場合にのみ、交換されたＨＤＤに対するリビルド処理を行うようにすることで、データの安全性をある程度維持しながらも、ＨＤＤにおけるアクセス処理負荷や、ＣＭ２０１のＣＰＵ２１１の処理負荷を軽減することができる。
【０１４２】
すなわち、図１５の処理により、ホスト装置４００からのアクセス要求に対する応答速度を維持したいというユーザの要望に応えることを可能にしつつ、記録されたデータの安全性もある程度維持できるようになる。また、ユーザが、ＨＤＤの故障時に即座にリビルド処理を実行する運用方法と、ＨＤＤを交換した後にリビルド処理を実行する運用方法のどちらを望んでいるかに関係なく、これらの運用方法が自動的に選択される。このため、データの安全性をある程度維持しながらも、ユーザによる設定操作を不要にし、設定忘れや設定誤りを防止できる。
【０１４３】
また、ユーザによる故障したＨＤＤの交換作業は、何らかの理由で遅れてしまう場合がある。ＨＤＤの交換作業が遅れるなどの要因により、リビルド処理の実行開始までの期間が長くなるほど、同じＲＡＩＤグループに属する他のＨＤＤで故障が発生する確率が高くなる。このことから、リビルド制御部２２３は、故障したＨＤＤ以外のＨＤＤにおいて今後に故障が発生する可能性が低いと推定される場合（Ｓ６４：Ｎｏ）であっても、ＨＤＤの故障発生から所定の時間Ｔが経過するまでの期間に、故障したＨＤＤが交換されなかった場合には（Ｓ６８：Ｙｅｓ）、ホットスペアのＨＤＤに対するリビルド処理を実行させる（Ｓ７３）。これにより、データの冗長度が低下した、ＲＡＩＤ−５で運用される期間を時間Ｔ以下に抑えることができ、データの安全性が向上する。
【０１４４】
さらに、リビルド制御部２２３は、故障したＨＤＤ以外のＨＤＤにおいて今後に故障が発生する可能性が低いと推定された場合（Ｓ６４：Ｎｏ）であっても、ＨＤＤの故障発生から所定の時間Ｔが経過するまでの間に、故障したＨＤＤ以外のＨＤＤでエラーが発生した場合には（Ｓ６７：Ｙｅｓ）、故障したＨＤＤ以外のＨＤＤで故障が発生する可能性が高いと推定する。この場合、リビルド制御部２２３は、ホットスペアのＨＤＤに対するリビルド処理を実行させる（Ｓ７３）。これにより、データの安全性が著しく低下しないようにすることができる。
【０１４５】
また、リビルド制御部２２３は、同じＲＡＩＤグループに属する、故障したＨＤＤ以外のＨＤＤにおいて今後に故障が発生する可能性が低いと推定した場合（Ｓ６４：Ｎｏ）には、パトロールフラグを「１」に設定する（Ｓ６６）。そして、リビルド制御部２２３は、リビルド処理を開始させるまでの間、パトロールフラグを「１」のままにする。図１４に示したように、パトロールフラグが「１」の状態では、故障したＨＤＤ以外のＨＤＤに対するエラー検査の実行間隔が短くなり（Ｓ５０）、パトロールが強化される。エラー検査の実行間隔が短くなることで、新たなエラーの発生（Ｓ６７）を早いタイミングで検出できるようになる。パトロールフラグが「１」である期間は、データの冗長度が低下していることから、上記のように新たなエラーの発生を早いタイミングで検出できることで、さらなるデータの冗長度の低下やデータロストの発生を未然に防ぐことができる。
【０１４６】
なお、上記の第２の実施の形態では、正常運用状態では、データが３重に冗長化されたＲＡＩＤ−６で運用される場合について説明したが、正常運用状態で例えばＲＡＩＤ−１，４，５などを適用してデータが２重に冗長化されるようにしてもよい。この場合、ＲＡＩＤグループに属する１つのＨＤＤが故障してからリビルド処理が終了するまでの間、データの冗長性が失われた状態になるが、図１４，図１５の処理を実行することで、データロストが発生する確率を低くすることができる。
【０１４７】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）  複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御する制御装置とを備えたストレージシステムにおいて、
前記制御装置は、
前記複数の記憶装置のそれぞれにおけるエラーの発生を監視し、エラーの発生状況を示す情報を記憶装置ごとにエラー情報記憶部に登録するエラー監視部と、
前記複数の記憶装置のうち一の記憶装置の使用を中止したとき、前記エラー情報記憶部に登録された情報を参照し、前記複数の記憶装置のうち前記一の記憶装置以外の記憶装置における過去のエラーの発生状況に基づいて、前記一の記憶装置に記憶されていたデータを生成して他の記憶装置に格納するリビルド処理の実行タイミングを決定するリビルド制御部と、
を有することを特徴とするストレージシステム。
【０１４８】
（付記２）  前記エラー監視部は、エラーの発生に応じたエラー点数を記憶装置ごとに前記エラー情報記憶部に登録し、
前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外の少なくとも１つの記憶装置に対応するエラー点数が所定値以上である場合には、前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が所定値未満である場合より、前記リビルド処理を早いタイミングで実行する、
ことを特徴とする付記１記載のストレージシステム。
【０１４９】
（付記３）  前記ストレージシステムは、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置をさらに備え、
前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、
前記複数の記憶装置のうち前記一の記憶装置以外の少なくとも１つの記憶装置に対応するエラー点数が前記所定値以上である場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納し、
前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置が新たな記憶装置に交換されたことを検知した後、前記一の記憶装置に記憶されていたデータを生成して前記新たな記憶装置に格納する、
ことを特徴とする付記２記載のストレージシステム。
【０１５０】
（付記４）  前記リビルド制御部は、前記一の記憶装置に記憶されていたデータを前記予備用記憶装置に格納した後、前記一の記憶装置が新たな記憶装置に交換されたことを検知したとき、前記予備用記憶装置に格納されたデータを前記新たな記憶装置に書き戻すことを特徴とする付記３記載のストレージシステム。
【０１５１】
（付記５）  前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置の使用を中止してからの時間経過を監視し、一定時間が経過するまでに前記一の記憶装置が交換されなかった場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納することを特徴とする付記３または４記載のストレージシステム。
【０１５２】
（付記６）  前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記複数の記憶装置のうち前記一の記憶装置以外の記憶装置におけるエラーの発生を監視し、前記一の記憶装置が交換されたことを検知するまでの間にエラーが発生した場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納することを特徴とする付記３〜５のいずれか１つに記載のストレージシステム。
【０１５３】
（付記７）  前記エラー監視部は、前記複数の記憶装置のそれぞれにおいてエラーが発生したかを定期的に検査し、
前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置が交換されるまでの間、前記エラー監視部がエラーの発生を検査する間隔を前記一の記憶装置の使用を中止する前より短くする、
ことを特徴とする付記６記載のストレージシステム。
【０１５４】
（付記８）  複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置において、
前記複数の記憶装置のそれぞれにおけるエラーの発生を監視し、エラーの発生状況を示す情報を記憶装置ごとにエラー情報記憶部に登録するエラー監視部と、
前記複数の記憶装置のうち一の記憶装置の使用を中止したとき、前記エラー情報記憶部に登録された情報を参照し、前記複数の記憶装置のうち前記一の記憶装置以外の記憶装置における過去のエラーの発生状況に基づいて、前記一の記憶装置に記憶されていたデータを生成して他の記憶装置に格納するリビルド処理の実行タイミングを決定するリビルド制御部と、
を有することを特徴とするストレージ制御装置。
【０１５５】
（付記９）  前記エラー監視部は、エラーの発生に応じたエラー点数を記憶装置ごとに前記エラー情報記憶部に登録し、
前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外の少なくとも１つの記憶装置に対応するエラー点数が所定値以上である場合には、前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が所定値未満である場合より、前記リビルド処理を早いタイミングで実行する、
ことを特徴とする付記８記載のストレージ制御装置。
【０１５６】
（付記１０）  前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、
前記複数の記憶装置のうち前記一の記憶装置以外の少なくとも１つの記憶装置に対応するエラー点数が前記所定値以上である場合には、前記一の記憶装置に記憶されていたデータを生成して、生成したデータをあらかじめ用意された予備用記憶装置に格納し、
前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置が新たな記憶装置に交換されたことを検知した後、前記一の記憶装置に記憶されていたデータを生成して前記新たな記憶装置に格納する、
ことを特徴とする付記９記載のストレージ制御装置。
【０１５７】
（付記１１）  前記リビルド制御部は、前記一の記憶装置に記憶されていたデータを前記予備用記憶装置に格納した後、前記一の記憶装置が新たな記憶装置に交換されたことを検知したとき、前記予備用記憶装置に格納されたデータを前記新たな記憶装置に書き戻すことを特徴とする付記１０記載のストレージ制御装置。
【０１５８】
（付記１２）  前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置の使用を中止してからの時間経過を監視し、一定時間が経過するまでに前記一の記憶装置が交換されなかった場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納することを特徴とする付記１０または１１記載のストレージ制御装置。
【０１５９】
（付記１３）  前記リビルド制御部は、前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記複数の記憶装置のうち前記一の記憶装置以外の記憶装置におけるエラーの発生を監視し、前記一の記憶装置が交換されたことを検知するまでの間にエラーが発生した場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納することを特徴とする付記１０〜１２のいずれか１つに記載のストレージ制御装置。
【０１６０】
（付記１４）  複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御する制御装置とを備えたストレージシステムにおけるストレージ制御方法であって、
前記制御装置が、
前記複数の記憶装置のそれぞれにおけるエラーの発生を監視して、エラーの発生状況を示す情報を記憶装置ごとにエラー情報記憶部に登録し、
前記複数の記憶装置のうち一の記憶装置の使用を中止したとき、前記エラー情報記憶部に登録された情報を参照し、前記複数の記憶装置のうち前記一の記憶装置以外の記憶装置における過去のエラーの発生状況に基づいて、前記一の記憶装置に記憶されていたデータを生成して他の記憶装置に格納するリビルド処理の実行タイミングを決定する、
ことを特徴とするストレージ制御方法。
【０１６１】
（付記１５）  前記エラーの発生状況を示す情報として、エラーの発生に応じたエラー点数を記憶装置ごとに前記エラー情報記憶部に登録し、
前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外の少なくとも１つの記憶装置に対応するエラー点数が所定値以上である場合には、前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が所定値未満である場合より、前記リビルド処理を早いタイミングで実行する、
ことを特徴とする付記１４記載のストレージ制御方法。
【０１６２】
（付記１６）  前記一の記憶装置の使用を中止したとき、
前記複数の記憶装置のうち前記一の記憶装置以外の少なくとも１つの記憶装置に対応するエラー点数が前記所定値以上である場合には、前記一の記憶装置に記憶されていたデータを生成して、生成したデータをあらかじめ用意された予備用記憶装置に格納し、
前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置が新たな記憶装置に交換されたことを検知した後、前記一の記憶装置に記憶されていたデータを生成して前記新たな記憶装置に格納する、
ことを特徴とする付記１５記載のストレージ制御方法。
【０１６３】
（付記１７）  前記一の記憶装置に記憶されていたデータを前記予備用記憶装置に格納した場合、その後、前記一の記憶装置が新たな記憶装置に交換されたことを検知したとき、前記予備用記憶装置に格納されたデータを前記新たな記憶装置に書き戻すことを特徴とする付記１６記載のストレージ制御方法。
【０１６４】
（付記１８）  前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置の使用を中止してからの時間経過を監視し、一定時間が経過するまでに前記一の記憶装置が交換されなかった場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納することを特徴とする付記１６または１７記載のストレージ制御方法。
【０１６５】
（付記１９）  前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記複数の記憶装置のうち前記一の記憶装置以外の記憶装置におけるエラーの発生を監視し、前記一の記憶装置が交換されたことを検知するまでの間にエラーが発生した場合には、前記一の記憶装置に記憶されていたデータを生成して前記予備用記憶装置に格納することを特徴とする付記１６〜１８のいずれか１つに記載のストレージ制御方法。
【０１６６】
（付記２０）  前記複数の記憶装置のそれぞれにおけるエラーの発生を監視する処理では、前記複数の記憶装置のそれぞれにおいてエラーが発生したかを定期的に検査し、
前記一の記憶装置の使用を中止したとき、前記複数の記憶装置のうち前記一の記憶装置以外のすべての記憶装置に対応するエラー点数が前記所定値未満である場合には、前記一の記憶装置が交換されるまでの間、前記エラー監視部がエラーの発生を検査する間隔を前記一の記憶装置の使用を中止する前より短くする、
ことを特徴とする付記１９記載のストレージ制御方法。
【符号の説明】
【０１６７】
１  ストレージシステム
１１〜１５，１４ａ  記憶装置
２０  制御装置
２１  エラー監視部
２２  エラー情報記憶部
２３  リビルド制御部
【図１】
0005887757.tif 000002
【図２】
0005887757.tif 000003
【図３】
0005887757.tif 000004
【図４】
0005887757.tif 000005
【図５】
0005887757.tif 000006
【図６】
0005887757.tif 000007
【図７】
0005887757.tif 000008
【図８】
0005887757.tif 000009
【図９】
0005887757.tif 000010
【図１０】
0005887757.tif 000011
【図１１】
0005887757.tif 000012
【図１２】
0005887757.tif 000013
【図１３】
0005887757.tif 000014
【図１４】
0005887757.tif 000015
【図１５】
0005887757.tif 000016