(57)【要約】【課題】ＲＡＩＤ内におけるブロックレベルのデータ破損の監視および訂正にデータ冗長性を使用するための改良された方法を提供する。【解決手段】本願にかかるデータストレージシステムは、複数のデータストレージデバイスと、データストレージデバイスによって提供された論理ブロックデバイスインターフェースを仮想論理デバイスインターフェースにマッピングし、データ冗長方式を使用して、データストレージシステム内の記憶されているそれぞれのデータオブジェクトのそれぞれのストライプ内に十分な冗長データを２個以上のパリティブロックとして記憶し、データ冗長ディスク群の少なくとも２つの故障しているデータストレージデバイスに含まれるデータを回復し、データ冗長方式を使用して、ブロックレベルのデータ破損について、記憶されているデータオブジェクトを監視するデータストレージシステムコントローラとを備える。【選択図】図５
2008117395.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータストレージデバイスと、
少なくとも１つのデータストレージシステムコントローラであって、
前記データストレージデバイスによって提供された論理ブロックデバイスインターフェースを仮想論理デバイスインターフェースにマッピングすることと、
データ冗長方式を使用することであって、それによって、該データストレージシステム内の記憶されているそれぞれのデータオブジェクトのそれぞれのストライプ内に十分な冗長データを２個以上のパリティブロックとして記憶し、データ冗長ディスク群の少なくとも２つの故障しているデータストレージデバイスに含まれるデータを回復することと、
前記データ冗長方式を使用することであって、それによって、ブロックレベルのデータ破損について、記憶されているデータオブジェクトを監視することと
を行うデータストレージシステムコントローラと
を備えるデータストレージシステム。
【請求項２】
前記複数のデータストレージデバイスは、論理ブロックディスクインターフェースをアクセスエンティティにそれぞれ提供する複数の磁気ディスクである
請求項１に記載のデータストレージシステム。
【請求項３】
前記冗長方式は、少なくとも２個のパリティブロックが、該少なくとも２個のパリティブロックと共にストライプを構成する固定サイズのデータブロック群のそれぞれについて生成されて記憶される消去符号化冗性ベースのＲＡＩＤ方式である
請求項１に記載のデータストレージシステム。
【請求項４】
前記少なくとも１つのデータストレージシステムコントローラは、前記データ冗長方式を使用して、
反復して、
記憶されている前記それぞれのデータオブジェクトの前記それぞれのストライプについて、
前記それぞれのストライプをメモリ内に読み込むことと、
前記パリティブロックをメモリにおいて再計算することと、
前記再計算されたパリティブロックをメモリに記憶されているそのストライプの前記パリティブロックと比較することと、
前記再計算されたパリティブロックが前記それぞれのストライプの前記パリティブロックと一致しないときは、
パリティブロック一致エラーをハンドリングすること
を行うことにより、ブロックレベルのデータ破損について、記憶されているデータオブジェクトを監視する
請求項３に記載のデータストレージシステム。
【請求項５】
前記少なくとも１つのデータストレージシステムコントローラは、
パリティブロック一致エラーが、前記それぞれのストライプの単一のブロックが破損していることを示すときは、
前記単一の破損しているブロックを突き止めることと、
前記単一の破損しているブロックのデータを、前記それぞれのストライプの残りのブロックから再生成することと、
前記再生成されたデータを置換ブロックに再書き込みし、前記パリティブロック一致エラーが、前記それぞれのストライプの複数のブロックが破損していることを示すときは、前記それぞれのストライプを破損しているものとしてフラグを立てることと
により、前記パリティブロック一致エラーをハンドリングする
請求項４に記載のデータストレージシステム。
【請求項６】
前記単一の破損しているブロックを突き止めることは、前記それぞれのストライプのシンドロームを計算すること、および前記シンドロームからエラー突き止め多項式を計算すること
をさらに含む請求項５に記載のデータストレージシステム。
【請求項７】
前記単一の破損しているブロックのデータを、前記それぞれのストライプの残りのブロックから再生成することは、
該それぞれのストライプの該残りのブロックから逆行列により該単一の破損しているブロックの前記データを計算すること
をさらに含む
請求項５に記載のデータストレージシステム。
【請求項８】
前記単一の破損しているブロックを突き止めることは、
前記それぞれのストライプの各ブロックを順に考慮して、
前記それぞれのストライプの前記現在考慮されているブロックを除くすべてから前記それぞれのストライプを再計算することと、
前記再計算されたストライプのパリティチェックが成功するときは、前記現在考慮されているブロックが破損していると判断することと
をさらに含む
請求項５に記載のデータストレージシステム。
【請求項９】
データ冗長方式を使用して、データストレージシステム内の記憶されている各データオブジェクトの各ストライプ内に十分な冗長データを２個以上のパリティブロックとして記憶し、データ冗長ディスク群の少なくとも２つの故障しているデータストレージデバイスに含まれるデータを回復する前記データストレージシステムにおいて、ブロックレベルのデータ破損について、記憶されているデータオブジェクトを監視するための方法であって、
反復して、
記憶されているそれぞれのデータオブジェクトのそれぞれのストライプについて、
前記それぞれのストライプをメモリ内に読み込むことと、
前記それぞれのストライプのパリティブロックをメモリにおいて再計算することと、
前記再計算されたパリティブロックを前記それぞれのストライプの前記パリティブロックと比較することと、
前記再計算されたパリティブロックが前記それぞれのストライプの前記パリティブロックと一致しないときは、
パリティブロック一致エラーをハンドリングすること
を行うことを含む方法。
【請求項１０】
前記少なくとも１つのデータストレージシステムコントローラは、
パリティブロック一致エラーが、前記それぞれのストライプの単一のブロックが破損していることを示すときは、
前記単一の破損しているブロックを突き止めることと、
前記単一の破損しているブロックのデータを、前記それぞれのストライプの残りのブロックから再生成することと、
前記再生成されたデータを置換ブロックに再書き込みし、前記パリティブロック一致エラーが、前記それぞれのストライプの複数のブロックが破損していることを示すときは、前記それぞれのストライプを破損しているものとしてフラグを立てることと
により、前記パリティブロック一致エラーをハンドリングする
請求項９に記載の方法。
【請求項１１】
前記単一の破損しているブロックを突き止めることは、
前記それぞれのストライプのシンドロームを計算することと、
前記シンドロームからエラー突き止め多項式を計算することと
をさらに含む
請求項１０に記載の方法。
【請求項１２】
前記単一の破損しているブロックのデータを、前記それぞれのストライプの残りのブロックから再生成することは、
該ストライプの該残りのブロックから逆行列により該単一の破損しているブロックの前記データを計算すること
をさらに含む
請求項１０に記載の方法。
【請求項１３】
前記単一の破損しているブロックを突き止めることは、
前記それぞれのストライプの各ブロックを順に考慮して、
前記それぞれのストライプの前記現在考慮されているブロックを除くすべてから前記それぞれのストライプを再計算することと、
前記再計算されたストライプのパリティチェックが成功するときは、前記現在考慮されているブロックが破損していると判断することと
をさらに含む
請求項１０に記載の方法。
【請求項１４】
請求項９に記載の方法を実施するコンピュータ可読メモリに記憶されているプロセッサ命令。
【請求項１５】
請求項９に記載の方法を実施するコンピュータ可読メモリに記憶されているファームウェア命令。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データストレージ、エラー検出およびエラー訂正、並びに独立ディスク冗長アレイ（「ＲＡＩＤ」）に関し、詳細には、ＲＡＩＤ内におけるブロックレベルのデータ破損の監視および訂正にデータ冗長性を使用するための方法に関する。
【背景技術】
【０００２】
過去５０年の間、電子マスストレージデバイスにおけるデータの信頼性のあるロバストなストレージは、非常に大きな進歩を遂げた。
情報理論が１９４０年代に発展し、これによって、エラー検出およびエラー訂正のための数学的技法が発展し、送信情報または記憶情報の一定の部類のエラーを検出して訂正することを可能にする、送信情報または記憶情報内に追加情報を挿入するための方法が提供された。
加えて、集積回路、マスストレージデバイス、並びに基本コンピュータサイエンスおよびエレクトロニクスの進歩によって、独立ディスク冗長アレイ（「ＲＡＩＤ」）を含む冗長ベースフォールトトレラントマスストレージシステムが開発された。
ＲＡＩＤシステムでは、データは冗長に記憶される。
多くのＲＡＩＤシステムでは、冗長な情報は、エラー訂正符号方法によって生成される。
ＲＡＩＤシステムのタイプに依存した１個または２個以上のディスクが故障しているとき、その１個または２個以上の故障したディスクの内容は、ＲＡＩＤシステム内に記憶されている冗長データから再生成することができる。
【０００３】
付加的レベルのエラー検出およびエラー訂正は、ＲＡＩＤ等の複雑なデータストレージシステム内で実施される。
それらの多くのレイヤのオーバーラップするエラー検出方法およびエラー訂正方法は、高度にロバストで且つフォールトトレラントなデータストレージシステムの作成に役立つが、冗長ベースデータストレージシステム内のそれらの多くのレイヤのエラー検出およびエラー訂正は、計算コストおよびデータストレージ容量コストにも関連する。
これらの理由から、冗長ベースフォールトトレラントデータストレージシステムの設計者、製造者、および最終的にはユーザは、最小限の計算オーバーヘッドおよび最小限に低減されたデータストレージ容量でデータストレージシステムの高レベルのフォールトトレランスを達成するためのより効率的且つ経済的な技法を模索し続けている。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明は、上述のような背景からなされたものであって、ＲＡＩＤ内におけるブロックレベルのデータ破損の監視および訂正にデータ冗長性を使用するための改良された方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明のさまざまな実施の形態は、包括的且つ効率的でシステム全体にわたるエラー検出およびエラー訂正を提供するために、ディスクブロックレベルにおいてディスクコントローラが実施するエラー検出およびエラー訂正に依拠したフォールトトレラント冗長性ベースのデータストレージシステム、並びに、ディスクレベルおよびディスクストライプレベルでＲＡＩＤコントローラが実施するデータ冗長方法を提供する。
本発明の実施の形態は、ディスクレベルおよびストライプレベルのデータ冗長性を使用して、記憶されているデータオブジェクトのエラー検出およびエラー訂正を提供し、現在利用可能なフォールトトレラント冗長性ベースのデータストレージシステムで一般に使用されている、多大なコストを要する一定の中間レベルのエラー検出およびエラー訂正の必要性をなくしている。
【発明を実施するための最良の形態】
【０００６】
本発明は、ＲＡＩＤシステムを含むマルチデバイス冗長ベースデータストレージシステムにおける効率的且つ包括的なブロックレベルのデータ破損検出およびデータ破損訂正に関する。
以下の第１小節では、一定のタイプのエラー検出およびエラー訂正の数学的基礎を解説する。
次の第２小節では、本発明の実施形態を解説する。
【０００７】
［エラー検出方法およびエラー訂正方法］
本発明の実施形態は、エラー制御符号化における既知の技法から導出された概念を使用する。
この分野のすぐれた参考文献は、LinおよびCostello著「Error Control Coding: The Fundamentals and Applications」（Prentice-Hall, Incorporated, New Jersey, 1983）というテキストである。
この小節では、エラー制御符号化で使用されるエラー検出技法およびエラー訂正技法の簡単な説明が記載されている。
さらに詳細な内容は、上記参考テキストから得ることもできるし、この分野の他の多くのテキスト、論文、および専門誌の記事から得ることもできる。
本小節は、一定のタイプのエラー制御符号化技法のかなり数学的に正確ではあるが簡潔な説明を表す。
エラー制御符号化技法は、記憶または送信で生じるエラーの検出および場合によっては訂正を可能にする符号化メッセージの情報を提供するために、補助ビットまたは補助シンボルをプレーンテキストメッセージ内に体系的に導入するか、または絶対に必要とされるものよりも多くの個数のビットまたはシンボルを使用してプレーンテキストメッセージを符号化する。
補助ビット若しくは補助シンボルまたは絶対に必要とされるものよりも多くのビット若しくはシンボルの１つの効果は、コードワードをベクトル空間のベクトルと見て、コードワード間の距離がコードワードのベクトル減算から導出されたメトリックであるとしたときに、有効なコードワード間の距離を増加させることである。
【０００８】
エラー検出およびエラー訂正を説明する際に、送信されるデータ、記憶されるデータ、および取り出されるデータを１つまたは２つ以上のメッセージとして説明することが役立つ。
ここで、メッセージμは、体（field）Ｆの要素であるシンボルμｉの順序列を含む。メッセージμは、
μ＝（μ０，μ１，…，μｋ−１）
ここで、μｉ∈Ｆ
として表すことができる。
体Ｆは、乗算および加算の下で閉じた集合であり、乗法の逆元および加法の逆元を含む集合である。
計算によるエラー検出およびエラー訂正では、あるる素数と等しいサイズを有する整数の部分集合を含む体を使用し、加算演算子はモジュロ加算（modulo addition）として定義され、乗算演算子はモジュロ乗算（modulo multiplication）として定義されることが一般的である。
実際には、２元体が一般に使用される。
一般に、元のメッセージは、体Ｆの要素の順序列も含むメッセージｃに符号化され、以下のように表される。
ｃ＝（ｃ０，ｃ１，…，ｃｎ−１）
ここで、ｃｉ∈Ｆ。
【０００９】
ブロック符号化技法は、ブロックでデータを符号化する。
この解説では、ブロックは、一定のｋ個のシンボルを含むメッセージμと見ることができる。
メッセージμは、ｎ個のシンボルの順序列を含むメッセージｃに符号化される。
符号化メッセージｃは、一般に、元のメッセージμよりも多くの個数のシンボルを含み、したがって、ｎはｋよりも大きい。
ｒがｎ−ｋに等しいとして、符号化メッセージ内のｒ個の余剰シンボルは、冗長なチェック情報を運ぶのに使用される。
この冗長なチェック情報は、送信中、記憶中、および取り出し中に発生したエラーを極度に高い検出確率で検出することを可能にし、多くの場合は訂正も可能にするものである。
【００１０】
線形ブロック符号では、２ｋ個のコードワードが、体Ｆ上のすべてのｎタプルのベクトル空間のｋ次元部分空間を形成する。
コードワードのハミング重みは、コードワードにおける非ゼロの要素の個数であり、２つのコードワード間のハミング距離は、２つのコードワードが異なる要素の個数である。
たとえば、２元体からの要素を仮定して、以下の２つのコードワードａおよびｂを考える。
【００１１】
【数１】
2008117395.tif 000003
【００１２】
コードワードａは３のハミング重みを有し、コードワードｂは２のハミング重みを有し、コードワードａおよびｂは第４要素のみが異なるので、コードワードａとｂとの間のハミング距離は１である。
線形ブロック符号は、多くの場合、３要素タプル［ｎ，ｋ，ｄ］によって設計される。
ここで、ｎはコードワードの長さであり、ｋはメッセージ長、すなわちコードワードの個数の２を底とする対数であり、ｄは、異なるコードワード間の最小ハミング距離であり、符号における最小ハミング重みの非ゼロのコードワードに等しい。
【００１３】
データの送信中、記憶中、および取り出し中にエラーが発生していないとき、送信、記憶、および取り出しのためのデータの符号化、並びに、符号化データのその後の復号は、表記法では、以下のように記載することができる。
μ→ｃ（ｓ）→ｃ（ｒ）→μ
ここで、ｃ（ｓ）は送信前の符号化メッセージであり、ｃ（ｒ）は初期取り出しメッセージまたは初期受信メッセージである。
したがって、初期メッセージμは符号化されて、符号化メッセージｃ（ｓ）が生成される。
この符号化メッセージｃ（ｓ）は、次に、送信され、記憶され、または送信および記憶され、続いてその後、初期受信メッセージｃ（ｒ）として取り出されるかまたは受信される。
初期受信メッセージｃ（ｒ）は、破損していないとき、次に復号されて、元のメッセージμが生成される。
上述したように、エラーが発生していないとき、元の符号化メッセージｃ（ｓ）は、初期受信メッセージｃ（ｒ）と等しく、初期受信メッセージｃ（ｒ）は、エラー訂正なしで、元のメッセージμに直接復号される。
【００１４】
符号化メッセージの送信中、記憶中、または取り出し中にエラーが発生したとき、メッセージ符号化およびメッセージ復号は、以下のように表すことができる。
μ（ｓ）→ｃ（ｓ）→ｃ（ｒ）→μ（ｒ）
したがって、上述したように、元のメッセージμ（ｓ）を符号化するのに使用され、且つ、初期受信メッセージｃ（ｒ）を復号または再構成して最終受信メッセージμ（ｒ）を生成するのに使用されるエラー検出技法およびエラー訂正技法の忠実度に応じて、最終メッセージμ（ｒ）は、初期メッセージμ（ｓ）に等しい場合もあるし等しくない場合もある。
エラー検出は、
ｃ（ｒ）≠ｃ（ｓ）
であると判断するプロセスである一方、エラー訂正は、破損している初期受信メッセージから初期符号化メッセージを再構成するプロセス
ｃ（ｒ）→ｃ（ｓ）
である。
【００１５】
符号化プロセスは、μとしてシンボル化されたメッセージが符号化メッセージｃに変換されるプロセスである。
あるいは、メッセージμは、Ｆの要素から成る記号体系からのシンボルの順序集合を含むワードであると考えることができ、符号化メッセージｃも、Ｆの要素の記号体系からのシンボルの順序集合を含むコードワードであると考えることができる。
ワードμは、Ｆの要素から選択されたｋ個のシンボルのあらゆる順序付けられた組み合わせとすることができる一方、コードワードｃは、符号化プロセス
｛ｃ：μ→ｃ｝
を介してＦの要素から選択されたｎ個のシンボルの順序列として定義される。
【００１６】
線形ブロック符号化技法は、ワードμをｋ次元ベクトル空間のベクトルと考え、以下のようにベクトルμに生成行列を乗算することによって長さｋのワードを符号化する。
【００１７】
【数２】
2008117395.tif 000004
【００１８】
上記式のシンボルを表記法で拡張することによって、以下の代替的な式のいずれかが生成される。
【００１９】
【数３】
2008117395.tif 000005
【００２０】
ここで、ｇｉ＝（ｇｉ，０，ｇｉ，１，ｇｉ，２，…，ｇｉ，ｎ−１）である。
【００２１】
線形ブロック符号の生成行列Ｇは、
【００２２】
【数４】
2008117395.tif 000006
【００２３】
または、代替的に、
【００２４】
【数５】
2008117395.tif 000007
【００２５】
の形を有することができる。
したがって、生成行列Ｇは、ｋ×ｋ単位行列Ｉｋ，ｋで拡大された行列Ｐの形にすることができる。
ジェネレータによってこの形で生成された符号は、「組織符号」呼ばれる。
この生成行列がワードμに適用されたとき、その結果生成されるコードワードｃは、
ｃ＝（ｃ０，ｃ１，…，ｃｒ−１，μ０，μ１，…，μｋ−１）
の形を有する。
ここで、ｃｉ＝μ０ｐ０，ｉ＋μ１ｐ１，ｉ＋…＋μｋ−１ｐｋ−１，ｉである。
この解説では、チェックシンボルがメッセージシンボルの前に来る慣行が使用されていることに留意されたい。
チェックシンボルがメッセージシンボルの後に続く代替的な慣行を使用することもでき、この場合、生成行列内のパリティチェック部分行列および単位部分行列は、この代替的な規則に従ったコードワードを生成するように挿入される。
したがって、組織線形ブロック符号では、コードワードは、ｒ個のパリティチェックシンボルｃｉおよびその後に続く元のワードμを含むシンボルを含む。
エラーが発生しないとき、元のワード、すなわちメッセージμは、対応するコードワード内にクリアテキストの形で現れ、対応するコードワードから容易に抽出される。
パリティチェックシンボルは、元のメッセージ、すなわちワードμのシンボルの線形結合であることが分かる。
【００２６】
第２の役立つ行列の１つの形は、
【００２７】
【数６】
2008117395.tif 000008
【００２８】
または、代替的に、
【００２９】
【数７】
2008117395.tif 000009
【００３０】
として定義されるパリティチェック行列Ｈｒ，ｎである。
このパリティチェック行列は、体系的なエラー検出およびエラー訂正に使用することができる。
エラー検出およびエラー訂正は、以下のように、初期受信メッセージｃ（ｒ）または初期取り出しメッセージｃ（ｒ）からシンドロームＳを計算することを伴う。
【００３１】
【数８】
2008117395.tif 000010
【００３２】
ここで、ＨＴは、パリティチェック行列Ｈｒ，ｎの転置行列であり、
【００３３】
【数９】
2008117395.tif 000011
【００３４】
として表される。
２元体が使用されるとき、ｘ＝−ｘであり、その結果、上記のＨＴに示すマイナス符号は一般に示されないことに留意されたい。
シンドロームＳは、メッセージシンボルのどれが破損しているかを判断するのに使用できるエラーロケーション多項式を計算するのに使用することができ、一定の場合に、破損しているシンボルの破損していない値を計算するのに使用することができる。
【００３５】
ハミング符号は、エラー訂正目的で作成された線形符号である。
３以上の任意の正の整数ｍについて、以下のようなコードワード長ｎ、メッセージ長ｋ、パリティチェックシンボル数ｒ、および最小ハミング距離ｄｍｉｎを有するハミング符号が存在する。
ｎ＝２ｍ−１
ｋ＝２ｍ−ｍ−１
ｒ＝ｎ−ｋ＝ｍ
ｄｍｉｎ＝３
ハミング符号のパリティチェック行列Ｈは、
【００３６】
【数１０】
2008117395.tif 000012
【００３７】
として表すことができる。
ここで、Ｉｍは、ｍ×ｍ単位行列であり、部分行列Ｑは、それぞれが２つ以上の非ゼロの要素を有するｍタプルである全部で２ｍ−ｍ−１個の異なる列を含む。
たとえば、ｍ＝３の場合、［７，４，３］の線形ブロックハミング符号のパリティチェック行列は、
【００３８】
【数１１】
2008117395.tif 000013
【００３９】
である。
ハミング符号の生成行列は、
【００４０】
【数１２】
2008117395.tif 000014
【００４１】
によって与えられる。
ここで、ＱＴは、部分行列Ｑの転置行列であり、
【００４２】
【数１３】
2008117395.tif 000015
【００４３】
は、（２ｍ−ｍ−１）×（２ｍ−ｍ−１）単位行列である。
パリティチェック行列Ｈからｌ個の列を体系的に削除することによって、
ｎ＝２ｍ−ｌ−１
ｋ＝２ｍ−ｍ−ｌ−１
ｒ＝ｎ−ｋ＝ｍ
ｄｍｉｎ≧３
を有する短縮されたハミング符号のパリティチェック行列Ｈ'を一般に得ることができる。
【００４４】
さまざまな用途におけるコードワード間のハミング距離を増加させるのに、他のタイプの符号が使用される。
これらの代替的な符号の多くは、生成行列を使用した容易な生成および符号化された値をコードワードから直接読み出すことを可能にする線形ブロック符号のトランスペアレントなパススルー特徴を含む線形ブロック符号の便利な特性を有しない。
線形ブロック符号の場合、プレーンテキストメッセージは、パリティチェックシンボルまたはパリティチェックビットをさらに含むコードワードに直接移行する。
他のタイプの符号では、プレーンテキストメッセージは、対応するコードワードにおいて直接読み出すことはできない。
いずれにしても、コードワードは、符号化されるすべての有効なメッセージを列挙するのに絶対必要とされるよりも多くの個数のシンボルまたはビットを含む。
線形ブロック符号の場合、追加されたシンボルまたはビットは、プレーンテキストのシンボルまたはビットを補助するパリティチェックシンボルまたはパリティチェックビットである一方、他のタイプの符号では、有効なメッセージは、コードワードサイズに等しい次元のベクトル空間全体にわたって分散される。
【００４５】
ＲＡＩＤシステム等の大きなマスストレージシステムは、大きなストレージ容量を提供するだけでなく、冗長なストレージも提供して管理し、その結果、ディスクドライブの故障、ディスクドライブ上の特定のシリンダ、トラック、セクタ、若しくはブロックの故障、電子コンポーネントの故障、または他の故障によって、記憶されているデータの一部が喪失した場合、喪失データは、ホストコンピュータによる介入もユーザによる手動介入もなしに、大規模マスストレージシステムによって記憶され管理された冗長データからシームレス且つ自動的に回復することができる。
データベースシステムおよび企業の重要なデータを含む重要なデータストレージアプリケーションの場合、２つ以上の大規模マスストレージシステムが、多くの場合、データの地理的に分散した複数のインスタンスを記憶して維持するように使用され、壊滅的な事象によってもデータ喪失が回復不能とならないように、より高レベルの冗長性が提供される。
【００４６】
冗長性の１つの部類は、ディスクレベルのミラーリング、すなわち、換言すれば、データオブジェクトの複数の離散的なコピーを２個以上のディスクに記憶し、その結果、１個のディスクの故障によってデータ喪失が回復不可能とならないようにすることを伴う。
第２の冗長性の部類は、「消去符号化（erasure coding）」冗長性と呼ばれるものである。
消去符号化冗長性は、ミラー冗長性よりも幾分複雑である。
消去符号化冗長性は、多くの場合、雑音を伴うチャネルを通じて転送される通信メッセージおよび他のデジタルデータのエラー制御符号化に使用されるリードソロモン符号化技法を使用する。
これらのエラー制御符号化技法は、線形ブロック符号の具体的な例である。
リードソロモン符号は、ｑを素数の累乗とすると、ガロア体ＧＦ（ｑ）からのシンボルを有する非２値符号であり、ブロック長ｎ＝ｑ−１、ｎ−ｋ＝２ｔ個のパリティチェック数字を有し、２ｔ＋１のコードワード間の最小距離を有する。
このリードソロモン符号では、ブロックにおける２ｔ個の破損エラーが検出可能であり、ｔ個の破損エラーが訂正可能であり、２ｔ個の消去が訂正可能である。
一般に、データ冗長性の適用では、関心のあるエラーは、既知のロケーションを有する消去、すなわち、換言すれば、既知のディスク故障である。
【００４７】
一定のタイプの消去符号化冗長性ベースの方法では、データオブジェクトは、「ストライプ」と呼ばれるブロック群として記憶される。
各ブロックは、ｎ＋ｍ個のディスクの一群の異なるディスクに記憶される。
このｎ＋ｍ個のディスクの一群は、以下「ＲＡＩＤグループ」と呼ぶ。
ｎ個のデータ収容ブロックの一群は、ｎ個のディスクにわたって分散され、ｎ個のデータブロックを有するデータバイト群から計算されたパリティバイトを含むｍ個のパリティブロックは、ｍ個のディスクにわたって分散される。
このような消去符号化冗長方式は、ｎ＋ｍ消去符号化冗長方式と呼ばれる。
８＋２方式、３＋３方式、３＋１方式、および他の方式を含めて、多くの消去符号化冗長方式が可能である。
一般に、ｍはｎ以下である。
ｍ個のディスクまたはｎ＋ｍ個未満のディスクが故障している場合、故障しているディスクがデータを含むのかそれともパリティ値を含むのかにかかわらず、データオブジェクト全体を復元することができる。
ＲＡＩＤ６システムは、２個のパリティブロックを使用して、８＋２消去符号化冗長方式を表す１０ディスクＲＡＩＤグループにおける２個のディスク等、ＲＡＩＤグループの２個の故障しているディスクを回復することを可能にする。
【００４８】
消去符号化冗長性は、一般に、データユニットの各バイト、各ワード、または各ロングワードについてチェックサムまたはパリティビットを数学的に計算することにより実現することができる。
したがって、ｍビットのパリティビットは、ｎビットのデータビットから計算される。
ここで、ｎ＝８、１６、若しくは３２、またはそれよりも大きな２の累乗である。
たとえば、８＋２消去符号化冗長方式では、２ビットのパリティチェックビットが、データの各バイトについて生成される。
したがって、８＋２消去符号化冗長方式では、データの８つのデータユニットが、チェックサムまたはパリティビットの２つのデータユニットを生成する。
これらのすべては、１０データユニットストライプに含めることができる。
以下の解説では、「ワード」という用語は、符号化が行われるデータユニットの粒度を指し、ビットからロングワードまたはそれよりも大きな長さのデータユニットまで変化し得る。
データストレージアプリケーションでは、データユニットの粒度は、通常、５１２バイトまたはそれよりも大きなものとすることができる。
【００４９】
ｉ番目のチェックサムワードｃｉは、関数Ｆｉ（ｄ１，ｄ２，…，ｄｎ）によりｎ個のデータワードすべての関数として計算することができる。
この関数は、以下のように、データワードｄｊに係数ｆｉ，ｊを乗算したもののそれぞれの線形結合である。
【００５０】
【数１４】
2008117395.tif 000016
【００５１】
行列表記では、この式は、
【００５２】
【数１５】
2008117395.tif 000017
【００５３】
または
【００５４】
【数１６】
2008117395.tif 000018
【００５５】
となる。
リードソロモン技法では、関数Ｆは、要素ｆｉ，ｊがｊｉ―１に等しいｍ×ｎバンデルモンド行列となるように選ばれる。
すなわち、
【００５６】
【数１７】
2008117395.tif 000019
【００５７】
特定のワードｄｊが、新しい値ｄ'ｊを有するように変更された場合、新しいｉ番目のチェックサムワードｃ'ｉは、
ｃ'ｉ＝ｃｉ＋ｆｉ，ｊ（ｄ'ｊ−ｄｊ）
または
【００５８】
【数１８】
2008117395.tif 000020
【００５９】
として計算することができる。
したがって、新しいチェックサムワードは、前のチェックサムワードおよび行列Ｆの単一の列から容易に計算される。
【００６０】
ストライプからの喪失ワードは、逆行列によって回復することができる。
行列Ａおよび列ベクトルＥは、以下のように構築される。
【００６１】
【数１９】
2008117395.tif 000021
【００６２】
【数２０】
2008117395.tif 000022
【００６３】
または
【００６４】
【数２１】
2008117395.tif 000023
【００６５】
であることが容易に分かる。
修正行列Ａ'およびＥ'を生成するために、行列Ａの任意のｍ個の行およびベクトルＥの対応する行を取り除くことができる。
ここで、Ａ'は正方行列である。次に、元のデータワードを表すベクトルＤを以下のように逆行列によって回復することができる。
【００６６】
【数２２】
2008117395.tif 000024
【００６７】
したがって、ｍ個またはそれよりも少ない個数のデータワードまたはチェックサムワードが消去されたとき、すなわち喪失されたとき、ｍ個またはそれよりも少ない喪失したデータワードまたはチェックサムワードを含むｍ個のデータワードまたはチェックサムワードをベクトルＥから取り除くことができ、対応する行を行列Ａから取り除くことができ、元のデータワードまたはチェックサムワードは、上記に示したように、逆行列によって回復することができる。
【００６８】
逆行列は、加算、減算、乗算、および除算のよく知られた実数算術演算を使用して実数について容易に実現されるが、デジタルエラー制御符号化に使用される離散値の行列および列の要素は、それらの離散値が、対応する離散算術演算の下で閉じた算術体を形成するときにのみ、行列乗算に適している。
一般に、チェックサムビットは長さｗのワードについて計算される。
【００６９】
【数２３】
2008117395.tif 000025
【００７０】
ｗビットワードは、２ｗ個の異なる値のいずれをも有することができる。
ガロア体として知られている数学体は、２ｗ個の要素を有するように構築することができる。
ガロア体の要素の算術演算は、好都合なことに、
【００７１】
【数２４】
2008117395.tif 000026
【００７２】
である。
ここで、ガロア体の要素の対数および真数のテーブルは、次数ｗの原始多項式を伴う伝達方法を使用して計算することができる。
【００７３】
ミラー冗長方式は、概念的には、より単純であり、容易にさまざまな再構成演算の役に立つ。
たとえば、３ディスクのトリプルミラー冗長方式の１個のディスクが故障している場合、残りの２個のディスクは、ダブルミラーリング冗長方式の下で２ディスクミラーペアとして再構成することができる。
あるいは、故障しているディスクに取って代わる新しいディスクを選択することができ、存続しているディスクの一方から新しいディスクへデータをコピーして、３ディスクのトリプルミラー冗長方式を復元することもできる。
これとは対照的に、消去符号化冗長方式の再構成は、それほど簡単ではない。
たとえば、ストライプ内の各チェックサムワードは、そのストライプのすべてのデータワードに依存する。
４＋２消去符号化冗長方式を８＋２消去符号化冗長方式に変換することが望まれている場合、チェックサムビットのすべてが再計算される場合があり、データは、４＋２方式の６個のディスクの関連する内容を新たなロケーションにコピーするのではなく、新しい８＋２方式に使用される１０個のディスクにわたって再分散される場合がある。
その上、同じ消去符号化方式のストライプサイズの変更であっても、チェックサムデータユニットのすべてを再計算すること、および、データを新しいディスクロケーションにわたって再分散することを伴う場合がある。
ほとんどの場合、消去符号化方式に対する変更は、古い構成から取り出されたデータに基づいて新しい構成を完全に構築することを伴い、ミラーリング冗長方式の場合に、複数のディスクのうちの１個を削除するかまたは元のディスクから新しいディスクへデータをコピーすることでディスクを追加するということではない。
ミラーリングは、一般に、消去符号化よりも空間効率が悪いが、時間効率および処理サイクルの使用効率は良い。
【００７４】
［本発明の実施形態］
図１は、最新式のディスクストレージデバイスを示している。
最新式のディスクストレージデバイスは、一般に、並列磁気ディスクプラッタのスタック１０２を含む。
各プラッタは、別個の電気機械式ＲＥＡＤ／ＷＲＩＴＥ（読み出し／書き込み）ヘッドによってアクセスされる。
磁気ディスクプラッタ１０４等の各磁気ディスクプラッタは、磁気ディスクプラッタ１０４の外縁にあるラック１０６等の同心トラックに２値データを記憶する。
さらに、各トラックはセクタに分割され、各セクタは、記憶されるバイトが固定サイズを有するトラックの放射状セグメントであり、隣接するセクタとはギャップによって分離されている。
図１では、磁気ディスクプラッタ１０４の最も外側のトラック１０６は、１２個のセクタ１０８〜１１９に分割されて示され、各セクタは、図１では陰影を付けて示されている。
各セクタは、さらに、連続する一組の１個または２個以上のブロックとして編成される。
図１では、セクタ１１４は、２個のブロック１２０を共に構成する線形バイト列を収容するものとして示されている。
各ブロックは、そのセクタの第２のブロック１２４の５１２データバイト１２２等のデータバイトと、その後に続く小さな一組の連続するエラー制御／訂正バイト（「ＥＣＣバイト」）１２６との順序列を含む。
図１の例およびその後の例では、５１２データバイトを有するディスクブロックが示されているが、ディスクブロックは、１０２４データバイトおよび４０９６データバイトを含むさまざまな固定サイズを有することができ、一定の最新式ディスクドライブでは、構成可能とすることができる。
機械式ＲＥＡＤ／ＷＲＩＴＥヘッドは、ディスクデバイス内に位置合わせされているので、磁気ディスクプラッタの個数と等しい個数のトラックが、ディスクデバイスにより同時にアクセス可能である。
たとえば、図１に示すように、５つのトラック１３０〜１３４が、５つの磁気ディスクプラッタ１０２に関連する５つのＲＥＡＤ／ＷＲＩＴＥヘッドによって同時にアクセス可能である。
これらの５つのトラックは、「シリンダ」と呼ばれる。
【００７５】
ディスクデバイスのディスクコントローラは、ディスクコントローラにインターフェースするホストコンピュータ、ＲＡＩＤコントローラ、および他のリモートエンティティに線形論理ブロックアドレス空間を提供するために、ディスクデバイス内における物理ブロックから論理ブロックへのアドレス指定を管理する。
以下の解説では、このインターフェースを「論理ブロックディスクインターフェース」と呼ぶ。
一般に、ディスクコントローラは、ディスクデバイス内のＥＣＣバイト並びに関連するエラー検出およびエラー訂正を内部で管理する。
ディスクコントローラは、破損しているデータブロックを検出し、使用されるＥＣＣ符号を通じて訂正可能なそれらの破損を訂正し、障害のあるブロックをスペアブロックに自動的に再マッピングする。
ＥＣＣバイトおよびブロック再マッピングは、一般に、リモートデバイスにトランスペアレントであり、報告されているブロックサイズには含まれない。
５１２バイトのブロックは、５１２個のデータブロックおよびいくつかの追加された個数のバイトを含む。
ホストコンピュータまたはＲＡＩＤコントローラ等のリモートデバイスは、追加されたＥＣＣバイトおよび不良ブロックの再マッピングに気付くことなく、５１２バイトのディスクブロックの論理列にアクセスする。
一定の最新式ディスクデバイスでは、ディスクコントローラは、ＥＣＣバイトおよび他のこのような詳細の全部または一部をより高位のデバイスに公表する場合がある。
他のディスクデバイス、特に、あまり高価でないディスクデバイスは、これらの詳細をより高位のアクセスエンティティに明らかにしない。
単純なパリティバイト、水平冗長検査、巡回冗長検査、および他のこのような方式からさまざまなタイプのＥＣＣを使用することができる。
現在のディスクデバイスでは、ＣＲＣが追加されたリードソロモン符号が、多くの場合、ＥＣＣとして使用されている。
【００７６】
ディスクアレイは、多数の個別のディスクデバイスを含む。
ディスクアレイは、アクセスするホストコンピュータへの仮想論理デバイスインターフェースに、論理ブロックインターフェースを提供する任意のサイズの論理デバイスを提供する。
図２は、通常のディスクアレイを示している。
ディスクアレイ２０２は、中央プレーン２０６を通じて複数のディスクアレイコントローラボード２０８および２１０に相互接続されたディスク２０４等の多数の個別のディスクデバイスを含む。
各ディスクアレイコントローラボード２０８および２１０は、ディスクアレイコントローラプログラムを実行するためのマイクロプロセッサおよびメモリを含む。
ディスクアレイは、一般に、冗長電源、冗長冷却システム、冗長通信ポート、および他のこのようなコンポーネントも含む。
ディスクアレイは、したがって、複数のディスクのアレイを高度に抽象化したものをホストコンピュータおよび他のアクセスエンティティに提供する。
【００７７】
多くの最新式のディスクアレイコントローラは、比較的安価なディスクを使用する。
これらのディスクは、図１について上述したようにＥＣＣバイトを含むが、それらのディスクが有する信頼性のレベルは、多くのフォールトトレラントディスクアレイアプリケーションに必要されるものよりも低い場合がある。
この理由から、ディスクアレイコントローラは、多くの場合、ディスクに記憶されている各データブロックについて、追加の一組のエラー検出符号（「ＥＤＣ」）バイトを挿入する。
図３は、ディスクアレイ内に含まれるディスクデバイスによってディスクインターフェースに設けられた論理ブロックにディスクアレイコントローラによりマッピングされた線形データ空間内における、ディスクアレイコントローラが管理するエラー検出符号（「ＥＤＣ」）バイトを示している。
図３に示すように、ディスクアレイコントローラは、ディスクによって論理ブロックディスクインターフェースに設けられた線形論理ディスクブロックアドレス空間から仮想線形アドレス空間３０２を作成する。
図３に示すように、ディスクアレイコントローラは、追加のＥＤＣバイト３０４等の追加のＥＤＣバイトを、論理ブロック３０６等の各論理ブロックに追加して、本例では、５１２データバイトおよびディスクアレイコントローラが管理する８バイトのＥＤＣバイトを含む５２０バイトの仮想ブロックを生成する。
ディスクアレイコントローラは、これらの５２０バイトブロックを、ディスクデバイスによって提供される５１２バイト論理ブロックにマッピングする。
このように、ホストコンピュータは、ディスクアレイコントローラによって内部で５２０バイト仮想ブロックにマッピングされる仮想論理デバイスインターフェースを通じて、５１２バイトデータブロックにアクセスする。
ディスクアレイコントローラは、次に、５２０バイト仮想ブロックを、ディスクデバイスによって論理ブロックディスクインターフェースに設けられた５１２バイト論理ブロックにマッピングする。
図１について上述したように、ディスクは、次に、５１２バイト論理ブロックを、ディスクアレイコントローラが管理するＥＣＣバイトを含むより大きな物理ブロックにマッピングする。
このように、ディスクコントローラは、ブロック単位でＥＣＣバイトを独立に作成して管理し、ディスクアレイコントローラは、ホストコンピュータおよび他のアクセスエンティティへの仮想論理デバイスインターフェースを通じて提供された５１２データバイトブロックの追加のＥＤＣバイトを別個に作成して管理する。
【００７８】
あるいは、ディスクアレイで使用されるディスクデバイスが可変ブロック長のフォーマットをサポートしている場合、ディスクアレイコントローラは、５２０バイトブロックを提供するようにディスクデバイスをフォーマットすることができ、次に、８バイトのＥＤＣバイトを各５１２バイト仮想論理デバイスブロックに追加して、仮想論理デバイスインターフェースを通じたホストコンピュータに対する、ディスクアレイコントローラにより設けられた５１２バイトブロックを、５２０バイトディスクブロックにマッピングすることができる。
【００７９】
上述したように、前の小節では、ＲＡＩＤコントローラは、リードソロモンエラー訂正符号ベースの技法を使用して、ＲＡＩＤシステムにデータを冗長に記憶する。
ＲＡＩＤコントローラは、多くの場合、さまざまなＲＡＩＤ方式のいずれかに従って消去符号化データ冗長性を組み込むように実施されたディスクアレイコントローラである。
ＲＡＩＤ５システムは、データがストライプ化されたディスク群の１個のディスクの故障に耐えることができ、ストライプの残りのディスクに記憶されているデータから故障しているディスクのデータを回復することができる。
ＲＡＩＤ６システムは、データがストライプ化された各ディスク群内の２個のディスクの故障を許容することができる。
【００８０】
図４Ａ〜図４Ｄは、ＲＡＩＤシステム内のＲＡＩＤ６冗長データストレージの一例を示している。
図４Ａでは、ＲＡＩＤシステム内でＲＡＩＤグループを共に構成する１０個のディスクの内容が示されている。
各ディスクは、線形ブロック列であると考えることができる。
図４Ａでは、ディスク０内の線形ブロック列４０２が、連続番号が付けられて示されている。
図４Ｂは、２つの異なるファイルを構成する線形ブロック列を示している。
図４Ｂに示すように、ファイルＡは、１９個のブロックの列４０４を含み、ファイルＢは、２３個のブロックの列４０６を含む。
図４Ｃは、ファイルＡのブロックおよびファイルＢのブロックを、図４Ａに示すＲＡＩＤグループの１０個のディスクにわたってストライプ化したものを示している。
ファイルＡ４０８の最初の８個のブロックは、図４Ｃに示すように、ディスク０〜ディスク７の第１のストライプ４１０にそれぞれ存在する。
これらの８個のデータブロックについて、前の小節で解説したように計算されたパリティブロックを含む２個のパリティブロックＰ０４１４およびＰ１４１５は、ディスク９およびディスク１０に存在する。
これらの８個のデータブロックおよび２個のパリティブロックは、共に、ＲＡＩＤグループの１０個のディスクにわたる単一のストライプ４１０を構成する。
図４Ｃに示すように、ファイルＡは、２つの全ストライプおよび第３のストライプの一部において、ＲＡＩＤグループの１０個のディスクにわたり分散されている。
ファイルＢは、第１の部分的ストライプ４１６、２つの全ストライプ４１８および４２０、並びに最後の部分的ストライプ４２２において、ＲＡＩＤグループの１０個のディスクにわたり分散されている。
前の小節で解説したように、ＲＡＩＤグループの１０個のディスクのいずれか２個が故障すると、数学的技法を使用して、ＲＡＩＤグループに記憶されている各ファイルオブジェクトを逆行列により再構築することができる。
図４Ｄは、パリティブロックの構成を示している。
図４Ｄでは、ディスク０〜９に配置された８＋２ストライプのデータブロック４３０〜４３７並びにパリティブロック４３８および４３９が、バイト列として水平に示されている。
前の小節で解説したように、８＋２冗長方式における８つのデータバイトの各組は、２つのパリティバイトを生成する。
したがって、ブロック４３０〜４３７のそれぞれからのバイト０は、第１のパリティブロック４３８の第１のパリティバイト４４０および第２のパリティブロック４３９の第１のパリティバイト４４２を生成する。
各データブロック４３０〜４３７からのものである８データバイトの後続の群は、パリティブロック４３８および４３９のそれぞれにおける後続のパリティバイトを生成する。
【００８１】
要約すれば、ディスクアレイ内の各ディスクのディスクコントローラは、図１について解説したように、各５１２バイトデータブロックについてのＥＣＣバイトを管理する。
ディスクコントローラは、各５１２バイトディスクブロックについて作成され管理されるＥＣＣバイトの個数に応じて、且つ、使用されるエラー検出／訂正方式に応じて、一定の部類のエラーを検出して訂正することができる。
第２のレベルでは、ディスクアレイコントローラは、各５１２バイト論理データブロックについて複数のＥＤＣバイトを作成して管理する。
換言すれば、ディスクアレイコントローラは、５２０バイト仮想ブロックを５１２バイト論理ブロックにマッピングする。
ディスクアレイコントローラが作成して管理するＥＤＣバイトは、ディスクコントローラレベルでは、単にデータにすぎない。
最後に、より高いレベルでは、ＲＡＩＤシステム内のＲＡＩＤコントローラは、ＲＡＩＤストライプ内の各データブロック群について複数のパリティブロックを作成して管理する。
このレベルでは、パリティブロックは、データ冗長性を導入するように意図されており、それによって、ＲＡＩＤコントローラは、各ＲＡＩＤグループ内の１個または２個以上の故障しているディスクについてデータを再構築することが可能になる。
エラー検出方式、エラー訂正方式、および消去符号化方式の３つのすべてのレイヤは互いにオーバーラップしている。
【００８２】
本発明の実施形態は、ＲＡＩＤシステム内の多層のエラー検出方式およびエラー訂正方式が冗長性を有することができることを認める。
したがって、本発明に従って実施されたＲＡＩＤシステムでは、図３について上述した中間レベルのエラー検出およびエラー訂正が省略されている。
ＲＡＩＤコントローラは、追加のＥＤＣバイトを作成して管理するのではなく、本発明によれば、故障しているディスクの回復およびブロックレベルのデータ破損についてのディスク内に記憶されているデータの一定の監視の双方について、ＲＡＩＤコントローラが作成して管理するパリティバイトを使用する。
【００８３】
図５〜図６は、本発明の一実施形態を説明する制御フロー図である。
図５は、ルーチン「スクラブ（scrub）」の制御フロー図である。
ルーチン「スクラブ」は、ブロックレベルのデータ破損について記憶されているデータを監視するために、ＲＡＩＤコントローラ内で連続的に実行される。
ルーチン「スクラブ」は、データ記憶コマンドおよびデータ取り出しコマンド用にプロセッサの全帯域幅を保存するために、スペアのディスクアレイコントローラ処理サイクルを使用して実行されるように設計することができる。
【００８４】
最初のステップ５０２において、ルーチン「スクラブ」が初期化される。
初期化は、ＲＡＩＤシステムごとに大きく変化し得る。
ルーチン「スクラブ」は、ＲＡＩＤシステムの構成、さまざまなＲＡＩＤグループの識別情報およびサイズ、並びに各ＲＡＩＤグループに記憶されているデータオブジェクトの識別情報およびサイズを判断するために、記憶されているストレージシステム情報にアクセスする。
ルーチン「スクラブ」は、実行中、ＲＡＩＤシステム構成に対する変更を追跡する。
次に、ステップ５０２〜５１５を含むｄｏループを連続的に実行する際に、ルーチン「スクラブ」は、記憶されている各データオブジェクトを検査して、いずれかのブロックが破損しているか否かを判断する。
【００８５】
ステップ５０６〜５１４の第２レベルのネストされたｆｏｒループにおいて、ルーチン「スクラブ」は、現在のｄｏループの反復で記憶されている各データオブジェクトを解析する。
ステップ５０７〜５１３の次の下位レベルのｆｏｒループにおいて、ルーチン「スクラブ」は、現在解析されている、記憶されているデータオブジェクトの各ストライプを解析する。
【００８６】
ステップ５０８において、ルーチン「スクラブ」は、現在考慮されている、記憶されているデータオブジェクトの次のストライプをメモリ内に読み込む。
次に、ステップ５０９において、ルーチン「スクラブ」は、図６について後述するルーチンをコールして、エラーについてストライプをチェックする。
エラーが検出されたとステップ５１０で判断された場合、ステップ５１１において、ルーチン「スクラブ」は、単一の回復可能なエラーが検出されたか否かを判断する。
単一の回復可能なエラーが検出された場合、そのエラーはステップ５１２で訂正される。
エラー回復は、破損しているブロックのデータを、ストライプの残りのブロックから、メモリにおいて再生成すること、および、次に、そのデータを、破損しているブロックの論理ブロックアドレスに再書き込みすることを伴う。
【００８７】
訂正されたブロックは、ディスクアレイコントローラに対してトランスペアレントに、ディスクデバイスにより破損しているブロックの論理ブロックアドレスに再マッピングされたスペアブロックに再書き込みすることができる。
あるいは、ディスクアレイコントローラは、不良ブロック再マッピングをハンドリングすることができ、破損しているブロックをスペアブロックに再マッピングすることができる。
他方、検出されたエラーが訂正可能でない場合、検出された破損しているデータには、ステップ５１３でフラグが立てられる。
ＲＡＩＤコントローラは、高レベルルーチンで、高レベルの冗長データを他のソースから得ることにより欠陥ストライプを訂正するように努めることもできるし、あるいは、ホストコンピュータまたは他の高レベルエンティティに破損を知らせることもできる。
【００８８】
現在考慮されているストライプが、エラーがないと判断されるか、または、ステップ５１２で訂正されたか、若しくは、ステップ５１３でフラグが立てられた後、ステップ５１４において、現在考慮されている記憶されているデータオブジェクト内にストライプがさらに存在するときは、制御はステップ５０８に戻る。
そうでないとき、ステップ５１５において、解析される記憶されているデータオブジェクトがさらに存在するときは、制御はステップ５０７に戻る。
最後に、すべての記憶されているデータオブジェクトが現在の反復で解析されると、制御は、ステップ５０６に戻り、データ破損監視の次の反復を開始する。
【００８９】
図６は、図５のステップ５０９でコールされたルーチン「エラーのチェック」の制御フロー図を示している。
ステップ６０２において、ルーチン「エラーのチェック」は、ストライプのパリティブロックを再計算する。
再計算されたパリティブロックが、記憶されているパリティブロックと一致するとステップ６０４で判断された場合、検出されたエラーがないことの表示がステップ６０６で返される。
【００９０】
そうでない場合、ストライプ６０８において、ルーチン「エラーのチェック」は、上述したように、ストライプのシンドロームを計算し、そのシンドロームからエラーロケーション多項式を計算することにより、エラーのある１個または２個以上のブロックを識別する。
単一のブロックが破損しているとき、その破損は、図５のステップ５１２において、ストライプの冗長データから修復することができる。
そうでない場合、ストライプは、回復できないほどに破損しており、この場合、図５のステップ５１２において、破損にフラグが立てられる。
【００９１】
本発明を特定の実施形態の観点から説明してきたが、本発明がこれらの実施形態に限定されることは意図されていない。
本発明の趣旨の範囲内の変更は、当業者には明らかである。
たとえば、本発明の実施形態は、さまざまな異なるタイプの冗長技法、ブロックサイズ、およびディスクドライブを使用して、多種多様の異なるＲＡＩＤコントローラに組み込むことができる。
【００９２】
たとえば、トリプルミラーリングを使用するＲＡＩＤシステムでは、各ブロックの３つのすべてのミラートリプルを比較して、３つのすべてが一致するか否かを判断することができる。
２つが一致し、１つが異なる場合、ＲＡＩＤシステムは、その異常な異なるブロックがデータ破損を表すことを推論することができ、そのブロックを２個の一致するブロックのうちの一方の内容で再書き込みすることによってデータ破損を訂正することができる。
１つの代替的なスクラブルーチンは、シンドロームを計算して使用しデータエラーを突き止めるのではなく、１個のブロックが省かれた可能な各ブロック群からストライプの内容を引き続き再計算することができる。
【００９３】
単一のブロックが破損しているとき、パリティチェックは、破損しているブロックが省かれたときにのみ成功する。
ストライプ内で検出された単一の不良ブロックは、そのブロックのデータを、メモリに記憶されているストライプの残りのブロックのデータから再計算することによって訂正することができる。
一般に、故障しているディスクを再構築するためにダブル冗長性がＲＡＩＤコントローラレベルで組み込まれたどのシステムにおいても、同じ冗長性を使用して、個々のストライプ内の破損しているブロックを突き止めて再構築することができる。
本発明は、磁気ディスク以外のストレージデバイスに基づくデータストレージシステムにも適用可能である。
【００９４】
本発明の方法を組み込むＲＡＩＤコントローラは、異なるモジュール編成、異なるデータ構造体、異なる制御構造体、異なる変数、および他のよく知られたプログラミングパラメータおよびプログラミング特性における差異を有する任意の個数の異なるプログラミング言語でプログラミングすることができる。
ＲＡＩＤコントローラは、ファームウェア、ハードウェア、ソフトウェア、または、ファームウェア、ハードウェア、およびソフトウェアの２つ以上の組み合わせで実施することができる。
本発明のデータ破損監視技法は、連続的に適用することもできるし、それよりも長い間隔で適用することもでき、より高いレベルのロバスト性およびフォールトトレランスを、記憶されているデータの選択部分に提供するために選択的に適用することができる。
【００９５】
上記説明では、説明の目的で、本発明の徹底した理解を提供するために特定の用語体系を使用した。
しかしながら、本発明を実施するのに特定の詳細は必要とされないことが当業者には明らかである。
本発明の特定の実施形態の上記説明は、例示および説明の目的で提示されるものである。
それらの説明は、網羅的であることを意図するものでもなければ、開示した正確な形に本発明を限定することを意図するものでもない。
【００９６】
上記教示に鑑み、多くの変更および変形が可能であることは明らかである。
実施形態は、本発明の原理およびその実用的な適用を最も良く説明し、それによって、他の当業者が、本発明およびさまざまな変更を有するさまざまな実施形態を、検討した特定の使用に適するように最も良く利用することを可能にするために示されて説明されたものである。
本発明の範囲は、添付の特許請求の範囲およびその均等物によって画定されることが意図されている。
【図面の簡単な説明】
【００９７】
【図１】最新式のディスクストレージデバイスを示す。
【図２】通常のディスクアレイを示す。
【図３】ディスクアレイ内に含まれるディスクデバイスによってディスクインターフェースに設けられた論理ブロックにディスクアレイコントローラによりマッピングされた線形データ空間内における、ディスクアレイコントローラが管理するエラー検出符号（「ＥＤＣ」）バイトを示す。
【図４Ａ】ＲＡＩＤシステム内のＲＡＩＤ６冗長データストレージの一例を示す。
【図４Ｂ】ＲＡＩＤシステム内のＲＡＩＤ６冗長データストレージの一例を示す。
【図４Ｃ】ＲＡＩＤシステム内のＲＡＩＤ６冗長データストレージの一例を示す。
【図４Ｄ】ＲＡＩＤシステム内のＲＡＩＤ６冗長データストレージの一例を示す。
【図５】本発明の一実施形態を説明する制御フロー図を提供する。
【図６】本発明の一実施形態を説明する制御フロー図であり、図５のステップ５０９で呼び出されたルーチン「エラーのチェック」の制御フロー図を示す。
【符号の説明】
【００９８】
１０４・・・磁気ディスクプラッタ，
１０６・・・ラック，
１１４・・・セクタ，
１２０・・・ブロック，
１２６・・・エラー制御／訂正バイト（「ＥＣＣバイト」），
２０２・・・ディスクアレイ２０２，
２０４・・・ディスク，
２０６・・・中央プレーン，
２０８，２１０・・・ディスクアレイコントローラボード，
３０２・・・仮想線形アドレス空間，
３０４・・・ＥＤＣバイト，
３０６・・・論理ブロック，
４０２・・・線形ブロック列，
４０４・・・ブロックの列，
４１０・・・ストライプ，
４３０〜４３７・・・ブロック，
４３８・・・パリティブロック，
４３９・・・パリティブロック，
４４０・・・パリティバイト，
４４２・・・パリティバイト，
【図１】
2008117395.tif 000027
【図２】
2008117395.tif 000028
【図３】
2008117395.tif 000029
【図４Ａ】
2008117395.tif 000030
【図４Ｂ】
2008117395.tif 000031
【図４Ｃ】
2008117395.tif 000032
【図４Ｄ】
2008117395.tif 000033
【図５】
2008117395.tif 000034
【図６】
2008117395.tif 000035