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