(57)【特許請求の範囲】
【請求項１】
上位装置から送信される第１のデータを記憶する第１の記憶手段と前記第１のデータを一時的に記憶する複数の第２の記憶手段とを有する記憶装置において、
前記第１の記憶手段に記憶した前記第１のデータを前記第２の記憶手段に記憶するデータ記憶手段と、
複数の前記第２の記憶手段それぞれに記憶された第２のデータを含むデータ群の退避に使用する第３の記憶手段と、
前記第２の記憶手段の使用状況に応じて、前記データ群を前記第２の記憶手段から読み出して前記第３の記憶手段に退避する退避手段と、
前記第２の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力手段と、
使用していない、複数の前記第２の記憶手段に、前記第３の記憶手段に退避された前記データ群を記憶する復旧手段と、
サスペンドの指示を受けると、前記復旧手段の処理を抑止すると共に、前記データ群出力手段に、既に前記第２の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させた後、前記データ群出力手段による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド手段と、
を備える記憶装置。
【請求項２】
前記サスペンド手段は、前記サスペンドの指示を受けると、前記サスペンド状態に移行するまで、前記復旧手段の処理を抑止する、
ことを特徴とする請求項１に記載の記憶装置。
【請求項３】
前記データ群出力手段は、前記サスペンド状態に移行すると、前記サスペンド状態が解除されるまで、新たに前記第２の記憶手段に記憶される前記データ群の内容を、第４の記憶手段に記憶する、
ことを特徴とする請求項２に記載の記憶装置。
【請求項４】
上位装置から送信される第１のデータを記憶する第１の記憶手段と前記第１のデータを一時的に記憶する複数の第２の記憶手段とを有する記憶装置を制御する制御装置において、
前記第１の記憶手段に記憶した前記第１のデータを前記第２の記憶手段に記憶するデータ記憶手段と、
前記第２の記憶手段の使用状況に応じて、複数の前記第２の記憶手段それぞれに記憶された第２のデータを含むデータ群を前記第２の記憶手段から読み出し、前記データ群の退避に使用する第３の記憶手段に退避する退避手段と、
前記第２の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力手段と、
使用していない、複数の前記第２の記憶手段に、前記第３の記憶手段に退避された前記データ群を記憶する復旧手段と、
サスペンドの指示を受けると、前記復旧手段の処理を抑止すると共に、前記データ群出力手段に、既に前記第２の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させた後、前記データ群出力手段による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド手段と、
を備える制御装置。
【請求項５】
上位装置から送信される第１のデータを記憶する第１の記憶手段と前記第１のデータを一時的に記憶する複数の第２の記憶手段とを有する記憶装置の制御方法において、
前記第１の記憶手段に記憶した前記第１のデータを前記第２の記憶手段に記憶し、
前記第２の記憶手段の使用状況に応じて、複数の前記第２の記憶手段それぞれに記憶された第２のデータを含むデータ群を前記第２の記憶手段から読み出し、前記データ群の退避に使用する第３の記憶手段に退避し、
前記第２の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力し、
使用していない、複数の前記第２の記憶手段に、前記第３の記憶手段に退避された前記データ群を記憶し、
サスペンドの指示を受けると、使用していない、複数の前記第２の記憶手段への、前記第３の記憶手段に退避された前記データ群の記憶を抑止すると共に、既に前記第２の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力した後、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させる制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、順序性を保証したコピー機能を有する記憶装置、制御装置および記憶装置の制御方法に関する。
【背景技術】
【０００２】
従来、分散キャッシュメモリ型のストレージシステムを採用するＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）装置では、性能や信頼性の向上のために、ストレージに対するデータの入出力を制御する制御モジュールを複数備える冗長構成が採用されている。そして、制御モジュール毎に、論理ボリュームに対するデータのＲｅａｄ／Ｗｒｉｔｅ処理が実行される。
【０００３】
このようなＲＡＩＤ装置は、信頼性等の向上のために、順序性を保証したコピー機能を備える。
例えば、ＲＡＩＤ装置は、上位装置からのライト命令により更新されたデータのコピーを、複数のキャッシュバッファに記憶すると、順序性を保証するために、複数のキャッシュバッファに記憶されたデータをバッファセットと呼ばれる単位でコピー先装置に送信している。
【０００４】
上記技術に関連して、書き込みデータを記憶する書き込みバッファの使用状況を監視し、バッファの空き容量が少なるとバッファ内のデータを、ＲＡＩＤ０や０＋１などのディスクシステムに書き出し、使用状況が好転すると待避したデータをバッファに書き戻すバックアップ装置について知られている。
【０００５】
また、複数のリモートコピーがそれぞれ非同期で実行される場合でも、ボリューム間の記憶内容を整合させるストレージシステムについて知られている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−２６８４２０号公報
【特許文献２】特開２００７−２６４９４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、場合によっては、上述したキャッシュバッファが枯渇してしまう場合が考えられる。例えば、装置間を接続する回線能力が低い場合、装置間を接続する回線が不安定である場合、上位装置からのライト命令によるデータの更新量がキャッシュバッファの容量を超える場合などである。
【０００８】
キャッシュバッファが枯渇してしまうと、順序性を保証したコピーを継続することができなくなってしまう可能性がある。
この場合、キャッシュバッファの枯渇を回避して順序性を保証したコピーを継続するために、別途磁気ディスク装置などの記憶装置上に退避用バッファを設けることが考えられる。キャッシュバッファの使用状況に応じて、キャッシュバッファ上のデータを退避用バッファに一時的に退避し、コピー先装置へ送信する時に退避用バッファからキャッシュバッファ上へデータを戻してから送信することで、キャッシュバッファの枯渇を回避できるからである。
【０００９】
一方、順序性を保証したコピー中のセッションをサスペンド状態にする機能がある。従来、ＲＡＩＤ装置は、順序性を保証したコピー中のセッションに対するサスペンドの指示を受けると、サスペンド対象のセッションのコピーデータを全てコピー先装置に反映し、コピー先装置と等価状態になってからサスペンド状態に移行していた。コピーデータの順序性を保証するためである。そのため、ＲＡＩＤ装置は、サスペンド対象のセッションのコピーデータがコピー先装置と等価状態となるまで、サスペンド状態に移行することができなかった。コピーデータを全てコピー先装置に反映して等価状態にしてからサスペンド状態に移行する処理を「等価サスペンド処理」という。
【００１０】
上述のように、ＲＡＩＤ装置がコピー先装置と等価状態になるには、ＲＡＩＤ装置のキャッシュバッファに記憶されている、サスペンド対象のセッションのコピーデータが、全てコピー先装置に反映される必要がある。
【００１１】
そのため、ＲＡＩＤ装置は、上位装置からサスペンドコマンドを受けると、キャッシュバッファ上の、サスペンド対象のセッションのコピーデータを監視し、サスペンド対象のセッションのコピーデータを全てコピー先装置に送信した時点でサスペンド状態に移行していた。
【００１２】
しかし、大容量の退避用バッファを使用する場合、キャッシュバッファに記憶されているコピーデータだけでなく、退避用バッファに記憶されているコピーデータも、コピー先装置に反映する必要がある。そのため、上位装置からサスペンドコマンドを受けてから、サスペンド状態に移行するまでに、膨大な時間を要していた。
【００１３】
例えば、図１に示すストレージシステム１００の運用を考える。
図１に示すストレージシステム１００は、東京に配置されたＲＡＩＤ装置１１０と、名古屋に配置されたＲＡＩＤ装置１２０と、大阪に配置されたＲＡＩＤ装置１３０と、を備える。そして、ＲＡＩＤ装置１１０とＲＡＩＤ装置１２０とはネットワーク１４０を介して通信可能に接続している。また、ＲＡＩＤ装置１２０とＲＡＩＤ装置１３０とはネットワーク１５０を介して通信可能に接続している。
【００１４】
図２は、ストレージシステム１００のバックアップ処理の運用例を示す図である。
セッションＡは、ＲＡＩＤ装置１１０からＲＡＩＤ装置１２０への、順序性を保証した非同期コピーを実行するセッションである。また、セッションＢは、ＲＡＩＤ装置１２０からＲＡＩＤ装置１３０へのリモートコピーを実行するセッションである。
【００１５】
例えば、２３日の０：００に等価サスペンドの指示を受けると、ＲＡＩＤ装置１１０は、セッションＡにおいて、等価サスペンド処理の実行を開始する。そして、例えば、２３日の３：００に等価サスペンド処理が完了すると、サスペンド対象のセッションＡのコピーデータが全てＲＡＩＤ装置１２０に反映される。すなわち、ＲＡＩＤ装置１２０は、２３日の０：００時点のＲＡＩＤ装置１１０と等価状態となる。
【００１６】
また、セッションＢでは、２３日の３：００から、ＲＡＩＤ装置１２０は、前回からの変更内容をＲＡＩＤ装置１３０にリモートコピーを開始する。このリモートコピーが完了すると、ＲＡＩＤ１３０は、２３日の０：００時点のＲＡＩＤ装置１１０と等価状態となる。
【００１７】
以上の処理が完了すると、ＲＡＩＤ１２０および１３０は、２３日の０：００時点のＲＡＩＤ装置１１０と等価状態となる。
しかし、上述したように、退避用バッファを使用したＲＡＩＤ装置１１０では、等価サスペンド処理に非常に時間がかかる。そのため、等価サスペンド処理を実行中に、ストレージシステム１００が被災する確率も高くなってしまうという問題がある。
【００１８】
例えば、図２に示す２３日の０：００〜３：１０までの間に、東京に配置したＲＡＩＤ装置１１０と、名古屋に配置したＲＡＩＤ装置１２０と、がともに被災した場合、２２日の業務データが全て失われる場合も考えられる。
【００１９】
本記憶装置は、上述した問題に鑑みてなされたものであり、その解決しようとする課題は、災害耐性が高いバックアップが可能な記憶装置、制御装置および記憶装置の制御方法を提供することである。
【課題を解決するための手段】
【００２０】
本記憶装置の１つの観点によれば、本記憶装置は、上位装置から送信される第１のデータを記憶する第１の記憶手段と前記第１のデータを一時的に記憶する複数の第２の記憶手段とを有する記憶装置において、以下の構成要素を備える。
【００２１】
データ記憶手段は、前記第１の記憶手段に記憶した前記第１のデータを前記第２の記憶手段に記憶する。
第３の記憶手段は、複数の前記第２の記憶手段それぞれに記憶された第２のデータを含むデータ群の退避に使用する記憶手段である。
【００２２】
退避手段は、前記第２の記憶手段の使用状況に応じて、前記データ群を前記第２の記憶手段から読み出して前記第３の記憶手段に退避する。
データ群出力手段は、前記第２の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力する。
【００２３】
復旧手段は、使用していない、複数の前記第２の記憶手段に、前記第３の記憶手段に退避された前記データ群を記憶する。
サスペンド手段は、サスペンドの指示を受けると、前記復旧手段の処理を抑止すると共に、前記データ群出力手段に、既に前記第２の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させる。その後、サスペンド手段は、前記データ群出力手段による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させる。
【発明の効果】
【００２４】
本記憶装置によると、災害耐性が高いバックアップが可能な記憶装置、制御装置および記憶装置の制御方法を提供することができる。
【図面の簡単な説明】
【００２５】
【図１】ストレージシステムを示す図である。
【図２】ストレージシステムのバックアップ処理の運用例を示す図である。
【図３】第１の実施例に係る記憶装置を使用したストレージシステムの構成例を示す図である。
【図４】第２の実施例に係るＲＡＩＤ装置を使用したストレージシステムの構成例を示す図である。
【図５】第２の実施例に係るセッション管理テーブルの例を示す図である。
【図６】第２の実施例に係るバッファ管理テーブルの例を示す図である。
【図７】第２の実施例に係るバッファセットテーブルの例を示す図である。
【図８】第２の実施例に係る未転送サスペンドコマンド受信処理を示すフローチャートである。
【図９】第２の実施例に係る未転送サスペンドコマンドデキュー監視設定の処理を示すフローチャートである。
【図１０】第２の実施例に係るＩ／Ｏ処理を示すフローチャートである。
【図１１】第２の実施例に係る非同期コピーの概要を示すフローチャートである。
【図１２】第２の実施例に係るステージングを示すフローチャートである。
【図１３】第２の実施例に係る送信処理を示すフローチャートである。
【図１４】第２の実施例に係る未転送サスペンドコマンドデキュー監視処理を示すフローチャートである。
【図１５】第２の実施例に係るサスペンド移行処理を示すフローチャートである。
【図１６】第２の実施例に係る未転送サスペンド監視処理を示すフローチャートである。
【図１７】第２の実施例に係るレジュームコマンド処理を示すフローチャートである。
【図１８】第２の実施例に係る非同期コピーを示すフローチャートである。
【図１９】第２の実施例に係るプライマリ装置に備わる制御モジュールの具体的な構成例を示す図である。
【図２０】第２の実施例に係るストレージシステムを用いたバックアップシステムの構成例を示す図である。
【図２１】第２の実施例に係るバックアップシステムによるバックアップ処理の運用例を示す図である。
【発明を実施するための形態】
【００２６】
以下、本実施形態の一例について、図３〜図２１に基づいて説明する。なお、以下に説明する実施形態はあくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図ではない。すなわち、本実施形態は、その趣旨を逸脱しない範囲で、各実施例を組み合わせるなど種々変形して実施することができる。
【実施例１】
【００２７】
図３は、本実施例に係る記憶装置を使用したストレージシステム３００の構成例を示す図である。
ストレージシステム３００は、本実施例に係る記憶装置であるプライマリ装置３１０と、プライマリ装置３１０のバックアップ用に使用する記憶装置のセカンダリ装置３２０と、を備える。そして、プライマリ装置３１０と、セカンダリ装置３２０とは、ネットワークや専用線、無線などにより互いに通信可能に接続している。
【００２８】
プライマリ装置３１０は、第１の記憶手段３１１、複数の第２の記憶手段３１２、データ記憶手段３１３、第３の記憶手段３１４、退避手段３１５、データ群出力手段３１６、復旧手段３１７およびサスペンド手段３１８を備える。プライマリ装置３１０は、複数の第２の記憶手段３１２を備える分散キャッシュメモリ型のＲＡＩＤ装置である。
【００２９】
第１の記憶手段３１１は、上位装置３３０から送信される第１のデータ、例えば、Ｗｒｉｔｅ命令などのＩ／Ｏ命令で書込みを指示されたＷｒｉｔｅデータを記憶する記憶手段である。第１の記憶手段３１１には、例えば、複数の磁気ディスク装置を用いたディスクアレイなどを使用できる。
【００３０】
第２の記憶手段３１２は、第１のデータを一時的に記憶する記憶手段である。第１のデータは、第２の記憶手段３１２に記憶される。第２の記憶手段３１２には、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの不揮発性メモリを用いることができる。
【００３１】
データ記憶手段３１３は、上位装置３３０から第１のデータを受信すると、第１のデータを第１の記憶手段３１１に記憶するとともに、第１のデータを第２の記憶手段３１２に記憶する。
【００３２】
第３の記憶手段３１４は、複数の第２の記憶手段３１２それぞれに記憶された第２のデータを含むデータ群を、一時的に退避するために使用する記憶手段である。第３の記憶手段３１４には、第１の記憶手段３１１と同様に、例えば、複数の磁気ディスク装置を用いたディスクアレイなどを使用できる。
【００３３】
退避手段３１５は、第２の記憶手段３１２の使用状況に応じて、例えば、第２の記憶手段３１２の使用率が閾値を超えると、データ群を第２の記憶手段３１２から読み出して第３の記憶手段３１４に退避する。このとき、退避手段３１５は、例えば、第２の記憶手段３１２に記憶されているデータ群のうち、最も新しいものから第３の記憶手段３１４に退避することができる。
【００３４】
データ群出力手段３１６は、順序性を保証するために、第２の記憶手段３１２に記憶されたデータをデータ群単位でセカンダリ装置３２０に出力する。一方、セカンダリ装置３２０は、プライマリ装置３１０から送信されたデータ群を受信すると、受信したデータ群を自装置に備わる記憶手段に反映する。プライマリ装置３１０−セカンダリ装置３２０間で、順序性を保証した、データ群のコピー処理が行われる。このコピー処理は、非同期で行うことができる。
【００３５】
復旧手段３１７は、使用していない、複数の第２の記憶手段３１２に、第３の記憶手段３１４に退避されたデータ群を、例えば、最も古いものから順に記憶する。この「使用していない、複数の第２の記憶手段３１２」には、データ群のセカンダリ装置３２０への出力が完了して使用しなくなった第２の記憶手段３１２や、第２の記憶手段３１２の使用率が閾値以下になった場合の、使用していない第２の記憶手段３１２、を含むことができる。
【００３６】
サスペンド手段３１８は、サスペンドの指示を受けると、データ群出力手段３１６に、既に第２の記憶手段３１２に記憶されているデータ群を全てセカンダリ装置３２０に出力させる。その後、サスペンド手段３１８は、データ群出力手段３１６による、データ群のセカンダリ装置３２０への出力処理をサスペンド状態に移行させる。「サスペンド状態」とは、プライマリ装置３１０からセカンダリ装置３２０へのデータ群のコピー処理を一時中断した状態をいう。
【００３７】
以上のように、プライマリ装置３１０は、例えば、上位装置３３０からサスペンドの指示を受けると、既に第２の記憶手段３１２に記憶されているデータ群を全てセカンダリ装置３２０に出力する。これにより、サスペンドの指示を受けた時点で、第２の記憶手段３１２に記憶されている全てのデータ群は、順序性が保証されたままセカンダリ装置３２０に反映される。
【００３８】
また、プライマリ装置３１０は、第２の記憶手段３１２に記憶されているデータ群のみをセカンダリ装置３２０に出力してサスペンド状態に移行するので、サスペンドの指示を受けてから短時間でサスペンド状態に移行することができる。
【００３９】
その結果、サスペンドの指示を受けてから短時間で、プライマリ装置３１０の更新内容を、順序性を保証しつつセカンダリ装置３２０にバックアップすることが可能となる。さらに、セカンダリ装置３２０のバックアップも速やかに行うことが可能となる。
【００４０】
また、サスペンドの指示からサスペンド状態に移行するまでに被災する確率を低く抑えることができるので、災害耐性が高いバックアップを行うことが可能となる。
【実施例２】
【００４１】
図４は、本実施例に係るＲＡＩＤ装置を使用したストレージシステム４００の構成例を示す図である。
ストレージシステム４００は、本実施例に係るＲＡＩＤ装置であるプライマリ装置４１０と、プライマリ装置４１０のバックアップ用に使用するＲＡＩＤ装置のセカンダリ装置４５０と、を備える。プライマリ装置４１０と、セカンダリ装置４５０と、はネットワーク４７０を介して互いに通信可能に接続している。
【００４２】
プライマリ装置４１０は、制御モジュール＃００と、制御モジュール＃０１と、プライマリボリューム４２０と、退避用ボリューム４３０と、コピービットマップ用ボリューム４４０と、を備える分散キャッシュメモリ型のＲＡＩＤ装置である。
【００４３】
制御モジュール＃００は、キャッシュバッファ４１１と、後述するセッション管理テーブル５００、バッファ管理テーブル６００およびバッファセットテーブル７００などを記憶するメモリ４１２と、を備える。
【００４４】
キャッシュバッファ４１１とメモリ４１２には、例えば、ＲＡＭなどの不揮発性メモリを用いることができる。キャッシュバッファ４１１は、送信データバッファ４１１ａと、管理データバッファ４１１ｂと、をそれぞれ８個ずつ備える。
【００４５】
送信データバッファ４１１ａには、送信データ、すなわち、セカンダリ装置４５０に送信するバッファセットデータの一部が記憶される。また、管理データバッファ４１１ｂには、送信データの記憶場所など、送信データを管理するための情報である管理データが記憶される。
【００４６】
制御モジュール＃００は、ホストコンピュータ４８０から指示されるＩ／Ｏ命令を実行する。また、制御モジュール＃００は、メモリ４１２に記憶されているバッファ管理テーブル６００およびバッファセットテーブル７００などを使用して、順序性を保証した非同期コピーを実行する。なお、本実施例では、非同期に行うコピー処理の場合を例に説明するが、非同期に行う場合に限定する趣旨ではない。
【００４７】
また、制御モジュール＃００は、セッション管理テーブル５００、バッファ管理テーブル６００およびバッファセットテーブル７００などを使用して、実行中の非同期コピーをサスペンド状態に移行させる。
【００４８】
本実施例では、非同期コピーをサスペンド状態に移行することを「サスペンド処理」という。特に、退避用バッファ４３１に退避されたバッファセットデータを転送することなくサスペンド状態に移行するサスペンド処理を「未転送サスペンド処理」という。未転送サスペンド処理は、セッション毎に行われる。
【００４９】
制御モジュール＃０１は、キャッシュバッファ４１３と、後述するセッション管理テーブル５００、バッファ管理テーブル６００およびバッファセットテーブル７００などを記憶するメモリ４１４と、を備える。
【００５０】
キャッシュバッファ４１３とメモリ４１４には、例えば、ＲＡＭなどの不揮発性メモリを用いることができる。キャッシュバッファ４１３は、送信データバッファ４１３ａと、管理データバッファ４１３ｂと、をそれぞれ８個ずつ備える。
【００５１】
送信データバッファ４１３ａには、送信データ、すなわち、セカンダリ装置４５０に送信するバッファセットデータの一部が記憶される。また、管理データバッファ４１３ｂには、送信データの記憶場所など、送信データを管理するための情報である管理データが記憶される。
【００５２】
制御モジュール＃０１は、メモリ４１２に記憶されているバッファ管理テーブル６００およびバッファセットテーブル７００などを使用して、順序性を保証した非同期コピーを実行する。また、制御モジュール＃０１は、セッション管理テーブル５００、バッファ管理テーブル６００およびバッファセットテーブル７００などを使用して、実行中の非同期コピーをサスペンド状態に移行させる。
【００５３】
なお、プライマリ装置４１０では、制御モジュール＃００が、マスタ制御モジュールとして動作するものとする。制御モジュール＃０１は、制御モジュール＃００の指示にしたがって、順序性を保証した非同期コピーや未転送サスペンド処理などを実行する。説明を簡単にするために、本実施例では、制御モジュール＃００と制御モジュール＃０１とが連携して動作する処理の主体を「制御モジュール＃００」として説明する。
【００５４】
プライマリボリューム４２０、退避用ボリューム４３０およびコピービットマップ用ボリューム４４０は、例えば、複数の磁気ディスク装置を含むディスクアレイなどで実現される記憶ユニットである。
【００５５】
プライマリボリューム４２０は、ホストコンピュータ４８０からのＩ／Ｏ命令で指定されるＷｒｉｔｅデータを記憶する記憶ユニットである。本実施例に係るプライマリボリューム４２０は、２つの論理ボリュームを備える。そして、各論理ボリュームは、それぞれ制御モジュール＃００、制御モジュール＃０１と対応付けられている。
【００５６】
退避用ボリューム４３０は、退避用バッファ４３１を備える記憶ユニットである。退避用バッファ４３１は、バッファセットデータを退避するために確保された記憶領域である。
【００５７】
コピービットマップ用ボリューム４４０は、コピービットマップ４４１を備える記憶ユニットである。コピービットマップ４４１は、セッション毎に確保されるビットマップテーブルである。
【００５８】
コピービットマップ４４１に含まれるビットは、プライマリボリューム４２０に含まれる所定のサイズの記憶領域の位置と、対応付けられている。そして、例えば、Ｗｒｉｔｅデータによって変更された、プライマリボリューム４２０に含まれる記憶領域、の位置に対応付けられたビットには、「１」が設定される。これにより、コピービットマップ４４１には、Ｗｒｉｔｅデータの内容が書き込まれたプライマリボリューム４２０の記憶領域の位置、すなわち、ホストコンピュータ４８０から受信したＷｒｉｔｅデータの内容、がビットマップ形式で記憶される。
【００５９】
セカンダリ装置４５０は、制御モジュール＃１０と、制御モジュール＃１１と、セカンダリボリューム４６０と、を備える分散キャッシュメモリ型のＲＡＩＤ装置である。
制御モジュール＃１０は、キャッシュバッファ４５１と、後述するセッション管理テーブル５００、バッファ管理テーブル６００およびバッファセットテーブル７００などを記憶するメモリ４５２と、を備える。
【００６０】
キャッシュバッファ４５１とメモリ４５２には、例えば、ＲＡＭなどの不揮発メモリを用いることができる。キャッシュバッファ４５１は、受信データバッファ４５１ａと、管理データバッファ４５１ｂと、をそれぞれ８個ずつ備える。
【００６１】
受信データバッファ４５１ａには、受信データ、すなわち、プライマリ装置４１０から受信したバッファセットデータの一部が記憶される。また、管理データバッファ４５１ｂには、受信データの記憶場所など、受信データを管理するための情報である管理データが記憶される。
【００６２】
制御モジュール＃１０は、メモリ４５２に記憶されているバッファ管理テーブル６００およびバッファセットテーブル７００などを使用して、順序性を保証した非同期コピーを実行する。
【００６３】
制御モジュール＃１１は、キャッシュバッファ４５３と、後述するセッション管理テーブル５００、バッファ管理テーブル６００およびバッファセットテーブル７００などを記憶するメモリ４５４と、を備える。
【００６４】
キャッシュバッファ４５３とメモリ４５４には、例えば、ＲＡＭなどの不揮発メモリを用いることができる。キャッシュバッファ４５３は、受信データバッファ４５３ａと、管理データバッファ４５３ｂと、をそれぞれ８個ずつ備える。
【００６５】
受信データバッファ４５３ａには、受信データ、すなわち、プライマリ装置４１０から受信するバッファセットデータの一部が記憶される。また、管理データバッファ４５３ｂには、受信データの記憶場所など、受信データを管理するための情報である管理データが記憶される。
【００６６】
制御モジュール＃１１は、メモリ４５４に記憶されているバッファ管理テーブル６００およびバッファセットテーブル７００などを使用して、順序性を保証した非同期コピーを実行する。
【００６７】
なお、セカンダリ装置４５０では、制御モジュール＃１０が、マスタ制御モジュールとして動作するものとする。制御モジュール＃１１は、制御モジュール＃１０の指示にしたがって、順序性を保証した非同期コピーなどを実行する。説明を簡単にするために、本実施例では、制御モジュール＃１０と制御モジュール＃１１とが連携して動作する処理の主体を「制御モジュール＃１０」として説明する。
【００６８】
セカンダリボリューム４６０は、例えば、複数の磁気ディスク装置を含むディスクアレイなどで実現される記憶ユニットである。セカンダリボリューム４６０は、プライマリ装置４１０から送られるバッファセットデータを記憶するユニットである。
【００６９】
以下に、ストレージシステム４００の動作の概要を説明する。なお、以下の（１）〜（７）は、図４に示す（１）〜（７）に対応している。ただし、ストレージシステム４００の動作の順番を限定する趣旨ではない。
【００７０】
（１）ホストコンピュータ４８０からプライマリ装置４１０に対して、Ｉ／Ｏ命令、例えばＷｒｉｔｅ命令が発行されると、制御モジュール＃００は、Ｉ／Ｏ命令にしたがって、Ｗｒｉｔｅデータをプライマリボリューム４２０に書き込む。
【００７１】
（２）制御モジュール＃００は、プライマリボリューム４２０に書き込んだＷｒｉｔｅデータを、キャッシュバッファ４１１の送信データバッファ４１１ａと、キャッシュバッファ４１３の送信データバッファ４１３ａと、に分散して記憶する。
【００７２】
なお、「分散して記憶する」とは、場合によって、キャッシュバッファ４１１の送信データバッファ４１１ａに記憶し、または、キャッシュバッファ４１３の送信データバッファ４１３ａに記憶する、という意味である。
【００７３】
本実施例では、プライマリボリューム４２０に備わる論理ボリュームのうち、制御モジュール＃００に対応付けられた論理ボリュームに書き込まれたＷｒｉｔｅデータは、制御モジュール＃００が、キャッシュバッファ４１１の送信データバッファ４１１ａにＷｒｉｔｅデータを記憶する。また、プライマリボリューム４２０に備わる論理ボリュームのうち、制御モジュール＃０１に対応付けられた論理ボリュームに書き込まれたＷｒｉｔｅデータは、制御モジュール＃０１が、キャッシュバッファ４１３の送信データバッファ４１３ａにＷｒｉｔｅデータを記憶する。
【００７４】
送信データバッファ４１１ａと送信データバッファ４１３ａとに分散して記憶されたデータは、送信データバッファ４１１ａと送信データバッファ４１３ａとの組み合わせ、すなわち、バッファセット毎に管理される。バッファセットに記憶されるバッファセットデータには、バッファセットに記憶された順に、識別番号として世代番号が割当てられる。したがって、世代番号が大きいほど古いデータとなる。
【００７５】
図４の例では、キャッシュバッファ４１１およびキャッシュバッファ４１３に、８個の送信データバッファがあるので、８個のバッファセットが備わっていることになる。本実施例では、各バッファセットに、識別番号として、００〜０７までのバッファセット番号を割当てている。例えば、図４のキャッシュバッファ４１１および４１３や、キャッシュバッファ４５１および４５３に記載の００〜０７は、バッファセット番号を示している。
【００７６】
（３）キャッシュバッファ４１１および４１３の使用率が閾値を超えると、制御モジュール＃００は、例えば、バッファセットに記憶されるバッファセットデータのうち、最も新しい世代を退避用バッファ４３１に退避するライトバックを行う。図４では、バッファセット番号０５のバッファセットａに記憶されているバッファセットデータが、退避用バッファ４３１にライトバックされた例を示している。
【００７７】
（４）制御モジュール＃００は、マッチング処理を行った後、バッファセットに記憶されているバッファセットデータを、例えば、最も古い世代から順に、セカンダリ装置４５０に送信する。このマッチング処理では、送信しようとしているバッファセットデータが記憶されている、プライマリ装置４１０側のバッファセットと、送信しようとしているバッファセットデータを記憶する、セカンダリ装置４５０側のバッファセットと、の組み合わが決定される。
【００７８】
（５）一方、セカンダリ装置４５０では、制御モジュール＃１０が、プライマリ装置４１０から受信したバッファセットデータを、マッチング処理で決定したバッファセットに記憶していく。そして、プライマリ装置４１０から受信したバッファセットデータを全てバッファセットに記憶すると、制御モジュール＃１０は、バッファセットデータをセカンダリボリューム４６０に展開する。以上のように、プライマリ装置４１０からセカンダリ装置４５０には、バッファセット毎にデータの送信が行われるので、順序性を保証した非同期コピーを行うことができる。
【００７９】
（６）プライマリ装置４１０では、送信したバッファセットデータのセカンダリボリューム４６０への展開が完了した旨の通知を、セカンダリ装置４５０から受けると、制御モジュール＃００は、送信したバッファセットデータが記憶されていたバッファセットを解放する。そして、退避用バッファ４３１に退避されたバッファセットデータがあれば、例えば、退避用バッファ４３１に退避されているバッファセットデータのうち最も古い世代を、解放されたバッファセットに記憶するステージングを行う。図４では、退避用バッファ４３１に記憶されていたバッファセットデータが、バッファセット番号０３のバッファセットｂにステージングされた例を示している。
【００８０】
（７）非同期コピーを実行中に、ホストコンピュータ４８０がプライマリ装置４１０に対して未転送サスペンドコマンドを発行すると、制御モジュール＃００は、キャッシュバッファ４１１および４１３に記憶されている全てのバッファセットデータを、セカンダリ装置４５０に送信する。この「全てのバッファセットデータ」とは、未転送サスペンドコマンドで指定されたセッションで使用している「全てのバッファセットデータ」である。
【００８１】
キャッシュバッファ４１１および４１３に記憶されている全てのバッファセットデータをセカンダリ装置４５０に出力すると、制御モジュール＃００は、未転送サスペンドコマンドで指定されたセッションをサスペンド状態に移行する。
【００８２】
サスペンド状態に移行すると、制御モジュール＃００は、退避用バッファ４３１に記憶されているバッファセットデータをステージングし、ステージングしたバッファセットデータの内容が書き込まれたプライマリボリューム４２０の記憶領域の位置をコピービットマップ４４１に記憶する。また、サスペンド状態の間、制御モジュール＃００は、ホストコンピュータ４８０からＩ／Ｏ命令を受信すると、Ｉ／Ｏ命令にしたがって、Ｗｒｉｔｅデータをプライマリボリューム４２０に書き込む。そして、制御モジュール＃００は、Ｗｒｉｔｅデータの内容が書き込まれたプライマリボリューム４２０の記憶領域の位置を、コピービットマップ４４１に記憶する。レジュームコマンドを受信したときに、未転送サスペンドコマンド受信時に退避用バッファ４３１に記憶されていたバッファセットデータの内容と、未転送サスペンドコマンド受信後の、プライマリボリューム４２０の変更内容を、セカンダリ装置４５０に反映させるためである。
【００８３】
なお、図４では、プライマリ装置４１０−セカンダリ装置４５０間をネットワーク４７０で接続した場合を示したが、専用線や無線などを用いて互いに通信可能に接続してもよい。
【００８４】
また、図４では、プライマリ装置４１０とセカンダリ装置４５０が、制御モジュールを２つ備えるＲＡＩＤ装置である場合を示したが、制御モジュールの数を限定する趣旨ではない。プライマリ装置４１０とセカンダリ装置４５０は、分散キャッシュメモリ型のＲＡＩＤ装置であればよく、制御モジュールの数やキャッシュバッファの数を限定する趣旨ではない。
【００８５】
また、図４では、理解を容易にするために、例えば、キャッシュメモリ４１１と、メモリ４１２と、を独立した記憶ユニットとして示しているが、キャッシュメモリ４１１と、メモリ４１２と、は１つの記憶ユニットの一部の記憶領域を使用してもよいのは当然である。
【００８６】
また、図４では、理解を容易にするために、例えば、プライマリボリューム４２０と、退避用バッファ４３１と、コピービットマップ４４１と、を独立した記憶ユニットとして示しているが、１または２以上の記憶ユニットを用いて実現してもよい。
【００８７】
また、図４では、例えば、キャッシュバッファ４１１および４１３に、８個のバッファセットを確保した場合の例を示したが、バッファセットの数を限定する趣旨でないのは当然である。
【００８８】
図４に説明した構成において、「データ記憶手段」、「退避する退避手段」、「データ群出力手段」、「復旧手段」および「サスペンド手段」は、制御モジュール＃００および制御モジュール＃０１が、所定のプログラムを実行することによって実現することができる。
【００８９】
また、「第１の記憶手段」は、プライマリボリューム４２０を用いて実現することができる。「第２の記憶手段」は、送信データバッファ４１１ａや送信データバッファ４１３ａを用いて実現することができる。「第３の記憶手段」は、退避用バッファ４３１を用いて実現することができる。「第４の記憶手段」は、コピービットマップ４４１を用いて実現することができる。「データ群」は、バッファセットデータを用いて実現することができる。
【００９０】
図５は、本実施例に係るセッション管理テーブル５００の例を示す図である。
セッション管理テーブル５００には、セッションステータスと、セッション番号と、が含まれる。さらに、セッション管理テーブル５００には、未転送サスペンドコマンドデキュー監視世代番号と、未転送監視世代番号と、未転送サスペンド処理フラグと、未転送サスペンドキューｎｅｘｔと、未転送サスペンドキューｐｒｅｖと、が含まれる。
【００９１】
セッションステータスは、セッションの状態を示す情報である。セッションステータスには、「アクティブ」、「コピー中」または「サスペンド」のいずれかが設定される。「アクティブ」は、セッションが実行されている状態を示す。「コピー中」は、アクティブにはできない状態を示す。例えば、「コピー中」は、レジューム処理時に設定される。「サスペンド」は、セッションがサスペンド状態であることを示す。
【００９２】
セッション番号は、セッション毎に割当てられる識別番号である。
未転送サスペンドコマンドデキュー監視世代番号は、未転送サスペンドコマンド受信時に、ステージングに使用されているバッファセットに記憶されているバッファセットデータのうち、最も古いバッファセットデータの世代番号を示す情報である。対象となるバッファセットデータが存在しない場合、例えば、「０ｘＦＦＦＦ」などを設定することができる。
【００９３】
未転送監視世代番号は、未転送サスペンドコマンド受信時に、バッファセットに記憶されているバッファセットデータのうち、最も新しいバッファセットデータの世代番号を示す情報である。対象となるバッファセットデータが存在しない場合、例えば、「０ｘＦＦＦＦ」などを設定することができる。
【００９４】
未転送サスペンド処理フラグは、セッションが、未転送サスペンド処理の対象か否かを示す情報である。未転送サスペンド処理フラグが「オン」の場合、セッションが、未転送サスペンド処理の対象であることを示し、未転送サスペンド処理フラグが「オフ」の場合、セッションが、未転送サスペンド処理の対象でないことを示す。
【００９５】
未転送サスペンドコマンドキューｎｅｘｔは、現在のセッションの次に、未転送サスペンドコマンドによる処理の対象のセッションを示す情報である。未転送サスペンドコマンドキューｐｒｅｖは、現在のセッションの前に、未転送サスペンドコマンドによる処理の対象のセッションを示す情報である。対象となるセッションが存在しない場合、未転送サスペンドコマンドキューｎｅｘｔおよび未転送サスペンドコマンドキューｐｒｅｖには、例えば、「０ｘＦＦＦＦ」などを設定することができる。
なお、図５には、セッション番号が０のセッション管理テーブル５０１と、セッション番号が１のセッション管理テーブル５０２を例示している。
【００９６】
図６は、本実施例に係るバッファ管理テーブル６００の例を示す図である。
バッファ管理テーブル６００には、未転送サスペンドコマンドキューｔｏｐと、未転送サスペンドコマンドキューｂｔｍと、が含まれる。また、バッファ管理テーブル６００には、ライトバックバッファセットｔｏｐと、ライトバックバッファセットｂｔｍと、が含まれる。また、バッファ管理テーブル６００には、ステージングバッファセットｔｏｐと、ステージングバッファセットｂｔｍと、が含まれる。また、バッファ管理テーブル６００には、ライトバックポインタと、ステージングポインタと、が含まれる。
【００９７】
未転送サスペンドコマンドキューｔｏｐは、未転送サスペンドコマンドによる処理の対象のセッションのうち先頭のセッションを示す。また、未転送サスペンドコマンドキューｂｔｍは、未転送サスペンドコマンドによる処理の対象のセッションのうち最後尾のセッションを示す。
【００９８】
未転送サスペンドコマンドによる処理の対象のセッションは、未転送サスペンドコマンドキューｔｏｐ、未転送サスペンドコマンドキューｂｔｍ、未転送サスペンドコマンドキューｎｅｘｔ、および未転送サスペンドコマンドキューｐｒｅｖを使用したキュー制御で管理される。
【００９９】
未転送サスペンドコマンドキューｔｏｐと未転送サスペンドコマンドキューｂｔｍには、セッション番号が設定される。対象のセッションがない場合、例えば、０ｘＦＦＦＦを設定することができる。
【０１００】
ライトバックバッファセットｔｏｐとライトバックバッファセットｂｔｍは、連続する１または２以上のライトバックに使用するバッファセットを管理するための情報である。ライトバックバッファセットｔｏｐは、ライトバックに使用するバッファセットのうち、先頭のバッファセットを示す。また、ライトバックバッファセットｂｔｍは、ライトバックに使用するバッファセットのうち、最後尾のバッファセットを示す。
ライトバックバッファセットｔｏｐとライトバックバッファセットｂｔｍには、バッファセット番号が設定される。
【０１０１】
図６の例には、バッファセット番号２からバッファセット番号３までのバッファセットを、ライトバックに使用している場合の例を示している。ただし、ライトバックに使用するバッファセットは、バッファセットの使用状況に応じて変動させることができる。
【０１０２】
ステージングバッファセットｔｏｐとステージングバッファセットｂｔｍは、連続する１または２以上のステージングに使用するバッファセットを管理するための情報である。ステージングバッファセットｔｏｐは、ステージングに使用するバッファセットのうち、先頭のバッファセットを示す。また、ステージングバッファセットｂｔｍは、ステージングに使用するバッファセットのうち、最後のバッファセットを示す。
ステージングバッファセットｔｏｐとステージングバッファセットｂｔｍには、バッファセット番号が設定される。
【０１０３】
図６の例には、バッファセット番号０からバッファセット番号１までのバッファセットを、ステージングに使用している場合の例を示している。ただし、ステージングに使用するバッファセットは、バッファセットの使用状況に応じて変動させることができる。
【０１０４】
ライトバックポインタは、ライトバックの対象となるバッファセットデータの世代番号を保持する情報である。また、ステージングポインタは、最後にステージングが行われたバッファセットデータの世代番号を保持する情報である。
【０１０５】
図７は、本実施例に係るバッファセットテーブル７００の例を示す図である。
バッファセットテーブル７００には、バッファセット番号と、世代番号と、バッファセットリンクｐｒｅｖと、バッファセットリンクｎｅｘｔと、が含まれる。
【０１０６】
バッファセット番号は、バッファセット毎に割当てられる識別番号である。
世代番号は、バッファセットデータ毎に割当てられる識別番号である。例えば、最初にバッファセットに記憶される際に、バッファセットデータに割当てられる。
【０１０７】
バッファセットリンクｐｒｅｖは、現在のバッファセットの前にキューされているバッファセットのバッファセット番号を示す情報である。また、バッファセットリンクｎｅｘｔは、現在のバッファセットの次にキューされているバッファセットのバッファセット番号を示す情報である。バッファセットは、バッファセットリンクｐｒｅｖとバッファセットリンクｎｅｘｔとを使用したキュー制御により管理される。バッファセット単位で非同期コピーを行うことにより、順序性を保証したコピーを行うことができる。
なお、図７には、バッファセット番号００〜０３までのバッファセットについての、バッファセットテーブル７０１〜７０４を例示している。
【０１０８】
図８および図９は、本実施例に係る未転送サスペンドコマンド受信処理を示すフローチャートである。
ステップＳ８０１において、未転送サスペンドコマンドを受信すると、制御モジュール＃００は、以下の処理を開始する。
【０１０９】
ステップＳ８０２において、制御モジュール＃００は、未転送サスペンド処理を予約する。例えば、制御モジュール＃００は、未転送サスペンドコマンド実行時に指定されたセッションのセッション管理テーブル５００を参照し、未転送サスペンド処理フラグを「オン」に設定する。このように、未転送サスペンド処理フラグを「オン」に設定することにより、未転送サスペンド処理が予約される。
【０１１０】
なお、本実施例では、未転送サスペンドコマンドを非同期で実行することができるようにするため、未転送サスペンドコマンド受信時には、未転送サスペンド処理の予約を行っている。
【０１１１】
未転送サスペンド処理が予約されたセッションは、後述するステップＳ８０３で特定される、キャッシュバッファ４１１および４１３に記憶されているバッファセットデータ、に書き込まれた記憶領域の位置がコピービットマップ４４１に記憶されるまで、図１４等で後述する未転送サスペンドコマンドデキュー監視が行われる。そして、未転送サスペンドコマンドデキュー監視が終了すると、未転送サスペンド処理が予約されたセッションは、図１５で後述するサスペンド移行処理によりサスペンド状態に移行する。
【０１１２】
ステップＳ８０３において、制御モジュール＃００は、未転送サスペンドコマンドデキュー監視設定を行う。ステップＳ８０３では、サスペンド状態に移行する前に、セカンダリ装置４５０に送信するバッファセットデータの範囲を特定する。このバッファセットデータの範囲は、図９に示す処理によって設定される未転送サスペンドコマンドデキュー監視世代番号と未転送監視世代番号とで決まる。
【０１１３】
ステップＳ８０４において、制御モジュール＃００は、未転送サスペンド処理の対象のセッションを、未転送サスペンドコマンドキューにつなぐ。例えば、制御モジュール＃００は、未転送サスペンド処理の対象のセッションのセッション管理テーブル５００を参照し、未転送サスペンドコマンドキューｐｒｅｖに、バッファ管理テーブル６００の未転送サスペンドコマンドキューｂｔｍの値を設定する。さらに、制御モジュール＃００は、バッファ管理テーブル６００の未転送サスペンドコマンドキューｂｔｍを、未転送サスペンド処理の対象のセッションのセッション番号に変更する。
【０１１４】
ステップＳ８０５において、制御モジュール＃００は、未転送サスペンドコマンドデキュー監視設定がされているか否かを判別する。本実施例では、未転送サスペンドコマンドキューにつながれたセッションがある場合、未転送サスペンドコマンドデキュー監視を行う。したがって、例えば、制御モジュール＃００は、バッファ管理テーブル６００の未転送サスペンドコマンドキューｔｏｐおよび未転送サスペンドコマンドキューｂｔｍを参照し、セッションが設定されていれば、未転送サスペンドコマンドデキュー監視設定がされていると判別できる。
【０１１５】
未転送サスペンドコマンドデキュー監視設定がされている場合（ステップＳ８０５  ＹＥＳ）、制御モジュール＃００は、未転送サスペンドコマンド受信処理を終了する（ステップＳ８０７）。また、未転送サスペンドコマンドデキュー監視設定がされていない場合（ステップＳ８０５  ＮＯ）、制御モジュール＃００は、未転送サスペンドコマンドの実行が完了した旨のコマンド応答を行う（ステップＳ８０６）。そして、制御モジュール＃００は、未転送サスペンドコマンド受信処理を終了する（ステップＳ８０７）。
【０１１６】
図９は、本実施例に係る未転送サスペンドコマンドデキュー監視設定の処理（ステップＳ８０３）を示すフローチャートである。
制御モジュール＃００は、図８に示したステップＳ８０３に処理を移行すると、以下の処理を開始する（ステップＳ９００）。
【０１１７】
ステップＳ９０１において、制御モジュール＃００は、ステージングに使用しているバッファセットがあるか否かを判別する。例えば、制御モジュール＃００は、バッファ管理テーブル６００を参照し、ステージングバッファセットｔｏｐおよびステージングバッファセットｂｔｍにバッファセット番号が設定されていれば、ステージングに使用しているバッファセットがあると判別することができる。
【０１１８】
ステージングに使用しているバッファセットがある場合（ステップＳ９０１  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ９０２に移行する。この場合、制御モジュール＃００は、ステージングに使用しているバッファセットに記憶されているバッファセットデータの中で、最も古い世代のバッファセットデータを未転送サスペンドコマンドデキュー監視の対象に設定する（ステップＳ９０２）。
【０１１９】
ステップＳ９０２では、例えば、以下のように制御モジュール＃００は動作する。
まず、制御モジュール＃００は、バッファ管理テーブル６００を参照する。そして、制御モジュール＃００は、ステージングバッファセットｂｔｍに記憶されているバッファセット番号のバッファセットテーブル７００を参照する。図６のバッファ管理テーブル６００では、ステージングバッファセットｂｔｍにバッファセット番号１が記憶されているので、この場合、制御モジュール＃００は、図７のバッファセットテーブル７０２を参照する。
【０１２０】
そして、制御モジュール＃００は、バッファセットテーブル７００に記憶されている世代番号を、未転送サスペンド処理の対象のセッションのセッション管理テーブル５００にある未転送サスペンドコマンドデキュー監視世代番号に設定する。図７のバッファセットテーブル７０２では、世代番号に１６が記憶されているので、この場合、制御モジュール＃００は、世代番号１６を、未転送サスペンド処理の対象のセッションのセッション管理テーブル５００にある未転送サスペンドコマンドデキュー監視世代番号に設定する。そして、制御モジュール＃００は、処理をステップＳ９０３に移行する。
【０１２１】
また、ステージングに使用しているバッファセットがない場合（ステップＳ９０１  ＮＯ）、制御モジュール＃００は、処理をステップＳ９０３に移行する。
ステップＳ９０３において、制御モジュール＃００は、バッファセットに記憶されているバッファセットデータの中で、最も新しい世代のバッファセットデータを未転送監視の対象に設定する。
【０１２２】
ステップＳ９０３では、例えば、以下のように制御モジュール＃００は動作する。
まず、制御モジュール＃００は、バッファ管理テーブル６００を参照する。そして、制御モジュール＃００は、ライトバックバッファセットｂｔｍに記憶されているバッファセット番号のバッファセットテーブル７００を参照する。図６のバッファ管理テーブル６００では、ライトバックバッファセットｂｔｍにバッファセット番号３が記憶されているので、この場合、制御モジュール＃００は、図７のバッファセットテーブル７０４を参照する。
【０１２３】
そして、制御モジュール＃００は、バッファセットテーブル７００に記憶されている世代番号を、未転送サスペンド処理の対象のセッションのセッション管理テーブル５００にある未転送監視世代番号に設定する。図７のバッファセットテーブル７０４では、世代番号に３２が記憶されているので、この場合、制御モジュール＃００は、世代番号３２を、未転送サスペンド処理の対象のセッションのセッション管理テーブル５００にある未転送監視世代番号に設定する。
以上の処理が終了すると、制御モジュール＃００は、未転送サスペンドコマンドデキュー監視設定の処理を終了し、図８に示したステップＳ８０４に移行する。
【０１２４】
図１０は、本実施例に係るＩ／Ｏ処理を示すフローチャートである。
上位装置からＷｒｉｔｅ命令などのＩ／Ｏ命令を受信すると、制御モジュール＃００は、以下の処理を開始する（ステップS１０００）。
【０１２５】
ステップＳ１００１において、制御モジュール＃００は、受信したＩ／Ｏ命令の属するセッションがサスペンド状態か否かを判別する。以下、受信したＩ／Ｏ命令の属するセッションを「対象セッション」という。
【０１２６】
例えば、制御モジュール＃００は、対象セッションのセッション管理テーブル５００を参照する。そして、セッションステータスに「サスペンド」が設定されている場合、制御モジュール＃００は、対象セッションがサスペンド状態であると判別することができる。
【０１２７】
対象セッションがサスペンド状態である場合（ステップＳ１００１  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１００２に移行する。この場合、制御モジュール＃００は、受信したＷｒｉｔｅデータの内容が書き込まれたプライマリボリューム４２０の記憶領域の位置をコピービットマップ４４１に記憶する（ステップＳ１００２）。具体的には、プライマリボリューム４２０に含まれる所定のサイズの記憶領域の位置毎に、コピービットマップ４４１に含まれるビットを１つずつ対応付けておき、Ｗｒｉｔｅデータによって変更された記憶領域の位置に対応付けられたビットに「１」を設定する。
【０１２８】
ステップＳ１００３において、制御モジュール＃００は、受信したＩ／Ｏ命令に対するＩ／Ｏ応答をホストコンピュータ４８０に対して行う。そして、ステップＳ１００４において、制御モジュール＃００は、受信したＷｒｉｔｅデータをプライマリボリューム４２０に反映する。
【０１２９】
一方、対象セッションがサスペンド状態でない場合（ステップＳ１００１  ＮＯ）、制御モジュール＃００は、処理をステップＳ１００５に移行する。この場合、制御モジュール＃００は、対象セッションに、未転送サスペンド処理が予約されているか否かを判別する（ステップＳ１００５）。例えば、対象セッションのセッション管理テーブル５００の未転送サスペンド処理フラグが「オン」に設定されている場合、制御モジュール＃００は、対象セッションに、未転送サスペンド処理が予約されていると判別することができる。
【０１３０】
対象セッションに未転送サスペンド処理が予約されている場合（ステップＳ１００５  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１００２に移行する。この場合、上述したステップＳ１００２〜Ｓ１００４の処理が実行される。
【０１３１】
対象セッションに未転送サスペンド処理が予約されていない場合（ステップＳ１００５  ＮＯ）、制御モジュール＃００は、処理をステップＳ１００６に移行する。この場合、制御モジュール＃００は、受信したＩ／Ｏ命令に対するＩ／Ｏ応答を行う（ステップＳ１００６）。そして、ステップＳ１００７において、制御モジュール＃００は、受信したＷｒｉｔｅデータをプライマリボリューム４２０に反映する。
【０１３２】
ステップＳ１００８において、制御モジュール＃００は、受信したＷｒｉｔｅデータをバッファセット、すなわち、キャッシュバッファ４１１の送信データバッファ４１１ａと、キャッシュバッファ４１３の送信データバッファ４１３ａと、に分散して記憶する。
【０１３３】
このとき、制御モジュール＃００は、Ｗｒｉｔｅデータを記憶したバッファセットのバッファセットテーブル７００に、新たな世代番号を設定するとともに、他のバッファセットテーブルとのリンクを更新する。例えば、制御モジュール＃００は、Ｗｒｉｔｅデータを記憶したバッファセットのバッファセットテーブル７００のバッファセットリンクｎｅｘｔに、今まで先頭であったバッファセットのバッファセット番号を設定し、バッファセットリンクｐｒｅｖに「なし」を設定する。また、制御モジュール＃００は、今まで先頭であったバッファセットのバッファセットテーブル７００のバッファセットリンクｐｒｅｖに、上述の新たな世代番号を設定する。
【０１３４】
キャッシュバッファの使用率が閾値以上の場合（ステップＳ１００９  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１０１０に移行する。この場合、制御モジュール＃００は、バッファセットに記憶されているバッファセットデータのうち、最も新しいバッファセットデータについて、以下のようにライトバックを実行する（ステップＳ１０１０）。
【０１３５】
まず、制御モジュール＃００は、退避用バッファ４３１における、ライトバック対象のバッファセットデータを記憶する退避用バッファセットのアドレスを算出する。そして、制御モジュール＃００は、算出したアドレスに、ライトバック対象のバッファセットデータを記憶する。このときのバッファセットデータには、例えば、バッファセットテーブル７００の情報、例えば、世代番号やバッファセットリンクｐｒｅｖ、バッファセットリンクｎｅｘｔなどの情報を含めることができる。バッファセットデータの順序性を保証するためである。
【０１３６】
なお、退避用バッファセットの先頭アドレスは、退避用バッファ４３１が連続したアドレス空間である場合、あらかじめ決められた「先頭アドレス」に、「（ライトバックポインタ−１）×退避用バッファセットのサイズ」を加えることにより求めることができる。
【０１３７】
ライトバックが完了すると、制御モジュール＃００は、バッファ管理テーブル６００のライトバックポインタに、ライトバックが完了したバッファセットデータの世代番号を設定する。そして、制御モジュール＃００は、ライトバックが完了したバッファセットを解放する（ステップＳ１０１１）。
【０１３８】
また、キャッシュバッファの使用率が閾値より小さい場合（ステップＳ１００９  ＮＯ）、制御モジュール＃００は、処理をステップＳ１０１２に移行する。
以上の処理が終了すると、制御モジュール＃００は、Ｉ／Ｏ処理を終了する（ステップＳ１０１２）。
【０１３９】
図１１〜図１６は、本実施例に係る非同期コピーを示すフローチャートである。
図１１は、本実施例に係る非同期コピーの概要を示すフローチャートである。図１１には、プライマリ装置４１０からセカンダリ装置４５０への非同期コピーの概要を示している。
【０１４０】
ステップＳ１１０１ａにおいて、制御モジュール＃００は、退避用バッファ４３１を使用しているか判別する。例えば、制御モジュール＃００は、退避用バッファ４３１にバッファセットデータが記憶されていれば、退避用バッファ４３１を使用していると判別できる。
【０１４１】
制御モジュール＃００は、以下に示す（ａ）〜（ｄ）の処理により、退避用バッファ４３１に退避したバッファセットデータの有無を知ることができる。
（ａ）制御モジュール＃００は、バッファ管理テーブル６００を参照し、ライトバックポインタとステージングポインタを取得する。
（ｂ）制御モジュール＃００は、ステージポインタに１を加えた世代番号のバッファセットテーブル７００から、昇順にバッファセットテーブル７００をたどり、欠落している世代を検索する。
【０１４２】
例えば、図６に示したバッファ管理テーブル６００には、ステージングポインタとして世代番号１４が設定されている。そして、制御モジュール＃００は、世代番号１４に１を加えた世代番号１５が記憶されているバッファセットのバッファセットテーブル７０１から昇順にバッファセットテーブル７００をたどる。すると、制御モジュール＃００は、世代番号１７のバッファセットテーブル７００が欠落していることを検出する。
【０１４３】
（ｃ）制御モジュール＃００は、ライトバックポインタから１を引いた世代番号のバッファセットテーブル７００から、降順にバッファセットテーブル７００をたどり、欠落している世代を検索する。
【０１４４】
例えば、図６に示したバッファ管理テーブル６００には、ライトバックポインタとして世代番号３３が設定されている。そして、制御モジュール＃００は、世代番号３３から１を引いた世代番号３２が記憶されているバッファセットのバッファセットテーブル７０４から降順にバッファセットテーブル７００をたどる。すると、制御モジュール＃００は、世代番号３０のバッファセットテーブル７００が欠落していることを検出する。
【０１４５】
（ｄ）以上の処理によって検出した世代番号１７から３０のバッファセットデータが、退避用バッファ１１８に退避されていることがわかる。
退避用バッファ４３１を使用している場合（ステップＳ１１０１ａ  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１１０２ａに移行する。そして、制御モジュール＃００は、解放されたバッファセットがあれば、退避用バッファ４３１に記憶されているバッファセットデータのうち、最も古い世代のバッファセットデータを、解放されたバッファセットに記憶するステージングを実行する（ステップＳ１１０２ａ）。
【０１４６】
ステージングが完了すると、制御モジュール＃００は、バッファ管理テーブル６００のステージングポインタに、ステージングを行ったバッファセットデータの世代番号を設定する。また、制御モジュール＃００は、バッファセットデータを記憶したバッファセットのバッファセットテーブル７００を更新する。この更新は、ライトバック時にバッファセットデータとともに退避用バッファセットに記憶した、バッファセットテーブル７００の情報、例えば、世代番号やバッファセットリンクｐｒｅｖ、バッファセットリンクｎｅｘｔなどの情報により行うことができる。
【０１４７】
ステージングが完了すると、制御モジュール＃００は、処理をステップＳ１１０３ａに移行する。また、ディスクバッファを使用していない場合も（ステップＳ１１０１ａ  ＮＯ）、制御モジュール＃００は、処理をステップＳ１１０３ａに移行する。
【０１４８】
ステップＳ１１０３ａにおいて、制御モジュール＃００は、マッチング処理を行った後、バッファセットに記憶されているバッファセットデータのうち、最も古い世代のバッファセットデータから順に、セカンダリ装置４５０に送信する。
【０１４９】
一方、ステップＳ１１０１ｂにおいて、プライマリ装置４１０からバッファセットデータを受信すると、制御モジュール＃１０は、受信したバッファセットデータを、マッチング処理により決定したバッファセットに記憶する。そして、ステップＳ１１０２ｂにおいて、制御モジュール＃１０は、バッファセットに記憶したバッファセットデータを、セカンダリボリューム４６０に展開する。セカンダリボリューム４６０へのバッファセットデータの展開が完了すると、制御モジュール＃１０は、プライマリ装置４１０に対して、セカンダリボリューム４６０へのバッファセットデータの展開が完了した旨を通知する。ステップＳ１１０３ｂにおいて、制御モジュール＃１０は、セカンダリボリューム４６０への展開が完了したバッファセットデータが記憶されていたバッファセットを解放する。そして、制御モジュール＃１０は、非同期コピーを終了する（ステップＳ１１０４ｂ）。
【０１５０】
一方、ステップＳ１１０４ａにおいて、制御モジュール＃００は、セカンダリ装置４５０から、セカンダリボリューム４６０へのバッファセットデータの展開が完了した旨の通知を受ける。すると、制御モジュール＃００は、セカンダリボリューム４６０への展開が完了したバッファセットデータが記憶されていたバッファセットを解放する。そして、制御モジュール＃００は、非同期コピーを終了する（ステップＳ１１０５ａ）。
【０１５１】
図１２は、本実施例に係るステージング（ステップＳ１１０２ａ）を示すフローチャートである。
制御モジュール＃００は、図１１に示したステップＳ１１０２ａに処理を移行すると、以下の処理を開始する（ステップＳ１２００）。
【０１５２】
ステップＳ１２０１において、制御モジュール＃００は、送信対象のバッファセットデータについて、未転送サスペンド処理が予約されているか否かを判別する。例えば、ステージング対象のバッファセットデータの世代番号が、対象セッションのセッション管理テーブル５００の未転送サスペンドコマンドデキュー監視世代番号より大きい場合、制御モジュール＃００は、未転送サスペンド処理が予約されていると判別できる。
【０１５３】
また、ステージング対象のバッファセットデータの世代番号が、対象セッションのセッション管理テーブル５００の未転送監視世代番号より大きい場合、制御モジュール＃００は、未転送サスペンド処理が予約されていないと判別できる。対象セッションのセッション管理テーブル５００の未転送サスペンドコマンドデキュー監視世代番号や未転送監視世代番号に０ｘＦＦＦＦが設定されている場合も、制御モジュール＃００は、未転送サスペンド処理が予約されていないと判別できる。
【０１５４】
送信対象のバッファセットデータに未転送サスペンド処理が予約されている場合（ステップＳ１２０１  ＹＥＳ）、制御モジュール＃００は、ステージングを抑止する（ステップＳ１２０２）。そして、制御モジュール＃００は、ステージングを実行することなく処理を終了する（ステップＳ１２０４）。
【０１５５】
また、送信対象のバッファセットデータに未転送サスペンド処理が予約されていない場合（ステップＳ１２０１  ＮＯ）、制御モジュール＃００は、処理をステップＳ１２０３に移行する。この場合、制御モジュール＃００は、退避用バッファ４３１に記憶されているバッファセットデータのうち、最も古い世代のバッファセットデータに対して、以下のようにステージングを実行する（ステップＳ１２０３）。
【０１５６】
まず、制御モジュール＃００は、ステージング対象のバッファセットデータが記憶されている退避用バッファセットのアドレスを算出する。そして、制御モジュール＃００は、算出したアドレスから読み出したバッファセットデータを、解放されたバッファセットに記憶する。このバッファセットデータには、ライトバック時にバッファセットデータとともに退避用バッファセットに記憶したバッファセットテーブル７００の情報、例えば、世代番号やバッファセットリンクｐｒｅｖ、バッファセットリンクｎｅｘｔなどの情報を含めることができる。
【０１５７】
なお、退避用バッファセットの先頭アドレスは、退避用バッファ４３１が連続したアドレス空間である場合、あらかじめ決められた「先頭アドレス」に、「（ステージングポインタ−１）×退避用バッファセットのサイズ」を加えることにより求めることができる。
【０１５８】
ステージングが完了すると、制御モジュール＃００は、バッファ管理テーブル６００のステージングポインタに、ステージングが完了したバッファセットデータの世代番号を設定する。以上の処理が終了すると（ステップＳ１２０４）、制御モジュール＃００は、図１１に示した１１０３ａに処理を移行する。
【０１５９】
図１３は、本実施例に係る送信処理（ステップＳ１１０３ａ）の示すフローチャートである。
制御モジュール＃００は、図１１に示したステップＳ１１０３ａに処理を移行すると、以下の処理を開始する（ステップＳ１３００）。
【０１６０】
ステップＳ１３０１において、制御モジュール＃００は、対象セッションがサスペンド状態か否かを判別する。例えば、対象セッションのセッション管理テーブル５００を参照し、セッションステータスに「サスペンド」が設定されている場合、制御モジュール＃００は、対象セッションがサスペンド状態であると判別することができる。
【０１６１】
対象セッションがサスペンド状態である場合（ステップＳ１３０１  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１３０２に移行する。この場合、制御モジュール＃００は、セカンダリ装置４５０に送信すべきバッファセットデータの対象セッションの内容が書き込まれているプライマリボリューム４２０の記憶領域の位置をコピービットマップ４４１に記憶する（ステップＳ１３０２）。
【０１６２】
一方、対象セッションがサスペンド状態でない場合（ステップＳ１３０１  ＮＯ）、制御モジュール＃００は、処理をステップＳ１３０３に移行する。この場合、制御モジュール＃００は、送信対象のバッファセットデータが、未転送サスペンド監視中か否かを判別する（ステップＳ１３０３）。例えば、送信対象のバッファセットデータの世代番号が、対象セッションのセッション管理テーブル５００の未転送サスペンドコマンドデキュー監視世代番号より大きく、かつ、未転送監視世代番号以下の場合、送信対象のバッファセットデータが、未転送サスペンド監視中と判別できる。
【０１６３】
送信対象のバッファセットデータが未転送サスペンド監視中である場合（ステップＳ１３０３  ＹＥＳ）、制御モジュール＃００は、ステップＳ１３０２の処理を実行する。
また、送信対象のバッファセットデータが未転送サスペンド監視中でない場合（ステップＳ１３０３  ＮＯ）、制御モジュール＃００は、処理をステップＳ１３０４に移行する。この場合、制御モジュール＃００は、送信対象のバッファセットデータを、セカンダリ装置４５０に送信する（ステップＳ１３０４）。
以上の処理が終了すると、制御モジュール＃００は、図１１に示したステップＳ１１０４ａに移行する。
【０１６４】
図１４は、本実施例に係る未転送サスペンドコマンドデキュー監視処理を示すフローチャートである。
制御モジュール＃００は、図１１に示したステップＳ１１０４ａの処理が完了すると、以下の処理を開始する（ステップＳ１４００）。
【０１６５】
ステップＳ１４０１において、制御モジュール＃００は、未転送サスペンドコマンドキューにキューされている未転送サスペンドコマンドはあるか判別する。バッファセット管理テーブル６００の未転送サスペンドコマンドキューｔｏｐと未転送サスペンドコマンドキューｂｔｍにセッション番号が設定されていれば、制御モジュール＃００は、未転送サスペンドコマンドキューにキューされている未転送サスペンドコマンドがあると判別できる。
【０１６６】
未転送サスペンドコマンドキューにキューされている未転送サスペンドコマンドがない場合（ステップＳ１４０１  ＮＯ）、制御モジュール＃００は、未転送サスペンドコマンドデキュー監視処理を終了する（ステップＳ１４０７）。
【０１６７】
未転送サスペンドコマンドキューにキューされている未転送サスペンドコマンドがある場合（ステップＳ１４０１  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１４０２に移行する。この場合、制御モジュール＃００は、未転送サスペンドコマンドキューにキューされているセッションを１つ選択する（ステップＳ１４０２）。本実施例では、バッファセット管理テーブル６００の未転送サスペンドコマンドキューｔｏｐが示すセッション番号から順にセッションを選択する。
【０１６８】
ステップＳ１４０３において、制御モジュール＃００は、ステップＳ１４０２で選択したセッションにおいて、未転送サスペンドコマンドデキュー監視がされているか否かを判別する。例えば、セッション管理テーブル５００の未転送サスペンドコマンドデキュー監視世代番号にバッファセットの世代番号が設定さている場合、ステップＳ１４０２で選択されたセッション番号のセッションにおいて、未転送サスペンドコマンドデキュー監視がされていると判別できる。
【０１６９】
ステップＳ１４０２で選択されたセッションにおいて、未転送サスペンドコマンドデキュー監視がされている場合（ステップＳ１４０３  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１４０４に移行する。この場合、制御モジュール＃００は、送信対象のバッファセットデータが、未転送サスペンド可能な世代か否かを判別する（ステップＳ１４０４）。
【０１７０】
例えば、送信対象のバッファセットデータの世代番号が、ステップＳ１４０２で選択されたセッションのセッション管理テーブル５００の未転送サスペンドコマンドデキュー監視世代番号以上の場合、送信対象のバッファセットデータが、未転送サスペンド可能な世代と判別できる。
【０１７１】
送信対象のバッファセットデータが、未転送サスペンド可能な世代でない場合（ステップＳ１４０４  ＮＯ）、制御モジュール＃００は、処理をステップＳ１４０２に移行して次のセッションを選択する。
【０１７２】
送信対象のバッファセットデータが、未転送サスペンド可能な世代である場合（ステップＳ１４０４  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１４０５に移行する。この場合、制御モジュール＃００は、ステップＳ１４０２で選択したセッションを、未転送サスペンドコマンドキューからデキューする。デキューは、例えば、以下のように行われる。
【０１７３】
制御モジュール＃００は、バッファ管理テーブル６００の未転送サスペンドコマンドキューｔｏｐに設定されているセッション番号が示すセッション管理テーブル５００を参照し、未転送サスペンドコマンドキューｎｅｘｔに設定されたセッション番号を取得する。そして、制御モジュール＃００は、取得したセッション番号を、バッファ管理テーブル６００の未転送サスペンドコマンドキューｔｏｐに設定する。未転送サスペンドコマンドキューｎｅｘｔにセッション番号がなければ、制御モジュール＃００は、未転送サスペンドコマンドキューｎｅｘｔおよび未転送サスペンドコマンドキューｐｒｅｖに、０ｘＦＦＦＦを設定する。
【０１７４】
なお、ステップＳ１４０５において、未転送サスペンドコマンドキューからデキューされたセッションは、図１５で後述する処理によって、サスペンド移行処理が行われることになる。
【０１７５】
以上の処理が終了すると、制御モジュール＃００は、未転送サスペンドコマンドの実行が完了した旨のコマンド応答を行う（ステップＳ１４０６）。また、ステップＳ１４０２で選択したセッションにおいて、未転送サスペンドコマンドデキュー監視がされていない場合も（ステップＳ１４０３  ＮＯ）、制御モジュール＃００は、未転送サスペンドコマンドの実行が完了した旨のコマンド応答を行う（ステップＳ１４０６）。そして、制御モジュール＃００は、未転送サスペンドコマンドデキュー監視処理を終了する（ステップＳ１４０７）。
【０１７６】
図１５は、本実施例に係るサスペンド移行処理を示すフローチャートである。
制御モジュール＃００は、一定時間毎に以下の処理を実行する（ステップＳ１５００）。
【０１７７】
ステップＳ１５０１において、制御モジュール＃００は、未転送サスペンド処理が予約されているセッションがあるか否かをチェックする。このとき、制御モジュール＃００は、セッション管理テーブル５００を参照し、未転送サスペンド処理フラグが「オン」に設定されているセッションを検索する。そして、セッション管理テーブル５００の未転送サスペンド処理フラグに「オン」と設定されているセッションを、少なくとも１つ以上検出した場合、制御モジュール＃００は、未転送サスペンド処理が予約されているセッションがあると判別する。
【０１７８】
未転送サスペンド処理が予約されているセッションがない場合（ステップＳ１５０１  ＮＯ）、制御モジュール＃００は、サスペンド移行処理を終了する（ステップＳ１５０６）。また、未転送サスペンド処理が予約されているセッションがある場合（ステップＳ１５０１  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１５０２に移行する。
【０１７９】
ステップＳ１５０２において、制御モジュール＃００は、未転送サスペンド処理が予約されているセッションのうち、未転送サスペンドコマンドデキュー監視されていないセッションがあるか否かを判別する。このとき、制御モジュール＃００は、バッファ管理テーブル６００から、未転送サスペンドコマンドキューｔｏｐおよび未転送サスペンドコマンドキューｂｔｍを取得する。そして、制御モジュール＃００は、未転送サスペンドコマンドキューｔｏｐから未転送サスペンドコマンドキューｂｔｍまで未転送サスペンドコマンドキューをたどる。そして、制御モジュール＃００は、未転送サスペンド処理が予約されているセッションが、未転送サスペンドコマンドキューにキューされているか判別する。未転送サスペンド処理が予約されているセッションが、未転送サスペンドコマンドキューにキューされている場合、制御モジュール＃００は、未転送サスペンド処理が予約されているセッションが、未転送サスペンドコマンドデキュー監視されていると判別できる。
【０１８０】
未転送サスペンド処理が予約されているセッションの全てが、未転送サスペンドコマンドデキュー監視されている場合（ステップＳ１５０２  ＮＯ）、制御モジュール＃００は、サスペンド移行処理を終了する（ステップＳ１５０６）。また、未転送サスペンド処理が予約されているセッションのうち、未転送サスペンドコマンドデキュー監視されていないセッションがある場合（ステップＳ１５０２  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１５０３に移行する。この場合、制御モジュール＃００は、未転送サスペンド処理が予約されているセッションであって、未転送サスペンドコマンドデキュー監視されていないセッションのセッション管理テーブル５００のセッションステータスを「サスペンド」に設定する（ステップＳ１５０３）。
【０１８１】
ステップＳ１５０４において、制御モジュール＃００は、ステップＳ１５０３でセッションステータスが変更されたセッションのセッション状態を、セカンダリ装置４５０に通知する。このとき、例えば、制御モジュール＃００は、ステップＳ１５０３でセッションステータスが変更されたセッションのセッション管理テーブル５００を、セカンダリ装置４５０に送信する。セカンダリ装置４５０では、プライマリ装置４１０から送信されたセッション管理テーブル５００の内容を、セカンダリ装置４５０に備わる図示しないセッション管理テーブル５００’に反映する。
【０１８２】
以上の処理が終了すると、制御モジュール＃００は、処理をステップＳ１５０５に移行する。そして、制御モジュール＃００は、ステップＳ１５０３でセッションステータスを「サスペンド」に変更したセッションの、未転送サスペンド処理の予約を解除する。
【０１８３】
このとき、例えば、制御モジュール＃００は、ステップＳ１５０３でセッションステータスを「サスペンド」に変更したセッションのセッション管理テーブル５００を参照し、未転送サスペンド処理フラグを「オフ」に設定する。
以上の処理が終了すると、制御モジュール＃００は、サスペンド移行処理を終了する（ステップＳ１５０６）。
【０１８４】
図１６は、本実施例に係る未転送サスペンド監視処理を示すフローチャートである。
制御モジュール＃００は、図１１に示したステップＳ１１０４ａの処理が完了すると、以下の処理を開始する（ステップＳ１６００）。
【０１８５】
全てのセッションについて、ステップＳ１６０１〜Ｓ１６０６の処理が完了すると（ステップＳ１６０１  ＹＥＳ）、制御モジュール＃００は、未転送サスペンド監視処理を終了する（ステップＳ１６０６）。
【０１８６】
ステップＳ１６０１〜Ｓ１６０６の処理を行っていないセッションがある場合（ステップＳ１６０１  ＮＯ）、制御モジュール＃００は、ステップＳ１６０１〜Ｓ１６０６の処理を行っていないセッションを１つ選択する（ステップＳ１６０２）。
【０１８７】
ステップＳ１６０３において、制御モジュール＃００は、ステップＳ１６０２で選択したセッションが未転送サスペンド監視されているか否か判別する。このとき、例えば、制御モジュール＃００は、ステップＳ１６０２で選択したセッションのセッション管理テーブル５００を参照する。そして、バッファセットの世代番号が未転送監視世代番号に設定されていれば、制御モジュール＃００は、ステップＳ１６０２で選択したセッションが未転送サスペンド監視されていると判別できる。
【０１８８】
ステップＳ１６０２で選択したセッションが未転送サスペンド監視されている場合（ステップＳ１６０３  ＹＥＳ）、制御モジュール＃００は、ステップＳ１６０２で選択したセッションで処理中のバッファセットデータの世代番号が未転送監視世代番号に到達しているかを判別する（ステップＳ１６０４）。
【０１８９】
ステップＳ１６０２で選択したセッションで処理中のバッファセットデータの世代番号が未転送監視世代番号に到達している場合（ステップＳ１６０４  ＹＥＳ）、制御モジュール＃００は、ステップＳ１６０２で選択したセッションの未転送サスペンド監視を解除する（ステップＳ１６０５）。このとき、例えば、制御モジュール＃００は、ステップＳ１６０２で選択したセッションのセッション管理テーブル５００を参照する。そして、制御モジュール＃００は、未転送サスペンドコマンドデキュー監視世代番号や未転送監視世代番号に、未転送サスペンド監視の解除を示す値、例えば、０ｘＦＦＦＦを設定する。そして、制御モジュール＃００は、処理をステップＳ１６０１に移行する。
【０１９０】
また、ステップＳ１６０２で選択したセッションが未転送サスペンド監視されていない場合（ステップＳ１６０３  ＮＯ）も、制御モジュール＃００は、処理をステップＳ１６０１に移行する。また、ステップＳ１６０２で選択したセッションで処理中のバッファセットデータの世代番号が未転送監視世代番号に到達していない場合（ステップＳ１６０４  ＮＯ）も、制御モジュール＃００は、処理をステップＳ１６０１に移行する。  以上の処理が終了すると、制御モジュール＃００は、未転送サスペンド監視処理を終了する（ステップＳ１６０６）。
【０１９１】
図１７は、本実施例に係るレジュームコマンド処理を示すフローチャートである。
上位装置などからレジュームコマンドを受信すると、制御モジュール＃００は、以下の処理を開始する（ステップＳ１７０１）。
【０１９２】
ステップＳ１７０２において、制御モジュール＃００は、レジュームコマンド発行時に指定されたセッションのセッションステータスを「コピー中」に変更する。このとき、例えば、制御モジュール＃００は、レジュームコマンド発行時に指定されたセッションのセッション管理テーブル５００を参照し、セッションステータスを「コピー中」に変更する。
【０１９３】
なお、ステップＳ１７０２において、セッションステータスが「コピー中」に設定されたセッションは、図１８で後述する非同期コピーが行われることになる。
セッションステータスを「コピー中」に変更すると、制御モジュール＃００は、ステップＳ１７０１で受信したレジュームコマンドに対するコマンド応答を、上位装置などに送信する（ステップＳ１７０３）。
以上の処理が終了すると、制御モジュール＃００は、レジュームコマンド処理を終了する（ステップＳ１７０４）。
【０１９４】
図１８は、本実施例に係る非同期コピーを示すフローチャートである。
制御モジュール＃００は、一定時間毎に以下の処理を実行する（ステップＳ１８００）。
【０１９５】
ステップＳ１８０１において、制御モジュール＃００は、セッションステータスが「コピー中」のセッションがあるか否かを判別する。このとき、例えば、制御モジュール＃００は、全てのセッションセッション管理テーブル５００を参照し、セッションステータスに「コピー中」が設定されているセッションを検索する。セッションステータスに「コピー中」と設定されているセッション管理テーブル５００があれば、制御モジュール＃００は、セッションステータスが「コピー中」のセッションがあると判別することができる。
【０１９６】
セッションステータスが「コピー中」のセッションがない場合（ステップＳ１８０１  ＮＯ）、制御モジュール＃００は、非同期コピーを終了する（ステップＳ１８０５）。セッションステータスが「コピー中」のセッションがある場合（ステップＳ１８０１  ＹＥＳ）、制御モジュール＃００は、処理をステップＳ１８０２に移行する。この場合、制御モジュール＃００は、セッションステータスが「コピー中」のセッションのうち、未転送サスペンド監視中のセッションがあるか否かを判別する（ステップＳ１８０２）。このとき、例えば、制御モジュール＃００は、セッション管理テーブル５００の未転送監視世代番号に、未転送サスペンド監視が解除された状態であることを示す値、例えば、０ｘＦＦＦＦが設定されている場合、そのセッションは、未転送サスペンド監視中でないと判別できる。したがって、セッション管理テーブル５００の未転送監視世代番号に、有効なセッション番号が設定されている場合、そのセッションは、未転送サスペンド監視中であると判別できる。
【０１９７】
未転送サスペンド監視中でないセッションがある場合（ステップＳ１８０２  ＹＥＳ）、制御モジュール＃００は、コピービットマップ４４１を元に、プライマリ装置４１０のプライマリボリューム４２０の変更内容を、セカンダリ装置４５０に送信する（ステップＳ１８０３）。
【０１９８】
一方、プライマリ装置４１０からプライマリボリューム４２０の変更内容を受信すると、セカンダリ装置４５０は、セカンダリ装置４５０に備わるセカンダリボリューム４６０に、プライマリボリューム４２０の変更内容を反映する。
【０１９９】
ステップＳ１８０４において、制御モジュール＃００は、ステップＳ１８０３の処理が完了したセッションのセッション管理テーブル５００を参照し、セッションステータスを「アクティブ」に変更する。
【０２００】
以上の処理が終了すると、制御モジュール＃００は、非同期コピーを終了する（ステップＳ１８０５）。また、セッションステータスが「コピー中」のセッションがない場合（ステップＳ１８０１  ＮＯ）や、全て未転送サスペンド監視中のセッションである場合（ステップＳ１８０２  ＮＯ）も、制御モジュール＃００は、非同期コピーを終了する（ステップＳ１８０５）。
【０２０１】
図１９は、本実施例に係るプライマリ装置４１０に備わる制御モジュールの具体的な構成例を示す図である。なお、制御モジュール＃００と制御モジュール＃０１は、同じ構成要素を用いて実現できるので、図１９には、制御モジュール＃００のみの構成例を示す。
【０２０２】
図１９に示す制御モジュール＃００は、ＣＰＵ１９０１と、メモリ１９０２と、入力装置１９０３と、出力装置１９０４と、外部記憶ユニット１９０５と、媒体駆動装置１９０６と、ネットワーク接続装置１９０８と、を備える。そして、これらの装置がバスに接続されて相互にデータの受け渡しが行える構成となっている。
【０２０３】
ＣＰＵ１９０１は、周辺機器や各種ソフトウェアを実行する他に本実施例に係る非同期コピーや未転送サスペンド処理などを実現するプログラムを実行する演算装置である。
メモリ１９０２は、プログラムを実行するために使用される揮発性の記憶ユニットである。メモリ１９０２には、例えば、ＲＡＭなどを使用することができる。メモリ１９０２は、キャッシュバッファ４１１に使用することができる。
【０２０４】
入力装置１９０３は、外部からのデータ入力手段である。入力装置１９０３には、例えば、キーボードやマウスなどを使用することができる。
出力装置１９０４は、データ等を表示装置等に出力する装置である。なお、出力装置１９０４には、表示装置を含むこともできる。
【０２０５】
外部記憶ユニット１９０５は、制御モジュール＃００が動作するために必要なプログラムやデータの他に本実施例に係る非同期コピーや未転送サスペンド処理などを実現するプログラムを記憶する不揮発性の記憶ユニットである。外部記憶ユニット１９０５には、例えば、磁気ディスク記憶ユニットなどを使用することができる。
【０２０６】
媒体駆動装置１９０６は、メモリ１９０２や外部記憶ユニット１９０５のデータを可搬記憶媒体１９０７、例えば、フロッピイディスクやＭＯディスク、ＣＤ−ＲやＤＶＤ−Ｒなどに出力し、または可搬記憶媒体１９０７からプログラムやデータ等を読み出す装置である。
ネットワーク接続装置１９０８は、ネットワーク１９０９に接続する装置である。
【０２０７】
なお、メモリ１９０２、外部記憶ユニット１９０５および可搬記憶媒体１９０７などの情報処理装置に読取り可能な記憶媒体は、非一時的（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ）な媒体である。
【０２０８】
図１９に示した制御モジュール＃００の構成例は、一つの例示であって、図１９に示す構成要素の全てが必須の構成要素であることに限定する趣旨ではない。
以上に説明したストレージシステム４００を用いたバックアップシステムの運用を考える。
【０２０９】
図２０に示すバックアップシステム２０００は、東京に配置されたプライマリ装置４１０と、名古屋に配置されたセカンダリ装置４５０と、大阪に配置されたセカンダリ装置２０１０と、を備える。なお、セカンダリ装置２０１０は、セカンダリ装置４５０と同じ構成のＲＡＩＤ装置を用いることができる。セカンダリ装置２０１０は、セカンダリボリューム２０２０を備える。
【０２１０】
プライマリ装置４１０とセカンダリ装置４５０とはネットワーク２０３０を介して互いに通信可能に接続している。また、セカンダリ装置４５０とセカンダリ装置２０１０とはネットワーク２０４０を介して互いに通信可能に接続している。
【０２１１】
図２１は、本実施例に係るバックアップシステム２０００によるバックアップ処理の運用例を示す図である。なお、図２１に示す時刻は、例示であって、各処理の開始時間や、各処理に要する時間を限定する趣旨ではない。
【０２１２】
セッションＡは、プライマリ装置４１０からセカンダリ装置４５０への、順序性を保証した非同期コピーを実行するセッションである。また、セッションＢおよびＣは、セカンダリ装置４５０からセカンダリ装置２０１０へのリモートコピーを実行するセッションである。
【０２１３】
２３日の０：００に、プライマリ装置４１０は、未転送サスペンドコマンドを受信して未転送サスペンドコマンド処理を開始する。このとき、プライマリ装置４１０は、キャッシュバッファ４１１および４１３上のバッファセットに記憶されたバッファセットデータだけを全てセカンダリボリューム４６０に送信する（ステップＳ１３０３  ＮＯ、Ｓ１３０４）。そして、プライマリ装置４１０は、順序性を保証した非同期コピーをサスペンド状態に移行する（Ｓ１５０３）。
【０２１４】
２３日の０：０１の時点で、未転送サスペンドコマンド受信時にプライマリ装置４１０のバッファセットに記憶されていたバッファセットデータは、順序性が保証されたままセカンダリ装置４５０に反映される。この状態で、セッションＢのリモートコピーが実行されると、セカンダリ装置４５０での更新内容がセカンダリ装置２０１０に反映される。
【０２１５】
２３日の０：１１の時点で、未転送サスペンドコマンド受信時にプライマリ装置４１０のバッファセットに記憶されていたバッファセットデータの内容は、セカンダリ装置４５０と、セカンダリ装置２０１０と、に順序性が保証された状態でバックアップされる。
【０２１６】
キャッシュバッファ４１１および４１３に記憶されているデータのみを、セカンダリ装置４５０と、セカンダリ装置２０１０と、に反映するため、未転送サスペンドコマンドを受信してからバックアップが完了するまでを短時間で行うことができる。
【０２１７】
ここで、プライマリ装置４１０は、非同期コピーがサスペンド状態に移行すると、未転送サスペンドコマンド受信時に退避用バッファ４３１に記憶されていたバッファセットデータの内容が書き込まれたプライマリボリューム４２０の記憶領域の位置をコピービットマップ４４１に記憶する（ステップＳ１２０１  ＮＯ、Ｓ１２０３、Ｓ１３０１  ＹＥＳ、Ｓ１３０２）。
【０２１８】
また、プライマリ装置４１０は、未転送サスペンドコマンドを受信してからレジューム処理完了までの間に受信するＩ／Ｏ命令で指定されるＷｒｉｔｅデータの内容が書き込まれたプライマリボリューム４２０の記憶領域の位置も、コピービットマップ４４１に記憶する（ステップＳ１００１  ＹＥＳ、Ｓ１００５  ＹＥＳ、Ｓ１００２）。
【０２１９】
２３日の３：００に、プライマリ装置４１０は、レジュームコマンドを受信して未転送サスペンドに対するレジューム処理を開始する。このとき、プライマリ装置４１０は、コピービットマップ４４１を元に、プライマリ装置４１０のプライマリボリューム４２０の変更内容を、セカンダリ装置４５０に転送する（ステップＳ１８０３）。そして、プライマリ装置４１０は、サスペンド状態を解除する（ステップＳ１８０４）。
【０２２０】
コピービットマップ４４１に記憶された、プライマリボリューム４２０の変更内容、をセカンダリ装置４５０に反映するだけでレジューム処理が完了するため、未転送サスペンドに対するレジューム処理を短時間で行うことができる。
【０２２１】
２３日の３：１０の時点で、未転送サスペンドコマンド受信時に退避用バッファ４３１に記憶されていたバッファセットデータの内容と、未転送サスペンドコマンド受信からレジューム処理完了までの間に受信したＩ／Ｏ命令で指定されたＷｒｉｔｅデータの内容は、セカンダリ装置４５０に反映される。２３日の３：１０の時点で、プライマリ装置４１０とセカンダリ装置４５０は等価となる。
【０２２２】
２３日の３：１０に、プライマリ装置４１０は、等価サスペンドコマンドを受信して等価サスペンド処理を開始する。等価サスペンド処理とは、例えば、プライマリ装置４１０−セカンダリ装置４５０間の等価状態を一時中断した状態、すなわち、サスペンド状態に移行する処理である。この等価サスペンド処理は、公知の技術であるが、より具体的には、例えば、以下の様な処理が行われる。
【０２２３】
等価サスペンドコマンドを受信すると、プライマリ装置４１０は、非同期コピーをサスペンド状態に移行する。同時に、プライマリ装置４１０は、キャッシュバッファ４１１および４１３上のバッファセットに記憶されたバッファセットデータと、退避用バッファ４３１に記憶されたバッファセットデータと、を全てセカンダリ装置４５０に送信する。また、プライマリ装置４１０は、等価サスペンドコマンドを受信してからレジューム処理完了までの間に受信したＩ／Ｏ命令で指定されるＷｒｉｔｅデータの内容が書き込まれたプライマリボリューム４２０の記憶領域の位置を、コピービットマップ４４１に記憶する。
【０２２４】
なお、未転送サスペンドに対するレジューム処理が完了した直後なので、プライマリ装置４１０からセカンダリ装置４５０に送信すべきデータはほとんど存在しない。その結果、等価サスペンド処理は、短時間で完了する。
【０２２５】
２３日の３：１１に、セッションＣのリモートコピーが実行されると、セカンダリ装置４５０での更新内容がセカンダリ装置２０１０に反映される。
２３日の３：２１の時点で、未転送サスペンドコマンド受信時に退避用バッファ４３１に記憶されていたバッファセットデータの内容と、未転送サスペンドコマンド受信からレジューム処理完了までの間に受信したＩ／Ｏ命令で指定されたＷｒｉｔｅデータの内容が、セカンダリ装置４５０と、セカンダリ装置２０１０と、にバックアップされる。
【０２２６】
一方、２３日の３：１１に、プライマリ装置４１０は、レジュームコマンドを受信して等価サスペンドに対するレジューム処理を開始する。このとき、プライマリ装置４１０は、コピービットマップ４４１を元に、プライマリ装置４１０のプライマリボリューム４２０の変更内容を、セカンダリ装置４５０に転送する。そして、プライマリ装置４１０は、サスペンド状態を解除する。３：２１からまた非同期コピーが再開される。
【０２２７】
コピービットマップ４４１に記憶された、プライマリボリューム４２０の変更内容、をセカンダリ装置４５０に反映するだけの処理のため、等価サスペンドに対するレジューム処理も短時間で行うことができる。
【０２２８】
以上のように、プライマリ装置４１０は、未転送サスペンドコマンドを受信すると、キャッシュバッファ４１１および４１３上のバッファセットデータのみを、セカンダリ装置４５０に送信して、即座にサスペンド状態に移行する。そのため、未転送サスペンドコマンドを受信してから短時間で、プライマリ装置４１０の更新内容の、順序性を保証したバックアップを行うことができる。
【０２２９】
また、未転送サスペンドコマンド受信後、プライマリ装置４１０は、退避用バッファ４３１に記憶されているバッファセットデータや、ホストコンピュータ４８０から受信したＩ／Ｏ命令で指定されるＷｒｉｔｅデータの内容が書き込まれたプライマリボリューム４２０の記憶領域の位置を、コピービットマップ４４１に保持する。そのため、プライマリ装置４１０は、未転送サスペンドに対するレジューム処理を、短時間で行うことができる。また、その後に行う等価サスペンドも、プライマリ装置４１０からセカンダリ装置４５０に送信すべきデータがほとんど存在しないので、短時間で行うことができる。その結果、プライマリ装置４１０の更新内容の、順序性を保証したバックアップを短時間で行うことができる。
【０２３０】
さらに、プライマリ装置４１０の内容がセカンダリ装置４５０やセカンダリ装置２０１０にバックアップされるまでの時間が短時間で済むので、バックアップ中に被災に合う確率を低くすることができる。すなわち、災害耐性が高いバックアップが可能となる。
【０２３１】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
上位装置から送信される第１のデータを記憶する第１の記憶手段と前記第１のデータを一時的に記憶する複数の第２の記憶手段とを有する記憶装置において、
前記第１の記憶手段に記憶した前記第１のデータを前記第２の記憶手段に記憶するデータ記憶手段と、
複数の前記第２の記憶手段それぞれに記憶された第２のデータを含むデータ群の退避に使用する第３の記憶手段と、
前記第２の記憶手段の使用状況に応じて、前記データ群を前記第２の記憶手段から読み出して前記第３の記憶手段に退避する退避手段と、
前記第２の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力手段と、
使用していない、複数の前記第２の記憶手段に、前記第３の記憶手段に退避された前記データ群を記憶する復旧手段と、
サスペンドの指示を受けると、前記データ群出力手段に、既に前記第２の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させた後、前記データ群出力手段による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド手段と、
を備える記憶装置。
（付記２）
前記サスペンド手段は、前記サスペンドの指示を受けると、前記サスペンド状態に移行するまで、前記復旧手段の処理を抑止する、
ことを特徴とする付記１に記載の記憶装置。
（付記３）
前記データ群出力手段は、前記サスペンド状態に移行すると、前記サスペンド状態が解除されるまで、新たに前記第２の記憶手段に記憶される前記データ群の内容を、第４の記憶手段に記憶する、
ことを特徴とする付記２に記載の記憶装置。
（付記４）
前記サスペンド手段は、前記サスペンドの指示を受けると、サスペンド状態が解除されるまで、前記退避手段の処理を抑止する、
ことを特徴とする付記１に記載の記憶装置。
（付記５）
前記データ記憶手段は、前記サスペンドの指示を受けると、サスペンド状態が解除されるまで、前記上位装置から新たに受信する前記第１のデータの内容を、第４の記憶手段に記憶する、
ことを特徴とする付記１に記載の記憶装置。
（付記６）
レジュームの指示を受けると、前記第４の記憶手段に記憶した内容を前記コピー先装置に出力後、前記サスペンド状態を解除するレジューム手段、
をさらに備える付記３または５に記載の記憶装置。
（付記７）
上位装置から送信される第１のデータを記憶する第１の記憶手段と前記第１のデータを一時的に記憶する複数の第２の記憶手段とを有する記憶装置を制御する制御装置において、
前記第１の記憶手段に記憶した前記第１のデータを前記第２の記憶手段に記憶するデータ記憶手段と、
前記第２の記憶手段の使用状況に応じて、複数の前記第２の記憶手段それぞれに記憶された第２のデータを含むデータ群を前記第２の記憶手段から読み出し、前記データ群の退避に使用する第３の記憶手段に退避する退避手段と、
前記第２の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力手段と、
使用していない、複数の前記第２の記憶手段に、前記第３の記憶手段に退避された前記データ群を記憶する復旧手段と、
サスペンドの指示を受けると、前記データ群出力手段に、既に前記第２の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させた後、前記データ群出力手段による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド手段と、
を備える制御装置。
（付記８）
上位装置から送信される第１のデータを記憶する第１の記憶手段と前記第１のデータを一時的に記憶する複数の第２の記憶手段とを有する記憶装置の制御方法において、
前記第１の記憶手段に記憶した前記第１のデータを前記第２の記憶手段に記憶し、
前記第２の記憶手段の使用状況に応じて、複数の前記第２の記憶手段それぞれに記憶された第２のデータを含むデータ群を前記第２の記憶手段から読み出し、前記データ群の退避に使用する第３の記憶手段に退避し、
前記第２の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力し、
使用していない、複数の前記第２の記憶手段に、前記第３の記憶手段に退避された前記データ群を記憶し、
サスペンドの指示を受けると、既に前記第２の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力した後、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させる、制御方法。
（付記９）
上位装置から送信される第１のデータを記憶する第１の記憶手段と前記第１のデータを一時的に記憶する複数の第２の記憶手段とを有する記憶装置を制御する制御装置に実行させるプログラムにおいて、
前記第１の記憶手段に記憶した前記第１のデータを前記第２の記憶手段に記憶するデータ記憶処理と、
前記第２の記憶手段の使用状況に応じて、複数の前記第２の記憶手段それぞれに記憶された第２のデータを含むデータ群を前記第２の記憶手段から読み出し、前記データ群の退避に使用する第３の記憶手段に退避する退避処理と、
前記第２の記憶手段に記憶された前記データ群を、自装置と通信可能に接続するコピー先装置に出力するデータ群出力処理と、
使用していない、複数の前記第２の記憶手段に、前記第３の記憶手段に退避された前記データ群を記憶する復旧処理と、
サスペンドの指示を受けると、前記データ群出力処理で、既に前記第２の記憶手段に記憶されている前記データ群を全て前記コピー先装置に出力させた後、前記データ群出力処理による、前記データ群のコピー先装置への出力を中断してサスペンド状態に移行させるサスペンド処理と、
を前記制御装置に実行させるプログラム。
【符号の説明】
【０２３２】
３１０      プライマリ装置
３１１      第１の記憶手段
３１２      第２の記憶手段
３１３      データ記憶手段
３１４      第３の記憶手段
３１５      退避手段
３１６      データ群出力手段
３１７      復旧手段
３１８      サスペンド手段
４１０      プライマリ装置
４１１      キャッシュバッファ
４１１ａ      送信データバッファ
４１１ｂ      管理データバッファ
４１２      メモリ
４１３      キャッシュバッファ
４１３ａ      送信データバッファ
４１３ｂ      管理データバッファ
４１４      メモリ
４２０      プライマリボリューム
４３０      退避用ボリューム
４３１      退避用バッファ
【図３】
0005521816.tif 000002
【図５】
0005521816.tif 000003
【図６】
0005521816.tif 000004
【図７】
0005521816.tif 000005
【図８】
0005521816.tif 000006
【図９】
0005521816.tif 000007
【図１０】
0005521816.tif 000008
【図１１】
0005521816.tif 000009
【図１２】
0005521816.tif 000010
【図１３】
0005521816.tif 000011
【図１４】
0005521816.tif 000012
【図１５】
0005521816.tif 000013
【図１６】
0005521816.tif 000014
【図１７】
0005521816.tif 000015
【図１８】
0005521816.tif 000016
【図１９】
0005521816.tif 000017
【図１】
0005521816.tif 000018
【図２】
0005521816.tif 000019
【図４】
0005521816.tif 000020
【図２０】
0005521816.tif 000021
【図２１】
0005521816.tif 000022