(57)【要約】【課題】ＲＡＩＤアレイにおけるメディアエラーを早期に検出できるようにする。【解決手段】実施形態によれば、ＲＡＩＤストレージシステムは、少なくとも１つのＲＡＩＤアレイを含むＲＡＩＤストレージ装置と、前記少なくとも１つのＲＡＩＤアレイへのアクセスを制御するストレージコントローラとを具備する。前記少なくとも１つのＲＡＩＤアレイは複数のストライプグループを有する。前記ストレージコントローラは、入出力コントローラとパトロールコントローラとを具備する。前記入出力コントローラはホスト装置からのアクセス要求に応じて、前記少なくとも１つのＲＡＩＤアレイ内の要求されたストライプグループへのライトアクセスまたはリードアクセスを実行する。前記パトロールコントローラは、前記複数のストライプグループのうちのライトアクセスされたストライプグループを、他のストライプグループよりも優先的にパトロールする。【選択図】      図１
2018022222.tif 000002
【特許請求の範囲】
【請求項１】
各々が冗長ブロックを含む複数のブロックの集合から構成される複数のストライプグループを有する少なくとも１つのＲＡＩＤアレイを含むＲＡＩＤストレージ装置と、
前記少なくとも１つのＲＡＩＤアレイへのアクセスを制御するストレージコントローラと
を具備し、
前記ストレージコントローラは、
前記ＲＡＩＤストレージ装置を利用するホスト装置からのアクセス要求に応じて、前記少なくとも１つのＲＡＩＤアレイ内の要求されたストライプグループへのライトアクセスまたはリードアクセスを実行する入出力コントローラと、
前記複数のストライプグループのうちのライトアクセスされたストライプグループを、他のストライプグループよりも優先的に、リード動作を用いてパトロールし、前記優先的にパトロールされたストライプグループの前記パトロールに関する優先順位としてのパトロール優先順位を、前記優先的にパトロールされたストライプグループの前記パトロールの完了に応じて下げるパトロールコントローラと
を具備するＲＡＩＤストレージシステム。
【請求項２】
前記パトロールコントローラは、
第１のストライプグループへのライトアクセスに応じて、前記第１のストライプグループに、前記パトロール優先順位として最も高いパトロール優先順位を付与し、
前記第１のストライプグループに前記最も高いパトロール優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了に応じて最も低いパトロール優先順位に変更する
請求項１記載のＲＡＩＤストレージシステム。
【請求項３】
前記最も高いパトロール優先順位及び前記最も低いパトロール優先順位は、それぞれ第１の優先順位及び第３の優先順位であり、
前記パトロールコントローラは、
前記第１のストライプグループへのリードアクセスに応じて、前記第１のストライプグループに、前記パトロール優先順位として、前記第１の優先順位より低く前記第３の優先順位よりも高い第２の優先順位を付与し、
前記第１のストライプグループに前記第２の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了に応じて前記第３の優先順位に変更し、
前記第１の優先順位が付与されたストライプグループが存在しない場合に、前記第２の優先順位が付与されたストライプグループをパトロールし、
前記第１の優先順位が付与されたストライプグループ及び前記第２の優先順位が付与されたストライプグループがいずれも存在しない場合に、前記第３の優先順位が付与されたストライプグループをパトロールする
請求項２記載のＲＡＩＤストレージシステム。
【請求項４】
前記パトロールコントローラは、前記第１のストライプグループに前記第３の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了後も前記第３の優先順位に維持する請求項３記載のＲＡＩＤストレージシステム。
【請求項５】
前記パトロールコントローラは、前記第１の優先順位が付与された１つ以上の第２のストライプグループのパトロールの間に、１つ以上の第３のストライプグループに前記第１の優先順位が付与された場合、前記第２のストライプグループをパトロールした後で且つ前記第２の優先順位が付与された１つ以上の第４のストライプグループをパトロールする前に、前記第３のストライプグループをパトロールする請求項３及び請求項４のいずれか一項に記載のＲＡＩＤストレージシステム。
【請求項６】
前記パトロールコントローラは、
前記複数のストライプグループそれぞれに付与される前記パトロール優先順位、及び前記複数のストライプグループそれぞれのパトロールに関するステータスとしてのパトロールステータスを、管理情報を用いて管理し、
前記複数のストライプグループそれぞれへのライトアクセスに応じて前記管理情報を更新することにより、前記複数のストライプグループそれぞれの前記パトロールステータスとして、パトロール未実施を示す第１のステータスであって、前記複数のストライプグループそれぞれに前記第１の優先順位が付与されている場合には前記複数のストライプグループそれぞれがパトロールの待ち状態にあることを更に示す第１のステータスを設定し、
前記第２のストライプグループの前記パトロールを開始する前に前記管理情報を更新することにより、前記第２のストライプグループの前記パトロールステータスを、前記第１のステータスから、パトロール未実施で且つ前記パトロールの待ち状態が解除されていることを示す第２のステータスに変更し、
前記第２及び第３のストライプグループに前記第１の優先順位が付与された時期の違いを、前記第２及び第３のストライプグループの前記パトロールステータスが前記第１及び第２のステータスのいずれであるかに基づいて識別し、
前記第２のステータスに変更された前記第２のストライプグループを前記第３のストライプグループよりも優先的にパトロールする
請求項５記載のＲＡＩＤストレージシステム。
【請求項７】
前記パトロールコントローラは、
前記複数のストライプグループそれぞれの前記パトロールの完了に応じて前記管理情報を更新することにより、前記複数のストライプグループそれぞれの前記パトロールステータスを、前記第１または第２のステータスからパトロール完了を示す第３のステータスに変更し、
前記第４のストライプグループをパトロールした後で且つ前記第３の優先順位が付与された１つ以上の第５のストライプグループをパトロールする前に前記管理情報を更新することにより、前記第５のストライプグループの前記パトロールステータスとして前記第１のステータスを設定する
請求項６記載のＲＡＩＤストレージシステム。
【請求項８】
前記ストレージコントローラは、メモリを更に具備し、
前記管理情報は、前記メモリに格納される
請求項６及び請求項７のいずれか一項に記載のＲＡＩＤストレージシステム。
【請求項９】
前記パトロールコントローラは、
前記複数のストライプグループそれぞれがいずれもアクセスされていない初期状態において、前記複数のストライプグループそれぞれに前記パトロール優先順位を付与する代わりに、前記複数のストライプグループそれぞれを、パトロール対象外であることを示す優先順位無し状態に設定し、
１つ以上の第６のストライプグループが前記優先順位無し状態に設定されている場合、前記第６のストライプグループのパトロールを抑止する
請求項１乃至請求項８のいずれか一項に記載のＲＡＩＤストレージシステム。
【請求項１０】
前記ストレージコントローラは、前記パトロールコントローラによるパトロール動作の実行に応じて、前記パトロールコントローラによる次のパトロール動作を待たせるための待ち時間を調整するウエイトコントローラを更に具備し、
前記入出力コントローラは、前記待ち時間において前記ホスト装置からのアクセス要求に基づくアクセスを実行し、
前記ウエイトコントローラは、前記ホスト装置からのアクセス要求に基づく前記入出力コントローラの動作の頻度に応じて前記待ち時間を増加または減少する
請求項１乃至請求項９のいずれか一項に記載の記載のＲＡＩＤストレージシステム。
【請求項１１】
前記少なくとも１つのＰＡＩＤアレイは、複数のＲＡＩＤアレイであり、
前記複数のＲＡＩＤアレイのそれぞれは、パトロールに関する前記複数のＲＡＩＤアレイ間の優先順位としてＲＡＩＤアレイ優先順位を有し、
前記パトロールコントローラは、前記ライトアクセスされたストライプグループをパトロールする場合、前記複数のＲＡＩＤアレイそれぞれの前記ＲＡＩＤアレイ優先順位に従い、前記複数のＲＡＩＤアレイのうちのより高いＲＡＩＤアレイ優先順位を有するＲＡＩＤアレイに含まれているストライプグループほど、優先的にパトロールする
請求項１乃至請求項１０のいずれか一項に記載の記載のＲＡＩＤストレージシステム。
【請求項１２】
前記パトロールコントローラは、
少なくとも前記ライトアクセスされたストライプグループのパトロールでエラーが検出されたストライプグループの数を、前記複数のＲＡＩＤアレイ別に集計し、
前記複数のＲＡＩＤアレイ別に集計されたエラー数の降順に基づいて前記複数のＲＡＩＤアレイそれぞれの前記ＲＡＩＤアレイ優先順位を再設定する
請求項１１記載のＲＡＩＤストレージシステム。
【請求項１３】
ＲＡＩＤストレージ装置に含まれている少なくとも１つのＲＡＩＤアレイであって、各々が冗長ブロックを含む複数のブロックの集合から構成される複数のストライプグループを有する少なくとも１つのＲＡＩＤアレイへのアクセスを制御するストレージコントローラにおいて、
前記ＲＡＩＤストレージ装置を利用するホスト装置からのアクセス要求に応じて、前記少なくとも１つのＲＡＩＤアレイ内の要求されたストライプグループへのライトアクセスまたはリードアクセスを実行する入出力コントローラと、
前記複数のストライプグループのうちのライトアクセスされたストライプグループを、他のストライプグループよりも優先的に、リード動作を用いてパトロールし、前記優先的にパトロールされたストライプグループの前記パトロールに関する優先順位としてのパトロール優先順位を、前記優先的にパトロールされたストライプグループの前記パトロールの完了に応じて下げるパトロールコントローラと
を具備するストレージコントローラ。
【請求項１４】
ＲＡＩＤストレージ装置に含まれている少なくとも１つのＲＡＩＤアレイであって、各々が冗長ブロックを含む複数のブロックの集合から構成される複数のストライプグループを有する少なくとも１つのＲＡＩＤアレイへのアクセスを制御するストレージコントローラにおいて、前記少なくとも１つのＲＡＩＤアレイをパトロールするＲＡＩＤアレイパトロール方法であって、
前記ＲＡＩＤストレージ装置を利用するホスト装置からのアクセス要求に応じて、前記少なくとも１つのＲＡＩＤアレイ内の要求されたストライプグループへのライトアクセスまたはリードアクセスを実行し、
前記複数のストライプグループのうちのライトアクセスされたストライプグループを、他のストライプグループよりも優先的に、リード動作を用いてパトロールし、
前記優先的にパトロールされたストライプグループの前記パトロールに関する優先順位としてのパトロール優先順位を、前記優先的にパトロールされたストライプグループの前記パトロールの完了に応じて下げる
ＲＡＩＤアレイパトロール方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ＲＡＩＤストレージシステム、ストレージコントローラ及びＲＡＩＤアレイパトロール方法に関する。
【背景技術】
【０００２】
従来から、ＲＡＩＤストレージシステムが知られている。ＲＡＩＤストレージシステムは、ＲＡＩＤストレージ装置と、ストレージコントローラとを備えている。ＲＡＩＤストレージ装置は、Redundant Arrays of Independent Disks（ＲＡＩＤ）と呼ばれる構成（ＲＡＩＤ構成）を有する少なくとも１つのＲＡＩＤアレイを備えている。ＲＡＩＤアレイは、一般に、複数のハードディスクドライブ（ＨＤＤ）を用いて構成される。
【０００３】
ストレージコントローラは、ＲＡＩＤアレイへのアクセスを制御する。ストレージコントローラは更に、ＲＡＩＤアレイ内の複数のＨＤＤの１つで障害が発生した場合、残りのＨＤＤ内のデータに基づいて、障害発生ＨＤＤ内のデータを復元するための動作（いわゆる、リビルド）を行う。
【０００４】
しかし、残りのＨＤＤのいずれかにおいて、メディアエラーのようなエラーのために正常にデータをリードできない場合、ストレージコントローラは、リビルドを行うことができない。つまりストレージコントローラは、ＲＡＩＤアレイにおけるＲＡＩＤ構成を復旧できない。このような場合、ＲＡＩＤアレイは、少なくとも２つのＨＤＤが障害を有する多重障害に至る。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００３−３０３０５７号公報
【特許文献２】特開２０１１−１６４８６８号公報
【特許文献３】国際公開第２００９／００１４１３号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述の多重障害を避けるため、ストレージコントローラは、ＲＡＩＤアレイを構成する全ＨＤＤの全記憶領域を、リード動作を用いてパトロールする。このパトロールにより、ストレージコントローラは、例えばメディアエラーを事前に検出する。しかし近年は、ＲＡＩＤアレイ内のＨＤＤの容量が増加してきているため、ＨＤＤ（ＲＡＩＤアレイ）をパトロールするのに要する時間も大幅に増加する傾向にある。
【０００７】
一方で、ＨＤＤの大容量化に伴い、ウイーク・ライト（Weak-Write）と呼ばれる現象が起きやすくなってきている。ウイーク・ライトとは、ＨＤＤのメディア（ディスク）にヘッドを用いてデータをライトする場合に、何らかの要因によって当該ヘッドの浮上高が高くなるために、当該メディア上の該当箇所の磁化が不十分となる現象を指す。ウイーク・ライトは更に、上述のようにライト時の磁化が不十分なために、次に該当箇所からデータをリードするためのリード動作で正常にリードできない現象をも指す。ウイーク・ライトの要因の１つとして、メディア上の微細なパーティクルが挙げられる。つまり、パーティクルがヘッドとメディアとの間に入り込んでヘッドの浮上高が高くなるために、ウイーク・ライトが発生する。
【０００８】
ウイーク・ライトに起因するメディアエラーは、上述のパトロールで検出且つ修復可能である。しかし、ＨＤＤの大容量化に伴ってパトロール時間が大幅に増加すると、メディアエラーが検出されるまでの時間も延びてしまう。すると、メディアエラーが検出されるまでの時間の間に、例えば他のＨＤＤでメディアエラーが発生して、ＲＡＩＤアレイが多重障害に至ってしまう可能性が高くなる。
【０００９】
本発明が解決しようとする課題は、ＲＡＩＤアレイにおけるメディアエラーを早期に検出できる、ＲＡＩＤストレージシステム、ストレージコントローラ及びＲＡＩＤアレイパトロール方法を提供することにある。
【課題を解決するための手段】
【００１０】
実施形態によれば、ＲＡＩＤストレージシステムは、少なくとも１つのＲＡＩＤアレイを含むＲＡＩＤストレージ装置と、前記少なくとも１つのＲＡＩＤアレイへのアクセスを制御するストレージコントローラとを具備する。前記少なくとも１つのＲＡＩＤアレイは複数のストライプグループを有し、前記複数のストライプグループの各々は冗長ブロックを含む複数のブロックの集合から構成される。前記ストレージコントローラは、入出力コントローラとパトロールコントローラとを具備する。前記入出力コントローラは、前記ＲＡＩＤストレージ装置を利用するホスト装置からのアクセス要求に応じて、前記少なくとも１つのＲＡＩＤアレイ内の要求されたストライプグループへのライトアクセスまたはリードアクセスを実行する。前記パトロールコントローラは、前記複数のストライプグループのうちのライトアクセスされたストライプグループを、他のストライプグループよりも優先的に、リード動作を用いてパトロールする。前記パトロールコントローラは、前記優先的にパトロールされたストライプグループの前記パトロールに関する優先順位としてのパトロール優先順位を、前記優先的にパトロールされたストライプグループの前記パトロールの完了に応じて下げる。
【図面の簡単な説明】
【００１１】
【図１】１つの実施形態に係るＲＡＩＤストレージシステムを含むコンピュータシステムの典型的なハードウェア構成を示すブロック図。
【図２】図１に示されるＲＡＩＤストレージ装置の典型的なＲＡＩＤ構成を示す図。
【図３】図１に示されるストレージコントローラの典型的な機能構成を主として示すブロック図。
【図４】図３に示される管理テーブルのデータ構造例を示す図。
【図５】同実施形態で適用されるパトロール処理の典型的な手順を示すフローチャート。
【図６】図５に示されるパトロール処理に含まれている第１のパトロール処理の典型的な手順を示すフローチャート。
【図７】図５に示されるパトロール処理に含まれている第２のパトロール処理の典型的な手順を示すフローチャート。
【図８】図５に示されるパトロール処理に含まれている第３のパトロール処理の典型的な手順を示すフローチャート。
【図９】第１乃至第３のパトロール処理のそれぞれに含まれている待ち時間再設定処理の典型的な手順を示すフローチャート。
【図１０】同実施形態で適用される割り込み処理の典型的な手順を示すフローチャート。
【図１１】同実施形態の第１及び第２の変形例で適用されるＲＡＩＤストレージ装置のＲＡＩＤ構成を示す図。
【図１２】第１の変形例で適用される管理テーブルのデータ構造例を示す図。
【図１３】第２の変形例で適用される管理テーブルのデータ構造例を示す図。
【発明を実施するための形態】
【００１２】
以下、実施の形態につき図面を参照して説明する。  
図１は１つの実施形態に係るＲＡＩＤストレージシステムを含むコンピュータシステムの典型的なハードウェア構成を示すブロック図である。図１に示されるコンピュータシステムは、ＲＡＩＤストレージシステム１０及びホストコンピュータ（以下、ホストと称する）２０から構成される。つまりコンピュータシステムは、単一のホストを備えている。しかし、コンピュータシステムが、複数のホストを備えていても良い。
【００１３】
ホスト２０は、サーバ、或いはクライアントパーソナルコンピュータのような物理計算機であり、ＲＡＩＤストレージシステム１０（より詳細には、ＲＡＩＤストレージシステム１０のＲＡＩＤストレージ装置１１）を自身の外部ストレージ装置として利用する。ホスト２０は、例えば、ホストインタフェースバス３０を介してＲＡＩＤストレージシステム１０（より詳細には、ＲＡＩＤストレージシステム１０のストレージコントローラ１２）と接続されている。本実施形態においてホストインタフェースバス３０は、ファイバチャネル（ＦＣ）である。しかしホストインタフェースバス３０が、スモールコンピュータシステムインタフェース（ＳＣＳＩ）、シリアルアタッチドＳＣＳＩ（ＳＡＳ）、インターネットＳＣＳＩ（ｉＳＣＳＩ）、イーサネット（登録商標）、或いはシリアルＡＴアタッチメント（ＳＡＴＡ）のような、ＦＣ以外のインタフェースバスであっても構わない。またホスト２０が、ストレージエリアネットワーク（ＳＡＮ）、インターネット或いはイントラネットのようなネットワークを介してＲＡＩＤストレージシステム１０と接続されていても良い。
【００１４】
ＲＡＩＤストレージシステム１０は、ＲＡＩＤストレージ装置１１とストレージコントローラ１２とを備えている。ＲＡＩＤストレージ装置１１は、ストレージインタフェースバス１３を介してストレージコントローラ１２と接続されている。本実施形態においてストレージインタフェースバス１３はファイバチャネル（ＦＣ）である。しかしストレージインタフェースバス１３が、ホストインタフェースバス３０と同様に、ＦＣ以外のインタフェースバスであっても構わない。
【００１５】
ＲＡＩＤストレージ装置１１は、例えば、ＲＡＩＤ構成を有するＲＡＩＤアレイ１１１を含む。ＲＡＩＤアレイ１１１は、ＲＡＩＤグループとも呼ばれ、複数のハードディスクドライブ（ＨＤＤ）、例えば４つのＨＤＤ１１１＿１乃至１１１＿４の集合を用いて構成される。
【００１６】
ストレージコントローラ１２は、ホスト２０から与えられる、論理アドレスを用いたアクセス（リードアクセスまたはライトアクセス）の要求（入出力要求）を受領して、要求されたアクセス（入出力）を実行する。このアクセスの実行に際し、ストレージコントローラ１３は、周知のアドレス変換テーブルを用いて、論理アドレスを物理アドレスに変換する。論理アドレスは、仮想化された記憶領域を含む論理ユニット内のアドレスを指す。仮想化された記憶領域には、ＲＡＩＤストレージ装置１１内の記憶領域（物理記憶領域）が割り当てられる。物理アドレスは、ＲＡＩＤストレージ装置１１に含まれていて且つ論理アドレスに対応付けられている記憶領域の物理位置を示す。ストレージコントローラ１３は、物理アドレスに基づいて、ＲＡＩＤストレージ装置１１（より詳細には、ＲＡＩＤストレージ装置１１のＲＡＩＤアレイ１１１内のストライプグループ）にアクセスする。
【００１７】
ストレージコントローラ１２は、ホストインタフェースコントローラ（以下、ＨＩＦコントローラと称する）１２１と、ストレージインタフェースコントローラ（以下、ＳＩＦコントローラと称する）１２２と、メモリ１２３と、ローカルＨＤＤ１２４と、ＣＰＵ１２５とを備えている。ＨＩＦコントローラ１２１は、当該ＨＩＦコントローラ１２１とホスト２０との間のデータ転送（データ転送プロトコル）を制御する。ＨＩＦコントローラ１２１は、ホストからのアクセス要求を受領し、当該アクセス要求に対する応答を返信する。アクセ要求は、データリード、或いはデータライトを指定する。ＨＩＦコントローラ１２１は、ホスト２０からアクセス要求を受領すると、当該アクセス要求を、ＣＰＵ１２５に伝達する。アクセス要求を受け取ったＣＰＵ１２５は、当該アクセス要求を処理する。
【００１８】
ＳＩＦコントローラ１２２は、ＣＰＵ１２５が受領したホスト２０からのアクセス要求に対応するアクセスコマンド（より詳細には、ＲＡＩＤストレージ装置１１に対するリードコマンドまたはライトコマンド）を、ＣＰＵ１２５から受領する。ＳＩＦコントローラ１２２は、受領されたアクセスコマンドに応じて、ＲＡＩＤストレージ装置１１へのアクセスを実行する。
【００１９】
メモリ１２３は、ＤＲＡＭのような、書き換えが可能な揮発性メモリである。メモリ１２３の記憶領域の一部は、ローカルＨＤＤ１２４からロードされる制御プログラムの少なくとも一部を格納するのに用いられる。メモリ１２３の記憶領域の他の一部は、ローカルＨＤＤ１３４からロードされる管理テーブル１２９（図４）を格納するのに用いられる。メモリ１２３の記憶領域の更に他の一部は、ＣＰＵ１２５のためのワーク領域として用いられる。
【００２０】
ローカルＨＤＤ１２４には、制御プログラムが格納されている。ＣＰＵ１２５は、ストレージコントローラ１２が起動されたときにイニシャルプログラムローダ（ＩＰＬ）を実行することにより、ローカルＨＤＤ１２４に格納されている制御プログラムの少なくとも一部をメモリ１２３にロードする。ＩＰＬは、ＲＯＭまたはフラッシュＲＯＭのような不揮発性メモリに格納されている。
【００２１】
ＣＰＵ１２５は、例えば、マイクロプロセッサのようなプロセッサである。ＣＰＵ１２５は、メモリ１２３にロードされた制御プログラムに従い、パトロールコントローラ１２６、ウエイト（WAIT）コントローラ１２７、及び入出力コントローラ１２８（図３）として機能する。つまりＣＰＵ１２５は、メモリ１２３に格納されている制御プログラムを実行することで、ＲＡＩＤストレージシステム１０全体を制御する。なお、パトロールコントローラ１２６、ウエイトコントローラ１２７及び入出力コントローラ１２８の少なくとも１つがハードウェアによって実現されても構わない。
【００２２】
本実施形態においてストレージコントローラ１２は、図１に示されているようにホスト２０から独立して備えられている。しかし、ストレージコントローラ１２が、ホスト２０に内蔵されていても構わない。この場合、ストレージコントローラ１２（より詳細には、ストレージコントローラ１２の機能）が、ホスト２０の有するオペレーティングシステム（ＯＳ）の機能の一部を用いて実現されていても構わない。
【００２３】
また、ストレージコントローラ１２が、ホスト２０のカードスロットに装着して用いられるカードに備えられていても構わない。また、ストレージコントローラ１２の一部がホスト２０に内蔵され、当該ストレージコントローラ１２の残りがカードに備えられていても構わない。また、ホスト２０と、ストレージコントローラ１２と、ＲＡＩＤストレージ装置１１の一部または全部とが、１つの筐体に収められていても構わない。
【００２４】
図２は、ＲＡＩＤストレージ装置１１（より詳細には、ＲＡＩＤストレージ装置１１のＲＡＩＤアレイ１１１）の典型的なＲＡＩＤ構成を示す。前述したように、ＲＡＩＤストレージ装置１１のＲＡＩＤアレイ１１１は、ＨＤＤ１１１＿１乃至１１１＿４を備えている。ＨＤＤ１１１＿１乃至１１１＿４のそれぞれの記憶領域は、管理のために、ブロックＢと呼ばれる小領域に分割される。ブロックＢはストライプとも呼ばれる。本実施形態では、ＨＤＤ１１１＿１乃至１１１＿４の記憶領域のサイズ（つまり、容量）は同一であり、ＨＤＤ１１１＿１乃至１１１＿４それぞれのブロックＢのサイズも同一であるものとする。ＨＤＤ１１１＿ｉ（ｉ＝１，２，３，４）のブロックＢは、当該ブロックＢを識別するための識別子としてのブロック番号を有する。
【００２５】
ＲＡＩＤアレイ１１１は、例えば、ストライプグループＳＧ１乃至ＳＧｎを備えている。ストライプグループＳＧｊ（ｊ＝１，２，…，ｎ）は、ＨＤＤ１１１＿１乃至１１１＿４内のブロック番号ｊを有するブロックＢの集合から構成される。つまり、ストライプグループＳＧｊは、ＨＤＤ１１１＿１乃至１１１＿４にまたがっている。本実施形態において、ブロックＢのブロック番号は論理的な識別子（論理ブロックアドレス）であり、当該ブロックＢのＨＤＤ１１１＿ｉにおける物理位置を示すものではないものとする。
【００２６】
ＲＡＩＤアレイ１１１は、例えばＲＡＩＤ５（ＲＡＩＤレベル５）を適用するものとする。この場合、ストライプグループＳＧｊ内の１つのブロックが、冗長データ（例えばパリティデータ）を格納するための冗長ブロック（パリティブロック）として用いられ、残りの３つのブロックがデータを格納するためのデータブロックとして用いられる。ＲＡＩＤ５では、冗長ブロックは、ストライプグループ単位にＨＤＤ１１１＿１乃至１１１＿４に規則的に分散される。なお、ＲＡＩＤアレイ１１１内の各ストライプグループＳＧｊが少なくとも１つの冗長ブロックを含むならば、ＲＡＩＤアレイ１１１が、例えば、ＲＡＩＤ１、ＲＡＩＤ４及びＲＡＩＤ６のような、ＲＡＩＤ５以外のＲＡＩＤ構成を有していても構わない。
【００２７】
図３は、図１に示されるストレージコントローラ１２の典型的な機能構成を主として示すブロック図である。ストレージコントローラ１２は、パトロールコントローラ１２６、ウエイトコントローラ１２７及び入出力コントローラ１２８を含む。
【００２８】
パトロールコントローラ１２６は、ＲＡＩＤアレイ１１１のストライプグループＳＧ１乃至ＳＧｎ内のブロックＢの障害を早期に検出するために、当該ＲＡＩＤアレイ１１１をストライプグループ単位にパトロールする。本実施形態では、ストライプグループＳＧ１乃至ＳＧｎには、後述のパトロール優先順位が付与される。パトロールコントローラ１２６は、パトロール優先順位に従って、ストライプグループＳＧ１乃至ＳＧｎをパトロールする。
【００２９】
ウエイトコントローラ１２７は、待ち時間Ｔｗを、例えば割り込み処理の状況に応じて調整する。割り込み処理は、例えば、ホスト２０からのアクセス要求に従うアクセス動作を含み、且つ待ち時間Ｔｗの期間に実行される。待ち時間Ｔｗとは、割り込み処理（アクセス動作）が、パトロールに関する処理によって遅延されないように、当該パトロールに関する処理を例えば１ストライプグループを単位に待たせるための時間を指す。パトロールコントローラ１２６が、パトロールに関する処理を時間Ｔｗだけ待つ動作をウエイト（WAIT）動作と称する。
【００３０】
ウエイトコントローラ１２７は、割り込み処理の状況を、２つの割り込みフラグＦ［Ｌ］及びＦ［Ｔ］を用いて管理する。割り込みフラグＦ［Ｌ］及びＦ［Ｔ］は、例えば、メモリ１２３のワーク領域に格納される。割り込みフラグＦ［Ｌ］は第１の状態Ｆ１及び第２の状態Ｆ２のいずれかに設定される。割り込みフラグＦ［Ｌ］の初期状態はＦ１である。割り込みフラグＦ［Ｌ］は、前回のウエイト動作の期間に、少なくとも１回の割り込み処理（アクセス動作）が発生したか（Ｆ［Ｌ］＝Ｆ２）否か（Ｆ［Ｌ］＝Ｆ１）を示す。割り込みフラグＦ［Ｔ］も、第１の状態Ｆ１及び第２の状態Ｆ２のいずれかに設定される。割り込みフラグＦ［Ｔ］の初期状態はＦ１である。割り込みフラグＦ［Ｔ］は、今回のウエイト動作の期間に、少なくとも１回の割り込み処理が発生したか（Ｆ［Ｔ］＝Ｆ２）否か（Ｆ［Ｔ］＝Ｆ１）を示す。
【００３１】
入出力コントローラ１２８は、例えば、ホスト２０からのアクセス要求に基づく割り込みを受けて、割り込み処理を実行する。割り込み処理は、要求されたアクセス（入出力）の実行を含む。
【００３２】
図４は、図３に示される管理テーブル１２９のデータ構造例を示す。管理テーブル１２９は、例えば、ＲＡＩＤストレージ装置１１（ＲＡＩＤアレイ１１１）内の全てのストライプグループＳＧ１乃至ＳＧｎに対応付けられたエントリの群を有している。管理テーブル１２９のエントリのそれぞれは、ストライプグループ番号フィールド、最終ライト時刻フィールド、最終リード時刻フィールド、パトロールステータスフィールド、最終パトロール時刻フィールド、パトロール優先順位フィールド、及びライトカウントフィールドを含む。以下、ストライプグループＳＧｊに対応付けられた管理テーブル１２９のエントリ内のそれぞれのフィールドについて説明する。
【００３３】
ストライプグループ番号フィールドは、ストライプグループＳＧｊのストライプグループ番号ＳＧＮ（＝ｊ）を保持するのに用いられる。最終ライト時刻フィールドは、ストライプグループＳＧｊに最後にデータがライトされた時刻（最終ライト時刻）ＬＷＴを示す情報を保持するのに用いられる。最終リード時刻フィールドは、ストライプグループＳＧｊから最後にデータがリードされた時刻（最終リード時刻）ＬＲＴを示す情報を保持するのに用いられる。なお、時刻情報に変えて、日時情報が用いられても構わない。
【００３４】
パトロールステータスフィールドは、ストライプグループＳＧｊのパトロールに関するステータス（パトロールステータス）ＰＳを示す情報を保持するのに用いられる。パトロールステータスＰＳは、Ｓ１乃至Ｓ３（第１乃至第３のステータス）のいずれかである。
【００３５】
Ｓ１は、ストライプグループＳＧｊのパトロールが未実施であることを示す。Ｓ２も、ストライプグループＳＧｊのパトロールが未実施であることを示す。Ｓ１及びＳ２の違いについては、後述する。Ｓ３はストライプグループＳＧｊのパトロールが完了していることを示す。
【００３６】
最終パトロール時刻フィールドは、ストライプグループＳＧｊのパトロールが最後に実施された時刻（最終パトロール時刻）ＬＰＴを示す情報を保持するのに用いられる。  
パトロール優先順位フィールドは、ストライプグループＳＧｊに付与される当該ストライプグループＳＧｊのパトロールの実施に関する優先順位（パトロール優先順位）ＰＰを示す情報を保持するのに用いられる。本実施形態において、パトロール優先順位ＰＰは、第１の優先順位、第２の優先順位、及び第３の優先順位のいずれかである。
【００３７】
第１乃至第３の優先順位は、それぞれ記号１乃至３で示される。第１の優先順位は最も高いパトロール優先順位を示す。第２の優先順位は２番目に高いパトロール優先順位を、第３の優先順位は最も低いパトロール優先順位を、それぞれ示す。
【００３８】
本実施形態では、管理テーブル１２９が初期化される場合、パトロール優先順位フィールドには、パトロール優先順位ＰＰを示す情報に代えて、優先順位無しを示す情報が設定される。優先順位無しを示す情報は、図４において記号ＳＫＩＰで示され、ストライプグループＳＧｊのパトロール優先順位ＰＰが定められておらず、ストライプグループＳＧｊがパトロールの対象から除外されていることを示す。
【００３９】
このように優先順位無しは、第１乃至第３の優先順位とは異なり、パトロール優先順位ＰＰを示す訳ではない。しかし優先順位無しが、パトロール優先順位ＰＰの１つ（特別の状態）であると見なすことも可能である。この場合、ストライプグループＳＧｊのパトロール優先順位ＰＰ（以下、ＰＰ＿ＳＧｊと表記する）の初期値は、ＳＫＩＰである。
【００４０】
パトロール優先順位ＰＰ＿ＳＧｊは、ストライプグループＳＧｊへのデータライトが実施された場合に現在の状態に無関係に第１の優先順位に設定される。つまり、ストライプグループＳＧｊに第１の優先順位が付与される。また、パトロール優先順位ＰＰ＿ＳＧｊは、ストライプグループＳＧｊからのデータリードが実施された場合に現在の状態に無関係に第２の優先順位に設定される。つまり、ストライプグループＳＧｊに第２の優先順位が付与される。
【００４１】
またパトロール優先順位ＰＰ＿ＳＧｊは、第１または第２の優先順位の状態でストライプグループＳＧｊ（第１のストライプグループ）がパトロールされた場合、当該パトロールの完了に応じて第３の優先順位に設定（変更）される。パトロール優先順位ＰＰ＿ＳＧｊは更に、第３の優先順位の状態でストライプグループＳＧｊがパトロールされた場合、当該パトロールの完了後も第３の優先順位に維持される。
【００４２】
ストライプグループＳＧｊのパトロールステータスＰＳ（以下、ＰＳ＿ＳＧｊと表記する）は、初期状態においてＳ１に設定される。またＰＳ＿ＳＧｊは、ストライプグループＳＧｊからのデータリードまたはストライプグループＳＧｊへのデータライトが実施された場合にもＳ１に設定される。
【００４３】
本実施形態では、第１の優先順位が付与された１つ以上の第２のストライプグループのパトロールが全て完了する前に、１つ以上の第３のストライプグループに第１の優先順位が付与された場合、パトロールコントローラ１２６は、第２のストライプグループのパトロールを全て実行した後に、第３のストライプグループのパトロールを実行する。これにより、第３のストライプグループ（つまり、後からライトアクセスされたストライプグループ）が、第２のストライプグループ（つまり、先にライトアクセスされたストライプグループ）よりも先にパトロールされることを防止できる。このようなパトロール順の制御のために、前述のように、第１のステータスＳ１とは別に第２のステータスＳ２がパトロールステータスＰＳとして用いられる。Ｓ２は、第１の優先順位が付与されたストライプグループＳＧｊのみが取り得る。具体的には、第１の優先順位が付与され、且つパトロールステータスＰＳがＳ１の状態にある第２のストライプグループのパトロールを、例えばストライプグループ番号順に実行する前に、パトロールコントローラ１２６が、第２のストライプグループのパトロールステータスＰＳを全てＳ１からＳ２に変更する。
【００４４】
これによりパトロールコントローラ１２６は、第１の優先順位が付与されて、且つパトロールステータスＰＳがＳ２の状態にある第２のストライプグループのパトロールを優先的に実行することができる。Ｓ１は、ストライプグループＳＧｊに第１の優先順位が付与されている場合、パトロール未実施であるものの、パトロールが待たされている状態（パトロール待ち状態）にあることを示す。これに対してＳ２は、ストライプグループＳＧｊに第１の優先順位が付与されている場合、パトロール未実施で、且つパトロール待ちが解除された状態（つまり、パトロール可能状態）にあることを示す。  
ライトカウントフィールドは、ストライプグループＳＧｊにデータがライトされた回数（ライトカウント）ＷＣを保持するのに用いられる。
【００４５】
次に、本実施形態で適用されるパトロール処理について図５を参照して説明する。図５は、パトロール処理の典型的な手順を示すフローチャートである。まずパトロールコントローラ１２６は、管理テーブル１２９を次のように初期化する（ステップＡ１）。
【００４６】
パトロールコントローラ１２６は、管理テーブル１２９のエントリ（即ち、ストライプグループＳＧ１乃至ＳＧｎに対応付けられたエントリ）それぞれの最終ライト時刻フィールド、最終リード時刻フィールド、及び最終パトロール時刻フィールドに、最終ライト時刻ＬＷＴ、最終リード時刻ＬＲＴ、及び最終パトロール時刻ＬＰＴの初期値として、例えば００：００：００を設定する。またパトロールコントローラ１２６は、管理テーブル１２９のエントリそれぞれのパトロールステータスフィールドに、パトロールステータスＰＳの初期値としてパトロールの未実施を示すＳ１を設定する。
【００４７】
またパトロールコントローラ１２６は、管理テーブル１２９のエントリそれぞれのパトロール優先順位フィールドに、優先順位無し（パトロール対象外）を示すＳＫＩＰを設定する。パトロールコントローラ１２６は更に、管理テーブル１２９のエントリそれぞれのライトカウントフィールドに、ライトカウントＷＣの初期値として０を設定する。これによりパトロールコントローラ１２６は、管理テーブル１２９の初期化（ステップＡ１）を完了する。図４は、この初期化が完了した時点の管理テーブル１２９のデータ構造例を示している。
【００４８】
本実施形態では、管理テーブル１２９のエントリ（即ち、ストライプグループＳＧ１乃至ＳＧｎに対応付けられたエントリ）それぞれのストライプグループフィールドには、ストライプグループＳＧ１乃至ＳＧｎのストライプグループ番号１乃至ｎが、予め設定されているものとする。しかし、ストライプグループ番号１乃至ｎが、管理テーブル１２９の初期化（ステップＡ１）で設定されても構わない。
【００４９】
次に管理テーブル１２９はステップＡ２に進む。ステップＡ２においてパトロールコントローラ１２６は、管理テーブル１２９の全エントリのパトロール優先順位フィールドを参照することにより、パトロール優先順位ＰＰが第１の優先順位のストライプグループの数をカウントして、その数をカウントＣＮＴ＿Ｐ１の初期値として設定する。カウントＣＮＴ＿Ｐ１は、パトロール処理において最優先でパトロールされるべきストライプグループの数を示す。管理テーブル１２９の初期化の直後では、カウントＣＮＴ＿Ｐ１は０に設定される。
【００５０】
次にパトロールコントローラ１２６は、パトロール優先順位ＰＰが第１の優先順位のストライプグループに対応付けられた管理テーブル１２９の全てのエントリのパトロールステータスフィールドに、パトロールステータスＰＳとしてＳ２を設定する（ステップＡ３）。つまりパトロールコントローラ１２６は、第１の優先順位が付与されたストライプグループのパトロールステータスＰＳを、Ｓ１からＳ２に変更する。Ｓ２は、第１の優先順位が付与されたストライプグループのパトロールが未実施で、且つ当該ストライプグループのパトロール待ちが解除された状態にあることを示す。
【００５１】
ステップＡ３は、第１の優先順位が付与されたストライプグループのための後述の第１のパトロール処理が開始される時点において既に第１の優先順位が付与されているストライプグループと、当該第１のパトロール処理の開始後に第１の優先順位が付与されるストライプグループとを識別するために実行される。この識別により、管理テーブル１２９は、第１のパトロール処理が開始される時点において既に第１の優先順位が付与されているストライプグループを、当該第１のパトロール処理の開始後に第１の優先順位が付与されるストライプグループよりも優先的にパトロールする。
【００５２】
またパトロールコントローラ１２６は、第１の優先順位が付与されたストライプグループのうちの先頭のストライプグループを指し示すように、ポインタＰＴＲ１を設定する（ステップＡ４）。本実施形態においてパトロールコントローラ１２６は、第１の優先順位が付与されたストライプグループのうちの最小のストライプグループ番号ＳＧＮを有するストライプグループを、先頭のストライプグループとして決定する。
【００５３】
パトロールコントローラ１２６はステップＡ４を実行すると、ウエイトコントローラ１２７に制御を渡す。但し、変数ＣＮＴ＿Ｐ１が０の場合、即ち第１の優先順位が付与されたストライプグループが存在しない場合、パトロールコントローラ１２６は、ステップＡ３及びＡ４を実質的に実行することなく、ウエイトコントローラ１２７に制御を渡す。
【００５４】
これを受けて、ウエイトコントローラ１２７は、フラグＦ［Ｌ］を、割り込み処理の発生無しを示す第１の状態Ｆ１に設定し（ステップＡ５）、しかる後にパトロールコントローラ１２６に制御を返す。するとパトロールコントローラ１２６は、第１の優先順位が付与されたストライプグループ（第２のストライプグループ）をパトロール対象とする第１のパトロール処理を実行する（ステップＡ６）。第１のパトロール処理の詳細は後述する。
【００５５】
パトロールコントローラ１２６は、第１のパトロール処理（ステップＡ６）を実行すると、ステップＡ７に進む。なお、管理テーブル１２９の初期化の直後のように変数ＣＮＴ＿Ｐ１が０の場合、パトロールコントローラ１２６は、第１のパトロール処理を実質的に実行することなくステップＡ７に進む。また、第１のパトロール処理（ステップＡ６）の開始後に第１の優先順位が付与された１つ以上のストライプグループ（第３のストライプグループ）が存在するならば、パトロールコントローラ１２６は、ステップＡ２に戻る。
【００５６】
ステップＡ７においてパトロールコントローラ１２６は、第２の優先順位が付与されたストライプグループ（第４のストライプグループ）のうちの先頭のストライプグループを指し示すように、ポインタＰＴＲ２を設定する。なお、管理テーブル１２９の初期化の直後のように、第２の優先順位が付与されたストライプグループが存在しない場合、ポインタＰＴＲ２には、例えば無効値が設定される。
【００５７】
次にパトロールコントローラ１２６は、ウエイトコントローラ１２７に制御を渡す。これを受けてウエイトコントローラ１２７は、フラグＦ［Ｌ］を第１の状態Ｆ１に設定し（ステップＡ８）、しかる後にパトロールコントローラ１２６に制御を返す。するとパトロールコントローラ１２６は、第２の優先順位が付与されたストライプグループをパトロール対象とする第２のパトロール処理を実行する（ステップＡ９）。第２のパトロール処理の詳細は後述する。
【００５８】
パトロールコントローラ１２６は、第２のパトロール処理（ステップＡ９）を実行すると、ステップＡ１０に進む。なお、管理テーブル１２９の初期化の直後のように、第２の優先順位が付与されたストライプグループが存在しない場合、パトロールコントローラ１２６は、第２のパトロール処理を実質的に実行することなくステップＡ１０に進む。また、第２のパトロール処理の期間に、第１の優先順位が付与された１つ以上のストライプグループが新たに出現したならば、パトロールコントローラ１２６は第２のパトロール処理を強制的に終了してステップＡ２に戻る。
【００５９】
ステップＡ１０においてパトロールコントローラ１２６は、第３の優先順位が付与されたストライプグループ（第５のストライプグループ）のうちの先頭のストライプグループを指し示すように、ポインタＰＴＲ３を設定する。なお、管理テーブル１２９の初期化の直後のように、第３の優先順位が付与されたストライプグループが存在しない場合、ポインタＰＴＲ３は、例えば無効値に設定される。
【００６０】
以下の説明では、ポインタＰＴＲｕ（ｕ＝１，２，３）の指し示すストライプグループをストライプグループＳＧ＿ＰＴＲｕと表記する。また、ストライプグループＳＧ＿ＰＴＲｕの最終ライト時刻、最終リード時刻、パトロールステータス、最終パトロール時刻、パトロール優先順位、及びライトカウントを、それぞれ最終ライト時刻ＬＷＴ＿ＰＴＲｕ、最終リード時刻ＬＲＴ＿ＰＴＲｕ、パトロールステータスＰＳ＿ＰＴＲｕ、最終パトロール時刻ＬＰＴ＿ＰＴＲｕ、パトロール優先順位ＰＰ＿ＰＴＲｕ、及びライトカウントＷＣ＿ＰＴＲｕと表記する。また、ストライプグループＳＧ＿ＰＴＲｕに対応付けられた管理テーブル１２９のエントリを、エントリＥ＿ＰＴＲｕと表記する。
【００６１】
次にパトロールコントローラ１２６は、ウエイトコントローラ１２７に制御を渡す。これを受けてウエイトコントローラ１２７は、フラグＦ［Ｌ］を第１の状態Ｆ１に設定し（ステップＡ１１）、しかる後にパトロールコントローラ１２６に制御を返す。
【００６２】
するとパトロールコントローラ１２６は、第３の優先順位が付与されたストライプグループに対応付けられた管理テーブル１２９のエントリのパトロールステータスフィールドに、パトロールステータスＰＳとして、パトロールの未実施を示すＳ１を設定する（ステップＡ１２）。これにより、現在第３の優先順位が付与されているストライプグループは、全てパトロール対象として処理される。
【００６３】
次にパトロールコントローラ１２６は、第３の優先順位が付与されたストライプグループをパトロール対象とする第３のパトロール処理を実行する（ステップＡ１３）。第３のパトロール処理の詳細は後述する。もしも第３のパトロール処理の期間に、第１の優先順位が付与された１つ以上のストライプグループが新たに出現したならば、パトロールコントローラ１２６はステップＡ２に戻る。
【００６４】
図５のフローチャートに従う上述のパトロール処理から明らかなように、記号ＳＫＩＰで示される優先順位無しの１つ以上のストライプグループ（第６のストライプグループ）が存在する場合、パトロールコントローラ１２６は、当該パトロール処理において、当該第６のストライプグループをパトロール対象から除外する。第６のストライプグループは、管理テーブル１２９の初期化後、一度もアクセスされたことのないストライプグループである。したがって本実施形態によれば、第６のストライプグループのパトロールを抑止することで、他のストライプグループ（つまり、第１乃至第３の優先順位のいずれかが付与されたストライプグループ）を、効率的にパトロールすることができる。
【００６５】
次に、第１のパトロール処理（図５のステップＡ６）の詳細について、図６を参照して説明する。図６は、第１のパトロール処理の典型的な処理手順を示すフローチャートである。まずパトロールコントローラ１２６は、ウエイトコントローラ１２７に制御を渡す。これを受けてウエイトコントローラ１２７は、フラグＦ［Ｔ］を、割り込み処理の発生無しを示す第１の状態Ｆ１に設定し（ステップＡ２１）、しかる後にパトロールコントローラ１２６に制御を返す。
【００６６】
するとパトロールコントローラ１２６は、カウントＣＮＴ＿Ｐ１が０よりも大きいか、即ち最優先でパトロールされるべきストライプグループが１つ以上存在するかを判定する（ステップＡ２２）。もし、カウントＣＮＴ＿Ｐ１が０よりも大きいならば（ステップＡ２２のＹｅｓ）、パトロールコントローラ１２６は管理テーブル１２９を参照することにより、ポインタＰＴＲ１の指し示すストライプグループＳＧ＿ＰＴＲ１のパトロールステータスＰＳ＿ＰＴＲ１がＳ２であるかを判定する（ステップＡ２３）。
【００６７】
もし、ＰＳ＿ＰＴＲ１がＳ２であるならば（ステップＡ２３のＹｅｓ）、パトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ１には、今回の第１のパトロール処理の開始前に実行されたライト動作に応じて既に第１の優先順位が付与されており、今回の第１のパトロール処理におけるパトロール対象であると判断する。この場合、パトロールコントローラ１２６は、カウントＣＮＴ＿Ｐ１を１ディクリメントし（ステップＡ２４）、しかる後にストライプグループＳＧ＿ＰＴＲ１を次のようにパトロールする。
【００６８】
まずパトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ１からデータをリードするためのリード動作を実行し（ステップＡ２５）、データを正常にリードできたかを判定する（ステップＡ２６）。もしも、ストライプグループＳＧ＿ＰＴＲ１からデータを正常にリードできないエラーが発生したならば（ステップＡ２６のＮｏ）、パトロールコントローラ１２６は、当該エラーをメディアエラーと判定して、エラー修復処理を次のように実行する（ステップＡ２７）。
【００６９】
まず、ストライプグループＳＧ＿ＰＴＲ１内の２つのデータブロックからは正常にデータをリードできたものの、他の１つのデータブロックからは正常にデータをリードできなかったものとする。前者の２つのブロックを正常データブロック、後者の１つのデータブロックをエラーデータブロックと、それぞれ称する。この場合、パトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ１内の２つの正常データブロックからリードされたデータ、及びストライプグループＳＧ＿ＰＴＲ１内の冗長ブロックからリードされた冗長データ（パリティデータ）に基づいて周知のリビルド処理を実行する。これによりパトロールコントローラ１２６は、エラーデータブロックのデータを復元する。
【００７０】
ここで、エラーデータブロックが含まれているＨＤＤをＨＤＤ１１１＿ｉと表記する。この場合、パトロールコントローラ１２６は、ストライプグループＳＧ１乃至ＳＧｎのいずれにも用いられれていないＨＤＤ１１１＿ｉ内のブロック（つまり、空きブロック）を、エラーデータブロックに代えて、ストライプグループＳＧ＿ＰＴＲ１に割り当てる。これによりパトロールコントローラ１２６は、エラー修復処理（ステップＡ２７）を終了して、ステップＡ２８に進む。これに対し、ストライプグループＳＧ＿ＰＴＲ１からデータを正常にリードできたならば（ステップＡ２６のＹｅｓ）、パトロールコントローラ１２６はステップＡ２７をスキップして、ステップＡ２８に進む。
【００７１】
ステップＡ２８においてパトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ１に対応付けられた管理テーブル１２９のエントリＥ＿ＰＴＲ１の内容を更新する。即ちパトロールコントローラ１２６は、管理テーブル１２９のエントリＥ＿ＰＴＲ１中のパトロールステータスＰＳ＿ＰＴＲ１及びパトロール優先順位ＰＰ＿ＰＴＲ１を、それぞれ、Ｓ３及び３（第３の優先順位）に更新する。またパトロールコントローラ１２６は、エントリＥ＿ＰＴＲ１中の最終パトロール時刻ＬＰＴ＿ＰＴＲ１を示す情報を、現在時刻を示すように更新する。
【００７２】
パトロールコントローラ１２６は、ステップＡ２８を実行すると、ステップＡ２９に進む。一方、ＰＳ＿ＰＴＲ１がＳ２でないならば（ステップＡ２３のＮｏ）、パトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ１のパトロール優先順位ＰＰ＿ＰＴＲ１が、今回の第１のパトロール処理の開始後に実行されたライト動作に応じて第１の優先順位に設定されていると判断する。そこでパトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ１が今回の第１のパトロール処理におけるパトロール対象ではないと判断し、ステップＡ２４乃至Ａ２８をスキップしてステップＡ２９に進む。
【００７３】
ステップＡ２９においてパトロールコントローラ１２６は、ウエイト（WAIT）動作を実行することにより、設定された待ち時間Ｔｗだけ待つ。即ちパトロールコントローラ１２６は、第１のパトロール処理を待ち時間Ｔｗの期間だけ中断する。パトロールコントローラ１２６は、待ち時間Ｔｗが経過すると、ウエイトコントローラ１２７に制御を渡す。
【００７４】
するとウエイトコントローラ１２７は、待ち時間Ｔｗを再設定するための待ち時間再設定処理を実行する（ステップＡ３０）。即ち待ち時間再設定処理においてウエイトコントローラ１２７は、ホスト２０からのアクセス要求に基づいて入出力コントローラ１２８によって実行されるアクセス動作（割り込み処理）の状況に応じて、待ち時間Ｔｗを調整する。待ち時間再設定処理の詳細については後述する。
【００７５】
次にウエイトコントローラ１２７は、現在のフラグＦ［Ｔ］の状態を、フラグＦ［Ｌ］に設定する（ステップＡ３１）。即ちウエイトコントローラ１２７は、今回実行されたウエイト動作（ステップＡ２９）を前回のウエイト動作とみなし、現在のフラグＦ［Ｔ］の状態を、前回のウエイト動作の期間に割り込み処理が発生したか否かを示す状態として、フラグＦ［Ｌ］に保存する。そしてウエイトコントローラ１２７は、パトロールコントローラ１２６に制御を返す。
【００７６】
するとパトロールコントローラ１２６は、第１の優先順位が付与された次のストライプグループを指し示すように、ポインタＰＴＲ１を進める（ステップＡ３２）。第１の優先順位が付与された次のストライプグループとは、第１の優先順位が付与されたストライプグループのうち、現在のポインタＰＴＲ１の指し示すストライプグループＳＧ＿ＰＴＲ１のストライプグループ番号の次に小さいストライプグループ番号を有するストライプグループを指す。そしてパトロールコントローラ１２６はステップＡ２１に戻り、当該ステップＡ２１から始まる処理を再び実行する。
【００７７】
一方、カウントＣＮＴ＿Ｐ１が０よりも大きくないものとする（ステップＡ２２のＮｏ）。この状態は、管理テーブル１２９の初期化の直後のように、カウントＣＮＴ＿Ｐ１が０に設定されている場合、或いはステップＡ２１から始まる処理が繰り返されることにより、つまりカウントＣＮＴ＿Ｐ１のディクリメント（ステップＡ２４）が繰り返されることによりカウントＣＮＴ＿Ｐ１が０に到達した場合に発生する。この場合、パトロールコントローラ１２６は管理テーブル１２９を参照することにより、第１の優先順位が付与されたストライプグループが存在するかを判定する（ステップＡ３３）。
【００７８】
もし、第１の優先順位が付与されたストライプグループが存在するならば（ステップＡ３３のＹｅｓ）、パトロールコントローラ１２６は、第１のパトロール処理の期間に第１の優先順位が付与された１つ以上のストライプグループが新たに出現したと判断する。この場合、パトロールコントローラ１２６は、第１のパトロール処理の期間に出現した第１の優先順位が付与されたストライプグループのパトロールのために、図６のフローチャートに従う第１のパトロール処理（図５のステップＡ６）から図５のステップＡ２に戻る。
【００７９】
これに対し、第１の優先順位が付与されたストライプグループが存在しないならば（ステップＡ３３のＮｏ）、パトロールコントローラ１２６は、第２の優先順位が付与されたストライプグループのパトロールのために、図６のフローチャートに従う第１のパトロール処理（図５のステップＡ６）を終了して、前述のようにステップＡ７（図５）に進む。
【００８０】
上述の説明では、ステップＡ２乃至Ａ５が実行された後に、第１のパトロール処理（ステップＡ６）が実行される。しかし、ステップＡ２乃至Ａ５が、第１のパトロール処理に含まれていて、且つ当該第１のパトロール処理の先頭で実行されても構わない。つまり、第１のパトロール処理において、まずステップＡ２乃至Ａ５が実行され、しかる後にステップＡ２１から始まる処理が実行されても構わない。
【００８１】
次に、第２のパトロール処理（図５のステップＡ９）の詳細について、図７を参照して説明する。図７は、第２のパトロール処理の典型的な処理手順を示すフローチャートである。まずパトロールコントローラ１２６は、ウエイトコントローラ１２７に制御を渡す。これを受けてウエイトコントローラ１２７は、第１のパトロール処理の開始時と同様に、フラグＦ［Ｔ］を第１の状態Ｆ１に設定し（ステップＡ４１）、しかる後にパトロールコントローラ１２６に制御を返す。
【００８２】
するとパトロールコントローラ１２６は、ポインタＰＴＲ２に基づいて管理テーブル１２９のエントリＥ＿ＰＴＲ２を参照することにより、ポインタＰＴＲ２が、第２の優先順位が付与されたストライプグループを指しているかを判定する（ステップＡ４２）。もし、ポインタＰＴＲ２が、第２の優先順位が付与されたストライプグループを指しているならば（ステップＡ４２のＹｅｓ）、パトロールコントローラ１２６は、ポインタＰＴＲ２の指し示すストライプグループＳＧ＿ＰＴＲ２のパトロールステータスＰＳ＿ＰＴＲ２がＳ１であるかを判定する（ステップＡ４３）。
【００８３】
もし、ＰＳ＿ＰＴＲ２がＳ１であるならば（ステップＡ４３のＹｅｓ）、パトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ２のパトロールは未実施であり、ストライプグループＳＧ＿ＰＴＲ２は第２のパトロール処理におけるパトロール対象であると判断する。この場合、パトロールコントローラ１２６は第１のパトロール処理におけるストライプグループＳＧ＿ＰＴＲ１のパトロールと同様に、ストライプグループＳＧ＿ＰＴＲ２をパトロールする。
【００８４】
即ち、パトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ２からデータをリードするためのリード動作を実行し（ステップＡ４４）、データを正常にリードできたかを判定する（ステップＡ４５）。もしも、正常にリードできなかったならば（ステップＡ４５のＮｏ）、パトロールコントローラ１２６は、エラー修復処理を実行して（ステップＡ４６）、ステップＡ４７に進む。これに対して、正常にリードできたならば（ステップＡ４５のＹｅｓ）、パトロールコントローラ１２６はステップＡ４６をスキップして、ステップＡ４７に進む。
【００８５】
ステップＡ４７においてパトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ２に対応付けられた管理テーブル１２９のエントリＥ＿ＰＴＲ２の内容を更新する。即ちパトロールコントローラ１２６は、管理テーブル１２９のエントリＥ＿ＰＴＲ２中のパトロールステータスＰＳ＿ＰＴＲ２及びパトロール優先順位ＰＰ＿ＰＴＲ２を、それぞれ、Ｓ３及び３（第３の優先順位）に更新する。またパトロールコントローラ１２６は、エントリＥ＿ＰＴＲ２中の最終パトロール時刻ＬＰＴ＿ＰＴＲ２を示す情報を、現在時刻を示すように更新する。
【００８６】
パトロールコントローラ１２６は、ステップＡ４７を実行すると、ステップＡ４８に進む。一方、ＰＳ＿ＰＴＲ２がＳ１でないならば（ステップＡ４３のＮｏ）、パトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ２が今回の第２のパトロール処理におけるパトロール対象ではないと判断する。この場合、パトロールコントローラ１２６は、ステップＡ４４乃至Ａ４７をスキップしてステップＡ４８に進む。
【００８７】
ステップＡ４８においてパトロールコントローラ１２６は、ウエイト動作を実行することにより、設定された待ち時間Ｔｗだけ待つ。即ちパトロールコントローラ１２６は、第２のパトロール処理を時間Ｔｗだけ中断する。パトロールコントローラ１２６は、待ち時間Ｔｗが経過すると、ウエイトコントローラ１２７に制御を渡す。
【００８８】
するとウエイトコントローラ１２７は、待ち時間再設定処理を実行する（ステップＡ４９）。待ち時間再設定処理の詳細については後述する。次にウエイトコントローラ１２７は、現在のフラグＦ［Ｔ］の状態を、フラグＦ［Ｌ］に設定する（ステップＡ５０）。即ちウエイトコントローラ１２７は、現在のフラグＦ［Ｔ］の状態を、前回のウエイト動作において割り込み処理が発生したか否かを示す状態として、フラグＦ［Ｌ］に保存する。そしてウエイトコントローラ１２７は、パトロールコントローラ１２６に制御を返す。
【００８９】
すると、パトロールコントローラ１２６は管理テーブル１２９を参照することにより、第１の優先順位が付与されたストライプグループが存在するかを判定する（ステップＡ５１）。もし、第１の優先順位が付与されたストライプグループが存在しないならば（ステップＡ５１のＮｏ）、パトロールコントローラ１２６は、第２のパトロール処理の期間に第１の優先順位が付与されたストライプグループは出現しなかったと判断する。この場合、パトロールコントローラ１２６は、ステップＡ５２に進む。
【００９０】
ステップＡ５２においてパトロールコントローラ１２６は、第２の優先順位が付与された次のストライプグループを指し示すように、ポインタＰＴＲ２を進める。但し、第２の優先順位が付与された次のストライプグループが存在しない場合、パトロールコントローラ１２６はポインタＰＴＲ２に無効値を設定する。パトロールコントローラ１２６はステップＡ５２を実行するとステップＡ４１に戻り、当該ステップＡ４１から始まる処理を再び実行する。
【００９１】
これに対し、第１の優先順位が付与されたストライプグループが存在するならば（ステップＡ５１のＹｅｓ）、パトロールコントローラ１２６は、第２のパトロール処理の期間に第１の優先順位が付与された１つ以上のストライプグループが新たに出現したと判断する。この場合、パトロールコントローラ１２６は、第１の優先順位が付与されたストライプグループのパトロールを優先させるために、第２のパトロール処理の途中であっても、当該第２のパトロール処理を強制的に終了する。そして、パトロールコントローラ１２６は、図５のステップＡ２に戻る。
【００９２】
ここで、上述の例とは異なり、ポインタＰＴＲ２が、第２の優先順位が付与されたストライプグループを指していないものとする（ステップＡ４２のＮｏ）。つまり、ポインタＰＴＲ２に無効値が設定されているものとする。この状態は、管理テーブル１２９の初期化の直後のように、第２のパトロール処理の開始時点において第２の優先順位が付与されたストライプグループが存在しない場合、或いは第１の優先順位が付与されたストライプグループが出現する前に第２の優先順位が付与されたストライプグループのパトロールが全て完了した場合に発生する。この場合、パトロールコントローラ１２６は、図７のフローチャートに従う第２のパトロール処理（図５のステップＡ９）を終了して、前述のようにステップＡ１０（図５）に進む。
【００９３】
上述の説明では、ステップＡ７及びＡ８が実行された後に、第２のパトロール処理（ステップＡ９）が実行される。しかし、ステップＡ７及びＡ８が、第２のパトロール処理に含まれていて、且つ当該第２のパトロール処理の先頭で実行されても構わない。つまり、第２のパトロール処理において、まずステップＡ７及びＡ８が実行され、しかる後にステップＡ４１から始まる処理が実行されても構わない。
【００９４】
次に、第３のパトロール処理（図５のステップＡ１０）の詳細について、図８を参照して説明する。図８は、第３のパトロール処理の典型的な処理手順を示すフローチャートである。まずパトロールコントローラ１２６は、ウエイトコントローラ１２７に制御を渡す。これを受けてウエイトコントローラ１２７は、第１のパトロール処理の開始時と同様に、フラグＦ［Ｔ］を第１の状態Ｆ１に設定し（ステップＡ６１）、しかる後にパトロールコントローラ１２６に制御を返す。
【００９５】
するとパトロールコントローラ１２６は、ポインタＰＴＲ３に基づいて管理テーブル１２９のエントリＥ＿ＰＴＲ３を参照することにより、ポインタＰＴＲ３が、第３の優先順位が付与されたストライプグループを指しているかを判定する（ステップＡ６２）。もし、ポインタＰＴＲ３が、第３の優先順位が付与されたストライプグループを指しているならば（ステップＡ６２のＹｅｓ）、パトロールコントローラ１２６は、ポインタＰＴＲ３の指し示すストライプグループＳＧ＿ＰＴＲ３のパトロールステータスＰＳ＿ＰＴＲ３がＳ１であるかを判定する（ステップＡ６３）。
【００９６】
もし、ＰＳ＿ＰＴＲ３がＳ１であるならば（ステップＡ６３のＹｅｓ）、パトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ３のパトロールは未実施であり、ストライプグループＳＧ＿ＰＴＲ３は第３のパトロール処理におけるパトロール対象であると判断する。この場合、パトロールコントローラ１２６は第１のパトロール処理におけるストライプグループＳＧ＿ＰＴＲ１のパトロールと同様に、ストライプグループＳＧ＿ＰＴＲ３をパトロールする。
【００９７】
即ち、パトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ３からデータをリードするためのリード動作を実行し（ステップＡ６４）、データを正常にリードできたかを判定する（ステップＡ６５）。もしも、正常にリードできなかったならば（ステップＡ６５のＮｏ）、パトロールコントローラ１２６は、エラー修復処理を実行して（ステップＡ６６）、ステップＡ６７に進む。これに対して、正常にリードできたならば（ステップＡ６５のＹｅｓ）、パトロールコントローラ１２６はステップＡ６６をスキップして、ステップＡ６７に進む。
【００９８】
ステップＡ６７においてパトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ３に対応付けられた管理テーブル１２９のエントリＥ＿ＰＴＲ３の内容を更新する。即ちパトロールコントローラ１２６は、管理テーブル１２９のエントリＥ＿ＰＴＲ３中のパトロールステータスＰＳ＿ＰＴＲ３をＳ３に更新する。またパトロールコントローラ１２６は、エントリＥ＿ＰＴＲ３中の最終パトロール時刻ＬＰＴ＿ＰＴＲ３を示す情報を、現在時刻を示すように更新する。これによりパトロールコントローラ１２６は、ステップＡ６７を完了する。したがって、ストライプグループＳＧ＿ＰＴＲ３のパトロール優先順位ＰＰ＿ＰＴＲ３は、第３の優先順位に維持される。
【００９９】
パトロールコントローラ１２６は、ステップＡ６７を実行すると、ステップＡ６８に進む。一方、ＰＳ＿ＰＴＲ３がＳ１でないならば（ステップＡ６３のＮｏ）、パトロールコントローラ１２６は、ストライプグループＳＧ＿ＰＴＲ３が今回の第３のパトロール処理におけるパトロール対象ではないと判断する。この場合、パトロールコントローラ１２６は、ステップＡ６４乃至Ａ６７をスキップしてステップＡ６８に進む。
【０１００】
ここで、上述の例とは異なり、ポインタＰＴＲ３が、第３の優先順位が付与されたストライプグループを指していないものとする（ステップＡ６２のＮｏ）。つまり、ポインタＰＴＲ３に無効値が設定されているものとする。この状態は、管理テーブル１２９の初期化の直後のように、第３のパトロール処理の開始時点において第３の優先順位が付与されたストライプグループが存在しない場合、或いは第１の優先順位が付与されたストライプグループが出現する前に第３の優先順位が付与されたストライプグループのパトロールが全て完了した場合に発生する。この場合にも、パトロールコントローラ１２６はステップＡ６８に進む。
【０１０１】
ステップＡ６８においてパトロールコントローラ１２６は、ウエイト動作を実行することにより、設定された待ち時間Ｔｗだけ待つ。即ちパトロールコントローラ１２６は、第３のパトロール処理を時間Ｔｗだけ中断する。パトロールコントローラ１２６は、待ち時間Ｔｗが経過すると、ウエイトコントローラ１２７に制御を渡す。
【０１０２】
するとウエイトコントローラ１２７は、待ち時間再設定処理を実行する（ステップＡ６９）。待ち時間再設定処理の詳細については後述する。次にウエイトコントローラ１２７は、現在のフラグＦ［Ｔ］の状態を、フラグＦ［Ｌ］に設定する（ステップＡ７０）。即ちウエイトコントローラ１２７は、現在のフラグＦ［Ｔ］の状態をフラグＦ［Ｌ］に保存する。そしてウエイトコントローラ１２７は、パトロールコントローラ１２６に制御を返す。
【０１０３】
すると、パトロールコントローラ１２６は管理テーブル１２９を参照することにより、第１の優先順位が付与されたストライプグループが存在するかを判定する（ステップＡ７１）。もし、第１の優先順位が付与されたストライプグループが存在しないならば（ステップＡ７１のＮｏ）、パトロールコントローラ１２６は、第３のパトロール処理の期間に第１の優先順位が付与されたストライプグループは出現しなかったと判断する。この場合、パトロールコントローラ１２６は、ステップＡ７２に進む。
【０１０４】
ステップＡ７２においてパトロールコントローラ１２６は、第３の優先順位が付与された次のストライプグループを指し示すように、ポインタＰＴＲ３を進める。但し、第３の優先順位が付与された次のストライプグループが存在しない場合、パトロールコントローラ１２６はポインタＰＴＲ３に無効値を設定する。パトロールコントローラ１２６はステップＡ７２を実行するとステップＡ６１に戻り、当該ステップＡ６１から始まる処理を再び実行する。
【０１０５】
一方、第１の優先順位が付与されたストライプグループが存在するならば（ステップＡ７１のＹｅｓ）、パトロールコントローラ１２６は、第３のパトロール処理の期間に第１の優先順位が付与された１つ以上のストライプグループが新たに出現したと判断する。この場合、パトロールコントローラ１２６は、第１の優先順位が付与されたストライプグループのパトロールを優先させるために、第３のパトロール処理の途中であっても、当該第３のパトロール処理を強制的に終了する。そして、パトロールコントローラ１２６は、図５のステップＡ２に戻る。
【０１０６】
上述したように本実施形態によれば、パトロールコントローラ１２６は、ライトアクセスされたストライプグループのパトロール優先順位を、他のストライプグループよりも高い優先順位（具体的には、第１の優先順位）に設定する。これによりパトロールコントローラ１２６は、ライトアクセスされたストライプグループを、他のストライプグループよりも優先的にパトロールできる。よって、ウイーク・ライトのような、ライトアクセスに起因するメディアエラーを早期に検出して、ＲＡＩＤアレイにおける多重障害の発生を未然に防ぐことができる。
【０１０７】
しかもパトロールコントローラ１２６は、ライトアクセスされたストライプグループをパトロールした後、当該パトロールされたストライプグループが再びライトアクセスされるまで、当該パトロールされたストライプグループのパトロール優先順位を下げる（具体的には、リードアクセスされたストライプグループのパトロール優先順位よりも低い第３の優先順位に下げる）。これにより、ライトアクセスされたストライプグループが既にパトロールされたにも拘わらずに、パトロールされるべき他のストライプグループ（例えば、リードアクセスされたストライプグループ）よりも優先的にパトロールされるのを防止できる。
【０１０８】
次に、待ち時間再設定処理（図６のステップＡ３０、図７のステップＡ４９及び図８のステップＡ６９）の詳細について、図９を参照して説明する。図９は待ち時間再設定処理の典型的な処理手順を示すフローチャートである。本実施形態において、図６のステップＡ３０、図７のステップＡ４９及び図８のステップＡ６９でそれぞれ実行される待ち時間再設定処理の手順は同一である。
【０１０９】
まずウエイトコントローラ１２７は、現在のフラグＦ［Ｌ］及びＦ［Ｔ］が、いずれも第２の状態Ｆ２に設定されているかを判定する（ステップＡ８１）。本実施形態では、フラグＦ［Ｌ］は、第１乃至第３のパトロール処理それぞれの直前に第１の状態Ｆ１に設定される（図５のステップＡ５、Ａ８及びＡ１１）。一方、フラグＦ［Ｔ］は、第１乃至第３のパトロール処理それぞれのループの先頭で第１の状態Ｆ１に設定される（図６のステップＡ２１、図７のステップＡ４１、及び図８のステップＡ６１）。また、第１乃至第３のパトロール処理それぞれのループにおいて、第１乃至第３のパトロール処理それぞれが中断され（図６のステップＡ２９、図７のステップＡ４８、及び図８のステップＡ６８）、且つ待ち時間再設定処理（図６のステップＡ３０、図７のステップＡ４９、及び図８のステップＡ６９）が実行された後に、その時点におけるフラグＦ［Ｔ］の状態が、フラグＦ［Ｌ］に保存される（図６のステップＡ３１、図７のステップＡ５０、及び図８のステップＡ７０）。またフラグＦ［Ｔ］は、パトロール処理が中断されている期間に割り込み処理が実行された場合に、後述のように、割り込み処理の例えば先頭で第２の状態Ｆ２に設定される（図１０のステップＡ９１）。
【０１１０】
したがって、連続する２回のパトロール処理中断（ウエイト動作）の期間のいずれにおいても、少なくとも１回の割り込み処理が発生したならば、フラグＦ［Ｌ］及びＦ［Ｔ］はいずれも第２の状態Ｆ２に設定される。これに対し、連続する２回のウエイト動作の期間のいずれにおいても割り込み処理が発生しなかったならば、フラグＦ［Ｌ］及びＦ［Ｔ］はいずれも第１の状態Ｆ１に設定される。
【０１１１】
そこでウエイトコントローラ１２７は、フラグＦ［Ｌ］及びＦ［Ｔ］が、いずれも第２の状態Ｆ２に設定されているならば（ステップＡ８１のＹｅｓ）、割り込み処理の頻度は高い（第１のレベルである）と判定する。この場合、ウエイトコントローラ１２７は割り込み処理（特に、割り込み処理に含まれているアクセス動作）をパトロール処理よりも十分に優先させるために、待ち時間Ｔｗを増加する（ステップＡ８２）。即ちウエイトコントローラ１２７は、待ち時間Ｔｗを例えば一定時間ΔＴだけ増加する。
【０１１２】
これに対して、フラグＦ［Ｌ］及びＦ［Ｔ］の少なくとも一方が、第１の状態Ｆ１に設定されているならば（ステップＡ８１のＮｏ）、ウエイトコントローラ１２７は、フラグＦ［Ｌ］及びＦ［Ｔ］が、いずれも第１の状態Ｆ１に設定されているかを判定する（ステップＡ８３）。もし、フラグＦ［Ｌ］及びＦ［Ｔ］が、いずれも第１の状態Ｆ１に設定されているならば（ステップＡ８３のＹｅｓ）、ウエイトコントローラ１２７は、割り込み処理の頻度は低い（第１のレベルよりも低い第２のレベルである）と判定する。この場合、ウエイトコントローラ１２７は割り込み処理をパトロール処理よりも優先させる度合いを低減するために、待ち時間Ｔｗを減少する（ステップＡ８４）。即ちウエイトコントローラ１２７は、待ち時間Ｔｗを例えば一定時間ΔＴだけ減少する。
【０１１３】
これに対して、フラグＦ［Ｌ］及びＦ［Ｔ］の一方が第１の状態Ｆ１に設定され、他方が第２の状態Ｆ１に設定されているならば（ステップＡ８３のＮｏ）、ウエイトコントローラ１２７は、割り込み処理の頻度は中程度（第１のレベルと第２のレベルとの間の第３のレベル）であると判定する。この場合、ウエイトコントローラ１２７は、待ち時間Ｔｗを現在値に維持する（ステップＡ８５）。
【０１１４】
本実施形態においてウエイトコントローラ１２７は、待ち時間Ｔｗを増減するのに、待ち時間Ｔｗを例えば一定時間ΔＴだけ増加または減少する。しかし、ウエイトコントローラ１２７が、待ち時間Ｔｗを一定割合だけ増加または減少しても構わない。
【０１１５】
次に、本実施形態で適用される割り込み処理について図１０を参照して説明する。図１０は割り込み処理の典型的な処理手順を示すフローチャートである。本実施形態において、ホスト２０からのアクセス要求は、例えばＨＩＦコントローラ１２１によって受領された順にアクセス要求リストに設定される。アクセス要求リストは、例えば、キュー構造を有しており、メモリ１２３に格納される。本実施形態において、アクセス要求リストに設定されたアクセス要求は、割り込み処理において実行される。割り込み処理は、アクセス要求リストに少なくとも１つのアクセス要求が設定されている場合に、ウエイトコントローラ１２７がパトロールに関する処理の待ち状態（中断状態）にある時間Ｔｗの期間に主として入出力コントローラ１２８によって実行される。パトロールに関する処理の待ち状態にある期間とは、ウエイトコントローラ１２７のウエイト動作（図６のステップＡ２９、図７のステップＡ４８及び図９のステップＡ６８）の期間を指す。
【０１１６】
割り込み処理において、まず入出力コントローラ１２８は、ウエイトコントローラ１２７に制御を渡す。これを受けてウエイトコントローラ１２７は、割り込みフラグＦ［Ｔ］を第２の状態に設定し（ステップＡ９１）、入出力コントローラ１２８に制御を返す。すると入出力コントローラ１２８は、アクセス要求リストから、次に実行されるべきアクセス要求（例えば、その時点において最も古いアクセス要求）を取り出して、当該取り出されたアクセス要求がリード要求であるか否か（つまり、ライト要求であるか）を判定する（ステップＡ９２）。
【０１１７】
もし、取り出されたアクセス要求がリード要求であるならば（ステップＡ９２のＹｅｓ）、入出力コントローラ１２８は当該リード要求を実行する（ステップＡ９３）。これにより、例えばＲＡＩＤアレイ１１１内のストライプグループＲＳＧのデータブロックからデータがリードされたものとする。すると入出力コントローラ１２８は、パトロールコントローラ１２６に制御を渡す。
【０１１８】
これを受けて、パトロールコントローラ１２６は、ストライプグループＲＳＧに対応付けられた管理テーブル１２９のエントリＥ＿ＲＳＧの内容を次のように更新する（ステップＡ９４）。パトロールコントローラ１２６は、管理テーブル１２９のエントリＥ＿ＲＳＧ中のパトロールステータスＰＳ＿ＲＳＧ及びパトロール優先順位ＰＰ＿ＲＳＧを、それぞれ、Ｓ１及び２（第２の優先順位）に更新（設定）する。またパトロールコントローラ１２６は、管理テーブル１２９のエントリＥ＿ＲＳＧ中の最終リード時刻ＬＲＴ＿ＲＳＧを示す情報を、現在時刻を示すように更新する。
【０１１９】
一方、取り出されたアクセス要求がライト要求であるならば（ステップＡ９２のＮｏ）、入出力コントローラ１２８は当該ライト要求を実行する（ステップＡ９５）。これにより、例えばＲＡＩＤアレイ１１１内のストライプグループＷＳＧのデータブロックにデータがライトされたものとする。すると入出力コントローラ１２８は、パトロールコントローラ１２６に制御を渡す。
【０１２０】
これを受けて、パトロールコントローラ１２６は、ストライプグループＷＳＧに対応付けられた管理テーブル１２９のエントリＥ＿ＷＳＧの内容を次のように更新する（ステップＡ９６）。パトロールコントローラ１２６は、管理テーブル１２９のエントリＥ＿ＷＳＧ中のパトロールステータスＰＳ＿ＷＳＧ及びパトロール優先順位ＰＰ＿ＷＳＧを、それぞれ、Ｓ１及び１（第１の優先順位）に更新（設定）する。またパトロールコントローラ１２６は、エントリＥ＿ＷＳＧ中の最終ライト時刻ＬＷＴ＿ＷＳＧを示す情報を、現在時刻を示すように更新する。パトロールコントローラ１２６は更に、エントリＥ＿ＷＳＧ中のライトカウントＷＣ＿ＷＳＧを１インクリメントする。
【０１２１】
入出力コントローラ１２８は、パトロールコントローラ１２６によって管理テーブル１２９が更新されると（ステップＡ９４またはＡ９６）、図１０のフローチャートに従う割り込み処理を終了する。ここで、割り込み処理が終了しても期間Ｔｗが経過しないために、パトロールコントローラ１２６が依然としてパトロールに関する処理の待ち状態にあるものとする。この場合、もしもアクセス要求リストに未実行のアクセス要求が残っているならば、入出力コントローラ１２８は、再び割り込み処理を開始する。また、アクセス要求リストに未実行のアクセス要求が残っていても、期間Ｔｗが経過したためにパトロールに関する処理が再開されているならば、入出力コントローラ１２８は、次にパトロールに関する処理が中断されるのを待つ。
【０１２２】
＜第１の変形例＞
次に前記実施形態の第１の変形例について、図１１及び図１２を参照して説明する。図１１は、第１の変形例において、図１に示されるＲＡＩＤストレージ装置１１に代えて適用されるＲＡＩＤストレージ装置１１０の典型的なＲＡＩＤ構成を示す。図１２は、第１の変形例において、図３に示される管理テーブル１２９に代えて適用される管理テーブル１２９１のデータ構造例を示す。より詳細には、図１２は、図５のステップＡ１に相当する初期化が完了した時点の管理テーブル１２９１のデータ構造例を示す。
【０１２３】
図１１に示されるＲＡＩＤストレージ装置１１０は、図１及び図２に示されるＲＡＩＤアレイ１１１に加えて、例えば、ＲＡＩＤアレイ１１２及び１１３を更に含む。即ち、ＲＡＩＤストレージ装置１１０は、３つのＲＡＩＤアレイ１１１乃至１１３を含むものとする。
【０１２４】
第１の変形例において、ＲＡＩＤストレージ装置１１０を除くＲＡＩＤストレージシステムの構成、及びＲＡＩＤストレージシステム内のストレージコントローラ１２の機能構成は、それぞれ、図１及び図３のそれらと同様である。したがって必要ならば、図１において、ＲＡＩＤストレージ装置１１及びＲＡＩＤアレイ１１１を、それぞれ、ＲＡＩＤストレージ装置１１０及びＲＡＩＤアレイ１１１乃至１１３に置き換えられたい。また、図３において、管理テーブル１２９を管理テーブル１２９１に置き換えられたい。
【０１２５】
ＲＡＩＤアレイ１１１乃至１１３はそれぞれ、ＲＡＩＤアレイ１１１乃至１１３を識別するための識別子としてのＲＡＩＤアレイ番号ＲＡＮ、例えば１乃至３を有する。第１の変形例では、ＲＡＩＤストレージ装置１１０を利用するユーザにとって、ＲＡＩＤアレイ１１１乃至１１３の重要度が異なるものとする。ここでは、ＲＡＩＤアレイ１１１の重要度が最も高く、以下、ＲＡＩＤアレイ１１２、及びＲＡＩＤアレイ１１３の順で重要度が低くなるものとする。
【０１２６】
図１１に示されるように、ＲＡＩＤアレイ１１２はＨＤＤ１１２＿１乃至１１２＿４を備え、ＲＡＩＤアレイ１１３はＨＤＤ１１３＿１乃至１１３＿４を備えている。第１の変形例では、ＲＡＩＤアレイ１１１乃至１１３は、いずれも４つのＨＤＤの集合を用いて構成される。しかし、ＲＡＩＤアレイ１１１乃至１１３をそれぞれ構成するＨＤＤの数は２以上（複数）であれば良く、またＲＡＩＤアレイ１１１乃至１１３をそれぞれ構成するＨＤＤの数が同一である必要もない。
【０１２７】
ＲＡＩＤアレイ１１１は、前述のように、ストライプグループ番号（ＳＧＮ）１乃至ｎを有するｎ個のストライプグループＳＧ１乃至ＳＧｎを備えている。ＲＡＩＤアレイ１１２は、ストライプグループ番号ｎ＋１乃至ｋ（ｋ＞ｎ＋１）を有するｋ−ｎ個のストライプグループＳＧｎ＋１乃至ＳＧｋを備えている。ＲＡＩＤアレイ１１３は、ストライプグループ番号ｋ＋１乃至ｍ（ｍ＞ｋ＋１）を有するｍ−ｋ個のストライプグループＳＧｋ＋１乃至ＳＧｍを備えている。
【０１２８】
ＲＡＩＤアレイ１１２及び１１３は、ＲＡＩＤアレイ１１１と同様に、ＲＡＩＤ５（ＲＡＩＤレベル５）を適用するものとする。しかし、ＲＡＩＤアレイ１１１乃至１１３内の各ストライプグループＳＧｊ（ｊ＝１，２，…，ｍ）が少なくとも１つの冗長ブロックを含むならば、ＲＡＩＤアレイ１１１乃至１１３が、例えば、ＲＡＩＤ１、ＲＡＩＤ４及びＲＡＩＤ６のような、ＲＡＩＤ５以外のＲＡＩＤ構成を有していても構わない。
【０１２９】
図１２に示される管理テーブル１２９１は、例えば、ＲＡＩＤストレージ装置１１０（ＲＡＩＤアレイ１１１乃至１１３）内の全てのストライプグループＳＧ１乃至ＳＧｍに対応付けられたエントリの群を有している。管理テーブル１２９１のエントリのそれぞれは、図４に示される管理テーブル１２９のエントリのそれぞれと同様に、ストライプグループ番号フィールド、最終ライト時刻フィールド、最終リード時刻フィールド、パトロールステータスフィールド、最終パトロール時刻フィールド、パトロール優先順位フィールド、及びライトカウントフィールドを含む。図１２に示される管理テーブル１２９１のエントリのそれぞれは、これらのフィールドに加えて、ＲＡＩＤアレイ番号フィールド、及びＲＡＩＤアレイ優先順位フィールドを更に含む。以下、ストライプグループＳＧｊに対応付けられたエントリ内のＲＡＩＤアレイ番号フィールド、及びＲＡＩＤアレイ優先順位フィールドについて説明する。
【０１３０】
ＲＡＩＤアレイ番号フィールドは、ストライプグループＳＧｊを含むＲＡＩＤアレイのＲＡＩＤアレイ番号ＲＡＮを保持するのに用いられる。ＲＡＩＤアレイ優先順位フィールドは、ストライプグループＳＧｊを含むＲＡＩＤアレイのパトロールに関する優先順位（以下、ＲＡＩＤアレイ優先順位と称する）ＲＡＰを保持するのに用いられる。
【０１３１】
ＲＡＩＤアレイ番号フィールド及びＲＡＩＤアレイ優先順位フィールドには、図５のステップＡ１に相当する初期化処理で、それぞれ、ＲＡＩＤアレイ番号ＲＡＮ及びＲＡＩＤアレイ優先順位ＲＡＰが設定される。図１２は、この初期化処理が完了した時点の管理テーブル１２９１のデータ構造例を示す。
【０１３２】
第１の変形例において、ＲＡＩＤアレイ１１１乃至１１３のＲＡＩＤアレイ優先順位ＲＡＰは、当該ＲＡＩＤアレイ１１１乃至１１３の重要度に基づくユーザの指示に従ってホスト２０により指定される。ここでは、ＲＡＩＤアレイ１１１，１１２及び１１３のＲＡＩＤアレイ優先順位ＲＡＰは、上述の初期化処理で、図１２に示されるように、それぞれ１，３及び２に設定されているものとする。ＲＡＰ＝１はＲＡＩＤアレイ優先順位が最も高いことを示し、以下、ＲＡＰ＝２、及びＲＡＰ＝３の順でＲＡＩＤアレイ優先順位が低くなる。
【０１３３】
次に、第１の変形例におけるパトロール処理について説明する。第１の変形例におけるパトロール処理の手順の概略は、前記実施形態とほぼ同様である。まずパトロールコントローラ１２６は、図５のステップＡ１に相当する初期化処理を実行する。その後、ウエイトコントローラ１２７は、ＲＡＩＤストレージ装置１１０（ＲＡＩＤアレイ１１１乃至１１３）内の第１の優先順位が付与されたストライプグループ（第７のストライプグループ）を、ＲＡＩＤアレイ１１１乃至１１３のＲＡＩＤアレイ優先順位に従って次のようにパトロールする。
【０１３４】
まずパトロールコントローラ１２６は、第７のストライプグループのうち、最も高いＲＡＩＤアレイ優先順位が付与されたＲＡＩＤアレイ１１１（つまり、最も高いＲＡＩＤアレイ優先順位を有いるＲＡＩＤアレイ１１１）に含まれているストライプグループを、図５のステップＡ６に相当する第１のパトロール処理によりパトロールする。なお、第１のパトロール処理に先行して、図５のステップＡ２乃至Ａ５に相当する処理も行われる。
【０１３５】
次にパトロールコントローラ１２６は、第７のストライプグループのうち、２番目に高いＲＡＩＤアレイ優先順位が付与されたＲＡＩＤアレイ１１３に含まれているストライプグループを、図５のステップＡ６に相当する第１のパトロール処理によりパトロールする。次にパトロールコントローラ１２６は、第７のストライプグループのうち、３番目に高い（つまり、最も低い）ＲＡＩＤアレイ優先順位が付与されたＲＡＩＤアレイ１１２に含まれているストライプグループを、図５のステップＡ６に相当する第１のパトロール処理によりパトロールする。このようにパトロールコントローラ１２６は、第７のストライプグループのパトロールにおいて、ＲＡＩＤアレイ優先順位がより高いＲＡＩＤアレイ内のストライプグループほど優先的にパトロールする。
【０１３６】
ここで、第７のストライプグループのパトロールの間に、第１の優先順位が付与されたストライプグループ（第８のストライプグループ）が、ＲＡＩＤアレイ１１１乃至１１３内に新たに出現したものとする。この場合、パトロールコントローラ１２６は前記実施形態と同様に、第７のストライプグループのパトロールを完了した後に、ＲＡＩＤアレイ１１１乃至１１３内の第８のストライプグループをパトロールする。但し、パトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３内の第８のストライプグループを、ＲＡＩＤアレイ１１１乃至１１３のＲＡＩＤアレイ優先順位に従ってパトロールする。第７及び第８のストライプグループは、それぞれ、前記実施形態における第２及び第３のストライプグループに相当する。
【０１３７】
その後、パトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３内の第２の優先順位が付与されたストライプグループ（第９のストライプグループ）を、ＲＡＩＤアレイ１１１乃至１１３のＲＡＩＤアレイ優先順位に従ってパトロールする。第９のストライプグループは、前記実施形態における第４のストライプグループに相当する。もし、第９のストライプグループのパトロールの間に、第１の優先順位が付与されたストライプグループ（第１０のストライプグループ）がＲＡＩＤアレイ１１１乃至１１３内に新たに出現したならば、パトロールコントローラ１２６は、第９のストライプグループのパトロールを全て完了しなくても、ＲＡＩＤアレイ１１１乃至１１３内の第１０のストライプグループを、ＲＡＩＤアレイ１１１乃至１１３のＲＡＩＤアレイ優先順位に従ってパトロールする。
【０１３８】
その後、パトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３内の第３の優先順位が付与されたストライプグループ（第１１のストライプグループ）を、ＲＡＩＤアレイ１１１乃至１１３のＲＡＩＤアレイ優先順位に従ってパトロールする。第１１のストライプグループは、前記実施形態における第５のストライプグループに相当する。もし、第１１のストライプグループのパトロールの間に、第１の優先順位が付与されたストライプグループ（第１２のストライプグループ）がＲＡＩＤアレイ１１１乃至１１３内に新たに出現したならば、パトロールコントローラ１２６は、第１１のストライプグループのパトロールを全て完了しなくても、ＲＡＩＤアレイ１１１乃至１１３内の第１２のストライプグループを、ＲＡＩＤアレイ１１１乃至１１３のＲＡＩＤアレイ優先順位に従ってパトロールする。
【０１３９】
第１の変形例によれば、ＲＡＩＤストレージ装置が複数のＲＡＩＤアレイを備えている場合、複数のＲＡＩＤアレイのそれぞれに、パトロールに関する優先順位（より詳細には、ＲＡＩＤアレイ間の優先順位としてのＲＡＩＤアレイ優先順位ＲＡＰ）が付与される。このように第１の変形例においては、各ＲＡＩＤアレイ内のストライプグループそれぞれにパトロールに関する優先順位（パトロール優先順位ＰＰ）が付与されるだけでなく、複数のＲＡＩＤアレイそれぞれにも、パトロールに関する優先順位（ＲＡＩＤアレイ優先順位ＲＡＰ）が付与される。これにより、第１の変形例においては、同一優先順位が付与されたストライプグループであっても、より高いＲＡＩＤアレイ優先順位ＲＡＰが付与されたＲＡＩＤアレイ（例えば、より重要なＲＡＩＤアレイ）内のストライプグループほど、優先的にパトロールされる。よって第１の変形例によれば、複数のＲＡＩＤアレイのパトロールをより効率的に実行することができる。
【０１４０】
＜第２の変形例＞
次に前記実施形態の第２の変形例について、図１１に加えて図１３を参照して説明する。第２の変形例も第１の変形例と同様に、図１に示されるＲＡＩＤストレージ装置１１に代えて、図１１に示されるＲＡＩＤストレージ装置１１０が用いられるものとする。図１３は、第２の変形例において、図１２に示される管理テーブル１２９１に代えて適用される管理テーブル１２９２のデータ構造例を示す。
【０１４１】
図１３に示される管理テーブル１２９２は、図１２に示される管理テーブル１２９１と同様に、ＲＡＩＤストレージ装置１１０（ＲＡＩＤアレイ１１１乃至１１３）内の全てのストライプグループＳＧ１乃至ＳＧｍに対応付けられたエントリの群を有している。管理テーブル１２９２が管理テーブル１２９１と異なる点は、管理テーブル１２９２のエントリのそれぞれが、エラーカウントフィールドを更に含むことである。
【０１４２】
そこで、ストライプグループＳＧｊ（ｊ＝１，２，…，ｍ）に対応付けられた管理テーブル１２９２のエントリ内のエラーカウントフィールドについて説明する。エラーカウントフィールドは、ストライプグループＳＧｊのパトロールでエラーが検出された回数をエラーカウントＥＣとして保持するのに用いられる。このエラーカウントフィールドは、図５のステップＡ１に相当する初期化処理で初期値０に設定される。
【０１４３】
第２の変形例において、ＲＡＩＤアレイ１１１，１１２及び１１３のＲＡＩＤアレイ優先順位ＲＡＰの初期値は、第１の変形例と同様に、それぞれ１，３及び２であるものとする。第２の変形例が第１の変形例と相違する点は、ＲＡＩＤアレイ１１１乃至１１３のＲＡＩＤアレイ優先順位ＲＡＰが、ＲＡＩＤアレイ１１１乃至１１３それぞれのパトロールで検出されたエラーの総数に基づいて変更されることにある。
【０１４４】
第２の変形例においてパトロールコントローラ１２６は、図５のステップＡ１に相当する初期化処理の直後は、第１の変形例と同様に、ＲＡＩＤアレイ１１１乃至１１３内の第１乃至第３の優先順位（パトロール優先順位）が付与されたストライプグループを、当該ストライプグループのパトロール優先順位、及びＲＡＩＤアレイ１１１乃至１１３の初期設定されたＲＡＩＤアレイ優先順位に従ってパトロールする。即ちパトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３内の同一の優先順位が付与されたストライプグループのパトロールに関し、ＲＡＩＤアレイ１１１内のストライプグループ、ＲＡＩＤアレイ１１３内のストライプグループ，及びＲＡＩＤアレイ１１２内のストライプグループの順でパトロールする。
【０１４５】
パトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３内の第１乃至第３の優先順位が付与されたストライプグループのパトロールを一巡すると、ＲＡＩＤアレイ１１１乃至１１３に含まれているストライプグループに対応付けられた管理テーブル１２９２内のエントリのエラーカウントフィールドの値（エラーカウントＥＣ）を、ＲＡＩＤアレイ毎に集計する。即ちパトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３に含まれているストライプグループに対応付けられたエラーカウント（ＥＣ）に基づいて、ＲＡＩＤアレイ１１１乃至１１３それぞれの総エラーカウントを取得する。
【０１４６】
次にパトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３のＲＡＩＤアレイ優先順位を総エラーカウントの降順に再設定する。即ち、パトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３のうち、総エラーカウントが最も多いＲＡＩＤアレイに含まれている全てのストライプグループに対応付けられた管理テーブル１２９２内のエントリのＲＡＩＤアレイ優先順位フィールドに、第１位の（つまり最も高い）ＲＡＩＤアレイ優先順位ＲＡＰを示す値（＝１）を設定する。またパトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３のうち、総エラーカウントが２番目に多いＲＡＩＤアレイに含まれている全てのストライプグループに対応付けられた管理テーブル１２９２内のエントリのＲＡＩＤアレイ優先順位フィールドに、第２位の（つまり、２番目に高い）ＲＡＩＤアレイ優先順位ＲＡＰを示す値（＝２）を設定する。更にパトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３のうち、総エラーカウントが最も少ないＲＡＩＤアレイに含まれている全てのストライプグループに対応付けられた管理テーブル１２９２内のエントリのＲＡＩＤアレイ優先順位フィールドに、第３位の（つまり、最も低い）ＲＡＩＤアレイ優先順位ＲＡＰを示す値（＝３）を設定する。
【０１４７】
またパトロールコントローラ１２６は、管理テーブル１２９２の全エントリのエラーカウントＥＣをいずれも値０に初期化する。なお、値０に維持されているエラーカウントＥＣは、必ずしも初期化される必要はない。
【０１４８】
その後、パトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３のパトロールを再開する。即ちパトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３内の第１乃至第３の優先順位（パトロール優先順位）が付与されたストライプグループを、当該ストライプグループのパトロール優先順位、及びＲＡＩＤアレイ１１１乃至１１３の再設定（更新）されたＲＡＩＤアレイ優先順位に従ってパトロールする。
【０１４９】
上述のように第２の変形例によれば、パトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３内の第１乃至第３の優先順位が付与されたストライプグループを対象とする最初のパトロールが一巡した後は、ＲＡＩＤアレイ１１１乃至１１３に付与されるＲＡＩＤアレイ優先順位を、ＲＡＩＤアレイ１１１乃至１１３のパトロールでのエラー検出状況に応じて再設定することができる。これによりパトロールコントローラ１２６は、同一の優先順位が付与されたストライプグループのうち、パトロールでエラー（メディアエラー）が検出される頻度が高いＲＡＩＤアレイ内のストライプグループほど、優先的にパトロールすることができる。
【０１５０】
第２の変形例では、ストライプグループＳＧｊのエラーカウントＥＣは、当該ストライプグループＳＧｊのパトロールでエラーが検出された回数を示す。つまり、ストライプグループＳＧｊのエラーカウントＥＣは、当該ストライプグループＳＧｊが、第１乃至第３のパトロール処理のいずれのパトロールでエラーが検出された場合にも１インクリメントされる。
【０１５１】
しかし、ストライプグループＳＧｊのエラーカウントＥＣが、第１のパトロール処理における当該ストライプグループＳＧｊのパトロールでエラーが検出された回数のみを示しても良い。つまり、ストライプグループＳＧｊのエラーカウントＥＣが、当該ストライプグループＳＧｊに第１の優先順位が付与されている状態に実行されるパトロールでエラーが検出された場合にのみ、１インクリメントされても良い。この場合、パトロールコントローラ１２６は、ＲＡＩＤアレイ１１１乃至１１３内の第１の優先順位が付与されたストライプグループのパトロールを一巡する毎に、ＲＡＩＤアレイ１１１乃至１１３に含まれているストライプグループエラーカウントＥＣを、ＲＡＩＤアレイ毎に集計すれば良い。
【０１５２】
以上説明した少なくとも１つの実施形態によれば、ＲＡＩＤアレイにおけるメディアエラーを早期に検出できる。
【０１５３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１５４】
１０…ＲＡＩＤストレージシステム、１１，１１０…ＲＡＩＤストレージ装置、１２…ストレージコントローラ、１１１〜１１３…ＲＡＩＤアレイ、１１１＿１〜１１１＿４，１１２＿１〜１１２＿４，１１３＿１〜１１３＿４…ＨＤＤ、１２３…メモリ、１２４…ローカルＨＤＤ、１２５…ＣＰＵ、１２６…パトロールコントローラ、１２７…ウエイトコントローラ、１２８…入出力コントローラ、１２９，１２９１，１２９２…管理テーブル。
【図１】
2018022222.tif 000003
【図２】
2018022222.tif 000004
【図３】
2018022222.tif 000005
【図４】
2018022222.tif 000006
【図５】
2018022222.tif 000007
【図６】
2018022222.tif 000008
【図７】
2018022222.tif 000009
【図８】
2018022222.tif 000010
【図９】
2018022222.tif 000011
【図１０】
2018022222.tif 000012
【図１１】
2018022222.tif 000013
【図１２】
2018022222.tif 000014
【図１３】
2018022222.tif 000015
【手続補正書】
【提出日】平成29年8月23日(2017.8.23)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
各々が冗長ブロックを含む複数のブロックの集合から構成される複数のストライプグループを有する少なくとも１つのＲＡＩＤアレイを含むＲＡＩＤストレージ装置と、
前記少なくとも１つのＲＡＩＤアレイへのアクセスを制御するストレージコントローラと
を具備し、
前記ストレージコントローラは、
前記ＲＡＩＤストレージ装置を利用するホスト装置からのアクセス要求に応じて、前記少なくとも１つのＲＡＩＤアレイ内の要求されたストライプグループへのライトアクセスまたはリードアクセスを実行する入出力コントローラと、
前記複数のストライプグループのうちのライトアクセスされたストライプグループを、
他のストライプグループよりも優先的に、リード動作を用いてパトロールし、前記優先的にパトロールされたストライプグループの前記パトロールに関する優先順位としてのパトロール優先順位を、前記優先的にパトロールされたストライプグループの前記パトロールの完了に応じて下げるパトロールコントローラと、
を具備し、
前記パトロールコントローラは、
第１のストライプグループへのライトアクセスに応じて、前記第１のストライプグループに、前記パトロール優先順位として最も高いパトロール優先順位である第１の優先順位を付与し、
前記第１のストライプグループに前記第１の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了に応じて最も低いパトロール優先順位である第３の優先順位に変更し、
前記第１のストライプグループへのリードアクセスに応じて、前記第１のストライプグループに、前記パトロール優先順位として、前記第１の優先順位より低く前記第３の優先順位よりも高い第２の優先順位を付与し、
前記第１のストライプグループに前記第２の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了に応じて前記第３の優先順位に変更し、
前記第１の優先順位が付与されたストライプグループが存在しない場合に、前記第２の優先順位が付与されたストライプグループをパトロールし、
前記第１の優先順位が付与されたストライプグループ及び前記第２の優先順位が付与されたストライプグループがいずれも存在しない場合に、前記第３の優先順位が付与されたストライプグループをパトロールする
ＲＡＩＤストレージシステム。
【請求項２】
前記パトロールコントローラは、前記第１のストライプグループに前記第３の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了後も前記第３の優先順位に維持する請求項１記載のＲＡＩＤストレージシステム。
【請求項３】
前記パトロールコントローラは、前記第１の優先順位が付与された１つ以上の第２のストライプグループのパトロールの間に、１つ以上の第３のストライプグループに前記第１の優先順位が付与された場合、前記第２のストライプグループをパトロールした後で且つ前記第２の優先順位が付与された１つ以上の第４のストライプグループをパトロールする前に、前記第３のストライプグループをパトロールする請求項１及び請求項２のいずれか一項に記載のＲＡＩＤストレージシステム。
【請求項４】
前記パトロールコントローラは、
前記複数のストライプグループそれぞれに付与される前記パトロール優先順位、及び前記複数のストライプグループそれぞれのパトロールに関するステータスとしてのパトロールステータスを、管理情報を用いて管理し、
前記複数のストライプグループそれぞれへのライトアクセスに応じて前記管理情報を更新することにより、前記複数のストライプグループそれぞれの前記パトロールステータスとして、パトロール未実施を示す第１のステータスであって、前記複数のストライプグループそれぞれに前記第１の優先順位が付与されている場合には前記複数のストライプグループそれぞれがパトロールの待ち状態にあることを更に示す第１のステータスを設定し、
前記第２のストライプグループの前記パトロールを開始する前に前記管理情報を更新することにより、前記第２のストライプグループの前記パトロールステータスを、前記第１のステータスから、パトロール未実施で且つ前記パトロールの待ち状態が解除されていることを示す第２のステータスに変更し、
前記第２及び第３のストライプグループに前記第１の優先順位が付与された時期の違いを、前記第２及び第３のストライプグループの前記パトロールステータスが前記第１及び第２のステータスのいずれであるかに基づいて識別し、
前記第２のステータスに変更された前記第２のストライプグループを前記第３のストライプグループよりも優先的にパトロールする
請求項３記載のＲＡＩＤストレージシステム。
【請求項５】
前記パトロールコントローラは、
前記複数のストライプグループそれぞれの前記パトロールの完了に応じて前記管理情報を更新することにより、前記複数のストライプグループそれぞれの前記パトロールステータスを、前記第１または第２のステータスからパトロール完了を示す第３のステータスに変更し、
前記第４のストライプグループをパトロールした後で且つ前記第３の優先順位が付与された１つ以上の第５のストライプグループをパトロールする前に前記管理情報を更新することにより、前記第５のストライプグループの前記パトロールステータスとして前記第１のステータスを設定する
請求項４記載のＲＡＩＤストレージシステム。
【請求項６】
前記ストレージコントローラは、メモリを更に具備し、
前記管理情報は、前記メモリに格納される
請求項４及び請求項５のいずれか一項に記載のＲＡＩＤストレージシステム。
【請求項７】
ＲＡＩＤストレージ装置に含まれている少なくとも１つのＲＡＩＤアレイであって、各々が冗長ブロックを含む複数のブロックの集合から構成される複数のストライプグループを有する少なくとも１つのＲＡＩＤアレイへのアクセスを制御するストレージコントローラにおいて、
前記ＲＡＩＤストレージ装置を利用するホスト装置からのアクセス要求に応じて、前記少なくとも１つのＲＡＩＤアレイ内の要求されたストライプグループへのライトアクセスまたはリードアクセスを実行する入出力コントローラと、
前記複数のストライプグループのうちのライトアクセスされたストライプグループを、
他のストライプグループよりも優先的に、リード動作を用いてパトロールし、前記優先的にパトロールされたストライプグループの前記パトロールに関する優先順位としてのパトロール優先順位を、前記優先的にパトロールされたストライプグループの前記パトロールの完了に応じて下げるパトロールコントローラと、
を具備し、
前記パトロールコントローラは、
第１のストライプグループへのライトアクセスに応じて、前記第１のストライプグループに、前記パトロール優先順位として最も高いパトロール優先順位である第１の優先順位を付与し、
前記第１のストライプグループに前記第１の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了に応じて最も低いパトロール優先順位である第３の優先順位に変更し、
前記第１のストライプグループへのリードアクセスに応じて、前記第１のストライプグループに、前記パトロール優先順位として、前記第１の優先順位より低く前記第３の優先順位よりも高い第２の優先順位を付与し、
前記第１のストライプグループに前記第２の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了に応じて前記第３の優先順位に変更し、
前記第１の優先順位が付与されたストライプグループが存在しない場合に、前記第２の優先順位が付与されたストライプグループをパトロールし、
前記第１の優先順位が付与されたストライプグループ及び前記第２の優先順位が付与されたストライプグループがいずれも存在しない場合に、前記第３の優先順位が付与されたストライプグループをパトロールする
ストレージコントローラ。
【請求項８】
ＲＡＩＤストレージ装置に含まれている少なくとも１つのＲＡＩＤアレイであって、各々が冗長ブロックを含む複数のブロックの集合から構成される複数のストライプグループを有する少なくとも１つのＲＡＩＤアレイへのアクセスを制御するストレージコントローラにおいて、前記少なくとも１つのＲＡＩＤアレイをパトロールするＲＡＩＤアレイパトロール方法であって、
第１のストライプグループへのライトアクセスに応じて、前記第１のストライプグループに、パトロール優先順位として最も高いパトロール優先順位である第１の優先順位を付与し、
前記第１のストライプグループに前記第１の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了に応じて最も低いパトロール優先順位である第３の優先順位に変更し、
前記第１のストライプグループへのリードアクセスに応じて、前記第１のストライプグループに、前記パトロール優先順位として、前記第１の優先順位より低く前記第３の優先順位よりも高い第２の優先順位を付与し、
前記第１のストライプグループに前記第２の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了に応じて前記第３の優先順位に変更し、
前記第１の優先順位が付与されたストライプグループが存在しない場合に、前記第２の優先順位が付与されたストライプグループをパトロールし、
前記第１の優先順位が付与されたストライプグループ及び前記第２の優先順位が付与されたストライプグループがいずれも存在しない場合に、前記第３の優先順位が付与されたストライプグループをパトロールする
ＲＡＩＤアレイパトロール方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
実施形態によれば、ＲＡＩＤストレージシステムは、少なくとも１つのＲＡＩＤアレイを含むＲＡＩＤストレージ装置と、前記少なくとも１つのＲＡＩＤアレイへのアクセスを制御するストレージコントローラとを具備する。前記少なくとも１つのＲＡＩＤアレイは複数のストライプグループを有し、前記複数のストライプグループの各々は冗長ブロックを含む複数のブロックの集合から構成される。前記ストレージコントローラは、入出力コントローラとパトロールコントローラとを具備する。前記入出力コントローラは、前記ＲＡＩＤストレージ装置を利用するホスト装置からのアクセス要求に応じて、前記少なくとも１つのＲＡＩＤアレイ内の要求されたストライプグループへのライトアクセスまたはリードアクセスを実行する。前記パトロールコントローラは、前記複数のストライプグループのうちのライトアクセスされたストライプグループを、他のストライプグループよりも優先的に、リード動作を用いてパトロールする。前記パトロールコントローラは、前記優先的にパトロールされたストライプグループの前記パトロールに関する優先順位としてのパトロール優先順位を、前記優先的にパトロールされたストライプグループの前記パトロールの完了に応じて下げる。前記パトロールコントローラは、第１のストライプグループへのライトアクセスに応じて、前記第１のストライプグループに、前記パトロール優先順位として最も高いパトロール優先順位である第１の優先順位を付与し、前記第１のストライプグループに前記第１の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了に応じて最も低いパトロール優先順位である第３の優先順位に変更し、前記第１のストライプグループへのリードアクセスに応じて、前記第１のストライプグループに、前記パトロール優先順位として、前記第１の優先順位より低く前記第３の優先順位よりも高い第２の優先順位を付与し、前記第１のストライプグループに前記第２の優先順位が付与されている状態で、前記第１のストライプグループをパトロールした場合、前記第１のストライプグループに付与される前記パトロール優先順位を、前記第１のストライプグループの前記パトロールの完了に応じて前記第３の優先順位に変更し、前記第１の優先順位が付与されたストライプグループが存在しない場合に、前記第２の優先順位が付与されたストライプグループをパトロールし、前記第１の優先順位が付与されたストライプグループ及び前記第２の優先順位が付与されたストライプグループがいずれも存在しない場合に、前記第３の優先順位が付与されたストライプグループをパトロールする。