(57)【特許請求の範囲】
【請求項１】
Ｎ個（Ｎは素数）の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×Ｎ行列で定義されるディスクアレイを構成し、前記行列の各行を水平パリティグループと定義するとともに前記行列の斜線方向に循環構成のブロックを斜線パリティグループと定義し、水平パリティブロックを１行目のブロックから斜線方向に各ディスクに１つずつ配置するとともに斜線パリティブロックを各ディスクの所定の行のブロックに配置する行程と、
前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックにそれぞれ記憶するパリティ記憶行程と、
２つのディスクに誤りが発生する時に、フェイルブロックが１つだけ含まれた斜線パリティグループを用いて該フェイルブロックを修復し、さらに、この修復されたフェイルブロックの水平パリティグループを用いて該水平パリティグループの他のフェイルブロックを修復し、そして、この作業を繰り返すことにより、誤り発生した２つのディスクのフェイルブロックを全て修復する修復行程と、を実施することを特徴とする外部記憶サブシステムのパリティ記憶及びデータ修復方法。
【請求項２】
１つのディスクに誤りが発生する時、水平パリティグループの他のブロックを用いて誤り発生したブロックを修復する請求項１記載の外部記憶サブシステムのパリティ記憶及びデータ修復方法。
【請求項３】
（Ｎ−１）×Ｎ行列をディスクｊのブロックｉの値を示すａ（ｉ、  ｊ）形態（ここで、ｉは０≦ｉ≦Ｎ−２、ｊは０≦ｉ≦（Ｎ−１）で表現すると、水平パリティブロックはａ（ｉ、  Ｎ−２−ｉ）である請求項１又は請求項２に記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【請求項４】
水平パリティブロックａ（ｉ、  Ｎ−２−ｉ）には数式１の排他的論理和計算による水平パリティ値が記憶される請求項３記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【数１】
0003587667.tif 000048
ここで、０≦ｉ≦（Ｎ−３）及びｊ≠Ｎ−２−ｉ
【請求項５】
斜線パリティブロックはａ（Ｎ−２、  ｊ）である請求項３又は請求項４に記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【請求項６】
斜線パリティブロックａ（Ｎ−２、  ｊ）には数式２の排他的論理和計算による斜線パリティ値が記憶される請求項５記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【数２】
0003587667.tif 000049
ここで、０≦ｉ≦（Ｎ−１）
【請求項７】
ディスクｉとディスクｊに誤りが発生する場合（０≦ｉ＜ｊ≦（Ｎ−１））、前記ディスクｊの誤り発生したブロックａ（ｎ、  ｊ）は数式３によりデータの修復が行われる請求項１〜６のいずれか１項に記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【数３】
0003587667.tif 000050
ここで、ｉ＋１−ｍ×ｋ＋ｌ    ｍｏｄ    Ｎ≠ｊ
ｎ＝Ｎ−１−ｋ−ｍ×ｋ    ｍｏｄ    Ｎ、ｋ＝ｊ−ｉ、０≦ｍ≦Ｎ−２。
【請求項８】
ディスクｉとディスクｊに誤りが発生する場合（０≦ｉ＜ｊ≦（Ｎ−１））、ディスクｉの誤り発生したブロックａ（ｎ、  ｉ）は数式４によりデータの修復が行われる請求項１〜７のいずれか１項に記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【数４】
0003587667.tif 000051
ここで、ｌ≠ｉ
ｎ＝Ｎ−１−ｋ−ｍ×ｋ    ｍｏｄ    Ｎ、ｋ＝ｊ−ｉ、０≦ｍ≦Ｎ−２。
【請求項９】
Ｎ＋１（Ｎは素数）個の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×（Ｎ＋１）行列で定義されるディスクアレイを構成し、前記行列の各行を水平パリティグループと定義するとともにＮ＋１列目のディスクのブロックを除いた前記行列の斜線方向に循環構成のブロックを斜線パリティグループと定義し、そして、水平パリティブロックを（Ｎ＋１）列目のディスクのブロックに配置するとともに斜線パリティブロックを各ディスクの所定の行のブロックに配置する行程と、
前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックにそれぞれ記憶するパリティ記憶行程と、
２つのディスクに誤りが発生する時に、フェイルブロックが１つだけ含まれた斜線パリティグループを用いて該フェイルブロックを修復し、さらに、この修復されたフェイルブロックの水平パリティグループを用いて該水平パリティグループのフェイルブロックを修復し、そして、この作業を繰り返すことにより、誤り発生した２つのディスクのフェイルブロックを全て修復する修復行程と、を実施することを特徴とする外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【請求項１０】
１つのディスクに誤りが発生する時、水平パリティグループの他のブロックを用いて誤り発生したブロックを修復する請求項９記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【請求項１１】
（Ｎ−１）×（Ｎ＋１）行列をディスクｊのブロックｉの値を示すａ（ｉ、  ｊ）形態（ここで、０≦ｉ≦Ｎ−２、０≦ｊ≦Ｎ）で表現すると、水平パリティブロックはａ（ｉ、  Ｎ）である請求項９又は請求項１０記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【請求項１２】
水平パリティブロックａ（ｉ、  Ｎ）には数式５の排他的論理和計算による水平パリティ値が記憶される請求項１１記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【数５】
0003587667.tif 000052
ここで、０≦ｉ≦（Ｎ−３）
【請求項１３】
斜線パリティブロックはａ（Ｎ−２、  ｉ）である請求項１１又は請求項１２に記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【請求項１４】
斜線パリティブロックａ（Ｎ−２、  ｉ）には数式６の排他的論理和計算により斜線パリティ値が記憶される請求項１３記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【数６】
0003587667.tif 000053
ここで、０≦ｉ≦（Ｎ−１）
【請求項１５】
ディスクｉとディスクｊに誤りが発生する場合（０≦ｉ＜ｊ≦（Ｎ−１））、前記ディスクｊの誤り発生したブロックａ（ｎ、  ｊ）は数式７によりデータの修復が行われる請求項９〜１４のいずれか１項に記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【数７】
0003587667.tif 000054
ここで、ｉ＋１−ｍ×ｋ＋ｌ    ｍｏｄ    Ｎ≠ｊ
ｎ＝Ｎ−１−ｋ−ｍ×ｋ    ｍｏｄ    Ｎ、ｋ＝ｊ−ｉ、０≦ｍ≦Ｎ−２。
【請求項１６】
ディスクｉとディスクｊに誤りが発生する場合（０≦ｉ＜ｊ≦（Ｎ−１））、ディスクｉの誤り発生したブロックａ（ｎ、  ｉ）は数式８及び数式９（ｎ＝（Ｎ−２）の場合）によりデータの修復が行われる請求項９〜１５のいずれか１項に記載の外部記憶サブシステムのパリティ記憶及びデータ修復の方法。
【数８】
0003587667.tif 000055
ここで、ｌ≠ｉ
ｎ＝Ｎ−１−ｋ−ｍ×ｋ    ｍｏｄ    Ｎ≠Ｎ−２、ｋ＝ｊ−ｉ、０≦ｍ≦Ｎ−２。
【数９】
0003587667.tif 000056
ここで、ｌ≠ｉ、ｎ＝Ｎ−１−ｋ−ｍ×ｋ    ｍｏｄ    Ｎ＝Ｎ−２、ｋ＝ｊ−ｉ、０≦ｍ≦Ｎ−２。
【請求項１７】
ディスクアレイは、Ｎ個（Ｎは素数）の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×Ｎ行列を定義し、前記行列のブロックを水平パリティグループと定義するとともに前記行列の斜線方向で循環構成のブロックを斜線パリティグループと定義し、水平パリティブロックを１行目のブロックから斜線方向に各ディスクに１つずつ配置するとともに斜線パリティブロックを各ディスクの所定のブロックに配置するようにしてあり、
このディスクアレイの制御装置は、前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックに水平及び垂直パリティ値をそれぞれ記憶し、２つのディスクに誤りが発生する時に１つのフェイルブロックを含んだ斜線パリティグループを用いて該フェイルブロックを修復し、さらに、この修復されたフェイルブロックの水平パリティグループを用いて該水平パリティグループのフェイルブロックを修復し、そして、この作業を繰り返すことにより、誤り発生した２つのディスクのフェイルブロックを全て修復するようになっていることを特徴とする外部記憶サブシステム。
【請求項１８】
制御装置は、１つのディスクに誤りが発生する時、水平パリティグループの他のブロックを用いて誤り発生したブロックを修復する請求項１７に記載の外部記憶サブシステム。
【請求項１９】
ディスクアレイの各ディスクと制御装置との間には、データディスクの内容の更新時にディスクのデータバッファリング及びキャッシングを行うバッファがそれぞれ備えられる請求項１７又は請求項１８に記載の外部記憶サブシステム。
【請求項２０】
ディスクアレイは、Ｎ＋１（Ｎは素数）個の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×（Ｎ＋１）行例を定義し、前記行列の各行のブロックを水平パリティグループと定義するとともに（Ｎ＋１）列目のディスクのブロックを除いた行列の斜線方向で循環構成のブロックを斜線パリティグループと定義し、水平パリティブロックを（Ｎ＋１）列目のディスクのブロックに配置するとともに斜線パリティブロックを各ディスクの所定の行のブロックに配置するようにしてあり、
このディスクアレイの制御装置は、前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックに水平パリティ値及び斜線パリティ値をそれぞれ記憶し、２つのディスクに誤りが発生する時に１つのフェイルブロックの含まれた斜線パリティグループを用いて該フェイルブロックを修復し、さらに、この修復されたフェイルブロックの水平パリティグループを用いて該水平パリティグループのフェイルブロックを修復し、そして、この作業を繰り返すことにより、誤り発生した２つのディスクのフェイルブロックを全て修復するようになっていることを特徴とする外部記憶サブシステム。
【請求項２１】
制御装置は、１つのディスクに誤りが発生する時に水平パリティグループの他のブロックを用いて誤り発生したブロックを修復する請求項２０記載の外部記憶サブシステム。
【請求項２２】
ディスクアレイの各ディスクと制御装置との間には、データディスクの内容の更新時にディスクのデータバッファリング及びキャッシングするバッファがそれぞれ備えられる請求項２０又は請求項２１に記載の外部記憶サブシステム。
【請求項２３】
Ｎ個（Ｎは素数）の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×Ｎ行列で定義されるディスクアレイを構成し、前記行列の各行のブロックを水平パリティグループと定義するとともに前記行列の斜線方向で循環構成のブロックを斜線パリティグループと定義し、そして、水平パリティブロックを１行目のブロックから斜線方向となるように各ディスクに１つずつ配置するとともに斜線パリティブロックを各ディスクの所定の行のブロックに配置してあり、制御装置によって前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックの水平及び斜線パリティ値としてそれぞれ記憶している外部記憶サブシステムでディスクｉとディスクｊに（０≦ｉ＜ｊ≦（Ｎ−１））誤りが発生した時にデータを修復する方法であって、
前記誤り発生したディスクｉとｊの差であるｋを求め、フェイルしたディスクのブロック修復行程を繰り返し用いるための変数ｍを“０”に初期化する第１行程と、誤り発生が１つだけ存在する斜線パリティグループに属するディスクｊのブロックｎ（ｎ＝Ｎ−１−ｋ−ｍ×ｋ    ｍｏｄ    Ｎ）の値ａ（ｎ、  ｊ）を数式１０を用いて求める第２行程と、この第２行程遂行後に誤り発生が１つのみ存在する水平パリティグループに属するディスクｉのブロックｎの値    ａ（ｎ、  ｉ）を数式１１を用いて求める第３行程と、前記変数ｍをＮ−２まで増加させながら前記第２行程及び第３行程を繰り返し行う第４行程と、を実施することを特徴とする外部記憶サブシステムのデータ修復方法。
【数１０】
0003587667.tif 000057
ここで、ｉ＋１−ｍ×ｋ＋ｌ    ｍｏｄ    Ｎ≠ｊ
【数１１】
0003587667.tif 000058
ここで、ｌ≠ｉ
【請求項２４】
Ｎ＋１（Ｎは素数）個の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×（Ｎ＋１）行列で定義されるディスクアレイを構成し、前記行列の各行のブロックを水平パリティグループと定義するとともに（Ｎ＋１）列目のディスクのブロックを除いた前記行列の斜線方向で循環構成のブロックを斜線パリティグループと定義し、そして、水平パリティブロックを（Ｎ＋１）列目のディスクのブロックに配置するとともに斜線パリティブロックを各ディスクの所定の行のブロックに配置してあり、制御装置によって前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックに水平及び斜線パリティ値としてそれぞれ記憶している外部記憶サブシステムでディスクｉとディスクｊに（０≦ｉ＜ｊ≦（Ｎ−１））誤りが発生した時にデータを修復する方法であって、
前記誤り発生したディスクｉとｊの差であるｋを求め、フェイルしたディスクのブロック修復行程を繰り返し用いるための変数ｍを“０”に初期化する第１行程と、誤り発生が１つだけ存在する斜線パリティグループに属するディスクｊのブロックｎ（ｎ＝Ｎ−１−ｋ−ｍ×ｋ    ｍｏｄ    Ｎ）の値をａ（ｎ、  ｊ）数式１２を用いて求める第２行程と、この第２行程遂行後、誤り発生が１つのみ存在する水平パリティグループに属するディスクｉのブロックｎの値を    ａ（ｎ、  ｉ）数式１３（ｎ≠Ｎ−２の場合）及び数式１４（ｎ＝Ｎ−２の場合）を用いて求める第３行程と、前記変数ｍをＮ−２まで増加させながら前記第２行程及び第３行程を繰り返し行う第４行程と、を実施することを特徴とする外部記憶サブシステムのデータ修復方法。
【数１２】
0003587667.tif 000059
ここで、ｉ＋１−ｍ×ｋ＋ｌ    ｍｏｄ    Ｎ≠ｊ
【数１３】
0003587667.tif 000060
ここで、ｌ≠ｉ
【数１４】
0003587667.tif 000061
ここで、ｌ≠ｉ
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は外部記憶サブシステムのパリティ記憶及びデータ修復の方法及び装置に関する。
【０００２】
【従来の技術】
半導体技術の発達に伴い、より速くて強力なマイクロプロセッサとメモリが開発されているが、機械的な特性を有するハードディスクの性能はこれに及ばない。例えば、ＲＩＳＣプロセッサは毎年５％以上の性能向上を示している反面、ハードディスクのアクセス時間は毎年１０％未満の性能向上に止まっている。このため、ハードディスクを根幹とする入出力サブシステムの性能が全体システムの性能を制限する重要な要因となっている。
【０００３】
Ｐａｔｔｅｒｓｏｎ等は１９８８年にＡＣＭ  ＳＩＧＭＯＤ  Ｃｏｎｆ．発行の報告書の１０９〜１１６頁に“Ａ  Ｃａｓｅ  ｆｏｒ  Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ（ＲＡＩＤ）”という報告書を発表した。この報告書に発表されたＲＡＩＤは、ディスクアレイを各構造及び特性によってレベル０〜レベル５までの６つのレベルに分け、それぞれに対する内容を開示している。６種類のＲＡＩＤレベルは、それぞれに長・短所を有しており、様々な応用分野に用いられる。このようなＲＡＩＤは、ディスクアレイの並列処理により高速であるだけでなく、重複性を用いてディスク誤り発生時に修復可能であるなど信頼性が高く、多数のディスクで構成するので大容量である。
【０００４】
ところで、既存のテキストデータのみならずマルチメディアデータが多くなるにつれ、一層多くのデータ記憶領域が必要になり、ディスクアレイを構成するディスク数はさらに増加傾向にある。しかし、大容量のディスクアレイを構成すると、ディスク読取り誤りの確率は高くなる。なぜなら、１つのディスクにおける誤り発生の平均時間をＭＴＴＦ（ｔｈｅ  Ｍｅａｎ  Ｔｉｍｅ  Ｔｏ  Ｆａｉｌｕｒｅ）とすると、ディスク数がｎである時の誤り発生平均時間はＭＴＴＦ／ｎとなるからである。ディスク数が増加しても高信頼性を保つには、既存のＲＡＩＤが１つのディスク誤りに対してのみ修復し得る重複性をもっているのに対して、２つのディスクの誤り発生時にも修復可能な場合が必要であり、これを通常ＲＡＩＤレベル６と定義する。ＲＡＩＤレベル６はＰａｔｔｅｒｓｏｎなどによって１９９４年６月発行のＡＣＭ  Ｃｏｍｐｕｔｉｎｇ  Ｓｕｒｖｅｒｙｓ、ｖｏｌ．２６の１０９〜１１６頁に“ＲＡＩＤ：Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ  、  Ｒｅｌｉａｂｌｅ  Ｓｅｃｏｎｄａｒｙ  Ｓｔｏｒａｇｅ  ”という報告書に開示されている。高信頼性を保障すべきもう１つの理由は、システム故障、訂正不可能なビット誤り、及び周囲環境など、その他の事由によりディスクの誤り発生率がさらに高くなるためである。
【０００５】
Ｐａｔｔｅｒｓｏｎ等によって定義されたレベル６はリードソロモン（ｒｅｅｄ  ｓｏｌｏｍｏｎ）コードを用いたものであるが、これはコードの複雑性によって維持費用が高くなり、且つハードウェアの追加が必要であるという短所がある。
【０００６】
一方、２つのディスクの誤り発生時に修復し得る方法としては、２次元パリティ法と、最近発表されたＥＶＥＮＯＤＤ法、及び重複行列（ｒｅｄｕｎｄａｎｃｙ  ｍａｔｒｉｘ）  を用いた方法などがある。
【０００７】
２次元パリティ法は１９８８年１２月発行のＣｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  Ｔｅｃｈ．  Ｒｅｐｏｒｔ  ＣＳＤ８８−４７７  、  Ｕｎｉｖ．  ｏｆ  Ｃａｌｉｆｏｒｎｉａ、Ｂｅｒｋｅｌｅｙで“Ｃｏｄｉｎｇ  Ｔｅｃｈｎｉｑｕｅｓ  ｆｏｒ  Ｈａｎｄｌｉｎｇ  Ｆａｉｌｕｒｅｓ  ｉｎ  Ｌａｒｇｅ  Ｄｉｓｋ  Ａｒｒａｙｓ”という論文がＰａｔｔｅｒｓｏｎなどによって発表されている。２次元パリティ法はＲＡＩＤレベル４の構造を拡張したもので、横方向のみならず縦方向にもパリティディスクを位置させる。しかしこのような２次元パリティ法は、次のような２つの問題点をもっている。第１にパリティディスクが分散していないために、パリティディスクの隘路現象をもたらしシステム性能低下の主要原因となる。第２にパリティディスクオーバヘッドが大きい。
【０００８】
ＥＶＥＮＯＤＤ法は、Ｂｌａｕｍ等によって１９９５年２月発行のＩＥＥＥ  Ｔｒａｎｓ．  ｏｎ  Ｃｏｍｐｕｔｅｒｓ、  ｖｏｌ．  ４４、ｎｏ．  ２、ｐｐ．  １９２〜２０２で“ＥＶＥＮＯＤＤ：Ａｎ  Ｅｆｆｉｃｉｅｎｔ  Ｓｃｈｅｍｅ  ｆｏｒ  Ｔｌｅｒｔａｔｉｎｇ  Ｄｏｕｂｌｅ  Ｄｉｓｋ  Ｆａｉｌｕｒｅｓ  ｉｎ  ＲＡＩＤ  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  ”という論文で発表された。ＥＶＥＮＯＤＤ法の最大の特長は、最適のパリティディスクを使用することにある。即ち、ｍ個（ｍは素数）のディスクをデータディスクとして使用する場合、２つのパリティディスクのみを追加することにより、パリティディスクオーバヘッドが最適になる。しかし、ＥＶＥＮＯＤＤ法は２次元パリティ法と同様に、隘路現象による性能低下が予測され、且つ誤り訂正の構成サイズが大きくなるにつれて、データ損失の平均時間（ＭＴＴＤＬ：Ｍｅａｎ  Ｔｉｍｅ  Ｔｏ  Ｄａｔａ  Ｌｏｓｓ）が小さくなる。ＥＶＥＮＯＤＤ法のもう１つの短所は、各斜線データブロックの保持に対するオーバヘッドが存在することである。一例として、各ディスクの斜線ブロックのデータブロックに対する書込み作業が発生する場合、斜線パリティディスクの全てのブロックの値が変更されるので、これを全て更新しなければならない。
【０００９】
ＥＶＥＮＯＤＤ法は、発表したＢｌａｕｍ等により特許出願されている。１９９３年１２月１４日公開の米国特許第５，２７１，０１２号、及び１９９４年９月２７日公開の米国特許第５，３５１，２４６号には、斜線パリティと行パリティを用いてディスクアレイをエンコードし、２つのディスクに誤りが発生してもこれを修復する内容が開示されている。しかし、この２つの特許もＥＶＥＮＯＤＤ法における短所の解決に至っていない。
【００１０】
重複行列を用いた方法は、Ｃｈａｎ−Ｉｋ    Ｐａｒｋによって１９９５年１１月発行のＩＥＥＥ  Ｔｒａｎｓ．ｏｎ  Ｐａｒａｌｌｅｌ  ａｎｄ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｙｓｔｅｍｓ、  ｖｏｌ．  ６、  ｎｏ．１１、  ｐｐ．１１７７〜１１８４で“Ｅｆｆｉｃｉｅｎｔ  Ｐｌａｃｅｍｅｎｔ  ｏｆ  Ｐａｒｉｔｙ  ａｎｄ  Ｄａｔａ  ｔｏ  Ｔｏｌｅｒａｔｅ  Ｔｗｏ  Ｄｉｓｋ  Ｆａｉｌｕｒｅｓ  ｉｎ  Ｄｉｓｋ  Ａｒｒａｙ  Ｓｙｓｔｅｍｓ”という論文で発表された。この重複行列を用いた方法は、２次元パリティ法などの方法に内在したパリティディスクの隘路現象に対する問題を解決するためにパリティブロックを分散する方法であり、Ｎ個のディスクが与えられた時にＮ×Ｎ行列の重複行列で定義され、この行列が幾つかの特性を満足すると、２つのディスクの誤り発生時にデータ修復を行うことができる。この方法はパリティとデータブロックに配置アルゴリズムによって分散させることにより、他の方法で問題になったパリティディスクに対するオーバヘッドによって発生する隘路現象を解決し得るが、アルゴリズムの複雑さと、重複行列を保持するためのオーバヘッドと、追加費用が問題になる。また、拡張時にも再びアルゴリズムを適用して配置しなければならないので管理が面倒である。
【００１１】
【発明が解決しようとする課題】
本発明の目的は、２つ以上のディスクに誤りが発生しても短時間で修復することができ、パリティディスクの隘路現象による性能低下が起こらず、データ更新時の速度低下を防ぐことのできる方法及び装置を提供することにある。
【００１２】
【課題を解決するための手段】
上記目的を達成するために本発明の外部記憶サブシステムのパリティ記憶及びデータ修復方法は、Ｎ個（Ｎは素数）の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×Ｎ行列で定義されるディスクアレイを構成し、前記行列の各行を水平パリティグループと定義するとともに前記行列の斜線方向に循環構成のブロックを斜線パリティグループと定義し、水平パリティブロックを１行目のブロックから斜線方向に各ディスクに１つずつ配置するとともに斜線パリティブロックを各ディスクの所定の行のブロックに配置する行程と、前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックにそれぞれ記憶するパリティ記憶行程と、２つのディスクに誤りが発生する時に、フェイルブロックが１つだけ含まれた斜線パリティグループを用いて該フェイルブロックを修復し、さらに、この修復されたフェイルブロックの水平パリティグループを用いて該水平パリティグループの他のフェイルブロックを修復し、そして、この作業を繰り返すことにより、誤り発生した２つのディスクのフェイルブロックを全て修復する修復行程と、を実施することを特徴とする。１つのディスクに誤りが発生する時、水平パリティグループの他のブロックを用いて誤り発生したブロックを修復する。（Ｎ−１）×Ｎ行列をディスクｊのブロックｉの値を示すａ（ｉ、  ｊ）形態（ここで、ｉは０≦ｉ≦Ｎ−２、ｊは０≦ｉ≦（Ｎ−１）で表現すると、水平パリティブロックはａ（ｉ、  Ｎ−２−ｉ）である。水平パリティブロックａ（ｉ、  Ｎ−２−ｉ）には数式１の排他的論理和計算による水平パリティ値が記憶される。斜線パリティブロックはａ（Ｎ−２、  ｊ）である斜線パリティブロックａ（Ｎ−２、  ｊ）には数式２の排他的論理和計算による斜線パリティ値が記憶される。ディスクｉとディスクｊに誤りが発生する場合（０≦ｉ＜ｊ≦（Ｎ−１））、前記ディスクｊの誤り発生したブロックａ（ｎ、  ｊ）は数式３によりデータの修復が行われる。ディスクｉとディスクｊに誤りが発生する場合（０≦ｉ＜ｊ≦（Ｎ−１））、ディスクｉの誤り発生したブロックａ（ｎ、  ｉ）は数式４によりデータの修復が行われる。
【００１３】
また、他の方法として、Ｎ＋１（Ｎは素数）個の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×（Ｎ＋１）行列で定義されるディスクアレイを構成し、前記行列の各行を水平パリティグループと定義するとともにＮ＋１列目のディスクのブロックを除いた前記行列の斜線方向に循環構成のブロックを斜線パリティグループと定義し、そして、水平パリティブロックを（Ｎ＋１）列目のディスクのブロックに配置するとともに斜線パリティブロックを各ディスクの所定の行のブロックに配置する行程と、前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックにそれぞれ記憶するパリティ記憶行程と、２つのディスクに誤りが発生する時に、フェイルブロックが１つだけ含まれた斜線パリティグループを用いて該フェイルブロックを修復し、さらに、この修復されたフェイルブロックの水平パリティグループを用いて該水平パリティグループのフェイルブロックを修復し、そして、この作業を繰り返すことにより、誤り発生した２つのディスクのフェイルブロックを全て修復する修復行程と、を実施することを特徴とする。１つのディスクに誤りが発生する時、水平パリティグループの他のブロックを用いて誤り発生したブロックを修復する。（Ｎ−１）×（Ｎ＋１）行列をディスクｊのブロックｉの値を示すａ（ｉ、  ｊ）形態（ここで、０≦ｉ≦Ｎ−２、０≦ｊ≦Ｎ）で表現すると、水平パリティブロックはａ（ｉ、  Ｎ）である。水平パリティブロックａ（ｉ、  Ｎ）には数式５の排他的論理和計算による水平パリティ値が記憶される。斜線パリティブロックはａ（Ｎ−２、  ｉ）である。斜線パリティブロックａ（Ｎ−２、  ｉ）には数式６の排他的論理和計算により斜線パリティ値が記憶される。ディスクｉとディスクｊに誤りが発生する場合（０≦ｉ＜ｊ≦（Ｎ−１））、前記ディスクｊの誤り発生したブロックａ（ｎ、  ｊ）は数式７によりデータの修復が行われる。ディスクｉとディスクｊに誤りが発生する場合（０≦ｉ＜ｊ≦（Ｎ−１））、ディスクｉの誤り発生したブロックａ（ｎ、  ｉ）は数式８及び数式９（ｎ＝（Ｎ−２）の場合）によりデータの修復が行われる。
【００１４】
本発明の外部記憶サブシステムは、ディスクアレイは、Ｎ個（Ｎは素数）の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×Ｎ行列を定義し、前記行列のブロックを水平パリティグループと定義するとともに前記行列の斜線方向で循環構成のブロックを斜線パリティグループと定義し、水平パリティブロックを１行目のブロックから斜線方向に各ディスクに１つずつ配置するとともに斜線パリティブロックを各ディスクの所定のブロックに配置するようにしてあり、このディスクアレイの制御装置は、前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックに水平及び垂直パリティ値をそれぞれ記憶し、２つのディスクに誤りが発生する時に１つのフェイルブロックを含んだ斜線パリティグループを用いて該フェイルブロックを修復し、さらに、この修復されたフェイルブロックの水平パリティグループを用いて該水平パリティグループのフェイルブロックを修復し、そして、この作業を繰り返すことにより、誤り発生した２つのディスクのフェイルブロックを全て修復するようになっていることを特徴とする。制御装置は、１つのディスクに誤りが発生する時、水平パリティグループの他のブロックを用いて誤り発生したブロックを修復する。ディスクアレイの各ディスクと制御装置との間には、データディスクの内容の更新時にディスクのデータバッファリング及びキャッシングを行うバッファがそれぞれ備えられる。
【００１５】
他の外部記憶サブシステムとしては、ディスクアレイは、Ｎ＋１（Ｎは素数）個の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×（Ｎ＋１）行例を定義し、前記行列の各行のブロックを水平パリティグループと定義するとともに（Ｎ＋１）列目のディスクのブロックを除いた行列の斜線方向で循環構成のブロックを斜線パリティグループと定義し、水平パリティブロックを（Ｎ＋１）列目のディスクのブロックに配置するとともに斜線パリティブロックを各ディスクの所定の行のブロックに配置するようにしてあり、このディスクアレイの制御装置は、前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックに水平パリティ値及び斜線パリティ値をそれぞれ記憶し、２つのディスクに誤りが発生する時に１つのフェイルブロックの含まれた斜線パリティグループを用いて該フェイルブロックを修復し、さらに、この修復されたフェイルブロックの水平パリティグループを用いて該水平パリティグループのフェイルブロックを修復し、そして、この作業を繰り返すことにより、誤り発生した２つのディスクのフェイルブロックを全て修復するようになっていることを特徴とする。制御装置は、１つのディスクに誤りが発生する時に水平パリティグループの他のブロックを用いて誤り発生したブロックを修復する。ディスクアレイの各ディスクと制御装置との間には、データディスクの内容の更新時にディスクのデータバッファリング及びキャッシングするバッファがそれぞれ備えられる。
【００１６】
データ修復方法としては、Ｎ個（Ｎは素数）の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×Ｎ行列で定義されるディスクアレイを構成し、前記行列の各行のブロックを水平パリティグループと定義するとともに前記行列の斜線方向で循環構成のブロックを斜線パリティグループと定義し、そして、水平パリティブロックを１行目のブロックから斜線方向となるように各ディスクに１つずつ配置するとともに斜線パリティブロックを各ディスクの所定の行のブロックに配置してあり、制御装置によって前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックの水平及び斜線パリティ値としてそれぞれ記憶している外部記憶サブシステムでディスクｉとディスクｊに（０≦ｉ＜ｊ≦（Ｎ−１））誤りが発生した時にデータを修復する方法であって、前記誤り発生したディスクｉとｊの差であるｋを求め、フェイルしたディスクのブロック修復行程を繰り返し用いるための変数ｍを“０”に初期化する第１行程と、誤り発生が１つだけ存在する斜線パリティグループに属するディスクｊのブロックｎ（ｎ＝Ｎ−１−ｋ−ｍ×ｋ    ｍｏｄ    Ｎ）の値ａ（ｎ、  ｊ）を数式１０を用いて求める第２行程と、この第２行程遂行後に誤り発生が１つのみ存在する水平パリティグループに属するディスクｉのブロックｎの値    ａ（ｎ、  ｉ）を数式１１を用いて求める第３行程と、前記変数ｍをＮ−２まで増加させながら前記第２行程及び第３行程を繰り返し行う第４行程と、を実施することを特徴とする。
【００１７】
他の方法として、Ｎ＋１（Ｎは素数）個の各ディスクを（Ｎ−１）個のブロック単位となるようにして（Ｎ−１）×（Ｎ＋１）行列で定義されるディスクアレイを構成し、前記行列の各行のブロックを水平パリティグループと定義するとともに（Ｎ＋１）列目のディスクのブロックを除いた前記行列の斜線方向で循環構成のブロックを斜線パリティグループと定義し、そして、水平パリティブロックを（Ｎ＋１）列目のディスクのブロックに配置するとともに斜線パリティブロックを各ディスクの所定の行のブロックに配置してあり、制御装置によって前記水平及び斜線パリティグループそれぞれのデータ値を排他的論理和（ＸＯＲ）演算して該当グループの水平及び斜線パリティブロックに水平及び斜線パリティ値としてそれぞれ記憶している外部記憶サブシステムでディスクｉとディスクｊに（０≦ｉ＜ｊ≦（Ｎ−１））誤りが発生した時にデータを修復する方法であって、前記誤り発生したディスクｉとｊの差であるｋを求め、フェイルしたディスクのブロック修復行程を繰り返し用いるための変数ｍを“０”に初期化する第１行程と、誤り発生が１つだけ存在する斜線パリティグループに属するディスクｊのブロックｎ（ｎ＝Ｎ−１−ｋ−ｍ×ｋ    ｍｏｄ    Ｎ）の値をａ（ｎ、  ｊ）数式１２を用いて求める第２行程と、この第２行程遂行後、誤り発生が１つのみ存在する水平パリティグループに属するディスクｉのブロックｎの値を    ａ（ｎ、  ｉ）数式１３（ｎ≠Ｎ−２の場合）及び数式１４（ｎ＝Ｎ−２の場合）を用いて求める第３行程と、前記変数ｍをＮ−２まで増加させながら前記第２行程及び第３行程を繰り返し行う第４行程と、を実施することを特徴とする。
【００１８】
【発明の実施の形態】
本発明の実施形態によるＤＨ法は、２つのディスクの誤り発生時にも簡単なＸＯＲ演算のみで修復可能な効率的なパリティ配置法であり、パリティを分散配置して隘路現象を排除することにより、ディスクアレイの性能向上を図る。ＤＨ技法の”Ｄ”と”Ｈ”は、斜線パリティ（ｄｉａｇｏｎａｌ  ｐａｒｉｔｙ  ）と水平パリティ（ｈｏｒｉｚｏｎｔａｌ  ｐａｒｉｔｙ  ）の頭文字をとってものである。
【００１９】
以下、本発明の実施形態を添付図面を参照して詳細に説明する。
【００２０】
本発明の実施形態であるＤＨ法を図１、図３、図５〜図７、図１１〜図１４、図１９、図２０Ａ〜Ｇを参照して説明し、次に他の実施形態であるＤＨ２法を図２、図４、図８〜図１０、図１５〜図１８、図２１、図２２Ａ〜Ｇを参照して説明する。
【００２１】
ＤＨ法：図１はＤＨ法を用いたディスクアレイのブロック構成図である。ホストコンピュータ２は、コントローラ４にＩ／Ｏ要求してデータを処理する。コントローラ４は、ディスクアレイの全般的な処理、管理及び保持を行うもので、ＤＨ法のエンコード及びデコードアルゴリズムを行うユニットとＸＯＲ演算を行うプロセッサとを含む。Ｎ（Ｎは素数）個からなるディスク８−０〜８−（Ｎ−１）の各ディスクには、本発明のＤＨ法の構造に基づいたデータブロック及びパリティブロックが構成されている。コントローラ４とディスク８−０〜８−（Ｎ−１）との間にそれぞれ位置したバッファ６−０〜６−（Ｎ−１）は、コントローラ４におけるディスクアクセス時間を減らすために備えられた高性能バッファで、ディスクアレイのシステム性能を向上させる。ホストコンピュータ２とコントローラ４との間はバス１０で接続され、コントローラ４とバッファ６−０〜６−（Ｎ−１）との間、ディスク８−０〜８−（Ｎ−１）とバッファ６−０〜６−（Ｎ−１）との間は高速入出力のために、それぞれのＩ／Ｏバス１２−０〜１２−（Ｎ−１）で直接接続される。
【００２２】
図３は、ＤＨ法による水平及び斜線パリティグループと水平及び斜線パリティブロックの説明図である。図５は、ディスクの個数Ｎ＝７の場合のＤＨ法の水平パリティグループ及び水平パリティブロックの配置図であり、図６は、ディスクの個数Ｎ＝７の場合のＤＨ法の斜線パリティグループ及び斜線パリティブロックの配置図であり、図７は、ディスクの個数Ｎ＝７の場合のＤＨ法におけるパリティ及びデータの行列形態図である。図１１は本発明のＤＨ法によるパリティ記憶アルゴリズムのフローチャートである。図１２〜図１４はパリティ記憶行程の説明図である。図１９は、誤り発生時のデータ修復のフローチャートであり、図２０Ａ〜Ｇは、データ修復の具体例である。
【００２３】
まず、図３、図５〜図７を参照してＤＨ法の構成（定義１）、水平パリティブロック及びグループ（定義２）、斜線パリティブロック及びグループ（定義３）を定義し、各定義に基づいたＤＨ法のデータ及び配置を説明する。
【００２４】
定義１：ＤＨ法の構成は、Ｎ（Ｎは素数）個のディスクでディスクアレイを構成する場合、各ディスクは（Ｎ−１）個のブロックからなり、これを（Ｎ−１）×Ｎ行列で、ａ（ｉ、  ｊ）と定義する。ここで、０≦ｉ≦Ｎ−２、０≦ｊ≦Ｎ−１である。表１は行列ａ（ｉ、  ｊ）の形態を表したものである。
【表１】
0003587667.tif 000002
【００２５】
行列ａ（ｉ、  ｊ）はディスクｊのブロックｉの値を示すもので、それぞれのブロックは２進数である。このような（Ｎ−１）×Ｎの行列ａ（ｉ、  ｊ）が与えられた場合に、（Ｎ−１）番目の行、即ち各ディスクの最終ブロックａ（Ｎ−２、０）  、ａ（Ｎ−２、１）  ・・・ａ（Ｎ−２、  Ｎ−１）は斜線パリティを記憶するのに用いられる斜線パリティブロックであり、（Ｎ−１）番目の列のディスクの１番目のブロックａ（０、  Ｎ−２）から１番目の列のディスクの最終ブロックまでａ（Ｎ−２、０）  、即ちａ（０、  Ｎ−２）、ａ（１、  Ｎ−３）、ａ（２、  Ｎ−４）、・・・、ａ（Ｎ−３、１）  、ａ（Ｎ−２、０）  は各行のパリティ値を記憶する水平パリティブロックとして用いられ、その他のブロックはデータを記憶するデータブロックである。
【００２６】
定義２：定義１で定義されたディスクアレイを表す行列ａ（ｉ、  ｊ）で、各行を水平パリティの誤り訂正グループ（水平パリティグループ）と定義し、その行の水平パリティブロックに、その行の他のブロックのＸＯＲ値を記憶する。即ち、行列ａ（ｉ、  Ｎ−２−ｉ）に該当するブロックに各水平パリティグループのパリティ値が記憶される。ここで、０≦ｉ≦Ｎ−２である。
【００２７】
図３は５個のディスク（Ｎ＝５）ｄ０〜ｄ４のディスクアレイを示す図であり、ディスクｄ０〜ｄ４はそれぞれ４つのブロック（Ｎ−１＝４）ｂ０〜ｂ３、ｂ４〜ｂ７、・・・から構成される。４つのブロックｂ０〜ｂ３はそれぞれの水平パリティグループになり、実線で囲んだ参照番号２０は２番目のブロックｂ１の水平パリティグループを示している。斜線で表示したブロックは、各水平パリティグループのパリティ値を記憶する水平パリティブロックであり、ａ（ｉ、  Ｎ−２−ｉ）に該当するブロックである。Ｎ＝５なので、ａ（３、０）  、ａ（２、１）  、ａ（１、２）  、ａ（０、３）  に該当するブロックが水平パリティブロックである。図５はＮ＝７の場合の各水平パリティグループを番号（０〜５）で示したもので、斜線で表示したブロックＨ０〜Ｈ５は各水平パリティブロックになる。
【００２８】
定義３：定義１の（Ｎ−１）×Ｎ行列ａ（ｉ、  ｊ）における（Ｎ−１）番目の行は、それぞれの斜線パリティ値を記憶するブロック（斜線パリティブロック）である。斜線パリティの各誤り訂正グループ（斜線パリティグループ）は、水平パリティブロックが位置するように、斜線パリティブロックの右側上方の斜線方向に各グループが循環構成される。斜線パリティグループ中の１番目の斜線パリティグループは、１番目のディスクの最終ブロックから右側上方の斜線方向へのグループであり、水平パリティブロックと重なる。斜線パリティブロック、即ち行列ａ（Ｎ−２、  ｊ）に属するブロックには、各斜線パリティグループのパリティ値が記憶される。ここで、０≦ｊ≦Ｎ−１である。
【００２９】
図３において点線で囲んだ参照番号２２は、２番目の斜線パリティグループである。そして、４（＝Ｎ−１）番目の行（ｉ＝３）に位置した網掛けされたブロックは、各斜線パリティグループのパリティ値を記憶する斜線パリティブロックである。図６はＮ＝７の場合の各斜線パリティグループを番号（０〜６）で示したもので、網掛けされたブロックＤ０〜Ｄ６は、各斜線パリティグループのパリティブロックである。
【００３０】
定義２、３でそれぞれ定義された水平パリティブロック及び斜線パリティブロックを除いた他のブロックは、データの記憶されるデータブロックである。図７は、ディスク数Ｎ＝７の場合の、パリティ及びデータの配置図である。図７において、Ｈ０〜Ｈ５は各水平パリティグループ（０〜５番）の水平パリティブロックを、Ｄ０〜Ｄ６は斜線パリティグループ（０〜６番）の斜線パリティブロックを示す。データブロックはｉ、ｊで表されており、ｉは水平パリティグループを、ｊは斜線パリティグループを意味する。
【００３１】
ＤＨ法によるパリティ記憶アルゴリズムは、各パリティグループのデータをＸＯＲ演算してパリティ値を求める方法である。図１１はＤＨ法のパリティ記憶アルゴリズムのフローチャートである。１００段階で（Ｎ−１）×Ｎディスクアレイを構成すると、図１のコントローラ４は１１０段階及び１２０段階を行って水平パリティ値及び斜線パリティ値を求める。１１０段階でコントローラ４は、水平パリティグループ０〜（Ｎ−３）において該当水平パリティグループの水平パリティ値を求めた後、該当水平パリティブロックにそれぞれ記憶する。該当水平パリティブロックに記憶する水平パリティ値は数式１５で求められる。
【数１５】
0003587667.tif 000003
ここで、０≦ｉ≦（Ｎ−３）、ｊ≠Ｎ−２−ｉ
【００３２】
次に、コントローラ４は１２０段階で、斜線パリティグループ０〜（Ｎ−１）において該当斜線パリティグループの斜線パリティ値を求めた後、該当斜線パリティブロックにそれぞれ記憶する。該当斜線パリティブロックに記憶される斜線パリティ値は数式１６で求められる。
【数１６】
0003587667.tif 000004
ここで、０≦ｉ≦（Ｎ−１）
【００３３】
数式１５、１６によって水平パリティ値及び斜線パリティ値を計算する具体例を図１２〜図１４によって説明する。図１２〜図１４はディスクの個数Ｎ＝７の場合の、ＤＨ法によるパリティ記憶行程の説明図である。
【００３４】
表２の行列は７個のディスク（Ｎ＝７）の場合のＤＨ法のディスクアレイを示す行列であり、各ブロックにはエンコード及びデコードで用いられる行列番号が付けられている。
【表２】
0003587667.tif 000005
【００３５】
図１２は、表２のような行列で各データブロックに２進数の任意のデータが記憶されている状態を示すもので、斜線で表示された空ブロックには水平パリティ値が、網掛けされた空ブロックには斜線パリティ値が、それぞれ数式１５、１６に基づいた計算後に記憶される。
【００３６】
数式１７は数式１５を用いて各水平パリティブロックｂ０〜ｂ４の水平パリティ値を求めており、その演算結果をそれぞれの水平パリティブロックａ（０、５）  、ａ（１、４）  、ａ（２、３）  、ａ（３、２）  、ａ（４、１）  に記憶した状態図が図１３である。
【数１７】
0003587667.tif 000006
【００３７】
次に数式１６を用いて、数式１８に示すように各斜線パリティブロック（ａ（５、０）  、ａ（５、１）  、ａ（５、２）  、ａ（５、３）  、ａ（５、４）  、ａ（５、５）  、ａ（５、６）  ）の斜線パリティ値を求める。この結果を、各斜線パリティブロックに記憶させた状態が図１４であり、これは、Ｎ＝７の場合のパリティ及びデータの配置例である。
【数１８】
0003587667.tif 000007
【００３８】
次に、ＤＨ法のデコード方法、即ちディスク誤り発生時の該当ディスクのデータ修復方法について説明する。
【００３９】
ＤＨ法によるデータ修復方法の基本思想は、１つのディスクに誤りが発生する時には水平パリティ或いは斜線パリティを用いて容易に修復し、２つのディスクに誤りが発生する時には斜線パリティと水平パリティを繰り返し用いて２つのディスクの全てのブロックを修復する。
【００４０】
Ｎ個からなるディスクアレイで、水平パリティグループ中の１つのブロックにのみ誤りが発生した時には、残りのブロックをＸＯＲして修復することができる。即ち、水平パリティグループを構成するＮブロックのうち（Ｎ−１）個のブロックが正常の場合、誤り発生したディスクのブロック修復は可能である。
【００４１】
斜線パリティグループは（Ｎ−１）個のブロックから構成されるが、これらは互いに異なるディスクに分散記憶されている。このために、Ｎ個のディスクのうち２つのディスクに誤りが発生した場合、斜線パリティグループのうち１つのブロックにのみ誤りを含むものが２つ存在する。従ってこのブロックを修復すれば、修復したブロックを含む水平パリティグループの各ブロックのうちフェイルしている残りの１つのブロックも修復することができる。次に、水平パリティグループにより修復されたブロックを含む斜線パリティグループの残りのフェイルしたブロックを修復し、この繰り返しで誤りを全て修復できる。このような方法で、２つのディスクに誤りが発生した場合でも全て修復することができる。
【００４２】
図１９で後述されるＤＨ法のデコード方法は、まず、ディスクｉとディスクｊの誤り発生時にディスクの差ｋを求めた後、ディスク（ｉ＋１）の斜線パリティブロックの斜線パリティグループに属するディスクｊのブロックを修復する。その後、修復されたディスクｊのブロックを含む水平パリティグループを通してディスクｉのブロックを修復し、この行程を繰り返し行って誤りの発生した２つのディスクの全ブロックを修復する。
【００４３】
２つのディスクに誤りが発生する時に、図１のコントローラ４が誤り発生した該当ディスクの全てのブロックを修復する方法を図１９のフローチャートを参照して詳細に説明する。ここでは、ディスクｉとディスクｊに誤りが発生した（０≦ｉ＜ｊ≦（Ｎ−１））と仮定する。
【００４４】
コントローラ４は３００段階でｋ＝ｊ−ｉ、ｍ＝０を設定する。即ち、ディスクｉとディスクｊに誤りが発生する時にディスクの差ｋを求め、フェイルしたディスクのブロック修復行程を繰り返し行うための変数ｍを“０”に初期化する。次に、３０２段階では数式１９でｎ値を求める。
【数１９】
0003587667.tif 000008
【００４５】
前述したように、斜線パリティグループは（Ｎ−１）個のブロックから構成され、これらは互いに異なるディスクに分散している。従って、Ｎ個のディスクのうち２つのディスクに誤りが発生しても、斜線パリティグループ中の１つのブロックにのみ誤りを含むものが２つ存在する。従って、ｎは１つのブロックにのみ誤りが発生した斜線パリティグループのディスクｊのフェイルブロック値である。その後、コントローラ４は３０４段階で１つのブロックにのみ誤りが発生した斜線パリティグループを用いて、ディスクｊのブロックｎをデコードする。この時、数式２０を用いてディスクｊのブロックｎの値ａ（ｎ、  ｊ）を求める。
【数２０】
0003587667.tif 000009
ここで、ｉ＋１−ｍ×ｋ＋ｌ    ｍｏｄ    Ｎ≠ｊ
【００４６】
その後、コントローラ４は３０６段階で、求めたディスクｊのブロックｎの含まれる水平パリティグループを用いて、ディスクｉのブロックｎをデコードする。この時、数式２１を用いてディスクｉのブロックｎの値ａ（ｎ、  ｊ）を求める。
【数２１】
0003587667.tif 000010
ここで、ｌ≠ｉ
【００４７】
その後、３０８段階に進んでｍ＜（Ｎ−１）かどうかを判断する。判断結果がイエスならば、３１０段階に進んでｍに１を足し、再び３０２段階からの行程を行い、ノーならばデータ修復を終了する。
【００４８】
次に図１９、図２０Ａ〜Ｇを用いて、データ修復の具体例を説明する。図２０Ａ〜Ｇでは図１４と同じくディスク数Ｎ＝７の時のデータ及びパリティの配置された状態で、２番目のディスクｄ１（ｉ＝１）及び４番目のディスクｄ３（ｊ＝３）がフェイルした時のＤＨ法によるデータ修復行程を示している。
【００４９】
図２０Ａの行列は、図１４で用いられたディスクアレイで２番目と４番目のディスクに誤りが発生した状況を示す。即ち、ｉ＝１、ｊ＝３であり、よってｋ＝２、ｎ＝Ｎ−１−ｋ−ｋ×ｍ    ｍｏｄ    Ｎ＝７−１−２−２×ｍ    ｍｏｄ    ７＝４−２ｍ    ｍｏｄ    ７である。従って、ディスクｊのブロックｎの値を求める図１９の３０４段階における数式２０は数式２２のようになる。
【数２２】
0003587667.tif 000011
【００５０】
ディスクｉのブロックｎの値を求める図１９の３０６段階における数式２１は数式２３のようになる。
【数２３】
0003587667.tif 000012
【００５１】
これにより、ｍ＝０の時、数式２２、２３は次のようになる。
【数２４】
0003587667.tif 000013
【００５２】
ａ（４、３）  はフェイル状態の４番目のディスク（ｊ＝３）の５番目のブロック（ｎ＝４）であり、その斜線パリティグループのＸＯＲによって値が求められ、その値は“１”である。ａ（４、１）  はフェイル状態のディスク（ｉ＝１）の５番目のブロック（ｎ＝４）であり、その水平パリティグループのＸＯＲによって値が求められ、その値も“１”である。図２０Ｂの行列では、ｍ＝０の修復結果を該当ブロックに代入している。
【００５３】
ｍ＝１の時、数式２２、２３は次のようなる。
【数２５】
0003587667.tif 000014
【００５４】
図２０Ｃの行列では、ｍ＝１の時のフェイル状態の４番目と２番目のディスク（ｊ＝３、ｉ＝１）の３番目のブロック（ｎ＝２）に、斜線パリティグループと水平パリティグループを用いて修復した値を代入している。
【００５５】
ｍ＝２の時、数式２２、２３は次のようになる。
【数２６】
0003587667.tif 000015
【００５６】
図２０Ｄの行列では、ｍ＝２の時のフェイル状態の４番目と２番目のディスク（ｊ＝３、ｉ＝１）の１番目のブロック（ｎ＝０）に、斜線パリティグループと水平パリティグループを用いて修復した値を代入している。
【００５７】
ｍ＝３の時、数式２２、２３は次のようなる。
【数２７】
0003587667.tif 000016
【００５８】
図２０Ｅの行列では、ｍ＝３の時のフェイル状態の４番目と２番目のディスク（ｊ＝３、ｉ＝１）の６番目のブロック（ｎ＝５）に、斜線パリティグループと水平パリティグループを用いて修復した値を代入している。
【００５９】
ｍ＝４の時、数式２２、２３は次のようになる。
【数２８】
0003587667.tif 000017
【００６０】
図２０Ｆの行列では、ｍ＝４の時のフェイル状態の４番目と２番目のディスク（ｊ＝３、ｉ＝１）の４番目のブロック（ｎ＝３）に、斜線パリティグループと水平パリティグループを用いて修復した値を代入している。
【００６１】
ｍ＝５の時、数式２２、２３は次のようになる。
【数２９】
0003587667.tif 000018
【００６２】
図２０Ｇの行列では、ｍ＝５の時のフェイル状態の４番目と２番目のディスク（ｊ＝３、ｉ＝１）の２番目のブロック（ｎ＝１）に、斜線パリティグループと水平パリティグループを用いて修復した値を代入している。図２０Ｇをみると、図１４の最初のディスクアレイと同じなので、データの修復が完全になされたことが分かる。
【００６３】
次に、本発明の他の実施形態のＤＨ２法を説明する。
【００６４】
ＤＨ２法：図２は、本発明の他の実施形態であるＤＨ２法を用いたディスクアレイのブロック構成図である。ＤＨ２法によるディスクアレイのブロック構成には、図１のブロック構成に加えて、（Ｎ＋１）番目のディスク８−Ｎとディスク８−Ｎに対応するバッファ６−Ｎがさらに追加されている。コントローラ４とバッファ６−Ｎとの間、及びディスク８−Ｎとバッファ６−Ｎとの間にはＩ／Ｏバス１２−Ｎが接続されている。ＤＨ２法によって追加されたディスク８−Ｎは、ＤＨ法でデータディスクの内容更新時に発生し得る隘路現象オーバヘッドを減らすために用いられ、下記で定義される水平パリティブロックを記憶する水平パリティディスクである。ディスクの数Ｎは、ＤＨ法と同じく素数である。
【００６５】
図４は、ＤＨ２法による水平及び斜線パリティグループと水平及び斜線パリティブロックを説明図である。図８は、ディスクの個数Ｎ＝７の場合のＤＨ２法の水平パリティグループ及び水平パリティブロックの配置図であり、図９は、ディスクの個数Ｎ＝７の場合のＤＨ２法の斜線パリティグループ及び斜線パリティブロックの配置図であり、図１０は、ディスクの個数Ｎ＝７の場合のＤＨ２法におけるパリティ及びデータの配置図である。図１５は、ＤＨ２法によるパリティ記憶アルゴリズムのフローチャートである。図１６〜図１８は、ディスクの個数Ｎ＝７の場合のＤＨ２法によるパリティ記憶行程の説明図である。図２１は、誤り発生時のデータ修復のフローチャートであり、図２２Ａ〜Ｇは、データ修復の具体例である。
【００６６】
本発明のＤＨ２法は、水平パリティブロックを専用の水平パリティディスクに配置し、斜線パリティブロックを残りのディスクに分散配置する方法である。図４、図８〜図１０を参照してＤＨ２法の構成（定義４）、水平パリティブロック及びグループ（定義５）、及び斜線パリティブロック及びグループ（定義６）を定義し、定義に基づいたＤＨ２法のデータ及び配置を説明する。
【００６７】
定義４：Ｎ（Ｎは素数）個のディスクでディスクアレイを構成する場合、各ディスクは（Ｎ−１）個のブロックからなり、これを（Ｎ−１）×（Ｎ＋１）行列で、ａ（ｉ、  ｊ）定義し、下記の表３のように表す。
【表３】
0003587667.tif 000019
【００６８】
定義５：定義１で定義されたディスクアレイを示す行列ａ（ｉ、  ｊ）で、各行を水平パリティの誤り訂正グループ（水平パリティグループ）と定義し、各水平パリティグループの最終ディスク、即ち（Ｎ＋１）番目のディスクのブロック（水平パリティブロック）に、その行の他のブロックのＸＯＲ値を記憶する。つまり行列ａ（ｉ、  Ｎ）のブロックに、各水平パリティグループのパリティ値が記憶される。ここで、０≦ｉ≦Ｎ−３である。
【００６９】
図４は５個のディスク（Ｎ＝５）ｄ０〜ｄ４のディスクアレイを示す図であり、ディスクｄ０〜ｄ４はそれぞれ４つのブロック（Ｎ−１＝４）ｂ０〜ｂ３、ｂ４〜ｂ７、・・・から構成される。そのうち３つのブロックｂ０〜ｂ２はそれぞれの水平パリティグループになり、実線で囲んだ参照番号３０は２番目のブロックｂ１の水平パリティグループを示している。斜線で表示したブロックは、各水平パリティグループのパリティ値を記憶する水平パリティブロックであり、６番目のディスクｄ５にあるブロック、即ち、行列ａ（ｉ、  Ｎ）に該当するブロックである。図８はＮ＝７の場合の各水平パリティグループを番号（０〜４）で示したもので、斜線で表示したブロックＨ０〜Ｈ４は各水平パリティグループのパリティブロックになる。
【００７０】
定義６：定義３で定義されたＤＨ法の斜線パリティグループ及びブロックと同様に定義される。図４を参照すると、点線で囲んだ参照番号３２は２番目の斜線パリティグループである。そして、４（＝Ｎ−１）番目の行（ｉ＝３）に位置した網掛けされたブロックは、各斜線パリティグループのパリティ値を記憶する斜線パリティブロックである。図９はＮ＝７の場合の各斜線パリティグループを番号（０〜６）で示したもので、網掛けされたブロックＤ０〜Ｄ６は各斜線パリティグループのパリティブロックである。
【００７１】
定義５、６でそれぞれ定義された水平パリティブロック及び斜線パリティブロックを除いた他のブロックは、データの記憶されるデータブロックである。図１０は、ディスク数Ｎ＝７の場合のパリティ及びデータの配置図である。図１０において、Ｈ０〜Ｈ４は各水平パリティグループ（０〜４番）の水平パリティブロックを、Ｄ０〜Ｄ６は斜線パリティグループ（０〜６番）の斜線パリティブロックを示す。データブロックはｉ、ｊで表されており、ｉは水平パリティグループを、ｊは斜線パリティグループを意味する。
【００７２】
ＤＨ２法によるパリティ記憶アルゴリズムは各パリティグループのデータをＸＯＲ演算してパリティ値を求める方法である。図１５はＤＨ２法のパリティ記憶アルゴリズムのフローチャートである。２００段階で（Ｎ−１）×（Ｎ＋１）ディスクアレイを構成すると、図２のコントローラ４は２１０段階及び２２０段階を行って水平パリティ値及び斜線パリティ値を求める。２１０段階でコントローラ４は、水平パリティグループ０〜（Ｎ−３）において該当水平パリティグループの水平パリティ値を求めた後、水平パリティ専用ディスクにある該当水平パリティブロックにそれぞれ記憶する。水平パリティブロックに記憶する水平パリティ値を求める式は数式３０で求められる。
【数３０】
0003587667.tif 000020
ここで、０≦ｉ≦（Ｎ−２）
【００７３】
次に、コントローラ４は２２０段階で斜線パリティグループ０〜（Ｎ−１）において該当斜線パリティグループの斜線パリティ値を求めた後、該当斜線パリティブロックにそれぞれ記憶する。該当斜線パリティブロックに記憶される斜線パリティ値を求める式は数式３１で求められる。
【数３１】
0003587667.tif 000021
ここで、０≦ｉ≦（Ｎ−１）
【００７４】
数式３０、３１によって水平パリティ値及び斜線パリティ値を計算する具体例を図１６〜図１８によって説明する。図１６〜図１８はディスクの個数Ｎ＝７の場合の、ＤＨ２法によるパリティ記憶行程の説明図である。
【００７５】
表４の行列は７個のディスク（Ｎ＝７）の場合のＤＨ法のディスクアレイを示す行列であり、各ブロックにはエンコード及びデコードで用いられる行列番号が付けられている。
【表４】
0003587667.tif 000022
【００７６】
図１６は、表４のような行列で各データブロックに２進数の任意のデータが記憶されている状態を示すもので、斜線で表示された空ブロックには水平パリティ値が、網掛けされた空ブロックには斜線パリティ値が、それぞれ数式３０、３１に基づいた計算後に記憶される。
【００７７】
数式３２は数式３０を用いて各水平パリティブロックｂ０〜ｂ４の水平パリティ値を求めており、その演算結果をそれぞれの水平パリティブロックａ（０、７）  、ａ（１、７）  、ａ（２、７）  、ａ（３、７）  、ａ（４、７）  に記憶した状態図が図１７である。
【数３２】
0003587667.tif 000023
【００７８】
次に数式３１を用いて、数式３３に示すように各斜線パリティブロック（ａ（５、０）  、ａ（５、１）  、ａ（５、２）  、ａ（５、３）  、ａ（５、４）  、ａ（５、５）  、ａ（５、６）  ）の斜線パリティ値を求める。この結果を、各斜線パリティブロックに記憶させた状態が図１８であり、これは、Ｎ＝７の場合のパリティ及びデータの配置例である。
【数３３】
0003587667.tif 000024
【００７９】
次に、ＤＨ２法のデコード方法、即ちディスク誤り発生時の該当ディスクのデータ修復方法について説明する。
【００８０】
ＤＨ２法によるデータ修復方法の基本思想は、１つのディスクに誤りが発生する時には水平パリティ或いは斜線パリティを用いて容易に修復し、２つのディスクに誤りが発生する時にはＤＨ法と同様に、斜線パリティと水平パリティを繰り返し用いて２つのディスクの全てのブロックを修復する。
【００８１】
（Ｎ＋１）個からなるディスクアレイで、水平パリティグループ中の１つのブロックにのみ誤りが発生した時には、残りのブロックをＸＯＲして修復することができる。即ち、水平パリティグループを構成する（Ｎ＋１）ブロックのうちＮ個のブロックが正常の場合、誤り発生したディスクのブロック修復は可能である。
【００８２】
斜線パリティグループは（Ｎ−１）個のブロックから構成されるが、これらは互いに異なるディスクに分散している。ＤＨ２法では２つのディスクに誤りが発生する場合を、２通りに分けることができる。１つは、水平パリティブロックをもっている水平パリティディスクともう１つのディスクに誤りが発生する場合で、もう１つは水平パリティディスクを除いた２つのディスクに誤りが発生する場合である。水平パリティディスクが含まれた場合には、斜線パリティグループを用いて誤り発生した水平パリティディスクではない方のディスクを修復した後、数式３０によって水平パリティ値を計算するように水平パリティディスクを修復すればよい。
【００８３】
水平パリティディスクを除いた２つのディスクに誤りが発生した場合には、斜線パリティグループのうち１つのブロックにのみ誤りが発生したものが２つ存在する。従ってこのブロックを修復すれば、修復したブロックを含む水平パリティグループの各ブロックのうちフェイルしている残りの１つのブロックを修復することができる。次に、水平パリティグループにより修復されたブロックを含む斜線パリティグループの残りのフェイルしたブロックを修復し、この繰り返しで誤りを全て修復できる。
【００８４】
図２１で後述されるＤＨ２法のデコード方法は、まず、ディスクｉとディスクｊの誤り発生時にディスクの差ｋを求めた後、ディスク（ｉ＋１）の斜線パリティブロックの斜線パリティグループに属するディスクｊのブロックを修復する。その後、修復されたディスクｊのブロックを含む水平パリティグループを通してディスクｉのブロックを修復し、この行程を繰り返し行って誤りの発生した２つのディスクの全ブロックを修復する。
【００８５】
２つのディスクに誤りが発生する時に、図２のコントローラ４が誤り発生した該当ディスクの全てのブロックをＤＨ２法で修復する方法を、図２１のフローチャートを参照して詳細に説明する。ここでは、ディスクｉとディスクｊに誤りが発生した（０≦ｉ＜ｊ≦（Ｎ−１））と仮定する。
【００８６】
コントローラ４は４００段階でｋ＝ｊ−ｉ、ｍ＝０に設定する。即ち、ディスクｉとディスクｊに誤りが発生する時にディスクの差ｋを求め、フェイルしたディスクのブロック修復行程を繰り返し行うための変数ｍを“０”に初期化する。次に、４０２段階では数式３４でｎ値を求める。
【数３４】
0003587667.tif 000025
【００８７】
ｎは１つのブロックにのみ誤り発生した斜線パリティグループのフェイルブロック値である。その後、コントローラ４は４０４段階で１つのブロックにのみ誤りが発生した斜線パリティグループを用いて、ディスクｊのブロックｎをデコードする。この時、数式３５を用いてディスクｊのブロックｎの値ａ（ｎ、  ｊ）を求める。
【数３５】
0003587667.tif 000026
ここで、ｉ＋１−ｍ×ｋ＋ｌ    ｍｏｄ    Ｎ≠ｊ
【００８８】
その後、コントローラ４は４０６段階でｎ＝（Ｎ−２）かを判断する。ｎ＝（Ｎ−２）でなければ、４０８段階に進んで４０４段階で求めたディスクｊのブロックｎに対する水平パリティグループを用いてディスクｉのブロックｎをデコードする。この場合には数式３６を用いてブロックｎの値ａ（ｎ、  ｉ）を求める。
【数３６】
0003587667.tif 000027
ここで、ｉ≠ｌ
【００８９】
４０６段階でｎ＝（Ｎ−２）であれば、コントローラ４は４１０段階に進み、斜線パリティブロックと水平パリティブロックを用いてディスクｉのブロック（Ｎ−２）をデコードする。この場合には数式３７を用いてブロック（Ｎ−２）の値ａ（ｎ、  ｉ）を求める。
【数３７】
0003587667.tif 000028
ここで、ｉ≠ｌ
【００９０】
４０８段階或いは４１０段階後にコントローラ４は、４１２段階に進む。４１２段階ではｍ＜（Ｎ−１）かを判断する。判断結果がイエスならば、４１４段階に進んでｍに１を足し、再び４０２段階からの行程を行い、ノーならばデータ修復を終了する。
【００９１】
次に図２１、図２２Ａ〜Ｇを用いて、データ修復の具体例を説明する。図２２Ａ〜Ｇでは図１８と同じく、ディスク数Ｎ＝７の時のデータ及びパリティが配置された状態で、２番目のディスクｄ１（ｉ＝１）及び４番目のディスクｄ３（ｊ＝３）がフェイルした時のＤＨ２法によるデータ修復行程を示している。
【００９２】
図２２Ａの行列は、図１８で用いられたディスクアレイで２番目と４番目のディスクに誤りが発生した状況を示す。即ち、ｉ＝１、ｊ＝３であり、よってｋ＝２、ｎ＝Ｎ−１−ｋ−ｋ×ｍ    ｍｏｄ    Ｎ＝７−１−２−２×ｍ    ｍｏｄ    ７＝４−２ｍ    ｍｏｄ    ７である。従って、ディスクｊのブロックｎの値を求める図２１の４０４段階における数式３５は数式３８のようになる。
【数３８】
0003587667.tif 000029
【００９３】
ディスクｉのブロックｎの値を求める図２１の４０８段階における数式３６は数式３９のようになる。
【数３９】
0003587667.tif 000030
【００９４】
但し、ｎ＝（Ｎ−２）の場合には、図４１０段階における数式３７は数式４０のようになる。
【数４０】
0003587667.tif 000031
【００９５】
これにより、ｍ＝０の時、数式３８、３９は次のようになる。
【数４１】
0003587667.tif 000032
【００９６】
ａ（４、３）  はフェイル状態の４番目のディスク（ｊ＝３）の５番目のブロック（ｎ＝４）であり、その斜線パリティグループのＸＯＲによって値が求められ、その値は“１”である。ａ（４、１）  はフェイル状態の２番目のディスク（ｉ＝１）の５番目のブロック（ｎ＝４）であり、その水平パリティグループのＸＯＲによって値が求められ、その値も“１”である。図２２Ｂの行列では、ｍ＝０の修復結果を該当ブロックに代入している。
【００９７】
ｍ＝１の時、数式３８、３９は次のようになる。
【数４２】
0003587667.tif 000033
【００９８】
図２２Ｃの行列では、ｍ＝１の時のフェイル状態の４番目と２番目のディスク（ｊ＝３、ｉ＝１）の３番目のブロック（ｎ＝２）に、斜線パリティグループと水平パリティグループを用いて修復した値を代入している。
【００９９】
ｍ＝２の時、数式３８、３９は次のようになる。
【数４３】
0003587667.tif 000034
【０１００】
図２２Ｄの行列では、ｍ＝２の時のフェイル状態の４番目と２番目のディスク（ｊ＝３、ｉ＝１）の１番目のブロック（ｎ＝０）に、斜線パリティグループと水平パリティグループを用いて修復した値を代入している。
【０１０１】
ｍ＝３の時は、ｎ＝Ｎ−１−ｋ−ｋ×ｍ    ｍｏｄ    Ｎ＝７−１−２−２×３    ｍｏｄ    ７＝５＝７−２＝（Ｎ−２）となるので、フェイルした水平パリティブロックａ（５、１）  をデコードする場合には４１０段階で適用される数式４０が使われる。つまり、ｍ＝３の時、数式３８、４０は次のようになる。
【数４４】
0003587667.tif 000035
【０１０２】
図２２Ｅの行列では、ｍ＝３の時のフェイル状態の４番目と２番目のディスク（ｊ＝３、ｉ＝１）の６番目のブロック（ｎ＝５）に、斜線パリティグループと水平パリティグループを用いて修復した値を代入している。
【０１０３】
ｍ＝４の時、数式３８、３９は次のようになる。
【数４５】
0003587667.tif 000036
【０１０４】
図２２Ｆの行列では、ｍ＝４の時のフェイル状態の４番目と２番目のディスク（ｊ＝３、ｉ＝１）の４番目のブロック（ｎ＝３）に、斜線パリティグループと水平パリティグループを用いて修復した値を代入している。
【０１０５】
ｍ＝５の時、数式３８、３９は次のようになる。
【数４６】
0003587667.tif 000037
【０１０６】
図２２Ｇの行列では、ｍ＝５の時のフェイル状態の４番目と２番目のディスク（ｊ＝３、ｉ＝１）の２番目のブロック（ｎ＝１）に、斜線パリティグループと水平パリティグループを用いて修復した値を代入している。図２２Ｇをみると、図１８の最初のディスクアレイと同じなので、データの修復が完全になされたことが分かる。
【０１０７】
本発明のＤＨ法、ＤＨ２法による誤り修復方法は、並列性を持っている。誤り修復方法の並列性とは、修復行程を順次行うのではなくその行程を同時に並列に行うことができることをいう。即ち、誤り修復方法を両方向（最初と最後）から同時に行うことができる。これを図２３を参照して詳細に説明する。
【０１０８】
２番目のディスク（ｉ＝１）と４番目のディスク（ｊ＝３）に誤りが発生すると、前述の修復方法の説明では図２３に付けられた丸付数字の順番（１）→（２）→（３）→（４）→（５）→（６）→（７）→（８）→（９）→（１０）→（１１）→（１２）の通りに誤りを修復した。ところが、この修復行程は逆に進行してもよい。つまり、（ｊ＋１）ディスク、即ち５番目のディスクの斜線パリティブロックを用いて２番目（ｉ＝２）のディスクの該当ブロック（２番目のブロック）が修復できる。該当ブロックは図２３の（１２）ブロックである。修復された（１２）ブロックの水平パリティグループを用いると、（１１）ブロックを修復することができる。その後、（１１）ブロックの斜線パリティグループを用いて、（１０）ブロックを修復することができる。このようにして、（１２）→（１１）→（１０）→（９）→（８）→（７）→（６）→（５）→（４）→（３）→（２）→（１）の順で修復でき、（ｉ＋１）ディスクの斜線パリティブロックから用いる修復順序の逆方向になり中間行程が重ならない。従って、修復時に行程を両方向から同時に進行させる場合、修復時間が１／２になる。
【０１０９】
次に、本発明のＤＨ法、ＤＨ２法の性能評価を他の方法（２次元パリティ法、ＥＶＥＮＯＤＤ法）と比較して説明する。性能評価項目として（１）データ損失の平均時間（  ＭＴＴＤＬ）  、（２）パリティディスクオーバヘッド（ｐａｒｉｔｙ  ｄｉｓｋ  ｏｖｅｒｈｅａｄ）、（３）更新負担（ｕｐｄａｔｅ  ｐｅｎａｌｔｙ）、（４）グループサイズ（ｇｒｏｕｐ  ｓｉｚｅ）を挙げる。
【０１１０】
以下の表及び参照図面では、２次元パリティ法を“２Ｄ”、ＥＶＥＮＯＤＤ法を“ＥＯ”、ＤＨ法を“ＤＨ”、ＤＨ２法を“ＤＨ２”に簡略化して表す。
【０１１１】
まず、（１）データ損失の平均時間について比較説明する。ＭＴＴＤＬはデータ損失の平均時間を意味するが、２つのディスクに誤りが発生する時に修復し得る方法では数式４７で求められる。
【数４７】
0003587667.tif 000038
【０１１２】
ここで、ＭＴＴＦ（ｔｈｅ  Ｍｅａｎ  Ｔｉｍｅ  Ｔｏ  Ｆａｉｌｕｒｅ）は１つのディスクにおける誤り発生の平均時間を、ＭＴＴＲ（ｔｈｅ  Ｍｅａｎ  Ｔｉｍｅ  Ｔｏ  Ｒｅｃｏｎｓｔｒｕｃｔ）は再構成に必要な平均時間を意味し、Ｎは全体ディスク数を、そしてＧは誤り訂正グループのサイズを示す。ＭＴＴＤＬは一番重要な性能評価項目であるが、その時間のオーダーが普通数万年以上になるために、実際値は性能評価においてあまり意味がないと見られる。例えば、ＭＴＴＦ（ｄｉｓｋ）を２００、０００時間、ＭＴＴＦ（ｄｉｓｋ  ２）  を２０、０００時間、ＭＴＴＦ（ｄｉｓｋ  ３）  を２、０００時間、ＭＴＴＲを１時間とすると、２次元パリティ法で１００個のデータディスクを使用する場合に、パリティディスクが２０個必要なので、全体ディスク数Ｎは１２０であり、グループサイズＧは１１である。従って、ＭＴＴＤＬは約８万５千年になる。ここでＭＴＴＤＬは、ＭＴＴＦ（ｄｉｓｋ）とＭＴＴＲが一種の定数なので、ディスクアレイを構成する全体ディスク数Ｎと誤り訂正グループサイズＧの二乗に反比例する。従って、ＭＴＴＤＬは数式４８のように単純化してＭＴＴＤＬＳ  で表すことができ、この逆数のＭＴＴＤＬＳＩは数式４９になる。
【数４８】
0003587667.tif 000039
【数４９】
0003587667.tif 000040
【０１１３】
データディスク数を表５のようにすると、ＭＴＴＤＬＳ  は表６のようになり、ＭＴＴＤＬＳＩをグラフで表すと、図２４のようになる。
【表５】
0003587667.tif 000041
【表６】
0003587667.tif 000042
【０１１４】
次に、（２）パリティディスクオーバヘッドについて比較説明する。パリティディスクオーバヘッドはデータディスク数とパリティディスク数の比であり、数式５０で求められる。
【数５０】
0003587667.tif 000043
【０１１５】
パリティディスクオーバヘッドが小さいということは、一定数のディスクでディスクアレイを構成する時、相対的に多量のデータを記憶し得るということであり、パリティディスクオーバヘッドが大きければパリティディスクを大量に使うので、ディスクの使用効率が低下する。即ち、パリティディスクオーバヘッドは価格対性能比の評価基準になり、ディスクの効率性を示す指標になる。表７はデータディスク数をｍとした時に、各方法のパリティディスクオーバヘッドを示すもので、この結果では２次元パリティ法のオーバヘッドが他の方法に比べて√ｍ倍大きいことが分かり、よって、２次元パリティ法が最もディスクの利用効率が悪い。
【表７】
0003587667.tif 000044
【０１１６】
次に、（３）更新負担について比較説明する。更新負担は、データディスクの情報を更新する際に、更新すべきパリティディスクの数を示したもので、２つのディスクを修復し得る方法において最適の更新負担は２である。しかし、更新負担が大きい場合、データディスクの更新時にパリティディスクの更新も必要となり書込み作業時に性能低下の原因となる。
【０１１７】
２次元パリティ法とＤＨ２法の場合には、最適更新負担条件を満足するのに対し、ＥＶＥＮＯＤＤ法とＤＨ法の場合、それより大きくなる。ＥＶＥＮＯＤＤ法の場合には、図２５に示すように斜線値Ｓに該当するデータブロックを更新する際には全ての斜線パリティブロックを更新しなければならないので、更新負担にオーバヘッドが存在する。例えば、ｍ個のデータディスクでディスクアレイを構成する場合、データディスク情報の更新時にアクセスすべきパリティディスクの数は２であるが、パリティブロックの数は水平パリティブロックが１回、そして斜線パリティブロックが（ｍ−１）回なので、ｍ回のパリティブロック更新が必要である。その他の手法では２回になるために平均的なパリティブロックの更新は数式５１のようになる。
【数５１】
0003587667.tif 000045
【０１１８】
また、ＤＨ法では全てのデータブロックの更新時に水平パリティブロック及び斜線パリティブロックを更新しなければならなく、且つパリティブロックのパリティ値を更新しなければならないので、更新負担は３になる。図２６は斜線の引かれたブロックを更新した時の更新すべきパリティブロックを表している。
【０１１９】
表８は各方法の更新負担を比較したもので、ＥＶＥＮＯＤＤ法においてαで表すものは前記オーバヘッドを意味する。これにより、最適の更新負担を有するものは２次元パリティ法とＤＨ２法であることが分かる。
【表８】
0003587667.tif 000046
【０１２０】
最後に、（４）グループサイズについて比較説明する。誤り訂正グループのサイズであるグループサイズは、１つのディスクに誤りが発生する時に修復する間、アクセスするディスクの集合と定義する。グループサイズは、修復時に読み出すべきディスクの数が増加するにつれて再構成区間が線形的に拡大するために意味がある。また、修復中にも入出力要求を満足することができなければならなく、前記ＭＴＴＤＬはグループサイズに反比例するので、グループサイズは小さいことが好ましい。
【０１２１】
ＲＡＩＤレベル６に該当する方法は、１つのデータブロックに対して２つのパリティブロックがパリティ値をもっていなければならないため、２つのグループサイズが存在する。即ち、２次元パリティ法は横パリティ及び縦パリティ、ＥＶＥＮＯＤＤ法、ＤＨ法及びＤＨ２法は水平パリティ及び斜線パリティグループが存在するので、これらを区分してＧ（方法名、パリティグループ名）で示す。パリティグループ名の無いものは２つのグループサイズの平均を意味する。ここで、［Ｘ］はＸより大きくない整数を意味し、〈Ｘ〉はＸより小さくない整数を意味する。
【０１２２】
まず、２次元パリティ法のグループサイズは、データディスクの数がｍの時に横パリティグループサイズＧ（２Ｄ、Ｈ）及び縦パリティグループサイズＧ（２Ｄ、Ｖ）は〈√ｍ〉＋１或いは［  √ｍ］＋１であり、平均Ｇ（２Ｄ）は｛（  〈√ｍ〉＋１）  ×［  √ｍ］＋（［√ｍ］＋１）  ×〈√ｍ〉｝／（［  √ｍ］＋〈√ｍ〉）であり、これを整理すると、１＋（２  ［√ｍ］〈√ｍ〉）／（［  √ｍ］＋〈√ｍ〉）である。
【０１２３】
ＥＶＥＮＯＤＤ法では水平パリティグループサイズＧ（ＥＯ、Ｈ）がｍ＋１であり、斜線グループサイズＧ（ＥＯ、Ｄ）は２（ｍ−１）＋１なので、平均Ｇ（ＥＯ）は、｛（ｍ＋１）＋（２ｍ−１）｝／２である。ＤＨ法のＧ（ＤＨ、Ｈ）は（ｍ＋２）であり、Ｇ（ＤＨ、Ｄ）は（ｍ＋１）なので、平均Ｇ（ＤＨ）は、｛（ｍ＋２）×（ｍ＋１）＋（ｍ＋１）×（ｍ＋２）｝／｛（ｍ＋１）＋（ｍ＋２）｝である。ＤＨ２法のＧ（ＤＨ２、Ｈ）及びＧ（ＤＨ２、Ｄ）はそれぞれ（ｍ＋３）及び（ｍ＋１）であり、平均Ｇ（ＤＨ２）は、｛（ｍ＋３）×（ｍ）＋（ｍ＋１）×（ｍ＋２）｝／｛（ｍ）＋（ｍ＋２）｝である。
【０１２４】
これを整理したのが表９であり、図２７では幾つかの例に対するグループサイズをグラフで示している。表２７を参照すると、２次元パリティ法のグループサイズが１番小さく、ＥＶＥＮＯＤＤ法が斜線値Ｓのオーバヘッドによって１番大きくなる。
【表９】
0003587667.tif 000047
【０１２５】
結論的に、本発明のＤＨ法は素数Ｎ個からなるディスクアレイで任意の２つのディスクに誤り発生しても、斜線パリティと水平パリティを繰り返し適用することにより修復可能であり、パリティブロックを分散させることにより既存の方法の性能低下要因を除去した。また、ディスク誤り時に修復行程を両方向から並列に処理することにより修復時間を減らすことができる等の長所がある。但し、データディスクの内容の更新時に３回のディスクのアクセスを必要とし、これは性能低下の要因になるが、ディスクキャッシュ或いはその他の方法によって克服することができる。図１に示すように、本発明のディスクアレイシステムではディスク８−０〜８−（Ｎ−１）のそれぞれにバッファ６−０〜６−（Ｎ−１）が備えられている。これらのバッファ６−０〜６−（Ｎ−１）がバッファ及びキャッシュに用いられる。非同期書込みとも呼ばれる書込みバッファリングは、ディスクに書込む前に使用者の書込み要求を認知する方式であって、この方法は使用者に感じられる応答遅延時間を減らすことにより、作業量を緩和する。書込みバッファリングの１つの方法としては一連の書込み要求を１つのグループにまとめて処理する方法がある。また、最近更新されたパリティをキャッシングすることにより、既存のデータを読み取る必要がなくなるために、少ない書込みで必要なディスクアクセスを３回から２回にまで減らすことができる。
【０１２６】
本発明のＤＨ２法は、斜線パリティブロックはデータディスクに分散するのでＤＨ法における構造と類似であるが、水平パリティブロックを１つのパリティディスクに置くことにより、ＤＨ法の問題点、即ちデータディスクの内容の更新時に追加的にパリティディスクをアクセスしなければならない更新負担を２にできる。ＤＨ２法では水平パリティディスクにスペアブロック（ｓｐａｒｅ  ｂｌｏｃｋ）  が発生してディスク効率の問題が生じるからもしれないが、このブロックを既存の小さい書込み問題（ｓｍａｌｌ  ｗｒｉｔｅ  ｐｒｏｂｌｅｍ）  解決のための方法などに適用して活用すれば、かえってその用途を増加させることができる。
【０１２７】
【発明の効果】
上述したように本発明は、Ｎ個（Ｎは素数）からなるディスクアレイで任意の２つのディスクに誤りが発生しても、斜線パリティと水平パリティを繰り返し用いて修復することができ、最適のオーバヘッドを保持する。そして、パリティブロックを分散することにより、隘路現象を解決した。従って、システム性能が向上し、修復行程の並列性を用いて両方向から修復することができるので、修復時間を短縮することもできる。
【図面の簡単な説明】
【図１】本発明のＤＨ法のディスクアレイブロック構成図。
【図２】本発明のＤＨ２法のディスクアレイブロック構成図。
【図３】ＤＨ法によるパリティグループとパリティブロックの説明図。
【図４】ＤＨ２法によるパリティグループとパリティブロックの説明図。
【図５】ディスクの個数Ｎ＝７の場合の、ＤＨ法の水平パリティグループ及び水平パリティブロックの配置図。
【図６】ディスクの個数Ｎ＝７の場合の、ＤＨ法の斜線パリティグループ及び斜線パリティブロックの配置図。
【図７】ディスクの個数Ｎ＝７の場合の、ＤＨ法におけるパリティ及びデータの配置図。
【図８】ディスクの個数Ｎ＝７の場合の、ＤＨ２法の水平パリティグループ及び水平パリティブロックの配置図。
【図９】ディスクの個数Ｎ＝７の場合の、ＤＨ２法の斜線パリティグループ及び斜線パリティブロックの配置図。
【図１０】ディスクの個数Ｎ＝７の場合の、ＤＨ２法におけるパリティ及びデータの配置図。
【図１１】ＤＨ法によるパリティ記憶アルゴリズムのフローチャート。
【図１２】ディスクの個数Ｎ＝７の場合の、ＤＨ法によるパリティ記憶行程の説明図。
【図１３】ディスクの個数Ｎ＝７の場合の、ＤＨ法によるパリティ記憶行程の説明図。
【図１４】ディスクの個数Ｎ＝７の場合の、ＤＨ法によるパリティ記憶行程の説明図。
【図１５】ＤＨ２法によるパリティ記憶アルゴリズムのフローチャート。
【図１６】ディスクの個数Ｎ＝７の場合の、ＤＨ２法によるパリティ記憶行程の説明図。
【図１７】ディスクの個数Ｎ＝７の場合の、ＤＨ２法によるパリティ記憶行程の説明図。
【図１８】ディスクの個数Ｎ＝７の場合の、ＤＨ２法によるパリティ記憶行程の説明図。
【図１９】ＤＨ法のデータ修復のフローチャート。
【図２０】分図Ａ〜Ｇは、ＤＨ法によるデータ修復行程の説明図。
【図２１】ＤＨ２法のデータ修復のフローチャート。
【図２２】分図Ａ〜Ｇは、ＤＨ２法によるデータ修復行程の説明図。
【図２３】誤り修復方法の並列性の説明図。
【図２４】ＭＴＴＤＬ比較グラフ。
【図２５】ＥＶＥＮＯＤＤ法で斜線Ｓブロックの更新時にアクセスするパリティブロック（Ｎ＝７の時）を示す図。
【図２６】ＤＨ法でデータブロック更新時にアクセスするパリティブロック（Ｎ＝７の時）を示す図。
【図２７】各方法のグループサイズ比較グラフ。
【符号の説明】
２  ホストコンピュータ
４  コントローラ
１０  バス
２０、３０  水平パリティブロック
２２、３２  斜線パリティブロック
【図１】
0003587667.tif 000062
【図２】
0003587667.tif 000063
【図３】
0003587667.tif 000064
【図４】
0003587667.tif 000065
【図５】
0003587667.tif 000066
【図６】
0003587667.tif 000067
【図７】
0003587667.tif 000068
【図８】
0003587667.tif 000069
【図９】
0003587667.tif 000070
【図１０】
0003587667.tif 000071
【図１１】
0003587667.tif 000072
【図１２】
0003587667.tif 000073
【図１３】
0003587667.tif 000074
【図１４】
0003587667.tif 000075
【図１５】
0003587667.tif 000076
【図１６】
0003587667.tif 000077
【図１７】
0003587667.tif 000078
【図１８】
0003587667.tif 000079
【図１９】
0003587667.tif 000080
【図２０】
0003587667.tif 000081
【図２１】
0003587667.tif 000082
【図２２】
0003587667.tif 000083
【図２３】
0003587667.tif 000084
【図２４】
0003587667.tif 000085
【図２５】
0003587667.tif 000086
【図２６】
0003587667.tif 000087
【図２７】
0003587667.tif 000088