(57)【特許請求の範囲】
【請求項１】
上位装置から送信されたデータを一時的に記憶する複数の第１の記憶手段を有し前記データを前記第１の記憶手段に分散して記憶する記憶装置において、
複数の前記第１の記憶手段それぞれに記憶された前記データを含むデータ群を一括して出力するデータ群出力手段と、
複数の第２の記憶手段による冗長構成を有し前記データ群を記憶するデータ群記憶手段と、
前記第１の記憶手段の使用状況に応じて、前記データ群を複数の前記第１の記憶手段から読み出して前記データ群記憶手段に退避し、または、退避した前記データ群を複数の前記第１の記憶手段に分散して記憶する退避・記憶処理手段と、
前記データ群記憶手段に含まれる前記第２の記憶手段のうちリビルドの対象となるリビルド対象記憶手段に対するリビルド処理を、前記リビルド対象記憶手段の有する複数の記憶領域に対して記憶領域毎に実行する制御を行なうとともに、前記リビルド動作中に新たな世代のデータ群を記憶するために必要と予測される前記リビルド対象記憶手段における空き記憶領域量に応じて前記リビルド処理の実行を制御する際に、前記データ群が記憶されていない前記記憶領域に対するリビルド処理をスキップするリビルド制御手段と、
を備える記憶装置。
【請求項２】
前記リビルド制御手段は、前記リビルド対象記憶手段の有する複数の記憶領域の１つに対してリビルド動作中に新たな世代のデータ群を記憶するために必要と予測される空き記憶領域量が一定量に満たない場合、前記リビルド処理を中断する、ことを特徴とする請求項１に記載の記憶装置。
【請求項３】
上位装置から送信されたデータを一時的に分散して記憶するとともに、記憶された前記データを含むデータ群が一括して出力される複数の第１の記憶手段毎に有する制御装置において、
前記第１の記憶手段の使用状況に応じて、複数の第２の記憶手段による冗長構成を有し前記データ群を記憶する前記データ群記憶手段に前記第１の記憶手段に記憶された前記データを退避するデータ退避処理を実行するとともに他の制御装置に対して前記データ退避処理の実行を指示し、または、退避した前記データを前記第１の記憶手段に記憶するデータ記憶処理を実行するとともに前記他の制御装置に対して前記データ記憶処理の実行を指示する退避・記憶処理手段と、
前記他の制御手段からの指示により、前記データ群記憶手段に前記第１の記憶手段に記憶された前記データを退避し、または、退避した前記データを前記第１の記憶手段に記憶するデータ記憶処理を実行する退避・記憶処理手段と、
前記データ群記憶手段に含まれる前記第２の記憶手段のうちリビルドの対象となるリビルド対象記憶手段に対するリビルド処理を、前記リビルド対象記憶手段の有する複数の記憶領域に対して記憶領域毎に実行する制御を行なうとともに、前記リビルド動作中に新たな世代のデータ群を記憶するために必要と予測される前記リビルド対象記憶手段における空き記憶領域量に応じて前記リビルド処理の実行を制御する際に、前記データ群が記憶されていない前記記憶領域に対するリビルド処理をスキップするリビルド制御手段と、
を備える制御装置。
【請求項４】
上位装置から送信されたデータを一時的に記憶する複数の第１の記憶手段を有し前記データを前記第１の記憶手段に分散して記憶する記憶装置を制御する制御方法において、
複数の前記第１の記憶手段それぞれに記憶された前記データを含むデータ群を一括して出力し、
前記第１の記憶手段の使用状況に応じて、複数の第２の記憶手段による冗長構成を有し前記データ群を記憶するデータ群記憶手段に、前記第１の記憶手段から読み出した前記データ群を退避し、または、退避した前記データ群を複数の前記第１の記憶手段に分散して記憶し、
前記データ群記憶手段に含まれる前記第２の記憶手段のうちリビルドの対象となるリビルド対象記憶手段に対するリビルド処理を、前記リビルド対象記憶手段の有する複数の記憶領域に対して記憶領域毎に実行する制御を行なうとともに、前記リビルド動作中に新たな世代のデータ群を記憶するために必要と予測される前記リビルド対象記憶手段における空き記憶領域量に応じて前記リビルド処理の実行を制御する際に、前記データ群が記憶されていない前記記憶領域に対するリビルド処理をスキップするリビルド制御手段と、
ことを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、順序性を保証した非同期のコピー機能を有する記憶装置、制御装置および記憶装置の制御方法に関する。
【背景技術】
【０００２】
従来、分散キャッシュメモリ型のストレージシステムを採用するＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）装置では、性能や信頼性の向上のために、ストレージに対するデータの入出力を制御する制御モジュールを複数備える冗長構成が採用されている。そして、制御モジュール毎に、論理ボリュームに対するデータのＲｅａｄ／Ｗｒｉｔｅ処理が実行される。
【０００３】
このようなＲＡＩＤ装置は、信頼性等の向上のために、アドバンスト・コピーといわれる順序性を保証したリモートコピー機能を備える。
図２３は、順序性を保証したリモートコピー機能を備えるＲＡＩＤ装置を説明する図である。なお、図２３は、制御モジュール＃００および＃０１を備えるＲＡＩＤ装置２３０１と、制御モジュール＃１０および＃１１を備えるＲＡＩＤ装置２３０２と、で構成されるストレージシステムを示している。
【０００４】
各ＲＡＩＤ装置は、バッファおよびＢＩＴ（Ｂｕｆｆｅｒ  Ｉｎｄｅｘ  Ｔａｂｌｅ）を有する記録専用バッファと、バッファセットに関する情報を記憶するバッファセット情報記憶部と、データを記憶する記憶媒体と、を備える。
【０００５】
バッファは、一定サイズの複数の領域に分割されている。分割された各領域には、それぞれバッファＩＤが割り当てられる。そして、領域毎に、記憶媒体に記憶しまたは記憶するデータが一時的に記憶される。また、ＢＩＴ記憶部は、バッファに記憶したデータの記憶場所、図２３ではバッファＩＤなどを含む情報であるＢＩＴを記憶する。
【０００６】
なお、図２３のバッファに記載されている（００００）は、バッファＩＤが００００のバッファに記憶されたバッファデータを表している。また、ＢＩＴに記載されている００００は、バッファＩＤを表している。
【０００７】
バッファセット情報記憶部は、各制御モジュールのバッファに記憶されたバッファデータの組合わせ、例えば、コピー元装置２３０１の横長に点線で囲われたバッファデータ（００００）と（０１００）との組合わせであるバッファセットに関する情報を記憶する。
【０００８】
このバッファセットに関する情報には、各バッファデータと各バッファデータを記憶するコピー先装置２３０２のバッファとの関連付け情報が含まれる。例えば、制御モジュール＃００のバッファセット情報記憶部で、バッファＩＤが００００のバッファに記憶されているバッファデータと、そのバッファデータを記憶するバッファＩＤが１０００のバッファと、が関連付けられている。
【０００９】
以上の構成において、（ａ）制御モジュール＃００および＃０１は、ホストコンピュータ等からＷｒｉｔｅ  Ｉ／Ｏ命令を受付けると、そのＷｒｉｔｅ  Ｉ／Ｏ命令にしたがってＷｒｉｔｅデータを記憶媒体に記憶する。
【００１０】
同時に、（ｂ）制御モジュール＃００および＃０１は、Ｗｒｉｔｅデータを転送してバッファに記憶する。この時、Ｗｒｉｔｅデータは、バッファセット単位で管理される。
そして、（ｃ）バッファへのＷｒｉｔｅデータの書込みが完了すると、制御モジュール＃００および＃０１は、そのＷｒｉｔｅデータについて、バッファセット単位でデータ転送、すなわち、リモートコピーを開始する。
【００１１】
（ｄ）リモートコピーによってコピー元装置２３０１から送られたＷｒｉｔｅデータは、バッファセット情報にしたがって、コピー先装置２３０２の制御モジュール＃１０および＃１１に備わるバッファに記憶される。すると、制御モジュール＃１０および＃１１は、バッファに記憶されたＷｒｉｔｅデータを記憶媒体に反映する。
【００１２】
以上の処理が完了すると、（ｅ）コピー元装置２３０１およびコピー先装置２３０２の各制御モジュールは、バッファなどを解放する。
以上のように、記録専用バッファを使用したまとめ方式によるデータ送信を行なって、バッファセットを一括制御し、コピー先装置２３０２において、バッファセット単位でデータを記憶媒体に展開することで、順序性が保証される。
【００１３】
上記技術に関連して、障害発生時に、論理デバイスに設定された優先度基づいて速やかにダーティデータをディスク装置に反映し、重要な業務に関するジョブを優先的に処理することにより、ホスト処理性能の低下を軽減するストレージ装置が知られている。
【００１４】
また、書き込みデータを一時的に記憶する書き込みバッファの使用状況を監視し、バッファの空き容量が少なくなるとバッファ内の情報を高速ディスクシステムに書き出し、使用状況が好転した場合に再びバッファに書き戻すバックアップ装置が知られている。
【００１５】
また、サイドファイルやキャッシュファイルのオーバーフローを防止して安全かつ効率的にディスクアレイ装置間のリモートコピーを行なう計算機システムが知られている。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開２００５−１４９４３６号公報
【特許文献２】特開２００６−２６８４２０号公報
【特許文献３】特開２００７−１４０６５１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１７】
しかし、図２４に示すように、コピー元装置２３０１では、転送済みのＷｒｉｔｅデータを記憶するバッファやＢＩＴは、コピー先装置２３０２でＷｒｉｔｅデータが記憶媒体に展開されるまで解放されずに保持される。
【００１８】
このため、（ｆ）コピー先装置２３０２においてＷｒｉｔｅデータを記憶媒体に展開する処理が遅延している場合、コピー元装置２３０１−コピー先装置２３０２間の回線能力が低いまたは不均一である場合などには、転送処理に遅延が発生する。
【００１９】
例えば、コピー元装置２３０１−コピー先装置２３０２間の回線帯域の低さや不安定などにより転送処理に遅延が発生すると、その分コピー元装置２３０１やコピー先装置２３０２のバッファやＢＩＴを使用する時間が長くなるので、その間メモリの解放ができなくなる。
【００２０】
（ｇ）このような状態でホストコンピュータ等から新たにＷｒｉｔｅ  Ｉ／Ｏ命令を受けると、コピー元装置２３０１は、そのＷｒｉｔｅ  Ｉ／Ｏ命令を受ける度に、Ｗｒｉｔｅデータをバッファに記憶する。その結果、コピー元装置２３０１のバッファは次々と消費されていく。
【００２１】
（ｈ）この状態が続くと、Ｗｒｉｔｅデータを記憶可能なバッファを確保できなくなり、コピー元装置２３０１のバッファ枯渇が発生してしまう。また、設定されているバッファの大きさ以上に大きいＷｒｉｔｅデータを処理する場合も、同様にバッファ枯渇が発生してしまう。
【００２２】
バッファ枯渇の状態では、ホストコンピュータ等からのＷｒｉｔｅ  Ｉ／Ｏ命令をコピー元装置２３０１が処理せずに止まっている状態であるため、この状態を長く継続することはできない。
【００２３】
そのため、（ｉ）一時的にＷｒｉｔｅ  Ｉ／Ｏ命令の処理を停止し、かつ、一定時間経過してもバッファ枯渇状態が解消されない場合は、バッファＨａｌｔ処理が行なわれる。コピー元装置２３０１およびコピー先装置２３０２は、バッファＨａｌｔ処理を行なって、バッファをクリアするとともにＷｒｉｔｅ  Ｉ／Ｏ命令の処理を再開する。
【００２４】
この時、コピー元装置２３０１は、バッファ内のＷｒｉｔｅデータ等の情報を専用のビットマップに書き戻す。そして、コピー元装置２３０１は、バッファＨａｌｔ処理を実行後にそのビットマップにしたがって順序性を保証しないリモートコピー転送を行なう。この場合、順序性を保証したリモートコピーが中断されてしまう、という問題がある。
【００２５】
本ストレージシステムは、上述した問題に鑑みてなされたものであり、その解決しようとする課題は、データの転送処理に遅延が生じる場合でも、順序性を保証したリモートコピーを行なうことができる記憶装置、制御装置および記憶装置の制御方法を提供することである。
【課題を解決するための手段】
【００２６】
上記課題を解決するために、本記憶装置は、データを一時的に記憶する複数の第１の記憶手段を有し前記データを前記第１の記憶手段に分散して記憶する記憶装置である。
そして、本記憶装置は、データ群出力手段と、データ群記憶手段と、退避・記憶処理手段と、リビルド制御手段と、を備える。
【００２７】
データ群出力手段は、複数の前記第１の記憶手段それぞれに記憶された前記データを含むデータ群を一括して出力する。
データ群記憶手段は、複数の第２の記憶手段による冗長構成を有し前記データ群を記憶する。
【００２８】
退避・記憶処理手段は、前記第１の記憶手段の使用状況に応じて、前記データ群を複数の前記第１の記憶手段から読み出して前記データ群記憶手段に退避し、または、退避した前記データ群を複数の前記第１の記憶手段に分散して記憶する。
【００２９】
リビルド制御手段は、前記データ群記憶手段に含まれる前記第２の記憶手段のうちリビルドの対象となるリビルド対象記憶手段に対するリビルド処理を、前記退避・記憶処理手段による前記リビルド対象記憶手段の使用状況に応じて制御する。
【発明の効果】
【００３０】
本ストレージシステムによると、データの転送処理に遅延が生じる場合でも、順序性を保証したリモートコピーを行なうことができる。
【図面の簡単な説明】
【００３１】
【図１】ストレージシステムの構成の概要を示す図である。
【図２】制御モジュールが備えるメモリの具体的な構成例を示す図である。
【図３】バッファ管理テーブルの構成例を示す図である。
【図４】バッファセット管理テーブルの構成例を示す図である。
【図５】退避用バッファ管理テーブルの構成例を示す図である。
【図６】退避用バッファの構成例を示す図である。
【図７】退避用バッファの構成例を示す図である。
【図８】退避用バッファを説明する図である。
【図９】バッファ退避処理を説明する図である。
【図１０】バッファ退避処理を説明する図である。
【図１１Ａ】リモートコピーの概要を示すフローチャートである。
【図１１Ｂ】リモートコピーの概要を示すフローチャートである。
【図１２】退避用バッファの領域を生成する処理を示すフローチャートである。
【図１３】退避用バッファの制御モジュールへの割り当ての具体的な処理を示すフローチャートである。
【図１４】バッファ退避処理におけるライトバックポインタ情報・ステージポインタ情報を説明する図である。
【図１５】ライトバックポインタ情報の更新処理を示すフローチャートである。
【図１６】ステージポインタ情報の更新処理を示すフローチャートである。
【図１７】ライトバックを示すフローチャートである。
【図１８】ライトバックの具体例を示す図である。
【図１９】ライトバックの具体例を示す図である。
【図２０Ａ】ステージングを示すフローチャートである。
【図２０Ｂ】ステージングを示すフローチャートである。
【図２１】退避用バッファに対するリビルド処理を示すフローチャートである。
【図２２】図１１Ｂに示したマッチング処理の具体的な処理を示すフローチャートである。
【図２３】順序性を保証したリモートコピー機能を備えるＲＡＩＤ装置を説明する図である。
【図２４】順序性を保証したリモートコピー機能を備えるＲＡＩＤ装置を説明する図である。
【発明を実施するための形態】
【００３２】
以下、本実施形態の一例について、図１〜図２２に基づいて説明する。
図１は、本実施例に係るストレージシステム１００の構成の概要を示す図である。
図１に示すストレージシステム１００は、ＲＡＩＤ装置１１０と、ＲＡＩＤ装置１１０とネットワークまたは専用線１３０を介して通信可能に接続するＲＡＩＤ装置１２０と、を備える。
【００３３】
ＲＡＩＤ装置１１０は、キャッシュメモリ等に使用されるメモリを有する制御モジュール＃００〜＃０３と、磁気ディスク装置などの記憶装置で構成されるディスク装置１１７と、退避用バッファ１１８と、を備える分散キャッシュメモリ型のＲＡＩＤ装置である。
【００３４】
制御モジュール＃００〜＃０３は、ディスク装置１１７および退避用バッファ１１８と接続する。退避用バッファ１１８には、待機系ディスク装置１１９も含まれるが、図１では明示的に示している。なお、退避用バッファ１１８と待機系ディスク装置１１９とは、互いに独立した装置であってもよい。
【００３５】
制御モジュール＃００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１１ａと、メモリ１１２ａと、ＣＡ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｅｒ）１１３ａと、ＲＡ（Ｒｅｍｏｔｅ  Ａｄａｐｔｅｒ）１１４ａと、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）１１５ａおよび１１６ａと、を備える。
【００３６】
ＣＰＵ１１１ａは、所定のプログラム命令を実行して制御モジュール＃００を動作させ、本実施例に係る順序性を保証したリモートコピーを実現する。
メモリ１１２ａは、キャッシュメモリに使用される他に、後述する記録専用バッファ２０１やバッファセット情報記憶部２０２などに使用されるメモリである。
【００３７】
ＣＡ１１３ａは、ＲＡＩＤ装置１１０と接続するホストコンピュータであるホスト１５０に対するインターフェース制御部である。また、ＲＡ１１４ａは、ネットワークまたは専用線１３０を介して接続される他のＲＡＩＤ装置等に対するインターフェース制御部である。
【００３８】
ＦＣ１１５ａおよび１１６ａは、ディスク装置１１７や退避用バッファ１１８とのインターフェース制御部である。本実施例では、ＦＣ１１５ａはディスク装置１１７と接続し、ＦＣ１１６ａは退避用バッファ１１８と接続する。
【００３９】
ＲＡＩＤ装置１１０に備わる他の制御モジュール＃０１〜＃０３、ＲＡＩＤ装置１２０に備わる制御モジュール＃００〜＃０３も、上述したＲＡＩＤ装置１１０に備わる制御モジュール＃００と同様の構成である。ただし、コピー先装置１２０は、退避用バッファを備えなくてもよい。
【００４０】
以上の構成において、例えば、「データ群出力手段」や「退避・記憶処理手段」、「リビルド制御手段」などは、ＣＰＵ１１１ａがメモリ１１２ａ上の所定の領域に展開されたプログラム命令を実行することによって実現することができる。
【００４１】
「データ群」は、バッファセットデータを用いて実現することができる。
「データ群記憶手段」は、退避用バッファ１１８の一部または全部を用いて実現することができる。「データ群記憶手段」は、ディスク装置１１７の一部を用いて実現してもよい。
【００４２】
「第１の記憶手段」などは、メモリ１１２ａの一部の領域を用いて実現することができる。
なお、図１では、ＲＡＩＤ装置１１０および１２０が４つの制御モジュール＃００〜＃０３を備える場合について示しているが、これに限定する趣旨ではない。ＲＡＩＤ装置１１０および１２０は、分散キャッシュメモリ型のＲＡＩＤ装置であればよい。ＣＰＵ、ＣＡ、ＲＡおよびＦＣの数についても、図１に示す数に限定する趣旨ではない。
【００４３】
以下の実施例では、ＲＡＩＤ装置１１０からＲＡＩＤ装置１２０にリモートコピーを行なう場合について説明する。そして、この場合のＲＡＩＤ装置１１０を「コピー元装置１１０」といい、ＲＡＩＤ装置１２０を「コピー先装置１２０」という。
【００４４】
図２は、本実施例に係る制御モジュールが備えるメモリ２００、例えば、図１に示したＲＡＩＤ装置１１０の制御モジュール＃００に備わるメモリ１１２ａの具体的な構成例を示す図である。
【００４５】
なお、ＲＡＩＤ装置１１０の各制御モジュール＃０１〜＃０３に備わるメモリ１１２ｂ、１１２ｃおよび１１２ｄ、ＲＡＩＤ装置１２０の各制御モジュール＃００〜＃０３に備わるメモリ１２２ａ、１２２ｂ、１２２ｃおよび１２２ｄも、図２と同様の構成でもよい。
【００４６】
図２に示すメモリ２００は、記録専用バッファ２０１と、バッファセット情報記憶部２０２と、を備える。また、メモリ２００は、バッファ管理テーブル記憶部２０３と、バッファセット管理テーブル記憶部２０４と、退避用バッファ管理テーブル記憶部２０５と、未使用バッファＩＤ記憶部２０６と、を備える。
【００４７】
記録専用バッファ２０１は、バッファ２０１ａとＢＩＴ記憶部２０１ｂとを備える。
バッファ２０１ａは、ディスク装置１１７などに記憶するもしくは記憶したデータ、例えば後述するＷｒｉｔｅデータなどを一時的に記憶する。本実施例に係るバッファ２０１ａは、一定のサイズを有する８つの領域に区分されている。この区分された領域毎に固有の識別情報が割り当てられる。なお、本実施例ではバッファ２０１ａが８つの領域に区分される場合を例に説明するが、バッファ２０１ａが８つの領域に区分される構成に限定する趣旨でないのは当然である。
【００４８】
以下、この区分された領域を「個別バッファ」という。また、個別バッファに割り当てられる識別情報を「バッファＩＤ」という。そして、任意のバッファＩＤが示す個別バッファに記憶されたデータを「バッファデータ」という。
【００４９】
例えば、図２のバッファ２０１ａ内に記載の（００００）、（０００１）、（０００２）、・・・に関し、括弧内の数字００００、０００１、０００２、・・・は、個別バッファ毎に割当てられたバッファＩＤを示す。括弧付きの数字（００００）、（０００１）、（０００２）、・・・は、それぞれ括弧内のバッファＩＤが示す個別バッファに記憶されたバッファデータを意味している。
【００５０】
ＢＩＴ記憶部２０１ｂは、バッファ２０１ａ内の個別バッファに記憶されているバッファデータが展開されているＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）やＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）、データサイズ、コピーセッションの番号などを含むＢＩＴを記憶する。
【００５１】
ＢＩＴ記憶部２０１ｂに記載の００００、０００１、０００２、・・・はバッファ２０１ａ内の各個別バッファに割当てられたバッファＩＤを示している。例えば、ＢＩＴ記憶部２０１ｂ内の００００は、バッファＩＤが００００の個別バッファに記憶されているバッファデータが展開されているＬＵやＬＢＡ、データサイズ、コピーセッションの番号などを含むＢＩＴを記憶している。
【００５２】
バッファセット情報記憶部２０２は、同一ＲＡＩＤ装置内の各制御モジュールの個別バッファの組み合わせであって次に使用するものを示す識別情報、すなわち、後述するバッファセットＩＤを記憶する。
【００５３】
以下、同一ＲＡＩＤ装置内の各制御モジュールの個別バッファの組み合わせを、「バッファセット」という。また、バッファセットに割り当てられる識別情報を「バッファセットＩＤ」という。そして、バッファセットに関する情報を「バッファセット情報」という。さらに、バッファセットに記憶されるバッファデータを総じて「バッファセットデータ」という。
【００５４】
本実施例では、各制御モジュールのバッファ２０１ａに８個の個別バッファが備わっているので、バッファセットも８個となる。説明を簡単にするために、バッファセットＩＤは、後述するマスタ制御モジュールの個別バッファのバッファＩＤと同一であるとする。
【００５５】
バッファセット情報には、ＲＡＩＤ装置間でリモートコピーを行なう場合の、コピー元装置１１０に実装されている制御モジュールに備わる個別バッファと、コピー先装置１２０に実装されている制御モジュールに備わる個別バッファと、を関連付ける情報も含まれる。この関連付ける情報をバッファセット情報に含める処理を「マッチング処理」という。
【００５６】
以下、コピー元装置１１０に実装されている制御モジュールに備わる個別バッファのバッファＩＤを、「コピー元ＩＤ」という。同様に、コピー先装置１２０に実装されている制御モジュールに備わる個別バッファのバッファＩＤを、「コピー先ＩＤ」という。
【００５７】
例えば、ＲＡＩＤ装置１１０は、分散キャッシュメモリ型のＲＡＩＤ装置なので、Ｗｒｉｔｅデータ等のデータを、各制御モジュールの個別バッファ、図２の例ではバッファＩＤが００００、０１００、０２００および０３００の個別バッファに分散して記憶する。
【００５８】
この場合、バッファセット情報記憶部２０２には、バッファＩＤが００００、０１００、０２００および０３００の個別バッファを含むバッファセットを表すバッファセット情報が記憶される。
【００５９】
そして、そのバッファセット情報には、例えば、コピー元ＩＤとコピー先ＩＤが、それぞれ００００と１０００、０１００と１１００、０２００と１２００、０３００と１３００であるという組み合わせ情報が含まれる。
【００６０】
なお、図２のバッファセット情報記憶部２０２に記憶されているバッファＩＤ００００、０１００、０２００および０３００は、それぞれコピー元装置１１０に実装されている制御モジュール＃００、＃０１、＃０２および＃０３に備わる個別バッファを示すものとする。
【００６１】
また、図２のバッファセット情報記憶部２０２に記憶されているバッファＩＤ１０００、１１００、１２００および１３００は、それぞれコピー先装置１２０に実装されている制御モジュール＃００、＃０１、＃０２および＃０３に備わる個別バッファを示すものとする。
【００６２】
本実施例に係るリモートコピーは、バッファセット単位で行なわれる。このバッファセット単位のコピー対象データには、記録専用バッファ２０１に記憶されているＢＩＴおよびバッファデータと、バッファセット情報記憶部２０２に記憶されているバッファセット情報と、が含まれる。
【００６３】
本実施例では、このバッファセット単位のコピー対象データを、１つの「世代」として管理する。この世代の具体例は、図８に示される。
バッファ管理テーブル記憶部２０３は、記録専用バッファ２０１等の管理に使用するバッファ管理テーブル３００を記憶する。バッファ管理テーブル３００については後述する。
【００６４】
バッファセット管理テーブル記憶部２０４は、バッファセットの使用状態の管理に使用するバッファセット管理テーブル４００を記憶する。バッファセット管理テーブル４００については後述する。
【００６５】
退避用バッファ管理テーブル記憶部２０５は、退避用バッファ１１８の管理に使用する退避用バッファ管理テーブル５００を記憶する。退避用バッファ管理テーブルについては後述する。
【００６６】
未使用バッファＩＤ記憶部２０６は、コピー先装置１２０に備わる未使用の個別バッファのバッファＩＤを記憶する。以下、未使用の個別バッファのバッファＩＤを「未使用バッファＩＤ」という。例えば、コピー元装置１１０は、コピー先装置１２０から未使用バッファＩＤの通知を受けると、通知された未使用バッファＩＤを未使用バッファＩＤ記憶部２０６に記憶する。
【００６７】
以上の構成において、本実施例に係るリモートコピーでは、コピー元装置１１０は、Ｗｒｉｔｅデータを記録専用バッファ２０１に記憶する処理やＷｒｉｔｅデータをコピー先装置１２０に転送するなどの処理を、バッファセット単位で一括して行なう。
【００６８】
同様に、本実施例に係るリモートコピーでは、コピー先装置１２０は、コピー元装置１１０から転送されたＷｒｉｔｅデータをディスク装置１２７に展開する処理などを、バッファセット単位で一括して行う。その結果、順序性を保証したリモートコピーが実現される。
【００６９】
なお、バッファセットを用いて順序性を保証するリモートコピーは公知の技術であり、例えば、特開２００６−２６０２９２号公報などに開示されている。
【００７０】
図３は、本実施例に係るバッファ管理テーブル３００の構成例を示す図である。
バッファ管理テーブル３００は、対象バッファセットＩＤと、ライトバックポインタ情報と、ステージポインタ情報と、を備える。
【００７１】
対象バッファセットＩＤは、現在使用しているバッファセットのバッファセットＩＤを示す情報である。ライトバックポインタ情報は、後述のライトバックの対象となる世代を示す情報である。ステージポインタ情報は、最後に後述のステージングが行なわれた世代を示す情報である。
【００７２】
図４は、本実施例に係るバッファセット管理テーブル４００の構成例を示す図である。
バッファセット管理テーブル４００は、バッファセットＩＤと、使用目的と、対象世代と、格納Ｉ／Ｏ数と、を備える。
【００７３】
使用目的は、バッファセットＩＤが示すバッファセット毎にあらかじめ設定される使用目的である。例えば、ステージングに使用する場合には「ステージング」が設定される。同様に、ライトバックに使用する場合には「ライトバック」が設定され、Ｗｒｉｔｅデータのコピーデータを単に記憶する場合には「記憶」が設定される。
【００７４】
対象世代は、使用目的に設定された処理を行なう対象の世代である。格納Ｉ／Ｏ数は、バッファセットに記憶されているＩ／Ｏの数である。対象世代および格納Ｉ／Ｏ数は、例えば、Ｗｒｉｔｅデータをバッファセットに記憶する毎に、コピー元装置１１０によって更新される。
なお、図４に示す「−」は、未使用を設定する場合の例を示している。
【００７５】
図５は、本実施例に係る退避用バッファ管理テーブル５００の構成例を示す図である。
退避用バッファ管理テーブル５００は、退避用バッファ１１８に記憶可能なコピー対象データの最大世代数と、退避用バッファ１１８内の記憶領域であって制御モジュール毎に割り当てられた記憶領域の先頭アドレスを定義した退避位置と、を備える。
最大世代数は、退避用バッファ１１８の初期化時などに決定される。
【００７６】
以下、退避用バッファ１１８内に制御モジュール毎に割り当てられた記憶領域であって１世代分の記憶領域を、「個別退避用バッファ」という。例えば、図６に記載されているＬＵ＃０において、３つに分けられた記憶領域それぞれが個別退避用バッファである。
【００７７】
図６および図７は、本実施例に係る退避用バッファ１１８の構成例を示す図である。なお、図６および図７では、制御モジュール＃００〜＃０３を、記録専用バッファ２０１のバッファ２０１ａのみを示す簡略化した模式図で示しているが、図６および図７に示す構成に限定する趣旨ではない。また、制御モジュール＃００〜＃０３をまたぐ点線は、１世代分のバッファセットを示している。
【００７８】
図６は、退避用バッファ１１８を１つのＲＡＩＤグループで構成する場合の構成例を示す図である。
図６に示す退避用バッファ１１８として用いられるＲＡＩＤグループ６００は、論理ユニットＬＵ＃０〜ＬＵ＃Ｆを有する。また、横長に点線で囲まれたＬＵ＃０−ＬＵ＃３と、ＬＵ＃４−ＬＵ＃７と、ＬＵ＃８−ＬＵ＃Ｂと、ＬＵ＃Ｃ−ＬＵ＃Ｆと、がそれぞれボリュームグループを構成する。
【００７９】
ＲＡＩＤグループ６００は、ボリュームグループ単位で使用される。また、制御モジュール毎に、記録専用バッファに対するボリュームグループが割り当てられている。
例えば、図６に示すＲＡＩＤグループ６００では、制御モジュール＃００の記録専用バッファに、論理ユニットＬＵ＃０、＃４、＃８および＃Ｃが割り当てられている。また、制御モジュール＃０１の記録専用バッファに、論理ユニットＬＵ＃１、＃５、＃９および＃Ｄが割り当てられている。
【００８０】
同様に、制御モジュール＃０２の記録専用バッファに、論理ユニットＬＵ＃２、＃６、＃Ａおよび＃Ｅが割り当てられている。そして、制御モジュール＃０３の記録専用バッファに、論理ユニットＬＵ＃３、＃７、＃Ｂおよび＃Ｆが割り当てられている。
【００８１】
ボリュームグループを構成する論理ユニットの数が実装制御モジュールの数を上回る場合は、１つの制御モジュールに対して複数の論理ユニットを割り当ててもよい。また、各ボリュームグループを構成する論理ユニットは、図８で示すように、バッファデータを記憶する個別バッファ、ＢＩＴおよびバッファセット情報が含まれるサイズで分割されている。この分割された領域が前述の「個別退避用バッファ」である。
【００８２】
各制御モジュールの個別バッファに記憶されているバッファデータは、例えば、図６に示される矢印が示すように、各制御モジュールに割り当てられたボリュームグループの個別退避用バッファに世代順に記憶される。
【００８３】
図７は、本実施例に係る退避用バッファ１１８を２つのＲＡＩＤグループで構成する場合の構成例を示す図である。
図７に示す退避用バッファ１１８として用いられるＲＡＩＤグループ７００は、論理ユニットＬＵ＃０〜ＬＵ＃Ｆを備えるＲＡＩＤグループ７０１と、論理ユニットＬＵ＃１０〜ＬＵ＃１Ｆを備えるＲＡＩＤグループ７０２と、で構成される。
【００８４】
ＲＡＩＤグループ７０１において、ＬＵ＃０とＬＵ＃２がボリュームグループを構成する。また、ＬＵ＃１とＬＵ＃３、ＬＵ＃４とＬＵ＃６、ＬＵ＃５とＬＵ＃７、ＬＵ＃８とＬＵ＃Ａ、ＬＵ＃９とＬＵ＃Ｂ、ＬＵ＃ＣとＬＵ＃Ｅ、ＬＵ＃ＤとＬＵ＃Ｆがボリュームグループを構成する。
【００８５】
同様に、ＲＡＩＤグループ７０２において、ＬＵ＃１０とＬＵ＃１２がボリュームグループを構成する。また、ＬＵ＃１１とＬＵ＃１３、ＬＵ＃１４とＬＵ＃１６、ＬＵ＃１５とＬＵ＃１７、ＬＵ＃１８とＬＵ＃１Ａ、ＬＵ＃１９とＬＵ＃１Ｂ、ＬＵ＃１ＣとＬＵ＃１Ｅ、ＬＵ＃１ＤとＬＵ＃１Ｆがボリュームグループを構成する。
【００８６】
そして、ＲＡＩＤグループ７００は、制御モジュール毎に、記録専用バッファに対してボリュームグループ内の論理ユニットが割り当てられている。
例えば、図７に示すＲＡＩＤグループ７００では、制御モジュール＃００の記録専用バッファに、論理ユニットＬＵ＃０、ＬＵ＃１、ＬＵ＃４、ＬＵ＃５、ＬＵ＃８、ＬＵ＃９、ＬＵ＃ＣおよびＬＵ＃Ｄが割り当てられている。また、制御モジュール＃０１の記録専用バッファに、論理ユニットＬＵ＃２、ＬＵ＃３、ＬＵ＃６、ＬＵ＃７、ＬＵ＃Ａ、ＬＵ＃Ｂ、ＬＵ＃ＥおよびＬＵ＃Ｆが割り当てられている。
【００８７】
同様に、制御モジュール＃０２の記録専用バッファに、論理ユニットＬＵ＃１０、ＬＵ＃１１、ＬＵ＃１４、ＬＵ＃１５、ＬＵ＃１８、ＬＵ＃１９、ＬＵ＃１ＣおよびＬＵ＃１Ｄが割り当てられている。また、制御モジュール＃０３の記録専用バッファには、論理ユニットＬＵ＃１２、ＬＵ＃１３、ＬＵ＃１６、ＬＵ＃１７、ＬＵ＃１Ａ、ＬＵ＃１Ｂ、ＬＵ＃１ＥおよびＬＵ＃１Ｆが割り当てられている。
【００８８】
各ボリュームグループを構成する論理ユニットは、個別バッファと同じサイズで分割されている。そして、各制御モジュールの個別バッファに記憶されているバッファデータは、例えば、図７に示される矢印が示すように、各制御モジュールに割り当てられたボリュームグループの個別退避用バッファ世代順に記憶される。
【００８９】
図７に示したように、制御モジュールに備わる記録専用バッファを２以上のＲＡＩＤグループに割り当てると、各ＲＡＩＤグループの負荷を分散する効果が得られる。なお、図７には、２つのＲＡＩＤグループを使用した場合を示したが、２以上のＲＡＩＤグループを使用しても同様の効果を得ることができるのは当然である。
【００９０】
上述のように、本実施例に係る退避用バッファ１１８、例えば図６に示したＬＵ＃０〜ＬＵ＃Ｆや図７に示したＬＵ＃０〜ＬＵ＃ＦおよびＬＵ＃１０〜ＬＵ＃１Ｆは、個別バッファ、ＢＩＴおよびバッファセット情報を含むサイズの個別退避用バッファに分割して使用される。図８にその概要を示す。退避用バッファ１１８の各個別退避用バッファには、コピー対象データ、すなわちバッファセット情報、ＢＩＴおよびバッファデータが世代順で記憶される。
【００９１】
図９および図１０は、本実施例に係るバッファ退避処理を説明する図である。
なお、理解を容易にするために、コピー元装置１１０の構成を簡略化して記載してある。例えば、制御モジュールは、＃００と＃０１のみを記載しているが、コピー元装置１１０を図９および図１０に示す構成に限定する趣旨ではない。また、制御モジュール毎にディスク装置１１７を記載しているが、説明のし易さのためであって、コピー元装置１１０を図９および図１０に示す構成に限定する趣旨ではない。
【００９２】
図９は、バッファセット１−４が、転送中またはコピー先装置１２０における展開処理待ちのため使用中となっている状態で、Ｗｒｉｔｅ  Ｉ／Ｏ命令を受付けた場合のバッファ退避処理を説明する図である。以下、コピー元装置１１０に備わる全制御モジュールを総じて「制御モジュール」という。
【００９３】
（ａ）Ｗｒｉｔｅ  Ｉ／Ｏ命令を受付けると、制御モジュールは、自身のディスク装置１１７にＷｒｉｔｅデータを記憶するとともに、（ｂ）Ｗｒｉｔｅデータのコピーデータをバッファセット５に記憶する。以下、この場合のＷｒｉｔｅデータのコピーデータも「Ｗｒｉｔｅデータ」という。
【００９４】
また、例えば、バッファセットの使用率が一定に以上となると、（ｃ）制御モジュールは、次にコピー先装置１２０に転送予定の例えばバッファセット５のバッファセットデータを退避用バッファ１１８に退避する。同時に、制御モジュールは、新たなＷｒｉｔｅデータ等の記憶先をバッファセット５からバッファセット６に切り替える。
【００９５】
ここで、バッファセットの使用率には、例えば、「使用中のバッファセットの数」／「全バッファセットの数」により求められる値を使用できる。使用中とは、例えば、コピー先装置１２０に転送中または解放待ちの状態をいう。本実施例に係る制御モジュールは、バッファセットの使用率が、５０％以上になった場合に、次にコピー先装置１２０に転送予定のバッファセットのバッファセットデータを退避用バッファ１１８に退避する。
【００９６】
例えば、退避用バッファ１１８を構成するディスク装置が故障などにより使用不可能であることを検出すると、（Ｃ’）制御モジュールは、退避用バッファ１１８の冗長構成を維持するためにリビルド処理を実行する。この時、制御モジュールは、バッファセットの使用状況やＩ／Ｏ負荷などを考慮して、リビルド処理を実行する。
【００９７】
（ｄ）新たなＷｒｉｔｅ  Ｉ／Ｏ命令を受付けると、制御モジュールは、Ｗｒｉｔｅデータをディスク装置に記憶するとともに、Ｗｒｉｔｅデータを切り替えられたバッファセット６に記憶する。このバッファセット６に記憶されたバッファセットデータは世代６となる。
【００９８】
この時、バッファセット６の世代６よりも古い世代、例えば図１０では世代５が退避用バッファ１１８に退避されているので、（ｅ）制御モジュールは、バッファセット６のバッファセットデータを退避用バッファ１１８に退避する。
【００９９】
使用中の状態にあったバッファセット１が解放されると、（ｆ）制御モジュールは、退避用バッファ１１８に記憶されている世代５のバッファセットデータを読み出して、バッファセット１に記憶する。なお、本実施例で「解放」とは、バッファセットを未使用の状態に置くことをいう。
【０１００】
リビルド処理を実行する場合、（ｆ’）制御モジュールは、バッファセットの使用状況やＩ／Ｏ負荷などを考慮して、リビルド処理を実行する。
【０１０１】
図１１Ａおよび図１１Ｂは、本実施例に係るリモートコピーの概要を示すフローチャートである。以下、図１１Ａおよび図１１Ｂに基づいて、本実施例に係るリモートコピーの概要を説明する。
【０１０２】
コピー元装置１１０は、起動すると、バッファ初期構成処理を行なう。例えば、コピー元装置１１０は、あらかじめ設定された構成情報にしたがって、各制御モジュールに備わるメモリ２００に、図２に示した構成の領域を確保し、各領域について初期化を行なう。
また、コピー元装置１１０は、制御モジュール毎に、記録専用バッファに対するボリュームグループを割り当てる。具体的な処理は、図１２および図１３で説明する。
【０１０３】
また、コピー元装置１１０は、バッファセットを生成し、生成したバッファセットについて初期作成処理を行う。例えば、コピー元装置１１０は、各制御モジュールの個別バッファを組み合わせてバッファセットを生成する。そして、コピー元装置１１０は、生成したバッファセットをバッファセット情報としてバッファセット情報記憶部２０２に記憶する。
以上の処理をコピー先装置１２０も行なう。
【０１０４】
コピー元装置１１０は、さらに、バッファ管理テーブル３００やバッファセット管理テーブル４００、退避用バッファ管理テーブル５００などについて初期化を行なう。
以上の処理により、コピー元装置１１０−コピー先装置１２０間でリモートコピーを行なう準備が完了する。そして、ホスト１５０からＷｒｉｔｅ  Ｉ／Ｏ命令を受け付ける準備が完了すると、リモートコピーが開始する（ステップＳ１１００ａ、Ｓ１１００ｂ）。
【０１０５】
ステップＳ１１０１ａにおいて、コピー元装置１１０は、コピー先装置１２０に対して、未使用の個別バッファの通知を要求するために、未使用バッファ通知要求コマンドを発行する。
【０１０６】
一方、コピー先装置１２０は、ステップＳ１１０１ｂに処理を移行し、コピー元装置１１０からの未使用バッファ通知要求コマンドを受けるまで、未使用バッファ通知要求コマンドを監視する（Ｓ１１０１ｂ  ＮＯ）。
【０１０７】
ステップＳ１１０１ｂにおいて、コピー先装置１２０は、コピー元装置１１０からの未使用バッファ通知要求コマンドを検出すると（Ｓ１１０１ｂ  ＹＥＳ）、処理をステップＳ１１０２ｂに移行する。
【０１０８】
ステップＳ１１０２ｂにおいて、コピー先装置１２０は、既に領域が解放された未使用となっている個別バッファを検索する。既に領域が解放されて未使用となっている個別バッファを検出すると、コピー先装置１２０は、検出した個別バッファのバッファＩＤを未使用バッファＩＤとしてコピー元装置１１０に通知する。
【０１０９】
一方、コピー元装置１１０は、コピー先装置１２０から未使用バッファＩＤの通知を受けると、通知された未使用バッファＩＤを、未使用バッファＩＤ記憶部２０６に記憶する。
【０１１０】
ステップＳ１１０２ａにおいて、コピー元装置１１０は、Ｗｒｉｔｅデータを格納する対象のバッファセットを取得する。このＷｒｉｔｅデータを格納する対象のバッファセットを「格納対象バッファセット」という。
【０１１１】
例えば、コピー元装置１１０は、バッファセット管理テーブル４００を参照し、未使用に設定されているバッファセットＩＤを取得する。そして、コピー元装置１１０は、その取得したバッファセットＩＤを、バッファ管理テーブル３００の対象バッファセットＩＤに設定する。
【０１１２】
コピー元装置１１０は、バッファ管理テーブル３００の対象バッファセットＩＤに設定したバッファセットＩＤが示すバッファセットを、「格納対象バッファセット」として以下の処理を行なう。
【０１１３】
なお、コピー元装置１１０は、ステップＳ１１０２ａでは、マッチング処理を行なわない。コピー元装置１１０は、マッチング処理を、後述するステップＳ１１１１ａ、すなわち、バッファセットデータの送信処理前に行なう。
【０１１４】
ステップＳ１１０３ａにおいて、コピー元装置１１０は、バッファ管理テーブル３００のライトバックポインタ情報に設定されている世代を１だけインクリメントした値に更新する。
【０１１５】
ステップＳ１１０４ａにおいて、コピー元装置１１０は、格納対象バッファセットの個別バッファへのＷｒｉｔｅデータの格納処理を行なう。
例えば、コピー元装置１１０が、ホスト１５０からＷｒｉｔｅ  Ｉ／Ｏ命令を受付けたとする。すると、コピー元装置１１０は、そのＷｒｉｔｅ  Ｉ／Ｏ命令とともに受信したＷｒｉｔｅデータを、バッファ管理テーブル３００の現在使用している対象バッファセットＩＤが示す格納対象バッファセット、すなわち、各制御モジュールの個別バッファに分散して記憶する。
【０１１６】
ステップＳ１１０５ａにおいて、コピー元装置１１０は、格納対象バッファセットにデータを格納する格納領域が残っているか否かを判別する。格納領域が残っていないと判断した場合（ステップＳ１１０５ａ  ＮＯ）、コピー元装置１１０は、処理をステップＳ１１０７ａに移行する。
【０１１７】
また、ステップＳ１１０５ａにおいて、格納領域が残っていると判断した場合（ステップＳ１１０５ａ  ＹＥＳ）、コピー元装置１１０は、処理をステップＳ１１０６ａに移行する。この場合、コピー元装置１１０は、格納対象バッファセット取得から一定時間経過したか否かを判別する（ステップＳ１１０６ａ）。
【０１１８】
そして、一定時間経過していないと判断した場合（ステップＳ１１０６ａ  ＮＯ）、コピー元装置１１０は、処理をステップＳ１１０４ａに移行する。また、一定時間経過したと判断した場合（ステップＳ１１０６ａ  ＹＥＳ）、コピー元装置１１０は、処理をステップＳ１１０７ａに移行する。
【０１１９】
ステップＳ１１０７ａにおいて、コピー元装置１１０は、ステップＳ１１０２ａと同様の処理により、格納対象バッファセットを新たに取得する。そして、ステップＳ１１０８ａにおいて、コピー元装置１１０は、格納対象バッファセットを、ステップＳ１１０７ａで取得した新たな格納対象バッファセットに切り替える。
【０１２０】
なお、切り替え前の格納対象バッファセットを、ステップＳ１１１０ａの処理では「ライトバック対象バッファセット」といい、ステップＳ１１１１ａ以降の処理では「転送対象バッファセット」という。
【０１２１】
ステップＳ１１０９ａにおいて、コピー元装置１１０は、ステップＳ１１０３と同様の処理により、ライトバックポインタ情報を更新する。
【０１２２】
ステップＳ１１１０ａにおいて、コピー元装置１１０は、ライトバック処理を行なう。そして、ライトバックが完了すると、コピー元装置１１０は、処理をステップＳ１１１１ａに移行する。
【０１２３】
ステップＳ１１１１ａにおいて、コピー元装置１１０は、マッチング処理を行なう。例えば、コピー元装置１１０は、未使用バッファＩＤ記憶部２０６から未使用バッファＩＤを取得する。そして、コピー元装置１１０は、取得した未使用バッファＩＤを転送対象バッファセットのコピー先ＩＤに割り当てることにより、転送対象バッファセットのコピー元ＩＤとコピー先ＩＤとの関連付けを行なう。
【０１２４】
ステップＳ１１１２ａにおいて、コピー元装置１１０は、転送対象バッファセットに記憶されたバッファセットデータをコピー先装置１２０に送信する。このバッファセットデータには、各制御モジュールの、バッファ２０１ａに記憶されているバッファデータと、ＢＩＴ記憶部２０１ｂに記憶されているＢＩＴと、バッファセット情報記憶部２０２に記憶されているバッファセット情報と、が含まれる。
【０１２５】
一方、コピー先装置１２０は、コピー元装置１１０からバッファセットデータを受信すると、処理をステップＳ１１０３ｂに移行する。
ステップＳ１１０３ｂにおいて、コピー先装置１２０は、バッファセットデータの受信処理を行なう。例えば、コピー先装置１２０は、受信したバッファセットデータのうち、バッファデータをバッファ２０１ａに、ＢＩＴをＢＩＴ記憶部２０１ｂに、バッファセット情報をバッファセット情報記憶部２０２に、それぞれ記憶する。
【０１２６】
ステップＳ１１０４ｂにおいて、コピー先装置１２０は、全てのバッファセットデータを受信したか否かを判別する。そして、まだ、全てのバッファセットデータを受信していないと判断すると（Ｓ１１０４ｂ  ＮＯ）、コピー先装置１２０は、処理をステップＳ１１０３ｂに移行し、ステップＳ１１０３ｂ〜Ｓ１１０４ｂの処理を繰返す。
【０１２７】
ステップＳ１１０４ｂにおいて、全てのバッファセットデータを受信したと判断すると（Ｓ１１０４ｂ  ＹＥＳ）、コピー先装置１２０は、処理をステップＳ１１０５ｂに移行する。
【０１２８】
ステップＳ１１０５ｂにおいて、コピー先装置１２０は、ステップＳ１１０３ｂで取得したバッファセットデータが、自身に備わる記憶装置のディスク装置１２７に展開可能か否かを判断する。展開可能と判断すると（Ｓ１１０５ｂ  ＹＥＳ）、コピー先装置１２０は、処理をステップＳ１１０６ｂに移行する。
【０１２９】
ステップＳ１１０６ｂにおいて、コピー先装置１２０は、ステップＳ１１０３ｂで取得したバッファセットデータを、自身に備わるディスク装置１２７に展開する。この展開が終了すると、コピー先装置１２０は、処理をステップＳ１１０７ｂに移行し、バッファセットデータの展開が完了した旨をコピー元装置１１０に通知する。以下、この通知を「バッファセットデータ展開完了通知」という。
【０１３０】
バッファセットデータのディスク装置１２７への展開が終了すると、ステップＳ１１０８ｂにおいて、コピー先装置１２０は、バッファセットの解放処理を行なう。例えば、コピー先装置１２０は、バッファセットデータのディスク装置１２７への展開が完了したバッファセットを未使用に設定する。
【０１３１】
ステップＳ１１０９ｂにおいて、コピー先装置１２０は、解放した領域に新たにバッファセット情報記憶部２０２および記録専用バッファ２０１の領域を確保して、例えば、図２に示した構成を構築する。
【０１３２】
以上の処理が終了すると、コピー先装置１２０は、処理をステップＳ１１１０ｂに移行し、ステップＳ１１０８ｂ〜Ｓ１１０９ｂの処理によって新たに使用可能となったバッファの未使用バッファＩＤをコピー元装置１１０に通知する。コピー元装置１１０は、未使用バッファＩＤを通知されると、通知された未使用バッファＩＤを未使用バッファＩＤ記憶部２０６に記憶する。
【０１３３】
一方、ステップＳ１１１３ａにおいて、コピー元装置１１０は、コピー先装置１２０からバッファセットデータ展開完了通知を受信したか否かを判断する。そして、バッファセットデータ展開完了通知を受信しない場合（Ｓ１１０８ａ  ＮＯ）、ステップＳ１１１３ａの処理を繰り返す。また、コピー先装置１２０からバッファセットデータ完了通知を受信すると（Ｓ１１１３ａ  ＹＥＳ）、コピー元装置１１０は、処理をステップＳ１１１４ａに移行する。
【０１３４】
ステップＳ１１１４ａにおいて、コピー元装置１１０は、ステップＳ１１１２ａによってバッファセットデータ送信処理が行なわれた転送対象バッファセットについて、ステップＳ１１０８ｂと同様に、バッファセットの解放処理を行なう。すなわち、コピー元装置１１０は、バッファセット管理テーブル４００を参照し、データの転送が完了した転送対象バッファセットを未使用に設定する。
【０１３５】
ステップＳ１１１５ａにおいて、コピー元装置１１０は、バッファ管理テーブル３００を参照し、ステージポインタ情報に設定されている世代を１だけインクリメントした値に更新する。
【０１３６】
ステップＳ１１１６ａにおいて、コピー元装置１１０は、未使用となったバッファセットの領域について初期化を行なうなどしてバッファの再構築処理を行なう。
【０１３７】
ステップＳ１１１７ａにおいて、コピー元装置１１０は、ステージングが必要か否かを判別する。例えば、コピー元装置１１０は、退避用バッファ１１８に退避した世代があるか否かによりステージングが必要か否かを判別する。
【０１３８】
コピー元装置１１０は、以下に示す（ａ）〜（ｄ）の処理により、退避用バッファ１１８に退避した世代の有無を知ることができる。
（ａ）コピー元装置１１０は、バッファ管理テーブル３００を参照し、ライトバックポインタ情報とステージポインタ情報を取得する。
【０１３９】
（ｂ）コピー元装置１１０は、バッファセット管理テーブル４００を参照し、ステージポインタ情報に１を加えた世代から昇順に世代をたどり、バッファセット管理テーブル４００に欠落している世代を検索する。
例えば、図３に示したバッファ管理テーブル３００には、ステージポインタ情報として世代２が設定されている。そこで、コピー元装置１１０は、図４に示したバッファセット管理テーブル４００を参照し、世代２に１を加えた世代３から世代４、５、・・・と昇順に世代をたどる。すると、コピー元装置１１０は、バッファセット管理テーブル４００に欠落している世代７を検出する。
【０１４０】
（ｃ）コピー元装置１１０は、バッファセット管理テーブル４００を参照し、ライトバックポインタ情報の世代から降順に世代をたどり、バッファセット管理テーブル４００に欠落している世代を検索する。
例えば、図３に示したバッファ管理テーブル３００には、ライトバックポインタ情報として世代１５が設定されている。そこで、コピー元装置１１０は、図４に示したバッファセット管理テーブル４００を参照し、世代１５から世代１４、１３、・・・と降順に世代をたどる。すると、コピー元装置１１０は、バッファセット管理テーブル４００に欠落している世代１２を検出する。
【０１４１】
（ｄ）以上の処理によって検出した世代７から世代１２が、退避用バッファ１１８に退避されている世代であることがわかる。
【０１４２】
ステップＳ１１１７ａにおいて、退避用バッファ１１８に退避した世代が存在すると判断した場合（ステップＳ１１１７ａ  ＹＥＳ）、コピー元装置１１０は、処理をステップＳ１１１８ａに移行する。また、退避用バッファ１１８に退避した世代が存在しないと判断した場合（ステップＳ１１１７ａ  ＮＯ）、コピー元装置１１０は、処理をステップＳ１１２０ａに移行する。
【０１４３】
ステップＳ１１１８ａにおいて、コピー元装置１１０は、ステージングに使用するバッファセット、すなわちステージング用バッファセットを取得する。
例えば、コピー元装置１１０は、バッファセット管理テーブル４００を参照し、未使用に設定されているバッファセットＩＤを「ステージング対象バッファセットＩＤ」として取得する。
【０１４４】
また、コピー元装置１１０は、バッファセット管理テーブル４００を参照し、ステージング対象バッファセットＩＤと一致するバッファセットＩＤの対象世代に、後述するステージング対象世代を設定する。
【０１４５】
また、コピー元装置１１０は、バッファセット管理テーブル４００を参照し、ステージング対象バッファセットＩＤと一致するバッファセットＩＤの使用目的を「ステージング」に設定する。
【０１４６】
ステップＳ１１１９ａにおいて、コピー元装置１１０は、ステージングを実行する。そして、ステージングが完了すると、コピー元装置１１０は、処理をステップＳ１１１１ａに移行する。
【０１４７】
以上の処理が終了すると、コピー元装置１１０は、リモートコピーを終了、または、ステップＳ１１０４ａに処理を移行してリモートコピーを継続する。また、ホスト１５０から新たにＷｒｉｔｅ  Ｉ／Ｏ命令を受付けると、コピー元装置１１０は、Ｓ１１０４ａ等に処理を移行して、リモートコピーを継続する。
【０１４８】
また、コピー先装置１２０は、上述の処理が終了すると、リモートコピーを終了する、または、ステップＳ１１０３ｂに処理を移行してリモートコピーを継続する。
【０１４９】
本実施例に係るリモートコピーにおいて、以下の処理についてより具体的に説明する。
（１）退避用バッファ１１８の領域を作成する処理。
（２）制御モジュールへの退避用バッファ１１８の割り当て処理。
（３）ライトバックポインタ情報／ステージポインタ情報の更新処理。
（４）記録専用バッファ２０１から退避用バッファ１１８へのライトバック。
（５）退避用バッファ１１８から記録専用バッファ２０１へのステージング。
（６）退避用バッファ１１８に対するリビルド。
【０１５０】
本実施例では、記録専用バッファ２０１に記憶されているデータを退避用バッファ１１８に記憶することを「ライトバック」といい、退避用バッファ１１８に記憶されているデータを記録専用バッファ２０１に記憶することを「ステージング」という。
【０１５１】
（１）退避用バッファの領域を作成する処理
図１２は、本実施例に係る退避用バッファ１１８の領域を生成する処理を示すフローチャートである。図１２に示す処理は、例えば、コピー元装置１１０の保守作業時に実行できる。
【０１５２】
ステップＳ１２０１において、コピー元装置１１０は、ユーザからの入力に応じて退避用バッファ１１８を設定すべき領域を記録専用バッファ２０１のバッファ２０１ａから選択する。そして、コピー元装置１１０は、処理をステップＳ１２０２に移行し、ユーザからの入力に応じてＲＡＩＤを構成するためのディスク装置を選択する。
【０１５３】
ステップＳ１２０３において、コピー元装置１１０は、ステップＳ１２０２で選択したディスク装置はＲＡＩＤを構成する条件を満たすか否かをチェックする。条件を満たさない場合（Ｓ１２０３  ＮＯ）、コピー元装置１１０は、例えば、他のディスク装置を指定すべき旨を表示装置等に表示して、処理をステップＳ１２０２に移行する。
【０１５４】
ステップＳ１２０３において、条件を満たす場合（Ｓ１２０３  ＹＥＳ）、コピー元装置１１０は、処理をステップＳ１２０４に移行する。
ステップＳ１２０４において、コピー元装置１１０は、ステップＳ１２０２で選択されたディスク装置で構成されるＲＡＩＤグループを生成し、コピー元装置１１０の装置構成などを保持する構成情報にその情報を反映する。
【０１５５】
ステップＳ１２０５において、コピー元装置１１０は、ステップＳ１２０４で作成したＲＡＩＤグループ内に複数のボリュームを作成する。コピー元装置１１０は、処理をステップＳ１２０６に移行し、ステップＳ１２０５で作成した論理ユニットの構成を構成情報に反映する。
【０１５６】
ステップＳ１２０７において、コピー元装置１１０は、図１３で示す処理によって、各制御モジュールで使用するボリューム（以下、必要に応じて「担当ボリューム」という）を決定する。各制御モジュールは、この決定したボリュームを退避用バッファ１１８の領域として使用する。
【０１５７】
（２）制御モジュールへの退避用バッファ１１８の割り当て処理
図１３は、本実施例に係る退避用バッファ１１８の制御モジュールへの割り当て（ステップＳ１２０７）の具体的な処理を示すフローチャートである。図１３に示す処理は、コピー元装置１１０の起動時の他に、保守作業時にも実行できる。
【０１５８】
ステップＳ１３０１において、コピー元装置１１０は、構成情報を参照し、退避用バッファ１１８として割り当てるＲＡＩＤグループの数（Ａ）を取得する。
さらに、コピー元装置１１０は、処理をステップＳ１３０２に移行し、構成情報からコピー元装置に実装されている制御モジュールの数（Ｂ）を取得する。
【０１５９】
ステップＳ１３０３において、コピー元装置１１０は、ＲＡＩＤグループあたりの制御モジュールの数（Ｃ）＝（Ｂ）／（Ａ）を算出する。そして、処理をステップＳ１３０４に移行し、各ＲＡＩＤグループに対して（Ｃ）個の制御モジュールを割り当てる。
【０１６０】
ステップＳ１３０５において、コピー元装置１１０は、各ＲＡＩＤグループのボリュームの数を（Ｃ）で除算し、担当ボリュームの数（Ｄ）を算出する。そして、コピー元装置１１０は、処理をステップＳ１３０６に移行し、ステップＳ１３０５の算出結果から、ＲＡＩＤグループ毎に割り当てた制御モジュールに対して担当ボリュームを（Ｄ）個を割り当てる。
【０１６１】
ステップＳ１３０７において、コピー元装置１１０は、以上の処理によって決定した構成を構成情報に反映するとともに、各制御モジュールが備える設定情報にも反映し、処理を終了する（ステップＳ１３０８）。
【０１６２】
（３）ライトバックポインタ情報／ステージポインタ情報の更新処理
本実施例に係るバッファ退避処理では、ライトバックポインタ情報とステージポインタ情報の２つの情報により、退避用バッファ１１８に記憶するデータの書き込み位置（世代）と退避用バッファ１１８から読み出すデータの読み出し位置（世代）とを管理する。
【０１６３】
図１４は、本実施例に係るバッファ退避処理におけるライトバックポインタ情報・ステージポインタ情報を説明する図である。なお、図１４に示す１４０１は、退避用バッファ１１８を簡略化して示したものである。同様に、図１４に示す１４０２および１４０３は、バッファセットを簡略化して示したものである。
【０１６４】
例えば、制御モジュールにおいてｘ回目のバッファセット切り替えが行なわれた場合を考える。この場合、ステージポインタ情報は、最後にステージングが行なわれた世代を情報として保持する。ライトバックポインタ情報は、退避用バッファ１４０１の世代ｘを情報として保持する。
【０１６５】
また、制御モジュールにおいてｘ＋１回目のバッファセット切り替え時に世代ｘのバッファセットデータがすぐにコピー先装置１２０に転送された場合を考える。この場合、世代ｘに記憶されているバッファセットデータがステージングされて転送処理が完了すると、ステージポインタ情報は、世代ｘから世代ｘ＋１に更新される。ライトバックポインタ情報は、退避用バッファ１４０１の世代ｘ＋１を情報として保持する。
【０１６６】
また、制御モジュールにおいてｘ＋２回目のバッファセット切り替え時に世代ｘ＋１が退避用バッファ１４０１にライトバックされた場合を考える。この場合、ステージポインタ情報が保持する退避用バッファ１４０１の世代が世代ｘであれば、次のステージング対象は世代ｘ＋１となる。ライトバックポインタ情報は、ボリュームグループの世代ｘ＋２を保持する。
【０１６７】
以上のように、ライトバックポインタ情報は、バッファセットが生成される毎にそのバッファセットの次の世代を情報として保持する。また、ステージポインタ情報は、切り替えられた旧世代のバッファセットの処理が完了する毎に、例えば、コピー元装置１１０でバッファセットデータの転送が完了しかつコピー先装置１２０でデータの展開が完了する毎に、ステージポインタ情報が更新される。
【０１６８】
なお、退避用バッファ１４０１として割当てたボリュームグループが複数ある場合、ボリュームグループに割り当てられた番号の小さい順にボリュームグループを使用する。そして、ボリュームグループを最後まで使用した場合は、最初にもどりサイクリックにボリュームグループを使用する。
【０１６９】
以下、図１５および図１６にライトバックポインタ情報およびステージポインタ情報の具体的な更新処理を説明する。
図１５は、本実施例に係るライトバックポインタ情報の更新処理を示すフローチャートである。
【０１７０】
ステップＳ１５００ａにおいて、コピー元装置１１０に備わる制御モジュールを代表するマスタ制御モジュールは、バッファセットの切替え処理を開始すると、処理をステップＳ１５０１ａに移行する。
【０１７１】
ステップＳ１５０１ａにおいて、マスタ制御モジュールは、現在保持しているライトバックポインタ情報を１つ進める。例えば、現在保持している世代を１だけインクリメントして次の世代を情報として保持する。
【０１７２】
ステップＳ１５０２ａにおいて、マスタ制御モジュールは、ステップＳ１５０１ａで求めたライトバックポインタ情報に、自身が保持するバッファ管理テーブル３００を更新する。さらに、マスタ制御モジュールは、コピー元装置１１０に備わる他の制御モジュールに対して、ステップＳ１５０２ａと同様の処理を依頼する。
【０１７３】
一方、ステップＳ１５０１ｂにおいて、各制御モジュールは、ステップＳ１５０１ａで求めたライトバックポインタ情報に、各自が保持するバッファ管理テーブル３００を更新する。そして、各制御モジュールは、バッファ管理テーブル３００の更新が完了すると、その旨をマスタ制御モジュールに通知する。
【０１７４】
ステップＳ１５０３ａにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信したか否かをチェックし、応答を受信していない制御モジュールがある場合には（Ｓ１５０３ａ  ＮＯ）、ステップＳ１５０３ａの処理を繰り返す。
【０１７５】
ステップＳ１５０３ａにおいて、依頼した全ての制御モジュールから応答を受信したと判断すると（Ｓ１５０３ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ１５０４ａに移行し、ライトバックポインタ情報の更新処理を終了する。
【０１７６】
図１６は、本実施例に係るステージポインタ情報の更新処理を示すフローチャートである。
ステップＳ１６００ａにおいて、コピー元装置１１０のマスタ制御モジュールは、バッファセットの解放処理を開始すると、処理をステップＳ１６０１ａに移行する。
【０１７７】
ステップＳ１６０１ａにおいて、マスタ制御モジュールは、解放対象のバッファセットがあるか否かを判別する。解放対象となるバッファセットがない場合（Ｓ１６０１ａ  ＮＯ）、マスタ制御モジュールは、ステップＳ１６０４ａに移行し、処理を終了する。
【０１７８】
なお、本実施例では、コピー先装置１２０への転送が完了し、かつ、コピー先装置１２０から転送したデータのディスク装置への展開が完了した旨の通知を受けたバッファセットを領域解放の対象と判断する。
【０１７９】
ステップＳ１６０１ａにおいて、解放対象となるバッファセットがある場合（Ｓ１６０１ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ１６０２ａに移行する。
【０１８０】
ステップＳ１６０２ａにおいて、マスタ制御モジュールは、解放対象となるバッファセットの個別バッファ、ＢＩＴおよびバッファセット情報を解放するとともに、ステージポインタ情報を更新する。そして、マスタ制御モジュールは、コピー元装置１１０に備わる他の制御モジュールに対して、ステップＳ１６０２ａと同様の処理を依頼する。
【０１８１】
ステップＳ１６０１ｂにおいて、各制御モジュールは、マスタ制御モジュールから依頼を受けると、解放対象のバッファセットの個別バッファ、ＢＩＴおよびバッファセット情報を解放するとともに、ステージポインタ情報を更新する。処理が完了すると、各制御モジュールは、マスタ制御モジュールに対して完了通知を行なう。
【０１８２】
ステップＳ１６０３ａにおいて、マスタ制御モジュールは、依頼した制御モジュールからの応答を確認し、全ての制御モジュールから応答を受信したか否かを判別する。そして、応答を受信していない制御モジュールがある場合（Ｓ１６０３ａ  ＮＯ）、ステップＳ１６０３の処理を繰返す。
【０１８３】
また、ステップＳ１６０３ａにおいて、全ての制御モジュールから応答を受信したと判断した場合（Ｓ１６０３ａ  ＹＥＳ）、マスタ制御モジュールは、ステップＳ１６０４ａに移行してステージポインタ情報の更新処理を終了する。
【０１８４】
（４）記録専用バッファ２０１から退避用バッファ１１８へのライトバック
図１７は、本実施例に係るライトバックを示すフローチャートである。
ステップＳ１７００ａにおいて、例えば、Ｗｒｉｔｅデータのバッファセットへの記憶処理が完了すると、コピー元装置１１０におけるマスタ制御モジュールは、処理をステップＳ１７０１ａに移行する。
【０１８５】
ステップＳ１７０１ａにおいて、マスタ制御モジュールは、ステージング・転送で使用中のバッファセット数を取得する。以下、ステージング・転送で使用中のバッファセット数を、「使用中のバッファセット数」という。マスタ制御モジュールは、使用中のバッファセット数とあらかじめ決められた閾値、例えば、全バッファセット数の５０％の値とを比較し、使用中のバッファセット数が閾値より少ない場合（Ｓ１７０１ａ  ＮＯ）、処理をステップＳ１７１０ａに移行する。また、マスタ制御モジュールは、使用中のバッファセット数が閾値以上の場合（Ｓ１７０１ａ  ＹＥＳ）、処理をステップＳ１７０２ａに移行する。
【０１８６】
ステップＳ１７０２ａにおいて、マスタ制御モジュールは、退避用バッファ１１８がリビルド動作中か否かを判別する。そして、リビルド動作中と判断すると（ステップＳ１７０２ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ１７０３ａに移行する。
【０１８７】
なお、リビルド動作中か否かを判別するためには、リビルド動作中であることを示すフラグ、本実施例では後述のディスクアクセス抑止モード用フラグを使用してもよい。この場合、マスタ制御モジュールは、リビルド動作を開始する時にディスクアクセス抑止モード用フラグをＯＮに設定し、リビルド動作が終わる時にディスクアクセス抑止モード用フラグをＯＦＦに設定すればよい。
【０１８８】
ステップＳ１７０３ａにおいて、マスタ制御モジュールは、ライトバックを中断する。そして、マスタ制御モジュールは、ステップＳ１７０４ａに処理を移行する。ステップＳ１７０４ａにおいて、マスタ制御モジュールは、リビルド動作が完了（終了または中断を含む）を待つ。その後、割り込み等により、リビルド動作の完了を検出すると、マスタ制御モジュールは、ステップＳ１７０５ａから処理を開始する。
【０１８９】
また、ステップＳ１７０２ａにおいて、リビルド動作中でないと判断すると（ステップＳ１７０２ａ  ＮＯ）、マスタ制御モジュールは、処理をステップＳ１７０５ａに移行する。
【０１９０】
ステップＳ１７０５ａにおいて、マスタ制御モジュールは、リビルド抑止モードを設定する。本実施例では、リビルド抑止モード用のフラグをＯＮに設定する。なお、後述するようにマスタ制御モジュールは、リビルド動作に入る前に必ずリビルド抑止モード用のフラグを参照する。そして、リビルド抑止モード用のフラグがＯＮの場合、マスタ制御モジュールは、リビルド動作を中断する。
【０１９１】
リビルド抑止モード用のフラグは、例えば、マスタ制御モジュールに備わるメモリ２００内の所定の領域に記憶することができる。
ステップＳ１７０６ａにおいて、マスタ制御モジュールは、以下のようにライトバック処理を行なう。なお、ライトバックをするバッファセットを「ライトバック対象世代」という。
【０１９２】
まず、マスタ制御モジュールは、退避用バッファ管理テーブル５００から、ライトバック対象世代を記憶すべき個別退避用バッファのアドレスを算出する。そして、マスタ制御モジュールは、算出したアドレスに、図１１ＡのステップＳ１１０８ａで説明したライトバック対象バッファセットのうちマスタ制御モジュールに備わる個別バッファに記憶されているバッファデータ、そのＢＩＴおよびバッファセット情報を記憶する。この処理は、図６や図７に示したように、コピー元装置１１０内の制御モジュール毎に行なわれる。
【０１９３】
なお、個別退避用バッファの先頭アドレスは、制御モジュールに割り当てられた退避用バッファが連続したアドレス空間である場合、退避用バッファ管理テーブル５００に設定されている「退避データの先頭アドレス」に、「（ライトバック対象世代−１）×個別退避用バッファサイズ」を加えることにより求めることができる。
【０１９４】
ライトバックが完了すると、マスタ制御モジュールは、コピー元装置１１０に備わる他の制御モジュールに対して、ステップＳ１７０６ａと同様の処理を依頼する。
ステップＳ１７０１ｂにおいて、各制御モジュールは、マスタ制御モジュールから依頼のあったバッファセットのうち各制御モジュールに備わる個別バッファに記憶されているバッファデータ、そのＢＩＴおよびバッファセット情報を、自身のＢＩＴ記憶部２０１ｂ等から取得する。そして、各制御モジュールは、取得したＢＩＴおよびバッファセット情報を、各制御モジュールに割当てられた個別退避用バッファに退避する。
【０１９５】
なお、各制御モジュールに割り当てられた個別退避用バッファも、制御モジュールに割り当てられた退避用バッファが連続したアドレス空間である場合、退避用バッファ管理テーブル５００に設定されている「退避データの先頭アドレス」に、「（ライトバック対象世代−１）×個別退避用バッファサイズ」を加えることにより求めることができる。
【０１９６】
ステップＳ１７０２ｂにおいて、各制御モジュールは、マスタ制御モジュールから依頼のあったバッファセットのうち各制御モジュールに備わる個別バッファに、Ｗｒｉｔｅデータ等のバッファデータが記憶されているか否かをチェックする。
【０１９７】
そして、Ｗｒｉｔｅデータ等のバッファデータが個別バッファにない場合（Ｓ１７０２ｂ  ＮＯ）、各制御モジュールは、ステップＳ１７０３ｂをスキップする。また、Ｗｒｉｔｅデータ等のバッファデータが個別バッファにある場合（Ｓ１７０２ｂ  ＹＥＳ）、各制御モジュールは、処理をステップＳ１７０３ｂに移行する。
【０１９８】
ステップＳ１７０３ｂにおいて、各制御モジュールは、個別バッファに記憶されているＷｒｉｔｅデータ等のバッファデータを、各制御モジュールに割当てられた退避用バッファ１１８の個別退避用バッファに退避する。そして、マスタ制御モジュールに依頼された処理の完了を通知する。
【０１９９】
一方、ステップＳ１７０７ａにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信したか否かをチェックし、応答を受信していない制御モジュールがある場合には（Ｓ１７０７ａ  ＮＯ）、ステップＳ１７０７ａの処理を繰返す。
【０２００】
全ての制御モジュールから応答を受信した場合（Ｓ１７０７ａ  ＹＥＳ）、マスタ制御モジュールは、ライトバック対象バッファセットのバッファセット情報等を解放する（ステップＳ１７０８ａ）。また、制御モジュールは、バッファセット管理テーブル４００を参照しライトバック対象バッファセットのバッファセットＩＤと一致するバッファセットＩＤを未使用に設定する。
【０２０１】
ステップＳ１７０９ａにおいて、マスタ制御モジュールは、リビルド抑止モードを解除する。すなわち、マスタ制御モジュールは、リビルド抑止モード用のフラグをＯＦＦに設定する。
【０２０２】
ステップＳ１７１０ａにおいて、マスタ制御モジュールは、退避用バッファ１１８に対するリビルド待ちがあるか否かを判別する。リビルド待ちがある場合（ステップＳ１７１０ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ１７１１ａに移行する。そして、マスタ制御モジュールは、リビルド処理を実行する。リビルド処理が完了すると、マスタ制御モジュールは、例えば、処理をステップＳ１７１２ａに移行する。
【０２０３】
また、ステップＳ１７１０ａにおいて、リビルド待ちがない場合（ステップＳ１７１０ａ  ＮＯ）、マスタ制御モジュールは、処理をステップＳ１７１２ａに移行する。
なお、退避用バッファ１１８に対するリビルド処理については、例えば、待ち行列等を用いて管理すればよい。マスタ制御モジュールは、待ち行列等を参照することにより、退避用バッファ１１８に対するリビルド処理待ちの有無を確認することができる。
【０２０４】
以上の処理が終了すると、マスタ制御モジュールおよび他の制御モジュールは、バッファ退避処理を終了する（ステップＳ１７１２ａ）。
【０２０５】
図１８および図１９は、本実施例に係るライトバックの具体例を示す図である。なお、図１８および図１９に示す１８０１は、退避用バッファ１１８を簡略化して示したものである。同様に、図１８および図１９に示す１８０２〜１８０４は、バッファセットを簡略化して示したものである。
【０２０６】
図１８および図１９は、コピー元装置１１０が制御モジュール＃００〜＃０３を備え、各制御モジュールに８つの個別バッファを備えるコピー元装置１１０において、図１７で説明した閾値が５０％の場合のライトバックを説明する図である。
【０２０７】
（ａ）バッファセット１〜４が、転送中、転送完了待ち、解放待ちのいずれかの状態、かつ、（ｂ）バッファセット５がライトバック中の場合を考える。この場合、（ｃ）Ｗｒｉｔｅデータを記憶するのはバッファセット６となる。
【０２０８】
図１９に示すように、（ｄ）バッファセット１が使用していた領域の解放時に、マスタ制御モジュールは、ステージポインタ情報を更新する。
バッファセット５のライトバックが処理中の場合、（ｅ）記録専用バッファ２０１等上にデータがあるので、バッファセット５のライトバックを中断し、バッファセット５のバッファセットデータをコピー先装置１２０に転送する処理を開始する。
【０２０９】
また、バッファセット５のライトバックが完了している場合、退避用バッファ１１８からからバッファセット５のバッファセットデータを読み出してバッファセット１に記憶するステージングを行なう。
【０２１０】
（５）退避用バッファ１１８から記録専用バッファ２０１へのステージング
図２０Ａおよび図２０Ｂは、本実施例に係るステージングを示すフローチャートである。図２０Ａおよび図２０Ｂに示す処理は、図１１Ｂに示したステップＳ１１１７ａ〜Ｓ１１１９ａの処理を具体的に示している。
【０２１１】
ステップＳ２０００ａにおいて、旧世代の解放処理が完了すると、コピー元装置１１０におけるマスタ制御モジュールは、処理をステップＳ２００１ａに移行する。
【０２１２】
ステップＳ２００１ａにおいて、マスタ制御モジュールは、ステージング対象となる世代を決定する。例えば、マスタ制御モジュールは、ステージポインタ情報を参照し、ステージポインタ情報に記憶されている世代を１だけインクリメントし、インクリメントした世代を新たにステージング対象の世代に決定する。このステージング対象の世代を「ステージング対象世代」という。また、図２０Ａおよび図２０Ｂの処理では、必要に応じて、図１１ＢのステップＳ１１１３ａの処理で取得しステージングに使用するバッファセットを「ステージング先」と略す。
【０２１３】
ステップＳ２００２ａにおいて、マスタ制御モジュールは、ステージング対象世代のステージング先の領域は解放処理待ちか否かをチェックする。ステージング先の領域が解放待ちの場合（Ｓ２００２ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２００３ａに移行する。
【０２１４】
ステップＳ２００３ａにおいて、マスタ制御モジュールは、ステージング対象世代に１を加算した世代を新たなステージング対象世代に設定する。そして、マスタ制御モジュールは、処理をステップＳ２００２ａに移行する。
【０２１５】
一方、ステップＳ２００２ａにおいて、ステージング先の領域が解放待ちでない場合（Ｓ２００２ａ  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２００４ａに移行する。
【０２１６】
ステップＳ２００４ａにおいて、マスタ制御モジュールは、ステージング先が転送中か否かをチェックする。ステージング先が転送中の場合（Ｓ２００４ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２００３ａに移行する。
【０２１７】
一方、ステップＳ２００４ａにおいて、ステージング先が転送中でない場合（Ｓ２００４ａ  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２００５ａに移行する。
【０２１８】
ステップＳ２００５ａにおいて、マスタ制御モジュールは、ステージング対象世代がステージング中か否かをチェックする。ステージング対象世代がステージング中の場合（Ｓ２００５ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２００３ａに移行する。
【０２１９】
一方、ステップＳ２００５ａにおいて、ステージング対象世代がステージング中でない場合（Ｓ２００５ａ  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２００６ａに移行する。
【０２２０】
ステップＳ２００６ａにおいて、マスタ制御モジュールは、ステージング対象世代がライトバック中か否かをチェックする。ステージング対象世代がライトバック中の場合（Ｓ２００６ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２００７ａに移行する。
【０２２１】
ステップＳ２００７ａにおいて、マスタ制御モジュールは、自身のライトバックを中断するとともに、コピー元装置１１０に備わる他の制御モジュールに対して、ライトバックの中断を依頼する。
【０２２２】
ステップＳ２００１ｂにおいて、各制御モジュールは、マスタ制御モジュールからの依頼を受けると、処理中のライトバックを中断する。そして、マスタ制御モジュールに対して、ライトバックを中断した旨を通知する。
【０２２３】
ステップＳ２００８ａにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信したか否かをチェックし、応答を受信していない制御モジュールがある場合には（Ｓ２００８ａ  ＮＯ）、ステップＳ２００８ａの処理を繰り返す。
【０２２４】
ステップＳ２００８ａにおいて、依頼した全ての制御モジュールから応答を受信したと判断すると（Ｓ２００８ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２００９ａに移行し、ステージングを終了する。
【０２２５】
一方、ステップＳ２００６ａにおいて、ステージング対象世代がライトバック中でないと判断した場合（Ｓ２００６ａ  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２０１０ａに移行する。
【０２２６】
ステップＳ２０１０ａにおいて、マスタ制御モジュールは、ステージング先が、Ｗｒｉｔｅデータ等の記憶処理中か否かをチェックする。ステージング先が記憶処理中と判断した場合（Ｓ２０１０ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２０１１ａに移行し、ステージングを終了する。
【０２２７】
ステップＳ２０１０ａにおいて、ステージング先がＷｒｉｔｅデータ等の記憶処理中でないと判断した場合（Ｓ２０１０ａ  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２０１２ａに移行する。
【０２２８】
ステップＳ２０１２ａにおいて、マスタ制御モジュールは、ステージング対象世代が記憶されている個別退避用バッファに対してリビルドが行なわれているか否かを判別する。マスタ制御モジュールは、ディスクアクセス抑止モード用フラグがＯＮの場合、ステージング対象世代が記憶されている個別退避用バッファに対してリビルドが行なわれていると判断し（ステップＳ２０１２ａ  ＹＥＳ）、処理をステップＳ２０１３ａに移行する。
【０２２９】
ステップＳ２０１３ａにおいて、マスタ制御モジュールは、ステージングを中断する。そして、マスタ制御モジュールは、ステップＳ２０１４ａに処理を移行する。ステップＳ２０１４ａにおいて、マスタ制御モジュールは、ステージング対象世代が記憶されている個別退避用バッファに対するリビルド動作の完了を待つ。その後、割り込み等により、リビルド動作の完了を検出すると、マスタ制御モジュールは、ステップＳ２０１５ａから処理を開始する。
【０２３０】
また、ステップＳ２０１２ａにおいて、ディスクアクセス抑止モード用フラグがＯＦＦの場合、マスタ制御モジュールは、ステージング対象世代が記憶されている個別退避用バッファに対してリビルドが行なわれていないと判断する（ステップＳ２０１２ａ  ＮＯ）。この場合、マスタ制御モジュールは、処理をステップＳ２０１５ａに移行する。
【０２３１】
ステップＳ２０１５ａにおいて、マスタ制御モジュールは、リビルド抑止モードを設定する。本実施例では、リビルド抑止モード用のフラグをＯＮに設定する。
マスタ制御モジュールは、処理をステップＳ２０１６ａに移行し、図１１ＢのステップＳ１１１３ａの処理で取得したステージング先に既にステージング対象世代が記憶されているか否かをチェックする。
【０２３２】
ステージング先にステージング対象世代が記憶されている場合（Ｓ２０１６ａ  ＹＥＳ）、マスタ制御モジュールは、ステップＳ２０２４ａに移行してステージングを終了する。また、ステージング先にステージング対象世代が記憶されていない場合（Ｓ２０１６ａ  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２０１７ａに移行する。
【０２３３】
ステップＳ２０１７ａにおいて、マスタ制御モジュールは、ステージング・転送で使用中のバッファセット数を取得する。そして、マスタ制御モジュールは、使用中のバッファセット数とあらかじめ決められた閾値、例えば、全バッファセット数の５０％の値とを比較する。そして、使用中のバッファセット数がバッファ閾値以上であった場合（Ｓ２０１７ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２０２４ａに移行してステージングを終了する。また、マスタ制御モジュールは、使用中のバッファセット数がバッファ閾値以上でなかった場合（Ｓ２０１７ａ  ＮＯ）、処理をステップＳ２０１８ａに移行する。
【０２３４】
ステップＳ２０１８ａにおいて、マスタ制御モジュールは、以下のようにステージング対象世代に対してステージングを行なう。
マスタ制御モジュールは、退避用バッファ管理テーブル５００から、ステージング対象世代が記憶されている個別退避用バッファのアドレスを算出する。そして、マスタ制御モジュールは、算出したアドレスからバッファデータ、ＢＩＴおよびバッファセット情報を取得する。
【０２３５】
そして、マスタ制御モジュールは、取得したバッファデータ、ＢＩＴおよびバッファセット情報を、ステージング対象バッファセットＩＤが示すバッファセットの個別バッファ、ＢＩＴ記憶部およびバッファセット情報記憶部２０２に記憶する。同様の処理が、コピー元装置１１０内の制御モジュール毎に行なわれる。
【０２３６】
なお、個別退避用バッファのアドレスは、制御モジュールに割り当てられた退避用バッファが連続したアドレス空間である場合、退避用バッファ管理テーブル５００に設定されている「退避データの先頭アドレス」に、「（ステージング対象世代−１）×個別退避用バッファサイズ」を加えることにより求めることができる。
【０２３７】
ステップＳ２０１９ａにおいて、マスタ制御モジュールは、各制御モジュールに対して、ステップＳ２０１８ａと同様に、退避用バッファ１１８からステージング対象世代を取得してステージングを行うように依頼する。
【０２３８】
ステップＳ２００２ｂにおいて、各制御モジュールは、以下のようにバッファセット情報およびＢＩＴに対してステージングを行なう。
依頼を受けた各制御モジュールは、自身に割り当てられた退避用バッファ１１８の個別退避用バッファから、マスタ制御モジュールから依頼のあったステージング対象世代のＢＩＴおよびバッファセット情報を取得する。
【０２３９】
そして、各制御モジュールは、退避用バッファ１１８の個別退避用バッファから取得したＢＩＴおよびバッファセット情報を、各制御モジュールに備わるＢＩＴ記憶部２０１ｂおよびバッファセット情報記憶部２０２に記憶する。
【０２４０】
ステップＳ２００３ｂにおいて、各制御モジュールは、自身に割り当てられた退避用バッファ１１８の個別退避用バッファを参照し、ステージング対象世代のバッファデータがあるか否かを判別する。そして、ステージング対象世代のバッファデータが退避用バッファ１１８の個別退避用バッファにある場合（Ｓ２００３ｂ  ＹＥＳ）、各制御モジュールは、そのバッファデータに対してステージングを行なう（Ｓ２００４ｂ）。ステージングが完了すると、各制御モジュールは、マスタ制御モジュールに対して完了通知を行なう。
【０２４１】
また、ステップＳ２００３ｂにおいて、ステージング対象世代のバッファデータが退避用バッファ１１８の個別退避用バッファにない場合（Ｓ２００３ｂ  ＮＯ）、各制御モジュールは、マスタ制御モジュールに対して完了通知を行う。
【０２４２】
ステップＳ２０２０ａにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信するまで完了通知を監視する。そして、依頼した全ての制御モジュールから応答を受信すると（Ｓ２０２０ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２０２１ａに移行する。
【０２４３】
ステップＳ２０２１ａにおいて、マスタ制御モジュールは、リビルド抑止モードを解除する。すなわち、マスタ制御モジュールは、リビルド抑止モード用のフラグをＯＦＦに設定する。
【０２４４】
ステップＳ２０２２ａにおいて、マスタ制御モジュールは、退避用バッファ１１８、特にステージング対象世代が記憶されている個別退避用バッファに対するリビルド待ちがあるか否かを判別する。リビルド待ちがある場合（ステップＳ２０２２ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２０２３ａに移行する。そして、マスタ制御モジュールは、リビルド処理を実行する。その後、マスタ制御モジュールは、後述する図２１のステップＳ２１０５に処理を移行する。
【０２４５】
ステップＳ２０２２ａにおいて、リビルド待ちがない場合（ステップＳ２０２２  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２０２４ａに移行してステージングを終了する。
【０２４６】
（６）退避用バッファ１１８に対するリビルド
図２１は、本実施例に係る退避用バッファ１１８に対するリビルド処理を示すフローチャートである。
【０２４７】
例えば、マスタ制御モジュールは、退避用バッファ１１８を構成するディスク装置の故障等を検出すると、ステップＳ２１００に移行してリビルド処理を開始する。
ステップＳ２１０１において、マスタ制御モジュールは、リビルド抑止モードの状態、すなわち、リビルド抑止モード用のフラグの設定を取得する。
【０２４８】
ステップＳ２１０２において、リビルド抑止モード用のフラグがＯＮの場合（ステップＳ２１０２  ＹＥＳ）、マスタ制御モジュールは、リビルド抑止モードであると判断して処理をステップＳ２１０３に移行する。
【０２４９】
そして、マスタ制御モジュールは、リビルド動作を中断し（ステップＳ２１０３）、リビルド抑止モードの解除待ちの状態となる（ステップＳ２１０４）。その後、リビルド抑止モードが解除されると、マスタ制御モジュールは、例えば、ステップＳ２１０５に処理を移行してリビルド動作を開始する。
【０２５０】
ステップＳ２１０５において、マスタ制御モジュールは、退避用バッファ１１８を構成するディスク装置のうち故障等によりリビルド処理が必要となったディスク装置内の領域の１つを選択し、この選択した領域を「リビルド対象領域」とする。本実施例に係るリビルド処理では、ディスク装置を一定サイズの領域、例えば、個別退避用バッファ毎にリビルド処理を行なう。
【０２５１】
ステップＳ２１０６において、マスタ制御モジュールは、リビルド対象領域にデータが退避されているか否かを判別する。リビルド対象領域にデータが退避されていない場合（ステップＳ２１０６  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２１１１に移行する。また、既にリビルド対象領域にデータが退避されている場合（ステップＳ２１０６  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２１０７に移行する。
【０２５２】
ステップＳ２１０７において、マスタ制御モジュールは、リビルド処理を実行すべきか否かを判別する。例えば、マスタ制御モジュールは、以下の情報を考慮してリビルド処理を実行すべきか否かを判別する。
（ａ）リビルド動作中でも新たな世代を退避できるだけの領域サイズ
（ｂ）直近世代のＩ／Ｏ増加量
（ｃ）１つのリビルド対象領域に対するリビルド処理に要する時間（最初のリビルド処理以降は平均時間）
【０２５３】
具体的には、マスタ制御モジュールは、バッファセット管理テーブル内の未使用のバッファセットの個別バッファに、少なくとも以下の計算により求められる領域サイズ（＝ＢｕｆｆｅｒＦｒｅｅ）の空きがあるか否かにより、リビルド処理を実行すべきか否かを判別する。
【０２５４】
（ａ）２世代前のＩ／Ｏ量（＝Ｉ／Ｏｔ−２）と、１世代前のＩ／Ｏ量（＝Ｉ／Ｏｔ−１）と、をバッファセット情報記憶部２０２の格納Ｉ／Ｏ数から取得し、Ｉ／Ｏの増加量を求める。
【０２５５】
（ｂ）２世代前から１世代前へのバッファ切替え時間（＝ＣｈｎＴｉｍｅ）を取得する。
【０２５６】
（ｃ）以下の式により、時間当りのＩ／Ｏ増加量（＝Ｉ／ＯＣｈｇＴｉｍｅ）を算出する。
【数１】
0005397148.tif 000002
・・・（１）
【０２５７】
（ｄ）以下の式により、１つのリビルド対象領域に対するリビルド処理に要する時間（＝ＲｅｂｕｉｌｄＴｉｍｅ）と、時間当りのＩ／Ｏ増加量（＝Ｉ／ＯＣｈｇＴｉｍｅ）と、を積算する。１つのリビルド対象領域に対するリビルド処理を実行する間のＩ／Ｏ量（＝Ｉ／ＯＲｅｂｕｉｌｄ）が求められる。
【数２】
0005397148.tif 000003
・・・（２）
【０２５８】
（ｅ）以下の式により、リビルド動作中でも新たな世代を退避出来るだけの領域サイズ（＝ＢｕｆｆｅｒＦｒｅｅ）が求められる。
【数３】
0005397148.tif 000004
・・・（３）
なお、本実施例では、式（３）に示したように、Ｉ／ＯＲｅｂｕｉｌｄの３倍をＢｕｆｆｅｒＦｒｅｅとしているが、２倍や４倍など必要に応じて変更してもよい。
【０２５９】
以上の処理により求めた領域サイズＢｕｆｆｅｒＦｒｅｅの空き領域がバッファセット管理テーブル内の未使用のバッファセットの個別バッファにあると判断した場合（ステップＳ２１０７  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２１０８に移行する。また、領域サイズＢｕｆｆｅｒＦｒｅｅの領域がバッファセット管理テーブル内の未使用のバッファセットの個別バッファにないと判断した場合（ステップＳ２１０７  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２１１１に移行する。
【０２６０】
ステップＳ２１０８において、マスタ制御モジュールは、ディスクアクセス抑止モード、すなわち、マスタ制御モジュールのメモリ内に記憶されるディスクアクセス抑止モード用のフラグをＯＮに設定する。このディスクアクセス抑止モードは、退避用バッファ１１８へのアクセス、例えば、ライトバックやステージングを抑止するモードである。
【０２６１】
マスタ制御モジュールは、退避用バッファ１１８へのアクセス、例えば、ライトバックやステージングを行なう前に必ずディスクアクセス抑止モードをチェックし、ディスクアクセス抑止モードがＯＮの場合には、ディスクアクセス、すなわちライトバックやステージングを中断する。
【０２６２】
ステップＳ２１０９において、マスタ制御モジュールは、リビルド処理を実行する。そして、リビルド処理が完了すると、マスタ制御モジュールは、ディスクアクセス抑止モード、すなわち、ディスクアクセス抑止モード用のフラグをＯＦＦに設定する（ステップＳ２１１０）。
【０２６３】
ステップＳ２１１１において、マスタ制御モジュールは、退避用バッファ１１８へのアクセス、例えば、ライトバックやステージングの待ち状態のプロセスがあるか否かを判別する。例えば、ディスクアクセス抑止モードがＯＮの状態で生じた退避用バッファ１１８へのアクセスは、待ち行列などで管理される。
【０２６４】
退避用バッファ１１８へのアクセスに待ち状態のものがある場合（ステップＳ２１１１  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２１１２に移行する。また、退避用バッファ１１８へのアクセスに待ち状態のものがない場合（ステップＳ２１１１  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２１１３に移行する。
【０２６５】
ステップＳ２１１２において、マスタ制御モジュールは、待ち状態にある退避用バッファ１１８へのディスクアクセス、すなわちライトバックやステージングを実行する。
ステップＳ１２１３において、マスタ制御モジュールは、ディスク装置内の全ての個別退避用バッファについてリビルド処理を実行したか否かを判別する。なお、この判別に際し、リビルド対象領域にデータが退避されていない領域は考慮しない。
【０２６６】
全ての個別退避用バッファについてリビルド処理が完了した場合（ステップＳ２１１３  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２１１４に移行してリビルド処理を終了する。また、リビルド処理を行なっていない領域がある場合（ステップＳ２１１３  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２１０１に移行する。
【０２６７】
図２２は、図１１Ｂに示したマッチング処理（ステップＳ１１１１ａ）の具体的な処理を示すフローチャートである。なお、図２２では、コピー元装置１１０に備わるマスタ制御モジュールと、その他の制御モジュールと、についての具体的な処理を示す。
【０２６８】
ステップＳ２２０１ａにおいて、マスタ制御モジュールは、未使用バッファＩＤ記憶部２０６を参照する。そして、未使用バッファＩＤ記憶部２０６に記録されている未使用バッファＩＤの数が、バッファセット情報記憶部２０２に記憶されているバッファセット情報に含まれるコピー元ＩＤとのマッチングに必要な数だけあるか否かを確認する。
【０２６９】
そして、ステップＳ２２０１ａにおいて、必要な数の未使用バッファＩＤを確認できない場合（Ｓ２２０１ａ  ＮＯ）、マスタ制御モジュールは、処理をステップＳ２２０２ａに移行する。そして、マスタ制御モジュールは、Ｓ２２０２ａにてコピー先装置１２０からの未使用バッファ通知を待ち、未使用バッファ通知を受付けると、処理をステップＳ２２０１ａに移行する。
【０２７０】
また、ステップＳ２２０１ａにおいて、必要な数の未使用バッファＩＤを確認すると（Ｓ２２０１ａ  ＹＥＳ）、マスタ制御モジュールは、処理をステップＳ２２０３ａに移行する。
【０２７１】
ステップＳ２２０３ａにおいて、マスタ制御モジュールは、未使用バッファＩＤ記憶部２０６から必要な数の未使用バッファＩＤを取得する。そして、既にバッファセット情報記憶部２０２に記憶されているバッファセット情報に含まれるコピー先ＩＤと、取得した未使用バッファＩＤとを組み合わせて関連付けを行なう。これにより、コピー元バッファとコピー先バッファとのマッチングが行なわれる。
【０２７２】
このマッチング処理が終了すると、マスタ制御モジュールは、他の制御モジュールに対して、バッファセット情報の多重化依頼を通知する。
一方、ステップＳ２２０１ｂにおいて、マスタ制御モジュールからバッファセット情報の多重化依頼の通知を受けると、各制御モジュールは、バッファセット情報の多重化処理を行なう。ここで、バッファセット情報の多重化処理とは、コピー元装置１１０またはコピー先装置１２０に備わる全ての制御モジュールに同一のバッファセット情報を保持させる処理である。
【０２７３】
例えば、マスタ制御モジュールから、ステップＳ２２０３ａのマッチング処理が行なわれたバッファセット情報を取得する。そして、自身に備わるバッファセット情報記憶部２０２に取得したバッファセット情報を反映する。
【０２７４】
そして、Ｓ２２０１ｂにおけるバッファセット情報の多重化処理が終了すると、各制御モジュールは、バッファセット情報の多重化処理の完了をマスタ制御モジュールに通知する。
【０２７５】
ステップＳ２２０４ａにおいて、マスタ制御モジュールは、バッファセット情報の多重化処理の依頼をした制御モジュールの全てから応答を受信したか否かを確認する。そして、当該応答を全ての制御モジュールから受信したと判断すると（Ｓ２２０５ａ  ＹＥＳ）、コピー先バッファ割り当て処理を終了し（ステップＳ２２０６ａ）、図１１Ｂに示したステップＳ１１１２ａの処理に移行する。
【０２７６】
本実施例に係るコピー元装置１１０は、複数のメモリ、例えば、図２に示すメモリ２００と、退避用バッファ１１８と、を備える。
そして、それら複数のメモリを使用したバッファセットの使用率が一定以上になると、コピー元装置１１０は、バッファセットデータを、退避用バッファ１１８に退避するライトバックを行なう。
【０２７７】
例えば、コピー元装置１１０−コピー先装置１２０間の回線能力が低い場合にホスト１５０から次々にＷｒｉｔｅ  Ｉ／Ｏ命令を受けても、コピー元装置１１０は、バッファセットの使用率が一定以上になると、バッファセットデータを退避用バッファ１１８に退避する。
【０２７８】
一方、コピー元装置１１０は、バッファセットデータのコピー先装置１２０への転送と展開処理が完了すると、そのバッファセットデータが記憶されていた領域を解放し、解放した領域に、退避用バッファ１１８に退避していたバッファセットデータをステージングする。そして、コピー元装置１１０は、そのバッファデータをコピー先装置１２０に転送する。
【０２７９】
このように、本実施例に係るコピー元装置１１０によると、コピー元装置１１０−コピー先装置１２０間の回線能力が低い場合など、データの転送処理に遅延が生じる場合であっても、バッファセットを枯渇させることがない。その結果、コピー元装置１１０は、データの転送処理に遅延が生じる場合でも、順序性を保証したリモートコピーを行なうことが可能となる。
【０２８０】
回線能力が均一でなく不安定である場合やＷｒｉｔｅ  Ｉ／Ｏ等によるデータ更新量がコピー元装置１１０に備わる記録専用バッファ２０１の容量を超える場合などによってデータの転送処理に遅延が生じる場合も同様の効果を奏する。
【０２８１】
さらに、本実施例に係るコピー元装置１１０は、冗長構成を有する退避用バッファ１１８に故障等が生じてリビルドが必要になった場合、記録専用バッファ２０１等の空き容量やＩ／Ｏ負荷などに応じてリビルドを実行するか否かを制御する。
【０２８２】
これにより、退避用バッファ１１８に対するライトバックやステージング等のディスクアクセスと、退避用バッファ１１８に対するリビルドと、が競合することにより、バッファセットデータを退避用バッファ１１８に退避させる動作が遅くなることを防止できる。したがって、バッファセットデータを退避用バッファ１１８に退避させる動作が遅くなり、次々にＷｒｉｔｅ  Ｉ／Ｏを受けても、バッファセットを枯渇させることを防止することができる。
【０２８３】
その結果、退避用バッファ１１８に対するリビルドを行なっても、順序性を保証したリモートコピーを行なうことが可能となる。また、順序性を保証したリモートコピーを行ないつつ退避用バッファ１１８の冗長性を回復させることが可能となる。
【０２８４】
さらに、コピー元装置１１０は、リビルド対象領域にデータが退避されていない場合には、そのリビルド対象領域に対するリビルドは行なわないので、その分リビルド動作を軽減することが可能となる。
【０２８５】
また、従来のリモートコピー処理では、バッファセット情報の作成時に、コピー元ＩＤとコピー先ＩＤとのマッチング処理を行なっていた。しかし、本実施例に係るリモートコピー処理では、ステップＳ１１０２ａのタイミングでは行わず、バッファへの格納処理が完了して転送処理を行う直前（ステップＳ１１１１ａ）で行う。
【０２８６】
そのため、転送処理に関するバッファ以外に対して、転送処理と並行してデータの記憶処理を行うことができるので、コピー元装置１１０に備わる記録専用バッファ２０１およびバッファセット情報記憶部２０２を含むバッファ全てを効率的に使用することが可能となる。例えば、ホスト１５０からのＷｒｉｔｅ  Ｉ／Ｏに係るデータを、コピー元装置１１０に備わるバッファの容量がなくなるまで格納することが可能となる。
【０２８７】
その結果、順序性を保証したリモートコピーに使用するバッファに関し、コピー先装置１２０に備わるバッファが、コピー元装置１１０に備わるバッファより少ない場合であっても、コピー元装置が有するバッファを有効に使用することが可能となる。
【０２８８】
また、コピー元装置１１０−コピー先装置１２０間のネットワークに何らかのトラブルが生じる等して経路閉塞状態となった場合でも、コピー元装置１０１に備わるバッファに容量が許す限りＷｒｉｔｅデータを格納することができる。したがって、バッファが枯渇するまでに経路閉塞状態を解消すれば、順序性を保証したリモートコピー処理を中断する必要がなくなるという効果を奏する。その結果、リモートコピー処理の信頼性・安定性を向上するという効果を奏する。
【０２８９】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
上位装置から送信されたデータを一時的に記憶する複数の第１の記憶手段を有し前記データを前記第１の記憶手段に分散して記憶する記憶装置において、
複数の前記第１の記憶手段それぞれに記憶された前記データを含むデータ群を一括して出力するデータ群出力手段と、
複数の第２の記憶手段による冗長構成を有し前記データ群を記憶するデータ群記憶手段と、
前記第１の記憶手段の使用状況に応じて、前記データ群を複数の前記第１の記憶手段から読み出して前記データ群記憶手段に退避し、または、退避した前記データ群を複数の前記第１の記憶手段に分散して記憶する退避・記憶処理手段と、
前記データ群記憶手段に含まれる前記第２の記憶手段のうちリビルドの対象となるリビルド対象記憶手段に対するリビルド処理を、前記退避・記憶処理手段による前記リビルド対象記憶手段の使用状況に応じて制御するリビルド制御手段と、
を備える記憶装置。
（付記２）
前記リビルド対象記憶手段の使用状況は、前記リビルド処理の間に新たにデータ群を記憶するために必要な空き記憶領域量、であることを特徴とする付記１に記載の記憶装置。
（付記３）
前記リビルド制御手段は、前記リビルド対象記憶手段の有する複数の記憶領域の１つに対してリビルド処理を行なう間に新たにデータ群を記憶するために必要と予測される空き記憶領域量が一定量に満たない場合、前記リビルド処理を中断する、ことを特徴とする付記１に記載の記憶装置。
（付記４）
前記リビルド制御手段は、前記リビルド対象記憶手段の有する複数の記憶領域に対して記憶領域毎にリビルド処理を実行し、前記データ群が記憶されていない前記記憶領域に対するリビルド処理はスキップする、ことを特徴とする付記１に記載の記憶装置。
（付記５）
前記第１の記憶手段の使用状況は、前記第１の記憶手段が有する複数の記憶領域のうち、出力中または出力先から応答待ちの状態にある前記データ群を記憶している記憶領域の割合または数、であることを特徴とする付記１に記載の記憶装置。
（付記６）
前記退避・記憶処理手段は、前記第１の記憶手段が有する複数の記憶領域のうち、出力中または出力先から応答待ちの状態にある前記データ群を記憶している記憶領域の割合または数が一定以上になると、前記データ群を前記第１の記憶手段から読み出して前記データ群記憶手段に退避する、ことを特徴とする付記１に記載の記憶装置。
（付記７）
前記退避・記憶処理手段は、前記第１の記憶手段が有する複数の記憶領域のうち、所定の記憶領域が使用可能になると、退避した前記データ群を前記第１の記憶手段に分散して記憶する、ことを特徴とする付記１に記載の記憶装置。
（付記８）
上位装置から送信されたデータを一時的に分散して記憶する複数の第１の記憶手段毎に有する制御装置において、
前記第１の記憶手段に記憶された前記データを出力するとともに、他の制御装置に該他の制御装置が有する前記データを出力させて、前記複数のデータを含むデータ群を一括して出力するデータ群出力手段と、
前記第１の記憶手段の使用状況に応じて、複数の第２の記憶手段による冗長構成を有し前記データ群を記憶するデータ群記憶手段に前記第１の記憶手段に記憶された前記データを退避するデータ退避処理を実行とともに前記他の制御装置に対して前記データ退避処理の実行を指示し、または、退避した前記データを前記第１の記憶手段に記憶するデータ記憶処理を実行するとともに前記他の制御装置に対して前記データ記憶処理の実行を指示する退避・記憶処理手段と、
前記他の制御手段からの指示により、前記データ群記憶手段に前記第１の記憶手段に記憶された前記データを退避し、または、退避した前記データを前記第１の記憶手段に記憶するデータ記憶処理を実行する退避・記憶処理手段と、
前記データ群記憶手段に含まれる前記第２の記憶手段のうちリビルドの対象となるリビルド対象記憶手段に対するリビルド処理を、前記退避・記憶処理手段による前記リビルド対象記憶手段の使用状況に応じて制御するリビルド制御手段と、
を備える制御装置。
（付記９）
上位装置から送信されたデータを一時的に分散して記憶する複数の第１の記憶手段毎に有する制御装置において、
他の制御装置からの指示に応じて、前記第１の記憶手段に記憶された前記データを出力するデータ出力手段と、
前記他の制御手段からの指示により、複数の第２の記憶手段による冗長構成を有し前記データ群を記憶するデータ群記憶手段に前記第１の記憶手段に記憶された前記データを退避し、または、退避した前記データを前記第１の記憶手段に記憶するデータ記憶処理を実行する退避・記憶処理手段と、
を備える制御装置。
（付記１０）
前記リビルド対象記憶手段の使用状況は、前記リビルド処理の間に新たにデータ群を記憶するために必要な空き記憶領域量、であることを特徴とする付記８または９に記載の制御装置。
（付記１１）
前記リビルド制御手段は、前記リビルド対象記憶手段の有する複数の記憶領域の１つに対してリビルド処理を行なう間に新たにデータ群を記憶するために必要と予測される空き記憶領域量が一定量に満たない場合、前記リビルド処理を中断する、ことを特徴とする付記８または９に記載の制御装置。
（付記１２）
前記リビルド制御手段は、前記リビルド対象記憶手段の有する複数の記憶領域に対して記憶領域毎にリビルド処理を実行し、前記データ群が記憶されていない前記記憶領域に対するリビルド処理はスキップする、ことを特徴とする付記８または９に記載の制御装置。
（付記１３）
上位装置から送信されたデータを一時的に記憶する複数の第１の記憶手段を有し前記データを前記第１の記憶手段に分散して記憶する記憶装置を制御する制御方法において、
複数の前記第１の記憶手段それぞれに記憶された前記データを含むデータ群を一括して出力し、
前記第１の記憶手段の使用状況に応じて、複数の第２の記憶手段による冗長構成を有し前記データ群を記憶するデータ群記憶手段に、前記第１の記憶手段から読み出した前記データ群を退避し、または、退避した前記データ群を複数の前記第１の記憶手段に分散して記憶し、
前記データ群記憶手段に含まれる前記第２の記憶手段のうちリビルドの対象となるリビルド対象記憶手段に対するリビルド処理を、前記リビルド対象記憶手段の使用状況に応じて制御する、
ことを特徴とする制御方法。
【符号の説明】
【０２９０】
１００      ストレージシステム
１１０      コピー元装置
１１７      ディスク装置
１１８      退避用バッファ
１２０      コピー先装置
２００      メモリ
２０１      記録専用バッファ
２０１ａ    バッファ
２０１ｂ    ＢＩＴ記憶部
２０２      バッファセット情報記憶部
２０３      バッファ管理テーブル記憶部
２０４      バッファセット管理テーブル記憶部
２０５      退避用バッファ管理テーブル記憶部
３００      バッファ管理テーブル
４００      バッファセット管理テーブル
５００      退避用バッファ管理テーブル
【図２】
0005397148.tif 000005
【図３】
0005397148.tif 000006
【図４】
0005397148.tif 000007
【図５】
0005397148.tif 000008
【図１１Ａ】
0005397148.tif 000009
【図１１Ｂ】
0005397148.tif 000010
【図１２】
0005397148.tif 000011
【図１３】
0005397148.tif 000012
【図１５】
0005397148.tif 000013
【図１６】
0005397148.tif 000014
【図１７】
0005397148.tif 000015
【図２０Ａ】
0005397148.tif 000016
【図２０Ｂ】
0005397148.tif 000017
【図２１】
0005397148.tif 000018
【図２２】
0005397148.tif 000019
【図１】
0005397148.tif 000020
【図６】
0005397148.tif 000021
【図７】
0005397148.tif 000022
【図８】
0005397148.tif 000023
【図９】
0005397148.tif 000024
【図１０】
0005397148.tif 000025
【図１４】
0005397148.tif 000026
【図１８】
0005397148.tif 000027
【図１９】
0005397148.tif 000028
【図２３】
0005397148.tif 000029
【図２４】
0005397148.tif 000030