(57)【特許請求の範囲】
【請求項１】
キャッシュと、パリティバッファと、データバッファとを有し、少なくとも１つの第１のディスクと、第２のディスクと、第３のディスクと、第４のディスクとを含む複数のディスクに接続されるコントローラの制御方法において、
受信した新データを前記キャッシュに格納し、
前記新データと、前記第１のディスクに格納されている第１の旧データと、前記第１の旧データ及び前記第２のディスクに格納されている第２の旧データによって形成されるストライプに対応する旧パリティデータとに基づいて、新パリティデータを生成し、生成した新パリティデータを前記パリティバッファに格納し、
前記パリティバッファに格納されている前記新パリティデータを前記第４のディスクに書き込み、
前記第２のディスクが故障し、かつ前記データバッファに格納されている前記新データと前記第１のディスクに格納されている前記新データとが異なる場合に、
前記第１のディスクに格納されている前記第１の旧データと、前記第３のディスクに格納されている第３の旧データと、前記パリティバッファに格納されている前記旧パリティデータとに基づいて、前記第２の旧データを復元し、
前記パリティバッファに格納されている前記旧パリティデータを削除し、
復元した前記第２の旧データと、前記第３の旧データとを前記キャッシュに格納し、
前記キャッシュに格納されている、前記新データ、前記第２の旧データ、および前記第３の旧データに基づいて、前記新パリティデータを再生成し、
再生成した前記新パリティデータを前記第４のディスクに格納し、
前記コントローラにかかる負荷率が所定の値以下であると判定された場合にのみ、前記負荷率が高くなるほど長く設定される所定の時間間隔で前記新パリティデータを再生成する、
ことを特徴とする制御方法。
【請求項２】
前記第１のディスクに格納されている前記第１の旧データをデータバッファに格納し、
前記第３のディスクに格納されている前記新パリティデータを前記パリティバッファに格納し、
前記第１のデータと、前記データバッファに格納されている前記第１の旧データと、前記パリティバッファに格納されている前記新パリティデータとに基づいて、前記旧パリティデータを生成し、
前記第２の旧データを復元した場合に、前記パリティバッファに格納されている前記新パリティデータと、前記データバッファに格納されている前記第１の旧データとを削除する、
ことを特徴とする請求項１記載の制御方法。
【請求項３】
少なくとも１つの第１のディスクと、第２のディスクと、第３のディスクとを含む複数のディスクと、
受信した新データをキャッシュに格納し、前記新データと、前記第１のディスクに格納されている第１の旧データと、前記第１の旧データ及び前記第２のディスクに格納されている第２の旧データによって形成されるストライプに対応する旧パリティデータとに基づいて、新パリティデータを生成し、生成した新パリティデータを前記パリティバッファに格納し、前記パリティバッファに格納されている前記新パリティデータを前記第４のディスクに書き込み、前記第２のディスクが故障し、かつ前記パリティバッファに格納されている前記新パリティデータと前記第４のディスクに格納されている前記新パリティデータとが異なる場合に、前記第１のディスクに格納されている前記第１の旧データと、前記第３のディスクに格納されている第３の旧データと、前記パリティバッファに格納されている前記旧パリティデータとに基づいて、前記第２の旧データを復元し、前記パリティバッファに格納されている前記旧パリティデータを削除し、復元した前記第２の旧データと、前記第３の旧データとを前記キャッシュに格納し、前記キャッシュに格納されている、前記新データ、前記第２の旧データ、および前記第３の旧データに基づいて、前記新パリティデータを再生成し、再生成した前記新パリティデータを前記第４のディスクに格納する制御部と、
を備え、
前記制御部にかかる負荷率が所定の値以下であると判定された場合にのみ、前記負荷率が高くなるほど長く設定される所定の時間間隔で前記新パリティデータを再生成することを特徴とするディスクアレイ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
ディスクへの書き込みエラーから復旧するＲＡＩＤコントローラの制御技術に関する。
【背景技術】
【０００２】
ディスクアレイ装置の代表としてＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ Ｉｎｅｘｐｅｎｓｉｖｅ（Ｉｎｄｅｐｅｎｄｅｎｔ）Ｄｉｓｋｓ）がある。ＲＡＩＤは安価で信頼性の高いストレージシステムを構築することができ、特にＲＡＩＤ５、６が多く活用されており、非常に有用な装置である。
【０００３】
しかしながらこれらＲＡＩＤ５、６などのＲＡＩＤシステムにおいて以下の問題がある。その問題はＲＡＩＤコントローラがデータのディスクへの書き込みに成功したが、そのデータに対応するパリティデータのディスクへの書き込みが失敗した場合に発生する。このような場合、ＲＡＩＤコントローラがパリティデータをディスクへ書き込むリトライが成功するまで、ＲＡＩＤコントローラはパリティバッファにパリティデータを保持し続ける。一方でパリティバッファの資源は限られている。
【０００４】
そのためＲＡＩＤコントローラがパリティバッファにパリティデータを保持し続けた状態で、ホストコンピュータから新たな書き込み命令を続けて受信したり、高負荷の書き込み処理を受信すると、パリティバッファの容量が不足する。その結果、ＲＡＩＤコントローラがホストコンピュータに対して、エラー応答を返してしまう（ジョブアベンド）といった問題が起きる。
【０００５】
ＲＡＩＤに関連する特許文献として以下のものがある。
【特許文献１】特開２００６−２５２４１４号公報
【特許文献２】特開２００３−１６７６８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本願発明のディスクアレイ装置は、パリティデータの書き込みエラーが発生した場合であっても、メモリ資源を有効活用して、ホストコンピュータからのジョブを継続可能にすることを目的とする。
【課題を解決するための手段】
【０００７】
本実施例に係る制御方法は、キャッシュとバッファを有し、少なくとも１つの第１の記憶部と、第２の記憶部と、第３の記憶部とを含む複数の記憶部に接続されるコントローラの制御方法において、第１のデータを前記キャッシュに格納し、前記第１のデータと、前記第１の記憶部に格納されている第２のデータと、前記第２のデータ及び前記第２の記憶部に格納されている第３のデータによって形成されるストライプに対応する第１のパリティデータとに基づいて、第２のパリティデータを生成し、生成した第２のパリティデータを前記バッファに格納し、前記バッファに格納されている前記第２のパリティデータを前記第３の記憶部に書き込み、前記第２の記憶部が故障し、かつ前記バッファに格納されている前記第２のパリティデータと前記第３の記憶部に格納されている前記第２のパリティデータとが異なる場合に、前記第２のデータと、前記バッファに格納されている前記第２のパリティデータとに基づいて、前記第３のデータを復元し、前記バッファに格納されている前記第２のパリティデータを削除し、復元した前記第３のデータを前記キャッシュに格納し、前記キャッシュに格納されている前記第１のデータと前記第３のデータとに基づいて、前記第２のパリティデータを再生成し、再生成した前記第２のパリティデータを前記第３の記憶部に格納することを特徴とする。
【０００８】
また本実施例に係る制御方法は、前記第１の記憶部に格納されている前記第２のデータを第２のバッファに格納し、前記第３の記憶部に格納されている前記第１のパリティデータを前記バッファに格納し、前記第１のデータと、前記第２のバッファに格納されている前記第２のデータと、前記バッファに格納されている前記第１のパリティデータとに基づいて、前記第２のパリティデータを生成し、前記第３のデータを復元した場合に、前記バッファに格納されている前記第２のパリティデータと、前記第２のバッファに格納されている前記第２のデータとを削除することを特徴とする。
【０００９】
また本実施例に係る制御方法は、前記コントローラにかかる負荷率が所定の値以下である場合に、前記負荷率が高くなるほど長く設定される所定の時間間隔で前記第２のパリティデータを再生成することを特徴とする。
【００１０】
さらに本実施例に係るディスクアレイ装置は、少なくとも１つの第１の記憶部と、第２の記憶部と、第３の記憶部とを含む複数の記憶部と、第１のデータをキャッシュに格納し、前記第１のデータと、前記第１の記憶部に格納されている第２のデータと、前記第２のデータ及び前記第２の記憶部に格納されている第３のデータによって形成されるストライプに対応する第１のパリティデータとに基づいて、第２のパリティデータを生成し、生成した第２のパリティデータをバッファに格納し、前記バッファに格納されている前記第２のパリティデータを前記第３の記憶部に書き込み、前記第２の記憶部が故障し、かつ前記バッファに格納されている前記第２のパリティデータと前記第３の記憶部に格納されている前記第２のパリティデータとが異なる場合に、前記第２のデータと、前記バッファに格納されている前記第２のパリティデータとに基づいて、前記第３のデータを復元し、前記バッファに格納されている前記第２のパリティデータを削除し、復元した前記第３のデータを前記キャッシュに格納し、前記キャッシュに格納されている前記第１のデータと前記第３のデータとに基づいて、前記第２のパリティデータを再生成し、再生成した前記第２のパリティデータを前記第３の記憶部に格納する制御部とを備えることを特徴とする。
【発明の効果】
【００１１】
本願発明のディスクアレイ装置は、パリティデータの書き込みエラーが発生した場合であっても、バッファを開放し、パリティデータの書き込みをリトライするときに再作成することによって、ホストコンピュータにエラー応答を返す異常終了を回避することができる。
【発明を実施するための最良の形態】
【００１２】
以下、ＲＡＩＤシステムにおけるコントローラモジュールのバッファ容量の枯渇制御について説明する。
（実施例１）
［１．ＲＡＩＤシステム１００］
図１は本実施例に係るＲＡＩＤシステム１００の構成図であるＲＡＩＤシステム１００は、ホストコンピュータ１０１、ＣＡ（チャネルアダプタ）１０２、ＣＭ（コントローラモジュール）１０３、ディスク１０４、１０５、１０６、１０７から構成されている。ＲＡＩＤシステム１００は、各データのストライプが、３つのデータストライプと１のパリティストライプで構成されているＲＡＩＤ５である。ＲＡＩＤ５のいわゆる（３＋１）の構成である。
【００１３】
［１．１．ホストコンピュータ１０１］
ホストコンピュータ１０１は、書き込み命令、読み出し命令をＣＡ１０２に出す。ホストコンピュータ１０１は、書き込み命令と共にディスク１０４〜１０７に書き込むデータをＣＡ１０２に送る。
【００１４】
［１．２．ＣＡ（チャネルアダプタ）１０２］
ＣＡ１０２は、ホストコンピュータ１０１とＣＭ１０３との間で通信制御を行う。ＣＡ１０２は、ホストコンピュータ１０１からＣＭ１０３への書き込み命令又は読み出し命令を処理して、ホストコンピュータ１０１とＣＭ１０３との間のデータ転送を制御する。
［１．３．ＣＭ（コントローラモジュール）１０３］
ＣＭ１０３は、ＣＡ１０２を介してホストコンピュータ１０１から受信するデータをディスク１０４〜１０７に分散して格納する。本実施例において、ＣＭ１０３は、データ（Ｎｅｗ  Ｄａｔａ）１０８をディスク１０４に書き込み、パリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０をパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１に更新する場合を考える。
【００１５】
ＣＭ１０３はディスク１０４にデータ（Ｎｅｗ  Ｄａｔａ）１０８を書き込む場合、まずＣＭ１０３はデータ（Ｏｌｄ  Ｄａｔａ）１０９をディスク１０４から読み出す。
【００１６】
そしてＣＭ１０３は、データ（Ｏｌｄ  Ｄａｔａ）１０９に対応するパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０をディスク１０７から読み出す。パリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０は、データ（Ｏｌｄ  Ｄａｔａ）１０９、及びディスク１０５、１０６に格納されておりデータ１０９に対応するデータ（図２に記載のデータ２０５、２０６）の排他的論理和である。
【００１７】
ＣＭ１０３は、データ（Ｎｅｗ  Ｄａｔａ）１０８とデータ（Ｏｌｄ  Ｄａｔａ）１０９とデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０の排他的論理和をとってデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を生成する。ＣＭ１０３は、データ（Ｎｅｗ  Ｄａｔａ）１０８をディスク１０４に、データ（Ｎｅｗ  Ｐａｒｉｔｙ）１０９をディスク１０７に書き込みを試みる。
【００１８】
ＣＭ１０３は、ディスク１０４にデータ（Ｎｅｗ  Ｄａｔａ）１０８を書き込み成功し、ディスク１０７にパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を書き込み失敗した場合、ディスク１０４〜１０７に格納するデータ間で整合性が取れない問題が発生する。
【００１９】
ここで図２は本実施例に係るディスク１０４〜１０７に格納するデータを示すデータテーブル２００である。データテーブル２００は、データ（Ｎｅｗ  Ｄａｔａ）１０８をディスク１０４に書き込む前と書き込んだ後におけるディスク１０４〜１０７に格納しているデータを示している。データテーブル２００に示すデータは、ディスク１０４〜１０７が格納する１ストライプ分のデータである。ディスク１０４〜１０７は、データテーブル２００に示すデータ以外のデータも格納している。カラム２０１はディスク１０４に格納するデータ、カラム２０２はディスク１０５に格納するデータ、カラム２０３はディスク１０６に格納するデータ、カラム２０４はディスク１０７に格納するデータを示している。
【００２０】
ＣＭ１０３がディスク１０４、１０７にデータを書く前（Ｐｒｅ）では、ディスク１０４はデータ（Ｏｌｄ  Ｄａｔａ）１０９を、ディスク１０５はデータ（Ｏｌｄ  Ｄａｔａ）２０５を、ディスク１０６はデータ（Ｏｌｄ  Ｄａｔａ）２０６を、ディスク１０７はパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を格納している。
【００２１】
そしてＣＭ１０３がディスク１０４にデータ（Ｎｅｗ  Ｄａｔａ）１０８を書き込んだ後（Ａｆｔｅｒ）では、ディスク１０４はデータ（Ｎｅｗ  Ｄａｔａ）１０８を、ディスク１０５はデータ（Ｏｌｄ  Ｄａｔａ）２０５を、ディスク１０６はデータ（Ｏｌｄ  Ｄａｔａ）２０６を、ディスク１０７はパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を格納している。
【００２２】
本実施例においてＣＭ１０３は、ディスク１０７にパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１の書き込みを失敗する。そのためＣＭ１０３がディスク１０４にデータ（Ｎｅｗ  Ｄａｔａ）１０８を書き込んだ後（Ａｆｔｅｒ）において、ディスク１０４〜１０７に格納されるデータは、ディスク１０４〜１０７データ間で整合性がとれていない状態である。
【００２３】
ＣＭ１０３がディスク１０７にパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を書き込み失敗した場合、ＣＭ１０３は書き込みを失敗したパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をパリティバッファに保持する。ＣＭ１０３はパリティデータ１１１をパリティバッファに保持した状態で、さらなるホストコストコンピュータ１０１からの命令などによりＣＭ１０３によるディスク１０４〜１０７へのデータ書き込みが発生すると、ＣＭ１０３のパリティバッファの容量が足りなくなる問題が発生する。
【００２４】
＜１．３．１．バッファ量の枯渇制御＞
そこで本実施例に係るＣＭ１０３は以下の処理を行い、上記問題であるＣＭ１０３が有するパリティバッファの容量枯渇を制御する。
【００２５】
ＣＭ１０３はデータ（Ｏｌｄ  Ｄａｔａ）１０９をＣＭ１０３が有するデータバッファに書き戻す。ＣＭ１０３はディスク１０５、１０６からデータ（Ｏｌｄ  Ｄａｔａ）１０９に対応するデータ２０５、２０６を読み出し、ＣＭが有するキャッシュに格納する。対応するデータ２０５、２０６はデータ（Ｏｌｄ  Ｄａｔａ）１０９とパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０と共に１ストライプを形成するデータである。１ストライプを形成するデータは、ホストコンピュータ１０１から書き込み命令のあったまとまったデータをディスク１０４〜１０７に配分したデータである。またストライプは、複数のディスク１０４〜１０７の連続してアドレス指定されたブロックの集合である。つまり複数のディスク１０４〜１０７において１ストライプを形成するデータは、複数のディスク１０４〜１０７それぞれの連続してアドレス指定されたブロックの集合に格納されたデータであって対応関係にあるものをいう。
【００２６】
ＣＭ１０３は、整合性の保たれた１ストライプ分のデータをキャッシュに格納している。ＣＭ１０３はキャッシュ１０３に保持するデータ（Ｏｌｄ  Ｄａｔａ）１０９、データ２０５及びデータ２０６の排他的論理和を計算して、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を再び生成できる。そのためＣＭ１０３は、パリティバッファに保持するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をパリティバッファから削除する。
【００２７】
ＣＭ１０３は、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１のディスク１０７への再書き込みをリトライするに際し、キャッシュに保持するデータ（Ｏｌｄ  Ｄａｔａ）１０９、データ２０５、データ２０６から再びパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を生成する。そしてＣＭ１０３は、再生成したパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７に書き込む。
【００２８】
［１．４．ディスク１０４〜１０６、１０７］
上記に示したようにディスク１０４〜１０７は、ＣＭ１０３を介して、ホストコンピュータ１０１が送るデータを分散して格納している。
【００２９】
ＣＭ１０３は、ディスク１０４〜１０７が形成する１ストライプにデータとそのデータに対応するパリティデータを分散して格納する。
【００３０】
図３は本実施例に係るＣＭ１０３の機能ブロック図である。
【００３１】
ＣＭ１０３は、バッファ獲得手段３０１、データ読み出し手段３０２、パリティ生成手段３０３、データ書き込み手段３０４、整合判定手段３０５、データ書き戻し手段３０６、バッファ開放手段３０７を有している。またＣＭ１０３はハード構成として、ＣＰＵ３０８、キャッシュ３０９、メモリ３１０から構成されている。ＣＰＵ３０８が、バッファ獲得手段３０１、データ読み出し手段３０２、パリティ生成手段３０３、データ書き込み手段３０４、整合判定手段３０５、データ書き戻し手段３０６、バッファ開放手段３０７を実行する。ＣＰＵ３０８はＣＭ１０３がこれら機能を実行して、キャッシュ３０９、メモリ３１０へのデータ、そのデータに対応するパリティデータを書き込み／読み出し制御を行う。以下、ＣＭ１０３が有する各機能について説明する。
【００３２】
［２．１．バッファ獲得手段３０１］
ＣＰＵ３０８がバッファ獲得手段３０１を実行し、メモリ３１０上でデータバッファ３１１、パリティバッファ３１２の獲得処理を行う。ホストコンピュータ１０１からスモールライト（Ｓｍａｌｌ Ｗｒｉｔｅ）のデータ書き込み命令があると、バッファ獲得手段３０１は、データ（Ｏｌｄ  Ｄａｔａ）１０９とデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を読み出すためのデータバッファ３１１、パリティバッファ３１２をメモリ３１０上に確保する。より具体的にはバッファ獲得手段３０１は、メモリ３１０の一定のアドレス範囲にデータ（Ｏｌｄ  Ｄａｔａ）１０９とデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を格納できる領域を割り当てる処理を行う。
【００３３】
そしてバッファ獲得手段３１０がメモリ３１０上に獲得するデータバッファ３１１の容量は、データ（Ｏｌｄ  Ｄａｔａ）１０９を格納できる最小限の容量であり、データ（Ｏｌｄ  Ｄａｔａ）１０９と同じ大きさ若しくはそれに順ずる程度の容量である。同様にバッファ獲得手段３１０がメモリ３１０上に獲得するパリティバッファ３１２の容量は、パリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を格納できる最小限の容量であり、パリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０と同じ大きさ若しくはそれに順ずる程度の容量である。これはデータバッファ３１１、パリティバッファ３１２の容量枯渇の原因となるエラーの発生確率が低いことによる。換言すれば、データバッファ３１１、パリティバッファ３１２の容量は、エラーの発生確率とデータ書き込み処理に必要なメモリ容量を考慮した容量である。そのため、バッファ獲得手段３１０は、予め定められたエラーの発生確率とデータ書き込み処理に必要なメモリ容量に応じて、データバッファ３１１及びパリティバッファ３１２を確保する。
【００３４】
またスモールライト（Ｓｍａｌｌ  Ｗｒｉｔｅ）は、ＲＡＩＤシステム１００における書き込み範囲が１ストライプの半分以下のブロック（０ｘＣ０ ｂｌｏｃｋ以下）の書き込み処理である。
【００３５】
［２．２．データ読み出し手段３０２］
ＣＰＵ３０８がデータ読み出し手段３０２を実行し、データバッファ３１１にデータ（Ｏｌｄ  Ｄａｔａ）１０９、パリティバッファ３１２にパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を読み出す処理を行う。バッファ獲得手段３０１がデータバッファ３１１、パリティバッファ３１２をメモリ３１０上に獲得した後、データ読み出し手段３０２は、データバッファ３１１にデータ（Ｏｌｄ  Ｄａｔａ）１０９、パリティバッファ３１２にパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を読み出す。データ読み出し手段３０２は、データバッファ３１１にデータ（Ｏｌｄ  Ｄａｔａ）１０９、パリティバッファ３１２にパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を格納する。
【００３６】
［２．３．パリティ生成手段３０３］
ＣＰＵ３０８がパリティ生成手段３０３を実行し、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を生成する。まずパリティ生成手段３０３は、データバッファ３１１のデータ（Ｏｌｄ  Ｄａｔａ）１０９とパリティバッファ３１２のパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０の排他的論理和（ＸＯＲ）を計算して中間結果を算出した後、パリティ生成３０３は中間結果とキャッシュ３０９のデータ（Ｎｅｗ  Ｄａｔａ）１０８との排他的論理和（ＸＯＲ）を計算してパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を生成する。パリティ生成手段３０３はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をパリティバッファ３１２に格納する。
【００３７】
［２．４．データ書き込み手段３０４］
ＣＰＵ３０８がデータ書き込み手段３０４を実行し、ディスク１０４にデータ（Ｎｅｗ  Ｄａｔａ）１０８を、ディスク１０７にパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を書き込む処理を試みる。正常にデータ書き込み処理手段３０４が書き込み処理を実行できれば、データ（Ｎｅｗ  Ｄａｔａ）１０８をディスク１０４、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７に書き込むことができる。
【００３８】
しかしながら、ディスクへの書き込みタイミングの不一致、ディスク１０７へのゴミの混入などの原因により、データ書き込み手段３０４はデータ（Ｎｅｗ  Ｄａｔａ）１０８をディスク１０４に書き込むことができるが、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７に書き込むことができない場合が発生する。この場合パリティバッファ３１２はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）を保持したままとなる。そのため新たにホストコンピュータ１０１からディスク１０４〜１０７へのデータ書き込み命令があると、パリティバッファ３１２の容量が不足するといった問題は生じる。そこで本実施例におけるＲＡＩＤシステム１００は、パリティバッファ３１２を開放し、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を再書き込みするときに、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を再作成することによって、メモリ３１０の資源を有効活用できるようにする。
【００３９】
［２．５．整合判定手段３０５］
ＣＰＵ３０８が整合判定手段３０５を実行し、ディスク１０７に格納されるパリティデータを読み出し、パリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１とディスク１０７に格納するパリティデータとを比較する。パリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１とディスク１０７に格納するパリティデータとを比較した結果、整合判定手段３０５がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１とディスク１０７に格納するパリティデータが一致しないと判定する場合、データ書き込み手段３０４がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０６に書き込むことができなかったと判定する。またパリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１とディスク１０７に格納するパリティデータとを比較した結果、整合判定手段３０５がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１とディスク１０７に格納するパリティデータが一致すると判定する場合、データ書き込み手段３０４がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０６に書き込むことができたと判定する。
【００４０】
［２．６．データ書き戻し手段３０６］
ＣＰＵ３０８がデータ書き戻し手段３０６を実行し、データ（Ｏｌｄ  Ｄａｔａ）１０９をデータバッファ３１１に書き戻す。データ書き込み手段３０６がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７へ書き込み失敗した場合に、データ書き戻し手段３０６はデータ（Ｏｌｄ  Ｄａｔａ）１０９をデータバッファ３１１に書き戻す。
【００４１】
そしてデータ読み出し手段３０２はディスク１０５、１０６からデータ（Ｎｅｗ  Ｄａｔａ）１０８と１ストライプを形成して対応関係にあるデータをキャッシュ３０９に読み出す。
【００４２】
［２．７．バッファ開放手段３０７］
ＣＰＵ３０８がバッファ開放手段３０７を実行し、パリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を削除する。
【００４３】
データ書き戻し手段３０６がデータ（Ｏｌｄ  Ｄａｔａ）１０９をデータバッファ３１１に書き戻し、さらにディスク１０５、１０６からデータ（Ｎｅｗ  Ｄａｔａ）１０８と１ストライプを形成して対応関係にあるデータをキャッシュ３０９に読み出した場合、バッファ開放手段３０７はパリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を削除する。
【００４４】
これはキャッシュ３０９上には、ホストコンピュータ１０１からＣＡ１０２を介して受信したデータ（Ｎｅｗ  Ｄａｔａ）１０８、ディスク１０５、１０６から読み出したデータ２０５、２０６が存在するためである。つまりキャッシュ３０９が、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を形成するためのデータを保持しているため、パリティバッファ３１２がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を保持しなくてもよい。ここでキャッシュ３０９は、データ（Ｎｅｗ  Ｄａｔａ）１０８を保持すると、データ（Ｏｌｄ  Ｄａｔａ）２０５、データ（Ｏｌｄ  Ｄａｔａ）２０６を格納される領域も空けておく。キャッシュ３０９に保持するデータとディスク１０４〜１０７で１ストライプを形成するデータを対応づけて管理するためである。これによりＣＭ１０３でのデータ管理が簡易となるため、ＣＭ１０３の書き込み処理を高速に行うことができる。したがってＣＭ１０３は、ディスク１０４〜１０７で形成する１ストライプ単位で、キャッシュ３０９にデータを保持する領域を確保する。ＣＰＵ３０８が実行する確保手段（図示せず）キャッシュ３０９にデータを保持する領域を１ストライプ単位で確保する。
【００４５】
［３．パリティバッファ３１２の容量の枯渇制御に関するフローチャート］
図４は本実施例に係るＣＭ１０３が処理するパリティバッファ３１２の容量枯渇の制御に関するフローチャートである。
【００４６】
ホストコンピュータ１０１からスモールライト（Ｓｍａｌｌ Ｗｒｉｔｅ）のデータ書き込み命令があると、バッファ獲得手段３０１は、データ（Ｏｌｄ  Ｄａｔａ）１０９とデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を読み出すためのデータバッファ３１１、パリティバッファ３１２をメモリ３１０上に確保する（ステップＳ４０１）。
【００４７】
バッファ獲得手段３０１がデータバッファ３１１、パリティバッファ３１２をメモリ３１０上に獲得した後、データ読み出し手段３０２は、データバッファ３１１にデータ（Ｏｌｄ  Ｄａｔａ）１０９、パリティバッファ３１２にパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を読み出す（ステップＳ４０２）。データバッファ３１１はデータ（Ｏｌｄ  Ｄａｔａ）１０９を、パリティバッファ３１２はパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を保持する（ステップＳ４０３）。
【００４８】
パリティ生成手段３０３は、データバッファ３１１のデータ（Ｏｌｄ  Ｄａｔａ）１０９とパリティバッファ３１２のパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０の排他的論理和（ＸＯＲ）を計算して中間結果を算出する（Ｓ４０４）。パリティ生成手段３０３は、パリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０をパリティバッファ３１２から削除する（ステップＳ４０５）。そしてパリティ生成３０３は中間結果とキャッシュ３０９のデータ（Ｎｅｗ  Ｄａｔａ）１０８との排他的論理和（ＸＯＲ）を計算してパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を生成する（ステップＳ４０６）。パリティ生成手段３０３はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をパリティバッファ３１２に格納する（ステップＳ４０７）。
【００４９】
そしてデータ書き込み手段３０４は、データ（Ｎｅｗ  Ｄａｔａ）１０８をディスク１０４、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７に書き込みトライし、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１の書き込みができたか否かを判別する（ステップＳ４０８）。整合判定手段３０５を実行し、ディスク１０７に格納されるパリティデータを読み出し、パリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１とディスク１０７に格納するパリティデータとを比較する。パリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１とディスク１０７に格納するパリティデータとを比較した結果、整合判定手段３０５がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１とディスク１０７に格納するパリティデータが一致しないと判定する場合、データ書き込み手段３０４がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０６に書き込むことができなかったと判定する（ステップＳ４０８  ＮＯ）。またパリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１とディスク１０７に格納するパリティデータとを比較した結果、整合判定手段３０５がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１とディスク１０７に格納するパリティデータが一致すると判定する場合、データ書き込み手段３０４がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０６に書き込むことができたと判定する（ステップＳ４０８  ＹＥＳ）。
【００５０】
データ書き込み手段３０４がデータ（Ｎｅｗ  Ｄａｔａ）１０８をディスク１０４、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７に書き込むことができたと判別する場合（ステップＳ４０８  ＹＥＳ）、バッファ開放手段３０７は、パリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１、及びデータバッファ３１１に格納するデータ（Ｏｌｄ  Ｄａｔａ）１０９を削除する（ステップＳ４１３）。ＣＭ１０３はデータの書き込み処理を終了する。データ書き込み手段３０４がデータパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７に書き込むことができなかったと判別する場合（ステップＳ４０８  ＮＯ）、パリティバッファ３１２はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を保持したままとする（ステップＳ４０９）。
【００５１】
そしてデータ書き戻し手段３０６は、データ（Ｏｌｄ  Ｄａｔａ）１０９をディスク１０４に書き戻す（ステップＳ４１０）。これはディスク１０４〜１０７におけるデータの整合性を保つためである。続いてデータ書き戻し手段３０６はディスク１０５、１０６からデータ（Ｏｌｄ  Ｄａｔａ）２０５とデータ（Ｏｌｄ  Ｄａｔａ）２０６をキャッシュ３０９に読み出す（ステップＳ４１１）。これらデータ（Ｏｌｄ  Ｄａｔａ）２０５とデータ（Ｏｌｄ  Ｄａｔａ）２０６が、データ（Ｎｅｗ  Ｄａｔａ）１０８と１ストライプを形成する対応関係にあるデータである。
【００５２】
バッファ開放手段３０７は、データバッファ３１１に格納するデータ（Ｏｌｄ  Ｄａｔａ）１０９、及びパリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を削除する（ステップＳ４１２）。
【００５３】
上記図４のフローチャートに示すバッファ容量の枯渇制御を図解すると図５〜７のように表すことができる。図５はＣＭ１０３におけるパリティデータ（Ｎｅｗ  Ｄａｔａ）１１１の生成を図示したものである。また図６はＣＭ１０３におけるデータ（Ｏｌｄ  Ｄａｔａ）２０５とデータ（Ｏｌｄ  Ｄａｔａ）２０６の読み出しを図示したものである。
【００５４】
ＣＭ１０３のバッファ獲得手段３０１がデータバッファ３１１、パリティバッファ３１２をメモリ３１０上に確保する。続いてＣＭ１０３のデータ読み出し手段３０２がデータバッファ３１１にデータ（Ｏｌｄ  Ｄａｔａ）１０９、パリティバッファ３１２にパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を読み出す。ＣＭ１０３のデータ読み出し手段３０２は、データバッファ３１１にデータ（Ｏｌｄ  Ｄａｔａ）１０９、パリティバッファ３１２にパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０を保持する。パリティ生成手段３０３は、データ（Ｏｌｄ  Ｄａｔａ）１０９、パリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１１０、及びデータ（Ｎｅｗ  Ｄａｔａ）１０８との排他的論理和（ＸＯＲ）を計算してパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を生成する。パリティ生成手段３０３はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をパリティバッファ３１２に格納する。そしてデータ書き込み手段３０４は、データ（Ｎｅｗ  Ｄａｔａ）１０８をディスク１０４、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７に書き込みトライする。
【００５５】
次に図６においてデータ書き込み手段３０４がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７に書き込むことができなかったと判別する場合には、パリティバッファ３１２はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）を保持したままとする。そしてデータ書き戻し手段３０６は、データ（Ｏｌｄ  Ｄａｔａ）１０９をディスク１０４に書き戻す。続いてデータ書き戻し手段３０６はデータ（Ｏｌｄ  Ｄａｔａ）２０５とデータ（Ｏｌｄ  Ｄａｔａ）２０６をキャッシュ３０９に読み出す。バッファ開放手段３０７は、データバッファ３１１に格納するデータ（Ｏｌｄ  Ｄａｔａ）１０９、及びパリティバッファ３１２に格納するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を削除する
［４．コマンドリトライの処理に関するフローチャート］
図７は本実施例に係るコマンドリトライの処理を図解した図である。そして図８は本実施例に係るＣＭ１０３が実行するコマンドリトライの処理を示すフローチャートである。
【００５６】
ＣＭ１０３がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１１１へ再び書き込むことを試みる（コマンドリトライを発行する）に際し、パリティ生成手段３０３は再びキャッシュ３０９に保持するデータ（Ｎｅｗ  Ｄａｔａ）１０８とデータ（Ｎｅｗ  Ｄａｔａ）１０８に対応関係のあるデータ（Ｏｌｄ  Ｄａｔａ）２０５、２０６から再びパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を生成する（ステップＳ８０１）。
【００５７】
バッファ獲得手段３０１は再びパリティバッファ３１２をメモリ３１０上に確保し、データ書き込み手段３０４はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７に書き込むことを試みる（ステップＳ８０２）。ＣＭ１０３がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１をディスク１０７に再書き込み（コマンドリトライ）を一定時間ごとにリトライする。そのためパリティ生成手段３０３は、一定時間ごとにパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を再作成する。パリティ生成手段３０３は、ＣＭ１０３の負荷率（より具体的にはＣＰＵ３０８の負荷率）に応じて、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を再作成する。換言すれば、ＣＭ１０３にかかる負荷が高くなると、パリティ生成手段３０３は、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を再作成する時間間隔を長くする。ＣＭ１０３にかかる負荷率が一定の閾値以下のときに、パリティ生成手段３０３がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を再作成する。パリティ生成手段３０３がＣＭ１０３にかかる負荷率が一定の閾値以下と判定する場合に、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を再作成するため、パリティ生成手段３０３がＣＭ１０３にかかる負荷率が一定の閾値よりも高い場合には、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１を再作成する時間間隔は「∞」となる。なおこの閾値はＲＡＩＤシステム１００の動作環境に応じて予め定められた値である。
（実施例２）
［５．ＲＡＩＤシステム９００］
図９は本実施例に係るＲＡＩＤ９００の構成図である。ＲＡＩＤシステム９００は、ＲＡＩＤシステム１００と同様ＲＡＩＤ５の構成である。ＲＡＩＤシステム９００はホストコンピュータ、ＣＡ（チャネルアダプタ）、ＣＭ（コントロールモジュール）９０１、ディスク９０２〜９０５から構成されている。そしてＲＡＩＤシステム９００では、ディスク９０３が故障していわゆるＲＡＩＤ構成が縮退した場合について説明する。そしてディスク９０３の故障のタイミングは、ディスク９０５にパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１１を書き込み成功したときとする。
【００５８】
より詳細に本実施例における解決する問題を以下に説明する。ＣＭ９０１がホストコンピュータから受信したデータ（Ｎｅｗ  Ｄａｔａ）９１２をキャッシュ９０６に保持すると、ＣＭ９０１はデータ（Ｏｌｄ  Ｄａｔａ）９０９をデータバッファ９０７に読み出す。またＣＭ９０１はパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１をパリティバッファ９０８に読み出す。そしてＣＭ９０１はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０を生成する。パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０の生成手順はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１１１の生成手順と同様で行う。ＣＭ９０１は生成したパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０をパリティバッファ９０８に書き込み、パリティバッファ９０８に保持するパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１を削除する。そしてＣＭ９０１はディスク９０５にパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０を書き込み成功する。ＣＭ９０１のディスク９０３は故障する。ＣＭ９０１はそのためディスク９０３が保持するデータ（Ｏｌｄ  Ｄａｔａ）を取り出すことができない。またＣＭ９０１がデータ（Ｎｅｗ  Ｄａｔａ）９１２をディスクに書き込むことを失敗した場合には、ディスク９０２〜９０５が形成する１ストライプでデータの整合性が取れていないと問題が発生する。
【００５９】
つまり本実施例に係るＲＡＩＤシステム９００が解決する問題は、ディスク９０３が故障し、かつデータ（Ｎｅｗ  Ｄａｔａ）９１２のディスク９０２への書き込みの失敗である。
【００６０】
［６．ＣＭ９０１］
図１０は本実施例に係るＣＭ９０１の機能ブロック図である。図１１は本実施例に係るデータ（Ｏｌｄ  Ｄａｔａ）１２０１の復元を行う処理フローチャートである。図１２はディスク９０３からデータ（Ｏｌｄ  Ｄａｔａ）１２０１を復元する処理手順を図解した図である。ＣＭ９０１が各処理手順を行う機能は図１０に示す機能である。
【００６１】
図１０に記載のバッファ獲得手段１００１は、データバッファ９０７、パリティバッファをメモリ１００９上に確保する。データ読み出し手段１００２はデータバッファ９０７にデータ（Ｏｌｄ  Ｄａｔａ）９０９、パリティバッファ９０８にパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０を読み出す。
【００６２】
そしてまずパリティ生成手段１００３は、キャッシュ９０６に保持するデータ（Ｎｅｗ  Ｄａｔａ）９１２とデータバッファ９０７に保持するデータ（Ｏｌｄ  Ｄａｔａ）９０９の排他的論理和を計算して中間結果を算出する（ステップＳ１１０１）。パリティ生成手段１００３は、データ（Ｏｌｄ  Ｄａｔａ）９０９をデータバッファ９０７から削除する（ステップＳ１１０２）。そしてパリティ生成手段１００３は、ステップＳ１１０１で算出した中間結果とパリティバッファ９０８に保持するパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０の排他的論理和を計算してパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１を生成する（ステップＳ１１０３）。パリティ生成手段１００３はパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１をパリティバッファ９０８に格納し、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０をパリティバッファ９０８から削除する（ステップＳ１１０４）。
【００６３】
そしてデータ書き込み手段１００４は、パリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１をディスク９０５に書き戻す（ステップＳ１１０５）。ここで整合判定手段１００５は、ディスク９０５に格納されるパリティデータを読み出し、パリティバッファ９０８に格納するパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１とディスク９０５に格納するパリティデータとを比較する。パリティバッファ９０８に格納するパリティデータ（Ｏｌｄ  Ｄａｔａ）９１１とディスク９０５に格納するパリティデータとを比較した結果、整合判定手段１００５がパリティバッファ９０８に格納するパリティデータ（Ｏｌｄ  Ｄａｔａ）９１１とディスク９０５に格納するパリティデータとが一致しないと判定する場合、データ書き込み手段１００４はパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１をディスク９０５に書き戻すことができなかったと判定する。パリティバッファ９０８に格納するパリティデータ（Ｏｌｄ  Ｄａｔａ）９１１とディスク９０５に格納するパリティデータとを比較した結果、整合判定手段１００５がパリティバッファ９０８に格納するパリティデータ（Ｏｌｄ  Ｄａｔａ）９１１ディスク９０５に格納するパリティデータとが一致すると判定する場合、データ書き込み手段１００４はパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１をディスク９０５に書き戻すことができたと判定する。
【００６４】
さらにパリティ生成手段１００３は、ディスク９０２に格納するデータ（Ｏｌｄ  Ｄａｔａ）９０９、ディスク９０４に格納するデータ（Ｏｌｄ  Ｄａｔａ）１２０２、ディスク９０５に格納したパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１の排他的論理和を計算してデータ（Ｏｌｄ  Ｄａｔａ）１２０１を復元する（ステップＳ１１０６）。
【００６５】
［７．バッファ開放に関するフローチャート］
図１３は本実施例に係るデータバッファ９０７及びパリティバッファ９０８の開放に関するフローチャートである。
【００６６】
データ書き戻し手段１００６は、データ（Ｏｌｄ  Ｄａｔａ）１２０１をキャッシュ９０６に読み出し、キャッシュ９０６はデータ（Ｏｌｄ  Ｄａｔａ）１２０１を保持する（ステップＳ１３０１）。さらにデータ書き戻し手段１００６は、データ（Ｏｌｄ  Ｄａｔａ）１２０２をキャッシュ９０６に読み出し、キャッシュ９０６はデータ（Ｏｌｄ  Ｄａｔａ）１２０２を保持する（ステップＳ１３０２）。データ（Ｏｌｄ  Ｄａｔａ）１２０１、１２０２はデータ（Ｎｅｗ  Ｄａｔａ）９１２と対応関係にあるデータである。対応関係とは、パリティ生成手段１００３がデータ（Ｏｌｄ  Ｄａｔａ）１２０１、１２０２、及びデータ（Ｎｅｗ  Ｄａｔａ）９１２の排他的論理和を用いて、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０を算出できる関係をいう。ディスク９０２〜９０４において、データ（Ｏｌｄ  Ｄａｔａ）１２０１、１２０２、データ（Ｎｅｗ  Ｄａｔａ）９１２、及びパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０は１ストライプを形成する。
【００６７】
バッファ開放手段１００７はデータバッファ９０７に格納するデータ（Ｏｌｄ  Ｄａｔａ）９０９を削除し、さらにバッファ開放手段１００７はパリティバッファ９０８に格納するパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１を削除する（ステップＳ１３０３）。これによりデータバッファ９０７、パリティバッファ９０８を開放することができ、データのディスクへの書き込み失敗によるバッファ容量の枯渇を防ぐことができる。
【００６８】
図１４は本実施例に係るデータバッファ９０７及びパリティバッファ９０８の開放を図解した図である。
【００６９】
図１３のフローチャートにおいて説明したように、データ書き戻し手段１００６は、データ（Ｏｌｄ  Ｄａｔａ）１２０１、データ（Ｏｌｄ  Ｄａｔａ）１２０２をキャッシュ９０６に読み出す。
【００７０】
バッファ開放手段１００７はデータバッファ９０７に格納するデータ（Ｏｌｄ  Ｄａｔａ）９０９、パリティバッファ９０８に格納するパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）９１１を削除する。
【００７１】
そしてデータ書き込み手段１００４がディスク９０２へデータ（Ｎｅｗ  Ｄａｔａ）９１２を、ディスク９０５へパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０を再び書き込むことを試みる（コマンドリトライを発行する）に際し、パリティ生成手段１００３は再びキャッシュ９０６に保持するデータ（Ｎｅｗ  Ｄａｔａ）９１２とデータ（Ｎｅｗ  Ｄａｔａ）９１２に対応関係のあるデータ（Ｏｌｄ  Ｄａｔａ）１２０１、１２０２から再びパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０を生成する。
【００７２】
バッファ獲得手段１００１は再びパリティバッファ９０８をメモリ１００９上に確保する。そしてデータ書き込み手段１００４はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０を、パリティバッファ９０８を介して、ディスク９０５に書き込むことを試みる。さらにデータ書き込み手段１００４はデータ（Ｎｅｗ  Ｄａｔａ）９１２をディスク９０２に書き込むことを試みる。
【００７３】
ＣＭ９０１はディスク９０５へのパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０の書き込み、ディスク９０２へのデータ（Ｎｅｗ  Ｄａｔａ）９１２の書き込み（コマンドリトライ）を一定時間ごとにリトライする。
【００７４】
そのためパリティ生成手段１００３は、一定時間ごとにパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０を再作成する。パリティ生成手段１００３は、ＣＭ９０１のＣＰＵ１０
０８の負荷率に応じて、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）９１０を再作成する。
【００７５】
［バッファ容量の枯渇制御の他の態様］
他にもＲＡＩＤシステム（ＲＡＩＤ５の構成）におけるデータの書き込み失敗パターンを例示する。図１５は本実施例に係るＲＡＩＤシステム１５００におけるバッファ容量の枯渇制御を図解した図である。
【００７６】
ＲＡＩＤシステム１５００もＲＡＩＤ５の構成である。図１５にはホストコンピュータ、ＣＡ（チャネルアダプタ）の図示を省略する。そして本実施例は、ＣＭ１５０１がホストコンピュータからデータ（Ｎｅｗ  Ｄａｔａ）１５１２を受信し、ＣＭ１５０１がデータ（Ｎｅｗ  Ｄａｔａ）１５１２をディスク１５０２に書き込み失敗し、ディスク１５０２が故障する場合の例である。またＣＭ１５０１はディスク１５０５へパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１５１１を書き込み成功する。ＣＭ１５０１がディスク１５０２へデータ（Ｎｅｗ  Ｄａｔａ）１５１２を書き込み失敗するとＣＭ１５０１におけるデータ状況は以下のとおりである。キャッシュ１５０６は、データ（Ｎｅｗ  Ｄａｔａ）１５１２を保持している。データバッファ１５０７はデータ（Ｏｌｄ  Ｄａｔａ）１５０９を保持している。パリティバッファ１５０８はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１５１１を保持している。
【００７７】
ＣＭ１５０１はデータ（Ｎｅｗ  Ｄａｔａ）１５１２、データ（Ｏｌｄ  Ｄａｔａ）１５０９の排他的論理和を計算して中間結果を算出した後、さらにＣＭ１５０１はその中間結果とパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１５１１の排他的論理和を計算して、パリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１５１０を算出する。ＣＭ１５０１はこのパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１５１０をパリティバッファ１５０８に上書きする。続いてＣＭ１５０１は、パリティバッファ１５０８に保持するパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１５１０をディスク１５０５に書き戻す。
【００７８】
そしてＣＭ１５０１はディスク１５０３、１５０４それぞれに格納するデータ（Ｏｌｄ  Ｄａｔａ）をキャッシュ１５０６に読み出す。ＣＭ１５０１がディスク１５０３、１５０４から読み出すデータ（Ｏｌｄ  Ｄａｔａ）は、パリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１５１０、データ（Ｏｌｄ  Ｄａｔａ）１５０９と対応関係にあるデータである。
【００７９】
ＣＭ１５０１はデータバッファ１５０７にあるデータ（Ｏｌｄ  Ｄａｔａ）１５０９を削除し、さらにパリティバッファ１５０８にあるパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）１５１０を削除する。
【００８０】
ＣＭ１５０１は、キャッシュ１５０６にデータ（Ｎｅｗ  Ｄａｔａ）１５１２、及びディスク１５０３、１５０４それぞれから読み出したデータが保持されており、キャッシュ１５０６上でデータの整合性がとれている。そのためＣＭ１５０１は再びパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１５１１を作成することができる。したがってＣＭ１５０１は、ディスク１５０２が復旧すると、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１５１１を再作成して、ディスク１５０２へデータ（Ｎｅｗ  Ｄａｔａ）１５１２を、ディスク１５０５へパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１５１１を書き込むことをトライする。これによりデータバッファ１５０７、パリティバッファ１５０８の容量枯渇を防ぐことができる。
【００８１】
図１６は本実施例に係るＲＡＩＤシステム１６００におけるバッファ容量の枯渇制御を図解した図である。
【００８２】
ＲＡＩＤシステム１６００もＲＡＩＤ５の構成である。図１６にはホストコンピュータ、ＣＡ（チャネルアダプタ）の図示を省略する。そして本実施例は、ＣＭ１６０１がホストコンピュータからデータ（Ｎｅｗ  Ｄａｔａ）１６１１を受信し、ＣＭ１６０１がパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１６１０をディスク１６０５に書き込み失敗し、ディスク１６０３が故障する場合の例である。またＣＭ１６０１はディスク１６０２へデータ（Ｎｅｗ  Ｄａｔａ）１６１１を書き込み成功する。ＣＭ１６０１がディスク１６０５へパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１６１０を書き込み失敗するとＣＭ１６０１におけるデータ状況は以下のとおりである。キャッシュ１６０６は、データ（Ｎｅｗ  Ｄａｔａ）１６１１を保持している。データバッファ１６０７はデータ（Ｏｌｄ  Ｄａｔａ）１６０９を保持している。パリティバッファ１６０８はパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１６１０を保持している。
【００８３】
ＣＭ１６０１はデータバッファ１６０７に保持するデータ（Ｏｌｄ  Ｄａｔａ）１６０９をディスク１６０２に書き戻す。ＣＭ１６０１は、データ（Ｏｌｄ  Ｄａｔａ）１６０９とディスク１６０４に格納されるデータ（Ｏｌｄ  Ｄａｔａ）の排他的論理和を計算して中間結果を算出した後、さらにＣＭ１６０１はその中間結果とディスク１６０５に格納されるパリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）の排他的論理和を計算して、ディスク１６０３に格納していたデータ（Ｏｌｄ  Ｄａｔａ）を復元する。ＣＭ１６０１は復元したデータをキャッシュ１６０６に保持する。そしてＣＭ１６０１は、復元したデータと対応関係にあるデータ（Ｏｌｄ  Ｄａｔａ）をディスク１６０４から読み出す。
【００８４】
ＣＭ１６０１はデータバッファ１６０７にあるデータ（Ｏｌｄ  Ｄａｔａ）１６０９を削除し、さらにパリティバッファ１６０８にあるパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１６１０を削除する。
【００８５】
ＣＭ１６０１は、キャッシュ１６０６にデータ（Ｎｅｗ  Ｄａｔａ）１６１１、ディスク１６０４から読み出したデータ、及びディスク１６０３に格納されておりＣＭ１６０１が復元したデータが保持されており、キャッシュ１５０６上でデータの整合性がとれている。そのためＣＭ１５０１は再びパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１６１０を作成することができる。したがってＣＭ１６０１は、ディスク１６０３が復旧し、パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１６１０を再作成して、ディスク１６０２へデータ（Ｎｅｗ  Ｄａｔａ）１６１１を、ディスク１６０５へパリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）１６１０を書き込むことをトライする。これによりデータバッファ１６０７、パリティバッファ１６０８の容量枯渇を防ぐことができる。
【図面の簡単な説明】
【００８６】
【図１】本実施例に係るＲＡＩＤシステム１００の構成図である。
【図２】本実施例に係るデータテーブル２００である。
【図３】本実施例に係るＣＭ１０３の機能ブロック図である。
【図４】本実施例に係るパリティバッファ３１２の容量枯渇の制御に関するフローチャートである。
【図５】本実施例に係るパリティバッファ３１２の容量枯渇の制御のフローチャートを図解した模式図である。
【図６】本実施例に係るパリティバッファ３１２の容量枯渇の制御のフローチャートを図解した模式図である。
【図７】本実施例に係るコマンドリトライの処理を図解した図である。
【図８】本実施例に係るコマンドリトライの処理を示すフローチャートである。
【図９】本実施例に係るＲＡＩＤ９００の構成図である。
【図１０】本実施例に係るＣＭ９０１の機能ブロック図である。
【図１１】本実施例に係るデータ（Ｏｌｄ  Ｄａｔａ）１１０１の復元を行う処理フローチャートである。
【図１２】ディスク９０３からデータ（Ｏｌｄ  Ｄａｔａ）１１０１を復元する処理手順を図解した図である。
【図１３】本実施例に係るデータバッファ９０７及びパリティバッファ９０８を開放するフローチャートである。
【図１４】本実施例に係るデータバッファ９０７及びパリティバッファ９０８の開放を図解した図である。
【図１５】本実施例に係るＲＡＩＤシステム１５００におけるバッファ容量の枯渇制御を図解した図である。
【図１６】本実施例に係るＲＡＩＤシステム１６００におけるバッファ容量の枯渇制御を図解した図である。
【符号の説明】
【００８７】
１０１…ホストコンピュータ
１０２…チャネルアダプタ（ＣＡ）
１０３…コントローラモジュール（ＣＭ）
１０４…ディスク
１０５…ディスク
１０６…ディスク
１０７…ディスク
１０８…データ（Ｏｌｄ  Ｄａｔａ）
１０９…データ（Ｎｅｗ  Ｄａｔａ）
１１０…パリティデータ（Ｏｌｄ  Ｐａｒｉｔｙ）
１１１…パリティデータ（Ｎｅｗ  Ｐａｒｉｔｙ）
２００…データテーブル
３０１…バッファ獲得手段
３０２…データ読み出し手段
３０３…パリティ生成手段
３０４…データ書き込み手段
３０５…整合判定手段
３０６…データ書き戻し手段
３０７…バッファ開放手段
【図１】
0005245472.tif 000002
【図２】
0005245472.tif 000003
【図３】
0005245472.tif 000004
【図４】
0005245472.tif 000005
【図５】
0005245472.tif 000006
【図６】
0005245472.tif 000007
【図７】
0005245472.tif 000008
【図８】
0005245472.tif 000009
【図９】
0005245472.tif 000010
【図１０】
0005245472.tif 000011
【図１１】
0005245472.tif 000012
【図１２】
0005245472.tif 000013
【図１３】
0005245472.tif 000014
【図１４】
0005245472.tif 000015
【図１５】
0005245472.tif 000016
【図１６】
0005245472.tif 000017