(57)【要約】  複数のディスクの冗長アレイのプリエンプティブ復元を、当該アレイが依然として耐故障性である間に実行するＲＡＩＤコントローラが開示される。コントローラは、エラー閾値を指定するユーザ入力を受信する。アレイ内のディスク（危機的ディスク）がそのエラー閾値を超えた場合、コントローラはその危機的ディスクのデータをスペアディスクにコピーする。コピーが完了すると、コントローラはその危機的ディスクをそのアレイのスペアディスクで置き換える。コントローラは、ユーザＩ／Ｏ要求に応じて、コピー中に冗長アレイの一部として危機的ディスクを維持する、すなわち、危機的ディスクの読み取りと書き込みを継続する。したがって、アレイは、プリエンプティブ復元中は耐故障性のまま維持される。一実施形態では、コントローラは、ユーザの介入なしに復元を自動的に実行する。危機的ディスクがコピー中に故障した場合、コントローラはコピーが中止された場所からスペアディスクへの従来の復元を実行する。
2008509474.tif 000002
【特許請求の範囲】
【請求項１】
冗長アレイが依然として耐故障性である間に、複数のディスクの冗長アレイのプリエンプティブ復元を実行するための方法であって、
冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定するステップと、
エラー閾値を超えたという判定に応答してスペアディスクにその複数のディスクのうちの１つのディスクからデータをコピーするステップと、
前記コピーが完了した後で、冗長アレイの複数のディスクのうちの１つのディスクをスペアディスクで置き換えるステップとを含む、方法。
【請求項２】
前記コピー中に、第２のデータを含むユーザ書き込み要求に応答して、複数のディスクのうちの１つのディスクに第２のデータを書き込み、それにより冗長アレイの耐故障性を維持するステップをさらに含む、請求項１に記載の方法。
【請求項３】
第２のデータの宛先が、前記コピーするステップによりスペアディスクに以前に書き込まれた位置である場合に、第２のデータをスペアディスクにも書き込むステップをさらに含む、請求項２に記載の方法。
【請求項４】
前記コピーするステップが、
複数のディスクのうちの１つのディスクのデータを、スペアディスクに、スペアディスクの開始点から終了点に連続的にコピーするステップを含む、請求項３に記載の方法。
【請求項５】
スペアディスクに連続的にコピーされたデータの最後の位置を維持するステップをさらに含む、請求項４に記載の方法。
【請求項６】
第２のデータの宛先が、前記コピーするステップによりスペアディスクに以前に書き込まれた位置である場合に、第２のデータをスペアディスクにも書き込むステップが、
第２のデータの宛先が、スペアディスクの開始点と連続的にコピーされた最後の位置との間の位置に対するものである場合に、第２のデータをスペアディスクにも書き込むステップを含む、請求項５に記載の方法。
【請求項７】
冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定する前記ステップの前に、エラー閾値を指定するユーザ入力を受信するステップをさらに含む、請求項１に記載の方法。
【請求項８】
前記スペアディスクが、前記コピーするステップの前にディスクのアレイの一部でないディスクを含む、請求項１に記載の方法。
【請求項９】
前記コピーするステップが、
複数のディスクのうちの１つのディスクからデータを読み取るステップと、
データをスペアディスクに書き込むステップとを含む、請求項１に記載の方法。
【請求項１０】
前記コピーするステップが、前記判定するステップに応答し、前記判定するステップと前記コピーするステップとの間にユーザの介入を要求せずにＲＡＩＤコントローラにより自動的に実行される、請求項１に記載の方法。
【請求項１１】
複数のディスクのうちの１つのディスクからエラーを受信したことに応答して、冗長アレイの複数のディスクのうちの１つのディスクによるエラー数を維持するステップであって、前記判定するステップが前記維持するステップに応答して実行されるステップをさらに含む、請求項１に記載の方法。
【請求項１２】
複数のディスクのうちの１つのディスクからエラーを受信する前記ステップが、複数のディスクのうちの１つのディスクから第２のデータを読み取るように、複数のディスクのうちの１つのディスクに対して発行されたコマンドに応答するステップである、請求項１１に記載の方法。
【請求項１３】
複数のディスクのうちの１つのディスクからエラーを受信する前記ステップが、複数のディスクのうちの１つのディスクに第２のデータを書き込むように、複数のディスクのうちの１つのディスクに対して発行されたコマンドに応答するステップである、請求項１１に記載の方法。
【請求項１４】
複数のディスクのうちの１つのディスクに、冗長アレイの複数のディスクのうちの１つのディスクによるエラー数を要求するステップをさらに含み、前記判定するステップが、前記要求するステップに応答して実行される、請求項１に記載の方法。
【請求項１５】
前記要求するステップが、自己監視、分析、レポーティングテクノロジー（ＳＭＡＲＴ）データを要求することを含む、請求項１４に記載の方法。
【請求項１６】
複数のディスクのうちの１つのディスクで所定の不活動期間が経過したと判定するステップをさらに含み、
前記要求するステップが、複数のディスクのうちの１つのディスクで所定の不活動期間が経過したという前記判定に応答して実行される、請求項１４に記載の方法。
【請求項１７】
冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定する前記ステップが、
複数のディスクのうちの１つのディスクによる回復可能なエラー数がエラー閾値を超えたと判定するステップを含む、請求項１に記載の方法。
【請求項１８】
冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定する前記ステップが、
複数のディスクのうちの１つのディスクによる、媒体故障が原因の訂正不可能なエラー数がエラー閾値を超えたと判定するステップを含む、請求項１に記載の方法。
【請求項１９】
冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定するステップが、
回復可能なエラー数と、複数のディスクのうちの１つのディスクによる、媒体故障が原因の訂正不可能エラー数との合計が、エラー閾値を超えたと判定するステップをさらに含む、請求項１に記載の方法。
【請求項２０】
前記エラーが、動作不可能な複数のディスクのうちの１つのディスクをレンダリングしないエラーを含む、請求項１に記載の方法。
【請求項２１】
前記コピーするステップが完了した後で、前記置き換えるステップの前に、複数のディスクの冗長アレイに対するアクセスをクエースするステップをさらに含む、請求項１に記載の方法。
【請求項２２】
前記置き換えるステップの後で、複数のディスクの冗長アレイに対するアクセスをアンクエースするステップをさらに含む、請求項２１に記載の方法。
【請求項２３】
冗長アレイの複数のディスクのうちの１つのディスクが前記コピーするステップ中に故障したと判定するステップと、
冗長アレイの複数のディスクのうちの１つのディスクが故障したと判定する前記ステップに応答して、冗長アレイから故障した複数のディスクのうちの１つのディスクを取り除き、スペアディスクと置き換えるステップと、
前記取り除き置き換えるステップの後に、故障した複数のディスクのうちの１つのディスクのデータを再作成し、前記再作成されたデータをスペアディスクに書き込むステップとをさらに含む、請求項１に記載の方法。
【請求項２４】
前記コピーするステップ中に冗長アレイの複数のディスクのうちの１つのディスクが故障したと判定する前記ステップが、
前記コピーするステップ中に故障した複数のディスクのうちの１つのディスクが、エラー閾値を超えた複数のディスクのうちの１つのディスクであると判定するステップを含み、
前記再作成し、書き込むステップが、前記コピーするステップ中にスペアディスクにまだ書き込まれていないデータの一部だけを再作成し、書き込むことを含む、請求項２３に記載の方法。
【請求項２５】
前記コピーするステップ中に、冗長アレイの複数のディスクのうちの１つのディスクが故障したと判定する前記ステップが、
前記コピーするステップ中に、冗長アレイの複数のディスクのうちの当該１つのディスク以外の他の１つのディスクが故障したと判定するステップを含む、請求項２３に記載の方法。
【請求項２６】
前記コピーするステップ中に、スペアディスクが故障したと判定するステップをさらに含む、請求項１に記載の方法。
【請求項２７】
前記コピーするステップ中に、スペアディスクが故障したという前記判定に応答して第２のスペアディスクを選択するステップと、
前記コピーするステップと前記置き換えるステップとを再実行するステップとをさらに含む、請求項２６に記載の方法。
【請求項２８】
ＲＡＩＤコントローラに接続されているディスクの冗長アレイが依然として耐故障性である間に、そのアレイのプリエンプティブ復元を実行するためのＲＡＩＤコントローラであって、
エラー閾値を記憶するためのメモリと、
前記メモリに連結されており、
冗長アレイの複数のディスクのうちの１つのディスクによるエラー数が前記エラー閾値を超えたと判定し、
冗長アレイの複数のディスクのうちの前記１つのディスクによる前記エラー数が前記エラー閾値を超えたという判定に応答して、複数のディスクのうちの前記１つのディスクからデータをスペアディスクにコピーし、
前記データのコピーが完了した後で、冗長アレイの複数のディスクのうちの前記１つのディスクを前記スペアディスクで置き換えるように構成されたマイクロプロセッサとを含む、ＲＡＩＤコントローラ。
【請求項２９】
前記エラー閾値がユーザ定義によるものである、請求項２８に記載のＲＡＩＤコントローラ。
【請求項３０】
前記判定、前記コピー、前記置き換えを行うよう前記マイクロプロセッサに命令するための、前記マイクロプロセッサが実行するために前記メモリに記憶されたプログラム命令をさらに含む、請求項２８に記載のＲＡＩＤコントローラ。
【請求項３１】
ソフトウェアＲＡＩＤコントローラを含む、請求項２８に記載のＲＡＩＤコントローラ。
【請求項３２】
前記マイクロプロセッサが、前記データの一部を複数のディスクの冗長アレイに転送するように、ＲＡＩＤコントローラにＩ／Ｏ要求も発行するコンピュータシステムの同じマイクロプロセッサである、請求項３１に記載のＲＡＩＤコントローラ。
【請求項３３】
ＲＡＩＤコントローラをコンピュータのネットワークにインターフェースするように前記マイクロプロセッサに連結されたネットワークインターフェースアダプタであって、ＲＡＩＤコントローラが、前記ネットワークを介して前記コンピュータから、前記データの一部を複数のディスクの冗長アレイと前記コンピュータとの間で前記ネットワークを介して転送するための要求を受信する、ネットワークインターフェースアダプタをさらに含む、請求項２８に記載のＲＡＩＤコントローラ。
【請求項３４】
ＲＡＩＤコントローラをコンピュータのローカルバスにインターフェースするように前記マイクロプロセッサに連結されたローカルバスインターフェースであって、ＲＡＩＤコントローラが、ローカルバスを介してコンピュータから、ディスクの冗長アレイからデータをローカルバスを介してコンピュータに転送する要求を受信する、ローカルバスインターフェースをさらに含む、請求項２８に記載のＲＡＩＤコントローラ。
【請求項３５】
前記マイクロプロセッサが、さらに
第２のデータを複数のディスクのうちの前記１つのディスクから前記スペアディスクにコピーし、それにより冗長アレイの耐故障性を維持している間に、前記第２のデータを含むユーザ書き込み要求に応答して、前記第２のデータを複数のディスクのうちの前記１つのディスクに書き込むように構成された、請求項２８に記載のＲＡＩＤコントローラ。
【請求項３６】
前記マイクロプロセッサが、さらに
前記第２のデータの宛先が、前記コピーするステップにより前記スペアディスクに以前書き込まれた位置である場合に、前記第２のデータを前記スペアディスクにも書き込むように構成された、請求項３５に記載のＲＡＩＤコントローラ。
【請求項３７】
冗長アレイが依然として耐故障性である間に、複数のディスクの冗長アレイのプリエンプティブ復元を実行するための方法であって、
冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定するステップと、
前記判定するステップに応答して、冗長アレイの複数のディスクのうちの第２のディスクからデータを読み取り、そのデータをスペアディスクに書き込むステップであって、冗長アレイの複数のディスクのうちの第２のディスクのデータが、複数のディスクのうちの１つのディスクのデータのミラーリングされたコピーであるステップと、
前記読み取りと書き込みのステップが完了した後で、冗長アレイの複数のディスクのうちの１つのディスクをスペアディスクで置き換えるステップと、
前記読み取りと書き込みのステップとの間に、第２のデータを含むユーザの書き込み要求に応答して、冗長アレイの複数のディスクのうちの１つのディスクに第２のデータを書き込み、それにより冗長アレイの耐故障性を維持するステップとを含む、方法。
【請求項３８】
第２のデータの宛先が、前記読み取りと書き込みのステップによりスペアディスクに以前に書き込まれた位置である場合に、第２のデータをスペアディスクにも書き込むステップをさらに含む、請求項３７に記載の方法。
【請求項３９】
冗長アレイが依然として耐故障性である間に、複数のディスクの冗長アレイのプリエンプティブ復元を実行するための方法であって、
冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定するステップと、
前記判定するステップに応答して、複数のディスクのうちの１つのディスクのデータを、冗長アレイの他のディスクのうちの複数のディスクから読み取られた第２のデータから作成し、作成されたデータをスペアディスクに書き込むステップと、
前記作成し書き込むステップが完了した後で、冗長アレイの複数のディスクのうちの１つのディスクをスペアディスクで置き換えるステップとを含み、
前記作成し書き込むステップの間に、第３のデータを含むユーザ書き込み要求に応答して、冗長アレイの複数のディスクのうちの１つのディスクに第３のデータを書き込み、それにより冗長アレイの耐故障性を維持する、方法。
【請求項４０】
データを作成する前記ステップが、
冗長アレイの他のディスクのうちの複数のディスクから第２のデータを読み取るステップと、
複数のディスクのうちの１つのディスクのデータを生成するように第２のデータのバイナリ排他的論理和を実行するステップとを含む、請求項３９に記載の方法。
【請求項４１】
第３のデータの宛先が、前記作成し書き込むステップによりスペアディスクに以前に書き込まれた位置である場合に、第３のデータをスペアディスクにも書き込むステップをさらに含む、請求項３９に記載の方法。
【請求項４２】
冗長アレイが依然として耐故障性である間に、複数のディスクの冗長アレイのプリエンプティブ復元を実行するための方法であって、
ユーザ入力を受信するステップであって、ユーザ入力が冗長アレイの複数のディスクのうちの１つのディスクを指定するステップと、
ユーザ入力を受信する前記ステップに応答して、複数のディスクのうちの１つのディスクからデータをスペアディスクにコピーするステップと、
前記コピーするステップが完了した後で、冗長アレイの複数のディスクのうちの１つのディスクをスペアディスクで置き換えるステップとを含む、方法。
【請求項４３】
第２のデータを含むユーザ書き込み要求に応答して、前記コピーするステップの間に、複数のディスクのうちの１つのディスクに第２のデータを書き込み、それにより冗長アレイの耐故障性を維持するステップをさらに含む、請求項４２に記載の方法。
【請求項４４】
ユーザ入力を受信する前記ステップの前に、冗長アレイの複数のディスクのうちの１つのディスクがエラー閾値を超えたことをユーザに通知するステップをさらに含む、請求項４２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、全ての意図および目的で参照として本明細書に組み込まれる以下の米国仮出願の特典を請求する。
【表１】
2008509474.tif 000003
【０００２】
本発明は、一般に、安価なディスクの冗長アレイ（ＲＡＩＤ）コントローラの分野に関し、より詳細には、それにより制御される記憶装置のアレイ上のデータの使用可能性を増加させることに関する。
【背景技術】
【０００３】
何年にもわたり、コンピュータシステムは、コントローラが単一論理ディスクをコンピュータオペレーティングシステムに提供するように、複数の物理ディスクのグループまたはアレイにわたってデータをストライプすることのできるディスクコントローラを含めるようになってきた。ストライプの概念を説明するには、４つの物理ディスクのストライプされたアレイがそれぞれ１００ＧＢの容量を有すると仮定し、そのアレイのストライプサイズまたはブロックサイズが８セクタまたは４ＫＢであると仮定する。この例では、コントローラは、８セクタの第１、第２、第３などのグループのコントローラが論理ディスクの第１、第５、第９などの４ＫＢのブロックを、それぞれ第１の物理ディスクに記憶し、コントローラは、８セクタの第１、第２、第３などのグループの論理ディスクの第２、第６、第１０などの４ＫＢのブロックを、それぞれ第２の物理ディスクに記憶し、コントローラは、８セクタの第１、第２、第３などのグループの論理ディスクの第３、第７、第１１などの４ＫＢブロックを、それぞれ第３の物理ディスクに記憶し、コントローラは、８セクタの第１、第２、第３などのグループの論理ディスクの第４、第８、第１２などの４ＫＢブロックを、それぞれ第４の物理ディスクに記憶する。
【０００４】
ストライプすることの利点は、最大容量の個別の物理ディスクで可能な記憶容量よりも大きな記憶容量を論理ディスクに提供できることである。上記の例では、その結果は、４００ＧＢの記憶容量を有する論理ディスクである。
【０００５】
恐らくストライプのより重要な利点は、ストライプされたアレイが提供できるよりよい性能である。このような性能の改善は、ランダムＩ／Ｏ環境、すなわちマルチユーザファイルサーバ、データベース、またはトランザクション処理サーバなどが、サーバからの典型的な読み取りＩ／Ｏ要求に、アクセスされるべきアレイにあるディスクを１つだけ統計的に要求させるストライプサイズを選択することにより主に達成される。その結果、アレイ中の各ディスクは、それぞれに異なるＩ／Ｏ要求を満足させるための異なるシリンダーを同時に探すことができ、したがってアレイの複数のスピンドルを利用する。ビデオオンデマンドサーバなどの処理能力集約的な環境における性能改善は、典型的な読み取りＩ／０要求にアレイ中のすべてのディスクにまたがらせるほどのストライプサイズを選択することにより主として達成され、これによりコントローラはそれらディスクを並列に読み取り、それらすべてが同じシリンダーをシークすることができるようになる。この環境では、アレイ中の様々なディスクのスピンドルがしばしば同期される。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、ディスクのストライプされたアレイの問題点は、全体としてアレイの信頼性が、別個の単一ディスクそれぞれの信頼性よりも低くなることである。これは、１つのディスクに記憶されたデータが、そのディスクの故障により使用不可能になった場合、そのデータの一部だけを戻すことはコントローラにとって容認しがたいことなので、コンピュータの観点から、論理ディスクの全データが使用不可能になるからである。ディスクの信頼性は、故障間の平均時間（ＭＴＢＦ）で共通に測定される。ＲＡＩＤ  ０アレイのディスク数が増加するに従い、ＭＴＢＦは恐らく多くのアプリケーションにとって容認しがたいレベルにまで減少する。
【０００７】
この問題を解消するために、冗長の概念がディスクのアレイに取り入れられる。ディスクの冗長アレイにおいて、追加の、または冗長なディスクが、論理ディスクの記憶容量を増加させないアレイに追加されるが、代わりに冗長データをアレイの１つまたは複数のディスクに記憶することを可能にした場合、例えばアレイ中のディスクの１つが故障したとしても、コントローラがコンピュータに論理ディスクの要求されたデータを依然として提供することができる。この理由から、アレイが冗長な状態にある場合、すなわちアレイ中のディスクがどれも故障していない場合、そのアレイは耐故障性と呼ばれる。それは、そのアレイが１つのディスクの故障に耐えることができ、依然としてユーザにデータを提供することができるからである。冗長データの優位な形態は、ミラーリングされたデータとパリティデータとである。多くの場合、ディスクの冗長アレイのＭＴＢＦは、単一の非冗長ディスクのＭＴＢＦよりも大きくすることができる。
【０００８】
ＲＡＩＤは、１９８７年にカリフォルニア大学バークレイのＰａｔｔｅｒｓｏｎ、ＧｉｂｓｏｎおよびＫａｔｚが彼らの「Ａ  Ｃａｓｅ  ｆｏｒ  Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｖｅ  Ｄｉｓｋｓ（ＲＡＩＤ）」という創造性に富んだ論文で新語として作った「安価なディスクの冗長アレイ」の頭文字である。１９８０年代後半には、サーバクラスのコンピュータ環境のための大量記憶域の優位な形態となってきたＲＡＩＤシステムが普及した。元のＲＡＩＤ論文は、ＲＡＩＤレベル１から５と称されるディスクの冗長アレイの５つの異なる形態を定義している。以来、その他のレベルも開発されてきたが、ストライプアレイはＲＡＩＤレベル０と称されるようになった。様々なＲＡＩＤレベルとそれぞれの性能および信頼性の特徴は当業では良く知られているが、本発明が解消した問題を理解しやすくするため、本明細書ではそれらに簡単に触れることにする。
【０００９】
ＲＡＩＤレベル１は、ディスクのミラーリングを使用する。ＲＡＩＤ１アレイは一対のディスクにより構成される。コンピュータがＲＡＩＤ１論理ディスクに対してＲＡＩＤコントローラへの書き込みを発行するたびに、ＲＡＩＤコントローラは、データのミラーリングされたコピーをその一対のディスク上で維持するために、データをその一対のディスクの両方に書き込む。コンピュータがＲＡＩＤ  １論理ディスクについてＲＡＩＤコントローラに読み取りを発行するたびに、ＲＡＩＤコントローラはそれらディスクのうちの１つだけを読み取る。ＲＡＩＤ１アレイの１つのディスクが故障しても、データはアレイの残りのディスクから読み取ることができる。ＲＡＩＤ１の拡張はＲＡＩＤ１０である。これは、ストライプされた、ミラーリングされた複数対のディスクのアレイを含む。ＲＡＩＤ１０は、ＲＡＩＤ  １の信頼性の特典とＲＡＩＤ  ０の性能の特典とを提供する。
【００１０】
ＲＡＩＤレベル４はパリティによるストライプを使用する。ＲＡＩＤ４アレイは、少なくとも３つの物理ディスクを要求する。例えば、ストライプサイズ４ＫＢの４つのディスクＲＡＩＤ４アレイを想定する。それらディスクのうち３つがデータディスクであり、４番目のディスクはパリティディスクである。この例では、コントローラは、８セクタの第１、第２、第３などのグループの論理ディスクの第１、第４、第７などの４ＫＢブロックを第１のデータディスクに記憶し、コントローラは、第１、第２、第３などの８セクタのグループの論理ディスクの第２、第５、第８などの４ＫＢブロックを、それぞれ第２のデータディスクに記憶し、コントローラは、８セクタのグループの第１、第２、第３などの論理ディスクの第３、第６、第９などの４ＫＢブロックを、それぞれ第３のデータディスクに記憶する。コントローラは、３つのデータディスクの第１の４ＫＢブロックのパリティ（バイナリＸＯＲまたは排他的論理和）を、パリティディスクの第１の４ＫＢブロックに記憶し、３つのデータディスクの第２の４ＫＢブロックのバイナリＸＯＲを、パリティディスクの第２の４ＫＢブロックに記憶し、３つのデータディスクの第３の４ＫＢのブロックのバイナリＸＯＲを、パリティディスクの第３の４ＫＢブロックに記憶するなどする。したがって、コントローラがデータディスクの１つまたは複数に書き込む場合はいつでも、コントローラは、すべてのデータディスクの対応するブロック中の全データのパリティを計算し、パリティディスクの対応するブロックにそのパリティを書き込む必要がある。コントローラがデータを読み取る場合、コントローラは、パリティディスクからではなくデータディスクのみから読み取る。
【００１１】
ＲＡＩＤ４アレイのデータディスクの１つが故障した場合、故障したデータディスクのデータは、残ったデータディスクとパリティディスクから読み取り、データを共にバイナリＸＯＲすることにより再作成することができる。これは、ディスクのパリティ冗長アレイを利用するために使用されるバイナリＸＯＲの特性である。これにより、ＲＡＩＤコントローラは、データディスクが故障した場合でもコンピュータにユーザデータを戻すことができる。
【００１２】
ＲＡＩＤレベル５は、専用パリティディスクがないことを除いてＲＡＩＤレベル４と類似している。その代わりに、パリティディスクは、アレイのストライプごとに別のディスクであり、したがってパリティはすべてのディスクにわたって分配することができる。特に、パリティディスクは、アレイに沿ってストライプごとに回転される。ＲＡＩＤレベル５は、パリティドライブの書き込み障害を解消することによりランダムＩ／Ｏ環境の書き込み性能を改善する。
【００１３】
上記から分かるように、冗長アレイのディスクが故障した場合、アレイは耐故障性ではなく、すなわち第２のディスクの故障に耐えることができない。この規則の例外は、ＲＡＩＤ５に類似のＲＡＩＤレベル６のように複数の冗長を提供し、ＲＡＩＤ６アレイが２つのディスク故障に耐えてユーザデータを提供し続けることができるように二次元パリティを提供するＲＡＩＤレベルである。すなわち、１つの故障したディスクを有するＲＡＩＤ６アレイが、完全に冗長ではないが、依然として耐故障性であるということである。ＲＡＩＤ６アレイの２つのディスクが一度故障すると、アレイは最早耐故障性ではなくなる。
【００１４】
非耐故障性（または非完全冗長）状態からディスクの冗長アレイをその耐故障性（または完全冗長）状態に回復するには、アレイを復元する必要がある。特に、故障したディスクのデータを再作成し、アレイに含めるために新しいディスクに書き込む必要がある。パリティ冗長アレイの場合、故障したディスクのデータの再作成は、残りのディスクからのデータの読み取りと、データを共にバイナリＸＯＲすることとを含む。ミラーリングされた冗長アレイの場合、故障したディスクのデータの再作成は、単に故障したディスクのミラーディスクからデータを読み取ることを含む。ＲＡＩＤコントローラが一度データを再作成すると、新しいディスクにそれを書き込み、故障したディスクをその新しいディスクでアレイ内に論理的に置き換え、そのアレイは耐故障性（または完全な冗長）が回復される、すなわち復元される。
【００１５】
ディスク故障が発生すると、ほとんどのＲＡＩＤコントローラは、システム管理者が冗長アレイを復元できるように、システム管理者に何らかの方法で通知する。これにより、管理者は故障したディスクを新しいディスクと物理的に交換することを要求し、ＲＡＩＤコントローラに復元を実行するよう命令することができる。いくつかのＲＡＩＤコントローラは、ディスクの故障に応じてアレイの復元を自動的に実行することにより、ディスクの冗長アレイが非耐故障性である（または完全な冗長でない）時間を低減するよう試みる。通常、管理者が最初にシステムの冗長アレイを構成する際、管理者は、ＲＡＩＤコントローラがディスク故障の際にアレイに新しいディスクとして自動的に使用することのできる、ＲＡＩＤコントローラに接続された１つまたは複数のスペアディスクを構成する。
【００１６】
他のＲＡＩＤコントローラが、ディスクによって発生した非致命的なエラー、すなわちディスクの故障の原因とならないエラーを検出することにより、アレイのディスクが故障するであろうことを予想しようと試みてきた。ＲＡＩＤコントローラは、管理者がアレイの復元を開始することができるように、システム管理者に、ディスクにエラーが発生していることを通知する。しかし、復元を実行するためにエラーの発生したディスクが復元によりアレイから取り除かれるので、そのアレイは、復元期間中は非耐故障性である（または完全な冗長でない）。これは、復元期間中はアレイの別のディスクの故障が発生した場合に致命的となる可能性がある。
【００１７】
したがって、アレイの復元を実行することで故障することが予想されるディスクを有するアレイが非耐故障性状態になることを防ぐための行動を取ることができるが、復元期間中にアレイが耐故障性（または完全な冗長）のままでいることを可能にするＲＡＩＤコントローラが必要となる。
【課題を解決するための手段】
【００１８】
一態様では、本発明は、冗長アレイが依然として耐故障性である間に、ディスクの冗長アレイのプリエンプティブ復元を実行するための方法を提供する。この方法は、冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定することを含む。この方法は、エラー閾値を超えたという判定に応答してスペアディスクにそのディスクのうちの１つからデータをコピーすることも含む。この方法は、コピーが完了した後で、冗長アレイの複数のディスクのうちの１つのディスクをスペアディスクで置き換えることも含む。
【００１９】
別の一態様では、本発明は、アレイは依然として耐故障性でありながら、ＲＡＩＤコントローラに接続されたディスクの冗長アレイのプリエンプティブ復元を実行するためのＲＡＩＤコントローラを提供する。ＲＡＩＤコントローラは、エラー閾値を記憶するメモリと、メモリに結合されたマイクロプロセッサとを含む。マイクロプロセッサは、冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定する。マイクロプロセッサはまた、エラー数が冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定したことに応答し、それら複数のディスクのうちの１つのディスクのデータをスペアディスクにコピーする。マイクロプロセッサはまた、データのコピーが完了した後で、冗長アレイの複数のディスクのうちの１つのディスクをスペアディスクで置き換える。
【００２０】
別の態様では、本発明は、冗長アレイが依然として耐故障性でありながら、ディスクの冗長アレイのプリエンプティブ復元を実行する方法を提供する。この方法は、冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定することを含む。この方法は、エラー閾値を超えたと判定したことに応答して、冗長アレイの複数のディスクのうちの第２のディスクからデータを読み取ることと、そのデータをスペアディスクに書き込むことも含む。冗長アレイの複数のディスクのうちの第２のディスクのデータは、複数のディスクのうちの１つのディスクのデータのミラーリングされたコピーである。この方法は、読み取りと書き込みが完了した後で、冗長アレイの複数のディスクのうちの１つのディスクをスペアディスクで置き換えることも含む。この方法は、読み取りと書き込みを実行し、したがって冗長アレイの耐故障性を維持しながら、第２のデータを含めてユーザ書き込み要求に応じて、冗長アレイの複数のディスクのうちの１つのディスクに第２のデータを書き込むことも含む。
【００２１】
別の態様では、本発明は、冗長アレイが依然として耐故障性でありながら、ディスクの冗長アレイのプリエンプティブ復元を実行する方法を提供する。方法は、冗長アレイの複数のディスクのうちの１つのディスクによるエラー数がエラー閾値を超えたと判定することも含む。この方法は、エラー閾値を超えたと判定したことに応答して、複数のディスクのうちの１つのディスクのデータを、冗長アレイの他のディスクのうちの複数のディスクから読み取った第２のデータから作成することと、その作成したデータをスペアディスクに書き込むことも含む。この方法は、作成することと書き込むことが完了した後で、冗長アレイの複数のディスクのうちの１つのディスクをスペアディスクで置き換えることも含む。この方法は、作成することと書き込むことを実行し、それにより冗長アレイの耐故障性を維持しながら、第３のデータを含むユーザ書き込み要求に応じて、冗長アレイの複数のディスクのうちの１つのディスクに第３のデータを書き込むことも含む。
【００２２】
別の態様では、本発明は、冗長アレイが依然として耐故障性でありながら、複数のディスクの冗長アレイのプリエンプティブ復元を実行する方法を提供する。この方法は、冗長アレイの複数のディスクのうちの１つのディスクを指定するユーザ入力を受信することを含む。この方法は、ユーザ入力を受信することに応答して、複数のディスクのうちの１つのディスクからデータをスペアディスクにコピーすることも含む。この方法は、コピーが完了した後で、冗長アレイの複数のディスクのうちの１つのディスクをスペアディスクで置き換えることも含む。
【００２３】
本発明の利点は、復元実行中にアレイを非耐故障性状態にせずに、すなわちプリエンプティブ復元中にアレイを耐故障性に保つことにより、複数のディスクの冗長アレイのデータ損失の可能性を低減することである。換言すれば、冗長アレイは、データ損失なしにプリエンプティブ復元中にディスクの故障に耐えることができるが、従来の復元中にはアレイはデータを損失せずにディスク故障に耐えることができない。さらに、パリティ冗長アレイに関して、危機的ディスクからスペアディスクにデータをコピーすることは、通常、アレイの他のディスクからの故障したディスクの従来の復元よりも時間はかからない。これは、コピーが、複数のディスクの読み取りと排他的論理和動作ではなく、１つのディスクの読み取りしか必要としないからである。最後に、一実施形態では、エラー閾値に達したことに応答してプリエンプティブ復元を自動的に実行することにより、危機的ディスクがアレイの一部である時間が低減される。これは、ユーザが通知を受信し、どのように続行するかを決定し、プリエンプティブ復元を開始する時間が解消されるからである。さらに、ユーザエラーの機会も低減される。
【発明を実施するための最良の形態】
【００２４】
図１を参照すると、本発明によるＲＡＩＤコントローラ１０２を含むコンピュータネットワーク１００が示されている。ネットワーク１００は、ＲＡＩＤコントローラ１０２に結合された１つまたは複数のホストコンピュータ１０４と、複数のディスク１４２、またはＲＡＩＤコントローラ１０２に結合されたディスクドライブ１４２を含む。
【００２５】
一実施形態では、ディスク１４２は、限定はしないが、ハードディスクドライブを含む。しかし、ディスク１４２は、限定はしないが、テープドライブまたは光ドライブのようないかなる恒久記憶装置をも含むことができる。ディスク１４２は、記憶装置転送媒体１１２を介してＲＡＩＤコントローラ１０２に結合される。記憶装置転送媒体１１２とそこで実行されるプロトコルとは、限定はしないが、ＦｉｂｒｅＣｈａｎｎｅｌ（ＦＣ）、拡張技術アタッチメント（ＡＴＡ）、シリアル拡張技術アタッチメント（ＳＡＴＡ）、スモールコンピュータシステムインターフェース（ＳＣＳＩ）、シリアルアタッチドＳＣＳＩ（ＳＡＳ）、ＨＩＰＰＩ、ＥＳＣＯＮ、ＦＩＣＯＮ、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｉｎｆｉｎｉｂａｎｄまたはこれらの関連する組合せを含むことができる。ディスク１４２とＲＡＩＤコントローラ１０２は、スタック化されたプロトコル、ＦｉｂｒｅＣｈａｎｎｅｌまたはインターネットＳＣＳＩ（ｉＳＣＳＩ）を介したＳＣＳＩなどを使用して通信することができる。
【００２６】
ディスク１４２は、冗長アレイ１１４にグループ化することができる。図１は、１つは４つのディスク１４２を含み、１つは３つのディスク１４２を含み、１つは６つのディスク１４２を含む、３つの冗長アレイ１１４を示す。冗長アレイ１１４は、ＲＡＩＤレベル１、２、３、４、５、６、１０、または５０など、良く知られたＲＡＩＤレベルのどれによっても構成される。さらに、本発明は、現在知られているＲＡＩＤレベルには限定されず、引き続き良さが分かったＲＡＩＤレベルによるディスクの冗長アレイ１１４でも利用することができる。また、本発明は、ＲＡＩＤ０アレイのような非冗長アレイにより利用することができる。最後に、本発明は、ＲＡＩＤ６アレイのように、単一冗長（すなわち、単一ディスクの故障だけには耐えられるアレイ）であっても複数冗長（すなわち、複数のディスクの故障に耐えられるアレイ）であっても、冗長アレイにより利用することができる。
【００２７】
ディスク１４２の冗長アレイ１１４は、ＲＡＩＤコントローラ１０２がホストコンピュータ１０４に単一論理ディスクとして提示する複数のディスク１４２である。ホストコンピュータ１１４がＲＡＩＤコントローラ１０２にユーザデータを論理ディスクに書き込むよう要求した場合、ＲＡＩＤコントローラ１０２は、ユーザデータを冗長アレイの１つまたは複数のディスク１４２に書き込み、また冗長データを冗長アレイ１１４の１つまたは複数の他のディスクに書き込む。冗長データとは、通常、様々なＲＡＩＤレベルにより、ユーザデータのミラーリングされたコピーまたはユーザデータからある形式で計算されたパリティデータである。ホストコンピュータ１１４がＲＡＩＤコントローラ１０２に引き続きユーザデータを提供するよう要求した場合に、ユーザデータと冗長データとが冗長アレイ１１４に書き込まれた後で、冗長アレイ１１４のディスク１４２の１つのディスクが故障したとしても、ユーザデータに加えて冗長データを書き込むことによりＲＡＩＤコントローラ１０２が引き続きユーザデータを提供することが可能になる。ミラーリングに基づく冗長アレイ１１４の場合、ＲＡＩＤコントローラ１０２は、故障したディスク１４２のミラーディスク１４２から故障したディスク１４２のデータを単に読み取るだけである。パリティに基づいた冗長アレイ１１４の場合、ＲＡＩＤコントローラ１０２は、非故障ディスク１４２に記憶されたデータを読み取り、そのデータのパリティを計算して故障したディスク１４２のデータを得る。
【００２８】
また、ディスク１４２のいくつかはスペアディスク１１６として構成されている。図１は、ＲＡＩＤコントローラ１０２に接続された２つのスペアディスク１１６を示す。スペアディスク１１６は、冗長アレイ１１４の一部ではないディスク１４２だが、冗長アレイ１１４のディスク１４２の故障に応じた従来の復元イベントまたは致命的でないディスク１４２のエラーに応じたプリエンプティブ復元イベントの際に、ＲＡＩＤコントローラ１０２が自動的に冗長アレイ１１４のディスク１４２を置き換えるためには使用可能である。
【００２９】
ホストコンピュータ１０４は、限定はしないが、ワークステーション、パーソナルコンピュータ、ノートブックコンピュータ、または携帯情報端末（ＰＤＡ）、ファイルサーバ、プリントサーバ、企業サーバ、メールサーバ、ウェブサーバ、データベースサーバ、部門別サーバなどを含む。図１の実施形態では、ホストコンピュータ１０４は、ホスト転送媒体１０８を介してＲＡＩＤコントローラ１０２に結合されている。ホスト転送媒体１０８と、そこで実行されるプロトコルとは、限定はしないが、ＦｉｂｒｅＣｈａｎｎｅｌ（ＦＣ）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｉｎｆｉｎｉｂａｎｄ、ＴＣＰ／ＩＰ、スモールコンピュータシステムインターフェース（ＳＣＳＩ）、ＨＩＰＰＩ、トークンリング、Ａｒｃｎｅｔ、ＦＤＤＩ、ＬｏｃａｌＴａｌｋ、ＥＳＣＯＮ、ＦＩＣＯＮ、ＡＴＭ、ＳＡＳ、ＳＡＴＡなど、およびそれらの妥当な組合せを含むことができる。ＲＡＩＤコントローラ１０２は、ホストコンピュータ１０４とディスク１４２の冗長アレイ１１４の間でホスト転送媒体１０８を介してユーザデータを転送するために、ホストコンピュータ１０４からホスト転送媒体１０８を介してＩ／Ｏ要求を受信する。ホスト転送媒体１０８は、リンク、スイッチ、ルータ、ハブ、ディレクタなどを含むネットワークの一部であってよい。
【００３０】
ＲＡＩＤコントローラ１０２は、メモリ１２４、マイクロプロセッサ１２６、管理コントローラ１２８、バッファメモリ１３２、バスブリッジ１３４、ホストインターフェースアダプタ１３６、および記憶装置インターフェースアダプタ１３８を含む。一実施形態では、ホストインターフェースアダプタ１３６、記憶装置インターフェースアダプタ１３８、およびマイクロプロセッサ１２６は、図示するように対応のローカルバスでそれぞれにバスブリッジ１３４に結合されている。一実施形態では、ローカルバスは、限定はしないがＰＣＩ、ＰＣＩ−Ｘ、ＣｏｍｐａｃｔＰＣＩ、またはＰＣＩ  Ｅｘｐｒｅｓｓバスを含む高速ローカルバスを含む。一実施形態では、バスブリッジ１３４は、バッファメモリ１３２を制御するためのメモリコントローラも含む。一実施形態では、バッファ１３２は、バッファメモリ１３２を制御するためのメモリコントローラも含む。一実施形態では、バッファ１３２とバスブリッジ１３４とは、ダブルデータレート（ＤＤＲ）メモリバスにより結合される。バスブリッジ１３４は、マイクロプロセッサ１２６、ホストインターフェースアダプタ１３６、および記憶装置インターフェースアダプタ１３８のそれぞれが、相互に通信し、バッファ１３２とデータをやり取りすることを可能にする。一実施形態では、マイクロプロセッサ１２６は、Ｐｅｎｔｉｕｍ（登録商標）  ＩＩＩマイクロプロセッサを含み、ノースブリッジと総称されるバスブリッジなどの第２のバスブリッジによりローカルバスに結合されている。
【００３１】
マイクロプロセッサ１２６は、マイクロプロセッサ１２６で実行するためのプログラム命令とデータとを記憶するために、メモリ１２４にも結合されている。特に、メモリ１２４は、本明細書に記載する冗長アレイ１１４のプリエンプティブ復元を実行する際に使用される、重大ディスクエラー閾値１２２またはエラー閾値１２２を記憶する。一実施形態では、メモリ１２４は、ＲＡＩＤコントローラ１０２に接続されたディスク１４２それぞれに対して指定されたエラー閾値１２２を記憶する。一実施形態では、ユーザは、エラー閾値１２２を指定する。別の実施形態では、エラー閾値１２２は事前に設定されている。図１は、直接マイクロプロセッサ１２６に直接結合されたメモリ１２４に記憶されたエラー閾値１２２を示しているが、エラー閾値１２２は、ＲＡＩＤコントローラ１０２によりアクセス可能ないかなるメモリ、例えばバッファ１３２、管理コントローラ１２８に結合されたメモリ、またはディスク１４２に記憶することができる。
【００３２】
一実施形態では、管理コントローラ１２８は、拡張Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ（登録商標）Ｅｌａｎ（商標）マイクロコントローラを含み、サウスブリッジと総称されるバスブリッジなどの第３のバスブリッジでローカルバスに結合されている。一実施形態では、管理コントローラ１２８が実行するためのプログラム命令およびデータを記憶するために、管理コントローラ１２８はメモリにも結合されている。システム管理者などのユーザが入力および出力を実行するために、管理コントローラ１２８は管理転送媒体１０６に結合されている。管理転送媒体１０６は、限定はしないが、ＲＳ−２３２、Ｅｔｈｅｒｎｅｔ（登録商標）、ＦｉｂｒｅＣｈａｎｎｅｌ、およびＩｎｆｉｎｉｂａｎｄなどを含むことができる。
【００３３】
管理コントローラ１２８は、ＲＡＩＤコントローラ１０２を構成し管理するためのユーザ入力を受信するが、特にエラー閾値１２２を受信することができる。別の実施形態では、エラー閾値１２２は、ホストコンピュータ１０４を介してユーザにより提供される。一実施形態では、管理コントローラ１２８は、ユーザからの入力を、ＲＳ−２３２インターフェースなどのシリアルインターフェースを介して受信する。一実施形態では、管理コントローラ１２８は、Ｅｔｈｅｒｎｅｔ（登録商標）インターフェースを介してユーザ入力を受信し、ウェブベースの構成および管理ユーティリティを提供する。管理コントローラ１２８は、この構成および管理機能に加え、ファンまたは電源供給などのＲＡＩＤコントローラ１０２の、またはディスク１４２の危機的構成要素の温度、存在、状態の監視などの監視機能も実行する。
【００３４】
記憶装置インターフェースアダプタ１３８は、記憶装置転送媒体１１２に結合される。一実施形態では、記憶装置インターフェースアダプタ１３８は、２つの記憶装置転送媒体１１２とインターフェースするための２つのポートを含む。ホストインターフェースアダプタ１３６は、ホスト転送媒体１０８に結合されている。一実施形態では、ホストインターフェースアダプタ１３６は、２つのホスト転送媒体１０８にインターフェースするための２つのポートを含む。記憶装置インターフェースアダプタ１３８は、ＲＡＩＤコントローラ１０２と記憶装置転送媒体１１２とをインターフェースする。記憶装置インターフェースアダプタ１３８は、冗長アレイ１１４が、特に冗長アレイ１１４を含むディスク１４２がＲＡＩＤコントローラ１０２と通信することを可能にするために必要なプロトコルを実行する。例えば、一実施形態では、記憶装置インターフェースアダプタ１３８は、ファイバーチャネルパケットをディスク１４２とＲＡＩＤコントローラ１０２との間で転送するためのファイバーチャネルプロトコルを実行する、ＪＮＩ社（商標）開発のＰＣＩ−Ｘコントローラに対するＪＮＩＣ−１５６０Ｍｉｌａｎｏデュアルチャネルファイバーチャネルを含む。別の実施形態では、記憶装置インターフェースアダプタ１３８は、ＱＬｏｇｉｃ社製のＰＣＩ−Ｘコントローラに対するＩＳＰ２３１２デュアルチャネルＦｉｂｒｅＣｈａｎｎｅｌを含む。記憶装置インターフェースアダプタ１３８は、データを記憶装置転送媒体１１２とバッファ１３２との間でバスブリッジ１３４を介して直接転送するための、直接メモリアクセスコントローラ（ＤＭＡＣ）を含む。
【００３５】
ホストインターフェースアダプタ１３６は、ＲＡＩＤコントローラ１０２とホスト転送媒体１０８とをインターフェースする。ホストインターフェースアダプタ１３６は、ホスト１０４がＲＡＩＤコントローラ１０２と通信できるようにするために必要なプロトコルを実行する。例えば、一実施形態では、ホストインターフェースアダプタ１３６は、ファイバーチャネルパケットをホストコンピュータ１０４とＲＡＩＤコントローラ１０２との間で転送するためのファイバーチャネルプロトコルを実行するＰＣＩ−Ｘコントローラに対するＪＮＩＣ−１５６０  Ｍｉｌａｎｏデュアルチャネルファイバーチャネルを含み、別の実施形態では、ホストインターフェースアダプタ１３６はＱＬｏｇｉｃ  ＩＳＰ２３１２を含む。ホストインターフェースアダプタ１３６は、ホスト転送媒体１０８とバッファ１３２との間でバスブリッジ１３４を介してデータを直接転送するための、直接メモリアクセスコントローラ（ＤＭＡＣ）を含む。
【００３６】
マイクロプロセッサ１２６は、ホストインターフェースアダプタ１３６からホストコンピュータ１０４Ｉ／Ｏ要求を受信し、要求を処理する。この要求の処理は、様々な機能を含む場合がある。例えば、論理ブロック番号と、データが書き込まれるべき冗長アレイ１１４のＩ／Ｏ要求で指定された転送されるべきデータのブロック数とは、冗長アレイ１１４を含むディスク１４２の適切な物理ブロック番号とブロック数には対応しない。したがって、ホストＩ／Ｏ要求で指定された論理ブロック番号は適切な物理ブロック番号、ブロック数に翻訳される必要があり、冗長アレイ１１４を含むＲＡＩＤコントローラ１０２とディスク１４２との間における１つまたは複数のデータ転送を実行する際にディスク１４２を使用する必要がある。この翻訳機能は、マイクロプロセッサ１２６によって実行される。一実施形態では、マイクロプロセッサ１２６は、良く知られたＲＡＩＤ技術により翻訳を実行する。翻訳の実行後、マイクロプロセッサ１２６は、ディスク１４２とバッファ１３２との間でデータ転送を実行するために、記憶装置インターフェースアダプタ１３８をプログラムする。さらにマイクロプロセッサ１２６は、ホストコンピュータ１０４とバッファ１３２との間でデータ転送を実行するようホストインターフェースアダプタ１３６をプログラムする。したがって、ホストコンピュータ１０４から冗長アレイ１１４にデータを書き込むためのホストＩ／Ｏ要求を処理する際、マイクロプロセッサ１２６は、データをホストコンピュータ１０４からバッファ１３２に転送するためにホストインターフェースアダプタ１３６をプログラムし、データがバッファ１３２に受信された後、冗長アレイ１１４を含むディスク１４２の翻訳された適切な物理ブロック番号にバッファ１３２からのデータを転送するために、マイクロプロセッサ１２６は記憶装置インターフェースアダプタ１３８をプログラムする。反対に、冗長アレイ１１４からホストコンピュータ１０４にデータを読み取るためのホストＩ／Ｏ要求を処理する際、マイクロプロセッサ１２６は、冗長アレイ１１４を含むディスク１４２の翻訳された適切な物理ブロック番号からバッファ１３２にデータを転送するよう記憶装置インターフェースアダプタ１３８をプログラムし、そのデータがバッファ１３２に受信された後で、マイクロプロセッサ１２６は、そのデータをバッファ１３２からホストコンピュータ１０４に転送するようホストインターフェースアダプタ１３６をプログラムする。マイクロプロセッサ１２６は、データ転送を実行するために、バッファ１３２の部分の割り当てを管理する機能も実行する。一実施形態では、マイクロプロセッサ１２６は、良く知られたキャッシング技術により冗長アレイ１１４とホストコンピュータ１０４との間のＩ／Ｏ性能を改善する目的で、バッファ１３２にバッファされているデータの部分をキャッシュするためのキャッシュメモリとしてバッファ１３２も管理する。一実施形態では、マイクロプロセッサ１２６は、パリティデータを冗長データとして使用するあるＲＡＩＤレベル、例えばＲＡＩＤレベル５で要求されたデータの排他的論理和動作を実行する。一実施形態では、マイクロプロセッサ１２６は、冗長パリティデータを生成するために、ユーザデータに対して排他的論理和動作を実行するための専用の排他的論理和回路をプログラムする。
【００３７】
一実施形態では、マイクロプロセッサ１２６、バッファ１３２、バスブリッジ１３４、および管理コントローラ１２８は、ホストインターフェースアダプタ１３６と記憶装置インターフェースアダプタ１３８からなる第２の回路基板にローカルバスバックプレーンを介して結合された第１の回路基板に含まれる。別の実施形態では、管理コントローラ１２８は、ＲＡＩＤコントローラ１０２の他の素子を含む回路基板とは別個の回路基板上に構成される。一実施形態では、ローカルバスバックプレーンは、パッシブでありホットプラグ可能である。
【００３８】
図１に示したＲＡＩＤコントローラ１０２は、例えばネットワーク接続された記憶（ＮＡＳ）、または記憶域ネットワーク（ＳＡＮ）の一部として提供するために、ホストコンピュータ１０４にネットワーク接続されたスタンドアロンＲＡＩＤコントローラであってよい。しかし、本発明は、スタンドアロンＲＡＩＤコントローラ１０２には限定されない。むしろ、ＲＡＩＤコントローラ１０２は、限定はしないが図５および６に示した代替形態を含めて、他の方法でホストコンピュータ１０４に結合することができる。
【００３９】
いまにも故障しそうなディスク１４２を有しているが、冗長アレイ１１４が依然として耐故障性のままにプリエンプティブ復元を実行するように、すなわちいまにも故障しそうなディスクが依然として冗長アレイ１１４に含まれており動作中でありながら冗長アレイ１１４のプリエンプティブ復元を実行するようにＲＡＩＤコントローラ１０２を構成すると有利である。一実施形態によれば、一般に、プリエンプティブ復元は、コピー完了後に、危機的ディスク１４２からスペアディスク１１６にデータをコピーし、危機的ディスク１４２を冗長アレイ１１４のスペアディスク１１６で置き換えたことに呼応して、ＲＡＩＤコントローラ１０２が、エラー閾値１２２に基づいて、冗長アレイ１１４のディスク１４２の１つのディスク（「危機的ディスク」）がユーザ定義による閾値を超えるという欠陥の可能性を有すると判定することを含む。ＲＡＩＤコントローラ１０２は、危機的ディスク１４２からデータをスペアディスク１１６にコピー中に、ユーザＩ／Ｏ要求に応じてユーザデータを危機的ディスクに書き込み続ける。ユーザデータが、危機的ディスク１４２から既にコピーされたスペアディスク１１６の位置に書き込まれている場合（例えば、高水準未満）、ＲＡＩＤコントローラ１０２は、そのユーザデータをスペアディスク１１６にも書き込む。
【００４０】
次に図２Ａおよび図２Ｂを参照すると、本発明による冗長アレイ１１４のプリエンプティブ復元を実行するための、図１のＲＡＩＤコントローラ１０２の動作を説明するフローチャートが示されている。フローはブロック２０２から始まる。
【００４１】
ブロック２０２で、ユーザは、図１のディスク１４２の冗長アレイ１１４と少なくとも１つのスペアディスク１１６とを構成する。一実施形態では、冗長アレイ１１４を構成するということは、冗長アレイ１１４のＲＡＩＤレベルと、冗長アレイ１１４のディスク１４２の数および／または記憶容量とを指定するということである。一実施形態では、少なくとも１つのスペアディスク１１６を構成するということは、冗長アレイ１１４の復元に対して使用可能とするために、使用可能なディスク１４２の中からＲＡＩＤコントローラ１０２に対してスペアディスク１１６の数を指定することを含む。一実施形態では、各スペアディスク１１６は特別な冗長アレイ１１４に対して明確に割り当てられる。ここで、別の実施形態では、スペアディスク１１６は、一般には、スペアディスク１１６を必要とする冗長アレイ１１４で使用されるように割り当てられる。フローはブロック２０４に進む。
【００４２】
ブロック２０４で、ユーザは、図１のエラー閾値１２２を指定し、ＲＡＩＤコントローラ１０２はエラー閾値１２２を記憶する。一実施形態では、重大なエラーとは、訂正可能なエラーかまたは媒体の故障による訂正不可能なエラーである。訂正可能なエラーは、媒体に対する読み取りまたは書き込みを行おうとする際にディスク１４２に発生するものであるが、その動作を再試行することにより、またはディスク１４２の媒体のスペアセクタなどの別のセクタにエラーの原因となったセクタを再マッピングすることにより、ディスク１４２が訂正することができたエラーである。一実施形態では、ディスク１４２は、ＣＨＥＣＫ  ＣＯＮＤＩＴＩＯＮ状態とＲＥＣＯＶＥＲＲＥＤ  ＥＲＲＯＲのＳＣＳＩセンスキー（０ｘ０１）をＳＣＳＩ仕様で規定されているように戻すことにより、訂正可能エラーを報告する。媒体の故障による訂正不可能なエラーは、媒体に対して読み取りまたは書き込みを試行する際にディスク１４２に発生するエラーであり、ディスク１４２が訂正することのできなかったエラーである。一実施形態では、ディスク１４２は、ＣＨＥＣＫ  ＣＯＮＤＩＴＩＯＮ状態とＭＥＤＩＵＭ  ＥＲＲＯＲのＳＣＳＩセンスキー（０ｘ０３）を戻すことにより、訂正可能なエラーを報告する。通常、ＲＡＩＤコントローラ１０２は、ディスク１４２にそのセクタを再マッピングすることを明示的に命令するか、またはＲＡＩＤコントローラ１０２自体がディスク１４２にスペアセクタを確保し、確保されたスペアセクタを使用して再マッピングを実行して、エラーの原因となったセクタを再マッピングすることにより、媒体の故障による訂正不可能なエラーを訂正することができる。このＳＣＳＩエラーコードは、ディスク１４２が重大なエラーを報告することのできる方法を説明するために一例として与えられる。しかし本発明は、特定ディスク１４２のプロトコルまたは重大なエラーを報告する方法に限定するものではなく、様々なプロトコルを利用することができる。一実施形態では、エラー閾値１２２は、複数のエラー閾値の組合せを含むことができる。例えば、ユーザは、ブロック２１２に関して後述するように、訂正可能なエラー数の閾値１２２と、媒体故障による訂正不可能なエラー数の別個の閾値１２２とを指定することができる。フローはブロック２０６に進む。
【００４３】
ブロック２０６で、ＲＡＩＤコントローラ１０２は、ホストコンピュータ１０４からのＩ／Ｏ要求に応答して、冗長アレイ１１４のディスク１４２に読み取りコマンドと書き込みコマンドとを発行する。すなわち、ＲＡＩＤコントローラ１０２は、冗長アレイ１１４に対して正常な動作を実行する。フローはブロック２０８に進む。
【００４４】
ブロック２０８で、ＲＡＩＤコントローラ１０２は、冗長アレイ１１４に対して正常な動作を実行している間、ディスク１４２に対して発行された読み取りコマンドと書き込みコマンドとに呼応して発生した重大エラー数の計数も維持する。一実施形態では、ＲＡＩＤコントローラ１０２は、ディスク１４２によって報告された媒体の故障による訂正可能なエラーと訂正不可能なエラーの別々の計数を維持する。さらに、不活動期間中、例えばユーザＩ／Ｏ要求に呼応して冗長アレイ１１４のディスク１４２が読み取られ、または書き込まれていない場合、ＲＡＩＤコントローラ１０２は重大エラー計数に関する情報についてディスク１４２それぞれをポーリングする。ほとんどのディスクは、重大エラー計数を含む業界標準の自己監視、分析および報告技術（ＳＭＡＲＴ）データを維持する。一実施形態では、エラーデータに関するディスクのポーリングは、ＳＭＡＲＴデータに関するディスクのポーリングを含む。フローはブロック２１２に続く。
【００４５】
ブロック２１２で、ＲＡＩＤコントローラ１０２は、危機的ディスク１４２と称される冗長アレイ１１４のディスク１４２に対する重大なエラー数が、正常な読み取りコマンドまたは書き込みコマンドに呼応して、またはブロック２０８により重大エラー情報に関するポーリングに呼応して、その重大エラー閾値１２２に達したと判定する。一実施形態では、ＲＡＩＤコントローラ１０２は、訂正可能なエラー数と媒体故障による訂正不可能なエラー数との合計がエラー閾値１２２に達した場合、危機的ディスク１４２がその重大エラー閾値１２２に達したと判定し、したがってプリエンプティブ復元をトリガすることができる。一実施形態では、危機的ディスク１４２が訂正可能なエラー閾値１２２に達した訂正可能なエラー数を生成した場合、またはまたは危機的ディスク１４２が媒体の故障閾値１２２による訂正不可能なエラーに達した媒体の故障による訂正不可能なエラー数を生成した場合、またはそれが両方に達した場合、ＲＡＩＤコントローラ１０２は、危機的ディスク１４２がその重大なエラー閾値１２２に達したと判定し、したがってプリエンプティブ復元をトリガすることができる。フローはブロック２１４に進む。
【００４６】
ブロック２１４で、ＲＡＩＤコントローラ１０２は、バックグラウンドコピーのターゲットとなるべきスペアディスク１１６の１つを自動プリエンプティブ復元の一部として選択する。フローはブロック２１６に進む。
【００４７】
ブロック２１６で、ＲＡＩＤコントローラ１０２は、ブロック２１４で選択されたスペアディスク１１６への危機的ディスク１４２に対してデータのバックグラウンドコピーを実行する。ＲＡＩＤコントローラ１０２は、冗長アレイ１１４が依然として耐故障性であり、危機的ディスク１４２が依然として機能している冗長アレイ１１４の一部である間、すなわちＲＡＩＤコントローラ１０２が、ユーザＩ／Ｏ要求に呼応して依然として危機的ディスク１４２に対して読み取りと書き込みを行っている間、コピーを実行する。一実施形態では、ＲＡＩＤコントローラ１０２は危機的ディスク１４２の開始点の位置からのデータの読み取りと、スペアディスク１１６上の対応する位置へのデータの書き込みとを開始し、引き続き危機的ディスク１４２およびスペアディスク１１６の終了点に進む。ＲＡＩＤコントローラ１０２は、引き続きデータをコピーし、高水準のコピーを維持する。すなわち、高水準とは、危機的ディスク１４２からスペアディスク１１６にコピーされた最後のデータの位置のことである。フローはブロック２１８に進む。
【００４８】
ブロック２１８で、ブロック２１６に記載したように、ＲＡＩＤコントローラ１０２は、正常なユーザＩ／Ｏ要求に呼応して、バックグラウンドコピー中に危機的ディスク１４２に対し読み取りコマンドと書き込みコマンドを発行し続ける。書き込みコマンドが、既にバックグラウンドコピーの一部として書き込まれているスペアディスク１１６の位置に対応する危機的ディスク１４２の位置に対するものである場合、ＲＡＩＤコントローラ１０２はユーザデータもスペアディスク１１６に書き込むが、そうでない場合は、ブロック２１６によりユーザデータが最終的にバックグラウンドコピーによりスペアディスク１４２にコピーされるので、ＲＡＩＤコントローラ１０２はユーザデータを危機的ディスク１４２にしか書き込まない。一実施形態では、書き込みコマンドが高水準未満の位置に対するものである場合、ＲＡＩＤコントローラ１０２はユーザデータをスペアディスク１１６にも書き込むが、そうでない場合、ＲＡＩＤコントローラ１０２は、危機的ディスク１４２に書き込むだけである。読み取りコマンドは危機的ディスク１４２に対してのみ発行され、スペアディスク１１６に対しては発行されない。フローは決定ブロック２２２に進む。
【００４９】
決定ブロック２２２で、ＲＡＩＤコントローラ１０２は、ブロック２１６のバックグラウンドコピー中にディスク１４２が故障したか否かを判定する。ディスク故障は、限定はしないが、以下の様々な状態のいずれをも含むことができる。ディスク１４２の故障は、恒久的故障、すなわちディスク１４２が最早読み取りも書き込みも不可能な故障を含むことができる。ディスク１４２の故障は、ディスク１４２により報告された不良セクタを再マッピングするなどにより、ディスク１４２が回復不可能であり、ＲＡＩＤコントローラ１０２が回復不可能な、ディスク１４２で発生したエラーを含む場合がある。ディスク１４２の故障は、ディスク１４２が所定時間後にコマンドに応答しない、すなわちコマンドがタイムアウトしている状態を含むことができる。ディスク１４２の故障は、ディスク１４２がハードウェアエラーを示す、ＮＯＴ  ＲＥＡＤＹまたはＨＡＲＤＷＡＲＥ  ＥＲＲＯＲのＳＣＳＩセンスキー、またはＳＡＴＡドライブ準備不完了状態（ＲＤＹはセットされず）、書き込み障害状態（ＷＦＴがセットされた）、データアドレスマークが見つからない状態（ＮＤＡＭビットがセットされている）、トラック０が見つからない状態（ＮＴＫ０ビットがセットされた）、ＩＤが見つからない状態（ＩＤＮＦビットがセットされた）、またはホスト状況により不良とマーク付けされたセクタ（ＢＢＫビットがセットされた）などのエラーコードを提供する状態を含む場合がある。ディスク１４２の故障は、ディスク１４２が、そのコマンドが既に再び試みられた後でそのコマンドがアボートされたことを示す、ＡＢＯＲＴＥＤ  ＣＯＭＭＡＮＤ（０ｘ０Ｂ）のＳＣＳＩセンスキーまたはＳＡＴＡコマンドアボート状態（ＡＢＲＴビットがセットされている）などのエラーコードを提供する状態を含む場合がある。ディスク１４２の故障は、ディスク１４２が、所定の回数だけ媒体エラーを示すＳＣＳＩ  ＭＥＤＩＵＭ  ＥＲＲＯＲセンスキーまたはＳＡＴＡ訂正不可能データ状態（ＵＮＣビットがセットされた）などのエラーコードを提供する状態を含む場合がある。ディスク１４２の故障は、ユーザがソフトウェア制御により物理的または論理的にディスク１４２を冗長アレイ１１４から取り除くことを含む場合がある。バックグラウンドコピー中にディスク１４２が故障した場合、フローはブロック２３２に進み、そうでない場合、フローはブロック２２４に進む。
【００５０】
ブロック２２４で、ブロック２１６の危機的ディスク１４２からスペアディスク１１６へのバックグラウンドコピーが一度完了すると、ＲＡＩＤコントローラ１０２は、冗長アレイ１１４でのディスク１４２に対するＩ／Ｏ動作をクエースする。すなわち、ＲＡＩＤコントローラ１０２は、Ｉ／Ｏ要求に呼応してディスク１４２に対し読み取りと書き込みとを発行するのではなく、冗長アレイ１１４のディスク１４２に対するすべての顕著な読み取りコマンドまたは書き込みコマンドを完了し、ホストコンピュータ１０４から受信したＩ／Ｏ要求をキューに入れる。一実施形態では、ＲＡＩＤコントローラ１０２は、他の冗長アレイ１１４に対するＩ／Ｏ動作、すなわち危機的ディスク１４２を含む冗長アレイ１１４以外の冗長アレイ１１４に対する実行を継続することができる。フローはブロック２２６に進む。
【００５１】
ブロック２２６で、ＲＡＩＤコントローラ１０２は、冗長アレイ１１４の危機的ディスク１４２を、危機的ディスク１４２からのデータのコピーを有するスペアディスク１１６で置き換える。すなわち、ＲＡＩＤコントローラ１０２は、論理的に危機的ディスク１４２を冗長アレイ１１４から取り除き、冗長アレイ１１４にスペアディスク１１６を含める。したがって、キューに入れられたＩ／Ｏ要求と、後続のＩ／Ｏ要求とは、危機的ディスク１４２（最早冗長アレイ１１４の部分ではないが）にではなく、スペアディスク１１６に対する読み取りと書き込みとに変換される（最早スペアディスク１１６ではないが現在冗長アレイ１１４の部分である）。フローはブロック２２８に進む。
【００５２】
ブロック２２８で、ＲＡＩＤコントローラ１０２は、冗長アレイ１１４に対するＩ／Ｏ動作をアンクエースする。すなわち、ＲＡＩＤコントローラ１０２は、キューに入れられたＩ／Ｏ要求といかなる後続のＩ／Ｏ要求とに呼応して、冗長アレイ１１４のディスク１４２に対して読み取りコマンドと書き込みコマンドの発行を開始し、特にバックグラウンドコピー（最早スペアディスク１１６ではないが、冗長アレイ１１４の部分である）のターゲットであったスペアディスク１１６に対して読み取りと書き込みを発行し、危機的ディスク１４２に対しては読み取りまたは書き込みを発行しない（最早冗長アレイ１１４の部分ではない）。フローはブロック２２８で終了する。
【００５３】
ブロック２３２で、ＲＡＩＤコントローラ１０２は、バックグラウンドコピー中にディスク１４２の故障が発生したという決定ブロック２２２を検出したので、ＲＡＩＤコントローラ１０２は冗長アレイ１１４に対するＩ／Ｏ動作をクエースする。フローは決定ブロック２３４に進む。
【００５４】
決定ブロック２３４で、ＲＡＩＤコントローラ１０２は、故障したのはスペアディスク１１６だったのか否かを判定する。スペアディスクであった場合、フローはブロック２４８に進み、そうでない場合、フローはブロック２３６に進む。
【００５５】
ブロック２３６で、冗長アレイ１１４のディスク１４２の１つが故障したので、ＲＡＩＤコントローラ１０２は冗長アレイ１１４から故障したディスク１４２を取り除く。その結果、ＲＡＩＤレベル１、２、３、４、５、１０または５０アレイなどの単一冗長アレイの場合、冗長アレイ１１４は最早耐故障性ではない。ＲＡＩＤレベル６アレイのような複数の冗長アレイの場合、冗長アレイ１１４は依然として耐故障性である場合があるが、完全には冗長でない。フローはブロック２３８に進む。
【００５６】
ブロック２３８で、ＲＡＩＤコントローラ１０２は、正常な復元、すなわち故障したディスク１４２のデータの復元に対するブロック２１６のバックグラウンドコピーのターゲットであったスペアディスク１１６を、最早完全に冗長ではなく、元々単一の冗長アレイ１１４の場合は最早耐故障性ではない冗長アレイ１１４の残りのディスク１４２の１つまたは複数のデータを読み取ることにより選択する。フローは決定ブロック２４２に進む。
【００５７】
決定ブロック２４２で、ＲＡＩＤコントローラ１０２は、バックグランドコピーに失敗したディスク１４２が危機的ディスク１４２であったか否かを判定する。危機的ディスク１４２であった場合、フローはブロック２４４に進み、そうでなかった場合、フローはブロック２５４に進む。
【００５８】
ブロック２４４で、ＲＡＩＤコントローラ１０２は、冗長アレイ１１４の正常な復元をバックグランドコピーの高水準から開始する。すなわち、ＲＡＩＤコントローラ１０２は、高水準でアレイ１１４の残りのディスク１４２の読み取りと、故障したディスク１４２のデータの復元と、高水準でのスペアディスク１１６への復元されたデータの書き込みとを開始する。バックグラウンドコピー中に故障したのが危機的ディスク１４２であったためにブロック２４４に到達したので、高水準より高いデータしか復元しなくてよい。有利には、これは、スペアディスク１１６全体の正常な復元が要求された場合よりも、さらに速い復元を提供する。最終的に、ＲＡＩＤコントローラ１０２がブロック２４６の後などにスペアディスク１１６全体を一度復元すると、ＲＡＩＤコントローラ１０２は冗長アレイ１１４にスペアディスク１１６を追加することになる。フローはブロック２４６に進む。
【００５９】
ブロック２４６で、ＲＡＩＤコントローラ１０２は、アレイ１１４へのＩ／Ｏ動作をアンクエースする。正常な復元の実行中に、アレイ１１４の一部として復元中のスペアディスク１１６に書き込むことによりＩ／Ｏ書き込み動作が実行され、元の冗長アレイ１１４の残りのディスク１４２の１つまたは複数を読み取ることによりＩ／Ｏ読み取り動作が実行される。パリティ冗長アレイ１１４の場合、ホストコンピュータ１０４に提供するためのデータを復元する。フローはブロック２４６で終了する。
【００６０】
ブロック２４８で、スペアディスク１１６が故障したので、ＲＡＩＤコントローラ１０２は別のスペアディスク１１６を将来のプリエンプティブ復元に関するバックグラウンドコピーのターゲットとして選択する。一実施形態では、コントローラ１０２は、ユーザにより事前に割り当てられたスペアディスク１１６のプールから別のスペアディスク１１６を自動的に選択する。一実施形態では、ユーザは、別のスペアディスク１１６を選択する。使用可能なスペアディスク１１６がない場合、新しいスペアディスク１１６をＲＡＩＤコントローラ１０２に接続するようユーザに対してプロンプト表示される。フローはブロック２５２に進む。
【００６１】
ブロック２５２で、ＲＡＩＤコントローラ１０２は、冗長アレイ１１４へのＩ／Ｏ動作をアンクエースする。フローは、プリエンプティブ復元の別の試行のバックグラウンドコピーを実行するブロック２１６に戻る。
【００６２】
ブロック２５４で、ＲＡＩＤコントローラ１０２は、スペアディスク１１６の開始時点から冗長アレイ１１４の正常な復元を開始する。すなわち、ＲＡＩＤコントローラ１０２は、それらの開始時点でのアレイ１１４の残りのディスク１４２の読み取りと、故障したディスク１４２データのデータの復元と、復元されたデータのスペアディスク１１６への開始時点での書き込みとを開始する。バックグラウンドコピー中に故障したのは危機的ディスク１４２ではなかったためブロック２４４に到達したので、故障したディスク１４２の全データを復元する必要がある。最終的に、ＲＡＩＤコントローラ１０２がブロック２４６の後などに一度スペアディスク１１６全体を復元すると、ＲＡＩＤコントローラ１０２はスペアディスク１１６を冗長アレイ１１４に追加する。フローはブロック２４６に進む。
【００６３】
次に図３Ａおよび図３Ｂを参照すると、本発明の代替形態により冗長アレイのプリエンプティブ復元を実行するための、図１のＲＡＩＤコントローラの動作を説明するフローチャートが示されている。図３Ａおよび図３Ｂは図２Ａおよび図２Ｂに類似しており、類似の参照番号による要素は類似である。しかし、図３Ａは、ブロック２０２に取って代わるブロック３０２と、ブロック２１６に取って代わるブロック３１６とを含む。
【００６４】
ブロック３０２で、ユーザは、ＲＡＩＤ  １またはＲＡＩＤ  １０冗長アレイ１１４に限定はしないがこれらを含み、また図１の少なくとも１つのスペアディスク１１６を含むディスク１４２のミラーリングされたアレイ１１４を特別に構成する。
【００６５】
ブロック３１６で、図２Ａのブロック２１６におけるようにスペアディスク１１６への危機的ディスク１４２のデータのコピーを実行するのではなく、ＲＡＩＤコントローラ１０２は、ブロック２１４で選択されたスペアディスク１１６への危機的ディスク１４２のミラーリングされたディスク１４２のデータのバックグラウンドコピーを実行する。
【００６６】
他の点でも、図３Ａおよび図３Ｂは図２Ａおよび図２Ｂに類似している。よく見ると、図２Ａおよび図２Ｂの実施形態を超える図３Ａおよび図３Ｂの実施形態の潜在的な利点は、既に故障に近づいている可能性のある危機的ディスク１４２へのプリエンプティブ復元中におけるアクセスを低減し、したがって潜在的には危機的ディスク１４２の故障の可能性を低減することである。
【００６７】
次に図４Ａおよび図４Ｂを参照すると、本発明の代替形態により冗長アレイのプリエンプティブ復元を実現するための、図１のＲＡＩＤコントローラの動作を説明するフローチャートが示されている。図４Ａおよび図４Ｂは図２Ａおよび図２Ｂに類似しており、類似の参照番号の要素は類似である。しかし、図４Ａは、ブロック２０２に取って代わるブロック４０２と、ブロック２１６に取って代わるブロック４１６とを有する。
【００６８】
ブロック４０２で、ユーザは、冗長アレイ１１４のＲＡＩＤ３、４、５、６または５０および図１の少なくとも１つのスペアディスク１１６に限定はしないがこれらを含むディスク１４２のパリティ冗長アレイ１１４を特に構成する。
【００６９】
ブロック４１６で、図２Ａのブロック２１６のようにスペアディスク１１６への危機的ディスク１４２のデータのコピーを実行するのではなく、ＲＡＩＤコントローラ１０２は冗長アレイ１１４の他のディスク１４２からのデータの読み取りと、危機的ディスク１４２のデータを作成するためのデータＸＯＲと、ブロック２１４で選択されたスペアディスク１１６への作成されたデータの書き込みとを実行する。
【００７０】
他の点でも、図４Ａおよび図４Ｂは図２Ａおよび図２Ｂに類似している。よく見ると、図２Ａおよび図２Ｂの実施形態を超える図４Ａおよび図４Ｂの実施形態の潜在的な利点は、既に故障に近づいている可能性のある危機的ディスク１４２へのプリエンプティブ復元中におけるアクセスを低減し、したがって潜在的には危機的ディスク１４２の故障の可能性を低減することである。本実施形態では、プリエンプティブ復元は、危機的ディスク１４２から、またはミラーリングされたディスク１４２からコピーを、上記実施形態よりも長く取ることができるということに留意されたい。
【００７１】
次に図５を参照すると、本発明の代替形態によるＲＡＩＤコントローラ１０２を含むコンピュータシステム５００が示されている。図５は図１に類似しており、類似の参照暗号の要素は類似している。しかし、図５の実施形態では、ＲＡＩＤコントローラ１０２は、ホストコンピュータ１０４に含まれるホストバスアダプタタイプのＲＡＩＤコントローラ１０４を含んでいる。ホストコンピュータ１０４は、それぞれにチップセット５０４に結合されたマイクロプロセッサ５０２とメモリ５０６とを含む。マイクロプロセッサ５０２は、メモリ５０６に記憶された、ＲＡＩＤコントローラ１０２を介して冗長アレイ１１４のデータにアクセスするオペレーティングシステム、ユーティリティ、アプリケーションプログラムなどのプログラムを実行する。チップセット５０４は、ＲＡＩＤコントローラ１０２にメモリ５０６とそれ自体との間でデータを転送することを可能にし、マイクロプロセッサ５０２にＲＡＩＤコントローラ１０２に対してＩ／Ｏ要求を発行することを可能にするためにＲＡＩＤコントローラ１０２がマイクロプロセッサ５０２とメモリ５０６とに結合された、ローカルバス５０８を提供する。ローカルバス５０８は、ＰＣＩ、ＰＣＩ−Ｘ、ＣｏｍｐａｃｔＰＣＩ、またはＰＣＩ  Ｅｘｐｒｅｓｓバスに限定はしないがこれらを含むことができる。一実施形態では、ＲＡＩＤコントローラ１０２はホストコンピュータ１０４のマザーボードに統合されている。別の実施形態では、ＲＡＩＤコントローラ１０２は、ローカルバス５０８のスロットにプラグインされるアドインコントローラカードを含む。図５のＲＡＩＤコントローラ１０２は、本明細書に記載のように本発明によりプリエンプティブ復元を実行するように構成される。
【００７２】
一実施形態では、ＲＡＩＤコントローラ１０２は、自動プリエンプティブ復元ではなく、冗長アレイ１１４の手動プリエンプティブ復元を実行する。すなわち、ブロック２１２に応じてユーザ入力なしにプリエンプティブ復元を自動的に実行するのではなく、ＲＡＩＤコントローラ１０２は、ユーザ入力に応じてブロック２１４で始まる図２Ａ、３Ａ、または４Ａのプリエンプティブ復元を実行する。ユーザは、冗長アレイ１１４の危機的ディスク１４２を指定する入力を提供し、ＲＡＩＤコントローラ１０２は、そのユーザ入力に応じてプリエンプティブ復元の残りのステップを実行する。一実施形態では、ＲＡＩＤコントローラ１０２がブロック２１２で危機的ディスク１４２がその重大エラー閾値１２２に達したと判定した場合、ＲＡＩＤコントローラ１０２はユーザにその状態を通知し、ユーザはそれに応じて、冗長アレイ１１４の手動プリエンプティブ復元を開始するための入力を提供する。
【００７３】
次に図６を参照すると、本発明の代替形態によるソフトウェアＲＡＩＤコントローラ１０２が示されている。図６は図１に類似しており、類似の参照番号による要素は類似である。しかし、図６の実施形態では、ＲＡＩＤコントローラ１０２は、ソフトウェアＲＡＩＤコントローラと総称されるホストコンピュータ１０４の構成要素から構成される。図６のＲＡＩＤコントローラ１０２では、ホストインターフェースアダプタ１３６は、ホストコンピュータ１０４ではなくコンピュータのネットワークにインターフェースする。図６の実施形態では、ＲＡＩＤコントローラ１０２のマイクロプロセッサ１２６は、ホストコンピュータ１０４のマイクロプロセッサを含み、メモリ１２４、ＲＡＩＤコントローラ１０２のバッファ１３２はホストコンピュータ１０４のシステムメモリを含み、ＲＡＩＤコントローラ１０２の記憶装置インターフェースアダプタ１３８はホストコンピュータ１０４の１つまたは複数のホストバスアダプタを含み、バスブリッジ１３４はホストコンピュータ１０４のチップセットを含み、ホストインターフェースアダプタ１３６はホストコンピュータ１０４のネットワークインターフェースカードを含むことができる。エラー閾値１２２は、ホストコンピュータ１０４の主要メモリ１２４に記憶することができる。具体的には、ＲＡＩＤコントローラ１０２の機能を実行するためのプログラム命令は、ＲＯＭ  ＢＩＯＳのようなオペレーティングシステムおよび／またはシステムファームウェアの一部であってよい。マイクロプロセッサ１２６は、ＲＡＩＤコントローラ１０２の機能を実行し、具体的には、本明細書に記載の当該エラー閾値１２２に達したディスク１２４のプリエンプティブ復元を実行するための、プログラム命令を実行する。
【００７４】
実施形態はディスクのアレイが冗長であると記載しているが、ディスクの非冗長アレイのプリエンプティブ復元が実行される別の実施形態を想定することができる。特に、プリエンプティブ復元は、ディスクのアレイのＲＡＩＤレベル０で実行することができる。ＲＡＩＤレベル０は、複数のディスク全体にあるデータのストライプを提供するが、冗長データはアレイに書き込まれていないので、それは冗長ＲＡＩＤレベルではない。しかしアレイの１つのディスクがエラー閾値に一度達すると、そのデータは危機的ディスクからスペアディスクにコピーすることができ、危機的ディスクは、危機的ディスクのコピーを現在含んでいるスペアディスクを有するストライプされたアレイ内で置き換えることができる。さらに、上記実施形態はミラーリングおよびパリティ冗長を利用するＲＡＩＤレベルを参照して記載したが、プリエンプティブ復元は、ハミングコードまたはエラー訂正コード（ＥＣＣ）、冗長を使用する、ＲＡＩＤ２のような他のデータ冗長技術を利用する冗長ディスクアレイに対して実行することもできる。
【００７５】
また、本発明とその目的、特徴および利点を詳細に説明したが、他の実施形態を本発明に包含することができる。ハードウェアを使用した本発明の実施形態に加え、本発明は、コンピュータ使用可能（例えば、可読）媒体で実施されたコンピュータ可読コード（例えば、コンピュータ可読プログラムコード、データなど）で実施することができる。コンピュータコードは、本明細書で開示した本発明の機能、または組み立て、またはその両方の実施形態を実現する。例えば、これは、一般的なプログラミング言語（例えば、Ｃ、Ｃ＋＋、ＪＡＶＡ（登録商標）など）、ＧＤＳＩＩデータベース、Ｖｅｒｉｌｏｇ  ＨＤＬ、ＶＨＤＬ、Ａｌｔｅｒａ  ＨＤＬ（ＡＨＤＬ）などを含むハードウェア記述言語（ＨＤＬ）、または他のプログラミング言語および／または当業者で使用可能な回路（すなわち、スキマティック）捕捉ツールを使用することにより達成することができる。コンピュータコードは、半導体メモリ、磁気ディスク、光学ディスク（例えば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）を含む任意の知られたコンピュータ使用可能（例えば、可読）媒体で、またコンピュータ使用可能（例えば、可読）伝送媒体（例えば、デジタル、光学またはアナログベースの媒体を含む搬送波媒体または他の媒体）で実施されたコンピュータデータ信号として割り付けることができる。したがって、コンピュータコードは、インターネットおよびイントラネットを含めた通信網を介して転送することができる。本発明は、コンピュータコードで実施することができ、集積回路の製品の一部としてハードウェアに変形されることが理解されよう。同様に、本発明は、ハードウェアおよびコンピュータコードの組合せとして実施することができる。
【００７６】
最後に、当業者には、開示された概念および具体的な実施形態を、本発明の同様の目的を実行するための他の構成を設計し、または変形するための基礎として、添付の請求の範囲に定義された本発明の趣旨および範囲を逸脱することなく容易に実施できることを理解されたい。
【図面の簡単な説明】
【００７７】
【図１】本発明によるＲＡＩＤコントローラを含むコンピュータネットワークを示す図である。
【図２Ａ】本発明による冗長アレイのプリエンプティブ復元を実行するための、図１のＲＡＩＤコントローラの動作を説明するフローチャートである。
【図２Ｂ】本発明による冗長アレイのプリエンプティブ復元を実行するための、図１のＲＡＩＤコントローラの動作を説明するフローチャートの続きである。
【図３Ａ】本発明の別の実施形態による冗長アレイのプリエンプティブ復元を実行するための、図１のＲＡＩＤコントローラの動作を説明するフローチャートである。
【図３Ｂ】本発明の別の実施形態による冗長アレイのプリエンプティブ復元を実行するための、図１のＲＡＩＤコントローラの動作を説明するフローチャートの続きである。
【図４Ａ】本発明の代替形態による冗長アレイのプリエンプティブ復元を実行するための、図１のＲＡＩＤコントローラの動作を説明するフローチャートである。
【図４Ｂ】本発明の代替形態による冗長アレイのプリエンプティブ復元を実行するための、図１のＲＡＩＤコントローラの動作を説明するフローチャートの続きである。
【図５】本発明の代替形態によるＲＡＩＤコントローラを含むコンピュータシステムの図である。
【図６】本発明の代替形態によるソフトウェアＲＡＩＤコントローラの図である。
【図１】
2008509474.tif 000004
【図２Ａ】
2008509474.tif 000005
【図２Ｂ】
2008509474.tif 000006
【図３Ａ】
2008509474.tif 000007
【図３Ｂ】
2008509474.tif 000008
【図４Ａ】
2008509474.tif 000009
【図４Ｂ】
2008509474.tif 000010
【図５】
2008509474.tif 000011
【図６】
2008509474.tif 000012
【国際調査報告】
2008509474.tif 000013
2008509474.tif 000014
2008509474.tif 000015