(57)【要約】【課題】フェイルオーバの際にコピー元装置とコピー先装置の各データを短時間で等価にする。【解決手段】制御部２３は、同期コピーにより制御部１３から送信された第１のデータを記録媒体２１に格納するとともに、第１のデータを示す制御情報２４ａを分割領域２２ａに格納し、バッファ切り替えが通知されると、その通知後に制御部１３から送信された第２のデータを記録媒体２１に格納するとともに、第２のデータを示す制御情報２４ｂを分割領域２２ｂに格納し、完了通知を受信すると、分割領域２２ａから制御情報２４ａを消去する。制御部２３は、バッファ切り替えの通知後に制御装置１０が停止したとき、分割領域２２ａに制御情報２４ａが残っている場合には、制御情報２４ａに基づいて記録媒体２１から第１のデータを読み出し、そのデータを制御装置３０に送信する。【選択図】図１
2019191801.tif 000002
【特許請求の範囲】
【請求項１】
第１の制御装置と、第２の制御装置と、第３の制御装置とを有するストレージシステムであって、
前記第１の制御装置は、
第１の領域と第２の領域とを有するバッファと、
上位装置から書き込みが要求されたデータを、第１の記録媒体に書き込むとともに前記第２の制御装置に送信し、前記上位装置に書き込み完了を通知する同期コピー処理と、前記第１の記録媒体に書き込まれたデータを前記第１の領域に格納し、所定の条件が満たされると、バッファ切り替えを前記第２の制御装置に通知するとともに、その通知後に前記第１の記録媒体に書き込まれるデータの前記バッファにおける格納先を前記第２の領域に切り替える格納処理と、前記第１の領域に格納された第１のデータをまとめて前記第３の制御装置に送信し、前記第２の領域に格納された第２のデータをまとめて前記第３の制御装置に送信する非同期コピー処理と、を実行し、前記第３の制御装置に対する前記第１のデータの送信が完了すると、完了通知を前記第２の制御装置に送信する第１の制御部と、
を有し、
前記第２の制御装置は、
前記第１の領域に対応付けられた第３の領域と、前記第２の領域に対応付けられた第４の領域とを有する制御情報記憶部と、
前記第１の制御部から送信された前記第１のデータを第２の記録媒体に格納するとともに、前記第１のデータを示す第１の制御情報を前記第３の領域に格納し、前記バッファ切り替えが通知されると、その通知後に前記第１の制御部から送信された前記第２のデータを前記第２の記録媒体に格納するとともに、前記第２のデータを示す第２の制御情報を前記第４の領域に格納し、前記完了通知を受信すると、前記第３の領域から前記第１の制御情報を消去し、前記バッファ切り替えの通知後に前記第１の制御装置が停止すると、前記上位装置からの書き込み要求の受信処理を前記第１の制御部から引き継いで、書き込みが要求された第３のデータを前記第２の記録媒体に格納し、その後の所定のタイミングで前記第３のデータを前記第３の制御装置に送信する第２の制御部と、
を有し、
前記第３の制御装置は、
前記第１の制御装置から前記第１のデータを受信すると前記第１のデータを第３の記録媒体に格納し、前記第１の制御装置から前記第２のデータを受信すると前記第２のデータを前記第３の記録媒体に格納し、前記第２の制御装置から前記第３のデータを受信すると前記第３のデータを前記第３の記録媒体に格納する第３の制御部、
を有し、
前記第２の制御部はさらに、前記バッファ切り替えの通知後に前記第１の制御装置が停止したとき、前記第３の領域に前記第１の制御情報が残っている場合には、前記第１の制御情報に基づいて前記第２の記録媒体から前記第１のデータを読み出し、読み出した前記第１のデータを前記第３の制御装置に送信し、
前記第３の制御部はさらに、前記第２の制御装置から前記第１のデータを受信すると前記第１のデータを前記第３の記録媒体に格納する、
ストレージシステム。
【請求項２】
前記第２の制御部は、前記バッファ切り替えの通知後に前記第１の制御装置が停止したとき、前記第３のデータを前記第２の記録媒体に格納し、その後に前記第３のデータを前記第３の制御装置に送信する処理を、前記第３の領域に残っている前記第１の制御情報に基づいて、前記第２の記録媒体からの前記第１のデータを読み出し、前記第１のデータを前記第３の制御装置へ送信する処理と並行して実行する、
請求項１記載のストレージシステム。
【請求項３】
前記第２の制御装置は、前記第２の記録媒体の記憶領域ごとのビットを有するビットマップを記憶し、
前記第２の制御部は、
前記バッファ切り替えの通知後に前記第１の制御装置が停止したとき、前記第２の制御情報に基づき、前記ビットマップのビットのうち、前記第２の記録媒体における前記第２のデータの記憶領域に対応するビットを、データの存在を示す第１の値に設定し、
書き込みが要求された前記第３のデータを前記第２の記録媒体に格納したとき、前記ビットマップのビットのうち、前記第２の記録媒体における前記第３のデータの記憶領域に対応するビットを、前記第１の値に設定し、
前記ビットマップを参照し、前記所定値が設定されたビットに対応する、前記第２の記録媒体の記憶領域からデータを読み出して前記第３の制御装置へ送信し、当該ビットを第２の値に更新する処理を、前記ビットマップの全ビットが前記第２の値になるまで実行する、
請求項１記載のストレージシステム。
【請求項４】
前記第１のデータの書き込み先領域の少なくとも一部が前記第２のデータの書き込み先領域と重複している場合、前記第１の制御部は、前記第２のデータを前記第１の記録媒体に格納する際に、前記第１のデータを前記第１の記録媒体から前記第１の領域に格納する処理が完了しているかを判定し、当該処理が完了していない場合、当該処理が完了した後に前記第２のデータを前記第１の記録媒体に格納する、
請求項１乃至３のいずれか１項に記載のストレージシステム。
【請求項５】
前記第１の制御部は、前記所定の条件が満たされたとき、それ以前に前記上位装置から書き込みが要求されて前記第２の領域に格納され、かつ、前記第３の制御装置への転送が完了していない第３のデータがあるかを判定し、前記第３のデータがある場合、前記第３のデータの前記第３の制御装置への転送が完了した後に、前記バッファ切り替えを前記第２の制御装置に通知する、
請求項１乃至４のいずれか１項に記載のストレージシステム。
【請求項６】
前記第１の制御部は、前記所定の条件として、前記上位装置から前記第２のデータの書き込みが要求され、かつ、前記第１の領域に前記第２のデータを格納できるだけの空き領域がないという条件が満たされたとき、それ以前に前記上位装置から書き込みが要求されて前記第２の領域に格納され、かつ、前記第３の制御装置への転送が完了していない第３のデータがあるかを判定し、前記第３のデータがある場合、前記第３のデータの前記第３の制御装置への転送が完了した後に、前記バッファ切り替えを前記第２の制御装置に通知し、前記第２のデータを前記第１の記録媒体に書き込むとともに前記第２の制御装置に送信し、前記上位装置に前記第２のデータの書き込み完了を通知した後、前記第２のデータを前記第２の領域に格納する、
請求項１乃至４のいずれか１項に記載のストレージシステム。
【請求項７】
第１の領域と第２の領域とを有するバッファと、
上位装置から書き込みが要求されたデータを、記録媒体に書き込むとともに第１の他の制御装置に送信し、前記上位装置に書き込み完了を通知する同期コピー処理と、前記記録媒体に書き込まれたデータを前記第１の領域に格納し、所定の条件が満たされると、バッファ切り替えを前記第１の他の制御装置に通知するとともに、その通知後に前記記録媒体に書き込まれるデータの前記バッファにおける格納先を前記第２の領域に切り替える格納処理と、前記第１の領域に格納された第１のデータをまとめて第２の他の制御装置に送信し、前記第２の領域に格納された第２のデータをまとめて前記第２の他の制御装置に送信する非同期コピー処理と、を実行し、前記第２の他の制御装置に対する前記第１のデータの送信が完了すると、完了通知を前記第１の他の制御装置に送信する制御部と、
を有し、
前記第１のデータの書き込み先領域の少なくとも一部が前記第２のデータの書き込み先領域と重複している場合、前記制御部は、前記第２のデータを前記記録媒体に格納する際に、前記第１のデータを前記記録媒体から前記第１の領域に格納する処理が完了しているかを判定し、当該処理が完了していない場合、当該処理が完了した後に前記第２のデータを前記記録媒体に格納する、
制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムおよび制御装置に関する。
【背景技術】
【０００２】
ストレージ装置に記録されたデータをバックアップのために他のストレージ装置にコピーするリモートコピーの方法として、同期コピーと非同期コピーとが知られている。同期コピーでは、コピー元装置は、ホスト装置から書き込みが要求されたデータを記憶するとともに、そのデータをコピー先装置にコピーし、コピーが完了した後にホスト装置に書き込みの完了を通知する。一方、非同期コピーでは、コピー元装置は、書き込みが要求されたデータを記憶した段階でホスト装置に対して書き込みの完了を通知し、これとは非同期のタイミングでデータをコピー先装置にコピーする。
【０００３】
同期コピーは、データを常に二重化できる反面、装置間の距離が長いほどＲＴＴ（Round-Trip Time）が増加して書き込みの応答性能が悪化するという特性を有する。このため、広範囲に及ぶ大規模な災害を想定してコピー先装置を遠距離に配置する用途には、非同期コピーが適している。
【０００４】
これに関連して、ホスト装置からデータの書き込み要求を受け付けて書き込み制御処理を行う第１装置から、第２装置に対して同期コピーを行うとともに、第１装置から第３装置に対して非同期コピーを行うようにしたストレージシステムが提案されている。このストレージシステムでは、第１装置の動作が停止すると、ホスト装置からの要求に応じた書き込み制御処理を第２装置が引き継ぐとともに、第２装置から第３装置に対して非同期コピーが行われる。
【０００５】
また、このストレージシステムでは、書き込みの順序性を保証した非同期コピーが行われる。非同期コピーのコピー元装置は、第１記録媒体のデータを第１の記録専用バッファに格納し、このバッファが満杯になるとバッファ内のデータをまとめてコピー先装置に送信する。コピー先装置は、受信したデータを第２の記録専用バッファに格納し、データの受信を完了するとこのバッファ内のデータを第２記録媒体に展開する。
【０００６】
なお、上記に関連する他の技術として、第１ボリュームと第３ボリュームによる非同期コピーペアの形成命令を受信したとき、第１ボリュームとの間で高可用性ペアが形成された第２ボリュームと、第３ボリュームとによるスタンバイペアが形成されていない場合、形成命令を拒否するようにしたストレージシステムが提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１７−１６７６０２号公報
【特許文献２】国際公開第２０１６／０８４２３１号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
第１装置から第２装置に対して同期コピーを行い、第１装置から第３装置に対して非同期コピーを行うようにした上記のストレージシステムでは、非同期コピーによる第１装置から第３装置へのデータ転送中に、第１装置の動作が停止する場合がある。この場合、第２装置が保持するデータと第３装置が保持するデータとが一致しなくなる。そのため、第２装置が書き込み制御処理を引き継ぐ際に、第２装置が保持するデータを用いて第２装置と第３装置との間でできるだけ短時間でデータを等価にしたいという課題がある。
【０００９】
１つの側面では、本発明は、フェイルオーバの際にコピー元装置とコピー先装置の各データを短時間で等価にできるストレージシステムおよび制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの案では、第１の制御装置と、第２の制御装置と、第３の制御装置とを有するストレージシステムが提供される。このストレージシステムにおいて、第１の制御装置は、第１の領域と第２の領域とを有するバッファと、上位装置から書き込みが要求されたデータを、第１の記録媒体に書き込むとともに第２の制御装置に送信し、上位装置に書き込み完了を通知する同期コピー処理と、第１の記録媒体に書き込まれたデータを第１の領域に格納し、所定の条件が満たされると、バッファ切り替えを第２の制御装置に通知するとともに、その通知後に第１の記録媒体に書き込まれるデータのバッファにおける格納先を第２の領域に切り替える格納処理と、第１の領域に格納された第１のデータをまとめて第３の制御装置に送信し、第２の領域に格納された第２のデータをまとめて第３の制御装置に送信する非同期コピー処理と、を実行し、第３の制御装置に対する第１のデータの送信が完了すると、完了通知を第２の制御装置に送信する第１の制御部と、を有する。
【００１１】
第２の制御装置は、第１の領域に対応付けられた第３の領域と、第２の領域に対応付けられた第４の領域とを有する制御情報記憶部と、第１の制御部から送信された第１のデータを第２の記録媒体に格納するとともに、第１のデータを示す第１の制御情報を第３の領域に格納し、バッファ切り替えが通知されると、その通知後に第１の制御部から送信された第２のデータを第２の記録媒体に格納するとともに、第２のデータを示す第２の制御情報を第４の領域に格納し、完了通知を受信すると、第３の領域から第１の制御情報を消去し、バッファ切り替えの通知後に第１の制御装置が停止すると、上位装置からの書き込み要求の受信処理を第１の制御部から引き継いで、書き込みが要求された第３のデータを第２の記録媒体に格納し、その後の所定のタイミングで第３のデータを第３の制御装置に送信する第２の制御部と、を有する。
【００１２】
第３の制御装置は、第１の制御装置から第１のデータを受信すると第１のデータを第３の記録媒体に格納し、第１の制御装置から第２のデータを受信すると第２のデータを第３の記録媒体に格納し、第２の制御装置から第３のデータを受信すると第３のデータを第３の記録媒体に格納する第３の制御部を有する。
【００１３】
第２の制御部はさらに、バッファ切り替えの通知後に第１の制御装置が停止したとき、第３の領域に第１の制御情報が残っている場合には、第１の制御情報に基づいて第２の記録媒体から第１のデータを読み出し、読み出した第１のデータを第３の制御装置に送信し、第３の制御部はさらに、第２の制御装置から第１のデータを受信すると第１のデータを第３の記録媒体に格納する。
【００１４】
また、１つの案では、バッファと、制御部とを有する制御装置が提供される。この制御装置において、バッファは、第１の領域と第２の領域とを有する。制御部は、上位装置から書き込みが要求されたデータを、記録媒体に書き込むとともに第１の他の制御装置に送信し、上位装置に書き込み完了を通知する同期コピー処理と、記録媒体に書き込まれたデータを第１の領域に格納し、所定の条件が満たされると、バッファ切り替えを第１の他の制御装置に通知するとともに、その通知後に記録媒体に書き込まれるデータのバッファにおける格納先を第２の領域に切り替える格納処理と、第１の領域に格納された第１のデータをまとめて第２の他の制御装置に送信し、第２の領域に格納された第２のデータをまとめて第２の他の制御装置に送信する非同期コピー処理と、を実行し、第２の他の制御装置に対する第１のデータの送信が完了すると、完了通知を第１の他の制御装置に送信する。
【００１５】
また、第１のデータの書き込み先領域の少なくとも一部が第２のデータの書き込み先領域と重複している場合、制御部は、第２のデータを記録媒体に格納する際に、第１のデータを記録媒体から第１の領域に格納する処理が完了しているかを判定し、当該処理が完了していない場合、当該処理が完了した後に第２のデータを記録媒体に格納する。
【発明の効果】
【００１６】
１つの側面では、フェイルオーバの際にコピー元装置とコピー先装置の各データを短時間で等価にできる。
【図面の簡単な説明】
【００１７】
【図１】第１の実施の形態に係るストレージシステムの構成例および処理例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの構成例を示す図である。
【図３】ＣＭのハードウェア構成例を示す図である。
【図４】各ＣＭが備える処理機能の構成例を示すブロック図である。
【図５】非同期コピーの基本的な処理手順を説明するための図である。
【図６】各ＣＭの管理情報記憶部に記憶される情報を示す図である。
【図７】バッファセット管理テーブルについて説明するための図である。
【図８】バッファ管理テーブルの構成例を示す図である。
【図９】ホスト装置からのライト要求に応じたライトＩ／Ｏ処理例を示す図である。
【図１０】バッファセットの切り替え処理例を示す図である。
【図１１】ライトデータの転送およびバッファセットの展開処理例を示す図である。
【図１２】バッファセットの解放処理例を示す図である。
【図１３】フェイルオーバが発生した場合の処理例を示す図である。
【図１４】ライトＩ／Ｏ処理の手順を示すシーケンス図の例である。
【図１５】バッファセットの切り替え処理の手順を示すシーケンス図の例である。
【図１６】バッファ格納処理の手順を示すフローチャートの例である。
【図１７】転送・展開・解放処理の手順を示すシーケンス図の例である。
【図１８】フェイルオーバ後の再同期処理の手順を示すシーケンス図の例である。
【図１９】コピーイング状態でのライトＩ／Ｏ処理の手順を示すフローチャートの例である。
【図２０】アクティブ状態でのライトＩ／Ｏ処理の手順を示すフローチャートの例である。
【発明を実施するための形態】
【００１８】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るストレージシステムの構成例および処理例を示す図である。図１に示すストレージシステムは、制御装置１０，２０，３０を有する。また、制御装置１０，２０は、上位装置１と通信可能になっている。
【００１９】
制御装置１０，２０，３０は、記録媒体１１，２１，３１をそれぞれ有する。なお、図１では例として、記録媒体１１，２１，３１はそれぞれ制御装置１０，２０，３０の内部に搭載されているが、それぞれ制御装置１０，２０，３０の外部に接続されていてもよい。
【００２０】
制御装置１０は、上位装置１からの要求に応じて記録媒体１１へのアクセスを制御する。また、制御装置１０は、記録媒体１１に書き込まれたデータを、バックアップのために制御装置２０，３０の記録媒体２１，３１にコピーする機能を備える。制御装置１０から制御装置２０へは同期コピーが実行され、制御装置１０から制御装置３０へは非同期コピーが実行される。
【００２１】
制御装置２０は、記録媒体１１への書き込みが要求されたデータを制御装置１０から受信し、記録媒体２１に書き込む。また、制御装置２０は、障害の発生などによって制御装置１０の動作が停止すると、上位装置１からの書き込み要求に応じた書き込み制御処理を制御装置１０から引き継ぐ。すなわち、この状態では、制御装置２０は、上位装置１からの要求に応じて記録媒体２１へのアクセスを制御する。これとともに、制御装置２０は、記録媒体２１に書き込まれたデータを、非同期コピーによって制御装置３０の記録媒体３１にバックアップする。
【００２２】
制御装置３０は、制御装置１０または制御装置２０から送信されたデータを記録媒体３１に書き込む。
また、制御装置１０はさらに、バッファ１２と制御部１３を有する。バッファ１２は、例えば、制御装置１０が備えるＲＡＭ（Random Access Memory）に確保される。制御部１３は、例えば、制御装置１０が備えるプロセッサとして実現される。制御装置２０はさらに、制御情報記憶部２２と制御部２３を有する。制御情報記憶部２２の記憶領域は、例えば、制御装置２０が備えるＲＡＭに確保される。制御部２３は、例えば、制御装置２０が備えるプロセッサとして実現される。制御装置３０はさらに、制御部３３を有する。制御部３３は、例えば、制御装置３０が備えるプロセッサとして実現される。
【００２３】
バッファ１２には、記録媒体１１から制御装置３０に送信されるデータが一時的に格納される。バッファ１２は、複数の分割バッファ領域を有している。図１の例では、バッファ１２は、分割バッファ領域１２ａ，１２ｂを有する。
【００２４】
制御情報記憶部２２には、バッファ１２の分割バッファ領域にそれぞれ対応付けられた分割領域を有する。図１の例では、制御情報記憶部２２は、分割バッファ領域１２ａ，１２ｂにそれぞれ対応付けられた分割領域２２ａ，２２ｂを有する。制御情報記憶部２２の分割領域には、制御情報が記憶される。制御情報とは、対応する分割バッファ領域に格納されるデータそれぞれについて、記録媒体１１，２１，３１に格納するために必要となる情報である。例えば、制御情報は、対応する分割バッファ領域に格納されたデータそれぞれについての書き込み先領域を示す。
【００２５】
制御部１３は、次に示す「同期コピー処理」、「格納処理」および「非同期コピー処理」を実行する。
同期コピー処理では、制御部１３は、上位装置１から書き込みが要求されたデータを、記録媒体１１に書き込むとともに制御装置２０に送信し、上位装置１に書き込み完了を通知する。制御部２３は、制御部１３から送信されたデータを記録媒体２１に格納するとともに、そのデータを示す制御情報を制御情報記憶部２２に格納する。なお、制御部１３による上位装置１に対する書き込み完了の通知は、記録媒体２１へのデータの格納および制御情報記憶部２２への制御情報の格納が完了した後に行われる。以上の同期コピー処理により、少なくとも、記録媒体１１に格納されたデータと記録媒体２１に格納されたデータとは常に等価となる。
【００２６】
格納処理では、制御部１３は、記録媒体１１に書き込まれたデータを分割バッファ領域１２ａに格納する。そして、制御部１３は、所定の条件が満たされると、バッファ切り替えを制御装置２０に通知するとともに、上位装置１から記録媒体１１に書き込まれるデータの格納先を分割バッファ領域１２ａから分割バッファ領域１２ｂに切り替える。したがって、バッファ切り替えの通知後における格納処理では、記録媒体１１に書き込まれたデータが分割バッファ領域１２ｂに格納される。
【００２７】
ここで、制御部２３は、バッファ切り替えが通知される前に、制御部１３からのデータを受信して記録媒体２１に格納したとき、そのデータに対応する制御情報２４ａを制御情報記憶部２２の分割領域２２ａに格納する。一方、制御部２３は、バッファ切り替えが通知された後に、制御部１３からのデータを受信して記録媒体２１に格納したとき、そのデータに対応する制御情報２４ｂを制御情報記憶部２２の分割領域２２ｂに格納する。このように、制御装置２０は、バッファ切り替えの通知を受けることで、その前後で記録媒体２１に格納したデータに対応する制御情報を、区別して保持できる。
【００２８】
非同期コピー処理では、制御部１３は、分割バッファ領域１２ａに格納されたデータをまとめて制御装置３０に送信する。すなわち、制御部１３は、分割バッファ領域１２ａに対するデータの格納が完了した後、分割バッファ領域１２ａ内のデータを制御装置３０に送信する。また、制御部１３は、分割バッファ領域１２ｂに格納されたデータをまとめて制御装置３０に送信する。
【００２９】
制御部３３は、制御部１３から送信された分割バッファ領域１２ａのデータを受信し、受信したデータを記録媒体３１に格納する。また、制御部３３は、制御部１３から送信された分割バッファ領域１２ｂのデータを受信し、記録媒体３１に格納する。
【００３０】
このような非同期コピーによれば、分割バッファ領域単位でデータがコピーされる。したがって、制御装置１０と制御装置３０との間では、上位装置１からの書き込みの順序性が保証された非同期コピーが実行される。
【００３１】
制御部１３は、非同期コピー処理での制御装置３０に対するデータの送信が完了すると、完了通知を制御装置２０に送信する。制御部２３は、完了通知を受信すると、制御情報２４ａを分割領域２２ａから消去する。このように、制御部２３は、完了通知を受信することにより、制御情報２４ａに対応するデータ、すなわち分割バッファ領域１２ａに格納されたデータについての非同期コピー処理が完了したことを認識できる。
【００３２】
次に、制御装置１０が停止した場合について説明する。
制御部２３は、例えば、上記のバッファ切り替えが通知された後に制御装置１０が停止した場合、上位装置１からの書き込み要求の受信処理を制御部１３から引き継いで、書き込みが要求されたデータを記録媒体２１に格納する。そして、制御部２３は、その後の所定のタイミングで、記録媒体２１に格納したデータを制御装置３０に送信する。
【００３３】
これとともに、制御部２３は、バッファ切り替えが通知された後に制御装置１０が停止したとき、分割領域２２ａに制御情報２４ａが残っている場合には、この制御情報２４ａに基づいて記録媒体２１からデータを読み出し、読み出したデータを制御装置３０に送信する。制御部３３は、制御部２３からこのデータを受信し、記録媒体３１に格納する。
【００３４】
ここで、分割バッファ領域１２ａのデータを制御装置１０から制御装置３０に送信している途中で制御装置１０が停止した場合、記録媒体１１のデータと記録媒体３１のデータとが一致しなくなる可能性がある。一方、制御部２３は、バッファ切り替えが通知された後に制御装置１０が停止したとき、分割領域２２ａに制御情報２４ａが残っていることで、分割領域２２ａに対応する分割バッファ領域１２ａのデータが制御装置３０に送信されていない可能性があると判定できる。このように判定した場合、制御部２３は、制御情報２４ａに基づいて、分割バッファ領域１２ａのデータと同一のデータを記録媒体２１から読み出し、制御装置３０に送信する。送信されたデータを制御部３３が記録媒体３１に格納することで、記録媒体３１のデータが記録媒体２１のデータと等価になる。
【００３５】
このような処理により、制御部２３は、記録媒体２１に格納されているデータのうち、記録媒体３１に格納されていない可能性のあるデータだけを、記録媒体２１から記録媒体３１にコピーすることができる。これにより、制御装置２０が書き込み制御処理を引き継ぐフェイルオーバの際に、非同期コピーのコピー元装置である制御装置２０と、コピー先装置である制御装置３０の各データを短時間で等価にすることができる。
【００３６】
なお、上位装置１からの書き込み要求に応じてデータを記録媒体２１に格納する処理は、例えば、制御情報２４ａに基づくデータを記録媒体２１から制御装置３０へ送信する処理が完了した後に実行されてもよい。あるいは、これらの処理は並行して実行されてもよい。後者の場合、制御装置１０が停止してから上位装置１からの要求に応じた書き込み制御処理が再開されるまでの時間を短縮できる。
【００３７】
〔第２の実施の形態〕
図２は、第２の実施の形態に係るストレージシステムの構成例を示す図である。図２に示すストレージシステムは、ストレージ装置１００，２００，３００およびホスト装置４００を含む。ホスト装置４００とストレージ装置１００，２００とは、例えば、ＳＡＮ（Storage Area Network）５１を介して接続されている。ストレージ装置１００とストレージ装置２００とは、例えば、専用の通信回線を介して接続され、ストレージ装置１００，２００とストレージ装置３００とは、例えば、ＷＡＮ（Wide Area Network）５２を介して接続されている。ストレージ装置１００とストレージ装置２００との距離と比較して、ストレージ装置３００は遠距離に配置されている。
【００３８】
ストレージ装置１００は、ＣＭ（Controller Module）１１０，１１０ａとドライブ部１２０，１２０ａを有する。ドライブ部１２０，１２０ａのそれぞれには、複数の記憶装置が搭載されている。それらの記憶装置は、例えばＨＤＤ（Hard Disk Drive）であり、その場合、ドライブ部１２０，１２０ａはディスクアレイ装置である。ＣＭ１１０は、ドライブ部１２０内の記憶装置に対するアクセスを制御する制御装置であり、ＣＭ１１０ａは、ドライブ部１２０ａ内の記憶装置に対するアクセスを制御する制御装置である。
【００３９】
同様に、ストレージ装置２００は、ＣＭ２１０，２１０ａとドライブ部２２０，２２０ａを有しており、ストレージ装置３００は、ＣＭ３１０，３１０ａとドライブ部３２０，３２０ａを有している。なお、図２のストレージシステムにおいては、ＣＭ１１０，１１０ａ，２１０，２１０ａ，３１０，３１０ａが相互に接続されている。
【００４０】
ＣＭ１１０は、ホスト装置４００からの要求に応じて、ドライブ部１２０内の記憶装置によって実現される論理ボリュームに対するアクセスを制御できるようになっている。同様に、ＣＭ１１０ａは、ホスト装置４００からの要求に応じて、ドライブ部１２０ａ内の記憶装置によって実現される論理ボリュームに対するアクセスを制御できるようになっている。ＣＭ１１０，１１０ａは、対応する論理ボリュームに対するアクセス時に利用するキャッシュをそれぞれが保持する分散キャッシュ方式でアクセス制御を行う。
【００４１】
ストレージ装置２００は、ストレージ装置１００がアクティブ状態（運用状態）のとき、スタンバイ状態（待機状態）になっている。この状態では、ＣＭ２１０，２１０ａは、それぞれＣＭ１１０，１１０ａ内のキャッシュのデータを受信してバックアップする。ストレージ装置１００内のキャッシュのデータは、同期コピーによってストレージ装置２００にバックアップされる。そして、ストレージ装置１００に障害が発生したとき、ストレージ装置２００はスタンバイ状態からアクティブ状態に遷移し（すなわちフェイルオーバし）、ホスト装置４００からの要求に応じた論理ボリュームへのアクセス制御を短時間で引き継ぐ。
【００４２】
ストレージ装置３００も、ストレージ装置１００がアクティブ状態のとき、ストレージ装置１００内のキャッシュのデータを受信してバックアップする。具体的には、ＣＭ３１０，３１０ａは、それぞれＣＭ１１０，１１０ａ内のキャッシュのデータを受信してバックアップする。ただし、ストレージ装置１００内のキャッシュのデータは、非同期コピーによってストレージ装置３００にバックアップされる。そして、ストレージ装置１００に障害が発生したとき、ストレージ装置３００は，アクティブ状態に遷移したストレージ装置２００内のキャッシュのデータをバックアップする。このときも、ストレージ装置２００内のキャッシュのデータは、非同期コピーによってストレージ装置３００にバックアップされる。
【００４３】
このように、図２に示すストレージシステムでは、ストレージ装置１００，２００，３００が正常に動作しているとき、キャッシュのデータに対応するバックアップデータが二重に記憶され、これによってキャッシュのデータが失われるリスクが低減されている。また、遠隔地に配置されたストレージ装置３００に同期コピーによってデータをバックアップした場合、ＲＴＴが増大してホスト装置４００に対する応答速度が大きく低下してしまう。しかし、図２のストレージシステムによれば、ストレージ装置３００には非同期コピーによってデータがバックアップされるので、このような応答速度の低下を防止できる。換言すると、ホスト装置４００に対する応答性能を落とさずに、ストレージ装置３００を遠隔地に配置することができるので、例えば、影響が広範囲に及ぶ大きな災害が発生した場合にデータが失われるリスクを低減できる。
【００４４】
図３は、ＣＭのハードウェア構成例を示す図である。この図３では、ＣＭ１１０を例示する。
ＣＭ１１０は、プロセッサ１１１、ＲＡＭ１１２、ＳＳＤ（Solid State Drive）１１３、ホストインタフェース１１４、ドライブインタフェース１１５およびリモートアダプタ１１６，１１７を有する。これらの構成要素は、バス１１８を介して接続されている。
【００４５】
プロセッサ１１１は、ＣＭ１１０全体を統括的に制御する。プロセッサ１１１は、マルチプロセッサであってもよい。プロセッサ１１１は、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。また、プロセッサ１１１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００４６】
ＲＡＭ１１２は、ＣＭ１１０の主記憶装置として使用される。ＲＡＭ１１２には、プロセッサ１１１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１１２には、プロセッサ１１１による処理に必要な各種データが格納される。
【００４７】
ＳＳＤ１１３は、ＣＭ１１０の補助記憶装置として使用される。ＳＳＤ１１３には、ＯＳプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、ＨＤＤなどの他の種類の記憶装置が用いられてもよい。
【００４８】
ホストインタフェース１１４は、ホスト装置４００と通信するためのインタフェースである。ドライブインタフェース１１５は、ドライブ部１２０内の記憶装置と通信するためのインタフェースである。ドライブインタフェース１１５は、例えば、ＳＡＳ（Serial Attached SCSI，SCSI：Small Computer System Interface）インタフェースである。リモートアダプタ１１６は、ストレージ装置２００と通信するためのインタフェースであり、リモートアダプタ１１７は、ストレージ装置３００と通信するためのインタフェースである。
【００４９】
以上のハードウェア構成によってＣＭ１１０の処理機能が実現される。なお、ＣＭ１１０ａ，２１０，２１０ａ，３１０，３１０ａについても、図３と同様のハードウェア構成によって実現される。
【００５０】
図４は、各ＣＭが備える処理機能の構成例を示すブロック図である。
まず、ＣＭ１１０は、制御部１３０、キャッシュ１４０、バッファ１５０および管理情報記憶部１６０を有する。制御部１３０の処理は、プロセッサ１１１が所定のプログラムを実行することで実現される。キャッシュ１４０およびバッファ１５０は、ＲＡＭ１１２の記憶領域の一部によって実現される。管理情報記憶部１６０は、ＲＡＭ１１２またはＳＳＤ１１３の記憶領域の一部によって実現される。
【００５１】
制御部１３０は、ホスト装置４００からの要求に応じた論理ボリュームに対するアクセスを、キャッシュ１４０を用いて制御する。例えば、制御部１３０は、論理ボリュームに対するアクセスを、ライトバック方式を用いて制御する。また、制御部１３０は、キャッシュ１４０に書き込んだデータのＣＭ２１０，３１０に対するコピー処理を実行する。制御部１３０は、ＣＭ２１０に対しては同期コピーを行い、ＣＭ３１０に対しては非同期コピーを行う。
【００５２】
例えば、ライトバック方式が用いられる場合、制御部１３０は、論理ボリュームに対するライト要求を受けると、ライトが要求されたデータ（ライトデータ）をキャッシュ１４０に格納する。これとともに、制御部１３０は、ライトデータをＣＭ２１０に送信し、ＣＭ２１０のキャッシュ（後述するキャッシュ２４０）にも格納する。制御部１３０は、以上の処理が完了すると、ホスト装置４００にライト完了通知を送信する。制御部１３０は、その後の非同期のタイミングで、キャッシュ１４０に格納されたライトデータをドライブ部１２０内の記憶装置に書き込む。さらに、制御部１３０は、ライト完了通知の送信後の非同期のタイミングで、キャッシュ１４０に格納されたライトデータをＣＭ３１０に送信し、ＣＭ３１０のキャッシュ（後述するキャッシュ３４０）に書き込む。
【００５３】
キャッシュ１４０には、ホスト装置４００からのアクセス対象の論理ボリュームに含まれる少なくとも一部のデータが、一時的に格納される。バッファ１５０には、キャッシュ１４０からＣＭ２１０，３１０に転送されるライトデータが一時的に格納される。バッファ１５０は、複数の分割領域に区分されており、書き込みの順序性を保ったまま非同期コピーを実行するために利用される。
【００５４】
管理情報記憶部１６０には、コピー処理で参照される各種の情報が格納される。例えば、管理情報記憶部１６０には、バッファ１５０の各分割領域に対応する制御情報領域が設定される。制御情報領域には、キャッシュ２４０に格納した各ライトデータに対応するライト制御情報が登録される。ライト制御情報は、ライトデータの書き込み先を示す情報であり、論理ボリュームを識別するＬＵＮ（Logical Unit Number）、論理ボリュームにおける書き込み先の先頭アドレスを示すＬＢＡ（Logical Block Address）、データ長をブロック単位で示すブロックカウントを含む。このようなライト制御情報は、ライトデータをキャッシュ１４０への格納後の非同期のタイミングでバッファ１５０に格納するために利用される。
【００５５】
なお、図示しないが、ＣＭ１１０ａもＣＭ１１０と同様の処理機能を備える。ただし、後述するバッファの世代管理などのリモートコピー処理全体の制御に関しては、ＣＭ１１０はマスタとして動作し、ＣＭ１１０ａはスレーブとして動作する。
【００５６】
ＣＭ２１０は、制御部２３０、キャッシュ２４０、バッファ２５０および管理情報記憶部２６０を有する。制御部２３０の処理は、ＣＭ２１０が備えるプロセッサが所定のプログラムを実行することで実現される。キャッシュ２４０およびバッファ２５０は、ＣＭ２１０が備えるＲＡＭの記憶領域の一部によって実現される。管理情報記憶部２６０は、ＣＭが備えるＲＡＭまたはＳＳＤの記憶領域の一部によって実現される。
【００５７】
制御部２３０は、ストレージ装置１００が運用状態のとき、ＣＭ１１０から転送されるライトデータをキャッシュ２４０に格納する処理を実行する。このとき、制御部２３０は、キャッシュ２４０に格納したライトデータについてのライト制御情報を管理情報記憶部２６０に登録する。登録されたライト制御情報は、フェイルオーバ後に、キャッシュ２４０に格納されたライトデータのうち、ＣＭ３１０のキャッシュに格納されていないライトデータをＣＭ３１０に送信するために利用される。
【００５８】
また、障害発生によりストレージ装置１００が停止して、ストレージ装置２００がアクティブ状態に遷移すると（フェイルオーバ）、制御部２３０は、論理ボリュームに対するアクセス制御をＣＭ１１０の制御部１３０から引き継ぐ。このとき、制御部２３０は、ホスト装置４００からの要求に応じた論理ボリュームに対するアクセスを、キャッシュ２４０を用いて制御する。これとともに、制御部２３０は、キャッシュ２４０のライトデータを非同期でＣＭ３１０のキャッシュにコピーする非同期コピー処理を実行する。
【００５９】
バッファ２５０には、ストレージ装置２００がアクティブ状態のとき、キャッシュ２４０からＣＭ３１０に転送されるライトデータが一時的に格納される。管理情報記憶部２６０には、コピー処理で参照される各種の情報が格納される。
【００６０】
なお、図示しないが、ＣＭ２１０ａもＣＭ２１０と同様の処理機能を備える。
ＣＭ３１０は、制御部３３０、キャッシュ３４０、バッファ３５０および管理情報記憶部３６０を有する。制御部３３０の処理は、ＣＭ３１０が備えるプロセッサが所定のプログラムを実行することで実現される。キャッシュ３４０およびバッファ３５０は、ＣＭ３１０が備えるＲＡＭの記憶領域の一部によって実現される。管理情報記憶部３６０は、ＣＭが備えるＲＡＭまたはＳＳＤの記憶領域の一部によって実現される。
【００６１】
制御部３３０は、ＣＭ１１０，２１０のうち運用状態のＣＭから転送されたライトデータを、キャッシュ３４０に格納する。キャッシュ３４０には、ＣＭ１１０のキャッシュ１４０またはＣＭ２１０のキャッシュ２４０に格納されたライトデータに対応するコピーデータが格納される。バッファ３５０には、ＣＭ１１０またはＣＭ２１０から転送されたライトデータが一時的に格納される。管理情報記憶部３６０には、コピー処理、すなわち受信したライトデータをキャッシュ３４０に格納する処理において参照される各種の情報が格納される。
【００６２】
なお、図示しないが、ＣＭ３１０ａもＣＭ３１０と同様の処理機能を備える。
次に、上記のストレージシステムで実行される非同期コピー処理について説明する。本実施の形態では、ストレージ装置１００がアクティブ状態のとき、ストレージ装置１００とストレージ装置３００との間において、順序性が保証された非同期コピーが実行される。
【００６３】
図５は、非同期コピーの基本的な処理手順を説明するための図である。なお、図５では、ストレージ装置１００とストレージ装置２００との間の同期コピーに関する処理については省略している。
【００６４】
ストレージ装置１００がアクティブ状態のとき、ストレージ装置１００は非同期コピーにおけるコピー元装置となり、ストレージ装置３００が非同期コピーにおけるコピー先装置となる。前述のように、ストレージ装置１００のＣＭ１１０は、コピー元となるキャッシュ１４０と、非同期コピーの際に利用されるバッファ１５０を備える。ストレージ装置１００のＣＭ１１０ａも同様に、コピー元となるキャッシュ１４０ａと、非同期コピーの際に利用されるバッファ１５０ａを備える。
【００６５】
また、前述のように、ストレージ装置３００のＣＭ３１０は、コピー先となるキャッシュ３４０と、非同期コピーの際に利用されるバッファ３５０を備える。ストレージ装置３００のＣＭ３１０ａも同様に、コピー先となるキャッシュ３４０ａと、非同期コピーの際に利用されるバッファ３５０ａを備える。
【００６６】
バッファ１５０，１５０ａ，３５０，３５０ａは、それぞれ同数の分割領域に区分されている。図５において、各分割領域に記載された数字は、各分割領域のＩＤ（Identification）を示す。以下の説明では、ＩＤが「ｘｘｘｘ」の分割領域を「分割領域（ｘｘｘｘ）」と表記する。
【００６７】
非同期コピー処理においては、バッファ１５０，１５０ａ，３５０，３５０ａのそれぞれから分割領域が１つずつ選択され、選択された分割領域が、ホスト装置４００から同一期間に書き込まれたライトデータの格納に利用される。そこで、以下の説明では、各分割領域を「世代」という概念で識別する場合がある。図５の例では、分割領域（００００），（０１００），（２０００），（２１００）が同一世代に属する。また、分割領域（０００１），（０１０１），（２００１），（２１０１）が同一世代に属する。また、分割領域（０００２），（０１０２），（２００２），（２１０２）が同一世代に属する。また、分割領域（０００３），（０１０３），（２００３），（２１０３）が同一世代に属する。また、同一世代に属する分割領域の組み合わせを「バッファセット」と呼ぶ。
【００６８】
ＣＭ１１０は、ホスト装置４００からライト要求を受信すると、ホスト装置４００から送信されたライトデータをキャッシュ１４０に書き込み（ステップＳ１１ａ）、ホスト装置にライト完了通知を送信する。ＣＭ１１０ａも同様に、ホスト装置４００から送信されたライトデータをキャッシュ１４０ａに書き込み（ステップＳ１１ｂ）、ホスト装置４００にライト完了通知を送信する。
【００６９】
ＣＭ１１０は、キャッシュ１４０への書き込みとは非同期のタイミングで、キャッシュ１４０に書き込まれたライトデータを分割領域（００００）に格納（コピー）する（ステップＳ１２ａ）。ＣＭ１１０ａも同様に、キャッシュ１４０ａへの書き込みとは非同期のタイミングで、キャッシュ１４０ａに書き込まれたライトデータを分割領域（０１００）に格納（コピー）する（ステップＳ１２ｂ）。
【００７０】
その後、コピー元のストレージ装置１００では、分割領域（００００），（０１００）の少なくとも一方の残容量がなくなるか、または一定時間が経過すると、バッファセットの切り替えが行われる。バッファセットの切り替えとは、ライトデータの格納先とする分割領域を切り替えることを指す。バッファセットの切り替え発生により、キャッシュ１４０，１４０ａに書き込まれたライトデータの格納先は、次世代のバッファセットに属する分割領域（０００１），（０１０１）にそれぞれ切り替えられる。これとともに、前世代のバッファセットに属する分割領域（００００），（０１００）は、コピー先装置への転送の対象となる。
【００７１】
ＣＭ１１０は、分割領域（００００）の残容量がなくなるか、または一定時間が経過すると、分割領域（００００）に格納されたライトデータをまとめてＣＭ３１０に転送する（ステップＳ１３ａ）。ＣＭ１１０ａも同様に、分割領域（０１００）に格納されたライトデータをまとめてＣＭ３１０ａに転送する（ステップＳ１３ｂ）。
【００７２】
ＣＭ３１０は、ＣＭ１１０から受信したライトデータを分割領域（２０００）に一時的に格納し、すべてのライトデータが格納されると、分割領域（２０００）に格納されたライトデータをキャッシュ３４０に書き込む（ステップＳ１４ａ）。ＣＭ３１０ａも同様に、ＣＭ１１０ａから受信したライトデータを分割領域（２１００）に一時的に格納し、すべてのライトデータが格納されると、分割領域（２１００）に格納されたライトデータをキャッシュ３４０ａに書き込む（ステップＳ１４ｂ）。以下、バッファ３５０，３５０ａからキャッシュ３４０，３４０ａへの書き込みを「展開」と呼ぶ。
【００７３】
分割領域（２０００），（２１００）に格納されたデータの展開が完了すると、分割領域（００００），（０１００），（２０００），（２１００）が属するバッファセットは未使用領域に戻される。このように分割領域が未使用領域に戻されることを「解放」と呼ぶ。
【００７４】
以上のように、コピー用のバッファを用い、バッファセット単位で装置間のライトデータの転送およびバッファからキャッシュへのライトデータの展開を行うことで、バッファセット単位での書き込みの順序性が保証される。
【００７５】
ところで、前述のように、ストレージ装置１００に障害が発生した場合には、ホスト装置４００からの要求に応じたアクセス制御をストレージ装置２００が引き継ぐ（フェイルオーバ）。ここで、ストレージ装置１００とストレージ装置２００との間では、同期コピーにより常に同じデータがキャッシュに保持されており、ストレージ装置１００に障害が発生した場合でもこの点に変わりはない。一方、ストレージ装置１００とストレージ装置３００との間で非同期コピーによるデータの転送中にストレージ装置１００に障害が発生すると、ストレージ装置２００とストレージ装置３００との間ではキャッシュのデータが等価にならない。このため、フェイルオーバの際に、ストレージ装置２００とストレージ装置３００との間でキャッシュの等価性を保ちつつ、ホスト装置４００からの要求に応じたアクセス制御を短時間で再開することが、このストレージシステムでの１つの課題となる。
【００７６】
本実施の形態では、同期コピー先のストレージ装置２００において、コピー元からのライトデータをキャッシュ２４０に書き込むとともに、そのライトデータを示すライト制御情報を管理情報記憶部に記憶しておく。また、バッファセットの切り替えおよび解放の処理をストレージ装置１００，２００，３００で同期させ、ストレージ装置２００が切り替え前、切り替え後かつ未解放のそれぞれのバッファセットに対応するライト制御情報を識別できるようにする。
【００７７】
そして、ストレージ装置１００に障害が発生したとき、ストレージ装置２００は、未解放のバッファセットに対応するライト制御情報に基づいて、そのライト制御情報に対応するライトデータをキャッシュから読み出し、ストレージ装置３００に転送する。ストレージ装置３００は、転送されたライトデータをキャッシュに書き込む。これにより、ストレージ装置２００とストレージ装置３００との間でキャッシュのデータを等価にする。その際に、ストレージ装置１００からストレージ装置３００への転送が完了していない可能性のあるライトデータだけが、ストレージ装置２００からストレージ装置３００に転送されるので、データが等価になるまでの時間が短縮される。
【００７８】
また、ストレージ装置２００は、上記のようなキャッシュからストレージ装置３００へのデータ転送をバックグラウンドで実行しながら、ホスト装置４００からの要求に応じた論理ボリュームへのアクセス制御をストレージ装置１００から引き継ぐ。これにより、ホスト装置４００からの要求に応じたアクセス制御を短時間で再開する。
【００７９】
図６は、各ＣＭの管理情報記憶部に記憶される情報を示す図である。
ＣＭ１１０の管理情報記憶部１６０には、セッション管理テーブル１６１、バッファセット管理テーブル１６２、バッファ管理テーブル１６３、切り替え状態情報１６４、格納バッファセット情報１６５、切り替え待ちキュー１６６、格納完了待ちキュー１６７およびコピービットマップ１６８が記憶される。なお、図示しないが、ＣＭ１１０ａの管理情報記憶部にも同様の情報が記憶される。
【００８０】
また、ＣＭ２１０の管理情報記憶部２６０には、セッション管理テーブル２６１、バッファセット管理テーブル２６２、バッファ管理テーブル２６３、切り替え状態情報２６４、格納バッファセット情報２６５、切り替え待ちキュー２６６、格納完了待ちキュー２６７およびコピービットマップ２６８が記憶される。なお、図示しないが、ＣＭ２１０ａの管理情報記憶部にも同様の情報が記憶される。
【００８１】
さらに、ＣＭ３１０の管理情報記憶部３６０には、セッション管理テーブル３６１、バッファセット管理テーブル３６２およびバッファ管理テーブル３６３が記憶される。なお、図示しないが、ＣＭ３１０ａの管理情報記憶部にも同様の情報が記憶される。
【００８２】
セッション管理テーブル１６１，２６１，３６１には、ストレージ装置間で設定されるコピーセッションに関する設定情報が登録される。本実施の形態では、ストレージ装置１００とストレージ装置２００との間では、同期コピーセッションが設定される。また、ストレージ装置１００とストレージ装置３００との間では、非同期コピーセッションが設定される。さらに、ストレージ装置２００とストレージ装置３００との間では、非同期コピーセッションが設定される。
【００８３】
セッション管理テーブル１６１，２６１，３６１には、例えば、各コピーセッションにおける同期コピー、非同期コピーの種別、コピー元装置およびコピー先装置を示す情報、セッションステータスが登録される。セッションステータスは、コピーセッションの状態を示す情報が登録される。
【００８４】
ストレージ装置１００が正常に運用されている状態では、ＣＭ１１０とＣＭ２１０との間の同期コピーセッションと、ＣＭ１１０とＣＭ３１０との間の非同期コピーセッションの各セッションステータスが「アクティブ」となる。この状態では、同期コピーと、書き込みの順序性が保証された非同期コピーとが正常に実行されている。また、ＣＭ２１０とＣＭ３１０との間の非同期コピーセッションのセッションステータスは、起動していないことを示す「スタンバイ」となる。
【００８５】
フェイルオーバが発生すると、ＣＭ２１０とＣＭ３１０との間の非同期コピーセッションのセッションステータスが、まず「コピーイング」に変更される。この状態では、ＣＭ２１０は、未解放のバッファセットに対応するライト制御情報に基づいて、そのライト制御情報に対応するコピー箇所をコピービットマップ２６８に記録する。そして、ＣＭ２１０は、コピービットマップ２６８に記録されたコピー箇所に対応するデータをキャッシュ２４０から読み出し、ＣＭ３１０に送信する。これにより、ボリュームのデータのうち、フェイルオーバの前にＣＭ１１０からＣＭ３１０に対して転送が済んでいなかった差分データがＣＭ３１０に転送される。そして、コピービットマップ２６８に記録されたすべてのコピー箇所についてのデータ転送が完了すると、セッションステータスは「アクティブ」に変更される。
【００８６】
なお、セッションステータスが「コピーイング」の状態でホスト装置４００からのライト要求を受信した場合、次のような処理が行われる。ＣＭ２１０は、ライトデータをキャッシュ２４０に書き込むとともに、ライト要求に対応するコピー箇所をコピービットマップ２６８に記録する。このコピー箇所はＣＭ３１０への転送が済んでいないデータの位置として取り扱われ、上記のようなコピービットマップ２６８に基づく差分データの転送処理により、このコピー箇所に対応するデータがＣＭ３１０に送信される。コピービットマップ２６８を用いることにより、ＣＭ２１０は、ライト要求を受信してライトデータをキャッシュ２４０に書き込む処理と、差分データをＣＭ３１０に転送する処理とを並列に実行することができる。その結果、ストレージ装置１００が停止してからホスト装置４００からの要求に応じた書き込み制御処理が再開されるまでの時間を短縮できる。
【００８７】
そして、差分データの転送が完了し、セッションステータスが「アクティブ」になると、ＣＭ２１０とＣＭ３１０との間で書き込みの順序性が保証された非同期コピーが開始される。すなわち、ＣＭ２１０は、ＣＭ１１０と同等の非同期コピーを再開する。
【００８８】
バッファセット管理テーブル１６２，２６２，３６２には、非同期コピーセッションにおいて利用されるバッファセットを示す情報が登録される。バッファ管理テーブル１６３，２６３には、バッファセット内の各分割領域に格納するライトデータを示すライト制御情報が登録される。バッファ管理テーブル３６３には、バッファセット内の各分割領域に格納されたライトデータを示すライト制御情報が登録される。
【００８９】
ここで、図７は、バッファセット管理テーブルについて説明するための図である。
ＣＭ１１０のバッファ１５０には、ＣＭ１１０がアクティブ状態のとき、ＣＭ１１０からＣＭ３１０に転送されるライトデータが一時的に格納される。ＣＭ２１０のバッファ２５０には、ＣＭ２１０がアクティブ状態のとき、ＣＭ２１０からＣＭ３１０に転送されるライトデータが一時的に格納される。ＣＭ３１０のバッファ３５０には、ＣＭ１１０またはＣＭ２１０から転送されたライトデータが一時的に格納される。バッファ１５０，２５０，３５０は、それぞれ同数の分割領域に分割されている。なお、図７において各分割領域に記載された数字は、分割領域のＩＤを示す。
【００９０】
ＣＭ１１０のバッファセット管理テーブル１６２には、非同期コピーセッションの処理において利用されるバッファセットを示す情報が登録される。バッファセットを示す情報は、コピー元の分割領域のＩＤとコピー先の分割領域のＩＤを含む。例えば図７では、コピー元が分割領域（００００）、コピー先が分割領域（２０００）の組み合わせと、コピー元が分割領域（０１００）、コピー先が分割領域（２１００）の組み合わせとが、同一世代のバッファセットとして登録されている。
【００９１】
ＣＭ２１０のバッファセット管理テーブル２６２には、非同期コピーセッションの処理において利用されるバッファセットを示す情報が登録される。例えば図７では、コピー元が分割領域（１０００）、コピー先が分割領域（２０００）の組み合わせと、コピー元が分割領域（１１００）、コピー先が分割領域（２１００）の組み合わせとが、同一世代のバッファセットとして登録されている。
【００９２】
バッファセット管理テーブル１６２とバッファセット管理テーブル２６２との間では、コピー先として同じＩＤの分割領域が登録されたバッファセットが登録されており、このようなバッファセットが同一世代のバッファセットとして利用される。このような情報登録方法によれば、ＣＭ１１０からＣＭ２１０に対してコピー先の分割領域のＩＤを送信することで、世代を通知できる。これにより、ＣＭ１１０とＣＭ２１０との間で世代（バッファセット）の切り替えや解放の処理を同期させることができる。
【００９３】
なお、図示しないが、ＣＭ１１０ａの管理情報記憶部にも、バッファセット管理テーブル１６２と同一の情報が登録されたバッファセット管理テーブルが保持される。また、ＣＭ２１０ａの管理情報記憶部にも、バッファセット管理テーブル２６２と同一の情報が登録されたバッファセット管理テーブルが保持される。
【００９４】
図８は、バッファ管理テーブルの構成例を示す図である。図８では、ＣＭ１１０のバッファ管理テーブル１６３を例示している。
バッファ管理テーブル１６３は、制御情報領域１６３ａ〜１６３ｄに区分されている。制御情報領域１６３ａ，１６３ｂ，１６３ｃ，１６３ｄは、バッファ１５０の分割領域（００００），（０００１），（０００２），（０００３）にそれぞれ対応付けられている。制御情報領域１６３ａ〜１６３ｄのそれぞれには、対応する分割領域に格納するライトデータを示すライト制御情報１６３−１が、格納状態情報１６３−２を付加した状態で登録される。
【００９５】
ライト制御情報１６３−１は、対応するライトデータをキャッシュ１４０からバッファ１５０内の対応する分割領域に格納するために参照される。格納状態情報１６３−２は、ライト制御情報１６３−１に対応するライトデータがキャッシュ１４０からバッファ１５０に対して格納済みか否かを示すフラグ情報である。ライト制御情報１６３−１が制御情報領域に登録されたとき、「未格納」を示す格納状態情報１６３−２がライト制御情報１６３−１に付加される。
【００９６】
ＣＭ２１０のバッファ管理テーブル２６３も、ＣＭ１１０のバッファ管理テーブル１６３と同様に、バッファ２５０の各分割領域に対応する制御情報領域に区分されている。バッファ管理テーブル２６３の制御情報領域には、バッファ管理テーブル１６３における同じ世代の制御情報領域と同じライト制御情報が、格納状態情報を付加した状態で登録される。ＣＭ１１０がアクティブ状態、ＣＭ２１０がスタンバイ状態のとき、制御情報領域に登録されたライト制御情報は、フェイルオーバした場合に、対応するライトデータをキャッシュ２４０からＣＭ３１０に転送するために参照される。一方、ＣＭ２１０がアクティブ状態に遷移した後に制御情報領域に登録されたライト制御情報は、対応するライトデータをキャッシュ２４０からバッファ１５０内の対応する分割領域に格納するために参照される。
【００９７】
ＣＭ３１０のバッファ管理テーブル３６３も、ＣＭ１１０のバッファ管理テーブル１６３と同様に、バッファ３５０の各分割領域に対応する制御情報領域に区分されている。バッファ管理テーブル３６３の制御情報領域には、対応する分割領域に格納されたライトデータを示すライト制御情報が登録される。ライト制御情報は、対応するライトデータをバッファ３５０内の対応する分割領域からキャッシュ３４０に格納する（展開する）ために参照される。
【００９８】
以下、図６に戻って説明を続ける。
切り替え状態情報１６４，２６４は、バッファセットの切り替え処理が実行中か否かを示す情報である。切り替え状態情報１６４は、ＣＭ１１０がアクティブ状態の場合に利用され、切り替え状態情報２６４は、ＣＭ２１０がアクティブ状態の場合に利用される。
【００９９】
格納バッファセット情報１６５，２６５は、現在格納予約対象となっているバッファセットを示す情報である。「格納予約」とは、バッファの分割領域に格納すべきライトデータを示すライト制御情報を、その分割領域に対応する、バッファ管理テーブルの制御情報領域に登録することを指す。格納バッファセット情報１６５，２６５が示すバッファセットは、それぞれバッファ１５０，２５０に含まれる分割領域に対応付けられている。なお、ＣＭ１１０のバッファ１５０を例に示すと、本実施の形態では、格納予約対象となるバッファセットは、分割領域（００００），（０００１），（０００２），（０００３），（００００），・・・の順で切り替えられる。
【０１００】
切り替え待ちキュー１６６，２６６は、切り替え処理の実行中にホスト装置４００からライト要求を受信した場合に、切り替え処理が完了するまでの間、そのライト要求を示すライト制御情報を一時的に保持するためのＦＩＦＯ（First In First Out）方式のキューである。切り替え待ちキュー１６６は、ＣＭ１１０がアクティブ状態の場合に利用され、切り替え待ちキュー２６６は、ＣＭ２１０がアクティブ状態の場合に利用される。
【０１０１】
格納完了待ちキュー１６７，２６７は、ライト制御情報を一時的に保持するキューである。格納完了待ちキュー１６７，２６７には、ホスト装置４００からライト要求を受信したとき、書き込み先領域と重複する領域に対して以前の世代でライトが要求され、かつバッファへの格納が済んでないライトデータがある場合に、格納が完了するまで受信したライト要求を示すライト制御情報を一時的に保持する。格納完了待ちキュー１６７は、ＣＭ１１０がアクティブ状態の場合に利用され、格納完了待ちキュー２６７は、ＣＭ２１０がアクティブ状態の場合に利用される。
【０１０２】
コピービットマップ２６８は、フェイルオーバしてＣＭ２１０がアクティブ状態に遷移したときに、未解放のバッファセットのライトデータをキャッシュ２４０からＣＭ３１０に転送するために利用される。コピービットマップ２６８は、論理ボリューム内のコピー処理単位のブロックごとのビットを有する。ビットに対応するブロックについて転送すべきライトデータがある場合、そのビットに「１」が設定される。このコピービットマップ２６８を用いることで、フェイルオーバの際にキャッシュ２４０，３４０のデータを等価にする場合に、差分データのみをキャッシュ２４０からＣＭ３１０に転送できるようになる。
【０１０３】
コピービットマップ１６８は、フェイルバック後にＣＭ１１０の動作を再開させる際に、コピービットマップ２６８と同様の用途で使用される。
次に、図９〜図１２を用いて、ストレージ装置１００が正常に動作している状態（アクティブ状態）でのコピー処理の概要を説明する。
【０１０４】
まず、図９は、ホスト装置からのライト要求に応じたライトＩ／Ｏ（Input／Output）処理例を示す図である。
図９に示すように、初期状態では、ホスト装置４００はライト要求をＣＭ１１０に送信する。また、バッファ１５０の分割領域（００００）およびバッファ２５０の分割領域（１０００）が、格納対象に設定されているとする。すなわち、分割領域（００００），（１０００）が、現世代のバッファセットに属している。
【０１０５】
ＣＭ１１０は、ホスト装置４００からライト要求およびライトデータを受信すると（ステップＳ１１ａ）、ライトデータをキャッシュ１４０に格納するとともに、ライトデータをＣＭ２１０に送信する（ステップＳ１１ｂ）。送信されたライトデータは、ＣＭ２１０のキャッシュ２４０に格納される。
【０１０６】
また、ＣＭ１１０は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル１６３の制御情報領域のうち、分割領域（００００）に対応する制御情報領域に登録する（ステップＳ１２ａ）。このとき、ライト制御情報には「未格納」を示す格納状態情報が付加される。ＣＭ２２０は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル２６３の制御情報領域のうち、分割領域（１０００）に対応する制御情報領域に登録する（ステップＳ１２ｂ）。
【０１０７】
以上の処理が完了すると、ＣＭ１１０は、ホスト装置４００にライト完了通知を送信する。このようにしてＣＭ１１０とＣＭ２１０との間での同期コピーが実現され、キャッシュ１４０，２４０にそれぞれ書き込まれたデータは常に等価となる。これとともに、ＣＭ１１０，２１０において、バッファ管理テーブルへのライト制御情報の登録、すなわちバッファ格納のための格納予約が行われる。
【０１０８】
ＣＭ１１０では、キャッシュ１４０へのライトデータの書き込みとは非同期のタイミングで、次のような処理が実行される。ＣＭ１１０は、非同期コピーセッションの処理として、ステップＳ１２ａで登録したライト制御情報に基づいて、キャッシュ１４０に書き込まれたライトデータをバッファ１５０の分割領域（００００）に格納（コピー）する（ステップＳ１３）。格納が完了すると、ＣＭ１１０は、ライト制御情報に付加された格納状態情報を「格納済み」に更新する。このように、バッファ１５０への格納処理がキャッシュ１４０への書き込み処理とは非同期で実行されることで、ホスト装置４００からのライト要求に対する応答時間を短縮できる。
【０１０９】
一方、ＣＭ２１０では、バッファ２５０へのライトデータの格納は行われない。すなわち、ＣＭ２１０がスタンバイの状態では、バッファ２５０は使用されず、バッファ２５０の領域をＣＭ２１０のＲＡＭに確保しておく必要がない。
【０１１０】
なお、図示しないが、ホスト装置４００はＣＭ１１０ａに対してもライト要求を送信できる。このライト要求に応じて、ＣＭ１１０ａ，２１０ａは、それぞれＣＭ１１０，２１０と同様の処理を実行する。
【０１１１】
図１０は、バッファセットの切り替え処理例を示す図である。
図９の処理が継続されると、バッファ１５０の分割領域（００００）に格納すべきライトデータが増加していく。そして、ＣＭ１１０は、ホスト装置４００からデータのライト要求を受信したとき（ステップＳ２１）に、分割領域（００００）に空き領域がなく、そのデータを格納できないと判定したとする。なお、この判定は、バッファ管理テーブル１６３の分割領域（００００）に対応する制御情報領域に登録されたライト制御情報に基づいて行われる。
【０１１２】
このとき、ＣＭ１１０は、ＣＭ２１０に対してバッファセットの切り替えを通知する（ステップＳ２２）。これにより、これ以後にホスト装置４００から受信したライトデータの格納先となる分割領域が、ＣＭ１１０とＣＭ２１０とで同期して切り替えられる。換言すると、バッファセットの世代がＣＭ１１０とＣＭ２１０とで同期して切り替えられる。
【０１１３】
切り替え通知の後、ステップＳ２１で受信されたライトデータは、キャッシュ１４０に格納されるとともに、ＣＭ２１０に送信されてキャッシュ２４０に格納される（ステップＳ２３）。また、切り替え前とは異なり、ＣＭ１１０は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル１６３の制御情報領域のうち、分割領域（０００１）に対応する制御情報領域に登録する（ステップＳ２４ａ）。このとき、ライト制御情報には「未格納」を示す格納状態情報が付加される。また、ＣＭ２２０は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル２６３の制御情報領域のうち、分割領域（１００１）に対応する制御情報領域に登録する（ステップＳ２４ｂ）。以上の処理が完了すると、ＣＭ１１０は、ホスト装置４００にライト完了通知を送信する。
【０１１４】
また、ＣＭ１１０は、上記とは非同期のタイミングで、ステップＳ２４ａで登録したライト制御情報に基づいて、キャッシュ１４０に書き込まれたライトデータをバッファ１５０の分割領域（０００１）に格納（コピー）する（ステップＳ２５）。格納が完了すると、ＣＭ１１０は、ライト制御情報に付加された格納状態情報を「格納済み」に更新する。
【０１１５】
このようにして、ライトデータの格納予約先となる分割領域が切り替えられる。また、バッファセットの切り替え通知はＣＭ１１０ａ，２１０ａにも通知され、ＣＭ１１０ａ，２１０ａでもデータの格納予約先となる分割領域が切り替えられる。これにより、データの格納予約先のバッファセットの世代が、ストレージ装置１００，２００との間で同期して切り替えられる。
【０１１６】
なお、図１０の処理において、ＣＭ１１０がホスト装置４００からのライトデータをキャッシュ１４０に格納する際に、そのライトデータと書き込み先が重複する、以前の世代における古いライトデータについて、バッファ１５０への格納が済んでない場合がある。この場合、ＣＭ１１０は、新たなライトデータのキャッシュ１４０への格納を保留して、そのライトデータを示すライト制御情報を格納完了待ちキュー１６７に登録する。これにより、新たなライトデータによるライトＩ／Ｏ処理は待ち状態となる。その後、古いライトデータのバッファ１５０への格納が完了すると、ＣＭ１１０は、格納完了待ちキュー１６７からライト制御情報を読み出して、そのライト制御情報に基づいてライトデータをキャッシュ１４０に格納し、ライト制御情報をバッファ管理テーブル１６３の制御情報領域に登録する。このような処理により、世代間でライトデータの書き込みの順序性を正確に保つことができる。
【０１１７】
一方、前世代のバッファセットについては、次の図１１に示す処理が実行される。
図１１は、ライトデータの転送およびバッファセットの展開処理例を示す図である。
ＣＭ１１０は、切り替えの発生前までにキャッシュ１４０に書き込まれたすべてのデータがバッファ１５０の分割領域（００００）に格納されると、分割領域（００００）内のデータをＣＭ３１０に転送する（ステップＳ３１）。すなわち、ＣＭ１１０は、分割領域単位でデータをまとめてＣＭ３１０に転送する。このとき、ＣＭ１１０は、バッファ３５０における格納先の分割領域のＩＤ「２０００」を、ライトデータとともに転送する。ＣＭ３１０は、受信したライトデータをバッファ３５０の分割領域（２０００）に一時的に格納するとともに、そのライトデータを示すライト制御情報を、バッファ管理テーブル３６３における分割領域（２０００）に対応する制御情報領域に登録する。これらの処理が完了すると、ＣＭ３１０は、分割領域（２０００）に格納されたライトデータをキャッシュ３４０に書き込む（ステップＳ３２）。すなわち、バッファ３５０内のライトデータがキャッシュ３４０に展開される。
【０１１８】
なお、実際には、ＣＭ１１０とＣＭ３１０との間だけでなく、ＣＭ１１０ａとＣＭ３１０ａとの間でも、上記の処理が実行される。すなわち、ＣＭ１１０ａのバッファからライトデータが転送され、ＣＭ３１０ａのバッファに一旦格納された後、ＣＭ３１０ａのキャッシュに展開される。
【０１１９】
また、上記の転送および展開処理と並行して、ＣＭ１１０によるライトＩ／Ｏ処理が継続される。すなわち、ＣＭ１１０は、ホスト装置４００からライト要求およびライトデータを受信すると（ステップＳ３３ａ）、ライトデータをキャッシュ１４０に格納するとともに、ライトデータをＣＭ２１０に送信する（ステップＳ３３ｂ）。送信されたライトデータは、ＣＭ２１０のキャッシュ２４０に格納される。
【０１２０】
また、ＣＭ１１０は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル１６３の制御情報領域のうち、分割領域（０００１）に対応する制御情報領域に登録する（ステップＳ３４ａ）。一方、ＣＭ２１０は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル２６３の制御情報領域のうち、分割領域（１００１）に対応する制御情報領域に登録する（ステップＳ３４ｂ）。
【０１２１】
以上の処理が完了すると、ＣＭ１１０は、ホスト装置４００にライト完了通知を送信する。また、ＣＭ１１０は、その後の非同期のタイミングで、制御情報領域に登録したライト制御情報に基づいて、対応するライトデータをバッファ１５０の分割領域（０００１）に格納する（ステップＳ３５）。
【０１２２】
図１２は、バッファセットの解放処理例を示す図である。分割領域（２０００）に格納された全ライトデータについて図１１のステップＳ３２に示した展開処理が完了すると、図１２に示すような処理が実行される。
【０１２３】
ＣＭ３１０は、バッファセットの解放をＣＭ１１０に通知する（ステップＳ４１ａ）。通知を受けたＣＭ３１０は、バッファセットの解放をＣＭ２１０に通知する（ステップＳ４１ｂ）。ＣＭ３１０は、分割領域（２０００）を解放し（ステップＳ４２ａ）、解放通知を受けたＣＭ１１０，２１０も、それぞれ分割領域（００００），（１０００）を解放する（ステップＳ４２ｂ，４２ｃ）。分割領域の解放とは、分割領域を未使用の空き領域に戻すことである。上記処理により、同じ世代のバッファセットに属する分割領域（００００），（１０００），（２０００）が同期して解放される。
【０１２４】
なお、実際の処理では、ＣＭ３１０だけでなく、ＣＭ３１０ａでもキャッシュへの展開が完了した場合に、バッファセットの解放が通知される。解放通知は、ＣＭ３１０からＣＭ３１０ａ、ＣＭ１１０からＣＭ１１０ａ、ＣＭ２１０からＣＭ２１０ａにそれぞれ送信され、これによってＣＭ３１０ａ，１１０ａ，２１０ａでも同じ世代のバッファセットに属する分割領域が解放される。
【０１２５】
以上の図９〜図１２に示した処理により、ＣＭ１１０とＣＭ２１０との間で同期コピーが実行されるとともに、ＣＭ１１０とＣＭ３１０との間で非同期コピーが実行される。また、ＣＭ１１０，２１０，３１０の間でバッファセットの解放が同期して行われる。そして、ＣＭ２１０では、バッファセットが解放されるまでの間、そのバッファセットの世代においてキャッシュ２４０に書き込まれたライトデータを示すライト制御情報が、バッファ管理テーブル２６３に保持される。このようにしてバッファ管理テーブル２６３に保持されたライト制御情報は、ＣＭ１１０からＣＭ３１０へのデータ転送中にフェイルオーバが発生した場合に、ＣＭ２１０とＣＭ３１０との間でキャッシュのデータの整合をとるために使用される。
【０１２６】
図１３は、フェイルオーバが発生した場合の処理例を示す図である。図１３では、図１１のようにバッファ１５０の分割領域（００００）からバッファ３５０の分割領域（２０００）へデータが転送されている途中で、ストレージ装置１００の動作が停止した場合の処理例を示す。
【０１２７】
ストレージ装置１００の動作が停止すると、ホスト装置４００が備えるアクセス先制御機能により、ホスト装置４００からの書き込みの要求先は、ストレージ装置１００からストレージ装置２００へ自動的に変更される。このとき、ホスト装置４００が認識する論理的な書き込み先ボリュームが変更されることなく、物理的な書き込み先が変更される。
【０１２８】
また、ストレージ装置２００は、ストレージ装置３００との間に設定されていた非同期コピーセッションのセッションステータスを「コピーイング」に変更し、ホスト装置４００からのライト要求の受信を開始する。このとき、ライト要求に応じた処理と並行して、前世代のバッファセット、すなわち分割領域（１０００），（２０００）に関する次のような処理が、バックグラウンドで実行される。
【０１２９】
ストレージ装置１００の動作が停止した時点では、バッファ管理テーブル２６３における分割領域（１０００）に対応する制御情報領域に、ライト制御情報が登録されている。これらのライト制御情報に対応するライトデータは、ＣＭ１１０からＣＭ３１０に対する転送が完了していない可能性があるデータである。そこで、ＣＭ２１０は、これらのライト制御情報に対応するライトデータをキャッシュ２４０から読み出して、ＣＭ３１０に転送する（ステップＳ５１）。
【０１３０】
ＣＭ３１０は、転送されたライトデータをキャッシュ３４０に格納する。キャッシュ３４０への格納が完了すると、バッファセットの解放が通知され、分割領域（１０００），（２０００）が未使用の空き領域に戻される。
【０１３１】
このような処理により、フェイルオーバの前に分割領域（００００）から分割領域（２０００）へのデータ転送が未完了であっても、転送が未完了の可能性があるライトデータを示すライト制御情報がＣＭ２１０のバッファ管理テーブル２６３に保持されている。このため、ＣＭ２１０は、保持されたライト制御情報に基づいて、転送が未完了の可能性があるライトデータをキャッシュ２４０から読み出し、ＣＭ３１０に転送することができる。これによって、キャッシュ２４０，３４０の各データを等価にすることができる。
【０１３２】
また、ＣＭ２１０は、保持されたライト制御情報に基づいて、キャッシュ２４０に格納されているライトデータのうち、ＣＭ３１０に転送されていない可能性のある差分データだけを抽出して、ＣＭ３１０に転送することができる。これにより、キャッシュ２４０，３４０の各データを等価にするためにＣＭ２１０からＣＭ３１０に転送されるデータ量を抑制でき、キャッシュ２４０，３４０の各データが等価になるまでの時間を短縮できる。
【０１３３】
一方、このような処理と並行して、ＣＭ２１０は、ホスト装置４００からのライト要求に応じた処理を実行する。ＣＭ２１０は、ホスト装置４００からライト要求を受け付けると、ホスト装置４００から受信したライトデータをキャッシュ２４０に書き込み、ホスト装置４００に書き込み完了通知を送信する（ステップＳ５２）。また、ＣＭ２１０はその後、キャッシュ２４０に書き込んだライトデータをＣＭ３１０に転送する（ステップＳ５３）。ＣＭ３１０は、転送されたライトデータをキャッシュ３４０に格納する。
【０１３４】
このように、フェイルオーバ時点でＣＭ１１０からＣＭ３１０への転送が未完了の可能性があるライトデータのＣＭ３１０への転送処理と、ホスト装置４００からのライト要求に応じた処理とが、並列に実行される。これにより、ストレージ装置１００の動作が停止したとき、ＣＭ２１０は、ホスト装置４００からのライト要求に応じたアクセス制御を短時間で引き継ぐことができるとともに、そのバックグラウンドで、前世代のバッファセットに関する残りの処理を実行できる。
【０１３５】
なお、実際の処理では、上記の処理はコピービットマップ２６８を用いて実行される。フェイルオーバが発生すると、ＣＭ２１０は、コピービットマップ２６８のビットのうち、バッファ管理テーブル２６３の制御情報領域に登録されているライト制御情報に対応するビットを「１」にする。これにより、キャッシュ２４０からＣＭ３１０にコピーすべきライトデータの位置がコピービットマップ２６８に記録される。ＣＭ２１０は、キャッシュ２４０のライトデータのうち、コピービットマップ２６８においてビット値が「１」とされたビットが示すライトデータを、キャッシュ２４０から読み出してＣＭ３１０に転送する（ステップＳ５１の処理に対応）。ＣＭ２１０は、コピービットマップ２６８の全ビットが「０」になるまで、コピービットマップ２６８に基づくデータ転送を実行する。
【０１３６】
一方、ＣＭ２１０は、ホスト装置４００からライト要求を受信し、ライトデータをキャッシュ２４０に書き込んだとき、コピービットマップ２６８のビットのうち、ライトデータの書き込み先に対応するビットも「１」にする。上記のように、ＣＭ２１０は、コピービットマップ２６８の全ビットが「０」になるまでコピービットマップ２６８に基づくデータ転送を実行する。このため、ライト要求に応じてキャッシュ２４０に書き込まれたライトデータも、コピービットマップ２６８に基づいてキャッシュ２４０からＣＭ３１０に転送される。
【０１３７】
このように、実際には、コピービットマップ２６８に基づくＣＭ３１０へのデータ転送処理と、ホスト装置４００からのライト要求に応じたライトデータの書き込みおよびコピービットマップ２６８の更新の処理とが、並列に実行される。これにより、ストレージ装置１００の動作が停止したとき、ＣＭ２１０は、ホスト装置４００からのライト要求に応じたアクセス制御を時間を空けずに引き継ぐことができる。
【０１３８】
そして、コピービットマップ２６８の全ビットが「０」になると、ＣＭ２１０は、ＣＭ３１０との間の非同期コピーセッションのセッションステータスを「アクティブ」にする。これにより、ＣＭ１１０と同等の非同期コピーがＣＭ２１０で再開される。すなわち、ＣＭ２１０は、ホスト装置４００からのライト要求を受け付けつつ、書き込みの順序性が保証された非同期コピーを実行する。
【０１３９】
図１３の例では、ＣＭ２１０は、セッションステータスが「アクティブ」になった後にライト要求を受信すると、ライトデータをキャッシュ２４０に書き込む。これとともに、ＣＭ２１０は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル２６３の制御情報領域のうち、分割領域（１００１）に対応する制御情報領域に登録する。以上の処理が完了すると、ＣＭ２１０は、ホスト装置４００にライト完了通知を送信する。
【０１４０】
また、その後の非同期のタイミングにおいて、ＣＭ２１０は、制御情報領域に登録したライト制御情報に基づいて、キャッシュ２４０に書き込まれたライトデータをバッファ２５０の分割領域（１００１）に格納（コピー）する。そして、バッファセットの切り替えが行われた後、ＣＭ２１０は、分割領域（１００１）に格納されたライトデータをＣＭ３１０に転送する。転送されたライトデータは、バッファ３５０の分割領域（２００１）を介してキャッシュ３４０に格納される。
【０１４１】
このような処理により、セッションステータスが「アクティブ」のとき、ＣＭ２１０は、フェイルオーバ前のＣＭ１１０と同等の非同期コピーを実行できる。
なお、ＣＭ２１０ａとＣＭ３１０ａとの間でも、上記と同様の処理が実行される。
【０１４２】
ところで、特許文献１に記載された処理によれば、ＣＭ１１０がアクティブ状態である間に、ＣＭ２１０とＣＭ３１０との通信が発生する。例えば、特許文献１では、ＣＭ１１０でバッファ１５０に対してライトデータが格納される際（例えば、図９のステップＳ１３に対応）に、ＣＭ２１０でもバッファ２５０に対してライトデータが格納される。また、ＣＭ１１０から転送されたライトデータがＣＭ３１０のバッファ３５０に格納されたとき、ＣＭ２１０からＣＭ３１０に対してライト制御情報が送信される。ＣＭ３１０では、受信したライト制御情報を用いて、バッファ３５０に格納されたライトデータの照合が行われる。この照合によりＣＭ１１０，２１０，３１０の同世代のバッファセットのデータ一致が確認されると、ライトデータがＣＭ３１０のキャッシュ３４０に展開され、バッファセットの解放が通知される。この解放通知は、ＣＭ３１０からＣＭ１１０に対してだけでなく、ＣＭ３１０からＣＭ２１０へも直接送信される。
【０１４３】
これに対して、図９〜図１２に示したように、本実施の形態では、ＣＭ１１０がアクティブ状態である間、ＣＭ２１０とＣＭ３１０との間の通信は一切行われない。このため、ＣＭ１１０がアクティブの状態におけるＣＭ間の通信量を削減できる。特に、ＣＭ３１０はＣＭ１１０，２１０に対して遠隔地に設定される場合が多く、ＣＭ１１０，２１０とＣＭ３１０との間の通信路における通信料金が割高になる場合が多い。本実施の形態では、ＣＭ２１０とＣＭ３１０との間の通信が一切行われなくなることで、必要な通信料金を削減できる。
【０１４４】
また、本実施の形態では、ＣＭ３１０においてバッファ３５０に格納されたライトデータをキャッシュ３４０に展開する際に、ＣＭ２１０からの送信情報を待つ必要がなく、その送信情報に基づく照合処理も行われない。そのため、バッファ１５０からバッファ３５０へのデータ転送を開始してから、キャッシュ３４０へのデータ展開を行い、バッファセットが解放されるまでの時間を短縮できる。このような転送・展開・解放の処理時間の短縮により、次のような効果も得られる。
【０１４５】
図１０のようにバッファセットの切り替えが行われる際に、バッファ１５０に空き分割領域がない場合には、分割領域（０００１）が解放されるまで待ち状態となり、切り替え処理は一時停止される。上記のように分割領域（０００１）が解放されるまでの時間が短縮されることで、切り替え処理が再開されるまでの時間も短縮される。その結果、切り替えにかかる全体の処理時間を短縮できる。
【０１４６】
また、図１０のケースのように、ホスト装置４００からのライト要求を受信したときに、格納予約対象の分割領域（００００）の空きがないことから切り替えが必要となった場合には、ライト要求に対応するライト制御情報が切り替え待ちキュー１６６に登録される。そして、切り替えが完了するまでライト要求に応じたライトＩ／Ｏ処理が一時停止される。この場合、上記のように、切り替え処理時間が短縮されることで、ライトＩ／Ｏ処理が再開されるまでの時間も短縮される。その結果、ホスト装置４００からのライト要求に対する応答時間を短縮できる。
【０１４７】
次に、ストレージシステムにおける処理手順をシーケンス図およびフローチャートを用いて説明する。
まず、図１４〜図１７を用いて、ストレージ装置１００，２００，３００が正常に動作しており、ストレージ装置１００がアクティブ状態、ストレージ装置２００がスタンバイ状態である場合の処理を説明する。
【０１４８】
図１４は、ライトＩ／Ｏ処理の手順を示すシーケンス図の例である。
ＣＭ１１０の制御部１３０は、ホスト装置４００からライト要求およびライトデータを受信する（ステップＳ１０１）。制御部１３０は、切り替え状態情報１６４を参照して、現在バッファセットの切り替え処理を実行中かを判定する（ステップＳ１０２）。ステップＳ１０２で実行中であると判定された場合、制御部１３０は、ライト要求を示すライト制御情報を切り替え待ちキュー１６６に登録し（ステップＳ１０３）、ライトＩ／Ｏ処理を終了する。このとき、ライトデータはＲＡＭ１１２に一時的に保持される。後述するように、切り替え処理が完了すると、切り替え待ちキュー１６６からライト制御情報が取り出される。そして、このライト制御情報および対応するライトデータについて、ステップＳ１０２以降の処理が実行される（図１５のステップＳ１３０に対応）。
【０１４９】
一方、ステップＳ１０２で切り替え処理が実行中でないと判定された場合、制御部１３０は、バッファ１５０における格納先の分割領域（ここでは例として、分割領域（０００１）とする）に、受信したライトデータを格納できるだけの空き領域があるかを判定する（ステップＳ１０４）。この判定では、制御部１３０は、バッファ管理テーブル１６３における分割領域（０００１）に対応する制御情報領域に登録されたライト制御情報に基づいて、対応するライトデータの合計サイズを算出する。制御部１３０は、算出された合計サイズに受信したライトデータのサイズを加算した値が、分割領域のサイズより大きい場合に、空き領域がないと判定する。
【０１５０】
ステップＳ１０４で空き領域がないと判定された場合、制御部１３０は、ライト要求を示すライト制御情報を切り替え待ちキュー１６６に登録し、バッファセットの切り替え処理を起動する（ステップＳ１０５）。これにより、図１５に示す切り替え処理が開始される。なお、ライトデータはＲＡＭ１１２に一時的に保持される。また、上記と同様に、切り替え処理が完了すると、切り替え待ちキュー１６６からライト制御情報が取り出され、このライト制御情報および対応するライトデータについて、ステップＳ１０２以降の処理が実行される（図１５のステップＳ１３０に対応）。
【０１５１】
一方、ステップＳ１０４で空き領域があると判定された場合、制御部１３０は、ライトデータの書き込み先領域と重複する領域に対して以前の世代でライトが要求され、かつバッファ１５０に対して未格納のライトデータがあるかを判定する（ステップＳ１０６）。この判定では、制御部１３０は、バッファ管理テーブル１６３の制御情報領域のうち、現在より前の世代であり、かつ解放されていないバッファセットに対応する制御情報領域を参照する。制御部１３０は、参照した制御情報領域に、書き込み先領域がステップＳ１０１で受信した新たなライトデータの書き込み先と重複し、かつ、格納状態情報が「未格納」を示すライト制御情報が存在する場合に、ステップＳ１０６の条件を満たすと判定する。
【０１５２】
この条件を満たす場合、新たなライトデータをキャッシュ１４０に格納してしまうと、ステップＳ１０６の条件を満たす古いライトデータの少なくとも一部が上書きされてしまう。このため、古いライトデータを以前の世代に属する分割領域に正しく残せなくなり、書き込みの順序性を維持できなくなる。そこで、ステップＳ１０６の条件を満たす場合、制御部１３０は、ライト要求を示すライト制御情報を格納完了待ちキュー１６７に登録し（ステップＳ１０７）、ライトＩ／Ｏ処理を終了する。このとき、新たなライトデータはＲＡＭ１１２に一時的に保持される。後述するように、上記の古いライトデータがバッファ１５０の分割領域に格納されると、格納完了待ちキュー１６７からライト制御情報が取り出される。そして、このライト制御情報および対応するライトデータについて、ステップＳ１０２以降の処理が実行される（図１６のステップＳ１３７に対応）。
【０１５３】
一方、ステップＳ１０６の条件を満たさない場合、制御部１３０は、同期コピー処理および格納予約処理を実行する。すなわち、制御部１３０は、受信したライトデータを示すライト制御情報を、バッファ管理テーブル１６３における分割領域（０００１）に対応する制御情報領域に登録する（ステップＳ１０８）。また、制御部１３０は、ライトデータをライト制御情報とともにＣＭ２１０に送信する（ステップＳ１０９）。このとき、例えば、バッファ２５０における格納先の分割領域（１００１）を示す識別情報が、ライトデータに付加されて送信される。あるいは、分割領域の識別情報の代わりに、世代番号やバッファセットの識別番号が付加されてもよい。
【０１５４】
ＣＭ２１０の制御部２３０は、受信したライト制御情報を、バッファ管理テーブル２６３における分割領域（１００１）に対応する制御情報領域に登録するとともに、受信したライトデータをキャッシュ２４０に書き込む（ステップＳ１１０）。これらの処理が完了すると、制御部２３０は、ＣＭ１１０に完了通知を送信する（ステップＳ１１１）。
【０１５５】
ＣＭ１１０の制御部１３０は、ライトデータをキャッシュ１４０に書き込む（ステップＳ１１２）。そして、制御部１３０は、ライト完了通知をホスト装置４００に送信して、ライト要求に対する応答を行う（ステップＳ１１３）。
【０１５６】
図１５は、バッファセットの切り替え処理の手順を示すシーケンス図の例である。バッファセットの切り替え条件が満たされると、図１５の処理が開始される。切り替え条件が満たされる場合とは、図１４のステップＳ１０４で空き領域がないと判定された場合か、または、直近の切り替え処理が実行されてから一定時間が経過した場合である。なお、図１５の処理は、図１４の処理と並列に実行される。
【０１５７】
ＣＭ１１０の制御部１３０は、切り替え状態情報１６４を、切り替え処理中を示すように更新する（ステップＳ１２１）。そして、制御部１３０は、バッファ１５０内の分割領域の空き状態を確認し、次のような判定を行う（ステップＳ１２２）。制御部１３０は、空きの分割領域（解放された分割領域）が１つもない場合、分割領域の解放完了待ち状態となる（ステップＳ１２３）。この場合、制御部１３０は、一定時間後にステップＳ１２１の処理を再度実行する。
【０１５８】
ステップＳ１２１において、空きの分割領域がある場合、具体的には、次の世代に対応する分割領域が解放されている場合には、制御部１３０は、バッファセットを切り替える（ステップＳ１２４）。具体的には、制御部１３０は、格納バッファセット情報１６５を、次の世代のバッファセットを示すように更新する。また、制御部１３０は、ＣＭ２１０に対してバッファセットの切り替えを通知する（ステップＳ１２５）。
【０１５９】
ＣＭ２１０の制御部２３０は、バッファセットを切り替える（ステップＳ１２６）。具体的には、制御部２３０は、格納バッファセット情報２６５を、次の世代のバッファセットを示すように更新する。そして、制御部２３０は、完了通知をＣＭ１１０に送信する（ステップＳ１２７）。
【０１６０】
ＣＭ１１０の制御部１３０は、切り替え状態情報１６４を、切り替え処理中でないことを示すように更新する（ステップＳ１２８）。そして、制御部１３０は、切り替え待ちキュー１６６にライト制御情報が登録されているかを判定する（ステップＳ１２９）。ライト制御情報が登録されている場合、制御部１３０は、そのライト制御情報を切り替え待ちキュー１６６から取り出し、そのライト制御情報について、図１４のステップＳ１０２からのライトＩ／Ｏ処理を起動する（ステップＳ１３０）。これにより、取り出されたライト制御情報についてのライトＩ／Ｏ処理が再開される。なお、切り替え待ちキュー１６６にライト制御情報が複数登録されている場合、それらを順番に選択してライトＩ／Ｏ処理を起動する。一方、ステップＳ１２９でライト制御情報が登録されていないと判定された場合、切り替え処理は終了される。
【０１６１】
図１６は、バッファ格納処理の手順を示すフローチャートの例である。図１５に示した切り替え処理が完了すると、切り替え後のバッファセットについて図１６に示すバッファ格納処理が開始される。なお、図１６の処理は、図１４の処理や、他のバッファセットについての図１５の処理と並列に実行される。
【０１６２】
ＣＭ１１０の制御部１３０は、バッファ管理テーブル１６３における処理対象のバッファセットに対応する制御情報領域に、ライト制御情報が登録されているかを判定する（ステップＳ１３１）。ライト制御情報が登録されていない場合、制御部１３０は、バッファセットの切り替え処理が実行されたかを判定する（ステップＳ１３２）。制御部１３０は、格納バッファセット情報１６５が示すバッファセットの世代が、処理対象のバッファセットと一致しない場合に、切り替え処理が実行されたと判定する。この場合、切り替えが行われたバッファセットに対応する制御情報領域に登録されたすべてのライト制御情報を処理済みの状態となるので、バッファ格納処理は完了する。一方、切り替え処理が実行されていない場合、制御部１３０は、一定時間後にステップＳ１３１の処理を実行する。
【０１６３】
ステップＳ１３１でライト制御情報が登録されていた場合、制御部１３０は、制御情報領域に登録されたライト制御情報のうち最も先に登録されたライト制御情報を選択する（ステップＳ１３３）。次に、制御部１３０は、選択されたライト制御情報が示すライトデータをキャッシュ１４０から読み出し、バッファ１５０における処理対象のバッファセットに対応する分割領域に格納（コピー）する（ステップＳ１３４）。そして、制御部１３０は、選択されたライト制御情報に付加された格納状態情報を、格納済みを示すように更新する（ステップＳ１３５）。
【０１６４】
次に、制御部１３０は、格納完了待ちキュー１６７を参照し、書き込み先領域が重複する新たなライトデータを示すライト制御情報が登録されているかを判定する（ステップＳ１３６）。この新たなライトデータとは、その書き込み先領域の少なくとも一部が、ステップＳ１３３で選択されたライトデータの書き込み先領域と重複するデータである。
【０１６５】
ステップＳ１３６で該当するライト制御情報が登録されている場合、制御部１３０は、そのライト制御情報を格納完了待ちキュー１６７から取り出す。そして、制御部１３０は、取り出したライト制御情報について、図１４のステップＳ１０２からのライトＩ／Ｏ処理を起動する（ステップＳ１３７）。これにより、取り出されたライト制御情報についてのライトＩ／Ｏ処理が再開される。その後、制御部１３０は、ステップＳ１３１の処理を実行する。
【０１６６】
一方、ステップＳ１３６で該当するライト制御情報が登録されていない場合、制御部１３０は、ステップＳ１３１の処理を実行する。
図１７は、転送・展開・解放処理の手順を示すシーケンス図の例である。図１６のステップＳ１３２で「Ｙｅｓ」と判定されてバッファ格納処理が完了すると、その処理が完了したバッファセット（すなわち、切り替え済みかつバッファ格納済みのバッファセット）について図１７に示す処理が開始される。なお、図１７の処理は、図１４の処理や、他のバッファセットについての図１５、図１６の処理と並列に実行される。
【０１６７】
ＣＭ１１０の制御部１３０は、バッファ１５０の分割領域（ここでは例として、分割領域（０００１）とする）に格納されたすべてのライトデータを、対応するライト制御情報とともにＣＭ３１０に転送する（ステップＳ１４１）。このとき、例えば、バッファ３５０における格納先の分割領域（２００１）を示す識別情報が、ライトデータに付加されて送信される。あるいは、分割領域の識別情報の代わりに、世代番号やバッファセットの識別番号が付加されてもよい。
【０１６８】
ＣＭ３１０の制御部３３０は、受信したライトデータをバッファ３５０の分割領域（２００１）に格納するとともに、受信したライト制御情報を、バッファ管理テーブル３６３における分割領域（２００１）に対応する制御情報領域に登録する（ステップＳ１４２）。これらの処理が完了すると、制御部３３０は、分割領域（２００１）に格納されたライトデータをキャッシュ３４０に書き込む（ステップＳ１４３）。これにより、ライトデータがキャッシュ３４０に展開される。
【０１６９】
制御部３３０は、バッファセットの解放をＣＭ１１０に通知する（ステップＳ１４４）。ＣＭ１１０の制御部１３０は、解放通知を受けると、バッファセットの解放をＣＭ２１０に通知する（ステップＳ１４５）。これとともに、制御部１３０は、処理対象のバッファセットを解放する処理を行う（ステップＳ１４６）。具体的には、制御部１３０は、分割領域（０００１）を空き領域に戻し、バッファ管理テーブル１６３における分割領域（０００１）に対応する制御情報領域に登録されたライト制御情報を消去する。
【０１７０】
ＣＭ２１０の制御部２３０は、解放通知を受けると、処理対象のバッファセットを解放する処理を行う（ステップＳ１４７）。具体的には、制御部２３０は、分割領域（１００１）を空き領域に戻し、バッファ管理テーブル２６３における分割領域（１００１）に対応する制御情報領域に登録されたライト制御情報を消去する。
【０１７１】
制御部２３０は、バッファセットの解放完了をＣＭ１１０に通知する（ステップＳ１４８）。ＣＭ１１０の制御部１３０は、解放完了通知を受けると、バッファセットの解放完了をＣＭ３１０に通知する（ステップＳ１４９）。ＣＭ３１０の制御部３３０は、処理対象のバッファセットを解放する処理を行う（ステップＳ１５０）。具体的には、制御部３３０は、分割領域（２００１）を空き領域に戻し、バッファ管理テーブル３６３における分割領域（２００１）に対応する制御情報領域に登録されたライト制御情報を消去する。
【０１７２】
このような処理により、ＣＭ１１０，２１０，３１０における同世代のバッファセットが同期して解放される。
以上の図１７の処理では、特許文献１と比較した場合、ステップＳ１４３での展開の際に、ＣＭ２１０からの送信情報を待つ必要がなく、その送信情報に基づく照合処理も行われない。このため、図１７の転送・展開・解放の全体の処理時間を短縮できる。
【０１７３】
そして、このような転送・展開・解放の処理時間が短縮されることで、例えば、図１５のステップＳ１２３における解放完了待ち時間を短縮でき、それによって、バッファセットの切り替え処理時間を短縮できる。その結果、例えば、図１４のステップＳ１０３，Ｓ１０５で切り替え待ちキュー１６６に登録されたライト制御情報についてのライトＩ／Ｏ処理を、短時間で再開でき、それによって、ホスト装置４００からのライト要求に対する応答時間を短縮できる。
【０１７４】
次に、図１８〜図２０を用いて、障害などによってストレージ装置１００の動作が停止した場合の処理について説明する。なお、図１８、図１９の説明では、例として、フェイルオーバの発生時点でバッファ２５０における分割領域（１０００），（１００１）が解放されていないものとする。
【０１７５】
図１８は、フェイルオーバ後の再同期処理の手順を示すシーケンス図の例である。再同期とは、ＣＭ２１０のキャッシュ２４０とＣＭ３１０のキャッシュ３４０とを等価にする処理である。
【０１７６】
ＣＭ２１０の制御部２３０は、ストレージ装置１００が停止したことを検知すると（ステップＳ１５１）、ＣＭ３１０に対してフェイルオーバの発生を通知する（ステップＳ１５２）。これとともに、制御部２３０は、ストレージ装置３００との間の非同期コピーセッションのセッションステータスを「コピーイング」に変更する（ステップＳ１５３）。一方、ＣＭ３１０の制御部３３０は、フェイルオーバの発生通知を受けると、ストレージ装置２００との間の非同期コピーのセッションステータスを「コピーイング」に変更する（ステップＳ１５４）。
【０１７７】
ＣＭ２１０の制御部２３０は、バッファ管理テーブル２６３の制御情報領域を参照し、ライト制御情報が登録されているかを確認する。ライト制御情報が登録されている場合、以下の処理が実行される。ここでは、（１０００），（１００１）に対応する制御情報領域にライト制御情報が登録されているものとする。制御部２３０は、これらの制御情報領域に登録されたライト制御情報に基づいて、コピービットマップ２６８を作成する（ステップＳ１５５）。コピービットマップ２６８は、書き込み対象の論理ボリュームにおける、コピー処理単位のブロックごとのビットを有する。各ビットの初期値は「０」とする。
【０１７８】
制御部２３０は、上記制御情報領域からライト制御情報を１つずつ取得し、コピービットマップ２６８のビットのうち、取得したライト制御情報によって指定された書き込み先領域に含まれるブロックに対応するビットを「１」に更新する。上記制御情報領域に登録されたライト制御情報は、ＣＭ１１０のバッファ１５０からＣＭ３１０に対する転送が完了していない可能性のあるライトデータを示す。上記処理により、コピービットマップ２６８には、このようなライトデータが存在する論理ボリューム上の位置が登録される。
【０１７９】
なお、このようにしてコピービットマップ２６８が作成されると、ホスト装置４００からのアクセス要求の受け付けが開始される。例えば、ホスト装置４００からライト要求を受信したとき、後の図１９に示すライトＩ／Ｏ処理が、図１８における以下の処理と並行して実行される。
【０１８０】
制御部２３０は、作成されたコピービットマップ２６８からビット値が「１」のビットを１つ選択する。制御部２３０は、選択されたビットに対応するライトデータをキャッシュ２４０から読み出し、対応するライト制御情報とともにＣＭ３１０に転送する（ステップ１５６）。
【０１８１】
ＣＭ３１０の制御部３３０は、受信したライトデータをキャッシュ３４０に格納する（ステップＳ１５７）。ＣＭ２１０の制御部２３０は、ライトデータの格納完了通知をＣＭ３１０から受信すると、コピービットマップ２６８における、このライトデータに対応するビットを「０」に更新する（ステップＳ１５８）。そして、制御部２３０は、コピービットマップ２６８の全ビットが「０」かを判定する（ステップＳ１５９）。
【０１８２】
ビット値が「１」のビットが残っている場合、制御部３３０は、コピービットマップ２６８からビット値が「１」のビットを新たに選択して、ステップＳ１５６の処理を実行する。このようにして、コピービットマップ２６８の全ビットが「０」になるまでステップＳ１５６〜Ｓ１５８の処理が繰り返される。
【０１８３】
そして、ステップＳ１５９においてコピービットマップ２６８の全ビットが「０」になると、ＣＭ２１０のキャッシュ２４０とＣＭ３１０のキャッシュ３４０とが同期した状態（すなわち、互いのデータが等価の状態）となる。このとき、ＣＭ２１０の制御部２３０は、バッファセットの解放をＣＭ３１０に通知する（ステップＳ１６０）。これとともに、制御部２３０は、未解放のバッファセットを解放する処理を行う（ステップＳ１６１）。具体的には、制御部２３０は、分割領域（１０００），（１００１）を空き領域に戻し、バッファ管理テーブル２６３における分割領域（１０００），（１００１）に対応する制御情報領域に登録されたライト制御情報を消去する。
【０１８４】
ＣＭ３１０の制御部３３０は、解放通知を受けると、未解放のバッファセットを解放する処理を行う（ステップＳ１６２）。具体的には、制御部２３０は、分割領域（２０００），（２００１）を空き領域に戻す処理を実行する。解放処理が完了すると、制御部３３０は、バッファセットの解放完了をＣＭ２１０に通知する（ステップＳ１６３）。
【０１８５】
以上の処理により、分割領域（１０００），（１００１），（２０００），（２００１）が、同期して解放される。このとき、すべてのバッファセットが解放された状態となる。
【０１８６】
ＣＭ２１０の制御部２３０は、ストレージ装置３００との間の非同期コピーセッションのセッションステータスを「アクティブ」に変更する（ステップＳ１６４）。また、制御部２３０は、ＣＭ３１０に対してステータスの変更を指示し、ＣＭ３１０の制御部３３０は、指示に応じてストレージ装置２００との間の非同期コピーセッションのセッションステータスを「アクティブ」に変更する（ステップＳ１６５）。セッションステータスが「アクティブ」に変更されることで、ＣＭ２１０とＣＭ３１０との間で、書き込みの順序性が確保された非同期コピーが開始される。
【０１８７】
なお、セッションステータスが「アクティブ」に変更された時点では、すべてのバッファセットが解放された状態となっている。このため、ホスト装置４００からのライト要求に応じたライトＩ／Ｏ処理を開始する際には、どのバッファセットが現世代のバッファセット（格納対象のバッファセット）として選択されてもよい。例えば、ＣＭ２１０，３１０は、セッションステータスを「アクティブ」に変更すると、あらかじめ決められたバッファセットを現世代のバッファセットとして選択する。
【０１８８】
ここで、上記の図１８では、コピービットマップ２６８を用いてデータ転送を行う処理について説明した。しかし、他の方法として、ステップＳ１５５で参照した制御情報領域から１つずつライト制御情報を取得し、取得したライト制御情報が示すライトデータをキャッシュ２４０からＣＭ３１０に転送する方法が用いられてもよい。ただし、コピービットマップ２６８を用いることで、ＣＭ２１０からＣＭ３１０へのデータ転送量を削減できる可能性が生じる。
【０１８９】
例えば、未解放のバッファセットが複数存在し、それらのバッファセット間で書き込み先領域が同一のライトデータを示すライト制御情報があった場合でも、ＣＭ２１０のキャッシュ２４０には、それらのライトデータのうち最新のライトデータしか格納されていない。このため、このようなライトデータを示すライト制御情報が存在していたとしても、対応するライトデータをＣＭ３１０に１回だけ転送すれば済む。
【０１９０】
コピービットマップ２６８を用いることで、このように書き込み先領域が同一のライトデータを、１回の転送処理によってＣＭ２１０からＣＭ３１０に転送できるようになる。これにより、ＣＭ２１０からＣＭ３１０へのデータ転送量を削減でき、キャッシュ２４０のデータとキャッシュ３４０のデータとが等価になるまでの時間を短縮できる。
【０１９１】
なお、コピービットマップ２６８には、上記のように未転送の可能性があるライトデータの位置に加えて、次の図１９で示すライトＩ／Ｏ処理において新たにライトデータが書き込まれた位置も記録される。このため、ステップＳ１５６〜Ｓ１５８の処理では、ライトＩ／Ｏ処理において新たに書き込まれたライトデータも、ＣＭ３１０に転送される。
【０１９２】
これにより、キャッシュの再同期と並行して、ホスト装置４００からのライト要求に応じたライトＩ／Ｏ処理を実行できるようになる。このため、ＣＭ２１０は、フェイルオーバの発生から短時間で、ホスト装置４００からの新たなライト要求の受け付けを開始できる。したがって、ＣＭ２１０は、ホスト装置４００からのライト要求に応じたライトＩ／Ｏ処理を、ＣＭ１１０から短時間で引き継ぐことができる。
【０１９３】
また、ライトＩ／Ｏ処理においてコピービットマップ２６８が用いられることで、ライト要求によって新たに書き込まれたデータを、キャッシュ２４０への書き込みとは非同期に（すなわち、ライトバック方式によって）ＣＭ３１０に転送できる。このため、ライト要求に対する応答性能を向上させることができる。
【０１９４】
図１９は、コピーイング状態でのライトＩ／Ｏ処理の手順を示すフローチャートの例である。前述のように、図１８のステップＳ１５３，Ｓ１５４でセッションステータスが「コピーイング」となり、ステップＳ１５５でコピービットマップ２６８が作成されると、ホスト装置４００からのアクセス要求の受け付けが開始される。セッションステータスが「コピーイング」の状態においてホスト装置４００からライト要求を受信すると、図１９の処理が実行される。
【０１９５】
ＣＭ２１０の制御部２３０は、ホスト装置４００からライト要求およびライトデータを受信する（ステップＳ１７１）。すると、制御部２３０は、ライトデータをキャッシュ２４０に書き込む（ステップＳ１７２）。また、制御部２３０は、コピービットマップ２６８のビットのうち、ライトデータの書き込み先領域に含まれるブロックに対応するビットを「１」に更新する（ステップＳ１７３）。そして、制御部２３０は、ライト完了通知をホスト装置４００に送信して、ライト要求に対する応答を行う（ステップＳ１７４）。
【０１９６】
以上の図１９では、ステップＳ１７３の処理により、新たにライトデータが書き込まれた位置がコピービットマップ２６８に記録される。これにより、図１８のステップＳ１５６〜Ｓ１５８の処理が実行されることで、新たにキャッシュ２４０に書き込まれたライトデータが、ライト要求に対する応答とは非同期でＣＭ３１０に転送されるようになる。
【０１９７】
次に、図１８のステップＳ１６４，Ｓ１６５で非同期コピーセッションのセッションステータスが「アクティブ」になった後に、ホスト装置４００からライト要求を受信した場合のＣＭ２１０の処理について、図２０を用いて説明する。
【０１９８】
図２０は、アクティブ状態でのライトＩ／Ｏ処理の手順を示すフローチャートの例である。以下に示すように、ＣＭ２１０において実行されるライトＩ／Ｏ処理は、基本的に、図１４に示したＣＭ１１０でのライトＩ／Ｏ処理から、ＣＭ２１０との通信に関する処理（ステップＳ１０９〜Ｓ１１１）を除いた処理と同様である。
【０１９９】
すなわち、ＣＭ２１０の制御部２３０は、ホスト装置４００からライト要求およびライトデータを受信する（ステップＳ１８１）。制御部２３０は、切り替え状態情報２６４を参照して、現在バッファセットの切り替え処理が実行中かを判定する（ステップＳ１８２）。ステップＳ１８２で実行中であると判定された場合、制御部２３０は、ライト要求を示すライト制御情報を切り替え待ちキュー２６６に登録し（ステップＳ１８３）、ライトＩ／Ｏ処理を終了する。このとき、ライトデータはＣＭ２１０のＲＡＭに一時的に保持される。なお、切り替え処理が完了すると、切り替え待ちキュー２６６からライト制御情報が取り出される。そして、このライト制御情報および対応するライトデータについて、ステップＳ１７２以降の処理が実行される（図１５のステップＳ１３０に対応）。
【０２００】
一方、ステップＳ１８２で切り替え処理が実行中でないと判定された場合、制御部２３０は、バッファ２５０における格納先の分割領域（ここでは例として、分割領域（１００１）とする）に、受信したライトデータを格納できるだけの空き領域があるかを判定する（ステップＳ１８４）。空き領域がないと判定された場合、制御部２３０は、ライト要求を示すライト制御情報を切り替え待ちキュー２６６に登録し、バッファセットの切り替え処理を起動する（ステップＳ１８５）。これにより、図１５と同様の手順で切り替え処理が開始される。なお、ライトデータはＣＭ２１０のＲＡＭに一時的に保持される。また、上記と同様に、切り替え処理が完了すると、切り替え待ちキュー２６６からライト制御情報が取り出され、このライト制御情報および対応するライトデータについて、ステップＳ１８２以降の処理が実行される（図１５のステップＳ１３０に対応）。
【０２０１】
一方、ステップＳ１８４で空き領域があると判定された場合、制御部２３０は、ライトデータの書き込み先領域と重複する領域に対して以前の世代でライトが要求され、かつバッファ２５０に対して未格納のライトデータがあるかを判定する（ステップＳ１８６）。この条件を満たす場合、制御部２３０は、ライト要求を示すライト制御情報を格納完了待ちキュー２６７に登録し（ステップＳ１８７）、ライトＩ／Ｏ処理を終了する。このとき、新たなライトデータはＣＭ２１０のＲＡＭに一時的に保持される。なお、上記の古いライトデータがバッファ１５０の分割領域に格納されると、格納完了待ちキュー２６７からライト制御情報が取り出される。そして、このライト制御情報および対応するライトデータについて、ステップＳ１８２以降の処理が実行される（図１６のステップＳ１３７に対応）。
【０２０２】
一方、ステップＳ１８６の条件を満たさない場合、制御部２３０は、受信したライトデータを示すライト制御情報を、バッファ管理テーブル２６３における分割領域（１００１）に対応する制御情報領域に登録する（ステップＳ１８８）。そして、制御部２３０は、ライトデータをキャッシュ２４０に書き込む（ステップＳ１８９）。制御部２３０は、ライト完了通知をホスト装置４００に送信して、ライト要求に対する応答を行う（ステップＳ１９０）。
【０２０３】
なお、図示を省略するが、ＣＭ２１０の制御部２３０は、図２０の処理を１回でも実行すると、図１５におけるＣＭ１１０の処理（ＣＭ２１０への切り替え通知を除く）、図１６に示す処理、図１７におけるＣＭ１１０の処理（ＣＭ２１０へのバッファセット解放の通知を除く）と同様の処理を実行する。例えば、図２０で例示した分割領域（１００１）には、ライトデータがキャッシュ２４０からコピーされる。また、分割領域（１００１）の空きがなくなるなどの条件が満たされると、バッファセットの切り替えが行われ、その後、分割領域（１００１）に格納されたライトデータがＣＭ３１０に送信される。このような処理により、フェイルオーバ前のＣＭ１１０と同様に、書き込みの順序性が保証された非同期コピーが行われる。
【０２０４】
なお、上記の各実施の形態に示した装置（例えば、制御装置１０，２０，３０、ＣＭ１１０，１１０ａ，２１０，２１０ａ，３１０，３１０ａ）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、磁気テープなどがある。光ディスクには、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク（Blu-ray Disc：ＢＤ、登録商標）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０２０５】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２０６】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【符号の説明】
【０２０７】
１  上位装置
１０，２０，３０  制御装置
１１，２１，３１  記録媒体
１２  バッファ
１２ａ，１２ｂ  分割バッファ領域
１３，２３，３３  制御部
２２  制御情報記憶部
２２ａ，２２ｂ  分割領域
２４ａ，２４ｂ  制御情報
【図１】
2019191801.tif 000003
【図２】
2019191801.tif 000004
【図３】
2019191801.tif 000005
【図４】
2019191801.tif 000006
【図５】
2019191801.tif 000007
【図６】
2019191801.tif 000008
【図７】
2019191801.tif 000009
【図８】
2019191801.tif 000010
【図９】
2019191801.tif 000011
【図１０】
2019191801.tif 000012
【図１１】
2019191801.tif 000013
【図１２】
2019191801.tif 000014
【図１３】
2019191801.tif 000015
【図１４】
2019191801.tif 000016
【図１５】
2019191801.tif 000017
【図１６】
2019191801.tif 000018
【図１７】
2019191801.tif 000019
【図１８】
2019191801.tif 000020
【図１９】
2019191801.tif 000021
【図２０】
2019191801.tif 000022