(57)【特許請求の範囲】
【請求項１】
複数の物理的な記憶デバイスで構成されたＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループと、
前記ＲＡＩＤグループのＲＡＩＤレベルに従って、前記ＲＡＩＤグループへのデータの書き込み、及び前記ＲＡＩＤグループからのデータの読み出しをコントロールするコントローラと
を備え、
前記ＲＡＩＤグループは、第１の記憶デバイスと第２の記憶デバイスとのペアを１つ以上有する、ＲＡＩＤ１系のＲＡＩＤグループであり、
書込み対象のデータの単位サイズと、前記記憶デバイスの書込み単位のサイズとが異なっており、
前記記憶デバイスが提供する記憶領域が、複数の記憶ブロックで構成されており、
各記憶ブロックのサイズは、前記記憶デバイスの書込み単位のサイズと同じであり、
前記コントローラは、
（Ａ）前記第１の記憶デバイスにおける、前記書込み対象のデータの書込み先を含んだ第１の記憶ブロック群の全域から、データを読み出し、
（Ｂ）前記書込み対象のデータと、前記（Ａ）で読み出されたデータであるステージングデータとを基に、前記書込み対象データ又はそのコピーとステージングデータ部分又はそのコピーとで構成され前記第１の記憶ブロック群と同じサイズのデータであるデータユニットを１つ以上生成し、
（Ｃ）前記１以上のデータユニットのうちのいずれかを、前記第１の記憶デバイスにおける前記第１の記憶ブロック群に書込み、且つ、前記１以上のデータユニットのうちのいずれかを、前記第２の記憶デバイスにおける、前記第１の記憶ブロック群に対応しそれと同じサイズである第２の記憶ブロック群に書き込み、
前記（Ｂ）において、前記コントローラが、前記ステージングデータに前記書込み対象データ又はそのコピーを書き込むことで第１のデータユニットを生成し、前記書込み対象データのコピーを生成し、前記第１のデータユニット内のステージングデータ部分のコピーを前記書込み対象データのコピーに付加することで、第２のデータユニットを生成し、
前記（Ｃ）において、前記コントローラが、前記第１及び第２のデータユニットの一方を前記第１の記憶ブロック群に書き込み、前記第１及び第２のデータユニットの他方を前記第２の記憶ブロック群に書き込む、
ストレージ装置。
【請求項２】
請求項１記載のストレージ装置であって、
前記コントローラが、複数のキャッシュブロックで構成されているキャッシュメモリを有し、
各キャッシュブロックのサイズは、前記書込み対象データの単位サイズであり、
前記（Ａ）において、前記コントローラが、前記書込み対象データが格納されている１以上のキャッシュブロックを含んだ第１のキャッシュ領域を前記キャッシュメモリから確保し、
前記（Ａ）において、前記コントローラが、第２のキャッシュ領域を前記キャッシュメモリから確保し、
前記（Ａ）において、前記コントローラが、前記第２のキャッシュ領域に前記ステージングデータを読み出し、
前記（Ｂ）において、前記コントローラが、第３のキャッシュ領域を確保し、
前記（Ｂ）において、前記コントローラが、前記第１のキャッシュ領域内の前記書込み対象データを前記第２のキャッシュ領域にコピーすることで、前記第１のデータユニットを生成し、
前記（Ｂ）において、前記コントローラが、前記第２のキャッシュ領域内の前記ステージングデータ部分を前記第３のキャッシュ領域にコピーすることで、前記第２のデータユニットを生成し、
各キャッシュ領域は、二以上のキャッシュブロックで構成されており、
各キャッシュ領域のサイズは、前記記憶ブロックのサイズと前記キャッシュブロックのサイズとの最小公倍数である、
ストレージ装置。
【請求項３】
請求項２記載のストレージ装置であって、
前記第１のキャッシュ領域の全域が連続した前記書込み対象データで占められている場合、前記コントローラは、前記ステージングデータの読出しを行わず、
前記第１のデータユニット及び前記第２のデータユニットは、前記書込み対象データのコピーである、
ストレージ装置。
【請求項４】
請求項２記載のストレージ装置であって、
前記第１のキャッシュ領域において不連続の前記書込み対象データが存在する場合、前記第１の記憶ブロック群のサイズは、前記第１のキャッシュ領域における先頭の書込み対象データの先頭から前記第１のキャッシュ領域における末端の書込み対象データの末端までの範囲以上のサイズである、
ストレージ装置。
【請求項５】
請求項４記載のストレージ装置であって、
前記（Ｂ）において、前記コントローラは、前記第１のキャッシュ領域における書込み対象データ間をステージングデータ部分で埋めることで連続データが生成されるように前記第２のキャッシュ領域から前記第１のキャッシュ領域にステージングデータ部分をコピーし、
前記連続データは、不連続の前記書込み対象データと前記ステージングデータ部分とで構成されており、
前記（Ｂ）において、前記コントローラは、前記連続データを前記第２のキャッシュ領域にコピーすることで前記第１のデータユニットを生成し、
前記（Ｂ）において、前記コントローラは、前記連続データを前記第３のキャッシュ領域にコピーする
ストレージ装置。
【請求項６】
請求項２記載のストレージ装置であって、
データが退避される記憶領域である退避領域を有し、
前記コントローラは、前記第１又は第２のデータユニットの生成が正常に行われなかった場合、その生成に用いられたデータを、前記退避領域に一時的に書込み、
前記コントローラは、前記退避領域内のデータを、前記第２及び第３のキャッシュ領域のうちの、正常に生成されなかったデータユニットが格納されているキャッシュ領域にコピーする、
ストレージ装置。
【請求項７】
請求項２記載のストレージ装置であって、
前記書込み対象データの単位サイズは、ホスト装置からのデータと保証コードとのデータセットのサイズであり、
前記記憶デバイスは、ＳＡＴＡ−ＨＤＤである、
ストレージ装置。
【請求項８】
請求項１記載のストレージ装置であって、
前記第１の記憶ブロック群のサイズは、前記書込み対象データ以上の範囲において最小のサイズである、
請求項１に記載のストレージ装置。
【請求項９】
請求項１記載のストレージ装置であって、
前記書込み対象データが、連続したデータであり、且つ、そのサイズが、前記書込み対象データの単位サイズと、前記記憶デバイスの書込み単位のサイズとの公倍数である場合、前記コントローラが、前記ステージングデータの読出しを行わず、
前記データユニットは、前記書込み対象データのコピーである、
ストレージ装置。
【請求項１０】
請求項１記載のストレージ装置であって、
所定の範囲において前記書込み対象データが不連続である場合、前記第１の記憶ブロック群のサイズは、前記所定の範囲における先頭の書込み対象データの先頭から前記所定の範囲における末端の書込み対象データの末端までの範囲以上のサイズである、
ストレージ装置。
【請求項１１】
請求項１０記載のストレージ装置であって、
前記１以上のデータユニットが、第１のデータユニットと第２のデータユニットを含み、
前記（Ｂ）において、前記コントローラは、前記所定の範囲における書込み対象データ間をステージングデータ部分で埋めることで連続データが生成されるようにステージングデータ部分をコピーし、
前記連続データは、不連続の前記書込み対象データと前記ステージングデータ部分とで構成されており、
前記（Ｂ）において、前記コントローラは、前記連続データを前記ステージングデータ上に書き込むことで、前記第１のデータユニットを生成し、
前記（Ｂ）において、前記コントローラは、前記連続データのコピーを生成し、且つ、その連続データのコピーに、前記第１のデータユニットにおけるステージングデータ部分を付加することにより、前記第２のデータユニットを生成し、
前記（Ｃ）において、前記コントローラが、前記第１及び第２のデータユニットの一方を前記第１の記憶ブロック群に書き込み、前記第１及び第２のデータユニットの他方を前記第２の記憶ブロック群に書き込む、
ストレージ装置。
【請求項１２】
請求項１記載のストレージ装置であって、
データが退避される記憶領域である退避領域を有し、
前記コントローラは、前記データユニットの生成が正常に行われなかった場合、その生成に用いられたデータを、前記退避領域に一時的に書込み、
前記コントローラは、前記退避領域内のデータを用いてデータユニットを生成する、
ストレージ装置。
【請求項１３】
第１の記憶デバイスと第２の記憶デバイスとのペアを１つ以上有する、ＲＡＩＤ１系のＲＡＩＤグループへの書込みの制御方法であって、
（Ａ）前記第１の記憶デバイスにおける、書込み対象のデータの書込み先を含んだ第１の記憶ブロック群の全域から、データを読み出し、
（Ｂ）前記書込み対象のデータと、前記読み出されたデータであるステージングデータとを基に、前記書込み対象データ又はそのコピーとステージングデータ部分又はそのコピーとで構成され前記第１の記憶ブロック群と同じサイズのデータであるデータユニットを１つ以上生成し、
（Ｃ）前記１以上のデータユニットのうちのいずれかを、前記第１の記憶デバイスにおける前記第１の記憶ブロック群に書込み、且つ、前記１以上のデータユニットのうちのいずれかを、前記第２の記憶デバイスにおける、前記第１の記憶ブロック群に対応しそれと同じサイズである第２の記憶ブロック群に書き込み、
書込み対象のデータの単位サイズと、前記記憶デバイスの書込み単位のサイズとが異なっており、
前記記憶デバイスが提供する記憶領域が、複数の記憶ブロックで構成されており、
各記憶ブロックのサイズは、前記記憶デバイスの書込み単位のサイズと同じであり、
前記（Ｂ）において、前記ステージングデータに前記書込み対象データ又はそのコピーを書き込むことで第１のデータユニットを生成し、前記書込み対象データのコピーを生成し、前記第１のデータユニット内のステージングデータ部分のコピーを前記書込み対象データのコピーに付加することで、第２のデータユニットを生成し、
前記（Ｃ）において、前記第１及び第２のデータユニットの一方を前記第１の記憶ブロック群に書き込み、前記第１及び第２のデータユニットの他方を前記第２の記憶ブロック群に書き込む、
制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置に関し、特に、ＲＡＩＤ１系のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループへの書き込みの制御に関する。
【背景技術】
【０００２】
ストレージ装置（例えばディスクアレイ装置）は、一般に、複数のＨＤＤ（Hard Disk Drive）と、複数のＨＤＤへのアクセスを制御するコントローラ（以下、ディスクコントローラを略して「ＤＫＣ」と言う）とを有する。この種のストレージ装置には、通常、複数のＨＤＤで構成された１以上のＲＡＩＤグループがある。ＤＫＣは、ＲＡＩＤグループのＲＡＩＤレベルに従って、ＲＡＩＤグループにアクセスする。【０００３】
ＲＡＩＤレベルとして、例えば、ＲＡＩＤ１がある（特許文献１）。ＲＡＩＤ１が適用されたＲＡＩＤグループは、マスターのＨＤＤと、ミラーのＨＤＤとで構成される。ＤＫＣは、ホスト装置からライト対象のデータを受信し、ライト対象のデータを二重化する。そして、ＤＫＣは、二重化したデータの内、一方のデータを一方のＨＤＤ（以下、マスターＨＤＤ）に書き込み、他方のデータを他方のＨＤＤ（以下、ミラーＨＤＤ）に書き込む。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２１７５１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
さて、一般に、ＨＤＤが提供する記憶領域は、複数のサブ記憶領域（以下、「ブロック」と言う）で構成されており、ＨＤＤには、ブロックサイズ単位で、データが書き込まれる。ＨＤＤの種類によって、ＨＤＤの書込み単位のサイズが、ＨＤＤに対する書込み対象のデータの単位サイズと異なる場合がある。【０００６】
例えば、ＨＤＤとして、ＳＡＴＡ（Serial ATA（Advanced Technology Attachment））−ＨＤＤがある。図１Ａに示すように、ＳＡＴＡ−ＨＤＤの書込み単位（１ブロックＥ１０のサイズ）は、５１２Ｂ（バイト）である。これは、図１Ｂに示すように、ホスト装置からの１つのデータ要素Ｄ１０のサイズ（５１２Ｂ）と同じである（ホスト装置からのライト対象データは、１以上のデータ要素で構成されており、図示のデータ要素Ｄ１０は、それら１以上のデータ要素のうちの１つである）。【０００７】
しかしながら、図１Ｂに示すように、ＤＫＣは、信頼性の向上の観点から、データ要素Ｄ１０に保証コード（例えばＥＣＣ（（Error Correcting Code））Ｄ１１を加える。保証コードＤ１１のサイズは、例えば８Ｂ（バイト）である。これにより、５２０ＢのデータセットＤ１が生成される。そのため、ＤＫＣがＳＡＴＡ−ＨＤＤに書き込むデータセットＤ１のサイズ（書込み対象データの単位サイズ）は、ＳＡＴＡ−ＨＤＤの書込み単位のサイズ（１ブロックのサイズ）よりも、８Ｂ分だけ大きい。【０００８】
そのため、データセットＤ１は、ＳＡＴＡ−ＨＤＤの１つのブロックに収まらず、図２Ａに示すように、２つのブロックＥ１０及びＥ１１に跨ることになる。【０００９】
この場合、ＳＡＴＡ−ＨＤＤの書込み単位でデータを書き込むためには、図２Ｂに示すように、データセットＤ１にデータを付加することで、データセットＤ１の書込み先となる２つのブロックＥ１０及びＥ１１の合計サイズと同じデータサイズのデータユニットＦ１を作る必要がある。そのデータユニットＦ１を作成するために、ＤＫＣは、次の処理を行う。
（＊）ＤＫＣが、ブロックＥ１０のうちの、データセットＤ１が書き込まれない部分に記憶されている先頭側のデータＥ１を読み出し、そのデータＥ１をデータセットＤ１の先頭に付加する。
（＊）ＤＫＣが、ブロックＥ１１のうちの、データセットＤ１が書き込まれない部分に記憶されている末端側のデータＥ２を読み出し、そのデータＥ２をデータセットＤ１の末端に付加する。【００１０】
つまり、データユニットＦ１を作るためには、ＳＡＴＡ−ＨＤＤからの読み出しが、最大で２回必要となる。これは、ＤＫＣ及びＳＡＴＡ−ＨＤＤの各々の負荷を高めるという問題がある。【００１１】
そして、この問題は、ＲＡＩＤグループが、ＳＡＴＡ−ＨＤＤで構成されており、且つ、ＲＡＩＤレベルがＲＡＩＤ１の場合に、特に大きい。なぜなら、最大で２回の読み出しが、２つのＨＤＤ（マスターＨＤＤとミラーＨＤＤ）の各々について行われるからである。具体的には、次のとおりである。なお、以下の説明では、データユニットを作成するために読み出されデータセットに付加されるデータを、便宜上、「付加データ」と言うことにする。【００１２】
図３に示すように、ストレージ装置１Ａは、ＲＡＩＤグループ２０と、ＤＫＣ１０とを有する。ＤＫＣ１０は、フロントエンドインターフェイス装置（ＦＥ−ＩＦ）１１と、キャッシュメモリ１２とを有する。ＦＥ−ＩＦは、ホスト装置３０に対する通信インターフェイス装置である。ＲＡＩＤグループ２０は、そのＲＡＩＤレベルがＲＡＩＤ１のため、マスターＨＤＤ２１とミラーＨＤＤ２２とのペアである。いずれのＨＤＤ２１及び２２も、ＳＡＴＡ−ＨＤＤである。【００１３】
図３の矢印ａに示すように、ＦＥ−ＩＦ１１が、ホスト装置３０からデータ要素を、受領する。そのデータ要素は、キャッシュメモリ１２に格納される。ＤＫＣ１０は、そのデータ要素に保証コード（例えばＥＣＣ）を付加することで、データセットＤ１を生成する。【００１４】
次に、ＤＫＣ１０は、図３の矢印ｂ１及びｂ２に示すように、データセットＤ１のコピーを２つ生成する。つまり、マスター用のデータセットＤ２と、ミラー用のデータセットＤ３が生成される。【００１５】
次に、ＤＣＫ１０は、マスターＨＤＤ２１及びミラーＨＤＤ２２の各々について、２回の読み出し、つまり、合計４回の読み出しを行う。具体的には、図３の矢印ｃ１及びｃ２に示すように、ＤＫＣ１０は、マスターのＨＤＤ２１から付加データＥ１及びＥ２を読み出し、読み出した付加データＥ１及びＥ２をマスター用のデータセットＤ２に加える。これにより、マスター用のデータユニットＦ１が生成される。【００１６】
また、ＤＫＣ１０は、図３の矢印ｃ３及びｃ４に示すように、ミラーのＨＤＤ２２から付加データＥ３及びＥ４を読み出し、読み出した付加データＥ３及びＥ４をミラー用のデータセットＤ２に加える。これにより、ミラー用のデータユニットＦ２が生成される。【００１７】
ＤＫＣ１０は、図４の矢印ｄ１に示すように、作成されたデータユニットＦ１をマスターＨＤＤ２１に書き込み、且つ、図４の矢印ｄ２に示すように、作成されたデータユニットＦ２をミラーＨＤＤ２２に書き込む。【００１８】
上記の流れによれば、前述したように、最大４回の読み出しが行われる。データの読み出し回数が多いと、ＳＡＴＡ−ＨＤＤ及びＤＫＣ１０の両方の負荷が大きくなる。そうすると、ストレージ装置１の処理性能が低下してしまう。【００１９】
これは、ＲＡＩＤ１に限らず、ＲＡＩＤ１系の他のＲＡＩＤレベルにも有り得る。例えば、ＲＡＩＤ１０（「ＲＡＩＤ１＋０」とも言われる）の場合、１つのＲＡＩＤグループに、マスターのＨＤＤとミラーのＨＤＤとのセットが複数存在するため、ＲＡＩＤ１の場合と比較すると上記問題の影響は一層大きいと考えられる。【００２０】
また、上記の問題は、ＳＡＴＡ−ＨＤＤに限らず、書込み単位が書込み対象のデータの単位サイズと異なる他種の物理記憶デバイスについてもあり得る。【００２１】
したがって、本発明の目的は、書込み対象のデータの単位サイズとＲＡＩＤ１系のＲＡＩＤグループを構成する物理記憶デバイスの書込み単位のサイズとが異なっているストレージ装置の処理性能を向上させることにある。
【課題を解決するための手段】
【００２２】
ストレージ装置が、複数の物理的な記憶デバイスで構成されたＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループと、ＲＡＩＤグループのＲＡＩＤレベルに従って、ＲＡＩＤグループへのデータの書き込み、及びＲＡＩＤグループからのデータの読み出しをコントロールするコントローラとを備える。ＲＡＩＤグループは、第１の記憶デバイスと第２の記憶デバイスとのペアを１つ以上有する、ＲＡＩＤ１系のＲＡＩＤグループである。書込み対象のデータの単位サイズと、記憶デバイスの書込み単位のサイズとが異なっている。記憶デバイスが提供する記憶領域が、複数の記憶ブロックで構成されている。各記憶ブロックのサイズは、記憶デバイスの書込み単位のサイズと同じである。コントローラは、第１の記憶デバイスにおける、書込み対象のデータの書込み先を含んだ第１の記憶ブロック群の全域から、データを読み出す。コントローラは、書込み対象のデータと、その読み出されたデータであるステージングデータとを基に、書込み対象データ又はそのコピーとステージングデータ部分又はそのコピーとで構成され第１の記憶ブロック群と同じサイズのデータであるデータユニットを１つ以上生成する。コントローラは、１以上のデータユニットのうちのいずれかを、第１の記憶デバイスにおける第１の記憶ブロック群に書込み、且つ、１以上のデータユニットのうちのいずれかを、第２の記憶デバイスにおける、第１の記憶ブロック群に対応しそれと同じサイズである第２の記憶ブロック群に書き込む。【００２３】
書込み対象データは、例えば、ホスト装置からのデータに別のデータ（例えば保証コード）が付加されたデータであっても良いし、ホスト装置からのデータそれ自体でも良い。ホスト装置は、ストレージ装置の外部の装置である。
【図面の簡単な説明】
【００２４】
【図１】図１Ａは、ＨＤＤを構成する１ブロックのサイズを示す図である。図１Ｂは、ＤＫＣがＨＤＤに書き込むデータセットのサイズを示す図である。
【図２】図２Ａは、ＤＫＣがＨＤＤに書き込むデータセットのサイズが１ブロックのサイズより大きいことを示す。図２Ｂは、２つのブロックの合計サイズと同サイズのデータユニットを生成するために行われる従来の処理を説明するための図である。
【図３】ＲＡＩＤ１のＲＡＩＤグループに対する従来の書込み処理の一部を示す。
【図４】前述の従来の書込み処理の残りを示す。
【図５】本発明の一実施例でＲＡＩＤ１のＲＡＩＤグループに対して行われる書込み処理の第１の部分を示す
【図６】本実施例に係る前述の書込み処理の第２の部分を示す。
【図７】本実施例に係る前述の書込み処理の第３の部分を示す。
【図８】本実施例に係る前述の書込み処理の残りの部分を示す。
【図９】本実施例に係る計算機システムの構成を示す。
【図１０】図１０Ａは、セグメントとセグメントテーブルとの関係を示す。図１０Ｂは、セグメントテーブルの構成を示す。
【図１１】連続した複数の５２０Ｂのキャッシュブロックと連続した複数の５１２ＢのＳＡＴＡブロックとを並べると３２ｋＢ毎に境界が一致することを示した図である。
【図１２】図１２Ａは、セグメント群Ｗにおける中間ダーティデータの配置の第１の例を示す。図１２Ｂは、セグメント群Ｗにおける中間ダーティデータの配置の第２の例を示す。図１２Ｃは、セグメント群Ｗにおける中間ダーティデータの配置の第３の例を示す。図１２Ｄは、セグメント群Ｗにおける中間ダーティデータの配置の第４の例を示す。図１２Ｅは、セグメント群Ｗにおける中間ダーティデータの配置の第５の例を示す。
【図１３】図１３Ａは、図１２Ａに示す例に対応したステージングデータ読出しを示す。図１３Ｂは、図１２Ｂに示す例に対応したステージングデータ読出しを示す。図１３Ｃは、図１２Ｃに示す例に対応したステージングデータ読出しを示す。図１３Ｄは、図１２Ｄに示す例に対応したステージングデータ読出しを示す。図１３Ｅは、図１２Ｅに示す例に対応したステージングデータ読出しを示す。
【図１４】本実施例に係る、ＲＡＩＤ１のＲＡＩＤグループに対する書込み処理、流れの一部分を示すフローチャートである。
【図１５】本実施例に係る前述の書込み処理の残りを示すフローチャートである。
【図１６】図１４及び図１５のフローチャートのステップ４０１〜４１１における各ステップでのセグメントテーブルを示す。
【図１７】図１２のフローチャートのステップ４１２〜４１６における各ステップでのセグメントテーブルを示す。
【図１８】キャッシュ間コピーの説明図である。
【発明を実施するための形態】
【００２５】
以下、本発明の一実施例を説明する。なお、本実施例では、説明を分かり易くするために、下記の例が採用されているとする。
（＊）物理記憶デバイスが、ＨＤＤである。コントローラは、ＨＤＤへのアクセスを制御するディスクコントローラ（以下、ＤＫＣ）である。
（＊）ＲＡＩＤグループのＲＡＩＤレベルは、ＲＡＩＤ１である。ＲＡＩＤグループは、マスターＨＤＤ及びミラーＨＤＤのペアである。
（＊）マスターＨＤＤ及びミラーＨＤＤの各々は、ＳＡＴＡ−ＨＤＤである。
（＊）ＳＡＴＡ−ＨＤＤが提供する記憶領域を構成する各サブ記憶領域を「ブロック」と言う。
（＊）ブロックのサイズは、５１２Ｂ（バイト）であるとする。
（＊）ＤＫＣがホスト装置から受信したデータを構成する各データ要素のサイズは、５１２Ｂ（バイト）であるとする。データ要素のサイズは、ホスト装置からストレージ装置に提供されるデータの最小のサイズである。
（＊）保証コード（例えばＥＣＣ（Error Correcting Code））のサイズは８Ｂ（バイト）であるとする。
【００２６】
本実施例では、ＲＡＩＤ１のＲＡＩＤグループに対する書込み処理において、マスターＨＤＤ及びミラーＨＤＤのうちの一方からのデータの読み出しを不要にすることができ、且つ、ＲＡＩＤグループからのデータの読み出し回数を最大１回にすることができる。以下、図５〜図８を参照して、その書込み処理の概要を説明する。なお、以下の説明では、本実施例に係るストレージ装置１Ｂ内のＤＫＣ１００が、キャッシュメモリ１２０を有し、キャッシュメモリ１２０は、複数のセグメントで構成されているが、ホスト装置３００とやり取りされるデータを格納するセグメントの属性をライト面（以下、Ｗ面）と言い、マスターＨＤＤ２１０及びミラーＨＤＤ２２０とやり取りされるデータを格納するセグメントの属性をリード面（以下、Ｒ面）と言う。また、ＤＫＣ１００がホスト装置３００から受信したデータは１つのデータ要素で構成されているとする。
【００２７】
まず、ＤＫＣ１００は、図５の矢印ａ０１に示すように、ホスト装置３００から書込み要求及びそれに付随するデータ要素Ｄ２１を受信する。ＤＫＣ１００は、矢印ａ１０に示すように、ホスト装置３００からのデータ要素Ｄ２１を、セグメントに格納する（データ要素Ｄ２１を格納したセグメントの属性がＷ面となる）。そして、ＤＫＣ１００は、図５の矢印ａ０２に示すように、ホスト装置３００に応答（例えば書込み完了）を送信する。
【００２８】
次に、ＤＫＣ１００は、格納されたデータ要素Ｄ２１に保証コード（例えばＥＣＣ（（Error Correcting Code））Ｄ２２を加え、データセットＤ２０を生成する。データセットＤ２０のサイズは、５２０Ｂ（５１２Ｂ＋８Ｂ）である。データセットＤ２０が、書込み対象のデータである。
【００２９】
次に、ＤＫＣ１００は、図５の矢印ｂ１０に示すように、マスターＨＤＤ２１０（或いはミラーＨＤＤ２２０）における、データセットＤ２０の書込み先を含んだブロック群（ここでは２つのブロック）の全域から、データＥ２０を読み出し、そのデータＥ２０をセグメントに格納する（データＥ２０を格納したセグメントの属性がＲ面となる）。ＨＤＤからのデータの読出しは、この１回だけである。以下、ＨＤＤからキャッシュメモリ１２０に読み出されるデータを「ステージングデータ」と言う。
【００３０】
次に、ＤＫＣ１００は、図６の矢印ｃ１０に示すように、データセットＤ２０を、ステージングデータＥ２０上に書き込むと共に、図６の矢印ｃ１１に示すように、データセットＤ２０を別のセグメントにコピーする。図６によれば、オリジナルのデータセットＤ２０と、データセットＤ２０のコピーとを区別するため、データセットＤ２０のコピーとしてのデータセットには、参照符号Ｄ３０、Ｄ４０がそれぞれ付されている。データセットＤ４０を格納したセグメントの属性はＲ面となる。なぜなら、データセットＤ４０は、ＨＤＤとやり取りされるからである。
【００３１】
ステージングデータＥ２０にデータセットＤ２０が上書きされたことにより生成されたデータユニットＦ１０は、マスターＨＤＤ２１０用のデータである。ＤＫＣ１００は、データユニットＦ１０における、ステージングデータ部分Ｅ２１及びＥ２２を、図７の矢印ｄ１０及びｄ１１に示すように、データセットＤ４０に加える。これにより、ミラーＨＤＤ２２０用のデータユニットＦ２０が生成される。データユニットＦ２０はデータユニットＦ１０と一致するデータである。
【００３２】
その後、ＤＫＣ１００は、データユニットＦ１０を、図８の矢印ｅ１０に示すように、マスターＨＤＤ２１０に書き込み、データユニットＦ２０を、図８の矢印ｅ１１に示すように、ミラーＨＤＤ２２０に書き込む。
【００３３】
上記の様に、本実施例に従う、ＲＡＩＤ１のＲＡＩＤグループに対する書込み処理では、マスターＨＤＤ２１０及びミラーＨＤＤ２２０のうちの一方からのデータの読み出しが不要になり、且つ、ＲＡＩＤグループ２００からのデータの読み出し回数が最大で１回で済む。
【００３４】
上述の書込み処理において、データユニットＦ２０は、データユニットＦ１０のコピーであっても良いが、上述のようにして生成されることが好ましい。なぜなら、データユニットＦ１０をコピーする際に何らかの障害が起きた場合、生成されたデータユニットＦ２０がデータユニットＦ１０と異なるデータになってしまうことがあり得るからである。
【００３５】
また、上述の書込み処理において、ステージングデータＥ２０（読出し元のブロック群）のサイズは、データセットＤ１のサイズ以上であり、且つ、ＳＡＴＡ−ＨＤＤの書込み単位のサイズの倍数であれば良いが、その範囲のうちで最小のサイズであることが好ましい。キャッシュメモリ１２０の消費を抑えるためである。上記の例では、データセットＤ１は５１２Ｂであるため、ステージングデータＥ２０のサイズは、１０２４Ｂ（５１２Ｂ×２）であることが好ましい。データユニットＦ１０及びＦ２０のサイズは、ステージングデータＥ２０のサイズと同じである。データユニットＦ１０の書込み先は、ステージングデータＥ２０の読出し元のブロック群である。データユニットＦ２０の書込み先は、読出し元のブロック群に対応したブロック群（例えば、読出し元のブロック群と同じアドレスのブロック群）である。
【００３６】
さて、次に、図９〜図１８を参照（必要に応じて図５〜図８も参照）して、本実施例を詳細に説明する。
【００３７】
図９は、本実施例に係るストレージ装置１Ｂを有した計算機システムの構成を示す。
【００３８】
ストレージ装置１Ｂは、二重化されたＤＫＣ１００と、ＨＤＤ群９００とを備える。ストレージ装置１Ｂには、ストレージ装置１Ｂの外部の装置の一種でありＩ／Ｏ（Input/Output）要求を発行するホスト装置３００が接続されている。
【００３９】
ＤＫＣ１００は、ＦＥ−ＩＦ（フロントエンドインターフェイス装置）１１０と、キャッシュメモリ１２０と、ＣＰＵ１３０と、ローカルメモリ１４０と、ＢＥ−ＩＦ（バックエンドインターフェイス装置）１５０とを有する。
【００４０】
ＦＥ−ＩＦ１１０及びＢＥ−ＩＦ１５０は、ＤＫＣ１００が外部の装置とデータ等のやり取りをするための通信インターフェイス装置である。ＦＥ−ＩＦ１１０はホスト装置３００と通信し、ＢＥ−ＩＦ１５０はＨＤＤと通信する。キャッシュメモリ１２０は、ＨＤＤに読み書きされるデータを一時的に記憶するためのメモリである。キャッシュメモリ１２０同士で一部のデータを共有している。ローカルメモリ１４０は、制御に必要な情報（以下、管理情報）や、コンピュータプログラムを記憶する。ＣＰＵ１３０は、ローカルメモリ１４０が記憶するプログラムを実行して、管理情報を基に、ストレージ装置１Ｂの制御を行う。
【００４１】
ＨＤＤ群９００により、１以上のＲＡＩＤグループが構成されている。少なくとも１つのＲＡＩＤグループが、ＲＡＩＤグループ２００、つまり、ＲＡＩＤ１のＲＡＩＤグループである。なお、本発明は、ＲＡＩＤ１に限らず、データが二重化されて書き込まれるタイプの他種のＲＡＩＤレベル（つまりＲＡＩＤ１系の他種のＲＡＩＤレベル）にも適用可能である。
【００４２】
図１０Ａは、キャッシュメモリ１２０の構成と、ローカルメモリ１４０が記憶する情報を示す。
【００４３】
キャッシュメモリ１２０は、複数のセグメント１２１で構成されている。
【００４４】
ローカルメモリ１４０が、複数のセグメントテーブル（以下、ＳＧテーブル）１４１を記憶する。セグメント１２１とＳＧテーブル１４１が１対１で対応している。ＳＧテーブル１４１は、それに対応するセグメント１２１に関する情報を有する。なお、セグメント１２１毎にＳＧテーブル１４１があることに代えて、１つのテーブルが複数のレコードを有し、各レコードが１つのセグメント１２１に対応しても良い。また、複数のセグメント１２１に関する情報は、テーブル以外の形式で表現されても良い。
【００４５】
図１０Ｂは、幾つかのＳＧテーブル１４１の構成を示す。
【００４６】
ＳＧテーブル１４１は、例えば、下記の情報を有する。なお、図１０Ｂを参照した説明では、１つのＳＧテーブル１４１に着目し、且つ、そのＳＧテーブル１４１に対応するセグメントを「対象セグメント」と言う。
（＊）対象セグメント１２１に格納されているデータの属性を表す情報であるデータ１４０ａ、
（＊）対象セグメント１２１内のどの位置にデータが存在しているか（具体的には、対象セグメント１２０内のどこからどこまでがＨＤＤに対する入出力対象のデータであるか）を表す情報であるデータ１４０ｂ、
（＊）対象セグメント１２１を管理しているキューを表す情報であるキュー１４０ｃ、
（＊）対象セグメント１２１の属性を表す情報である属性１４０ｄ、
（＊）対象セグメント１２１内のデータがその対象セグメント１２１を有するキャッシュメモリ１２０とは別のキャッシュメモリ１２０にも存在しているか否かを表す情報であるフラグ１４０ｅ。
【００４７】
データ１４０ａの値（別の言い方をすれば、対象セグメント１２１内のデータ）として、「中間ダーティデータ」、「ステージングデータ」、「物理ダーティデータ」がある。「中間ダーティデータ」は、キャッシュメモリ１２０には存在するがＨＤＤには存在しないデータ（ダーティデータ）の一種であり、未だＨＤＤに書き込まれてはならない状態のデータである。中間ダーティデータは、具体的には、例えば、前述したデータセット（５１２Ｂのデータ要素と８Ｂの保証コードとのセット）である。「ステージングデータ」は、前述したように、ＨＤＤからキャッシュメモリ１２０に読み出されたデータである。「物理ダーティデータ」は、ダーティデータの一種であり、ＨＤＤに書き込まれて良い状態のデータである。
【００４８】
本実施例で言う「キュー」とは、図示しないが、例えば、複数のエントリが所定の順序で並んだ情報である。各エントリは、セグメントに対応しており、対応するセグメントに関する情報を有する。エントリの順序は、例えば、新たにデータが格納された時刻の順序である。本実施例では、キューとしては、例えば、中間ダーティキュー、クリーンキュー、フリーキュー、物理ダーティキューがある。中間ダーティキューは、中間ダーティデータが格納されているセグメントに対応したエントリで構成される。クリーンキューは、クリーンデータが格納されているセグメントに対応したエントリで構成される。クリーンデータの一種として、ステージングデータがある。フリーキューは、フリーのセグメントに対応したエントリで構成される。物理ダーティキューは、物理ダーティデータが格納されているセグメントに対応したエントリで構成される。
【００４９】
フラグ１４０ｅについて、ＯＮ（例えば“１”）は、対象セグメント１２１内のデータが別のキャッシュメモリ１２０にも存在していることを意味し、ＯＦＦ（例えば“０”）は、対象セグメント１２１内のデータが別のキャッシュメモリ１２０には存在しないことを意味する。
【００５０】
書込み処理において、キャッシュメモリ１２０からセグメント群（１以上のセグメント）が確保され、確保されたセグメント群にデータが書き込まれるが、確保されるセグメント群のサイズは、書込み対象データの単位サイズとＳＡＴＡ−ＨＤＤの書込み単位のサイズとの公倍数、好ましくは最小公倍数である。具体的には、書込み対象データの単位サイズは５２０Ｂであり、ＳＡＴＡ−ＨＤＤの書込み単位のサイズは５１２Ｂであるので、確保されるセグメント群のサイズは、５２０Ｂと５１２Ｂの最小公倍数である３２ｋＢ（キロバイト）である。従って、例えば、セグメントのサイズが４ｋＢであれば、８個のセグメントが確保されることになり、セグメントのサイズが８ｋＢであれば、４個のセグメントが確保されることになる（以下、セグメントのサイズが８ｋＢであるとする）。
【００５１】
上記のように３２ｋＢ（最小公倍数のサイズ）のセグメント群を確保し、セグメント群単位で処理をすることにより、ＨＤＤからステージングデータを読み出すことが不要になるケース（つまり読出し回数を０にできる）ケースが期待できる。それについて、図１１を参照して詳細に説明する。
【００５２】
図１１に示すように、各セグメントが、複数の５２０Ｂのキャッシュブロックで構成されている。１つのキャッシュブロックに、５２０Ｂのデータセット（５１２Ｂのデータ要素と８Ｂの保証コードとのセット）が格納される。
【００５３】
連続した複数のキャッシュブロックと連続した複数のＳＡＴＡブロック（ＳＡＴＡ−ＨＤＤのブロック）とを先頭を揃えて並べたと仮定した場合、３２ｋＢ毎に、キャッシュブロックの境界とＳＡＴＡブロックの境界とが一致する。
【００５４】
また、３２ｋＢは、ＳＡＴＡ−ＨＤＤの書込み単位のサイズである５１２Ｂの倍数である。このため、書込み対象のデータのサイズが３２ｋＢの場合、書込み対象のデータをＳＡＴＡ−ＨＤＤの書込み単位に従って書き込むことができる。
【００５５】
従って、３２ｋＢ分の全てのキャッシュブロックにデータセット（５２０Ｂの中間ダーティデータ）が格納されていれば（すなわち、３２ｋＢのセグメント群の先頭から末端まで中間ダーティデータが連続していれば）、書込み対象のデータは、３２ｋＢのデータ（連続した６４個のデータセットで構成されたデータ）であるため、ＨＤＤからステージングデータの読出しを行うことなく、書込み処理を完了させることができる。
【００５６】
以上のように、セグメント群を３２ｋＢ単位で確保すれば、ＨＤＤからの読出しが不要になるケースが期待できる。なお、確保されるセグメント群のサイズは、３２ｋＢ以外の、５１２Ｂと５２０Ｂの公倍数でも良いが、キャッシュメモリ１２０の消費を抑える観点から、最小公倍数であることが好ましい。
【００５７】
以下、図１２Ａ〜図１２Ｆ及び図１３Ａ〜図１３Ｆを参照して、３２ｋＢのセグメント群におけるデータセットの配置の例とステージングデータの範囲との関係を説明する。なお、図１２Ａ〜図１２Ｆ及び図１３Ａ〜図１３Ｆにおいて、ハッチングされたオブジェクトは、中間ダーティデータ（１以上のデータセット）を示し、グレーで塗りつぶされたオブジェクトは、ステージングデータ又はその部分を示す。
【００５８】
図１２Ａに示す例によれば、３２ｋＢのセグメント群の全域に、連続した中間ダーティデータＤ２００が存在している。この場合、前述したように、ステージングデータの読出しが不要のため、ステージングデータは読み出されない（図１３Ａ参照）。この例によれば、連続した中間ダーティデータＤ２００が、ＨＤＤに書き込まれるデータユニットＦ２００である。
【００５９】
図１２Ｂ及び図１２Ｃに示す例によれば、連続した中間ダーティデータは、セグメント群の先頭及び末端の一方の境界には重なっているが、他方の境界には重なっていない。具体的には、図１２Ｂに示す例によれば、連続した中間ダーティデータＤ２１０は、セグメント群の末端の境界には重なっていないが、そのセグメント群の先頭の境界には重なっている。この場合、連続した中間ダーティデータＤ２１０よりも大きなサイズのステージングデータＥ２１０が読み出され（図１３Ｂ参照）、ＨＤＤに書き込まれるデータユニットＦ２１０が生成されるが、そのデータユニットＦ２１０では、連続した中間ダーティデータＤ２２０の末端にステージングデータ部分Ｅ２１１が付加されている状態となる。また、図１２Ｃに示す例によれば、連続した中間ダーティデータＤ２２０は、３２ｋＢのセグメント群の先頭の境界には重なっていないが、そのセグメント群の末端の境界には重なっている。この場合、連続した中間ダーティデータＤ２２０よりも大きなサイズのステージングデータＥ２２０が読み出され（図１３Ｃ参照）、ＨＤＤに書き込まれるデータユニットＦ２２０が生成されるが、そのデータユニットＦ２２０では、連続した中間ダーティデータＤ２２０の先頭にステージングデータ部分Ｅ２２１が付加されている状態となる。
【００６０】
図１２Ｄに示す例によれば、連続した中間ダーティデータＤ２３０は、セグメント群の先頭及び末端のいずれの境界にも重なっていない。この場合、連続した中間ダーティデータＤ２３０よりも大きなサイズのステージングデータＥ２３０が読み出され（図１３Ｄ参照）、ＨＤＤに書き込まれるデータユニットＦ２３０が生成されるが、そのデータユニットＦ２３０では、連続した中間ダーティデータＤ２３０の先頭及び末端にステージングデータ部分Ｅ２３１及びＥ２３２が付加されている状態となる。
【００６１】
図１２Ｅ及び図１２Ｆに示す例によれば、セグメント群において、中間ダーティデータが不連続となっている。この場合、中間ダーティデータ毎に中間ダーティデータよりも大きいステージングデータが読み出されるのではなく、先頭の中間ダーティデータの先頭から末端の中間ダーティデータの末端までの範囲以上のサイズのステージングデータが読み出される。読出し回数を最大１回とするためである。従って、図１２Ｅの例によれば、先頭の中間ダーティデータＤ２４０の先頭から末端の中間ダーティデータＤ２４１の末端までの範囲より大きいステージングデータＥ２４０が読み出される（図１３Ｅ参照）。中間ダーティデータＤ２４０及びＤ２４１とステージングデータＥ２４０とを基に、ＨＤＤに書き込まれるデータユニットＦ２４０が生成される。また、図１２Ｆの例によれば、先頭の中間ダーティデータＤ２５０の先頭が、セグメント群の先頭の境界に一致し、末端の中間ダーティデータＤ２５２の末端が、セグメント群の末端の境界に一致する。このため、３２ｋＢのステージングデータＥ２５０が読み出される（図１３Ｆ参照）。中間ダーティデータＤ２５０、Ｄ２５１及びＤ２５２とステージングデータＥ２５０とを基に、ＨＤＤに書き込まれるデータユニットＦ２４１が生成される。このように、セグメント群において中間ダーティデータが不連続の場合、先頭の中間ダーティデータの先頭から末端の中間ダーティデータの末端までの範囲以上のサイズのステージングデータが読み出される。ＨＤＤに書き込まれるデータユニットＦ２４０、Ｆ２５０において、中間ダーティデータ間がステージングデータ部分で埋められている状態となる。
【００６２】
前述したセグメント群（３２ｋＢ）を構成する４個のセグメント（８ｋＢ）は、キャッシュメモリ１２０において必ずしも連続していなくても良い。例えば、キャッシュメモリ１２０において分散されている４個のセグメントがセグメント群として確保されても良い。
【００６３】
さて、次に、図１４〜図１７を参照して、ＲＡＩＤ１のＲＡＩＤグループに対する書込み処理のうちの中間まとめ書き処理の詳細な流れを説明する。中間まとめ書き処理は、データセット（ホスト装置３００からのデータ要素（５１２Ｂ）と保証コード（８Ｂ）とのセット）が生成されてからデータユニットをＨＤＤに書き込むまでの処理である。
【００６４】
図１４及び図１５は、中間まとめ書き処理の流れを示す。なお、以下、説明を分かり易くするために、１つのＷ面のセグメントに格納されている中間ダーティデータが、書込み対象であるとする。
【００６５】
ＣＰＵ１３０は、複数の中間ダーティキューのそれぞれについて、中間ダーティデータの量をチェックし、どの中間ダーティキューを処理の対象とするか決定する（ステップ４０１）。例えば、中間ダーティデータの量が最も多いと判断された中間ダーティキュー（例えば、最も多くのエントリを有する中間ダーティキュー）が、処理の対象として決定される。中間ダーティキューは、例えば、所定の単位毎（例えば、ＨＤＤ毎、又は、キャッシュメモリ１２０が論理的に分割された領域（パーティション）毎）にある。
【００６６】
次に、ＣＰＵ１３０は、ステップ４０１で決定した中間ダーティキューで管理されている中間ダーティデータのうち、最も過去にキャッシュメモリ１２０に格納された中間ダーティデータを特定する（ステップ４０２）。ここで特定された中間ダーティデータが格納されているセグメント＃１に対応したＳＧテーブル＃１は、ステップ４０１の段階では、図１６の行＃１に示す通りであり、ステップ４０２の段階では、図１６の行＃２に示す通りである。
【００６７】
次に、ＣＰＵ１３０は、セグメント＃１を含んだ３２ｋＢのセグメント群を確保する（ステップ４０３）。ここで確保されたセグメント群を、以下、「セグメント群Ｗ」と表記する。確保されたセグメント群Ｗには、データが書き込まれないよう排他制御される。この段階でのＳＧテーブル＃１は、図１６の行＃３に示す通りである。セグメント群Ｗを構成する他のセグメントは、どのようなセグメントでも良い。例えば、ステップ４０２で特定されていない中間ダーティデータが格納されているセグメントでも良い。また、書込み対象となる中間ダーティデータのサイズが３２ｋＢより大きい場合には、２以上の３２ｋＢのセグメント群が確保されても良い。
【００６８】
次に、ＣＰＵ１３０は、物理ダーティ予約数を表す情報を例えばローカルメモリ１４０に登録する（ステップ４０４）。具体的には、ＣＰＵ１３０は、中間ダーティセグメント（セグメント群Ｗにおいて中間ダーティデータが格納されているセグメント）の数の２倍の値を、物理ダーティ予約数とする。中間ダーティセグメントの数を２倍する理由は、中間ダーティデータのコピーを含んだデータユニットがやがて物理ダーティデータとして管理されることと、中間ダーティデータのコピーが２つ生成される（マスターＨＤＤ２１０とミラーＨＤＤ２２０の両方について生成される）ことがある。ＣＰＵ１３０は、物理ダーティ予約数と、既に物理ダーティデータが存在するセグメントの数とを合計し、その合計が一定値を超える場合、物理ダーティデータを生成する動作を中止して良い。なお、このステップ４０４でのＳＧテーブル＃１は、図１６の行＃４に示す通りである。
【００６９】
次に、ＣＰＵ１３０は、書込み対象の中間ダーティデータの書込み先のＲＡＩＤグループのＲＡＩＤレベルを判定する（ステップ４０５）。このステップ４０５でのＳＧテーブル＃１は、図１６の行＃５に示す通りである。
【００７０】
ＲＡＩＤレベルがＲＡＩＤ１系ではない場合（ステップ４０５：ＮＯ）、ＣＰＵ１３０は、ＲＡＩＤレベルに従って中間ダーティデータを処理する（ステップ４０６）。
【００７１】
ＲＡＩＤレベルがＲＡＩＤ１系の場合（ステップ４０５：ＹＥＳ）、ＣＰＵ１３０は、ステージングデータが必要かどうかを判断する（ステップ４０７）。このステップ４０７でのＳＧテーブル＃１は、図１６の行＃６に示す通りである。
【００７２】
ステップ４０７の判断の結果は、セグメント群Ｗの全域を連続した中間ダーティデータが占めていれば（図１２Ａ参照）、否定的となり（ステップ４０７：ＮＯ）、それ以外であれば、肯定的となる（ステップ４０７：ＹＥＳ）。
【００７３】
ＣＰＵ１３０は、ステージングデータが必要である場合（ステップ４０７：ＹＥＳ）、キャッシュメモリ１２０から、ステージングデータを記憶するためのセグメント群（以下、セグメント群Ｒ１）を確保する（ステップ４０８）。このステップ４０８でのＳＧテーブル＃１は、図１６の行＃７に示す通りである。行＃７には、ＳＧテーブル＃１の他に、セグメント群Ｒ１における１つのセグメント＃２に対応したＳＧテーブル＃２（ステップ４０８でのＳＧテーブル＃２）も示されている。なお、ＣＰＵ１３０は、セグメント群Ｒ１を確保できない場合、ステージングデータの読み出しを中止する。
【００７４】
次に、ＣＰＵ１３０は、中間ダーティデータの状態から、マスターＨＤＤ２１０（又はミラーＨＤＤ２２０）における、ステージングデータの読出し元のＳＡＴＡブロック群、を決定して、決定したＳＡＴＡブロック群の全域からセグメント群Ｒ１にステージングデータを読み出す（ステップ４０９）。中間ダーティデータの状態（例えば、図１２Ａ〜図１２Ｆに例示した状態）は、セグメント群Ｗに対応した複数のＳＧテーブルにおけるマップ１４０ｂから判別することができる。また、読出し元のＳＡＴＡブロック群は、中間ダーティデータの書込み先を含んだＳＡＴＡブロック群である。また、読出し元のＳＡＴＡブロック群のサイズは、中間ダーティデータのサイズ以上の範囲で最小のサイズ（但し、ＳＡＴＡブロックのサイズの倍数）である。このステップ４０９では、ＳＧテーブル＃１及び＃２は、図１６の行＃８に示す通りである。具体的には、ステージングデータは二重化されたＤＫＣ１００の両方のキャッシュメモリ１２０で保持されるので、フラグ１４０ｅが“１”となっている。
【００７５】
ＣＰＵ１３０は、セグメント群Ｗ内の中間ダーティデータが連続かどうかを判定する（ステップ４１０）。このステップ４１０でのＳＧテーブル＃１及び＃２は、図１６の行＃９に示す通りである。
【００７６】
中間ダーティデータが不連続な場合（ステップ４１０：ＮＯ）、ＣＰＵ１３０は、キャッシュ間コピーを行う（図１５のステップ４１１）。具体的には、図１８に示すように、ＣＰＵ１３０は、中間ダーティデータ間をステージングデータ部分で埋めるよう、セグメント群Ｒ１におけるステージングデータ部分を、セグメント群Ｗにコピーする。これにより、セグメント群Ｗから後述のセグメント群Ｒ２へのコピーのための連続したデータができる。なお、このステップ４１１でのＳＧテーブル＃１及び＃２は、図１６の行＃１０に示す通りである。
【００７７】
ＣＰＵ１３０は、ステージングデータ部分がセグメント群Ｗに正常にコピーされたかどうかを判定する（ステップ４１２）。このステップ４１０でのＳＧテーブル＃１及び＃２は、図１６の行＃１１に示す通りである。
【００７８】
ＣＰＵ１３０は、キャッシュ間コピーが正常に行われた場合（ステップ４１２：ＹＥＳ）ステップ４１３以降を行う。一方、ＣＰＵ１３０は、キャッシュ間コピーが正常に行われなかった場合（ステップ４１２：ＮＯ）ステップ４１７を行う。ステップ４１７では、ＣＰＵ１３０は、コピーに失敗したデータを、所定の退避領域（例えば不揮発性の記憶領域）に格納する。この退避領域内のデータは、ＣＰＵ１３０により、後に、コピー（データユニットの生成）が再実行されて良い（つまり、退避領域からセグメント群Ｗ、Ｒ１又はＲ２にデータがコピーされても良い）。退避領域は、ＤＫＣが有していても良いし、ＨＤＤの一部が使用されても良い。
【００７９】
キャッシュ間コピーが正常に行われた場合（ステップ４１２：ＹＥＳ）、ＣＰＵ１３０は、キャッシュメモリ１２０から、ミラーＨＤＤ用のセグメント群（以下、セグメント群Ｒ２）を確保する（ステップ４１３）。このステップ４１３でのＳＧテーブル＃１及び＃２は、図１７の行＃１２に示す通りである。行＃１２には、ＳＧテーブル＃１及び＃２の他に、セグメント群Ｒ２における１つのセグメント＃３に対応したＳＧテーブル＃３（ステップ４１３でのＳＧテーブル＃３）も示されている。なお、ＣＰＵ１３０は、セグメント群Ｒ２を確保できない場合、処理を中断する、或いは、フリーのセグメントを増やすべく物理ダーティデータをＨＤＤに書き込む処理を行う等をして良い。
【００８０】
ＣＰＵ１３０は、マスターＨＤＤ２１０に書き込むためのデータユニットと、ミラーＨＤＤ２２０に書き込むためのデータユニットとを生成する（ステップ４１４）。このステップ４１４でのＳＧテーブル＃１〜＃３は、図１４の行＃１３に示す通りである。なお、マップ１４０ｂの「ダーティマップ＋」とは、ＳＧテーブル＃２及び＃３で管理されているデータが同一であることを示す。
【００８１】
ステップ４１４では、例えば下記の処理が行われる。
（＊）ＣＰＵ１３０は、セグメント群Ｒ１内のステージングデータにセグメント群Ｗ内の連続データを上書きし、且つ、セグメント群Ｒ２に連続データをコピーする。これにより、セグメント群Ｒ１においてマスターＨＤＤ２１０用のデータユニット（以下、マスターデータユニット）が生成され、且つ、セグメント群Ｒ２に連続データが存在することとなる。なお、セグメント群Ｗ内の連続データとしては、連続した中間ダーティデータで構成されているデータもあれば、不連続の中間ダーティデータとステージングデータ部分とで構成されたデータであることもある。
（＊）ＣＰＵ１３０は、セグメント群Ｒ１内におけるステージングデータ部分（ステージングデータにおいて連続データが上書きされなかった部分）を、セグメント群Ｒ２にコピーする。これにより、セグメント群Ｒ２においてミラーＨＤＤ２２０用のデータユニット（以下、ミラーデータユニット）が生成される。
【００８２】
ＣＰＵ１３０は、マスターデータユニット又はミラーデータユニットの生成が正常に行われたかを判断する（ステップ４１５）。このステップ４１４でのＳＧテーブル＃１〜＃３は、図１４の行＃１４に示す通りである。
【００８３】
ＣＰＵ１３０は、マスターデータユニット及びミラーデータユニットの少なくとも一方が正常に行われなかった場合（ステップ４１５：ＮＯ）、前述したステップ４１７の処理を行う。
【００８４】
ＣＰＵ１３０は、マスターデータユニット及びミラーデータユニットの生成が正常に行われた場合（ステップ４１５：ＹＥＳ）、マスターデータユニット及びミラーデータユニットのそれぞれの属性を物理ダーティデータに遷移する（ステップ４１６）。具体的には、例えば、ＣＰＵ１３０は、マスターデータユニットを格納している１以上のセグメントやミラーデータユニットを格納している１以上のセグメントを物理ダーティキューで管理するようにする。なお、このステップ４１６でのＳＧテーブル＃１〜＃３は、図１４の行＃１５に示す通りである。
【００８５】
その後、ＣＰＵ１３０は、セグメント群Ｗを解放する（ステップ４１８）。これにより、セグメント群Ｗを構成する各セグメントが、フリーのセグメントとして管理される。フリーのセグメントは確保されることが可能である。このステップ４１８でのＳＧテーブル＃１〜＃３は、図１４の行＃１６に示す通りである。行＃１６のＳＧテーブル＃１によれば、解放されたセグメント群Ｗにおけるセグメント＃１がフリーのセグメントとして管理される。
【００８６】
以上が、中間まとめ書き処理の流れである。この中間まとめ書き処理の後、ＣＰＵ１３０は、マスターデータユニット（物理ダーティデータ）をマスターＨＤＤ２１０に書き込み、且つ、ミラーデータユニット（物理ダーティデータ）をミラーＨＤＤ２２０に書き込む。
【００８７】
本実施例によれば、ＲＡＩＤ１のＲＡＩＤグループに対する書込み処理において、マスターＨＤＤ及びミラーＨＤＤの一方からのステージングデータの読み出しを不要とし、且つ、読出し回数を最大１回とすることができる。これにより、ＨＤＤ及びＤＫＣ１００の両方の負荷を軽減することができる。
【００８８】
以上、本発明の一実施例を説明したが、本発明は、この実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【００８９】
例えば、セグメント群Ｗの全域が、連続した中間ダーティデータで占められている場合、セグメント群Ｗ内の中間ダーティデータが物理ダーティデータとして管理され、その後に、その物理ダーティデータがマスターＨＤＤ（又はミラーＨＤＤ）に書き込まれても良い。或いは、セグメント群Ｒ１が確保され、セグメント群Ｗからセグメント群Ｒ１へのデータコピーが行われ、セグメント群Ｒ１内のデータが物理ダーティデータとして管理され、その後に、物理ダーティデータがマスターＨＤＤ（又はミラーＨＤＤ）に書き込まれても良い。
【符号の説明】
【００９０】
１Ｂ…ストレージ装置
【図１】
0005438820.tif 000002
【図２】
0005438820.tif 000003
【図３】
0005438820.tif 000004
【図４】
0005438820.tif 000005
【図５】
0005438820.tif 000006
【図６】
0005438820.tif 000007
【図７】
0005438820.tif 000008
【図８】
0005438820.tif 000009
【図９】
0005438820.tif 000010
【図１０】
0005438820.tif 000011
【図１１】
0005438820.tif 000012
【図１２】
0005438820.tif 000013
【図１３】
0005438820.tif 000014
【図１４】
0005438820.tif 000015
【図１５】
0005438820.tif 000016
【図１６】
0005438820.tif 000017
【図１７】
0005438820.tif 000018
【図１８】
0005438820.tif 000019