(57)【要約】【課題】ガロア拡大体によって計算された冗長データに冗長符号として巡回符号を付与するディスクアレイ装置において、冗長データについての冗長符号の計算に要する時間を短縮する。【解決手段】  ディスクアレイ装置１００のＲＡＩＤコントローラ１３０は、上位装置から受信したホストデータより冗長データを生成し、当該ホストデータと冗長データについて冗長符号を生成し、当該ホストデータと冗長データを磁気ディスク１２０に書き込む。ＲＡＩＤコントローラは、冗長データを生成するためのガロア拡大体の原始多項式と、冗長符号の生成多項式に同一の多項式を用いる。【選択図】  図１
2011008426.tif 000002
【特許請求の範囲】
【請求項１】
複数の磁気ディスクと、
上位装置から受信したホストデータについて冗長データを生成し、前記ホストデータと前記冗長データについて巡回符号による冗長符号を生成し、前記ホストデータと前記冗長データとを前記磁気ディスクに書き込むＲＡＩＤコントローラを備え、
前記ＲＡＩＤコントローラは、
前記冗長データを生成するためのガロア拡大体の原始多項式と、前記冗長符号の生成多項式に同一の多項式を用いる
ことを特徴とするディスクアレイ装置。
【請求項２】
前記ＲＡＩＤコントローラは、
前記ホストデータまたは前記冗長データと当該ホストデータまたは当該冗長データについて生成された前記冗長符号とを異なる２つの前記磁気ディスクに渡り、かつ、当該冗長符号が当該２つの磁気ディスクのいずれかに収まるように書き込む
ことを特徴とする請求項１記載のディスクアレイ装置。
【請求項３】
前記ＲＡＩＤコントローラは、
前記磁気ディスクの書き込み単位毎に、前記ホストデータまたは前記冗長データについて前記冗長符号を生成し、
前記磁気ディスクの書き込み単位毎に、前記ホストデータまたは前記冗長データと当該ホストデータまたは当該冗長データについて生成された前記冗長符号とを異なる前記磁気ディスクに書き込む
ことを特徴とする請求項２記載のディスクアレイ装置。
【請求項４】
前記ＲＡＩＤコントローラは、
複数のホストデータについて複数の冗長データを生成し、当該複数のホストデータのそれぞれと当該複数の冗長データのうちの対応するものとを異なる前記磁気ディスクに書き込み、
前記磁気ディスクから読み出した前記ホストデータまたは前記冗長データについて計算した前記冗長符号と前記磁気ディスクから読み出した当該ホストデータまたは当該冗長データの前記冗長符号とが不一致の場合、
当該冗長符号が不一致となったホストデータまたは冗長データが書き込まれていた前記磁気ディスク、及び、当該冗長符号が不一致となったホストデータまたは冗長データの前記冗長符号が書き込まれた前記磁気ディスク上の前記ホストデータ及び前記冗長データを他の前記磁気ディスク上の前記ホストデータ及び前記冗長データを基に復旧する
ことを特徴とする請求項２または３に記載のディスクアレイ装置。
【請求項５】
前記ＲＡＩＤコントローラは、
前記冗長符号が不一致となったホストデータまたは冗長データが書き込まれていた前記磁気ディスク、及び、当該冗長符号が不一致となったホストデータまたは冗長データの前記冗長符号が書き込まれた前記磁気ディスク上の前記冗長符号を再生成する
ことを特徴とする請求項４に記載のディスクアレイ装置。
【請求項６】
上位装置から受信したホストデータについて冗長データを生成する冗長データ生成ステップと、
前記ホストデータと前記冗長データについて巡回符号による冗長符号を生成する冗長符号生成ステップと、
前記ホストデータと前記冗長データとを複数の磁気ディスクに書き込む書き込みステップと
を含み、
前記冗長データ生成ステップにおける前記冗長データを生成するためのガロア拡大体の原始多項式と、前記冗長符号生成ステップにおける前記冗長符号の生成多項式に同一の多項式を用いる
ことを特徴とするディスクアレイ制御方法。
【請求項７】
前記書き込みステップは、前記ホストデータまたは前記冗長データと当該ホストデータまたは当該冗長データについて生成された前記冗長符号とを異なる２つの前記磁気ディスクに渡り、かつ、当該冗長符号が当該２つの磁気ディスクのいずれかに収まるように書き込む
ことを特徴とする請求項６記載のディスクアレイ方法。
【請求項８】
前記冗長データ生成ステップは、前記磁気ディスクの書き込み単位毎に、前記ホストデータまたは前記冗長データについて前記冗長符号を生成し、
前記書き込みステップは、前記磁気ディスクの書き込み単位毎に、前記ホストデータまたは前記冗長データと当該ホストデータまたは当該冗長データについて生成された前記冗長符号とを異なる前記磁気ディスクに書き込む
ことを特徴とする請求項７記載のディスクアレイ制御方法。
【請求項９】
前記冗長データ生成ステップは、複数のホストデータについて複数の冗長データを生成し、
前記書き込みステップは、当該複数のホストデータのそれぞれと当該複数の冗長データのうちの対応するものとを異なる前記磁気ディスクに書き込み、
さらに、前記磁気ディスクから読み出した前記ホストデータまたは前記冗長データについて計算した前記冗長符号と前記磁気ディスクから読み出した当該ホストデータまたは当該冗長データの前記冗長符号とが不一致の場合、当該冗長符号が不一致となったホストデータまたは冗長データが書き込まれていた前記磁気ディスク、及び、当該冗長符号が不一致となったホストデータまたは冗長データの前記冗長符号が書き込まれた前記磁気ディスク上の前記ホストデータ及び前記冗長データを他の前記磁気ディスク上の前記ホストデータ及び前記冗長データを基に復旧する復旧ステップを含む
ことを特徴とする請求項７または８に記載のディスクアレイ制御方法。
【請求項１０】
前記復旧ステップは、さらに、前記冗長符号が不一致となったホストデータまたは冗長データが書き込まれていた前記磁気ディスク、及び、当該冗長符号が不一致となったホストデータまたは冗長データの前記冗長符号が書き込まれた前記磁気ディスク上の前記冗長符号を再生成する
ことを特徴とする請求項９に記載のディスクアレイ制御方法。
【請求項１１】
コンピュータを、
上位装置から受信したホストデータについて冗長データを生成し、前記ホストデータと前記冗長データについて巡回符号による冗長符号を生成し、前記ホストデータと前記冗長データとを複数の磁気ディスクに書き込むＲＡＩＤコントローラとして動作させ、
前記ＲＡＩＤコントローラは、
前記冗長データを生成するためのガロア拡大体の原始多項式と、前記冗長符号の生成多項式に同一の多項式を用いる
ことを特徴とするディスクアレイ装置用プログラム。
【請求項１２】
前記ＲＡＩＤコントローラは、
前記ホストデータまたは前記冗長データと当該ホストデータまたは当該冗長データについて生成された前記冗長符号とを異なる２つの前記磁気ディスクに渡り、かつ、当該冗長符号が当該２つの磁気ディスクのいずれかに収まるように書き込む
ことを特徴とする請求項１１記載のディスクアレイ装置用プログラム。
【請求項１３】
前記ＲＡＩＤコントローラは、
前記磁気ディスクの書き込み単位毎に、前記ホストデータまたは前記冗長データについて前記冗長符号を生成し、
前記磁気ディスクの書き込み単位毎に、前記ホストデータまたは前記冗長データと当該ホストデータまたは当該冗長データについて生成された前記冗長符号とを異なる前記磁気ディスクに書き込む
ことを特徴とする請求項１２記載のディスクアレイ装置用プログラム。
【請求項１４】
前記ＲＡＩＤコントローラは、
複数のホストデータについて複数の冗長データを生成し、当該複数のホストデータのそれぞれと当該複数の冗長データのうちの対応するものとを異なる前記磁気ディスクに書き込み、
前記磁気ディスクから読み出した前記ホストデータまたは前記冗長データについて計算した前記冗長符号と前記磁気ディスクから読み出した当該ホストデータまたは当該冗長データの前記冗長符号とが不一致の場合、
当該冗長符号が不一致となったホストデータまたは冗長データが書き込まれていた前記磁気ディスク、及び、当該冗長符号が不一致となったホストデータまたは冗長データの前記冗長符号が書き込まれた前記磁気ディスク上の前記ホストデータ及び前記冗長データを他の前記磁気ディスク上の前記ホストデータ及び前記冗長データを基に復旧する
ことを特徴とする請求項１２または１３に記載のディスクアレイ装置用プログラム。
【請求項１５】
前記ＲＡＩＤコントローラは、
前記冗長符号が不一致となったホストデータまたは冗長データが書き込まれていた前記磁気ディスク、及び、当該冗長符号が不一致となったホストデータまたは冗長データの前記冗長符号が書き込まれた前記磁気ディスク上の前記冗長符号を再生成する
ことを特徴とする請求項１４に記載のディスクアレイ装置用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスクアレイ装置、ディスクアレイ装置制御方法、及びディスクアレイ装置用プログラムに関して、特に、データ及び冗長データに冗長符号を付与するディスクアレイ装置、ディスクアレイ装置制御方法、及びディスクアレイ装置用プログラムに関する。
【背景技術】
【０００２】
ディスクアレイ装置の実装方法として、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）が知られている。ＲＡＩＤシステムは、ＲＡＩＤ１からＲＡＩＤ５として定義された技術により、複数の磁気ディスクへ書き込むデータに冗長データ（パリティ）を付与することにより、単一磁気ディスクの故障によるデータ喪失を防ぐ機能を持つ。また、複数の冗長ディスクを使用して、複数の磁気ディスクの障害によるデータ喪失を防ぐ、ＲＡＩＤ６或いはｄｏｕｂｌｅ  ｐａｒｉｔｙと呼ばれる技術（多冗長ディスクアレイ装置）も提案されている。
【０００３】
このようなディスクアレイ装置において、単一の磁気ディスクに対する書き込み処理に対し、磁気ディスク側が正常応答を返却した場合、ディスクアレイ装置はこれを正常な書き込み処理と判定する。一方、磁気ディスク側の故障により、正常応答が返却された場合でも、磁気ディスクの媒体上には、データが書き込まれない障害（書き込み未了障害）が発生し得る。書き込み未了障害が発生した場合、磁気ディスクからの読み出し処理では、書き込み前の古いデータが読み出されるが、読み出し処理自体は正常終了する。
【０００４】
書き込み未了障害の検出方法として、データや冗長データに保証コードや巡回符号（ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ））等の冗長符号を付与し、データや冗長データの読み出し時に、データや冗長データと冗長符号を比較する方法が知られている。
【０００５】
例えば、特許文献１のディスクアレイ装置は、データの書き込みの際、データと冗長データのそれぞれについて保証コードを計算し、データや冗長データとは異なるディスクに保存し、データの読み出しの際、保証コードを用いて、データに誤りが発生したことを検出する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−１０７３１１号公報
【非特許文献】
【０００７】
【非特許文献１】James S.Plank、「A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-like Systems」、Software Practice and Experience、Volume27、Number 9、September 1997、page995-1012
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ＲＡＩＤ６のような多冗長ディスクアレイ装置では、冗長データとして、ガロア拡大体によって計算された冗長データが用いられる。例えば、非特許文献１には、リードソロモン符号に準じたガロア拡大体を使用した冗長データの演算方法が示されている。このようなガロア拡大体によって計算された冗長データにＣＲＣを付与する場合、冗長データのＣＲＣは、データに付与されたＣＲＣをガロア拡大体で演算しても求めることができない。したがって、ガロア拡大体によって計算された冗長データに付与されるＣＲＣは、冗長データより計算する必要があり、データの書き込みや障害復旧におけるＣＲＣの計算に時間を要するという問題があった。
【０００９】
（発明の目的）
本発明の目的は、上記課題である、冗長データについての冗長符号（ＣＲＣ）の計算に時間を要するという問題を解決したディスクアレイ装置、ディスクアレイ装置制御方法、及びディスクアレイ装置用プログラムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明のディスクアレイ装置は、複数の磁気ディスクと、上位装置から受信したホストデータについて冗長データを生成し、前記ホストデータと前記冗長データについて巡回符号による冗長符号を生成し、前記ホストデータと前記冗長データとを前記磁気ディスクに書き込むＲＡＩＤコントローラを備え、前記ＲＡＩＤコントローラは、前記冗長データを生成するためのガロア拡大体の原始多項式と、前記冗長符号の生成多項式に同一の多項式を用いることを特徴とする。
【００１１】
本発明のディスクアレイ制御方法は、上位装置から受信したホストデータについて冗長データを生成する冗長データ生成ステップと、前記ホストデータと前記冗長データについて巡回符号による冗長符号を生成する冗長符号生成ステップと、前記ホストデータと前記冗長データとを複数の磁気ディスクに書き込む書き込みステップとを含み、前記冗長データ生成ステップにおける前記冗長データを生成するためのガロア拡大体の原始多項式と、前記冗長符号生成ステップにおける前記冗長符号の生成多項式に同一の多項式を用いることを特徴とする。
【００１２】
本発明のディスクアレイ装置用プログラムは、コンピュータを、上位装置から受信したホストデータについて冗長データを生成し、前記ホストデータと前記冗長データについて巡回符号による冗長符号を生成し、前記ホストデータと前記冗長データとを複数の磁気ディスクに書き込むＲＡＩＤコントローラとして動作させ、前記ＲＡＩＤコントローラは、前記冗長データを生成するためのガロア拡大体の原始多項式と、前記冗長符号の生成多項式に同一の多項式を用いることを特徴とする。
【発明の効果】
【００１３】
本発明の効果は、ガロア拡大体によって計算された冗長データに冗長符号として巡回符号を付与するディスクアレイ装置において、冗長データについての冗長符号（ＣＲＣ）の計算に要する時間を短縮できることである。
【図面の簡単な説明】
【００１４】
【図１】本発明の第一の実施の形態の構成図である。
【図２】本発明の第一の実施の形態の特徴的な構成を示す図である。
【図３】本発明の第一の実施の形態における書き込み処理の動作を示すフローチャートである。
【図４】本発明の第一の実施の形態における読み出し処理の動作を示すフローチャートである。
【図５】本発明の第一の実施の形態における復旧処理の動作を示すフローチャートである。
【図６】本発明の第二の実施の形態の構成図である。
【図７】本発明の実施の形態におけるＣＲＣの生成多項式の例を示す図である。
【図８】本発明の実施の形態におけるＣＲＣの入力データのベクトル表現を示す図である。
【図９】本発明の実施の形態におけるＣＲＣのベクトル表現を示す図である。
【図１０】本発明の実施の形態におけるＣＲＣの計算方法を示す図である。
【図１１】本発明の実施の形態におけるＣＲＣの計算方法を示す図である。
【図１２】本発明の実施の形態における行列Ｒを示す図である。
【図１３】本発明の実施の形態における行列Ｔを示す図である。
【図１４】本発明の実施の形態における行列ｅｋを示す図である。
【図１５】本発明の実施の形態におけるホストデータＡ、Ｂ、冗長データＰ、Ｑのベクトル表現を示す図である。
【図１６】本発明の実施の形態におけるホストデータＡ、ＢについてのＣＲＣの計算式の例を示す図である。
【図１７】本発明の実施の形態における冗長データＰについてのＣＲＣの計算式の例を示す図である。
【図１８】本発明の実施の形態における冗長データＱについてのＣＲＣの計算式の例を示す図である。
【図１９】本発明の実施の形態における冗長データＰについてのＣＲＣの計算方法を示す図である。
【図２０】本発明の実施の形態における冗長データＱについてのＣＲＣの計算方法を示す図である。
【発明を実施するための形態】
【００１５】
（第一の実施の形態）
次に、本発明の第一の実施の形態について図面を参照して詳細に説明する。
【００１６】
図１は、本発明の第一の実施の形態の構成図である。図１を参照すると、本発明のディスクアレイ装置１００の第一の実施の形態は、ホストインタフェース１１０、複数の磁気ディスク１２０（１２０ａ〜ｄ）、及びＲＡＩＤコントローラ１３０より構成される。
【００１７】
ここで、ホストインタフェース１１０は、上位装置からのコマンド、ホストデータを受け取り、ＲＡＩＤコントローラ１３０へ送出する。
【００１８】
磁気ディスク１２０は、当該磁気ディスク１２０への「書き込み単位」（例えばセクタ１２１）に分割されており、ＲＡＩＤコントローラ１３０に対して、当該書き込み単位の長さ（セクタ長）での書き込み及び読み出しを提供する。
【００１９】
ＲＡＩＤコントローラ１３０は、ホストインタフェース１１０へ、複数の磁気ディスク１２０に対するデータの書き込み及び読み出しを提供する。ＲＡＩＤコントローラ１３０は、ホストインタフェース１１０より受け取ったホストデータを基に冗長データを生成し、ホストデータ及び冗長データを磁気ディスク１２０へ書き込む。また、ＲＡＩＤコントローラ１３０は、磁気ディスク１２０へ書き込まれたホストデータ及び冗長データの誤りを検出するための冗長符号として巡回符号（ＣＲＣ）を計算し、磁気ディスク１２０へ書き込む。
【００２０】
本発明の第一の実施の形態では、ＲＡＩＤコントローラ１３０は、ＲＡＩＤ６により磁気ディスク１２０への書き込み、読み出しを行うものとする。ＲＡＩＤコントローラ１３０は、冗長データとして、ホストデータＡ、ＢについてＸＯＲにより計算したパリティＰと、ガロア拡大体の原始多項式により計算したパリティＱを用いるものとする。また、ＲＡＩＤコントローラ１３０は、パリティＱの計算におけるガロア拡大体の原始多項式に、ＣＲＣの生成多項式と同一の多項式を用いるものとする。
【００２１】
ここで、ＲＡＩＤコントローラ１３０がホストインタフェース１１０へ書き込み及び読み出しを提供するデータの単位をデータの「処理単位」とする。本発明の第一の実施の形態では、ホストデータＡ、Ｂ及び冗長データＰ、Ｑに対するＣＲＣは、ホストデータ、冗長データの処理単位（Ａｉ、Ｂｉ、Ｐｉ、Ｑｉ）毎に付与されるものとする。さらに、ホストデータまたは冗長データの処理単位とそのＣＲＣとは、２つの異なる磁気ディスク１２０に渡って書き込まれるものとする。このときＣＲＣは、２つの磁気ディスク１２０のうちのいずれかの磁気ディスク１２０に収めるものとする。
【００２２】
例えば、図１では、ホストデータの処理単位Ａ０、Ｂ０、冗長データの処理単位Ｐ０、Ｑ０毎にＣＲＣ（Ｃａ０、Ｃｂ０、Ｃｐ０、Ｃｑ０）が付与されている。さらに、ホストデータの処理単位Ａ０とそのＣＲＣであるＣａ０は磁気ディスク１２０ａのセクタ１２１ａ１と磁気ディスク１２０ｂのセクタ１２１ｂ２に書き込まれており、Ｃａ０は磁気ディスク１２０ｂのセクタ１２１ｂ２に収まるように書き込まれている。
【００２３】
なお、ＲＡＩＤコントローラ１３０は、プログラム制御によって動作する情報処理装置であってもよい。
【００２４】
次に、本発明の第一の実施の形態におけるＣＲＣの計算方法について図面を参照して説明する。
【００２５】
ここでは、ＣＲＣの生成多項式として、例えば、図７に示すＧＦ（ｘ）を用いるものとする。
【００２６】
はじめに、ＣＲＣを計算するための入力データ（ビット列）をｄとする。ＣＲＣは、データｄから１ビットを順次、ＧＦ（ｘ）に入力することにより計算される。
【００２７】
ｄを図８に示すような、１６ビットのベクトルデータｄｊ（ｊ＝０〜Ｎ−１）に分割した場合、ＣＲＣは、各ベクトルデータｄｊから１ビットを順次、ＧＦ（ｘ）に入力することにより計算される。
【００２８】
データｄについて計算したＣＲＣを図９に示すようなベクトルデータＣｄとし、さらに、ｄ０の０番目のビットからｄｊのｋ番目のビットまでがＧＦ（ｘ）に入力された時のＣＲＣをＣｄ（ｊ，ｋ）とすると、ｄ０、ｄ１の全てのビットがＧＦ（ｘ）に入力された時のＣＲＣであるＣｄ（０，１５）、Ｃｄ（１，１５）は図１０のように表される。
【００２９】
ここで、行列Ｒ、Ｔ、ｅｋの定義を図１２〜１４に示す。行列Ｒは、ベクトルデータを１ビットシフトするための行列である。行列Ｔの左端の列は、ＣＲＣの生成多項式ＧＦ（ｘ）のべき乗の項と一致しており、同伴行列（Ｃｏｍｐａｎｉｏｎ  ｍａｔｒｉｘ）と呼ばれる。
【００３０】
さらに、データｄの全てのビットがＧＦ（ｘ）に入力された時のＣＲＣであるＣｄは図１１のように、ｄｊと同伴行列Ｔの１６（Ｎ−ｊ）乗との積の和として表すことができる。
【００３１】
次に、ホストデータ、冗長データの処理単位Ａｉ、Ｂｉ、Ｐｉ、Ｑｉを図１５のように１６ビットのベクトルデータＡｉｊ、Ｂｉｊ、Ｐｉｊ、Ｑｉｊに分割する。
【００３２】
ｉ番目のホストデータＡｉ、ＢｉのＣＲＣをＣａｉ、Ｃｂｉとすると、Ｃａｉ、Ｃｂｉは図１１の関係により、図１６のように表すことができる。
【００３３】
また、ホストデータＡｉ、Ｂｉについての冗長データＰｉを図１７のように定義する。さらに、ホストデータＡｉ、Ｂｉについての冗長データＱｉを同伴行列Ｔを用いて図１８のように定義する。ここで、図１８は、リードソロモン符号に準じたガロア拡大体の原始多項式である。
【００３４】
この場合、冗長データＰｉのＣＲＣをＣｐｉとすると、Ｃｐｉは、図１６及び図１７の関係により、Ｃａｉ、Ｃｂｉ用いて図１９のように表すことができる。同様に、冗長データＱｉのＣＲＣをＣｑｉとすると、Ｃｑｉは、図１６及び図１８の関係により、Ｃａｉ、Ｃｂｉ用いて図２０のように表すことができる。
【００３５】
以上により、冗長データについてのＣＲＣ（Ｃｐｉ、Ｃｑｉ）は、ホストデータについて計算したＣＲＣ（Ｃａｉ、Ｃｂｉ）用いて、直接計算することができる。
【００３６】
次に、本発明の第一の実施の形態の動作について図面を参照して説明する。
【００３７】
はじめに、本発明の第一の実施の形態における書き込み処理について説明する。
【００３８】
ここでは、図１において、ホストデータＡ０、Ａ１、Ａ２…、Ｂ０、Ｂ１、Ｂ２…を磁気ディスク１２０へ書き込む場合を例に、書き込み処理を説明する。
【００３９】
図３は、本発明の第一の実施の形態における書き込み処理の動作を示すフローチャートである。
【００４０】
ＲＡＩＤコントローラ１３０は、ホストインタフェース１１０から受信したホストデータ（Ａ、Ｂ）についてのＣＲＣ（Ｃａ、Ｃｂ）を図１６の式によりを計算する（ステップＳ１０１）。ＲＡＩＤコントローラ１３０は、ホストデータ（Ａ、Ｂ）と計算したＣＲＣ（Ｃａ、Ｃｂ）とを、２つの異なる磁気ディスク１２０に渡って書き込む（ステップＳ１０２）。このとき、ＲＡＩＤコントローラ１３０は、ホストデータ（Ａ、Ｂ）を磁気ディスク１２０の書き込み単位（セクタ長）に応じて分割して書き込む。また、ＲＡＩＤコントローラ１３０は、ＣＲＣ（Ｃａ、Ｃｂ）が１つの磁気ディスク１２０に収まるように書き込む。
【００４１】
例えば、図１において、ＲＡＩＤコントローラ１３０は、ホストインタフェース１１０から受信したＡ０、Ａ１について、図１６の式によりＣａ０、Ｃｂ０を計算する。そして、ＲＡＩＤコントローラ１３０は、Ａ０を分割してセクタ１２１ａ１と１２１ｂ２へ、Ｃａ０をＡ０に続けてセクタ１２１ｂ２へ書き込む。また、ＲＡＩＤコントローラ１３０は、Ｂ０を分割してセクタ１２１ｂ１と１２１ｃ２へ、Ｃｂ０をＢ０に続けてセクタ１２１ｃ２へ書き込む。
【００４２】
次に、ＲＡＩＤコントローラ１３０は、磁気ディスク１２０へ書き込んだホストデータ（Ａ、Ｂ）から、図１７の式により冗長データ（Ｐ）を計算する（ステップＳ１０３）。ＲＡＩＤコントローラ１３０は、冗長データ（Ｐ）についてのＣＲＣ（Ｃｐ）を、図１９の式により、ホストデータについてのＣＲＣ（Ｃａ、Ｃｂ）を用いて計算する（ステップＳ１０４）。ＲＡＩＤコントローラ１３０は、磁気ディスク１２０へ計算した冗長データ（Ｐ）とＣＲＣ（Ｃｐ）とを、２つの異なる磁気ディスク１２０に渡って書き込む（ステップＳ１０５）。このとき、ホストデータの場合と同様に、ＲＡＩＤコントローラ１３０は、冗長データ（Ｐ）をセクタ長に応じて分割して書き込む。また、ＲＡＩＤコントローラ１３０は、ＣＲＣ（Ｃｐ）が１つの磁気ディスク１２０に収まるように書き込む。
【００４３】
例えば、図１において、ＲＡＩＤコントローラ１３０は、Ａ０とＢ０から、図１７の式によりＰ０を計算する。また、ＲＡＩＤコントローラ１３０は、Ｐ０についてのＣｐ０を、図１９の式により、Ｃａ０、Ｃｂ０を用いて計算する。ＲＡＩＤコントローラ１３０は、Ｐ０を分割してセクタ１２１ｃ１と１２１ｄ２へ、Ｃｐ０をＰ０に続けてセクタ１２１ｄ２へ書き込む。
【００４４】
さらに、ＲＡＩＤコントローラ１３０は、磁気ディスク１２０へ書き込んだホストデータ（Ａ、Ｂ）から、図１８の式により冗長データ（Ｑ）を計算する（ステップＳ１０６）。ＲＡＩＤコントローラ１３０は、冗長データ（Ｑ）についてのＣＲＣ（Ｃｑ）を、図２０の式により、ホストデータについてのＣＲＣ（Ｃａ、Ｃｂ）を用いて計算する（ステップＳ１０７）。ＲＡＩＤコントローラ１３０は、磁気ディスク１２０へ計算した冗長データ（Ｑ）とＣＲＣ（Ｃｑ）とを、２つの異なる磁気ディスク１２０に渡って書き込む（ステップＳ１０８）。このとき、ホストデータの場合と同様に、ＲＡＩＤコントローラ１３０は、冗長データ（Ｑ）をセクタ長に応じて分割して書き込む。また、ＲＡＩＤコントローラ１３０は、ＣＲＣ（Ｃｑ）が１つの磁気ディスク１２０に収まるように書き込む。
【００４５】
例えば、図１において、ＲＡＩＤコントローラ１３０は、Ａ０とＢ０から、図１８の式によりＱ０を計算する。また、ＲＡＩＤコントローラ１３０は、Ｑ０についてのＣｑ０を、図２０の式により、Ｃａ０、Ｃｂ０を用いて計算する。ＲＡＩＤコントローラ１３０は、Ｑ０を分割してセクタ１２１ｄ１と１２１ａ２へ、Ｃｑ０をＱ０に続けてセクタ１２１ａ２へ書き込む。
【００４６】
さらに、ＲＡＩＤコントローラ１３０は、Ａ０、Ｂ０に続くＡ１、Ａ２、…、Ｂ１、Ｂ２、…についても、図１のように、ホストデータ、冗長データ、及びＣＲＣの書き込みを行う。
【００４７】
次に、本発明の第一の実施の形態における読み出し処理について説明する。
【００４８】
ここでは、図１において、ホストデータＡ０を磁気ディスク１２０から読み出す場合を例に、読み出し処理を説明する。
【００４９】
図４は、本発明の第一の実施の形態における読み出し処理の動作を示すフローチャートである。
【００５０】
ＲＡＩＤコントローラ１３０は、ホストインタフェース１１０からホストデータの読み出しコマンドを受信すると、磁気ディスク１２０上の読み出し対象のホストデータが書き込まれたセクタ１２１からホストデータを読み出す（ステップＳ２０１）。ＲＡＩＤコントローラ１３０は、磁気ディスク１２０上の当該ホストデータのＣＲＣが書き込まれたセクタ１２１からＣＲＣを読み出す（ステップＳ２０２）。ＲＡＩＤコントローラ１３０は、読み出したホストデータについて図１６の式により計算したＣＲＣと磁気ディスク１２０から読み出したＣＲＣとを比較する（ステップＳ２０３）。
【００５１】
例えば、図１において、ＲＡＩＤコントローラ１３０は、ホストインタフェース１１０からＡ０の読み出しコマンドを受信すると、セクタ１２１ａ１と１２１ｂ２からＡ０、セクタ１２１ｂ２からＣａ０を読み出す。ＲＡＩＤコントローラ１３０は、読み出したＡ０について図１６の式により求めたＣＲＣとセクタ１２１ｂ２から読み出したＣａ０とを比較する。
【００５２】
ステップＳ２０３において、比較の結果が一致していた場合、読み出したホストデータは正しいため、ＲＡＩＤコントローラ１３０は、当該ホストデータをホストインタフェース１１０へ送信する（ステップＳ２０４）。
【００５３】
一方、ステップＳ２０３において、比較の結果が不一致の場合、読み出したホストデータまたはＣＲＣの書き込み未了障害、或いは、読み出したホストデータまたはＣＲＣが書き込まれていた磁気ディスク１２０の故障である。この場合、ＲＡＩＤコントローラ１３０は、読み出したホストデータとＣＲＣが書き込まれていた磁気ディスク１２０を他の磁気ディスク１２０から復旧し（ステップＳ２０５）、復旧した読み出し対象のホストデータをホストインタフェース１１０へ送信する（ステップＳ２０６）。
【００５４】
例えば、図１において、セクタ１２１ａ１と１２１ｂ２とから読み出したＡ０について計算したＣＲＣとセクタ１２１ｂ２から読み出したＣａ０とが不一致の場合、ＲＡＩＤコントローラ１３０は、磁気ディスク１２０ａ、１２０ｂを磁気ディスク１２０ｃ、１２０ｄから復旧する。
【００５５】
図５は、ステップＳ２０５における復旧処理の動作を示すフローチャートである。
【００５６】
ＲＡＩＤコントローラ１３０は、復旧先の磁気ディスク１２０の各セクタ１２１について、復旧元の磁気ディスク１２０のホストデータまたは冗長データから、図１７、図１８の式をもとに、復旧先の磁気ディスク１２０のホストデータまたは冗長データを計算する（ステップＳ３０１）。ＲＡＩＤコントローラ１３０は、計算したホストデータまたは冗長データを、復旧先の磁気ディスク１２０に書き込む（ステップＳ３０２）。ＲＡＩＤコントローラ１３０は、復旧先の磁気ディスク１２０の全てのセクタ１２１について、ステップＳ３０１、Ｓ３０２を繰り返す（ステップＳ３０３）。
【００５７】
例えば、図１において、磁気ディスク１２０ａ、１２０ｂを復旧する場合、ＲＡＩＤコントローラ１３０は、セクタ１２１ｃ１のＰ０とセクタ１２１ｄ１のＱ０から、図１７、図１８の式をもとに、セクタ１２１ａ１のＡ０とセクタ１２１ｂ１のＢ０を計算する。ＲＡＩＤコントローラ１３０は、計算したＡ０とＢ０をそれぞれセクタ１２１ａ１、セクタ１２１ｂ１に書き込む。また、ＲＡＩＤコントローラ１３０は、セクタ１２１ｃ２のＢ０、Ｂ１とセクタ１２１ｄ２のＰ０、Ｐ１から、図１７、図１８の式をもとに、セクタ１２１ａ２のＱ０、Ｑ１とセクタ１２１ｂ２のＡ０、Ａ１を計算する。ＲＡＩＤコントローラ１３０は、計算したＱ０、Ｑ１とＡ０、Ａ１をそれぞれセクタ１２１ａ２、１２１ｂ２に書き込む。
【００５８】
ＲＡＩＤコントローラ１３０は、他のセクタ１２１についても、磁気ディスク１２０ｃ、１２０ｄ上のホストデータや冗長データから、図１７、図１８の式をもとに、磁気ディスク１２０ａ、１２０ｂ上のホストデータや冗長データを計算する。
【００５９】
次に、ＲＡＩＤコントローラ１３０は、復旧先の磁気ディスク１２０上に書き込まれていたＣＲＣを、対応するホストデータ、冗長データから図１６、図１９、図２０の式により再計算する（ステップＳ３０４）。このとき、ＲＡＩＤコントローラ１３０は、冗長データについてのＣＲＣは、図１９、図２０の式により、ホストデータのＣＲＣを用いて計算する。ＲＡＩＤコントローラ１３０は、再計算したＣＲＣを復旧先の磁気ディスク１２０に書き込む（ステップＳ３０５）。ＲＡＩＤコントローラ１３０は、復旧先の磁気ディスク１２０上の全てのＣＲＣについて、ステップＳ３０４、Ｓ３０５を繰り返す（ステップＳ３０６）。
【００６０】
例えば、図１において、ＲＡＩＤコントローラ１３０は、セクタ１２１ｂ２のＣａ０を、図１６の式により再計算する。また、ＲＡＩＤコントローラ１３０は、セクタ１２１ａ２のＣｑ０を、図２０の式により、Ｃａ０、Ｃｂ０を用いて再計算する。ＲＡＩＤコントローラ１３０は、再計算したＣｑ０、Ｃａ０をそれぞれセクタ１２１ａ２、１２１ｂ２に書き込む。ＲＡＩＤコントローラ１３０は、磁気ディスク１２０ａ、１２０ｂ上の他のＣＲＣも図１６、図１９、図２０の式により再計算し、磁気ディスク１２０に書き込む。
【００６１】
以上により、本発明の第一の実施の形態の動作が完了する。
【００６２】
なお、上述の読み出し処理では、磁気ディスク１２０からホストデータを読み出す際、当該ホストデータついて計算したＣＲＣと磁気ディスク１２０から読み出した当該ホストデータのＣＲＣとが不一致の場合の復旧処理を例に説明したが、磁気ディスク１２０から読み出した冗長データついて計算したＣＲＣと磁気ディスク１２０から読み出した当該冗長データのＣＲＣとが不一致の場合についても同様の処理を行うことができる。
【００６３】
次に、本発明の第一の実施の形態の特徴的な構成を図２に示す。図２を参照すると、ディスクアレイ装置１００は、複数の磁気ディスク１２０と、上位装置から受信したホストデータについて冗長データを生成し、ホストデータと冗長データについて巡回符号による冗長符号を生成し、当該ホストデータと冗長データとを磁気ディスク１２０に書き込むＲＡＩＤコントローラ１３０を備える。ＲＡＩＤコントローラ１３０は、冗長データを生成するためのガロア拡大体の原始多項式と、冗長符号の生成多項式に同一の多項式を用いる。
【００６４】
本発明の第一の実施の形態によれば、ガロア拡大体によって計算された冗長データに冗長符号として巡回符号（ＣＲＣ）を付与するディスクアレイ装置において、冗長データについての冗長符号の計算に要する時間を短縮できる。その理由は、ＲＡＩＤコントローラ１３０が、冗長データを生成するためのガロア拡大体の原始多項式と、冗長符号の生成多項式に同一の多項式を用いることにより、冗長データについての冗長符号をホストデータについての冗長符号から直接計算できるためである。
【００６５】
また、本発明の第一の実施の形態によれば、ディスクアレイ装置において、磁気ディスク１２０上の書き込み未了障害を容易に検出することができる。その理由は、ＲＡＩＤコントローラ１３０が、ホストデータまたは冗長データと当該ホストデータまたは当該冗長データに付与された冗長符号とを異なる２つの磁気ディスク１２０に渡り、かつ、当該冗長符号が前記２つの磁気ディスク１２０のいずれかに収まるように書き込み、磁気ディスク１２０からホストデータを読み出す際、読み出したホストデータまたは冗長データについて計算した冗長符号と磁気ディスク１２０から読み出した冗長符号とを比較するためである。
【００６６】
また、本発明の第一の実施の形態によれば、ディスクアレイ装置において、磁気ディスク１２０のホストデータまたは冗長データに書き込み未了障害が発生した場合、当該ホストデータまたは冗長データを復旧することができる。その理由は、ＲＡＩＤコントローラ１３０が、磁気ディスク１２０から読み出したホストデータまたは冗長データについて計算した冗長符号と磁気ディスク１２０から読み出した冗長符号とが不一致であった場合、当該ホストデータまたは冗長データと当該冗長符号が書き込まれていた磁気ディスク１２０上のホストデータ及び冗長データを他の磁気ディスク１２０上のホストデータ及び冗長データを基に復旧するためである。
【００６７】
また、本発明の第一の実施の形態によれば、ガロア拡大体によって計算された冗長データに冗長符号として巡回符号（ＣＲＣ）を付与するディスクアレイ装置において、磁気ディスク１２０上での書き込み未了障害や磁気ディスク１２０の故障が発生した場合、当該磁気ディスク１２０の復旧を高速に行うことができる。その理由は、前述の通り、冗長データについての冗長符号の計算に要する時間が短縮されることにより、復旧を行う磁気ディスク１２０上の冗長符号を再計算する時間が短縮されるためである。
【００６８】
（第二の実施の形態）
次に、本発明の第二の実施の形態について図面を参照して詳細に説明する。
【００６９】
図６は、本発明の第二の実施の形態の構成図である。
【００７０】
本発明の第二の実施の形態においては、ホストデータや冗長データの処理単位を磁気ディスク１２０のセクタ長と同一とし、ホストデータや冗長データのＣＲＣを、磁気ディスク１２０のＣＲＣ用のセクタ１２１に書き込む。
【００７１】
本発明の第二の実施の形態の動作は、ホストデータや冗長データの処理単位が磁気ディスク１２０のセクタ長と同一であること、及び、ホストデータや冗長データのＣＲＣをＣＲＣ用のセクタ１２１に書き込む点を除いて、本発明の第一の実施の形態の動作（図３〜図５）と同様となる。
【００７２】
はじめに、本発明の第二の実施の形態における書き込み処理を説明する。
【００７３】
ここでは、図６において、ホストデータＡ０、Ａ１、Ａ２…、Ｂ０、Ｂ１、Ｂ２…を磁気ディスク１２０へ書き込む場合を例に、書き込み処理を説明する。
【００７４】
図６において、ＲＡＩＤコントローラ１３０は、ホストインタフェース１１０から受信したＡ０、Ａ１について、図１６の式によりＣａ０、Ｃｂ０を計算する。そして、ＲＡＩＤコントローラ１３０は、Ａ０をセクタ１２１ａ１へ、Ｃａ０をセクタ１２１ｂＭへ書き込む。また、ＲＡＩＤコントローラ１３０は、Ｂ０をセクタ１２１ｂ１へ、Ｃｂ０をセクタ１２１ｃＭへ書き込む。
【００７５】
また、ＲＡＩＤコントローラ１３０は、Ａ０とＢ０から、図１７、図１８の式によりＰ０、Ｑ０を計算する。また、ＲＡＩＤコントローラ１３０は、Ｐ０、Ｑ０についてのＣｐ０、Ｃｑ０を、図１９、図２０の式により、Ｃａ０、Ｃｂ０を用いて計算する。ＲＡＩＤコントローラ１３０は、Ｐ０、Ｑ０をセクタ１２１ｃ１、１２１ｄ１へ、Ｃｐ０、Ｃｑ０をセクタ１２１ｄＭ、１２１ａＭへ書き込む。
【００７６】
さらに、ＲＡＩＤコントローラ１３０は、Ａ０、Ｂ０に続くＡ１、Ａ２、…、Ｂ１、Ｂ２、…についても、図６のように、ホストデータ、冗長データ、及びＣＲＣの書き込みを行う。
【００７７】
次に、本発明の第二の実施の形態における読み出し処理を説明する。
【００７８】
ここでは、図６において、ホストデータＡ０を磁気ディスク１２０から読み出す場合を例に、読み出し処理を説明する。
【００７９】
図６において、ＲＡＩＤコントローラ１３０は、ホストインタフェース１１０からＡ０の読み出しコマンドを受信すると、セクタ１２１ａ１からＡ０、セクタ１２１ｂＭからＣａ０を読み出す。ＲＡＩＤコントローラ１３０は、読み出したＡ０について図１６の式により求めたＣＲＣとセクタ１２１ｂＭから読み出したＣａ０とを比較する
セクタ１２１ａ１から読み出したＡ０について計算したＣＲＣとセクタ１２１ｂＭから読み出したＣａ０とが不一致の場合、ＲＡＩＤコントローラ１３０は、磁気ディスク１２０ａ、１２０ｂを磁気ディスク１２０ｃ、１２０ｄから復旧する。
【００８０】
図６において、磁気ディスク１２０ａ、１２０ｂを復旧する場合、ＲＡＩＤコントローラ１３０は、セクタ１２１ｃ１のＰ０とセクタ１２１ｄ１のＱ０から、図１６、図１７、図１８の式をもとに、セクタ１２１ａ１のＡ０とセクタ１２１ｂ１のＢ０を計算する。ＲＡＩＤコントローラ１３０は、計算したＡ０とＢ０をそれぞれセクタ１２１ａ１、セクタ１２１ｂ１に書き込む。また、ＲＡＩＤコントローラ１３０は、セクタ１２１ｃ２のＢ１とセクタ１２１ｄ２のＰ１から、図１６、図１７、図１８の式をもとに、セクタ１２１ａ２のＱ１とセクタ１２１ｂ２のＡ１を計算する。ＲＡＩＤコントローラ１３０は、計算したＱ１とＡ１をそれぞれセクタ１２１ａ２、１２１ｂ２に書き込む。
【００８１】
ＲＡＩＤコントローラ１３０は、他のセクタ１２１についても、磁気ディスク１２０ｃ、１２０ｄ上のホストデータや冗長データから、計算式をもとに、磁気ディスク１２０ａ、１２０ｂ上のホストデータや冗長データを計算する。
【００８２】
次に、ＲＡＩＤコントローラ１３０は、セクタ１２１ｂＭのＣａ０を、図１６の式により再計算する。また、ＲＡＩＤコントローラ１３０は、セクタ１２１ａＭのＣｑ０を、図１９の式により、Ｃａ０、Ｃｂ０を用いて再計算する。ＲＡＩＤコントローラ１３０は、再計算したＣｑ０、Ｃａ０をそれぞれセクタ１２１ａＭ、１２１ｂＭに書き込む。
【００８３】
ＲＡＩＤコントローラ１３０は、磁気ディスク１２０ａ、１２０ｂ上の他のＣＲＣも計算式により再計算し、磁気ディスク１２０に書き込む。
【００８４】
以上により、本発明の第二の実施の形態の動作が完了する。
【００８５】
本発明の第二の実施の形態によれば、本発明の第一の実施の形態の効果に加え、ディスクアレイ装置において、ホストデータと冗長データに付与する冗長符号の管理を容易にすることができる。その理由は、ＲＡＩＤコントローラ１３０が、磁気ディスク１２０のセクタ１２１毎にホストデータまたは冗長データについての冗長符号を生成し、当該ホストデータまたは当該冗長データと当該ホストデータまたは当該冗長データについての冗長符号とを異なる磁気ディスク１２０に書き込むためである。
【符号の説明】
【００８６】
１００    ディスクアレイ装置
１１０    ホストインタフェース
１２０    磁気ディスク
１２１    セクタ
１３０    ＲＡＩＤコントローラ
【図１】
2011008426.tif 000003
【図２】
2011008426.tif 000004
【図３】
2011008426.tif 000005
【図４】
2011008426.tif 000006
【図５】
2011008426.tif 000007
【図６】
2011008426.tif 000008
【図７】
2011008426.tif 000009
【図８】
2011008426.tif 000010
【図９】
2011008426.tif 000011
【図１０】
2011008426.tif 000012
【図１１】
2011008426.tif 000013
【図１２】
2011008426.tif 000014
【図１３】
2011008426.tif 000015
【図１４】
2011008426.tif 000016
【図１５】
2011008426.tif 000017
【図１６】
2011008426.tif 000018
【図１７】
2011008426.tif 000019
【図１８】
2011008426.tif 000020
【図１９】
2011008426.tif 000021
【図２０】
2011008426.tif 000022