(57)【要約】ストレージシステムのディスクアレイにおける２以下のディスク故障に対する保護を提供する一様で対称な二重故障訂正技術。ストレージシステムのＲＡＩＤシステムは、ディスク２台分の「冗長」情報を生成し、アレイ内に記憶する。この冗長情報（例えば、パリティ）は例えば、対角パリティセット（「対角」）及び行パリティセット（「行」）に沿った計算から導出される。具体的には、ＲＡＩＤシステムは、アレイの行に沿って行パリティを計算し、アレイの対角方向に沿って対角パリティを計算する。ただし、冗長（パリティ）情報ディスクの内容は、純粋に対角冗長情報（だけを）含むディスクや、純粋に行冗長情報（だけを）含むディスクがないように相互作用する。冗長情報は対角パリティを使用して生成され、その結果が、行パリティ計算に使用される（逆もまた可能である）。
2007524930.tif 000002
【特許請求の範囲】
【請求項１】
ストレージシステム内の２以下のストレージデバイスの二重故障訂正を提供するように構成されたシステムであって、
多数のストレージデバイスを有するアレイであって、前記ストレージデバイスの数がｐであり、ｐが３以上の素数であり、前記ストレージデバイスが、冗長情報を記憶するために選択された２つのストレージデバイスを含み、残りのストレージデバイスがデータを記憶するように構成される、多数のストレージデバイスを有するアレイと、
前記ストレージデバイスのストレージモジュールであって、前記アレイの行パリティセット（行）及び対角パリティセット（対角）に沿って合計または結合計算を含む冗長ストレージアルゴリズムを使用して、冗長情報を構成し、選択されたストレージデバイス上に記憶するように構成された、前記ストレージデバイスのストレージモジュールと
を含み、前記２以下のストレージデバイス故障の構成に使用される前記冗長ストレージアルゴリズムは、前記冗長情報又はデータを構成又は再構成するときに、どのストレージデバイスが故障しても、また、ストレージデバイスの役割が何であっても無関係に同じである、システム。
【請求項２】
前記冗長情報は対角と行の両方に沿って構成され、選択されたストレージデバイス上に記憶され、選択されたストレージデバイスの中に、対角情報だけを有するストレージデバイスや、行冗長情報だけを有するストレージデバイスがないように構成される、請求項１に記載のシステム。
【請求項３】
前記選択されたストレージデバイスに記憶される冗長情報は、該冗長情報が、行パリティ計算貢献度、及び、対角パリティ計算貢献度によって一意に決まるように相互作用する、請求項２に記載のシステム。
【請求項４】
前記ストレージデバイスはストライプに分割された記憶空間を有し、冗長情報を記憶するために任意の２つのストレージデバイスが選択され、前記選択されるストレージデバイスはストライプごとに自由に異なる、請求項１に記載のシステム。
【請求項５】
前記ストレージモジュールはディスクアレイコントローラである、請求項４に記載のシステム。
【請求項６】
前記ストレージモジュールはＲＡＩＤシステムである、請求項４に記載のシステム。
【請求項７】
１以上のビット幅であるビットフィールドにわたって、前記行と対角が、線形結合アルゴリズムを使用して結合される、請求項６に記載のシステム。
【請求項８】
前記冗長情報は、各対角及び各行が既知のパリティ値を有することを保証するものである、請求項７に記載のシステム。
【請求項９】
前記アレイ内の前記ストレージデバイスの役割は、任意の２つの故障したストレージデバイスの内容の計算に関して無関係である、請求項７に記載のシステム。
【請求項１０】
前記ストレージデバイスは、ビデオテープ、磁気テープ、光学的、ＤＶＤ、バブルメモリ、磁気ディスク、電気的ランダムアクセスメモリ、及び、微小電気機械ストレージデバイスのうちのいずれか１つである、請求項９に記載のシステム。
【請求項１１】
前記ストレージデバイスは、情報をデータブロックとパリティブロックに記憶するように構成された媒体である、請求項９に記載のシステム。
【請求項１２】
前記アレイは２以上のＲＡＩＤグループを有し、１以上のＲＡＩＤグループが、前記ＲＡＩＤグループのうちのいずれか１つにおける２以下の故障に対する保護を提供する冗長ストレージアルゴリズムを使用し、各ＲＡＩＤグループはｐ個のストレージデバイスを含み、ｐは３以上の素数であり、ｐの値はグループごとに異なるものであってよい、請求項１１に記載のシステム。
【請求項１３】
ｐ個全てのストレージデバイスが前記アレイ内に存在するのではなく、存在しないストレージデバイスの内容は、所定の固定値を有する、請求項１２に記載のシステム。
【請求項１４】
ｐ個全てのストレージデバイスが前記アレイ内に存在するのではなく、存在しないストレージデバイスの内容は、所定の固定値を有する、請求項１に記載のシステム。
【請求項１５】
ストレージシステム内の２以下のストレージデバイスの二重故障訂正を提供するように構成されたシステムであって、
多数のストレージデバイスを有するアレイであって、前記ストレージデバイスの数がｐであり、ｐが３以上の素数であり、前記ストレージデバイスが、冗長情報を記憶するために選択された２つのストレージデバイスを含み、残りのストレージデバイスはデータを記憶するように構成される、多数のストレージデバイスを有するアレイと、
前記ストレージデバイスのストレージモジュールであって、前記アレイの行パリティセット（行）及び対角パリティセット（対角）に沿って合計または結合計算を含む冗長ストレージアルゴリズムを使用して、冗長情報を構成し、選択されたストレージデバイス上に記憶するように構成され、更に、前記冗長ストレージアルゴリズムを使用して、２以下のストレージデバイス故障を復元するように構成される、前記ストレージデバイスのストレージモジュールと、
を含み、前記ストレージデバイスは、ストライプに分割された記憶空間を有し、任意の２つのストレージデバイスが、前記冗長情報を記憶するために選択され、該選択されるストレージデバイスはストライプごとに自由に異なり、前記２以下のストレージデバイス故障が、それらのデバイスの役割や、アレイ内の他のストレージデバイスに関する知識を何も必要とせずに復元される、システム。
【請求項１６】
前記冗長情報は対角と行の両方に沿って構成され、選択されたストレージデバイス上に記憶され、選択されたストレージデバイスの中に、対角情報だけを有するストレージデバイスや、行冗長情報だけを有するストレージデバイスがないように構成される、請求項１５に記載のシステム。
【請求項１７】
前記選択されたストレージデバイスに記憶される冗長情報は、該冗長情報が、行パリティ計算貢献度、及び、対角パリティ計算貢献度によって一意に決まるように相互作用する、請求項１６に記載のシステム。
【請求項１８】
前記ストレージモジュールはディスクアレイコントローラである、請求項１５に記載のシステム。
【請求項１９】
前記ストレージモジュールはＲＡＩＤシステムである、請求項１５に記載のシステム。
【請求項２０】
１以上のビット幅であるビットフィールドにわたって、前記行と対角が、線形結合アルゴリズムを使用して結合され、前記冗長情報は、各対角及び各行が既知のパリティ値を有することを保証するものである、請求項１９に記載のシステム。
【請求項２１】
前記アレイは、対称な行−対角（ＳＲＤ）パリティアレイである、請求項２０に記載のシステム。
【請求項２２】
前記アレイ内の前記ストレージデバイスの役割は、任意の２つの故障したストレージデバイスの内容の計算に関して無関係である、請求項２０に記載のシステム。
【請求項２３】
前記ストレージデバイスは、ビデオテープ、磁気テープ、光学的、ＤＶＤ、バブルメモリ、磁気ディスク、電気的ランダムアクセスメモリ、及び、微小電気機械ストレージデバイスのうちのいずれか１つである、請求項２２に記載のシステム。
【請求項２４】
前記ストレージデバイスは、情報をデータブロックとパリティブロックに記憶するように構成された媒体である、請求項２２に記載のシステム。
【請求項２５】
前記アレイは２以上のＲＡＩＤグループを有し、１以上のＲＡＩＤグループが、前記ＲＡＩＤグループのうちのいずれか１つにおける２以下の故障に対する保護を提供する冗長ストレージアルゴリズムを使用し、各ＲＡＩＤグループはｐ個のストレージデバイスを含み、ｐは３以上の素数であり、ｐの値はグループごとに異なるものであってよい、請求項２４に記載のシステム。
【請求項２６】
ｐ個全てのストレージデバイスが前記アレイ内に存在するのではなく、存在しないストレージデバイスの内容はゼロである、請求項２５に記載のシステム。
【請求項２７】
ｐ個全てのストレージデバイスが前記アレイ内に存在するのではなく、存在しないストレージデバイスの内容は所定の固定値を有する、請求項１５に記載のシステム。
【請求項２８】
ストレージシステム内の２以下のディスク故障に対する保護を提供する方法であって、
多数のディスクを有するアレイを提供するステップであって、該ディスクの数がｐであり、ｐが３以上の素数であり、前記ディスクが、冗長情報を記憶するために選択された２つのディスクを含み、残りのディスクがデータを記憶するように構成される、多数のディスクを有するアレイを提供するステップと、
前記アレイの行パリティセット（行）及び対角パリティセット（対角）に沿った合計及び結合の計算により、前記冗長を計算するステップと、
計算された冗長情報を前記選択されたディスクに記憶するステップと
からなる方法。
【請求項２９】
前記計算するステップは、前記冗長情報を対角と行の両方に沿って計算し、選択されたストレージデバイス上に記憶するステップを含み、前記冗長情報は、選択されたストレージデバイスの中に対角情報だけを有するストレージデバイスや、行冗長情報だけを有するストレージデバイスがないように記憶される、請求項２８に記載の方法。
【請求項３０】
前記計算するステップは、前記アレイの行に沿って行パリティを計算し、前記アレイの対角に沿って対角パリティを計算するステップを更に含み、前記冗長情報は、各対角及び各行が既知のパリティ値を有することを保証する、請求項２９に記載の方法。
【請求項３１】
前記計算するステップは、排他的論理和演算計算を使用して前記冗長情報を計算するステップを更に含む、請求項３０に記載の方法。
【請求項３２】
前記アレイ内のディスクの役割は、任意の２つの故障したストレージデバイスの内容の計算に関して無関係である、請求項３１に記載の方法。
【請求項３３】
前記計算するステップは、１以上のビット幅であるビットフィールドにわたる加算により計算するステップを更に含む、請求項２８に記載の方法。
【請求項３４】
各ディスクをブロックに分割するステップと、
各ディスクにおいて前記ブロックを、各ストライプがｐ−１行のブロックを含む同数のブロックを記憶するストライプに編成するステップと、
前記ブロックの役割を自由に割り当て、それによって、前記アレイ全体にわたるデータロードのバランスをとることを可能にするステップと
を更に含む、請求項２８に記載の方法。
【請求項３５】
前記データロードのバランスをとり、又は、前記アレイにディスクを追加するために、データを移動させることなくディスクの役割を再割当てするステップを更に含む、請求項３４に記載の方法。
【請求項３６】
各ディスクから自由に選択された１以上ブロックから行を構成するステップを更に含む、請求項３４に記載の方法。
【請求項３７】
ｐ−１が２の累乗であるときに、ブロックの行を結合し、より大きなブロックからなる単一のストライプを形成するステップを更に含む、請求項３４に記載の方法。
【請求項３８】
初期化されたディスクを前記アレイに追加するステップと、
前記初期化されたディスク上のブロックをデータ又は冗長情報の記憶に指定し、同時に、各ストライプにおける２つのブロックに冗長情報が記憶されることを保証するステップと
を更に含む、請求項３４に記載の方法。
【請求項３９】
前記初期化されたディスクの内容は、失われたディスクの補完された内容に一致し、前記アレイ内の前記冗長情報は再計算を必要としないように構成される、請求項３８に記載の方法。
【請求項４０】
前記初期化されたディスクの内容はゼロである、請求項３９に記載の方法。
【請求項４１】
前記ディスクはストライプに分割されたディスク空間を有し、前記冗長情報を記憶するために任意の２つのディスクを選択するステップを更に含み、該選択されるディスクはストライプごとに自由に異なる、請求項２８に記載の方法。
【請求項４２】
ｍ＞＝ｐとして前記ディスクに０からｍ−１までの番号が付けられていて、ディスクｊがディスク（ｊ＋ｋ）モジューロｍになり、前記冗長情報の計算や該計算の結果が変化しないように、前記ディスクを量ｋだけ回転させることにより、前記ディスクに番号を付け直すステップを更に含む、請求項２８に記載の方法。
【請求項４３】
ストレージシステム内の２以下のストレージデバイスの二重故障訂正を提供するように構成されたシステムであって、
多数のストレージデバイスを有するアレイであって、前記ストレージデバイスの数がｐであり、ｐが３以上の素数であり、前記ストレージデバイスが、冗長情報を記憶するために選択された２つのストレージデバイスを含み、残りのストレージデバイスはデータを記憶するように構成される、多数のストレージデバイスを有するアレイと、
前記ストレージデバイスのストレージモジュールであって、前記アレイの行パリティセット（行）及び対角パリティセット（対角）に沿って合計または結合計算を含む冗長ストレージアルゴリズムを使用して、冗長情報を構成し、選択されたストレージデバイス上に記憶するように構成され、更に、どのストレージデバイスが故障したか、及び、ストレージデバイスが冗長情報を記憶しているかそれともデータを記憶しているかに関わらず、前記冗長ストレージアルゴリズムを使用して、２以下のストレージデバイス故障を復元するように構成される、前記ストレージデバイスのストレージモジュールと、
を含み、前記ストレージデバイスは、ストライプに分割された記憶空間を有し、任意の２つのストレージデバイスが、前記冗長情報を記憶するために選択され、該選択されるストレージデバイスはストライプごとに自由に異なり、前記２以下のストレージデバイス故障が、それらのデバイスの役割や、アレイ内の他のストレージデバイスに関する知識を何も必要とせずに復元される、システム。
【請求項４４】
前記冗長情報は対角と行の両方に沿って構成され、選択されたストレージデバイス上に記憶され、選択されたストレージデバイスの中に、対角情報だけを有するストレージデバイスや、行冗長情報だけを有するストレージデバイスがないように構成される、請求項４３に記載のシステム。
【請求項４５】
前記選択されたストレージデバイスに記憶される冗長情報は、該冗長情報が、行パリティ計算貢献度、及び、対角パリティ計算貢献度によって一意に決まるように相互作用する、請求項４４に記載のシステム。
【請求項４６】
各ストレージデバイスがブロックに分割され、各ディスクにおいて、前記ブロックは同数のブロックを有するストライプに編成される、請求項４４に記載のシステム。
【請求項４７】
ｐ−１行のセット内においてｉをブロックのディスク番号とし、ｊをそのブロックの行番号としたときに、各対角ｄはｄ＝（ｉ＋ｊ）モジューロｐである、請求項４６に記載のシステム。
【請求項４８】
ｐ−１行のセット内においてｉをブロックのディスク番号とし、ｊをそのブロックの行番号としたときに、各対角ｄはｄ＝（ｉ−ｊ）モジューロｐである、請求項４６に記載のシステム。
【請求項４９】
ｐ−１行のセット内においてｉをブロックのディスク番号とし、ｊをそのブロックの行番号とし、ｋを固定の整数とし、ｋ≠０とし、−ｐ＜ｋ＜ｐとしたときに、各対角ｄはｄ＝（ｉ＋ｋｊ）モジューロｐである、請求項４６に記載のシステム。
【請求項５０】
一連のブロックが１つのチェーンとして編成され、該チェーン内の全てのブロックが２つのストレージデバイスに属し、該チェーンの両端にある２つのブロックが、異なるストレージデバイス上にあり、且つ、該チェーン上の最も近い近傍ブロックと同じ行にあり、該チェーン内の他のブロックは全て、該チェーン内のもう１つのブロックと同じ行にあり、且つ、該チェーン内のもう１つのブロックと同じ対角上にある、請求項４６に記載のシステム。
【請求項５１】
前記ストレージモジュールはディスクアレイコントローラである、請求項４３に記載のシステム。
【請求項５２】
前記ストレージモジュールはＲＡＩＤシステムである、請求項４３に記載のシステム。
【請求項５３】
１以上のビット幅であるビットフィールドにわたって、前記行と対角が、線形結合アルゴリズムを使用して結合され、前記冗長情報は、各対角及び各行が既知のパリティ値を有することを保証するものである、請求項５２に記載のシステム。
【請求項５４】
前記アレイは、一様で対称な行−対角（ＳＲＤ）パリティアレイである、請求項５３に記載のシステム。
【請求項５５】
前記アレイ内の前記ストレージデバイスの役割は、任意の２つの故障したストレージデバイスの内容の計算に関して無関係である、請求項５３に記載のシステム。
【請求項５６】
前記ストレージデバイスは、ビデオテープ、磁気テープ、光学的、ＤＶＤ、バブルメモリ、磁気ディスク、電気的ランダムアクセスメモリ、及び、微小電気機械ストレージデバイスのうちのいずれか１つである、請求項５５に記載のシステム。
【請求項５７】
前記ストレージデバイスは、情報をデータブロックとパリティブロックに記憶するように構成された媒体である、請求項５５に記載のシステム。
【請求項５８】
前記アレイは２以上のＲＡＩＤグループを有し、１以上のＲＡＩＤグループが、前記ＲＡＩＤグループのうちのいずれか１つにおける２以下の故障に対する保護を提供する冗長ストレージアルゴリズムを使用し、各ＲＡＩＤグループはｐ個のストレージデバイスを含み、ｐは３以上の素数であり、ｐの値はグループごとに異なるものであってよい、請求項５７に記載のシステム。
【請求項５９】
ｐ個全てのストレージデバイスが前記アレイ内に存在するのではなく、存在しないストレージデバイスの内容はゼロである、請求項５８に記載のシステム。
【請求項６０】
ｐ個全てのストレージデバイスが前記アレイ内に存在するのではなく、存在しないストレージデバイスの内容は所定の固定値を有する、請求項４３に記載のシステム。
【請求項６１】
ストレージシステムにおける２以下のディスク故障に対する保護を提供する装置であって、
多数のディスクを有するアレイを提供する手段であって、該ディスクの数がｐであり、ｐが３以上の素数であり、前記ディスクが、冗長情報を記憶するために選択された２つのディスクを含み、残りのディスクがデータを記憶するように構成される、多数のディスクを有するアレイを提供する手段と、
対角パリティ計算貢献度と行パリティ計算貢献度の両方から前記冗長情報を計算する手段と、
選択されたディスクの中に、対角パリティ情報だけを有するものや、行パリティ情報だけを有するものがないようにして、計算された前記冗長情報を前記選択されたディスクに記憶する手段と
からなる装置。
【請求項６２】
前記ディスクはストライプに分割されたディスク空間を有し、前記冗長情報を記憶するために任意の２つのディスクを選択する手段を更に含み、選択される前記ディスクはストライプごとに異なるように選択される、請求項６１に記載の装置。
【請求項６３】
通信媒体を介して伝送するために構成されたデータ内の二重故障を訂正する方法であって、
前記通信媒体を介して伝送するために、前記データをパケットに分割するステップと、
前記パケットを１以上のグループに編成するステップであって、該グループが、一様で対称な二重故障訂正アルゴリズムを使用して、前記グループのうちのいずれか１つにおけるパケットの２以下の故障に対する保護を提供するように構成され、各グループがｐ個のパケットを含み、ｐが３以上の素数であり、ｐの値がグループごとに異なる場合があり、冗長情報を記憶するために各グループの２つのパケットが選択され、該グループの残りのパケットがデータを記憶するように構成される、前記パケットを１以上のグループに編成するステップと、
前記グループの行パリティセット（行）と対角パリティセット（対角）の合計又は結合計算により前記冗長情報を計算するステップと、
計算された前記冗長情報を選択された前記パケットに記憶するステップと
からなる方法。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明はストレージシステムの故障訂正アルゴリズムに関し、詳しくは、ディスクアレイ内の２つのディスク故障に対する保護を提供する対称な二重故障訂正アルゴリズムに関する。
【背景技術】
【０００２】
発明の背景
ストレージシステムは一般に、１以上のストレージデバイスからなり、その中に情報を入れたり、必要に応じてそこから情報を取り出したりする。ストレージシステムは、とりわけ、システムによって実施されるストレージサービスを支えるストレージオペレーションを実施することによりシステムを機能的に編成するストレージオペレーティングシステムを有する。ストレージシステムは、限定はしないが、ネットワーク・アタッチド・ストレージ環境、ストレージ・エリア・ネットワーク、及び、クライアントコンピュータやホストコンピュータに直接取り付けられたディスクアセンブリのような種々のストレージアーキテクチャに従って実施される。ストレージデバイスとは一般に、ディスクアレイとして編成されたディスクドライブであり、その場合、「ディスク」という用語は一般に、内蔵型回転磁気媒体ストレージデバイスを言う。この文脈におけるディスクという用語は、ハードディスクドライブ（ＨＤＤ）やダイレクト・アクセス・ストレージ・デバイス（ＤＡＳＤ）と同義である。
【０００３】
ディスクアレイにおける情報の記憶は、ディスク空間の全体的論理配置を規定する、複数の物理的ディスクの集まりからなる１以上のストレージ「ボリューム」として実施されることが好ましい。ボリューム内のディスクは通常、１以上のクループに編成され、各グループは、ＲＡＩＤ(Redundant Array of Independent (or Inexpensive) Disks)として動作する。この文脈において、ＲＡＩＤグループとは、それらのディスクに関連する多数のディスク、及び、アドレス／ブロック空間として定義される。「ＲＡＩＤ」という用語及びその種々の実施形態は既知のものであり、「A Case for Redundant Arrays of Inexpensive Disks (RAID)」、D. A. Patterson、 G. A. Gibson、及び、R.H. Katz著、Proceedings of the International Conference on Management of Data (SIGMOD)、１９９８年６月、に開示されている。
【０００４】
ストレージシステムのストレージオペレーティングシステムは、情報をディレクトリ、ファイル、及び、ブロックの階層構造としてディスク上に論理編成するためのファイルシステムを実施する場合がある。例えば、「ディスク上」の各ファイルは、そのファイルの実際のデータのような情報を記憶するように構成されたデータ構造、すなわちディスクブロックのセットとして実施される場合がある。ストレージオペレーティングシステムは、書き込み処理や読み出し処理に従ってディスクに対する情報の記憶や読み出しを管理するＲＡＩＤシステムのようなストレージモジュールを更に実施する場合がある。なお、ＲＡＩＤシステムは、ＲＡＩＤアレイのＲＡＩＤコントローラとして実施される場合もある。従って本明細書で使用されるように、「ＲＡＩＤシステム」という用語は、ハードウェア、ソフトウェア、ファームウェア（又はそれらの組み合わせ）のいずれの実施形態をも意味する場合がある。例えばディスク番号空間においてディスク上に記憶される情報と、例えばボリュームブロック番号空間においてファイルシステムによって編成される情報との間には通常、一対一のマッピングが存在する。
【０００５】
ファイルシステムの一般的タイプは、「定位置書き込み型」ファイルシステムであり、その一例は、従来のバークレイ・ファースト・ファイルシステムである。定位置書き込み型ファイルシステムでは、ディスク上のデータブロックのようなデータ構造の位置が一般に固定されている。データブロックに対する変更は「定位置」で行われる。ファイルの更新によってそのファイルのデータ量が増大する場合、更なるデータブロックが割り当てられる。ファイルシステムの他のタイプは、ディスク上のデータを上書きしないWrite-anywhereファイルシステムである。ディスク上のデータブロックをディスクからストレージシステムのメモリに取り出し（読み出し）、新たなデータで「汚す」と、そのデータブロックは、ディスク上の新たな場所に記憶され（書き込まれ）、それによって書き込み性能が最適化される。Write-anywhereファイルシステムは、ディスク上にデータが実質的に連続的に配置されるような最適レイアウトを最初に想定する。この最適ディスクレイアウトによって、効率的なアクセス処理が可能となり、特に、ディスクに対するシーケンシャル読み出し処理の場合に効率的なアクセス処理が可能になる。ストレージオペレーティングシステム上で動作するWrite-anywhereファイルシステムの一例は、カリフォルニア州サニーベイルにあるネットワーク・アプライアンス・インコーポレイテッドから市販されているWrite Anywhere File Layout(「WAFL」)である。
【０００６】
大抵のＲＡＩＤ実施形態は、ＲＡＩＤグループ内の所与の数の物理的ディスクにわたってデータを「ストライプ」状に冗長書き込みし、そのストライプ状のデータに関する冗長情報を適宜記憶することにより、データ記憶の信頼性／完全性を向上させている。例えば、パリティ情報のような冗長情報によれば、ディスク故障時のデータ損失からの復元が可能になる。パリティ値は、種々のデータを有する複数の同様のディスクにわたる特定ワードサイズのデータ（通常は１ビット）の合計（通常はモジューロ２で）として計算され、その結果が、別の同様のディスクに記憶される。つまり、パリティは、各ディスク上の対応する部分にある複数のビットからなる１ビット幅のベクトルに基づいて計算される場合がある。１ビット幅ベクトルに基づいて計算した場合、計算された合計とその補数は、いずれもパリティとして使用することができる。それらはそれぞれ、偶数パリティ及び奇数パリティと呼ばれる。１ビットベクトルに基づく加算及び減算は、いずれも排他的論理和（ＸＯＲ）論理演算と等価である。そして、そのデータは、いずれか１つのディスクの損失、又は、いずれか１つのディスク上のいずれかの部分の損失に対する保護を提供する。パリティを記憶しているディスクが失われた場合、パリティはそのデータから復元することができる。データディスクのうちの１つが失われた場合、そのデータは、残ったディスクの内容を加算し、その結果を記憶されたパリティから減算することによって復元することができる。
【０００７】
一般に、ディスクは複数のパリティグループに分割され、各パリティグループは１以上のデータディスク及び１つのパリティディスクから構成される。パリティセットは、複数のデータブロックと１つのパリティブロックからなるブロックのセットであり、パリティブロックは、全てのデータブロックのＸＯＲをとったものに等しい。パリティグループはディスクのセットであり、その中から１以上のパリティセットが選択される。ディスク空間は複数のストライプに分割され、各ストライプは各ディスクから１つのブロックを含む。ストライプのブロックは通常、パリティグループにおける各ディスク上の同じ位置にある。ストライプ内で、１つのブロックを除く全てのブロック（「データブロック」）はデータを保持する一方、１つのブロック（「パリティブロック」）は全てのデータのＸＯＲをとることによって算出されたパリティを保持する。
【０００８】
パリティブロックを全て１つのディスクに記憶し、全部がパリティ情報の（すなわち、パリティ情報だけしか持たない）単一のディスクを構成する場合、ＲＡＩＤ４レベル実施形態が形成される。ＲＡＩＤ４実施形態は、パリティ情報の位置を各ＲＡＩＤグループにおいて固定するので、事実上、先進的ＲＡＩＤ（すなわち、ストライピングやミラーリングを超える）の最も単純な形である。特に、ＲＡＩＤ４実施形態によれば、ディスクを一台追加するだけで、一台のディスク故障からの保護を提供でき、データディスクをＲＡＩＤグループに逐次追加することも簡単である。
【０００９】
各ストリップにおいてパリティブロックが異なるディスクに、回転パターンで保持される場合、その実施形態はＲＡＩＤ５である。大抵の市販の実施形態は、先進的なＲＡＩＤ技術を使用し、パリティ情報を分散させるＲＡＩＤ５レベル実施形態を使用している。ＲＡＩＤ５実施形態を選択する動機は、多くの読み出し最適化をするファイルシステムにとって、ＲＡＩＤ４実施形態の使用は、処理能力を制限することがあるからである。そうした読み出し最適化を行うファイルシステムは、ディスクアレイ上の多数のストライプにわたって書き込みデータを分散させる性質があり、その結果、パリティディスクは書き込まれた各ストライプを探すことになる。ただし、WAFLファイルシステムのようなWrite-anywhereファイルシステムは、書き込みデータを少数の隣接ストライプ上に集中させるので、そのような問題がない。
【００１０】
本明細書で使用されるように、「エンコーディング」という用語は、データブロックの所定のサブセットにわたる冗長値の計算を意味し、「デコーディング」という用語は、データブロックのサブセットと冗長値を使用したデータブロックやパリティブロックの復元を意味する。ＲＡＩＤ４及びＲＡＩＤ５において、パリティグループ内の一台のディスクが故障した場合、残りのデータブロックの内容を全て加算し、その結果をパリティブロックから減算することにより、そのディスクの内容をデコード（復元）することができる。１ビットフィールドにおける２の補数による加算と減算はいずれも、ＸＯＲ演算と等価であるから、この復元は、生き残ったデータブロックとパリティブロックを全てＸＯＲ演算することからなる。同様に、パリティディスクが失われた場合、それも、生き残ったデータから同じ方法で再計算することができる。
【００１１】
パリティスキームは一般に、パリティグループ内の単一ディスク故障に対する保護を提供する。各故障が異なるパリティグループで発生する限りは、それらの方法でも、複数のディスク故障に対する保護を提供することが可能である。ただし、２つのディスク故障が１つのパリティグループ内で同時に発生する場合は、復元不能なデータ損失を受ける。１つのパリティグループ内における２台のディスクの同時故障は、かなり一般的に発生し得ることであり、特に、ディスクの磨耗や、ディスクの動作に関する環境要因から発生し得る。この文脈において、１つのパリティグループ内における２台のディスクの同時故障は、「二重故障」と呼ばれる。二重故障は一般に、一台のディスク故障と、その故障の復旧を試みている間に起きる別のディスクの故障によって発生する。例えば、二重故障の１つの一般的原因は、一台の故障したディスクと、１つの媒体故障（すなわち、ある行における単一の読み取り不能ブロック）との組み合わせである。
【００１２】
本明細書において、対称とは、或るアレイのディスク間において、パリティ構築アルゴリズムとディスク復元アルゴリズムの両方が、回転対称であることとして定義される。厳密には、ディスクに０〜ｍ−１の番号が付けられたｎディスクアレイにおいて、ｍ＞＝ｎとして、ディスクｊがディスク（ｊ＋ｋ）モジューロｍになるように、それらを或る量ｋだけ回転させることによってディスクの番号を付け直すと、パリティ計算やその計算結果は変化しない。更に、本明細書において一様性とは、どのディスクが失われたかに関わりなく、また、アレイ内のディスクの失われた部分に関わり無く、同じアルゴリズムを使用して、ストライプの失われた内容が計算されることを意味するものと定義される。つまり、アレイが一様であれば、アレイ内のどのディスクがパリティを保持していても、同じアルゴリズムを使用して、冗長情報の構築や、パリティの構築が行われることを意味する。更に、どのディスクが故障したかに関わらず、また、ディスクが冗長データを保持しているかそれともファイルシステムデータを保持しているかに関わらず、同じアルゴリズムを使用して、故障したディスクを復元することが可能であることも意味する。
【００１３】
一様なアルゴリズムを含むスキームによれば、パリティブロックを回転その他の方法で複数のディスクにわたって種々のストライプ上の種々の場所へ分散させた状態で、アレイ内の全てのディスクをデータの記憶に使用することが可能になる。そして、高性能な完全ストライプ書き込み処理と部分的ストライプ書き込み処理を実現しつつも、読み出し処理の際に全てのディスクを使用することが可能になる。さらに、メタデータマッピングファイルのようなデータ構造を設定することにより、任意の特定のストライプにおいてどのディスクがパリティやデータを保持するかを指定することができる。これらの「マップ」は復元を実施する必要がないので、ＲＡＩＤシステムとは無関係に、ファイルシステムによって管理される場合がある。
【００１４】
一般的な単一ブロック行パリティスキームは、単一故障訂正スキームの実施に使用されることがある。ストライプ内の全てのブロックが、全てのブロックにわたって合計された各ビット位置の総合パリティが偶数であるという不変性に対し、均一に貢献する。なお、パリティ値が既知である（予め決まっている）場合、パリティは偶数であってもよいし、奇数であってもよい。本明細書における下記の説明は、偶数パリティの使用に関するものである。従って、復元の際に、どのブロックがデータを保持し、どのブロックがパリティを保持しているかを知っている必要はない。失われたブロックは、各ブロックにわたって対応するビット位置にあるビットをモジュール２で合計することにより復元される。この合計が失われたブロックである。なぜなら、このブロック値を残りのブロック値の合計に加算すると、そのストライプが偶数パリティであることを示すゼロが生成されるからである。
【００１５】
各ストライプに偶数パリティを確立するためには、多少の自由が必要になる。それはパリティブロックの内容であり、パリティブロックの内容はすべてのデータブロックの内容によって決まる。ＲＡＩＤシステムは、データブロックの内容を一回のパリティエンコードで自由に変更することができず、単一のパリティブロックの内容を設定することにより、ストライプのパリティを中立的な偶数パリティ状態にできるに過ぎない。
【００１６】
行−対角（ＲＤ）パリティ技術によれば、ディスクアレイ内の行パリティと対角パリティを使用した二重故障パリティ訂正復元が可能になる。ＲＤパリティ技術は、１台の行パリティディスクと１台の対角パリティディスクを含むｎ台のディスクのような記憶装置からなるアレイにおいて使用される場合がある。ただし、ｎ＝ｐ＋１、ｐは素数である。ディスクはブロックに分割され、ブロックはストライプに編成される。各ストライプは（ｎ−２）行からなる。対角パリティディスクは、アレイの対角パリティセット（「対角」）に沿って計算されたパリティ情報を記憶する。対角は、ストライプ内の１つのディスクを除く全てのディスクを対象としたあらゆる対角のように定義される。
【００１７】
ストライプ内のブロックは（ｎ−１）個の対角に編成され、各対角はデータディスクと行パリティディスクから（ｎ−２）個のブロックを有し、そのうちの１つを除く全ては、そのパリティを対角パリティディスク上のブロックに記憶する。ストライプ内において、対角パリティブロックは、行パリティセットには参加しない。ＲＤパリティ技術の実施形態では、どのパリティ対角が失われた対角であるかを、すなわち、パリティブロックが計算も記憶もされていない対角を知っていなければならない。ＲＤパリティ技術については、２００１年１２月２８日に出願されたPeter F. Corbett他による「Row-Diagonal Parity Technique for Enabling Efficient Recovery from Double Failures in a Storage Array」と題する米国特許出願第１０／０３５，６０７号に記載されており、この文献は参照により完全に説明されたものとして本明細書に援用される。
【００１８】
一般的なＲＡＩＤ４アレイ、又は、ＲＡＩＤ５アレイのストライプはそれぞれ、複数のデータディスクの集まりと、１つの指定された行パリティディスクとを有し、ＲＤパリティ技術を実施するように構成される。ＲＤパリティ技術を実施できるようにするために、ＲＡＩＤ４アレイ、又は、ＲＡＩＤ５アレイのストライプは、対角パリティディスクの追加によって拡張される。パリティ内のディスク数は（ｐ＋１）に設定され、複数のストライプからなる二重ディスク故障許容グループを形成するために必要とされるブロックの行数は（ｐ−１）である。それら（ｐ＋１）個のディスクのうちの少なくとも２つはパリティ情報を保持しなければならず、それら２つのディスクのうちの１つはアレイの対角パリティを保持しなければならない。１以上の他の冗長ディスクは、行パリティ情報を保持する。残りの（ｐ−１）以下の数のディスクは、データを保持する。それらのディスクのうちの任意数は、アレイの外に置かれる場合がある。パリティ計算の際に、存在しないディスクは全てゼロを保持しているものと仮定される。それによって、異なるサイズのアレイを使用することが可能となり、パリティを再計算することなく、既存のアレイにデータディスクを追加することが可能となる。
【００１９】
図１は、ｐ＝５として、行−対角（ＲＤ）パリティ構成に従って構成されたディスクアレイ１００を示す略ブロック図である。各位置に書かれた数字は、そのブロック（又は、サブブロック）が属する対角パリティセットに対応している。対角パリティブロックは、対応する対角上にある幾つかのブロックのモジューロ２合計である。行パリティブロックは、対応する行にある全てのデータブロックのモジューロ２合計である。ＲＤパリティ技術によれば、行パリティは、対角パリティディスクを除く、１つのストライプの全てのディスクにわたって計算される。対角パリティディスクは、アレイ内の他の全てのディスクに関して、一様でも対称でもない特有の機能を有する。すなわち、対角パリティディスクは対角パリティを記憶するだけであり、行パリティ計算には参加しない。従ってＲＤパリティ二重故障訂正技術は対称ではなく、本発明は、対称な二重故障訂正技術を提供することに関する。
【００２０】
アレイ内のデータブロックやパリティブロックの位置をストライプごとに変化させる利点は、読み出し性能が向上することである。全てのディスクが一様な比率でデータを保持していれば、読み出しの作業負荷は、全てのディスクにわたってバランスがとれる可能性がある。一様性の利点は、ストライプ内の冗長ブロックの位置の違いによるパフォーマンスやアルゴリズムの変化がないことである。従って、どのブロックを使用してパリティを記憶するかの決定を、その選択が冗長データ構築の性能に影響を与えるかもしれないことから、偏りなく行うことができる。その結果、各ストライプにおいてどのディスクを使用して冗長データを保持するかを選択する際の完全な柔軟性が得られる。
【発明の開示】
【課題を解決するための手段】
【００２１】
発明の概要
本発明は、ストレージシステムのディスクアレイにおける２以下のディスク故障に対する保護を提供する一様で対称な二重故障訂正技術を提供することにより、本明細書に記載した欠点を克服する。ストレージシステムのＲＡＩＤシステムは、ディスク２台分の「冗長」情報を生成し、アレイに記憶する。この冗長情報（例えば、パリティ）は、例えば、対角パリティセット（「対角」）と行パリティセット（「行」）の両方に沿って計算される。具体的には、ＲＡＩＤシステムは、アレイの行に沿って行冗長値を計算し、アレイの対角方向に沿って対角冗長値を計算する。ただし、冗長（パリティ）情報ディスクの内容は、純粋に対角情報（だけを）含むディスクや、純粋に行冗長情報（だけを）含むディスクがないように相互作用する。冗長情報は対角パリティを使用して生成され、その結果が行パリティ計算に使用される（逆も可能である）。
【００２２】
例示的実施形態において、ディスクアレイはｐ個のディスクを含む一様で対称な行−対角（ＳＲＤ）パリティアレイであり、それらのディスクは複数のブロックに分割され、１ストライプあたり（ｐ−１）行のブロックに編成される。ただし、ｐは３以上の素数であり、各行は各ディスクから１つのブロックを含む。なお、本発明において、１つの行は通常、各ディスク上の同じ相対位置にある幾つかのブロックから構成されることが望ましいが、各ディスクからの１以上のブロックを行として編成する任意の自由な構成を使用してもよい。ディスクのうちの２台は冗長（パリティ）ディスクであり、各パリティディスクは、そのディスクのパリティブロックの中に冗長情報を保持する。残りのディスクは、データを記憶するように構成されたデータディスクである。パリティ情報を保持する２つのディスクは、行パリティだけを保持するのでも、対角パリティだけを保持するのでもない。それらのディスクは、各対角のパリティが偶数になり、各行のパリティが偶数になることを保証するために必要な情報を保持する。パリティブロック内の冗長情報は、行パリティ計算貢献度及び対角パリティ計算貢献度によって一意に決定される。
【００２３】
特に、それらのパリティディスク内のブロックは全て、行の要素でも対角の要素でもある。そのため、それらのパリティディスク間に機能的な違いはなく、両方とも冗長情報を保持し、各ディスクのブロックは、行に対するブロックの貢献度と、対角に対するブロックの貢献度から形成される。もっと一般的なケースでは、ＳＲＤアレイ内のディスクのうちの任意の２つが、そのアレイ内のパリティディスクとして選択され、その選択はストライプごとに異なる場合がある。２つのパリティディスクを任意に選択し、アレイ内の２台の故障ディスクを復元することにより、回転的に一様で対称な二重故障訂正パリティ技術が提供される。
【００２４】
本発明の一様で対称な二重故障訂正技術によれば、データディスクやパリティディスクの故障、及びそれらの組み合わせを含む、アレイ内の任意の２以下のディスク故障からの復旧が可能となる。また、本技術は、回転対称かつ一様であり、失われたディスクの役割や、アレイ内の他のディスクの役割を何も知らなくても、失われたディスクを復旧させることができる。更に、上述のように、ディスクの役割をディスクごとに自由に再割当てすることができる。
【００２５】
本発明の上記の利点及び他の利点は、添付の図面を参照し、下記の説明を読むと分かりやすいであろう。図中、同じ参照符号は同一の要素、又は、機能的に類似の要素を示している。
【発明を実施するための最良の形態】
【００２６】
例示的実施形態の詳細な説明
図２は、本発明と共に使用するのに都合がよいストレージシステム２００を示す略ブロック図である。図示の実施形態において、ストレージシステム２００は、システムバス２２５によって相互接続されたプロセッサ２２２、メモリ２２４、及び、ストレージアダプタ２２８を有する。メモリ２２４は、本発明に関連するソフトウェアプログラムコードやデータ構造を記憶する際にプロセッサやアダプタによってアドレス指定することが可能な記憶場所を有する。また、プロセッサ及びアダプタは、ソフトウェアコードを実行し、データ構造を操作するように構成された処理要素、及び／又は、論理回路を含む。当業者には明らかなように、本明細書に記載する本発明に関係するプログラム命令の記憶や実行には、種々のコンピュータ読取可能媒体を含めて、他の処理手段及び他の記憶手段を使用してもよい。
【００２７】
ストレージオペレーティングシステム２５０の一部は通常、メモリに常駐し、処理要素によって実行され、とりわけ、ストレージシステムによって実行される記憶処理を実行することにより、ストレージシステム２００を機能的に構成する。ストレージオペレーティングシステムは、情報をディレクトリ、ファイル、及び、ブロックの階層構造としてアレイのディスク上に編成するための上位モジュールを実行する。ストレージオペレーティングシステム２５０は、書き込み処理及び読み出し処理に従って、ディスクに対する情報の記憶や読み出しを管理するためのストレージモジュールを更に実行する。なお、上位モジュール及びストレージモジュールは、ソフトウェア、ハードウェア、又は、それらの組み合わせのうちのいずれの形で実施してもよい。
【００２８】
具体的には、上位モジュールは、ディスクアレイ内の記憶空間の割り当てを行い、ディスクアレイ内のデータのレイアウトを制御するファイルシステム２６０、又は、データベースのような他のモジュールからなる。また、ストレージモジュールは、冗長記憶アルゴリズムを使用して冗長（例えば、パリティ）情報を計算し、ディスク故障からの復旧を行うように構成されたディスクアレイ制御システム、又は、ＲＡＩＤシステム２７０からなる。ディスクアレイ制御システム（「ディスクアレイコントローラ」）、又は、ＲＡＩＤシステムは、アレイ上での固定データの配置に応答して、代数的及びアルゴリズム的な計算を使用して、冗長情報を更に計算する場合がある。
【００２９】
図示の実施形態において、ストレージオペレーティングシステムは、カリフォルニア州サニーベイルにあるネットワーク・アプライアンス・インコーポレイテッドから市販されているNetApp Data ONTAPオペレーティングシステムであることが好ましく、このオペレーティングシステムは、例えば４キロバイト（ｋＢ）のＷＡＦＬブロックを使用したブロックベースのディスク上フォーマット表現を有するWrite Anywhere File Layout (WAFL)ファイルシステムを実施する。ただし、当然ながら、例えば、定位置書き込み型ファイルシステムのような任意の適当なストレージオペレーティングシステムを、本明細書に記載する本発明の原理に従って使用するために拡張してもよい。従って、「ＷＡＦＬ」という用語を使用した場合でも、この用語は、本発明の教示に適合する任意のストレージオペレーティングシステムを指すものとして広く解釈しなければならない。
【００３０】
本明細書で使用されるように、「ストレージオペレーティングシステム」という用語は一般に、ストレージシステムにおけるストレージ機能を実施するためのコンピュータ実行可能コードを意味し、例えばファイルセマンティックを管理し、ファイルサーバの場合、ファイルシステムセマンティックを実施し、データアクセスを管理するコンピュータ実行可能コードを意味する。その意味で、ＯＮＴＡＰソフトウェアは、マイクロカーネルとして実施され、ＷＡＦＬファイルシステムセマンティックを実施し、データアクセスを管理するためのＷＡＦＬ層を含むそのようなストレージオペレーティングシステムの一例である。ストレージオペレーティングシステムは、ＵＮＩＸやＷｉｎｄｏｗｓ  ＮＴのような汎用オペレーティングシステム上で動作するアプリケーションプログラムとして実施することもでき、また、本明細書に記載するストレージアプリケーションで使用するために構成された設定可能な機能を有する汎用オペレーティングシステムとして実施することもできる。
【００３１】
ストレージアダプタ２２８は、ストレージシステム２００上で実行されるストレージオペレーティングシステム２５０と協働し、ユーザ（又は、クライアント）から要求された情報にアクセスする。情報は、ビデオテープ、光学、ＤＶＤ、磁気テープ、バブルメモリ、電気的ランダムアクセスメモリ、微小電気機械、及び、データとパリティ情報を含む情報を記憶するように構成された任意の他の同様の媒体といった、任意のタイプの書き込み可能な記憶装置媒体の付属アレイに記憶される場合がある。ただし、本明細書において例示するように、情報は、ＨＤＤ、及び／又は、ＤＡＳＤのような、アレイ３００のディスク２３０に記憶することが好ましい。ストレージアダプタは、従来の高性能ファイバチャネル・シリアルリンク・トポロジのようなＩ／Ｏ相互接続構成を介してディスクに接続された入出力（Ｉ／Ｏ）インタフェース回路を含む。
【００３２】
アレイ３００上での情報の記憶は、ディスク空間の全体的論理配置を規定する物理的ストレージディスク２３０の集まりからなる１以上のストレージ「ボリューム」として実施されることが好ましい。各ボリュームは一般に、必須ではないが、独自のファイルシステムに関連する。ボリューム／ファイルシステム内のディスクは通常、１以上のグループとして編成され、各グループはＲＡＩＤグループとして機能する。大抵のＲＡＩＤ実施形態は、ＲＡＩＤグループ内の所与の数の物理的ディスクにわたってデータを「ストライプ」状に冗長書き込みし、そのストライプ状のデータに関するパリティ情報を適宜記憶することにより、データ記憶の信頼性／完全性を向上させている。
【００３３】
本発明によれば、アレイ３００内の２以下のディスク２３０の故障に対する保護を提供する、一様で対称な二重故障訂正技術が得られる。ストレージオペレーティングシステム２５０のＲＡＩＤシステム２７０のようなＲＡＩＤシステムは、ディスク２台分の「冗長」情報を生成し、アレイ３００に記憶することにより、本明細書に記載する本発明の技術を実施することが好ましい。この冗長情報は、アレイの行パリティセット（「行」）及び対角パリティセット（「対角」）に沿った合計又は結合計算技術を使用して生成される場合がある。結合技術には、例えば、１以上のビット幅であるビットフィールドにわたって合計を計算するように構成された線形結合アルゴリズムがある。冗長情報は、２台のディスク上に集中させてもよいし、アレイ内の任意又は全てのディスクにわたって分散させてもよい。
【００３４】
しかしながら、図示の実施形態では、冗長情報（例えば、パリティ）は、例えば対角に沿った計算と行に沿った計算から導出される。具体的には、ＲＡＩＤシステムは、行冗長値をアレイの行に沿って計算し、対角冗長値をアレイの対角方向に沿って計算する。ただし、冗長（パリティ）情報ディスクの内容は、純粋に対角情報（だけを）保持するディスクや、純粋に行冗長情報（だけを）保持するディスクがないように相互作用する。冗長情報は対角パリティを使用して生成され、その結果が行パリティ計算に使用される（逆も可能である）。対称二重故障訂正技術によって考慮される対称パリティアルゴリズムの一例は、一様で対称な行−対角パリティである。
【００３５】
一様で対称なＲＤパリティ
一様で対称なＲＤ（ＳＲＤ）パリティは、ｐ個のディスクのようなストレージデバイスを使用する。ただし、ｐは３以上の素数である。ディスクは複数のブロックに分割され、例えば固定サイズのブロックに分割される。行は、各ディスクから１つ一意的に選択されたブロックの集合として定義され、ストライプは、一意的に選択された行のグループとして定義される。一般に、行は、各ディスク上の同じ位置にあるブロックから構成され、ストライプは、連続した行のグループである。
【００３６】
ＳＲＤのブロックサイズは、ディスク上のファイルシステムによって使用されるブロックサイズに対応している必要はない。ファイルシステムブロックは，複数のＳＲＤブロックから構成される場合がある。一実施形態では、ｐ−１個のＳＲＤブロックを使用して、ｐ−１行の隣り合うセットをストライプにグループ化することにより、１つのファイルシステムブロックが構成される。ファイルシステムブロックは通常、４キロバイトのような２の累乗であるため、ｐ−１もまた２の累乗になるようにｐを選択すると、ストライプ１つ分のＳＲＤブロックを、１ファイルシステムの深さを有するファイルシステムブロックの１つのストライプの中にぴったりと収めることができる。例えば、ＳＲＤブロックサイズが１６バイトである場合、ｐ＝２５７であれば、２５６個のＳＲＤブロックを４キロバイトの１つのファイルシステムブロックの中にぴったりと収めることができる。従って、各ディスクから４ｋブロックを１つ、４ｋファイルシステムブロックの１つのストライプの中に、ＳＲＤ行及び対角の内蔵セット全体を構成することができる。
【００３７】
概して、ＳＲＤパリティアレイのブロックは全て、行の要素でもあり、対角の要素でもある。対角は、任意のグループ内において定義され、一意に選択された行として定義される。対角は、例えば、データディスクと冗長（パリティ）ディスクに０からｐ−１までの番号を付けることによって形成される場合がある。ｐ−１行からなる選択されたグループ内の行に０からｐ−２まで番号を付けた後、デバイスｉ、行ｊにあるブロックを対角（ｉ＋ｊ）モジューロｐに割り当てる。その結果、各対角が一台のディスクからの全ブロックを含まず、同じディスクからの全ブロックを含まない２つの対角が存在しないような構成が作成される。なお、「対角」という用語は、文字通りの対角ではない単純な交互パターンも含む。
【００３８】
「チェーン」とは、チェーン内の全ブロックが２つのディスクのうちの一方に属し、チェーンの両端にある２つのブロックが異なるディスク上にあり、且つ、そのチェーン上の最も近い近傍ブロックと同じ行にあるような一連のブロックとして定義される。また、チェーン上の他のブロックは全て、そのチェーン内のもう１つのブロックと同じ行にあり、且つ、そのチェーン内のもう１つのブロックと同じ対角上にある。
【００３９】
ＳＲＤ技術は、対角へのブロックの割り当てにより、最大ｐ個までのデバイスを含む自由に構成され選択されたｐ−１行のグループの中で実施することができる。対角に対するブロックの単純な割り当てについて説明すると、各対角が、各行から２以上のブロックを含まず、各ディスクから１つだけブロックを含み、且つ、任意の２台のディスクにおいて、それらの２台のディスク上の選択された行にある全てのブロックを接続するチェーンがただ１つしか存在しないことを保証すれば十分である。この単純な割り当ては、対角ｄが全てのブロック（ｉ，ｊ）であるものと定義する。ただし、ｄ＝（ｉ＋ｊ）モジューロｐのように、ｉはブロックのディスク番号であり、ｊはｐ−１行のセット内のブロックの行番号である。ＳＲＤを動作させる条件を同様に満たす対角に対するブロックの代替の割り当ては、例えば、ｄ＝（ｉ−ｊ）モジューロｐである。一般に、何らかの固定の整数値ｋ、ただしｋ≠０、かつ、−ｐ＜ｋ＜ｐとしたときに、式ｄ＝（ｉ＋ｋｊ）モジューロｐを満たす対角の集合を定義することができる。
【００４０】
各ストライプにおける任意の２台のディスクは、冗長（パリティ）情報を保持することができる。パリティディスクを任意選択する場合、全ての行および対角が偶数パリティになるパリティ値の唯一の割り当てが存在する。本明細書に記載するように、この唯一の割り当ては、まず、１ブロックだけ失われた２つの対角に対して対角パリティを設定し、次に、それらの２つの行に対して行パリティを設定すること等によって決定される。なお、二重故障の後に失われた任意の２つのディスクの復元にも、同じアルゴリズムを使用することができ、また同時に、行パリティを使用して、任意の１つの失われたディスクを復元することもできる。
【００４１】
図３は、本発明による一様で対称な二重故障訂正パリティアレイの一実施形態を示す略ブロック図である。この一様で対称なパリティアレイは例えば、ＲＤパリティアレイ１００から１つのデータディスクを取り除き、行パリティ計算の範囲を対角にまで延長することによって作成することができる。ＳＲＤアレイはｐ個のディスクを含み、それらのディスクはブロックに分割され、１ストライプあたり（ｐ−１）行に編成される。ただし、ｐは３以上の素数、例えば、５、１７、２５７などであり、行の数（ｐ−１）は２の累乗に等しく、それによって１つのストライプ内に含めることが可能になる。各ブロックのラベルは、そのブロックが属する対角を示している。
【００４２】
図示の実施形態において、ＳＲＤパリティアレイ３００のｐ個のディスクは、データを記憶するように構成された幾つかのデータディスクと、２つの冗長（パリティ）ディスクを含み、各パリティディスクは、ディスクのパリティブロック内の冗長情報を保持する。上記のように、パリティ情報を有する２台のディスクは、行パリティと対角パリティのどちらか一方だけを保持しているのではない。それらのディスクは、各対角におけるパリティが偶数になり、各行におけるパリティが偶数になることを保証するために必要な冗長情報を保持している。パリティブロックにおける冗長情報は、行パリティ計算貢献度及び対角パリティ計算貢献度によって一意に決まる。
【００４３】
図１も同時に参照すると、アレイ３００のディスク３は先の行パリティを保持し、ディスク４は先の対角パリティを保持し、ディスク０はアレイから取り除かれ、全てのディスクがｄ＝ｄ−１によって番号を付け直され、全てのブロックがｊ＝（ｊ−１）モジューロｐによって番号を付け直され、ゼロを基準とする番号付けに戻されている。特に、アレイ３００のディスク３及び４内のブロックは全て、行の要素にも、対角の要素にもなっている。従って、ディスク３とディスク４の間に機能の違いはなく、両方とも冗長情報を保持し、各ディスクのデータブロックは、行に属するブロックと対角に属するブロックから形成されている。さらに一般的なケースでは、ディスクのうちの任意の２つをアレイのパリティディスクとして選択することができ、その選択をストライプごとに異ならせることができる。従って、この一般的ケースでは、２台のパリティディスクと、（ｐ−２）台のデータディスクが得られる。アレイ内の任意の２台の失われた（故障）ディスクを任意選択の２台のパリティを使用して復元することにより、回転的に一様で対称な二重故障訂正パリティ技術が提供される。パリティ計算は、アレイ内のディスクの相対位置の純粋な関数である。０からｎ−１まで番号が振られたディスクを有するｎディスクアレイでは、任意のｋの値に対し、ディスクｊがディスク（ｊ＋ｋ）モジューロｎになるようにディスクの番号を回転させると、パリティ計算やその結果に影響がでることはない。
【００４４】
パリティの構成や、２つの故障ブロックの復元に使用されるＳＲＤアルゴリズムは、全てのブロックが構成されるまで、次の２つのステップを交互に実施する。(i)要素が１つだけ失われた２つの対角パリティセットにおいて、対角パリティに基づいて２つのブロックを復元する。(ii)要素が１つだけ失われた行パリティセットにおいて、行パリティを使用して２つのブロックを復元する。このアルゴリズムは、どのディスクを構築すなわち復元する場合でも無関係に使用できる点で一様である。
【００４５】
行が従来の方法で定義されている場合、すなわち、各行が、各ディスク上の同じ位置からの１つのブロックから構成されている場合であって、更に、対角ｄに属するブロックが、式ｄ＝（ｉ＋ｋｊ）モジューロｐを満たすように対角が定義されている場合（ただし、ｋ≠０、−ｐ＜ｋ＜ｐ）、そのアレイは更に、回転対称でもある。つまり、アレイ内のディスクを回転させ、ディスクの番号を付け替えても、全く同じパリティ計算及び結果が達成される。
【００４６】
ＳＲＤパリティを使用した復元
この新規なＳＲＤパリティアレイが対称である理由は、全ての行の加算、及び、全ての対角の加算が、ゼロになるからである（例えばＸＯＲ演算により）。従って、ストライプ内の任意の２台のディスクをパリティディスクとして選択することができる。一様な性質とは、同じ二重故障訂正アルゴリズムを使用して、二重故障からの復元だけでなく、アレイの復元も行えることをいう。また、もう１つの一様という性質は、どのディスクが故障したかに関わらず、同じ復元アルゴリズムを使用できることをいう。復元は、故障したディスクの役割を知らなくても実施することができる。すなわち、故障したディスクが、データを保持していても、パリティを保持していても関係ない。
【００４７】
二重故障後の復元は、まず対角を復元することから開始される。なぜなら、失われた２つのサブブロック（以後、「ブロック」と呼ぶ）が全ての行に必ず存在するからである。例えば、ＳＲＤアレイ３００のパリティディスク（ディスク３、４）が故障したものと仮定する。対角パリティセット３は、ディスク４のブロックを何も有していないので、失われたブロックは１つだけ（ディスク３における点線のディスクブロック３）である。従って、対角３における失われたディスクブロック３は、対角パリティ計算によって即座に復元することができる。なお、対角パリティセット２はディスク３に衝突しないので、対角パリティセット２から失われるブロックも１つだけである。従って、代替として、ディスク４上の対角ブロック２から開始して、対角パリティセット２に沿った対角パリティ計算を使用して、復元をおこなうこともできる。なお、それらの対角ブロックの両方を平行して復元することもでき、特に、復元は、失われたブロックのチェーンの一端又は両端から開始することができる。
【００４８】
ディスク３の対角パリティブロック３から復元を開始するものと仮定する。対角パリティブロック３を復元した後、その行にある隣りの失われたパリティブロック（ディスク４のブロック４）は、行パリティ計算を使用して復元することができる。それを行った後、復元された隣りの失われたブロックの対角パリティセットに対応する対角ブロック（ディスク３のブロック４）を、対角パリティを使用して復元することができ、その後、行パリティを使用して、隣りの失われたブロック（ディスク４のブロック０）の復元を行うことができる。
【００４９】
他の例として（図３には図示せず）、ＳＲＤアレイ３００のデータディスク１とパリティディスク３が故障したものと仮定する。データディスク１から対角パリティセット０が失われているので、復元は、パリティディスク３の対角ブロック０から開始することができる。つまり、ディスク３の対角ブロック０は、対角パリティセット０に沿って対角パリティを使用することにより復元することができる。次に、行パリティを使用して、データディスク１の対角パリティブロック３を復元することができる（なぜなら、この対角パリティブロック３は、復元された対角パリティブロック０と同じ行にあるからである）。次に、対角パリティを使用して、ディスク３の対角パリティブロック３を復元し、その後、行パリティを使用して、ディスク１の対角ブロック１を復元することができる。この処理は、両方のディスク上に全てブロックが復元されるまで続けられる。
【００５０】
故障した２つのディスク間には距離があるので、この復元プロセスは、１行置き（２行間隔）にジャンプし、それによって、ストライプの全ての行をカバーする。これが、ディスク数が素数ｐでなければならず、１ストライプあたりの行数が（ｐ−１）でなければならない理由である。その結果、故障ディスク間の距離がどのような距離であっても、復元の際にすべての行に遭遇し、全ての行を復元することができる。換言すれば、対角パリティセットは、１行、２行のように、最大で、ｎ割る２行（ただしｎはディスク数）までの距離にわたって存在する可能性があり、それらの距離の全てが、素数ｐを因数として有するわけではない。また、ＳＲＤアルゴリズムはモジューロ算術演算を使用するため、（行間）のずれの計算のために、抜けている行（例えば、５番目）を理論上使用するようなやり方で、アレイを「包み込む」。
【００５１】
図４は、本発明の一様で対称な二重故障訂正パリティアレイにおける２台のディスク故障に応じて失われたデータを復元する復元プロセスに関する一連のステップを示すフロー図である。この復元プロセスは、例えば、新規のＳＲＤパリティ技術を使用して、ＲＡＩＤシステム２７０によって実施される。シーケンスはステップ４００から始まり、ステップ４０２へ進み、そこで、ＲＡＩＤシステムは、故障ディスクのうちの一方にあるブロックであって、他方の故障ディスクからのブロックを含む対角パリティセット（対角）には属さないブロックを選択する。ステップ４０４において、システムは、選択されたブロックを含む対角内の残りのブロック全ての合計（ＸＯＲ）を計算し、その選択された故障ブロックを復元する。ステップ４０６において、システムは、その復元されたブロックを含む行内の残りの全てのブロックの合計（ＸＯＲ）を計算し、他方の故障したディスクにおけるブロックを復元する。ステップ４０８において、この対角を使用したブロックの復元、そして新たに復元された各ブロックを使用した行パリティ計算のプロセスを、故障した他方のディスクに対しても繰り返す（上記のように「ジグザグ」状に）。ステップ４１０では、全ての故障ブロックが復元されたか否かに関する判定を行う。まだ終わっていなければ、シーケンスはステップ４０８へ戻る。そうでなければ、シーケンスはステップ４１２において終了する。その結果、どのディスクがパリティを有しているか知らなくても、ＲＡＩＤシステムは、任意の２つの故障ディスクのデータを復元することができる。
【００５２】
図３を再度参照すると、ＳＲＤパリティアレイ３００は各ディスクに関して１つの対角が抜けている。これは、２台のディスク故障からの復元を可能にする上で重要である。しかしながら、ＳＲＤアレイは対称であるため、あらゆる対角が、その対角について計算されたパリティを有している。これが、ＲＤパリティとは異なる。つまり、ＲＤパリティアルゴリズムは、ＸＯＲ計算に関与しない対角が１つあるという性質を持っている。しかしながら、新規なＳＲＤアルゴリズムは、復元とアレイの構築を可能にするために、ＸＯＲ計算が全ての対角に沿って実施される。従って、ＳＲＤアレイにおける構築は、上記の復元の例に似ている。
【００５３】
ＳＲＤパリティの計算
上記のＳＲＤパリティ技術は、任意の２台のディスクが失われたアレイの復元を可能にすると同時に、どのような値に対してもパリティを適切に生成することができる。その一様な性質から、二重故障訂正パリティアルゴリズムは復元にも構築にも使用することができる。概して、構築には、各行及び対角にあるデータブロックの部分的合計を最初に計算しなければならない。各パリティディスク上において、ブロックのうちの１つは、対角上の唯一の残りのブロックである。従って、それら２つのブロックを対応する対角部分合計の値に直接設定すると、それら２つの対角を「偶数」パリティにすることができる。その結果、それら２つの行のそれぞれに、１つだけ未解決のブロックが残る。その未解決なブロックは、その行にあるデータブロックの部分合計にその行のパリティブロックに設定されたパリティ値を加えたものに設定することができる。次に、更に２つのパリティブロックを設定することにより、このほぼ完成した対角を完成させる。残りのパリティブロックが全て設定されるまで、このプロセスは継続される。最初の２つを除く各パリティブロックは、部分的な行又は対角パリティと、その行又は対角上の残りのパリティブロックについて計算されたパリティとの合計と、さらにもう一回ＸＯＲ演算しなければならない。
【００５４】
図５は、本発明による一様で対称な二重故障訂正パリティアレイの他の実施形態を示す略ブロック図である。この実施形態は例えば、１ストライプあたりｐ台のディスクと（ｐ−１）個の行を有するＳＲＤパリティアレイ５００である。ただし、ｐは３以上の素数、例えば５であり、ディスク１及びディスク３がパリティディスクである。ブロック中の非ゼロの数字は、それらのブロック内のビットが設定されるかもしれない順番、並びに、本発明の技術に従ってそれらのビットの計算に使用されるパリティのタイプ、例えば、行（Ｒ）又は対角（Ｄ）に対応している。
【００５５】
各ブロックが１つの行及び１つの対角の要素になっているので、何らかのデータブロックの値を変更するためには、同じ対角上の少なくとも１つのパリティブロックに記憶されたパリティ値を変更しなければならない。対角パリティブロックは、２つのパリティディスク上の行パリティブロックと対角パリティブロックに対する一連の交互の変更によって、変更を加えたデータブロックの行まで完全に循環して戻るように選択される。変更を加えた元のデータブロックと同じ行にあるパリティブロックに対して同じ微小変化を加えると、アレイ全体を通して偶数パリティが復元される。変更するデータブロックや、２つのディスクのうちのどちらがパリティを記憶するために選択されるかに関わらず、そのようなサイクルの形成は常に可能である。
【００５６】
なお、ゼロで埋められたアレイは、各行及び対角において偶数パリティを有する。アレイのどのブロックにも、ゼロ以外は記憶されないので、全ての行及び全ての対角を加えるとゼロになる。パリティ計算に使用されるＸＯＲ演算は、可換性で結合性であるため、アレイを偶数パリティに維持するために、全てのデータブロックから２つのパリティディスクへの全ての貢献度をまとめて（重ねて）合計することができる。この性質は、ｐ個のディスクが必ずしも全てアレイ５００内に存在しない場合でも、抜けているディスクの内容を所定の固定値、例えば、全てゼロであると推定することにより、適用することが可能である。また、この性質は、所定の固定値に初期化されたディスク、例えばゼロ化されたディスクをアレイ５００に追加し、そのアレイのブロックをデータ又はパリティを保持するように自由に指定するとともに、各ストライプが２つのパリティブロックを有するという別の性質を維持するためにも使用される場合がある。
【００５７】
また、アレイ５００において、パリティセットへのブロックの参加は回転対称でもある。冗長ディスクとして任意の２台のディスクを選択することができ、その選択は行ごとに異なるものであってよい。通常の完全なストライプ書き込み処理の間にパリティを構築し、２台の失われたディスクから復元するためには、全く同じアルゴリズムが必要とされ、同じコンピュータ命令コードを使用することができる。
【００５８】
図６は、本発明の一様で対称な二重故障訂正パリティアレイにおけるデータを計算する構築プロセスに関する一連のステップを示すフロー図である。構築プロセスは例えば、新規のＳＲＤパリティ技術を使用して、ＲＡＩＤシステム２７０によって実施される。シーケンスはステップ６００から始まり、ステップ６０２へ進み、そこでＲＡＩＤシステムは、パリティ情報を記憶するために、ストライプ内の２台のディスクを選択する。ステップ６０４においてシステムは、一方のパリティディスクにおける１つのブロックであって、他方のパリティディスクからのブロックを含む対角パリティセット（対角）に属していないブロックを選択する。ステップ６０６において、ＲＡＩＤシステムは、ブロックの対角の不変性（例えば、ゼロパリティ）を確立するために必要となる選択されたブロックの内容を計算し、計算した内容を選択されたブロックに記憶する。
【００５９】
ステップ６０８においてシステムは、前回計算した選択されたブロックと同じ行にある他方のパリティディスクにおけるブロックの内容を、その行の不変性を確立するために計算し、計算した内容をそのブロックに記憶する。ステップ６１０では、新たなブロックの内容を計算する処理を各パリティディスクに対して交互に実施し、例えば、対角パリティ計算及びそれに続く行パリティ計算の反復を使用して（「ジグザグ」状に）、パリティ不変性を確立する。なお、各反復は、一方のパリティディスク上のブロックであって、最後に計算された行パリティブロックと同じ対角上にあるブロックから開始される。ステップ６１２では、各パリティディスク上の全てのブロックが計算されたか否かに関する判定を行う。まだであれば、シーケンスはステップ６１０へ戻る。そうでなければ、シーケンスはステップ６１４において終了する。
【００６０】
一様で対称な二重故障訂正技術がＲＤパリティとは違う部分は、単一ディスク故障からの復旧にある。この新規な技術では、行パリティが全てのディスクを保護するため、失われたディスクは常に、行パリティを使用して復旧させることができる。ＲＤパリティでは、対角パリティディスクが行パリティによって保護されない。そのため、対角パリティディスクの復旧は、対角パリティの再計算によって行われる。なお、この一様で対称な技術は、対角パリティディスクの喪失に関する特殊なケースを必要としないので、ＲＤパリティに比べて、その実施が単純である。
【００６１】
２台のディスクは、２台のディスク故障からの復旧を可能にするために必要となる最小の冗長度である。従って、本明細書に記載した一様で対称な二重故障訂正技術は、記憶される冗長（パリティ）情報の量が最適である。一様で対称な二重故障訂正アレイ内のディスクはいずれも、ストライプ内の冗長情報の記憶に使用することができる。なぜなら、一様で対称なパリティアルゴリズム（例えば、ＳＲＤアルゴリズム）は、アレイ内の２以下のディスク故障からの復旧が可能であるからである。従って、ＳＲＤアルゴリズムは、アルゴリズムが、種々のパリティ分散技術を有利に使用できるように、一様性に関する全ての性質を備えている。そうしたパリティ分散技術には例えば、「Dynamic Parity Distribution Technique」と題する米国特許出願第（112056-143）及び「Semi-Static Distribution Technique」と題する米国特許出願第（112056-172）号にそれぞれ記載されている動的分散、及び／又は、準静的分散などがある。
【００６２】
本発明の特徴は、二重故障訂正（ＳＲＤ）パリティ技術／アルゴリズムの一様な性質を使用していることにある。ここで、一様性とは、冗長計算にとって無意味な冗長（ＸＯＲ）計算の不変性に関するディスクの役割として定義される。ディスクアレイを検査するときに、何らかのディスクの役割が何であるか、また、何らかの所与のストライプのためのものであるかを（ディスク上に記憶された値に基づいて）知る方法はない。判定できるのは、ある行内の全てのブロックを加算するとゼロになることだけであり、対角パリティセットの場合は、行および対角の全てのブロックを加算するとゼロになることだけである。
【００６３】
パリティディスクの任意の選択のために同じパリティ構成アルゴリズムが使用されるため、パリティ構成のパフォーマンスは、特定のストライプにおいてパリティを記憶するために選択されるディスクとは無関係に一様である。これが当てはまらないのは、アルゴリズムが一様な性質の使用を欠き、「データ」が「パリティ」ブロックの一部に記憶され、アルゴリズムの「復元」方法を使用して冗長ブロックが復元され、その冗長ブロックが、アルゴリズムの観点からデータブロックのように働きをする場合である。そのような技術も可能であり、何らかの故障訂正アルゴリズムを使用して適用可能ではあるが、異なるディスク上の異なるストライプに冗長情報を構築する際に、一様な性能を提供しない可能性がある。一様なアルゴリズムは、パリティを記憶するためにどのディスクが選択されるかに関わらず、一様な性能を提供することができ、その結果、それらのディスクのアルゴリズム的な役割に基づいて何らかの特定のディスクにパリティディスクの選択が偏ることがないという利点がある。本発明の他の（特に、準静的分散技術に適用する場合の）利点は、データを動かすことなく、ブロックの役割を再割当てすることにより、負荷のバランスをとったり、ディスクをアレイに追加したりすることができる点にある。パリティの動的分散とは、アレイ内のどこにあるブロックにでも自由にパリティを書き込める（配置する）ことができることを言う。
【００６４】
アレイ内の２台のディスク故障に対する保護を提供する一様で対称な二重故障訂正技術の例示的実施形態について図示説明してきたが、本発明の思想及び範囲から外れることなく、種々の変更及び改変を行うことが可能であるものと考えられる。例えば、代替実施形態において、本発明は、例えば、長い遅延を持つリンク（例えば、衛星リンク）を介したデータのマルチキャスト分散を可能にするフォワード・エラー・コレクション技術のような通信の分野にも使用することが可能である。この実施形態の場合、データや冗長情報は、電気通信媒体（ネットワーク）を介した伝送に適したパケットや情報単位のような要素に電分割される場合がある。
【００６５】
また、当業者には明らかなように、本明細書に記載した本発明の一様で対称な故障訂正技術は、スタンドアロンのコンピュータやその一部を含めて、ストレージシステム２００として実施される、又は、ストレージシステム２００を含む、どのようなタイプの特殊目的のコンピュータ（例えば、ファイルサーバやマルチプロトコル・ストレージ・アプライアンス）又は汎用コンピュータにも適用することができる。本発明と共に使用するのに都合がよいマルチプロトコル・ストレージ・アプライアンスの一例は、２００２年８月８日に出願された「Multi-Protocol Storage appliance that provides Integrated Support for File and Block Access Protcols」と題する米国特許出願第１０／２１２，９１７号に記載されている。また、本発明の教示は、限定はしないが、ネットワーク・アタッチド・ストレージ環境、ストレージ・エリア・ネットワーク、及び、クライアントコンピュータやホストコンピュータに直接接続されたディスクアセンブリといった、種々のストレージシステムアーキテクチャに適用することが可能である。従って、「ストレージシステム」という用語は、ストレージ機能を実施するように構成され、他の装置又はシステムに接続された任意のサブシステムの他に、そのような構成も含むものとして広く解釈しなければならない。
【００６６】
上記の説明は、本発明の特定の幾つかの実施形態に関するものである。しかしながら、当然ながら、記載した実施形態に対して、その利点の一部又は全部を獲得しながらも、他の変更および改変を施すことが可能である。例えば、本発明は、２以上のＲＡＩＤグループを有するアレイを備えたストレージシステムであって、ＲＡＩＤグループのうちの１以上が、一様で対称な二重故障訂正技術を使用して、それらのＲＡＩＤグループのうちのいずれか１つにおける２以下の故障に対する保護を提供するようなストレージシステムに対して適用することもできる。ここで、各ＲＡＩＤグループはｐ個のディスクを含み、ｐは３以上の素数であり、ｐの値はグループによって異なるものであってよい。更に、当然ながら、本発明の教示は、コンピュータ上で実行されるプログラム命令を含むコンピュータ読取可能媒体を含むソフトウェア、ハードウェア、ファームウェア、又は、それらの組み合わせのいずれとして実施してもよいものと考えられる。従って、本明細書の説明は、例として解釈すべきものであり、本発明の範囲を制限するものとして解釈してはならない。従って、添付の特許請求の範囲の目的は、そうした改変や変更も、本発明の思想及び範囲に含めることにある。
【図面の簡単な説明】
【００６７】
【図１】行−対角（ＲＤ）パリティ配置に従って構成されたディスクアレイを示す略ブロック図である。
【図２】本発明と共に使用するのに都合がよいストレージシステムを示す略ブロック図である。
【図３】本発明による一様で対称な二重故障訂正パリティアレイを示す略ブロック図である。
【図４】本発明の一様で対称な二重故障訂正パリティアレイにおける２台のディスク故障に応答して、失われたデータを復元する復元プロセスに関する一連のステップを示すフロー図である。
【図５】本発明による一様で対称な二重故障訂正パリティアレイの他の実施形態を示す略ブロック図である。
【図６】本発明の一様で対称な二重故障訂正パリティアレイにおけるデータを計算する構成プロセスに関する一連のステップを示すフロー図である。
【図１】
2007524930.tif 000003
【図２】
2007524930.tif 000004
【図３】
2007524930.tif 000005
【図４】
2007524930.tif 000006
【図５】
2007524930.tif 000007
【図６】
2007524930.tif 000008
【国際調査報告】
2007524930.tif 000009
2007524930.tif 000010