(57)【要約】【課題】ディスクのライト抜けが１ブロックの全部で発生した場合でも，精度よくディスクのライト抜けを検出することを可能とする。【解決手段】更新データが記録される複数のブロック（＃（０）〜＃（Ｎ−１））ごとに，世代，時刻またはチェックコードなどの更新状態を示す更新状態値が記録される履歴ブロック（＃（Ｎ））を設け，これらをチェック対象の管理単位とする。更新データをディスクにライトするときには，同じ管理単位の新しい更新状態値を算出し，それを更新状態確認値としてメモリ８に記憶するとともに，同じ管理単位内の履歴ブロックへの書き込みデータとして新しい更新状態値を設定し，更新データと更新状態値とを含む管理単位全体をディスクにライトする。その後，履歴ブロックをリードし，その更新状態値とメモリ８に記憶した更新状態確認値とを比較することで，ディスクのライト抜けを検出する。【選択図】図１
2006252530.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，その新しい更新状態値を更新状態確認値としてメモリに記憶し，前記更新データと前記新しい更新状態値とを含む１管理単位をディスクにライトする更新状態設定手段と，
ディスクからリードした１管理単位中の前記更新状態値と，前記メモリに記憶した更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段とを備える
ことを特徴とするディスクライト抜け検出装置。
【請求項２】
コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，前記１管理単位中の更新データによって定まる更新状態値を算出し，前記更新データと前記更新状態値とを含む１管理単位をディスクにライトする更新状態設定手段と，
ディスクからリードした１管理単位中の更新データによって定まる更新状態値を算出し，算出した更新状態値を更新状態確認値として，ディスクからリードした１管理単位中の更新状態値と前記更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段とを備える
ことを特徴とするディスクライト抜け検出装置。
【請求項３】
コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，前記更新データと前記新しい更新状態値とを含む１管理単位を複数のディスクに冗長にライトする更新状態設定手段と，
前記複数のディスクのそれぞれからリードした１管理単位中の前記更新状態値を比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段とを備える
ことを特徴とするディスクライト抜け検出装置。
【請求項４】
コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，
前記コンピュータがライト／リードの対象とする更新データを格納するキャッシュメモリと，
前記更新データを設定する複数のブロックをディスクのライト抜けの検出対象の管理単位とし，前記キャッシュメモリに格納された前記更新データをディスクにライトバックするときに，ライトバック要求範囲が含まれる前記管理単位毎に第１のチェックコードを生成して，生成した第１のチェックコードを記憶手段内に記憶するチェックコード生成手段と，
前記ディスクから前記キャッシュメモリにデータをステージングするときに，ステージング要求範囲が含まれる前記管理単位を前記ディスクからリードし，前記リードされた管理単位のうち，前記ステージング要求範囲のデータを前記キャッシュメモリに格納し，前記キャッシュメモリに格納された前記ステージング要求範囲のデータと，前記リードされた管理単位のうち，前記ステージング要求範囲以外のデータとから，第２のチェックコードを生成し，前記生成された第２のチェックコードを，前記記憶手段内に記憶されている，前記ステージング要求範囲が含まれる管理単位に対応する第１のチェックコードと比較し，一致しない場合にディスクのライト抜けが発生したことを検出するディスクライト抜け検出手段とを備える
ことを特徴とするディスクライト抜け検出装置。
【請求項５】
コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出方法であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，その新しい更新状態値を更新状態確認値としてメモリに記憶し，前記更新データと前記新しい更新状態値とを含む１管理単位をディスクにライトするステップと，
ディスクからリードした１管理単位中の前記更新状態値と，前記メモリに記憶した更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出するステップとを有する
ことを特徴とするディスクライト抜け検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，ディスクにライトされたデータをチェックする技術に関し，特に，ディスクのライト抜けを精度よく検出するディスクライト抜け検出装置およびディスクライト抜け検出方法に関する。
【背景技術】
【０００２】
従来，ディスクにライトされるデータのデータ保証を行う場合，ディスクへのＩ／Ｏ（Input/Output）単位であるブロック毎にチェックコードを設け，このチェックコードを用いてデータ保証を行なってきた。
【０００３】
図１９は１ブロックのフォーマット例である。図１９に示すフォーマット例では，データ５１２バイトについて，誤りを検出するためのチェックコードであるＢＣＣ（Block Check Code）８バイトを付加し，１ブロック５２０バイトとしている。
【０００４】
なお，下記の特許文献１に，磁気ディスクアレイ装置及び磁気ディスクアレイ装置に於けるデータチェック方法について記載されている。
【特許文献１】特開平１０−１７１６０８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ホストコンピュータからのデータのライト要求によりディスク上のデータを更新する場合，ライト要求された範囲が実際には更新されないことがある。
【０００６】
ここで，ホストコンピュータからのデータのライト要求に対して，ディスクが，ライト要求された範囲を新しいデータで更新した旨の応答を返すが，実際は更新されず，古いデータのままの部分が存在することを，ディスクのライト抜けという。
【０００７】
ディスクのライト抜けが，例えば，図１９に示す１ブロック内のデータ５１２バイトのうち先頭４バイトが更新されなかったというように，１ブロックの一部で発生した場合には，ＢＣＣとデータとの関係が崩れる。従って，この場合には，ＢＣＣを用いてデータチェックを行う従来技術によって，ディスクのライト抜けを検出できる。
【０００８】
しかし，ディスクのライト抜けが１ブロックの全部で発生した場合，図１９の１ブロック全てが古いデータとなる。この場合，古い１ブロックとしてはＢＣＣとデータとの関係が維持される。従って，ＢＣＣを用いてデータチェックを行う従来技術によってはディスクのライト抜けを検出できないという問題がある。
【０００９】
ディスクのライト抜けは，例えば，ディスクコントロールシステムが，ホストコンピュータからデータのライト要求を受けて，一旦システム内のキャッシュメモリに更新データを格納し，後にキャッシュメモリ内の更新データをディスクにライトバックするときにも問題となる。キャッシュメモリ内の更新データをディスクにライトバックする前に，ディスクのライト抜けが生じていないかを調べる必要がある。
【００１０】
また，ディスクのライト抜けは，例えば，ディスクコントロールシステムが，ディスク内のデータをキャッシュメモリにステージングするときにも問題となる。ディスク内のデータをキャッシュメモリにステージングする際にも，ディスクのライト抜けが生じていないかを調べて，データのステージングの正当性をチェックする必要がある。
【００１１】
ここで，上記の特許文献１に記載された技術は，複数の磁気ディスク装置のうち，どの磁気ディスク装置のどのアドレスから読み出されたデータが誤りであるかを検出することを目的としており，１ブロックの全部で発生したディスクのライト抜けを精度よく検出することは意図していない。
【００１２】
本発明は，上記従来技術の問題を解決し，ディスクのライト抜けが１ブロックの全部で発生した場合でも，精度よくディスクのライト抜けを検出することが可能なディスクライト抜け検出装置およびディスクライト抜け検出方法の提供を目的とする。
【００１３】
特に，本発明は，例えば，キャッシュメモリ内の更新データをディスクにライトバックする前に，ディスクのライト抜けが生じているかをチェックすることを目的とする。
【００１４】
また，本発明は，例えば，ディスク内のデータをキャッシュメモリにステージングする際に，ディスクのライト抜けが生じているかをチェックすることを目的とする。
【課題を解決するための手段】
【００１５】
上記課題を解決するため，本発明は，コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，その新しい更新状態値を更新状態確認値としてメモリに記憶し，前記更新データと前記新しい更新状態値とを含む１管理単位をディスクにライトする更新状態設定手段と，ディスクからリードした１管理単位中の前記更新状態値と，前記メモリに記憶した更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段とを備えることを特徴とするディスクライト抜け検出装置である。
【００１６】
前記のディスクライト抜け検出装置において，前記更新状態値として，例えば，更新世代数，更新の時刻，もしくは前記複数のブロックの更新データから一意に生成されるチェックコード，またはそれらの組み合わせを用いることができる。
【００１７】
本発明によれば，ディスクのライト抜けが管理単位の全部で発生した場合でも，ディスクのライト抜けを精度よく検出することができる。
【００１８】
また，本発明は，コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，前記１管理単位中の更新データによって定まる更新状態値を算出し，前記更新データと前記更新状態値とを含む１管理単位をディスクにライトする更新状態設定手段と，ディスクからリードした１管理単位中の更新データによって定まる更新状態値を算出し，算出した更新状態値を更新状態確認値として，ディスクからリードした１管理単位中の更新状態値と前記更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段とを備えることを特徴とするディスクライト抜け検出装置である。
【００１９】
本発明は，ディスクからリードした更新状態値と，ディスクからリードしたデータから算出した更新状態確認値とを比較して，ディスクのライト抜けを検出する。従って，本発明によれば，ディスクライト抜け検出装置内に更新状態確認値を予め記憶させておかなくても，ディスクのライト抜けを検出することができる。
【００２０】
また，本発明は，コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，前記更新データと前記新しい更新状態値とを含む１管理単位を複数のディスクに冗長にライトする更新状態設定手段と，前記複数のディスクのそれぞれからリードした１管理単位中の前記更新状態値を比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段とを備えることを特徴とするディスクライト抜け検出装置である。
【００２１】
本発明は，複数のディスクのそれぞれからリードした更新状態値を比較して，ディスクのライト抜けを検出する。従って，本発明によれば，ディスクライト抜け検出装置内に更新状態確認値を予め記憶させておかなくても，管理単位の全部で発生したディスクのライト抜けを検出できる。
【００２２】
本発明において，前記更新状態設定手段は，前記１管理単位中の更新データを含むブロックと前記履歴ブロックとの間に今回更新対象外のブロックが存在するとき，その更新対象外のブロックのデータをディスクからリードし，前記更新データを含むブロックのデータとマージするデータマージ手段を備えるようにしてもよい。
【００２３】
本発明によれば，更新データが設定されるブロックと，更新状態値が設定されるブロックのディスクへのライトを，１つのライト処理で行うことが可能となる。
【００２４】
また，本発明は，コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，前記コンピュータがライト／リードの対象とする更新データを格納するキャッシュメモリと，前記更新データを設定する複数のブロックをディスクのライト抜けの検出対象の管理単位とし，前記キャッシュメモリに格納された前記更新データをディスクにライトバックするときに，ライトバック要求範囲が含まれる前記管理単位毎に第１のチェックコードを生成して，生成した第１のチェックコードを記憶手段内に記憶するチェックコード生成手段と，前記ディスクから前記キャッシュメモリにデータをステージングするときに，ステージング要求範囲が含まれる前記管理単位を前記ディスクからリードし，前記リードされた管理単位のうち，前記ステージング要求範囲のデータを前記キャッシュメモリに格納し，前記キャッシュメモリに格納された前記ステージング要求範囲のデータと，前記リードされた管理単位のうち，前記ステージング要求範囲以外のデータとから，第２のチェックコードを生成し，前記生成された第２のチェックコードを，前記記憶手段内に記憶されている，前記ステージング要求範囲が含まれる管理単位に対応する第１のチェックコードと比較し，一致しない場合にディスクのライト抜けが発生したことを検出するディスクライト抜け検出手段とを備えることを特徴とするディスクライト抜け検出装置である。
【００２５】
本発明によれば，ディスク内のデータをキャッシュメモリにステージングする際に，ディスクのライト抜けが生じているかをチェックすることが可能となる。
【００２６】
前記のディスクライト抜け検出装置において，前記ディスクライト抜け検出手段が，前記更新データをディスクにライトバックするときに，前記ライトバック要求範囲が含まれる前記管理単位をディスクからリードし，前記リードされた前記管理単位から第３のチェックコードを生成し，前記生成された第３のチェックコードを，前記記憶手段内に記憶されている，前記ライトバック要求範囲が含まれる管理単位に対応する第１のチェックコードと比較し，前記チェックコード生成手段が，前記ディスクライト抜け検出手段による前記第３のチェックコードと前記第１のチェックコードとの比較結果が一致である場合に，ライトバック要求範囲の更新データと，前記ディスクライト抜け検出手段によってリードされた管理単位のうち，前記ライトバック要求範囲以外のデータとから，新たな第１のチェックコードを生成し，前記生成された新たな第１のチェックコードを前記ライトバック要求範囲が含まれる前記管理単位に対応する第１のチェックコードとして前記記憶手段内に記憶する構成を採ることができる。
【００２７】
上記の構成を採る本発明によれば，キャッシュメモリ内の更新データをディスクにライトバックする前に，ディスクのライト抜けが生じているかをチェックすることが可能となる。
【発明の効果】
【００２８】
本発明によれば，ディスクのライト抜けが管理単位の全部で発生した場合でも，精度よくディスクのライト抜けを検出することができる。
【００２９】
また，本発明によれば，キャッシュメモリ内の更新データをディスクにライトバックする前に，ディスクのライト抜けが生じているかをチェックすることが可能となる。
【００３０】
また，本発明によれば，ディスク内のデータをキャッシュメモリにステージングする際に，ディスクのライト抜けが生じているかをチェックすることが可能となる。
【発明を実施するための最良の形態】
【００３１】
本発明は，更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当てる。そして，更新データを設定する複数のブロックと更新状態値を設定する履歴ブロックとを更新状態チェック対象の１管理単位とする。
【００３２】
更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，その新しい更新状態値を更新状態確認値としてメモリに記憶する。更新状態確認値は，更新状態のチェックの際に更新状態値と比較するデータである。
【００３３】
そして，更新データが設定された複数のブロックと新しい更新状態値が設定された１ブロックとを，まとめて１管理単位としてディスクにライトする。
【００３４】
ディスクへ１管理単位をライトした後に，更新状態のチェックを行う。すなわち，ディスクからその１管理単位中の更新状態値をリードし，メモリに記憶された更新状態確認値と比較する。そして，更新状態確認値と更新状態値とが不一致であれば，ディスクのライト抜けが発生したと判断する。
【００３５】
更新状態のチェックのタイミングとして，例えば，ディスクへのライトの延長，ディスクへの非同期パトロール，ホストコンピュータの要求によってディスクからリードする時などがある。
【００３６】
本発明においては，更新データが設定されるブロックとは別に，ディスクへライトする更新状態値に１ブロックを割り当てる。これは，ホストコンピュータからのライト要求による更新データの全てを更新状態確認値としてメモリ上に保持するとともに，更新状態値としてディスク上に保持するのは，処理効率と記憶効率がよくないからである。
【００３７】
本発明においては，更新状態確認値と更新状態値とを効率的に記憶するため，更新データが設定される複数ブロックに対応して１つの更新状態確認値および１つの更新状態値を設定する。
【００３８】
更新データが設定される複数のブロックの単位は，例えばＲＡＩＤ装置において１つのディスクへ連続してＩ／Ｏを行なうストリップや，ホストＩ／Ｏ処理単位などとする。
【００３９】
図１（Ａ）は，メモリ上に設定される更新状態確認値を示す図である。図１（Ｂ）は，ディスク上にライトする更新データおよび更新状態値を示す図である。図１（Ｂ）において，ブロック＃（０）からブロック＃（Ｎ−１）までのＮブロックが，更新データが設定されるブロックである。ブロック＃（Ｎ）は，ディスクにライトする更新状態値が設定されるブロックである。
【００４０】
本発明では，図１（Ａ）に示すように，メモリ８上に更新状態確認値を設定する。図１（Ｂ）に示すＢｌｏｃｋ＃（Ｎ）に，更新状態値としてメモリ８上の更新状態確認値を設定し，更新データが設定されたＢｌｏｃｋ＃（０）からＢｌｏｃｋ＃（Ｎ−１）に付加する。
【００４１】
そして，Ｂｌｏｃｋ＃（０）からＢｌｏｃｋ＃（Ｎ）までのＮ＋１ブロックを管理単位としてディスクにライトする。
【００４２】
ディスクに管理単位をライトした後に，ディスクから更新状態値をリードし，リードした更新状態値とメモリ８上に設定された更新状態確認値とを比較する。
【００４３】
更新状態値と更新状態確認値とが一致する場合は，ディスク上に更新データが正常にライトされたと判断し，更新状態値と更新状態確認値とが不一致である場合は，ディスクのライト抜けが生じたと判断する。
【００４４】
なお，本発明において，ディスクのライト抜けを検出する手法は，上述した手法に限られるものではない。例えば，後述する本発明の実施例７では，更新データを設定する複数のブロック（例えば，１６ブロック（８ＫＢ））を，ディスクのライト抜けの検出対象の管理単位とし，キャッシュメモリに格納された前記更新データをディスクにライトバックするときに，ライトバック要求範囲が含まれる前記管理単位毎にチェックコードを生成して，生成したチェックコードを記憶手段内に記憶する。
【００４５】
そして，後述するように，実施例７では，ディスクからキャッシュメモリにデータをステージングするときに，ステージング要求範囲が含まれる管理単位をディスクからリードし，リードされた管理単位のうち，ステージング要求範囲のデータをキャッシュメモリに格納し，キャッシュメモリに格納されたステージング要求範囲のデータと，リードされた管理単位のうち，ステージング要求範囲以外のデータとから，チェックコードを生成し，生成したチェックコードを，前記記憶手段内に記憶されている，前記ステージング要求範囲が含まれる管理単位に対応するチェックコードと比較し，一致しない場合にディスクのライト抜けが発生したことを検出する。
【００４６】
図２は，本発明のシステム構成図の一例を示す図である。図２において，１はホストコンピュータ，２はコントローラ，３〜６はディスク，２０はディスクライト抜け検出装置である。コントローラ２は，ホストコンピュータ１からのライト要求またはリード要求に基づいて各ディスクにデータをライトし，またはリードする。コントローラ２は，ＣＰＵ，メモリ，キャッシュメモリといったハードウェアによって実現される。
【００４７】
ディスクライト抜け検出装置２０は，ディスクのライト抜けを検出する。本システムでは，ディスクライト抜け検出装置２０は，コントローラ２によって実現され，ディスクのライト抜け検出機能の他に，従来と同様なディスクコントロール機能を持ち，各ディスクに対して更新データを冗長にライトするＲＡＩＤ装置７を構成している。
【００４８】
ホストコンピュータ１は，ディスクライト抜け検出装置２０に対して，ディスク３〜６へのデータのリード要求またはライト要求を行う。ディスクライト抜け検出装置２０は，ディスク３〜６に対して更新データをライトした後，更新データが正常にライトされたかをチェックする。
【００４９】
図３は，本発明のシステム構成の別の例を示す図である。図３に示すシステムでは，ディスクライト抜け検出装置２０はＲＡＩＤ装置を構成せず，１台のディスク３に対して更新データをライトするコントローラ２として実現されている。
【００５０】
本発明は，図２に示すシステム構成または図３に示すシステム構成のうち，いずれの構成も採ることができる。
【００５１】
図４は，ディスクライト抜け検出装置の機能ブロック図の一例を示す図である。ディスクライト抜け検出装置２０は，更新状態設定部２１，ディスクライト部２２，ディスクリード部２３，更新状態チェック部２４，メモリ８を備える。
【００５２】
更新状態設定部２１は，ホストコンピュータからのライト要求を受信して，ディスクへライトする管理単位中に更新データと更新状態値とを設定する。また，更新状態設定部２１は，更新状態確認値をメモリ８に記憶する。
【００５３】
ディスクライト部２２は，更新状態設定部２１によって管理単位中に設定された更新データと更新状態値とをディスクにライトする。ディスクリード部２３は，ディスクにライトされたデータをリードする。
【００５４】
更新状態チェック部２４は，管理単位のディスクへのライト後に，ディスクからリードされた更新状態値と更新状態確認値とを比較して，ディスクのライト抜けを検出する。
【００５５】
ディスクのライト抜けの検出処理は，例えば，ディスクへのライトの直後，ホストコンピュータ１からのリード要求時，または一定周期などのタイミングで行われる。
【００５６】
メモリ８は，更新状態確認値が記憶される更新状態確認値管理テーブル２５を備える。更新状態確認値管理テーブル２５のデータ構成については後述する。
【００５７】
更新状態設定部２１は，更新状態値算出部２１０と，更新状態確認値設定部２１１と，更新データ・更新状態値設定部２１２と，データマージ部２１３とを備える。更新状態値算出部２１０は，管理単位中に設定する更新状態値を算出する。更新状態確認値設定部２１１は，算出された更新状態値を更新状態確認値として更新状態確認値管理テーブル２５に記憶する。
【００５８】
更新データ・更新状態値設定部２１２は，バッファメモリ内で更新データを管理単位中に設定するとともに，更新状態値算出部２１０によって算出された更新状態値を管理単位中に設定する。データマージ部２１３は，更新データを含むブロックのデータと，ディスクからリードされた更新対象外のブロックのデータとをマージする。
【００５９】
更新状態チェック部２４は，更新状態比較部２４０と，ディスクライト抜け認知部２４１と，更新状態確認値算出部２４２とを備える。更新状態比較部２４０は，ディスクからリードされた更新状態値と更新状態確認値管理テーブル２５内に記憶された更新状態確認値との比較，または，ディスクからリードされた更新状態値と更新状態確認値算出部２４２によって算出された更新状態確認値との比較を行う。
【００６０】
ディスクライト抜け認知部２４１は，更新状態比較部２４０による比較結果に基づいてディスクのライト抜けが発生したかを認知する。更新状態確認値算出部２４２は，ディスクからリードされたデータから更新状態確認値を算出する。
【００６１】
なお，更新状態比較部２４０は，ディスクライト抜け検出装置２０がＲＡＩＤ装置を構成し，更新データおよび更新状態値が設定された管理単位を複数のディスクに冗長にライトする場合には，複数のディスクそれぞれからリードされた更新状態値同士を比較する。この場合には，更新状態確認値設定部２１１による，更新状態確認値管理テーブル２５への更新状態確認値の記憶処理は不要となる。
【００６２】
図５は，更新状態確認値管理テーブルのデータ構成の一例を示す図である。更新状態確認値管理テーブル２５は，管理単位番号が設定される領域と，チェック済フラグが立てられる領域と，更新状態確認値が設定される領域とから構成される。管理単位番号は，管理単位を一意に識別する番号である。チェック済フラグは，更新状態チェック部２４が，ディスクへライトされた管理単位の更新状態値をチェックしたかを示すフラグである。チェック済フラグは，更新状態チェック部２４が，管理単位の更新状態値を毎回チェックする場合は，不要となる。
【００６３】
なお，本発明においては，管理単位のディスクへのライト処理の前に，ディスクから更新状態値をリードし，リードした更新状態値をインクリメントして更新状態確認値とすれば，更新状態確認値管理テーブル２５は不要となる。
【００６４】
以下に，本発明の実施例について説明する。以下に示す実施例１〜実施例５では，ディスクライト抜け検出装置２０が，管理単位を１つのディスクにライトする構成を採る。また，実施例６では，ディスクライト抜け検出装置２０が，ＲＡＩＤ装置を構成し，管理単位を複数のディスクに冗長にライトする構成を採る。実施例７の構成については，後述する。
【実施例１】
【００６５】
以下に，本発明の実施例１について説明する。実施例１では，更新状態値および更新状態確認値として，データの更新世代を示す更新世代数を用いる。Ｎ＋１ブロックの管理単位がディスクへライトされるたびに，更新状態設定部２１によって更新世代数がインクリメントされる。
【００６６】
更新状態チェック部２４が，更新状態確認値管理テーブル２５に記憶された更新状態確認値とディスクからリードされた更新状態値とを比較し，不一致であればディスクのライト抜けが生じたと判断する。
【００６７】
ここで，図６に示すように，例えば，Ｂｌｏｃｋ＃（０）〜Ｂｌｏｃｋ＃（Ｎ−１）までのＮ個のブロックのうち，ディスクへライトすることが必要な更新データが，更新データ（０）が設定されるＢｌｏｃｋ＃（０）から更新データ（Ｍ−１）が設定されるＢｌｏｃｋ＃（Ｍ−１）までのＭブロックであるとする。また，更新対象外のデータであるデータ（Ｍ）からデータ（Ｎ−１）が設定されたブロックが，Ｂｌｏｃｋ＃（Ｍ）からＢｌｏｃｋ＃（Ｎ−１）までのブロックであるとする。
【００６８】
このように，更新データが設定されるブロックが，Ｎブロックのうちの一部である場合，更新データが設定されるブロックと，更新状態値が設定されるブロック（Ｂｌｏｃｋ＃（Ｎ））とが離れることとなる。ディスクのライト抜けは，１つのライト処理で生じると考えられることから，更新データが設定されるブロックと，更新状態値が設定されるブロックのディスクへのライトを，１つのライト処理で行えるようにする必要がある。
【００６９】
そこで，実施例１では，ディスクリード部２３が，更新対象外のブロックであるＢｌｏｃｋ＃（Ｍ）からＢｌｏｃｋ＃（Ｎ−１）までをディスクからリードする。そして，更新状態設定部２１のデータマージ部２１３が，更新データを含むブロックのデータと，ディスクからリードされた更新対象外のブロックのデータとをマージする。更新データ・更新状態値設定部２１２は，データマージ部２１３によるマージ処理後のＢｌｏｃｋ＃（０）からＢｌｏｃｋ＃（Ｎ）までを，ディスクにライトする管理単位に設定する。
【００７０】
図７は，実施例１における，ライト処理フローの一例を示す図である。まず，更新データ・更新状態値設定部２１２が，ディスクへライトする管理単位に更新データを設定する（ステップＳ１）。
【００７１】
次に，ディスクリード部２３が，ディスク上の管理単位のブロックのうち，更新対象外のブロックをリードし，更新データを含むブロックのデータとマージする（ステップＳ２）。
【００７２】
更新状態確認値設定部２１１が，更新状態確認値管理テーブル２５中の該当する管理単位の現在の更新世代数をインクリメントする（ステップＳ３）。更新データ・更新状態値設定部２１２が，管理単位の更新状態値として更新世代数を設定する（ステップＳ４）。そして，ディスクライト部２２が，管理単位全てをディスクへライトする（ステップＳ５）。
【００７３】
図８は，実施例１における，更新状態チェック処理フローの一例を示す図である。まず，ディスクリード部２３が，チェック対象の管理単位の更新状態値（更新世代数）をディスクからリードする（ステップＳ１１）。そして，更新状態チェック部２４の更新状態比較部２４０が，更新状態確認値管理テーブル２５の更新状態確認値と，更新状態値とを比較する（ステップＳ１２）。ディスクライト抜け認知部２４１は，更新状態確認値と更新状態値とが不一致である場合は（ステップＳ１３），ディスクのライト抜けが発生したと判断する（ステップＳ１４）。ディスクライト抜け認知部２４１は，更新状態確認値と更新状態値とが一致する場合は，ディスクへのライトが正常であると判断する（ステップＳ１５）。
【実施例２】
【００７４】
以下に，本発明の実施例２について説明する。実施例２が実施例１と異なるのは，更新状態値および更新状態確認値として，データを更新する時刻を用いる点である。
【００７５】
実施例２では，同一時刻での複数回のディスクへのライトが発生する場合の対処が必要となるが，この場合は，例えば，同一時刻でのライト処理の前に更新状態のチェックをしたり，同一領域へのライト処理を同一時刻にならないようにスケジューリングする。
【００７６】
図９は，実施例２における，ライト処理フローの一例を示す図である。まず，更新データ・更新状態値設定部２１２が，ディスクへライトする管理単位に更新データを設定する（ステップＳ２１）。
【００７７】
次に，ディスクリード部２３が，ディスク上の管理単位のブロックのうち，更新対象外のブロックをリードし，更新データを含むブロックのデータとマージする（ステップＳ２２）。
【００７８】
更新状態確認値設定部２１１が，更新状態確認値管理テーブル２５中に，管理単位の更新状態確認値として現在時刻を設定する（ステップＳ２３）。更新データ・更新状態値設定部２１２が，管理単位の更新状態値として更新状態確認値を設定する（ステップＳ２４）。そして，ディスクライト部２２が，管理単位全てをディスクへライトする（ステップＳ２５）。
【００７９】
図１０は，実施例２における，更新状態チェック処理フローの一例を示す図である。まず，ディスクリード部２３が，チェック対象の管理単位の更新状態値（更新時刻）をディスクからリードする（ステップＳ３１）。そして，更新状態チェック部２４の更新状態比較部２４０が，更新状態確認値管理テーブル２５の更新状態確認値と，更新状態値とを比較する（ステップＳ３２）。ディスクライト抜け認知部２４１は，更新状態確認値と更新状態値とが不一致である場合は（ステップＳ３３），ディスクのライト抜けが発生したと判断する（ステップＳ３４）。ディスクライト抜け認知部２４１は，更新状態確認値と更新状態値とが一致する場合は，ディスクへのライトが正常であると判断する（ステップＳ３５）。
【実施例３】
【００８０】
以下に，本発明の実施例３について説明する。実施例３では，更新状態設定部２１の更新状態値算出部２１０が，管理単位のデータ部（更新データおよびマージされた更新対象外のデータが割り当てられるブロック）に対して，ＣＲＣやＸＯＲ（排他的論理和）を用いた演算処理を施して，チェックコードを生成する。
【００８１】
更新状態確認値設定部２１１が，生成されたチェックコードを更新状態確認値として更新状態確認値管理テーブル２５に設定し，更新データ・更新状態値設定部２１２が，管理単位の更新状態値としてチェックコードを設定する。
【００８２】
そして，ディスクライト部２２が更新データと更新状態値とをディスクへライトした後に，ディスクリード部２３が，ディスクから更新状態値をリードする。
【００８３】
更新状態チェック部２４の更新状態比較部２４０が，リードされた更新状態値と更新状態確認値管理テーブル２５中の更新状態確認値とを比較する。そして，更新状態値と更新状態確認値とが不一致なら，ディスクライト抜け認知部２４１が，ディスクのライト抜けが発生したと判断する。
【００８４】
図１１は，実施例３における，ライト処理フローの一例を示す図である。まず，更新データ・更新状態値設定部２１２が，ディスクへライトする管理単位に更新データを設定する（ステップＳ４１）。
【００８５】
次に，ディスクリード部２３が，ディスク上の管理単位のブロックのうち，更新対象外のブロックをリードし，更新データを含むブロックのデータとマージする（ステップＳ４２）。
【００８６】
更新状態値算出部２１０が，管理単位のデータ部からチェックコードを生成する（ステップＳ４３）。そして，更新状態確認値設定部２１１が，生成したチェックコードを，更新状態確認値として更新状態確認値管理テーブル２５に設定する（ステップＳ４４）。
【００８７】
次に，更新データ・更新状態値設定部２１２が，管理単位の更新状態値としてチェックコードを設定する（ステップＳ４５）。そして，ディスクライト部２２が，管理単位全てをディスクへライトする（ステップＳ４６）。
【００８８】
図１２は，実施例３における，更新状態チェック処理フローの一例を示す図である。まず，ディスクリード部２３が，チェック対象の管理単位の更新状態値（チェックコード）をディスクからリードする（ステップＳ５１）。そして，更新状態チェック部２４の更新状態比較部２４０が，更新状態確認値管理テーブル２５の更新状態確認値と，更新状態値とを比較する（ステップＳ５２）。ディスクライト抜け認知部２４１は，更新状態確認値と更新状態値とが不一致である場合は（ステップＳ５３），ディスクのライト抜けが発生したと判断する（ステップＳ５４）。更新状態確認値と更新状態値とが一致する場合は，ディスクライト抜け認知部２４１は，ディスクへのライトが正常であると判断する（ステップＳ５５）。
【実施例４】
【００８９】
以下に，本発明の実施例４について説明する。実施例４では，更新状態設定部２１の更新状態値算出部２１０が，管理単位のデータ部（更新データおよびマージされた更新対象外のデータが割り当てられるブロック）に対して，ＣＲＣやＸＯＲ（排他的論理和）を用いた演算処理を施して，チェックコードを生成する。
【００９０】
そして，更新データ・更新状態値設定部２１２が，生成されたチェックコードを管理単位の更新状態値として設定する。
【００９１】
ディスクへの管理単位のライト後に，ディスクリード部２３が，ディスクから管理単位の更新データと更新状態値とをリードする。更新状態チェック部２４の更新状態確認値算出部２４２が，リードされた更新データに対して，ＣＲＣやＸＯＲ（排他的論理和）を用いた演算処理を施して，更新状態確認値として用いるチェックコードを生成する。
【００９２】
そして，更新状態比較部２４０が，リードされた更新状態値と生成されたチェックコードとを比較する。更新状態値とチェックコードとが不一致なら，ディスクライト抜け認知部２４１が，ディスクのライト抜けが発生したと判断する。
【００９３】
実施例４では，ディスクからリードした更新状態値と，ディスクからリードされた更新データから作成したチェックコードとの比較結果に基づいてディスクのライト抜けをチェックする。従って，実施例３と異なり，更新状態確認値管理テーブル２５への更新状態確認値の設定処理を省略することができる。
【００９４】
ここで，実施例４では，更新データが設定されるブロックが，Ｎブロックのうちの一部である場合は，実施例１と同様に，ディスクからリードした更新対象外のデータを含むブロックを更新データを含むブロックとマージする手法を採ることができる。
【００９５】
また，実施例４では，更新されるデータブロックが，Ｎブロックのうちの一部である場合であっても，以下に説明するように，「更新データ」と，更新データと対応する「既存データ」および「既存の更新状態値」に，例えばＸＯＲ演算を施して，更新後の新更新状態値を算出することができる。
【００９６】
図１３（Ａ）の左図は，ディスク上の既存データおよび既存の更新状態値の例を示している。図１３（Ａ）の右図は，更新後のデータおよび新更新状態値の例を示している。この例では，説明をわかりやすくするため，各データおよび更新状態値を８ビットで表現して説明する。
【００９７】
図１３（Ａ）の左図に示すように，データＤ１〜データＤ４までの既存データのうち，例えばデータＤ１が「１１１００１１１」，データＤ２が「０１００１００１」，データＤ３が「００００１１１１」，データＤ４が「１０１０１１００」であるとする。
【００９８】
既存の更新状態値「００００１１０１」は，データＤ１〜データＤ４についてデータ単位にＸＯＲ演算を施した演算結果である。
【００９９】
ここで，図１３（Ａ）の右図に示すように，データＤ２が，「１１００００１１」というデータＤ２’に更新されたとする。図１３（Ａ）の右図に示す新更新状態値「１００００１１１」は，データＤ２’と既存データ（データＤ１，データＤ３，データＤ４）についてデータ単位にＸＯＲ演算を施した演算結果である。
【０１００】
本発明の実施例４では，更新データと既存データの全てについてＸＯＲ演算を施すことなく新更新状態値を算出することができる。例えば，図１３（Ｂ）に示すように，更新データであるデータＤ２’「１１００００１１」と，データＤ２’と対応する既存データであるデータＤ２「０１００１００１」および既存の更新状態値「００００１１０１」について，データ単位にＸＯＲ演算を施すことによって，全てのデータＤ１，Ｄ２’，Ｄ３，Ｄ４に対してＸＯＲ演算を施した演算結果と同じ新更新状態値「１００００１１１」を算出することができる。
【０１０１】
図１４は，実施例４における，更新状態チェック処理フローの一例を示す図である。まず，ディスクリード部２３が，チェック対象の管理単位の更新状態値と更新データとをディスクからリードする（ステップＳ６１）。更新状態チェック部２４の更新状態確認値算出部２４２が，リードされた更新データから更新状態確認値として用いるチェックコードを生成する（ステップＳ６２）。
【０１０２】
更新状態比較部２４０が，生成されたチェックコードとリードされた更新状態値とを比較する（ステップＳ６３）。ディスクライト抜け認知部２４１は，チェックコードと更新状態値とが不一致である場合は（ステップＳ６４），ディスクのライト抜けが発生したと判断する（ステップＳ６５）。チェックコードと更新状態値とが一致する場合は，ディスクライト抜け認知部２４１は，ディスクへのライトが正常であると判断する（ステップＳ６６）。
【実施例５】
【０１０３】
以下に，本発明の実施例５について説明する。実施例５では，更新状態値および更新状態確認値は，図１５に示すように，チェックコード部と世代部とから構成される。この更新状態確認値のうち，世代部は更新状態確認値管理テーブル２５に設定され，チェックコード部は更新データからその都度生成される。
【０１０４】
実施例５では，更新状態値算出部２１０が，管理単位のデータ部に対して，ＣＲＣやＸＯＲ（排他的論理和）を用いた演算処理を施して，チェックコードを生成する。更新状態確認値設定部２１１は，更新世代数を，更新状態確認値管理テーブル２５の更新状態確認値の世代部に設定する。実施例５では，更新世代数の代わりに，データを更新する時刻を更新状態確認値の世代部に設定してもよい。
【０１０５】
更新データ・更新状態値設定部２１２が，バッファメモリ内で，管理単位の更新状態値として，その世代部に更新状態確認値の世代部に設定された更新世代数を設定し，そのチェックコード部に更新状態値算出部２１０によって生成されたチェックコードを設定する。
【０１０６】
ディスクへの管理単位のライト後に，更新状態確認値算出部２４２が，ディスクからリードされた更新データからチェックコードを生成する。
【０１０７】
更新状態比較部２４０が，ディスクからリードされた更新状態値のチェックコード部と，更新状態確認値算出部２４２によって生成されたチェックコードとを比較する。ディスクライト抜け認知部２４１は，更新状態値のチェックコード部と更新状態確認値算出部２４２によって生成されたチェックコードとが不一致であれば，ディスクのライト抜けが発生したと判断する。
【０１０８】
また，更新状態比較部２４０は，ディスクからリードされた更新状態値の世代部と更新状態確認値管理テーブル２５の更新状態確認値の世代部とを比較する。ディスクライト抜け認知部２４１は，更新状態値の世代部と更新状態確認値管理テーブル２５の更新状態確認値の世代部とが不一致であれば，ディスクのライト抜けが発生したと判断する。
【０１０９】
実施例５では，ディスクからリードされた更新状態値のチェックコード部と，更新状態確認値算出部２４２によって生成されたチェックコードとの比較結果に基づいて，ディスクのライト抜けを検出する。従って実施例５によれば，管理単位の一部において発生したライト抜けを検出することができる。
【０１１０】
また，実施例５では，ディスクからリードされた更新状態値の世代部と更新状態確認値管理テーブル２５の更新状態確認値の世代部との比較結果に基づいて，ディスクのライト抜けを検出する。従って，実施例５によれば，管理単位の全部において発生したライト抜けを検出することもできる。
【０１１１】
図１６は，実施例５における，ライト処理フローの一例を示す図である。まず，更新データ・更新状態値設定部２１２が，ディスクへライトする管理単位に更新データを設定する（ステップＳ７１）。
【０１１２】
次に，ディスクリード部２３が，ディスク上の管理単位のブロックのうち，更新対象外のブロックをリードし，更新データを含むブロックのデータとマージする（ステップＳ７２）。
【０１１３】
更新状態値算出部２１０が，管理単位のデータ部からチェックコードを生成する（ステップＳ７３）。
【０１１４】
また，更新状態確認値設定部２１１が，更新状態確認値管理テーブル２５中の，該当する管理単位の更新状態確認値の世代部に設定された更新世代数をインクリメントする（ステップＳ７４）。なお，ステップＳ７４においては，更新状態確認値の世代部に現在時刻を設定してもよい。
【０１１５】
更新データ・更新状態値設定部２１２が，管理単位の更新状態値として，その世代部に更新状態確認値の世代部に設定された更新世代数を設定し，そのチェックコード部に，生成されたチェックコードを設定する（ステップＳ７５）。そして，ディスクライト部２２が，管理単位全てをディスクへライトする（ステップＳ７６）。
【０１１６】
図１７は，実施例５における，更新状態チェック処理フローの一例を示す図である。まず，ディスクリード部２３が，チェック対象の管理単位の更新状態値と更新データとをディスクからリードする（ステップＳ８１）。更新状態チェック部２４の更新状態確認値算出部２４２が，リードされた更新データからチェックコードを生成する（ステップＳ８２）。
【０１１７】
更新状態比較部２４０が，生成されたチェックコードとリードされた更新状態値のチェックコード部とを比較する（ステップＳ８３）。ディスクライト抜け認知部２４１は，生成されたチェックコードとリードされた更新状態値のチェックコード部とが不一致である場合は（ステップＳ８４），ディスクのライト抜けが発生したと判断する（ステップＳ８７）。
【０１１８】
生成されたチェックコードとリードされた更新状態値のチェックコード部とが一致する場合は，更新状態比較部２４０が，更新状態確認値管理テーブル２５の更新状態確認値の世代部とディスクからリードされた更新状態値の世代部とを比較する（ステップＳ８５）。比較結果が不一致の場合は（ステップＳ８６），ディスクライト抜け認知部２４１は，ディスクのライト抜けが発生したと判断する（ステップＳ８７）。比較結果が一致なら，ディスクライト抜け認知部２４１は，ディスクへのライトが正常であると判断する（ステップＳ８８）。
【実施例６】
【０１１９】
以下に，本発明の実施例６について説明する。実施例６は実施例１と異なり，ディスクライト抜け検出装置２０が，ＲＡＩＤ装置を構成し，管理単位を複数のディスクに冗長にライトする。
【０１２０】
更新状態値が複数のディスクに冗長にライトされるＲＡＩＤの場合は，ミラー／パリティを問わず，同時に複数のディスクで同じようにライト抜けが起きる可能性は低い。
【０１２１】
従って，実施例６においては，更新状態比較部２４０は，複数のディスクのそれぞれからリードされた更新状態値すなわち更新世代数を比較する。複数のディスクそれぞれからリードされた更新世代数が同じ世代数なら，ディスクライト抜け認知部２４１は，複数のディスクにおいて正常にライトされたと判断する。複数のディスクそれぞれからリードされた更新世代数が異なる場合，ディスクライト抜け認知部２４１は，更新世代数が古い世代のディスクにおいてディスクのライト抜けが発生したと判断する。
【０１２２】
実施例６では，複数のディスクのそれぞれからリードされた更新世代数の比較結果に基づいてディスクのライト抜けを検出するため，更新状態確認値管理テーブル２５への更新状態確認値の設定処理を省略することができる。
【０１２３】
各ディスクにライトするときのライト処理フローは，図７と同様であるので，フローチャートを用いた説明は省略する。
【０１２４】
図１８は，本発明の実施例６における更新状態チェック処理フローの一例を示す図である。まず，ディスクリード部２３が，複数のディスクのそれぞれから，チェック対象の管理単位の更新状態値をリードする（ステップＳ９１）。
【０１２５】
次に，更新状態チェック部２４の更新状態比較部２４０が，リードされた複数の更新状態値を比較する（ステップＳ９２）。ディスクライト抜け認知部２４１は，更新状態値が不一致である場合は（ステップＳ９３），更新世代数が古いディスクにおいてディスクのライト抜けが発生したと判断する（ステップＳ９４）。ディスクライト抜け認知部２４１は，更新状態値が一致する場合は，ディスクへのライトが正常であると判断する（ステップＳ９５）。
【０１２６】
実施例６において，更新状態値として更新世代数を用いる代わりに，実施例２，実施例３と同様に，データ更新時刻またはチェックコード等を用いてもよい。
【実施例７】
【０１２７】
以下に，本発明の実施例７について説明する。図２０は，本発明の実施例７のシステム構成図の一例を示す図である。ＲＡＩＤ装置９は，コントローラ９０，ＣＡ（Channel Adapter)９１，ＤＡ（Device Adapter）９２，ディスク３〜６を備える。また，２１はディスクライト抜け検出装置である。
【０１２８】
コントローラ９０は，ＣＰＵ，メモリ，キャッシュメモリといったハードウェアによって実現される。コントローラ９０は，ホストコンピュータ１からのライト要求を受信して，更新データを一旦キャッシュメモリ内に格納した後，キャッシュメモリ内の更新データをディスクにライトバックする。
【０１２９】
また，コントローラ９０は，ホストコンピュータ１からのリード要求を受信して，一旦ディスクからデータをキャッシュメモリ内にステージングした後，キャッシュメモリ内のデータをホストコンピュータ１に対して送信する。
【０１３０】
ディスクライト抜け検出装置２１は，ディスクのライト抜けを検出する。本実施例では，ディスクライト抜け検出装置２１は，コントローラ９０によって実現され，ディスクのライト抜け検出機能の他に，従来と同様なディスクコントロール機能を持っている。
【０１３１】
ＣＡ９１は，ホストコンピュータ１とコントローラ９０との間の通信インタフェースである。ＤＡ９２は，コントローラ９０と各ディスクとの間の通信インタフェースである。
【０１３２】
図２１は，コントローラの構成の一例を示す図である。コントローラ９０は，リソース制御部１００，キャッシュ制御部１０１，ＲＡＩＤ制御部１０２，キャッシュメモリ１０３，チェックコードメモリ１０４，チェックコードディスク１０５，データバッファ１０６，パリティバッファ１０７を備える。
【０１３３】
リソース制御部１００は，図２０に示すＲＡＩＤ装置９内のリソース（例えば，ＣＡ９１，ＤＡ９２）を制御する。キャッシュ制御部１０１は，キャッシュメモリ１０３の管理を行う。例えば，キャッシュメモリ１０３内の更新データのＨｉｔ，Ｍｉｓｓ判定を行う。また，キャッシュ制御部１０１は，ＲＡＩＤ制御部１０２に対して，キャッシュメモリ１０３内のデータのディスクへのライトバック要求を行ったり，ディスク内のデータのキャッシュメモリ１０３へのステージング要求を行ったりする。
【０１３４】
また，キャッシュ制御部１０１は，更新データを設定する複数のブロック（例えば，１６ブロック（８ＫＢ））をディスクのライト抜けの検出対象の管理単位とし，キャッシュメモリ１０３に格納された前記更新データをディスクにライトバックするときに，ライトバック要求範囲が含まれる前記管理単位毎にチェックコードを生成して，生成したチェックコードをチェックコードメモリ１０４内に記憶するチェックコード生成手段である。ここで，本実施例においては，上記ディスクのライト抜けの検出対象の管理単位を，「チェックコード管理単位」と記述する。
【０１３５】
また，キャッシュ制御部１０１は，例えば，更新データをディスクにライトバックするときに，ライトバック要求範囲が含まれる管理単位に対応するパリティデータについてチェックコードを生成して，チェックコードメモリ１０４内に記憶する。
【０１３６】
また，キャッシュ制御部１０１は，チェックコードメモリ１０４内に格納したチェックコードを，ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔ  Ｕｓｅｄ）に従って退避して，チェックコードディスク１０５内に格納する。
【０１３７】
ＲＡＩＤ制御部１０２は，ディスクアクセスをコントロールする。すなわち，ＲＡＩＤ制御部１０２は，キャッシュ制御部１０１からライトバック要求を受けて，キャッシュメモリ１０３内の更新データをディスクにライトバックする。また，ＲＡＩＤ制御部１０２は，キャッシュ制御部１０１からステージング要求を受けて，ディスクからデータをリードし，リードしたデータをキャッシュメモリ１０３にステージングする。
【０１３８】
また，ＲＡＩＤ制御部１０２は，キャッシュ制御部１０１からライトバック要求またはステージング要求を受けた時に，要求範囲が含まれるチェックコード管理単位に対応するチェックコードが，チェックコードメモリ１０４内に存在するか否かの判定（Ｈｉｔ／Ｍｉｓｓ判定）を行う。当該チェックコードがチェックコードメモリ１０４内に存在しない場合には，ＲＡＩＤ制御部１０２は，チェックコードディスク１０５からチェックコードをリードし，リードしたチェックコードをチェックコードメモリ１０４内に格納する。
【０１３９】
また，ＲＡＩＤ制御部１０２は，ディスクからリードしたデータに基づいてチェックコードを生成し，生成したチェックコードとチェックコードメモリ１０４内のチェックコードとを比較して，チェックコードの正当性をチェックする。なお，本実施例においては，例えば，ＲＡＩＤ制御部１０２は，ディスクからパリティデータをリードする構成を採ってもよい。
【０１４０】
ＲＡＩＤ制御部１０２は，生成されたチェックコードとチェックコードメモリ１０４内のチェックコードとが一致する場合は，ライトバック処理またはステージング処理を行い，キャッシュ制御部１０１にライトバックの完了報告またはステージングの完了報告を行う。ＲＡＩＤ制御部１０２は，ディスクからリードしたデータに基づいて生成されたチェックコードとチェックコードメモリ１０４内のチェックコードとが一致しない場合には，ディスクのライト抜けが発生したと判断する。
【０１４１】
より具体的には，ＲＡＩＤ制御部１０２は，ディスクからキャッシュメモリ１０３にデータをステージングするときに，ステージング要求範囲が含まれるチェックコード管理単位をディスクからリードし，リードされたチェックコード管理単位のうち，ステージング要求範囲のデータをキャッシュメモリ１０３に格納し，キャッシュメモリ１０３に格納されたステージング要求範囲のデータと，リードされたチェックコード管理単位のうち，ステージング要求範囲以外のデータとから，チェックコードを生成し，生成したチェックコードを，チェックコードメモリ１０４内に記憶されている，前記ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードと比較し，一致しない場合にディスクのライト抜けが発生したことを検出するディスクライト抜け検出手段である。
【０１４２】
キャッシュメモリ１０３には，更新対象となる更新データが一時的に格納される。キャッシュメモリ１０３は，あるまとまったサイズの単位であるキャッシュページ２００に区切られている。なお，コントローラ９０は，例えば，各キャッシュページ２００の管理情報が格納された，図示しないキャッシュページ管理テーブルを備えている。
【０１４３】
チェックコードメモリ１０４には，チェックコード管理単位（例えば，１６ブロック）毎の更新データに対応するチェックコードが格納される。チェックコードメモリ１０４は，あるまとまったサイズを持つチェックコードページ２０１に区切られている。チェックコードメモリ１０４内の構成の詳細については，後述する。なお，コントローラ９０は，例えば，各チェックコードページ２０１の管理情報が格納された，図示しないチェックコードページ管理テーブルを備えている。
【０１４４】
チェックコードディスク１０５には，チェックコードメモリ１０４から退避されたチェックコードが格納される。データバッファ１０６には，ディスクからリードされたデータが一時的に格納される。パリティバッファ１０７には，ディスクから読み出されたパリティデータが一時的に格納される。
【０１４５】
本実施例においては，例えば，キャッシュ制御部１０１からＲＡＩＤ制御部１０２に対して更新データのライトバック要求がされた時にチェックコードが生成される。また，本実施例においては，例えば，キャッシュ制御部１０１からＲＡＩＤ制御部１０２に対してステージング要求がされた時にチェックコードの正当性のチェックが行われる。
【０１４６】
なお，本実施例においては，コントローラ９０は，例えば，ディスクが故障した場合にディスクのＲｅｂｕｉｌｄ（再構築）要求をＲＡＩＤ制御部１０２に対して行うＲｅｂｕｉｌｄモジュール（図２１では図示を省略）を備える構成を採ることができる。また，本実施例においては，ＲＡＩＤ制御部１０２が，ＲｅｂｕｉｌｄモジュールからＲｅｂｕｉｌｄ要求を受けて，ディスクのＲｅｂｕｉｌｄ（再構築）処理を行う構成を採ることができる。
【０１４７】
図２２は，本実施例におけるチェックコードの生成を説明する図である。本実施例においては，コントローラ９０は，例えば，図２２に示すように，１６個の各データにそれぞれ付加されたＢＣＣ１６個について，ＣＲＣを用いた演算処理を施して，チェックコードを生成する。
【０１４８】
次に，本実施例におけるチェックコードの管理方法について説明する。キャッシュ制御部１０１によって生成されたチェックコードは，チェックコードメモリ１０４内にしばらく留まる。そして，ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔ  Ｕｓｅｄ）に従って，チェックコードの，チェックコードディスク１０５への追い出しが行われる。
【０１４９】
チェックコードの正当性のチェックの際に，該当するチェックコードがチェックコードメモリ１０４内に存在しない場合には，チェックコードディスク１０５からチェックコードがチェックコードメモリ１０４に格納される。そして，チェックコードメモリ１０４内に格納されたチェックコードと，ディスクからリードされたデータから作成されたチェックコードとが比較される。
【０１５０】
本実施例においては，図２３に示すように，チェックコードメモリ１０４を多数のチェックコードページ２０１に区切る。各チェックコードページ２０１には，図２４に示すように，連続した複数のチェックコードを格納する。各チェックコードページ２０１には，例えば，１２８個（５１２Ｂｙｔｅ）のチェックコードが格納される。
【０１５１】
図２５は，ＲＡＩＤグループについて定義された論理ボリュームとチェックコードとチェックコードメモリとの関係例を説明する図である。ＲＡＩＤグループは，例えば，「ＰＬＵＮ＃０」と「ＰＬＵＮ＃２」という２つのディスクから構成されるものとする。
【０１５２】
図２５に示すように，ＲＡＩＤグループについて定義された論理ボリュームは，例えば，「０ｘ００００００００」，・・・「０ｘ０００００００ｆ」といった，論理ブロックアドレス（ＬＢＡ：Logical Block Address ）を有する。
【０１５３】
また，図２５に示すチェックコードには，例えば，チェックコード毎に「＃０」，「＃１」といった番号が付けられている。また，図２５に示すチェックコードメモリ１０４内のチェックコードページ２０１には，チェックコードページ２０１毎に「＃０」，・・・「＃ｍ」といった番号が付けられている。
【０１５４】
また，図２５に示すチェックコードディスク１０５内の領域は，例えば，「ＰＬＵＮ＃０」〜「ＰＬＵＮ＃ｎ」までのｎ個の各ディスクに対して割り当てられている。
【０１５５】
図２５に示すように，ＲＡＩＤグループについて定義された論理ボリュームの１６個のＬＢＡに対応する１６個のブロックは，図中の各チェックコードに対応している。例えば，「０ｘ００００００００」〜「０ｘ０００００００ｆ」までのＬＢＡに対応する１６個のブロックは，番号「＃０」が付けられたチェックコードに対応している。
【０１５６】
また，例えば，図中に示す番号「＃０」〜番号「＃１２７」までの１２８個のチェックコードは，図中のチェックコードメモリ１０４内の，番号「＃ｍ」が付けられたチェックコードページ２０１内に格納される。
【０１５７】
チェックコードページ２０１内に格納された１２８個のチェックコードは，ＬＲＵに従って，チェックコードディスク１０５内に退避される。
【０１５８】
例えば，番号「＃ｍ」が付けられたチェックコードページ２０１内に格納されているチェックコードは，チェックコードディスク１０５内において，「ＰＬＵＮ＃０」というディスクと「ＰＬＵＮ＃２」というディスクとに対して割り当てられた領域に格納される。
【０１５９】
図２６は，チェックコードページ管理テーブルのフォーマット例を示す図である。なお，図２６中，「１６ＢＥ」は，チェックコードページ管理テーブルを意味し，「１６ＣＣ」は，チェックコードを意味する。
【０１６０】
「Dirty Bitmap」（オフセット０ｘ００〜０ｘ０Ｆ）は，更新されたチェックコードを管理するビットマップである。
【０１６１】
「LUN LBA 」（オフセット０ｘ１０〜０ｘ１７）には，チェックコードの先頭ＬＢＡがセットされる。すなわち，「LUN LBA 」はチェックコード管理単位のバウンダリを示している。
【０１６２】
「LUN 」（オフセット０ｘ１８〜０ｘ１９）は，論理ボリュームの番号を示す。「Keep Flag 」は，例えば，更新されたチェックコードを管理するビットマップを保持しているかを示す。また，「Keep Status 」は，例えば，ミラー（Ｍｉｒｒｏｒ）を保持しているかを示す。
【０１６３】
「Present Bitmap」（オフセット０ｘ２０〜０ｘ２Ｆ）は，後述する「16CC Buffer Address 」に対応するチェックコードメモリ１０４内にチェックコードが存在しているか否かを管理するビットマップである。
【０１６４】
「LRU NEXT 16BE ID」/ 「 LRU Previous 16BE ID 」は，ＬＲＵを行うリンク（ＬＲＵリンク）を管理するポインタである。例えば，図２７に示すＬＲＵリンクを管理するポインタは，ＭＲＵ（Most Recently Used）ポインタとＬＲＵポインタとから構成される。
【０１６５】
チェックコードページ管理テーブルが使用されると，チェックコードページ管理テーブルは，ＭＲＵポインタに接続される。例えば，ライトバック動作時にチェックコードページ管理テーブルを用いてチェックコードが更新された場合や，ステージング動作時にチェックコードページ管理テーブルを用いてチェックコードがチェックされた場合に，ＭＲＵポインタに接続される。
【０１６６】
また，チェックコードページ管理テーブルを開放する場合には，チェックコードページ管理テーブルは，ＬＲＵリンクから外される。ＬＲＵリンクから外す場合は，チェックコードページ管理テーブルが未使用状態になっていることを確認した上で行われる。ＬＲＵリンクから外されたチェックコードページ管理テーブルは，未使用状態のチェックコードページ管理テーブルを管理するためのリンクであるＦｒｅｅリンクに繋がる。
【０１６７】
「LUN NEXT 16BE ID」/ 「 LUN Previous 16BE ID 」は，論理ボリューム毎の，チェックコードページ管理テーブルリンク用のポインタである。
【０１６８】
「Hash Group Next 16BE ID 」/ 「Hash Group Previous 16BE ID 」，「Hash Synonym Next 16BE ID 」/ 「Hash Synonym Previous 16BE ID 」は，ハッシュ制御用リンクのポインタである。すなわち，シノニムが発生した場合に当該ハッシュエントリに関連付けを行うためのリンク群である。シノニムが発生した場合には，このリンクを線形探索することにより，チェックコードに対するチェックコードページ管理テーブルが存在するか否かのＨｉｔ／Ｍｉｓｓ判定を行う。
【０１６９】
「Hash Entry Number 」は，ハッシュエントリの番号である。「Link List 」は，リンクの種類（例えば，「Unlinked」，「Free Link 」，「LRU Link」等) を示している。また，「16CC Buffer Address 」，「Mirror 16CC Buffer Address」は，チェックコードメモリ１０４のアドレスを示している。
【０１７０】
本実施例では，チェックコードページ管理テーブルを管理するために複数のリンク制御を行っている。例えば，本実施例では，論理ボリューム毎に管理されたリンク，上述したハッシュエントリに関連付けられるリンクの他，チェックコードページ管理テーブルの状態を管理するためのリンク群であるチェックコード管理リンク群についてのリンク制御を行う。
【０１７１】
全てのチェックコードページ管理テーブルは，チェックコード管理リンク群に属する，前述したＬＲＵリンクとＦｒｅｅリンクに接続されている。
【０１７２】
次に，本実施例におけるライトバック要求時の処理の例について，図２８乃至図３１を用いて説明する。図２８は，ＲＡＩＤレベルがＲＡＩＤ−１であり，かつライトバック要求がランダムに行われる場合の処理の一例を説明する図である。図２９は，ＲＡＩＤレベルがＲＡＩＤ−１であり，かつライトバック要求がシーケンシャルに行われる場合の処理の一例を説明する図である。図３０は，本実施例におけるライトバック処理フローの一例を示す図である。また，図３１は，Ｈａｓｈ管理の概念図である。
【０１７３】
ここでは，ライトバック要求された範囲が，チェックコード管理単位（例えば，１６ブロック（８ＫＢ）のデータ単位）のバウンダリと合わない場合について説明する。例えば，図２８に示すキャッシュページ２００中の，斜線部で示すライトバック要求された８ＫＢの更新データは，先頭８ＫＢのチェックコード管理単位と末尾８ＫＢのチェックコード管理単位のバウンダリにまたがっている。
【０１７４】
図３０の処理フローにおいて，まず，キャッシュ制御部１０１が，ＲＡＩＤ制御部１０２に対してライトバック要求を行う（ステップＳ１０１）。
【０１７５】
ＲＡＩＤ制御部１０２は，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在するか否かの判定（Ｈｉｔ／Ｍｉｓｓ判定）を行う（ステップＳ１０２）。ここで，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードとは，例えば，上述した図２８のキャッシュページ２００中の先頭８ＫＢのチェックコード管理単位に対応するチェックコードと，末尾８ＫＢのチェックコード管理単位に対応するチェックコードを指す。
【０１７６】
ＲＡＩＤ制御部１０２は，例えば，各チェックコードページ２０１の管理情報を格納しているチェックコードページ管理テーブルを検索することによって，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在するかを判断する。
【０１７７】
ステップＳ１０２におけるＨｉｔ／Ｍｉｓｓ判定を，図３１を用いて詳細に説明する。ＲＡＩＤ制御部１０２は，例えば，ライトバック要求において指定されたＬＢＡとＬＵＮをＨａｓｈのキー値として，Ｈａｓｈ関数を通す。ＲＡＩＤ制御部１０２は，Ｈａｓｈ関数を通した結果，Ｈａｓｈ  ＥｎｔｒｙがＨｉｔしていれば，Ｈａｓｈ  Ｅｎｔｒｙ中に格納されているチェックコードページ管理テーブルへのポインタに従って，チェックコードページ管理テーブルにアクセスする。そして，ＲＡＩＤ制御部１０２は，チェックコードページ管理テーブルの「Present Bitmap」を参照して，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードの存在有無（Ｈｉｔ／Ｍｉｓｓ）を判定する。
【０１７８】
ステップＳ１０２の処理の結果，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在する場合は，ステップＳ１０４に進む。ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在しない場合は，ＲＡＩＤ制御部１０２は，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードをチェックコードディスク１０５から読み込んでチェックコードメモリ１０４に格納する（ステップＳ１０３）。
【０１７９】
本実施例において，ライトバック要求範囲は，一度に２ページ分のチェックコードページ２０１を超えることがないとする。従って，上記ステップＳ１０３の処理においては，ＲＡＩＤ制御部１０２は，例えば，チェックコードページ２０１を２ページ確保するために，チェックコードページ管理テーブル×２を獲得する。
【０１８０】
そして，ＲＡＩＤ制御部１０２は，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードをチェックコードディスク１０５から読み込んで，獲得したチェックコードページ管理テーブルによって管理される２ページ分のチェックコードページ２０１へ格納する。
【０１８１】
次に，ＲＡＩＤ制御部１０２は，ライトバック要求範囲が含まれるチェックコード管理単位に対応するデータを，ディスクからリードして，データバッファ１０６に格納する（ステップＳ１０４）。例えば，ＲＡＩＤ制御部１０２は，ディスク３から図２８のキャッシュページ２００中に示す先頭８ＫＢのチェックコード管理単位のデータと末尾８ＫＢのチェックコード管理単位のデータを読み込んで，データバッファ１０６に格納する。この時，先頭と末尾の合計１６ＫＢで連続データになるので，一回のコマンド起動でステップＳ１０４の処理を行うことができる。
【０１８２】
次に，ＲＡＩＤ制御部１０２は，ステップＳ１０４においてデータバッファ１０６に格納されたデータについて，チェックコードを生成し，生成したチェックコードを，チェックコードメモリ１０４内のチェックコードと比較する（ステップＳ１０５）。
【０１８３】
例えば，ＲＡＩＤ制御部１０２は，ディスク３から読み込んだ先頭８ＫＢのチェックコード管理単位のデータと末尾８ＫＢのチェックコード管理単位のデータのそれぞれについてチェックコードを生成する。そして，ＲＡＩＤ制御部１０２は，先頭８ＫＢのチェックコード管理単位のデータから生成したチェックコードを，チェックコードメモリ１０４内の，先頭８ＫＢのチェックコード管理単位のデータと対応するチェックコードと比較する。また，ＲＡＩＤ制御部１０２は，末尾８ＫＢのチェックコード管理単位のデータから生成したチェックコードを，チェックコードメモリ１０４内の，末尾８ＫＢのチェックコード管理単位のデータと対応するチェックコードと比較する。
【０１８４】
比較結果が不一致である場合は（ステップＳ１０６），ＲＡＩＤ制御部１０２は，ディスクライト抜けの発生を検知する（ステップＳ１０７）。
【０１８５】
比較結果が一致である場合は，キャッシュ制御部１０１は，ライトバック要求範囲が含まれるチェックコード管理単位に対応する新たなチェックコードを生成し，チェックコードメモリ１０４内に格納する（ステップＳ１０８）。すなわち，キャッシュ制御部１０１は，例えば，図２８のキャッシュページ２００中に示す，先頭８ＫＢのチェックコード管理単位のデータのうち，４ＫＢ分の更新データ以外の４ＫＢのデータを，データバッファ１０６中の先頭８ＫＢのデータから抽出し，抽出した４ＫＢのデータを４ＫＢ分の更新データとマージして，８ＫＢのデータとする。そして，キャッシュ制御部１０１は，マージ後の８ＫＢのデータに対応するチェックコードを生成し，チェックコードメモリ１０４内に格納する。
【０１８６】
また，キャッシュ制御部１０１は，例えば，図２８のキャッシュページ２００中に示す，末尾８ＫＢのチェックコード管理単位のデータのうち，斜線で示す４ＫＢ分の更新データ以外の４ＫＢのデータを，データバッファ１０６中の末尾８ＫＢのデータから抽出し，抽出した４ＫＢのデータを４ＫＢ分の更新データとマージして８ＫＢのデータとする。そして，キャッシュ制御部１０１は，マージ後の８ＫＢのデータに対応するチェックコードを生成し，チェックコードメモリ１０４内に格納する。
【０１８７】
ステップＳ１０８の処理によって，生成された新たなチェックコードで，チェックコードメモリ１０４内の古いチェックコードが更新される。また，ステップＳ１０８の処理によって，チェックコードメモリ１０４内のチェックコードページ２０１が更新される。また，ステップＳ１０８の処理とともに，キャッシュ制御部１０１は，チェックコードページ管理テーブル内の管理情報を更新する。
【０１８８】
次に，ＲＡＩＤ制御部１０２は，ライトバック要求範囲である８ＫＢの更新データをディスクへライトする（ステップＳ１０９）。
【０１８９】
そして，ＲＡＩＤ制御部１０２からキャッシュ制御部１０１に対して，ライトバック完了応答を行う（ステップＳ１１０）。
【０１９０】
ライトバック要求がシーケンシャルに行われる場合も，キャッシュページ管理テーブルが複数用意される（図２９では，８個）以外は，ライトバックがランダムに行われる場合と同様の処理が行われる。
【０１９１】
次に，本実施例におけるライトバック要求時の処理の別の例について，図３２乃至図３４を用いて説明する。図３２は，ＲＡＩＤレベルがＲＡＩＤ−５であり，かつライトバック要求がランダムに行われる場合の処理の一例を説明する図である。図３２に示す例では，キャッシュ制御部１０１は，ライトバック要求時に，ライトバック要求範囲が含まれるチェックコード管理単位に対応するパリティデータについてもチェックコードを生成して，チェックコードメモリ１０４内に格納する。
【０１９２】
図３２に示すパリティバッファ１０７には，ディスクから読み出された，ライトバック要求された範囲が含まれるチェックコード管理単位に対応するパリティデータが格納される。
【０１９３】
また，図３３または図３４は，本実施例におけるライトバック処理フローの一例を示す図である。ここでは，ライトバック要求された範囲が，チェックコード管理単位のバウンダリと合わない場合について説明する。例えば，図３２に示すキャッシュページ２００中の，斜線部で示すライトバック要求された８ＫＢの更新データは，先頭８ＫＢのチェックコード管理単位と末尾８ＫＢのチェックコード管理単位のバウンダリにまたがっている。
【０１９４】
図３３または図３４の処理フローにおいて，まず，キャッシュ制御部１０１が，ＲＡＩＤ制御部１０２に対してライトバック要求を行う（ステップＳ１１１）。
【０１９５】
ＲＡＩＤ制御部１０２は，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在するか否かの判定（Ｈｉｔ／Ｍｉｓｓ判定）を行う（ステップＳ１１２）。ここで，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードとは，例えば，上述した図３２のキャッシュページ２００中に示す先頭８ＫＢのチェックコード管理単位に対応するチェックコードと，末尾８ＫＢのチェックコード管理単位に対応するチェックコードを指す。
【０１９６】
ＲＡＩＤ制御部１０２は，例えば，各チェックコードページ２０１の管理情報を格納しているチェックコードページ管理テーブルを検索することによって，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在するかを判断する。
【０１９７】
ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在する場合は，ステップＳ１１４に進む。ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在しない場合は，ＲＡＩＤ制御部１０２は，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードをチェックコードディスク１０５から読み込んでチェックコードメモリ１０４に格納する（ステップＳ１１３）。
【０１９８】
本実施例において，ライトバック要求範囲は，一度に２ページ分のチェックコードページ２０１を超えることがないとする。従って，上記ステップＳ１１３の処理においては，ＲＡＩＤ制御部１０２は，例えば，チェックコードページ２０１を２ページ確保するために，チェックコードページ管理テーブル×２を獲得する。
【０１９９】
そして，ＲＡＩＤ制御部１０２は，ライトバック要求範囲が含まれるチェックコード管理単位に対応するチェックコードをチェックコードディスク１０５から読み込んで，獲得したチェックコードページ管理テーブルによって管理される２ページ分のチェックコードページ２０１へ格納する。
【０２００】
次に，ＲＡＩＤ制御部１０２は，ライトバック要求範囲が含まれるチェックコード管理単位に対応するデータを，ディスクからリードして，データバッファ１０６に格納する（ステップＳ１１４）。例えば，ＲＡＩＤ制御部１０２は，ディスク４から図３２のキャッシュページ２００中に示す先頭８ＫＢのチェックコード管理単位に対応するデータと末尾８ＫＢのチェックコード管理単位に対応するデータとを読み込んで，データバッファ１０６に格納する。この時，先頭と末尾の合計１６ＫＢで連続データになるので，一回のコマンド起動でステップＳ１１４の処理を行うことができる。
【０２０１】
次に，ＲＡＩＤ制御部１０２は，ステップＳ１１４においてデータバッファ１０６に格納されたデータについて，チェックコードを生成し，生成したチェックコードを，チェックコードメモリ１０４内のチェックコードと比較する（ステップＳ１１５）。
【０２０２】
例えば，ＲＡＩＤ制御部１０２は，ディスク４から読み込んだ先頭８ＫＢのチェックコード管理単位のデータと末尾８ＫＢのチェックコード管理単位のデータのそれぞれについてチェックコードを生成する。そして，ＲＡＩＤ制御部１０２は，先頭８ＫＢのチェックコード管理単位のデータから生成したチェックコードを，チェックコードメモリ１０４内の，先頭８ＫＢのチェックコード管理単位のデータと対応するチェックコードと比較する。また，ＲＡＩＤ制御部１０２は，末尾８ＫＢのチェックコード管理単位のデータから生成したチェックコードを，チェックコードメモリ１０４内の，末尾８ＫＢのチェックコード管理単位のデータと対応するチェックコードと比較する。
【０２０３】
比較結果が不一致である場合は（ステップＳ１１６），ＲＡＩＤ制御部１０２は，ディスクライト抜けの発生を検知する（ステップＳ１１７）。
【０２０４】
比較結果が一致である場合は，キャッシュ制御部１０１は，ライトバック要求範囲が含まれるチェックコード管理単位に対応する新たなチェックコードを生成し，チェックコードメモリ１０４内に格納する（ステップＳ１１８）。すなわち，キャッシュ制御部１０１は，例えば，図３２のキャッシュページ２００中に示す，先頭８ＫＢのチェックコード管理単位のデータのうち，斜線で示す４ＫＢ分の更新データ以外の４ＫＢのデータを，データバッファ１０６中の先頭８ＫＢのデータから抽出し，抽出した４ＫＢのデータを４ＫＢ分の更新データとマージして８ＫＢのデータとする。そして，キャッシュ制御部１０１は，マージ後の８ＫＢのデータに対応するチェックコードを生成し，チェックコードメモリ１０４内に格納する。
【０２０５】
また，キャッシュ制御部１０１は，例えば，図３２のキャッシュページ２００中に示す，末尾８ＫＢのチェックコード管理単位のデータのうち，斜線で示す４ＫＢ分の更新データ以外の４ＫＢのデータを，データバッファ１０６中の末尾８ＫＢのデータから抽出し，抽出した４ＫＢのデータを４ＫＢ分の更新データとマージして８ＫＢのデータとする。そして，キャッシュ制御部１０１は，マージ後の８ＫＢのデータに対応するチェックコードを生成し，チェックコードメモリ１０４内に格納する。
【０２０６】
ステップＳ１１８の処理によって，生成された新たなチェックコードで，チェックコードメモリ１０４内の古いチェックコードが更新される。また，ステップＳ１１８の処理によって，チェックコードメモリ１０４内のチェックコードページ２０１が更新される。また，ステップＳ１１８の処理とともに，キャッシュ制御部１０１は，チェックコードページ管理テーブル内の管理情報を更新する。
【０２０７】
次に，ＲＡＩＤ制御部１０２は，上記のステップＳ１１４において行ったデータバッファ１０６へのデータの格納処理と同様に，ディスクから古いパリティデータをリードして，パリティバッファ１０７に格納する（ステップＳ１１９）。すなわち，ＲＡＩＤ制御部１０２は，ライトバック要求範囲が含まれるチェックコード管理単位（先頭８ＫＢと末尾８ＫＢ）のデータに対応するパリティデータをディスクからリードして，パリティバッファ１０７に格納する。
【０２０８】
次に，ＲＡＩＤ制御部１０２は，ステップＳ１１９においてパリティバッファ１０７に格納されたパリティデータについて，チェックコードを生成し，生成したチェックコードを，チェックコードメモリ１０４内のチェックコードと比較する（ステップＳ１２０）。
【０２０９】
比較結果が不一致である場合は（ステップＳ１２１），ＲＡＩＤ制御部１０２は，ディスクライト抜けの発生を検知する（ステップＳ１２２）。
【０２１０】
比較結果が一致である場合は，キャッシュ制御部１０１が，新たなパリティデータを生成し，生成した新たなパリティデータに基づいて新たなチェックコードを生成し，チェックコードメモリ１０４内に格納する（ステップＳ１２３）。
【０２１１】
すなわち，キャッシュ制御部１０１は，まず，古いデータと古いパリティデータと更新データとから，更新データに対応する新たなパリティデータを生成する。その後，生成された新たなパリティデータに基づいて，チェックコード管理単位に対応する新たなチェックコードを生成し，生成した新たなチェックコードで，チェックコードメモリ１０４中のチェックコードページを更新する。
【０２１２】
次に，ＲＡＩＤ制御部１０２は，ライトバック要求範囲のデータ（図３２では，斜線で示す８ＫＢの更新データ）をディスクへライトする（ステップＳ１２４）。ステップＳ１２４においては，ステップＳ１２３において生成された新たなパリティデータもディスクへライトされる。
【０２１３】
そして，ＲＡＩＤ制御部１０２からキャッシュ制御部１０１に対して，ライトバック完了応答を行う（ステップＳ１２５）。
【０２１４】
ライトバック要求がシーケンシャルに行われる場合も，キャッシュページ管理テーブルが多数用意される以外は，ライトバックがランダムに行われる場合と同様の処理が行われる。
【０２１５】
次に，本実施例におけるステージング要求時の処理の例について，図３５および図３６を用いて説明する。図３５は，ＲＡＩＤレベルがＲＡＩＤ−１であり，かつステージング要求がランダムに行われる場合の処理の一例を説明する図である。また，図３６は，本実施例におけるステージング処理フローの一例を示す図である。
【０２１６】
ここでは，ステージング要求された範囲が，チェックコード管理単位（例えば，１６ブロック（８ＫＢ））のバウンダリと合わない場合について説明する。例えば，図３５に示すキャッシュページ２００内の，斜線部で示す８ＫＢのステージング要求範囲は，先頭８ＫＢのチェックコード管理単位と末尾８ＫＢのチェックコード管理単位のバウンダリにまたがっている。
【０２１７】
図３６の処理フローに示すように，まず，キャッシュ制御部１０１が，ＲＡＩＤ制御部１０２に対してステージング要求を行う（ステップＳ１３１）。
【０２１８】
ＲＡＩＤ制御部１０２は，ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在するか否かの判定（Ｈｉｔ／Ｍｉｓｓ判定）を行う（ステップＳ１３２）。ここで，ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードとは，例えば，図３５のキャッシュページ２００中に示す先頭８ＫＢのチェックコード管理単位に対応するチェックコードと，末尾８ＫＢのチェックコード管理単位に対応するチェックコードを指す。
【０２１９】
ＲＡＩＤ制御部１０２は，前述したライトバック要求時の処理の場合と同様に，例えば，各チェックコードページ２０１の管理情報を格納しているチェックコードページ管理テーブルを検索することによって，ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在するかを判断する。
【０２２０】
ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在する場合は，ステップＳ１３４に進む。ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在しない場合は，ＲＡＩＤ制御部１０２は，ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードをチェックコードディスク１０５から読み込んでチェックコードメモリ１０４に格納する（ステップＳ１３３）。
【０２２１】
本実施例において，ステージング要求範囲は，一度に２ページ分のチェックコードページ２０１を超えることがないとする。従って，上記ステップＳ１３３の処理においては，ＲＡＩＤ制御部１０２は，例えば，チェックコードページ２０１を２ページ確保するために，チェックコードページ管理テーブル×２を獲得する。
【０２２２】
そして，ＲＡＩＤ制御部１０２は，ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードをチェックコードディスク１０５から読み込んで，獲得したチェックコードページ管理テーブルによって管理される２ページ分のチェックコードページ２０１へ格納する。
【０２２３】
次に，ＲＡＩＤ制御部１０２は，ステージング要求範囲が含まれるチェックコード管理単位に対応するデータを，ディスクからリードする（ステップＳ１３４）。例えば，ＲＡＩＤ制御部１０２は，ディスク３から図３５のキャッシュページ２００中に示す先頭８ＫＢのチェックコード管理単位に対応するデータと末尾８ＫＢのチェックコード管理単位に対応するデータをリードする。
【０２２４】
そして，ＲＡＩＤ制御部１０２は，ディスクからリードしたチェックコード管理単位に対応するデータをデータバッファ１０６に格納するとともに（ステップＳ１３５），ステージング要求範囲のデータをキャッシュメモリ１０３のキャッシュページ２００に格納する（ステップＳ１３６）。例えば，ＲＡＩＤ制御部１０２は，ディスク３からリードした先頭８ＫＢと末尾８ＫＢのデータをデータバッファ１０６に格納する。また，ＲＡＩＤ制御部１０２は，ディスク３からリードした先頭８ＫＢのデータのうち，４ＫＢ分のステージング要求範囲のデータをキャッシュページ２００中に格納する。
【０２２５】
また，ＲＡＩＤ制御部１０２は，ディスクからリードした末尾８ＫＢのデータのうち，４ＫＢ分のステージング要求範囲のデータをキャッシュページ２００中に格納する。
【０２２６】
その結果，図３５に示すように，キャッシュページ２００には，斜線で示す範囲（８ＫＢ）のデータがステージングされる。
【０２２７】
次に，ＲＡＩＤ制御部１０２は，キャッシュページ２００に格納されたステージング範囲のデータが含まれるチェックコード管理単位に対応するチェックコードを生成し，生成したチェックコードを，チェックコードメモリ１０４内のチェックコードと比較する（ステップＳ１３７）。
【０２２８】
例えば，ＲＡＩＤ制御部１０２は，データバッファ１０６に格納された先頭８ＫＢのデータ中のステージング要求範囲以外の４ＫＢのデータと，キャッシュページ２００中の先頭８ＫＢのチェックコード管理単位に格納された４ＫＢのステージング範囲のデータとから，チェックコードを生成し，生成したチェックコードを，チェックコードメモリ１０４内のチェックコードと比較する。
【０２２９】
また，例えば，ＲＡＩＤ制御部１０２は，データバッファ１０６に格納された末尾８ＫＢのデータ中のステージング要求範囲以外の４ＫＢのデータと，キャッシュページ２００中の末尾８ＫＢのチェックコード管理単位に格納された４ＫＢのステージング範囲のデータとから，チェックコードを生成し，生成したチェックコードを，チェックコードメモリ１０４内のチェックコードと比較する。
【０２３０】
比較結果が不一致である場合は（ステップＳ１３８），ＲＡＩＤ制御部１０２は，ディスクライト抜けの発生を検知する（ステップＳ１３９）。
【０２３１】
比較結果が一致である場合は，ＲＡＩＤ制御部１０２からキャッシュ制御部１０１に対して，ステージング完了応答を行う（ステップＳ１４０）。
【０２３２】
本実施例において，ステージング要求がシーケンシャルに行われる場合の処理は，上述した，ステージング要求がランダムに行われる場合の処理と同様である。
【０２３３】
ＲＡＩＤレベルがＲＡＩＤ−５であり，かつステージング要求がランダムに行われる場合の処理は，ＲＡＩＤ制御部１０２が，ディスクからリードしたパリティデータからチェックコードを生成し，生成したチェックコードをチェックコードメモリ１０４内のチェックコードと比較することを通じてステージングの正当性をチェックする以外は，上述したＲＡＩＤレベルがＲＡＩＤ−１である場合の処理と同様である。
【０２３４】
ＲＡＩＤレベルがＲＡＩＤ−５であり，かつステージング要求がシーケンシャルに行われる場合の処理は，ＲＡＩＤレベルがＲＡＩＤ−５であり，かつステージング要求がランダムに行われる場合の処理と同様である。
【０２３５】
本実施例におけるステージング要求時の処理の別の例について，図３７および図３８を用いて説明する。図３７は，ＲＡＩＤレベルがＲＡＩＤ−５であり，かつ，あるディスクが故障して，エクスポーズド（Ｅｘｐｏｓｅｄ）状態にある場合の処理の一例を説明する図である。また，図３８は，本実施例におけるステージング処理フローの一例を示す図である。
【０２３６】
本実施例においては，ステージング要求された範囲は，チェックコード管理単位（例えば，１６ブロック（８ＫＢ））のデータ単位のバウンダリと合わないものとする。例えば，図３７に示すキャッシュページ２００内の，斜線部で示す８ＫＢのステージング要求範囲は，先頭８ＫＢのチェックコード管理単位と末尾８ＫＢのチェックコード管理単位のバウンダリにまたがっている。
【０２３７】
また，本実施例においては，例えば，末尾８ＫＢのチェックコード管理単位のデータは，故障したディスク（図３７に示す例では，ディスク５）内に格納されているものとする。
【０２３８】
図３７および図３８に示すように，まず，キャッシュ制御部１０１が，ＲＡＩＤ制御部１０２に対してステージング要求を行う（ステップＳ１４１）。
【０２３９】
ＲＡＩＤ制御部１０２は，ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在するか否かの判定（Ｈｉｔ／Ｍｉｓｓ判定）を行う（ステップＳ１４２）。ここで，ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードとは，例えば，図３７のキャッシュページ２００中に示す先頭８ＫＢのチェックコード管理単位に対応するチェックコードと，末尾８ＫＢのチェックコード管理単位に対応するチェックコードを指す。
【０２４０】
ＲＡＩＤ制御部１０２は，例えば，各チェックコードページ２０１の管理情報を格納しているチェックコードページ管理テーブルを検索して，ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在するかを判断する。
【０２４１】
ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在する場合は，ステップＳ１４４に進む。ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードがチェックコードメモリ１０４に存在しない場合は，ＲＡＩＤ制御部１０２は，ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードをチェックコードディスク１０５から読み込んでチェックコードメモリ１０４に格納する（ステップＳ１４３）。
【０２４２】
本実施例において，ステージング要求範囲は，一度に２ページ分のチェックコードページ２０１を超えることがないとする。従って，上記ステップＳ１４３の処理においては，ＲＡＩＤ制御部１０２は，例えば，チェックコードページ２０１を２ページ確保するために，チェックコードページ管理テーブル×２を獲得する。
【０２４３】
そして，ＲＡＩＤ制御部１０２は，ステージング要求範囲が含まれるチェックコード管理単位に対応するチェックコードをチェックコードディスク１０５から読み込んで，獲得したチェックコードページ管理テーブルによって管理される２ページ分のチェックコードページ２０１へ格納する。
【０２４４】
次に，ＲＡＩＤ制御部１０２は，ステージング要求範囲が含まれるチェックコード管理単位に対応するデータをリードするコマンドをディスクへ発行する（ステップＳ１４４）。ステップＳ１４４の処理によって，例えば，ディスク４におけるステージング要求範囲が含まれる先頭８ＫＢのチェックコード単位に対応するデータが，データバッファ１０６に格納される。
【０２４５】
ＲＡＩＤ制御部１０２は，故障したディスクに格納されている，ステージング要求が含まれるチェックコード管理単位に対応するデータを復元する（ステップＳ１４５）。ＲＡＩＤ制御部１０２は，例えば，故障したディスク５に格納されている，末尾８ＫＢのチェックコード管理単位のデータを復元する。
【０２４６】
そして，ＲＡＩＤ制御部１０２は，ディスク４からリードしたデータと復元されたデータとをデータバッファ１０６に格納するとともに，ステージング要求範囲のデータをキャッシュメモリ１０３のキャッシュページ２００に格納する（ステップＳ１４６）。
【０２４７】
例えば，ＲＡＩＤ制御部１０２は，ディスク４からリードした先頭８ＫＢのデータと，復元した末尾８ＫＢのデータとをデータバッファ１０６に格納する。また，ＲＡＩＤ制御部１０２は，ディスク４からリードした先頭８ＫＢのデータのうち，４ＫＢ分のステージング要求範囲のデータをキャッシュページ２００中に格納する。
【０２４８】
また，ＲＡＩＤ制御部１０２は，復元した末尾８ＫＢのデータのうち，４ＫＢ分のステージング要求範囲のデータをキャッシュページ２００中に格納する。
【０２４９】
その結果，図３７に示すように，キャッシュページ２００には，斜線で示す範囲（８ＫＢ）のデータがステージングされる。
【０２５０】
次に，ＲＡＩＤ制御部１０２は，キャッシュページ２００に格納されたステージング範囲のデータが含まれるチェックコード管理単位に対応するチェックコードを生成し，生成したチェックコードを，チェックコードメモリ１０４内のチェックコードと比較する（ステップＳ１４７）。
【０２５１】
例えば，ＲＡＩＤ制御部１０２は，データバッファ１０６に格納された先頭８ＫＢのデータ中のステージング要求範囲以外の４ＫＢのデータと，キャッシュページ２００中に格納された４ＫＢのステージング範囲のデータとから，チェックコードを生成し，生成したチェックコードを，チェックコードメモリ１０４内のチェックコードと比較する。
【０２５２】
また，例えば，ＲＡＩＤ制御部１０２は，データバッファ１０６に格納された末尾８ＫＢのデータ中のステージング要求範囲以外の４ＫＢのデータと，キャッシュページ２００中に格納された４ＫＢのステージング範囲のデータとから，チェックコードを生成し，生成したチェックコードを，チェックコードメモリ１０４内のチェックコードと比較する。
【０２５３】
比較結果が不一致である場合は（ステップＳ１４８），ＲＡＩＤ制御部１０２は，ディスクライト抜けの発生を検知する（ステップＳ１４９）。
【０２５４】
比較結果が一致である場合は，ＲＡＩＤ制御部１０２からキャッシュ制御部１０１に対して，ステージング完了応答を行う（ステップＳ１５０）。
【０２５５】
本実施例における，あるディスクが故障した場合のディスクのＲｅｂｕｉｌｄ（再構築）処理の例について，図３９および図４０を用いて説明する。図３９は，ＲＡＩＤレベルがＲＡＩＤ−１であり，かつ，ＲＡＩＤ−１の一方のディスク（図３９では，ディスク４）が故障した場合のＲｅｂｕｉｌｄ（再構築）処理の一例を説明する図である。図３９中の２０２は，Ｒｅｂｕｉｌｄ要求された範囲のデータが書き込まれるスペアディスクである。また，２０３は，コントローラ９０が備えるＲｅｂｕｉｌｄモジュールである。
【０２５６】
また，図４０は，本実施例における，Ｒｅｂｕｉｌｄ処理フローの一例を示す図である。
【０２５７】
本実施例においては，一回のＲｅｂｕｉｌｄ（再構築）処理範囲は，チェックコード管理単位とバウンダリが一致しているものとする。
【０２５８】
まず，コントローラ９０内のＲｅｂｕｉｌｄモジュール２０３からＲＡＩＤ制御部１０２に対してＲｅｂｕｉｌｄ要求が行われる（ステップＳ１５１）。
【０２５９】
次に，ＲＡＩＤ制御部１０２は，Ｒｅｂｕｉｌｄ要求範囲に対応するチェックコードがチェックコードメモリ１０４に存在するか否かの判定（Ｈｉｔ／Ｍｉｓｓ判定）を行う（ステップＳ１５２）。
【０２６０】
ＲＡＩＤ制御部１０２は，例えば，前述したライトバック要求時の処理の場合と同様に，各チェックコードページ２０１の管理情報を格納しているチェックコードページ管理テーブルを検索することによって，上記のＨｉｔ／Ｍｉｓｓ判定を行う。
【０２６１】
Ｒｅｂｕｉｌｄ要求範囲に対応するチェックコードがチェックコードメモリ１０４に存在する場合は，ステップＳ１５４に進む。Ｒｅｂｕｉｌｄ要求範囲に対応するチェックコードがチェックコードメモリ１０４に存在しない場合は，ＲＡＩＤ制御部１０２は，Ｒｅｂｕｉｌｄ要求範囲に対応するチェックコードをチェックコードディスク１０５から読み込んでチェックコードメモリ１０４に格納する（ステップＳ１５３）。
【０２６２】
本実施例において，Ｒｅｂｕｉｌｄ要求範囲は，一度に２ページ分のチェックコードページ２０１を超えることがないとする。従って，上記ステップＳ１５３の処理においては，ＲＡＩＤ制御部１０２は，例えば，チェックコードページ２０１を２ページ確保するために，チェックコードページ管理テーブル×２を獲得する。
【０２６３】
そして，ＲＡＩＤ制御部１０２は，Ｒｅｂｕｉｌｄ要求範囲に対応するチェックコードをチェックコードディスク１０５から読み込んで，獲得したチェックコードページ管理テーブルによって管理される２ページ分のチェックコードページ２０１へ格納する。
【０２６４】
ＲＡＩＤ制御部１０２は，一回のＲｅｂｕｉｌｄ要求範囲のデータを，故障していない方のディスクからリードし，データバッファ１０６に格納する（ステップＳ１５４）。例えば，ＲＡＩＤ制御部１０２は，一回のＲｅｂｕｉｌｄ要求範囲のデータを，ディスク３からリードし，データバッファ１０６に格納する。
【０２６５】
次に，ＲＡＩＤ制御部１０２は，データバッファ１０６に格納された一回のＲｅｂｕｉｌｄ要求範囲のデータを，スペアディスク２０２に書き込む（ステップＳ１５５）。
【０２６６】
次に，ＲＡＩＤ制御部１０２は，ステップＳ１５５においてスペアディスク２０２に書き込まれたデータを，スペアディスク２０２からリードし，データバッファ１０６に格納する（ステップＳ１５６）。
【０２６７】
ＲＡＩＤ制御部１０２は，ステップＳ１５６においてデータバッファ１０６に格納された一回のＲｅｂｕｉｌｄ要求範囲のデータについて，チェックコードを生成して，生成したチェックコードを，チェックコードメモリ１０４内のチェックコードと比較する（ステップＳ１５７）。
【０２６８】
比較結果が不一致である場合は（ステップＳ１５８），ＲＡＩＤ制御部１０２は，ディスクライト抜けの発生を検知する（ステップＳ１５９）。
【０２６９】
比較結果が一致である場合は，ＲＡＩＤ制御部１０２からＲｅｂｕｉｌｄモジュール２０３に対して，Ｒｅｂｕｉｌｄ完了応答を行う（ステップＳ１６０）。
【０２７０】
なお，本発明は，コンピュータにより読み取られ実行されるプログラムとして実施することもできる。本発明を実現するプログラムは，コンピュータが読み取り可能な，可搬媒体メモリ，半導体メモリ，ハードディスクなどの適当な記録媒体に格納することができ，これらの記録媒体に記録して提供され，または，通信インタフェースを介してネットワークを利用した送受信により提供されるものである。
【０２７１】
以上から把握できるように，本発明の実施形態の特徴を述べると，以下のとおりである。
【０２７２】
（付記１）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，その新しい更新状態値を更新状態確認値としてメモリに記憶し，前記更新データと前記新しい更新状態値とを含む１管理単位をディスクにライトする更新状態設定手段と，
ディスクからリードした１管理単位中の前記更新状態値と，前記メモリに記憶した更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段とを備える
ことを特徴とするディスクライト抜け検出装置。
【０２７３】
（付記２）  付記１に記載のディスクライト抜け検出装置において，
前記更新状態値は，更新世代数，更新の時刻，もしくは前記複数のブロックの更新データから一意に生成されるチェックコード，またはそれらの組み合わせである
ことを特徴とするディスクライト抜け検出装置。
【０２７４】
（付記３）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，前記１管理単位中の更新データによって定まる更新状態値を算出し，前記更新データと前記更新状態値とを含む１管理単位をディスクにライトする更新状態設定手段と，
ディスクからリードした１管理単位中の更新データによって定まる更新状態値を算出し，算出した更新状態値を更新状態確認値として，ディスクからリードした１管理単位中の更新状態値と前記更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段とを備える
ことを特徴とするディスクライト抜け検出装置。
【０２７５】
（付記４）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，前記更新データと前記新しい更新状態値とを含む１管理単位を複数のディスクに冗長にライトする更新状態設定手段と，
前記複数のディスクのそれぞれからリードした１管理単位中の前記更新状態値を比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段とを備える
ことを特徴とするディスクライト抜け検出装置。
【０２７６】
（付記５）  付記１乃至付記４のいずれかに記載のディスクライト抜け検出装置において，
前記更新状態設定手段は，
前記１管理単位中の今回内容が変更される更新データを含むブロックと前記履歴ブロックとの間に今回内容が変更されない更新対象外のブロックが存在するとき，その更新対象外のブロックのデータをディスクからリードし，前記更新データを含むブロックのデータとマージするデータマージ手段を備える
ことを特徴とするディスクライト抜け検出装置。
【０２７７】
（付記６）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出方法であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，その新しい更新状態値を更新状態確認値としてメモリに記憶し，前記更新データと前記新しい更新状態値とを含む１管理単位をディスクにライトするステップと，
ディスクからリードした１管理単位中の前記更新状態値と，前記メモリに記憶した更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出するステップとを有する
ことを特徴とするディスクライト抜け検出方法。
【０２７８】
（付記７）  付記６に記載のディスクライト抜け検出方法において，
前記更新状態値は，更新世代数，更新の時刻，もしくは前記複数のブロックの更新データから一意に生成されるチェックコード，またはそれらの組み合わせである
ことを特徴とするディスクライト抜け検出方法。
【０２７９】
（付記８）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出方法であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，前記１管理単位中の更新データによって定まる更新状態値を算出し，前記更新データと前記更新状態値とを含む１管理単位をディスクにライトするステップと，
ディスクからリードした１管理単位中の更新データによって定まる更新状態値を算出し，算出した更新状態値を更新状態確認値として，ディスクからリードした１管理単位中の更新状態値と前記更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出するステップとを有する
ことを特徴とするディスクライト抜け検出方法。
【０２８０】
（付記９）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出方法であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，前記更新データと前記新しい更新状態値とを含む１管理単位を複数のディスクに冗長にライトするステップと，
前記複数のディスクのそれぞれからリードした１管理単位中の前記更新状態値を比較し，一致しない場合にディスクのライト抜けが発生したことを検出するステップとを有する
ことを特徴とするディスクライト抜け検出方法。
【０２８１】
（付記１０）  付記６乃至付記９のいずれかに記載のディスクライト抜け検出方法において，
前記１管理単位中の今回内容が変更される更新データを含むブロックと前記履歴ブロックとの間に今回内容が変更されない更新対象外のブロックが存在するとき，その更新対象外のブロックのデータをディスクからリードし，前記更新データを含むブロックのデータとマージするステップを有する
ことを特徴とするディスクライト抜け検出方法。
【０２８２】
（付記１１）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出プログラムであって，
コンピュータを，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，その新しい更新状態値を更新状態確認値としてメモリに記憶し，前記更新データと前記新しい更新状態値とを含む１管理単位をディスクにライトする更新状態設定手段と，
ディスクからリードした１管理単位中の前記更新状態値と，前記メモリに記憶した更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段として機能させるためのディスクライト抜け検出プログラム。
【０２８３】
（付記１２）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出プログラムであって，
コンピュータを，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，前記１管理単位中の更新データによって定まる更新状態値を算出し，前記更新データと前記更新状態値とを含む１管理単位をディスクにライトする更新状態設定手段と，
ディスクからリードした１管理単位中の更新データによって定まる更新状態値を算出し，算出した更新状態値を更新状態確認値として，ディスクからリードした１管理単位中の更新状態値と前記更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段として機能させるためのディスクライト抜け検出プログラム。
【０２８４】
（付記１３）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出プログラムであって，
コンピュータを，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，前記更新データと前記新しい更新状態値とを含む１管理単位を複数のディスクに冗長にライトする更新状態設定手段と，
前記複数のディスクのそれぞれからリードした１管理単位中の前記更新状態値を比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段として機能させるためのディスクライト抜け検出プログラム。
【０２８５】
（付記１４）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出プログラムを記録したコンピュータ読み取り可能な記録媒体であって，
コンピュータを，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，その新しい更新状態値を更新状態確認値としてメモリに記憶し，前記更新データと前記新しい更新状態値とを含む１管理単位をディスクにライトする更新状態設定手段と，
ディスクからリードした１管理単位中の前記更新状態値と，前記メモリに記憶した更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段として機能させるためのディスクライト抜け検出プログラムを記録した記録媒体。
【０２８６】
（付記１５）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出プログラムを記録したコンピュータ読み取り可能な記録媒体であって，
コンピュータを，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，前記１管理単位中の更新データによって定まる更新状態値を算出し，前記更新データと前記更新状態値とを含む１管理単位をディスクにライトする更新状態設定手段と，
ディスクからリードした１管理単位中の更新データによって定まる更新状態値を算出し，算出した更新状態値を更新状態確認値として，ディスクからリードした１管理単位中の更新状態値と前記更新状態確認値とを比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段として機能させるためのディスクライト抜け検出プログラムを記録した記録媒体。
【０２８７】
（付記１６）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出プログラムを記録したコンピュータ読み取り可能な記録媒体であって，
コンピュータを，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックに対して，その更新状態を示す更新状態値を設定する履歴ブロックを１ブロック割り当て，前記複数のブロックと前記履歴ブロックとを更新状態チェック対象の１管理単位とし，更新データをディスクにライトするときに，更新前の更新状態値と異なる新しい更新状態値を生成し，前記更新データと前記新しい更新状態値とを含む１管理単位を複数のディスクに冗長にライトする更新状態設定手段と，
前記複数のディスクのそれぞれからリードした１管理単位中の前記更新状態値を比較し，一致しない場合にディスクのライト抜けが発生したことを検出する更新状態チェック手段として機能させるためのディスクライト抜け検出プログラムを記録した記録媒体。
【０２８８】
（付記１７）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出装置であって，
前記コンピュータがライト／リードの対象とする更新データを格納するキャッシュメモリと，
前記更新データを設定する複数のブロックをディスクのライト抜けの検出対象の管理単位とし，前記キャッシュメモリに格納された前記更新データをディスクにライトバックするときに，ライトバック要求範囲が含まれる前記管理単位毎に第１のチェックコードを生成して，生成した第１のチェックコードを記憶手段内に記憶するチェックコード生成手段と，
前記ディスクから前記キャッシュメモリにデータをステージングするときに，ステージング要求範囲が含まれる前記管理単位を前記ディスクからリードし，前記リードされた管理単位のうち，前記ステージング要求範囲のデータを前記キャッシュメモリに格納し，前記キャッシュメモリに格納された前記ステージング要求範囲のデータと，前記リードされた管理単位のうち，前記ステージング要求範囲以外のデータとから，第２のチェックコードを生成し，前記生成された第２のチェックコードを，前記記憶手段内に記憶されている，前記ステージング要求範囲が含まれる管理単位に対応する第１のチェックコードと比較し，一致しない場合にディスクのライト抜けが発生したことを検出するディスクライト抜け検出手段とを備える
ことを特徴とするディスクライト抜け検出装置。
【０２８９】
（付記１８）  付記１７に記載のディスクライト抜け検出装置において，
前記ディスクライト抜け検出手段は，前記更新データをディスクにライトバックするときに，前記ライトバック要求範囲が含まれる前記管理単位をディスクからリードし，前記リードされた前記管理単位から第３のチェックコードを生成し，前記生成された第３のチェックコードを，前記記憶手段内に記憶されている，前記ライトバック要求範囲が含まれる管理単位に対応する第１のチェックコードと比較し，
前記チェックコード生成手段は，前記ディスクライト抜け検出手段による前記第３のチェックコードと前記第１のチェックコードとの比較結果が一致である場合に，前記ライトバック要求範囲の更新データと，前記ディスクライト抜け検出手段によってリードされた管理単位のうち，前記ライトバック要求範囲以外のデータとから，新たな第１のチェックコードを生成し，前記生成された新たな第１のチェックコードを，前記ライトバック要求範囲が含まれる前記管理単位に対応する第１のチェックコードとして前記記憶手段内に記憶する
ことを特徴とするディスクライト抜け検出装置。
【０２９０】
（付記１９）  付記１７に記載のディスクライト抜け検出装置において，
前記チェックコード生成手段は，前記更新データをディスクにライトバックするときに，ライトバック要求範囲が含まれる前記管理単位に対応するパリティデータについてチェックコードを生成して，前記第１のチェックコードとして前記記憶手段内に記憶し，
前記ディスクライト抜け検出手段は，前記更新データをディスクにライトバックするときに，前記ライトバック要求範囲が含まれる前記管理単位に対応するパリティデータをディスクからリードし，前記リードされたパリティデータから第４のチェックコードを生成し，前記生成された第４のチェックコードを，前記記憶手段内に記憶されている，前記ライトバック要求範囲が含まれる管理単位に対応するパリティデータについて生成された前記第１のチェックコードと比較し，一致しない場合にディスクのライト抜けが発生したことを検出する
ことを特徴とするディスクライト抜け検出装置。
【０２９１】
（付記２０）  コンピュータの処理対象となる電子データを記憶するディスクのライト抜けを検出するディスクライト抜け検出方法であって，
前記コンピュータがライト／リードの対象とする更新データを設定する複数のブロックをディスクのライト抜けの検出対象の管理単位とし，前記更新データが格納されたキャッシュメモリから前記更新データをディスクにライトバックするときに，ライトバック要求範囲が含まれる前記管理単位毎に第１のチェックコードを生成して，生成した第１のチェックコードを記憶手段内に記憶するステップと，
前記ディスクから前記キャッシュメモリにデータをステージングするときに，ステージング要求範囲が含まれる前記管理単位を前記ディスクからリードし，前記リードされた管理単位のうち，前記ステージング要求範囲のデータを前記キャッシュメモリに格納し，前記キャッシュメモリに格納された前記ステージング要求範囲のデータと，前記リードされた管理単位のうち，前記ステージング要求範囲以外のデータとから，第２のチェックコードを生成し，前記生成された第２のチェックコードを，前記記憶手段内に記憶されている，前記ステージング要求範囲が含まれる管理単位に対応する第１のチェックコードと比較し，一致しない場合にディスクのライト抜けが発生したことを検出するステップとを有する
ことを特徴とするディスクライト抜け検出方法。
【図面の簡単な説明】
【０２９２】
【図１】更新状態確認値，更新データおよび更新状態値を示す図である。
【図２】本発明のシステム構成図の一例を示す図である。
【図３】本発明のシステム構成の別の例を示す図である。
【図４】ディスクライト抜け検出装置の機能ブロック図の一例を示す図である。
【図５】更新状態確認値管理テーブルのデータ構成の一例を示す図である。
【図６】Ｎブロックのうちの一部のブロックのデータ更新を示す図である。
【図７】ライト処理フローの一例を示す図である。
【図８】更新状態チェック処理フローの一例を示す図である。
【図９】ライト処理フローの一例を示す図である。
【図１０】更新状態チェック処理フローの一例を示す図である。
【図１１】ライト処理フローの一例を示す図である。
【図１２】更新状態チェック処理フローの一例を示す図である。
【図１３】新更新状態値の算出を説明する図である。
【図１４】更新状態チェック処理フローの一例を示す図である。
【図１５】更新状態値および更新状態確認値のデータ構成の一例を示す図である。
【図１６】ライト処理フローの一例を示す図である。
【図１７】更新状態チェック処理フローの一例を示す図である。
【図１８】更新状態チェック処理フローの一例を示す図である。
【図１９】１ブロックのフォーマット例を示す図である。
【図２０】本発明の実施例７のシステム構成図の一例を示す図である。
【図２１】コントローラの構成の一例を示す図である。
【図２２】チェックコードの生成を説明する図である。
【図２３】チェックコードメモリの構成例を示す図である。
【図２４】チェックコードページの一例を示す図である。
【図２５】ＲＡＩＤグループについて定義された論理ボリュームとチェックコードとチェックコードメモリとの関係例を説明する図である。
【図２６】チェックコードページ管理テーブルのフォーマット例を示す図である。
【図２７】ＬＲＵリンクの例を示す図である。
【図２８】ライトバック要求時の処理の例を説明する図である。
【図２９】ライトバック要求時の処理の例を説明する図である。
【図３０】ライトバック処理フローの一例を示す図である。
【図３１】Ｈａｓｈ管理の概念図である。
【図３２】ライトバック要求時の処理の例を説明する図である。
【図３３】ライトバック処理フローの一例を示す図である。
【図３４】ライトバック処理フローの一例を示す図である。
【図３５】ステージング要求時の処理の例を説明する図である。
【図３６】ステージング処理フローの一例を示す図である。
【図３７】ステージング要求時の処理の例を説明する図である。
【図３８】ステージング処理フローの一例を示す図である。
【図３９】ディスクのＲｅｂｕｉｌｄ処理の例を説明する図である。
【図４０】Ｒｅｂｕｉｌｄ処理フローの一例を示す図である。
【符号の説明】
【０２９３】
１  ホストコンピュータ
２，９０  コントローラ
３，４，５，６  ディスク
７，９  ＲＡＩＤ装置
８  メモリ
２０，２１  ディスクライト抜け検出装置
２１  更新状態設定部
２２  ディスクライト部
２３  ディスクリード部
２４  更新状態チェック部
２５  更新状態確認値管理テーブル
９１  ＣＡ
９２  ＤＡ
１００  リソース制御部
１０１  キャッシュ制御部
１０２  ＲＡＩＤ制御部
１０３  キャッシュメモリ
１０４  チェックコードメモリ
１０５  チェックコードディスク
１０６  データバッファ
１０７  パリティバッファ
２００  キャッシュページ
２０１  チェックコードページ
２０２  スペアディスク
２０３  Ｒｅｂｕｉｌｄモジュール
２１０  更新状態値算出部
２１１  更新状態確認値設定部
２１２  更新データ・更新状態値設定部
２１３  データマージ部
２４０  更新状態比較部
２４１  ディスクライト抜け認知部
２４２  更新状態確認値算出部
【図１】
2006252530.tif 000003
【図２】
2006252530.tif 000004
【図３】
2006252530.tif 000005
【図４】
2006252530.tif 000006
【図５】
2006252530.tif 000007
【図６】
2006252530.tif 000008
【図７】
2006252530.tif 000009
【図８】
2006252530.tif 000010
【図９】
2006252530.tif 000011
【図１０】
2006252530.tif 000012
【図１１】
2006252530.tif 000013
【図１２】
2006252530.tif 000014
【図１３】
2006252530.tif 000015
【図１４】
2006252530.tif 000016
【図１５】
2006252530.tif 000017
【図１６】
2006252530.tif 000018
【図１７】
2006252530.tif 000019
【図１８】
2006252530.tif 000020
【図１９】
2006252530.tif 000021
【図２０】
2006252530.tif 000022
【図２１】
2006252530.tif 000023
【図２２】
2006252530.tif 000024
【図２３】
2006252530.tif 000025
【図２４】
2006252530.tif 000026
【図２５】
2006252530.tif 000027
【図２６】
2006252530.tif 000028
【図２７】
2006252530.tif 000029
【図２８】
2006252530.tif 000030
【図２９】
2006252530.tif 000031
【図３０】
2006252530.tif 000032
【図３１】
2006252530.tif 000033
【図３２】
2006252530.tif 000034
【図３３】
2006252530.tif 000035
【図３４】
2006252530.tif 000036
【図３５】
2006252530.tif 000037
【図３６】
2006252530.tif 000038
【図３７】
2006252530.tif 000039
【図３８】
2006252530.tif 000040
【図３９】
2006252530.tif 000041
【図４０】
2006252530.tif 000042