以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例および処理例を示す図である。図1に示すストレージシステムは、制御装置10,20,30を有する。また、制御装置10,20は、上位装置1と通信可能になっている。
制御装置10,20,30は、記録媒体11,21,31をそれぞれ有する。なお、図1では例として、記録媒体11,21,31はそれぞれ制御装置10,20,30の内部に搭載されているが、それぞれ制御装置10,20,30の外部に接続されていてもよい。
制御装置10は、上位装置1からの要求に応じて記録媒体11へのアクセスを制御する。また、制御装置10は、記録媒体11に書き込まれたデータを、バックアップのために制御装置20,30の記録媒体21,31にコピーする機能を備える。制御装置10から制御装置20へは同期コピーが実行され、制御装置10から制御装置30へは非同期コピーが実行される。
制御装置20は、記録媒体11への書き込みが要求されたデータを制御装置10から受信し、記録媒体21に書き込む。また、制御装置20は、障害の発生などによって制御装置10の動作が停止すると、上位装置1からの書き込み要求に応じた書き込み制御処理を制御装置10から引き継ぐ。すなわち、この状態では、制御装置20は、上位装置1からの要求に応じて記録媒体21へのアクセスを制御する。これとともに、制御装置20は、記録媒体21に書き込まれたデータを、非同期コピーによって制御装置30の記録媒体31にバックアップする。
制御装置30は、制御装置10または制御装置20から送信されたデータを記録媒体31に書き込む。
また、制御装置10はさらに、バッファ12と制御部13を有する。バッファ12は、例えば、制御装置10が備えるRAM(Random Access Memory)に確保される。制御部13は、例えば、制御装置10が備えるプロセッサとして実現される。制御装置20はさらに、制御情報記憶部22と制御部23を有する。制御情報記憶部22の記憶領域は、例えば、制御装置20が備えるRAMに確保される。制御部23は、例えば、制御装置20が備えるプロセッサとして実現される。制御装置30はさらに、制御部33を有する。制御部33は、例えば、制御装置30が備えるプロセッサとして実現される。
バッファ12には、記録媒体11から制御装置30に送信されるデータが一時的に格納される。バッファ12は、複数の分割バッファ領域を有している。図1の例では、バッファ12は、分割バッファ領域12a,12bを有する。
制御情報記憶部22には、バッファ12の分割バッファ領域にそれぞれ対応付けられた分割領域を有する。図1の例では、制御情報記憶部22は、分割バッファ領域12a,12bにそれぞれ対応付けられた分割領域22a,22bを有する。制御情報記憶部22の分割領域には、制御情報が記憶される。制御情報とは、対応する分割バッファ領域に格納されるデータそれぞれについて、記録媒体11,21,31に格納するために必要となる情報である。例えば、制御情報は、対応する分割バッファ領域に格納されたデータそれぞれについての書き込み先領域を示す。
制御部13は、次に示す「同期コピー処理」、「格納処理」および「非同期コピー処理」を実行する。
同期コピー処理では、制御部13は、上位装置1から書き込みが要求されたデータを、記録媒体11に書き込むとともに制御装置20に送信し、上位装置1に書き込み完了を通知する。制御部23は、制御部13から送信されたデータを記録媒体21に格納するとともに、そのデータを示す制御情報を制御情報記憶部22に格納する。なお、制御部13による上位装置1に対する書き込み完了の通知は、記録媒体21へのデータの格納および制御情報記憶部22への制御情報の格納が完了した後に行われる。以上の同期コピー処理により、少なくとも、記録媒体11に格納されたデータと記録媒体21に格納されたデータとは常に等価となる。
格納処理では、制御部13は、記録媒体11に書き込まれたデータを分割バッファ領域12aに格納する。そして、制御部13は、所定の条件が満たされると、バッファ切り替えを制御装置20に通知するとともに、上位装置1から記録媒体11に書き込まれるデータの格納先を分割バッファ領域12aから分割バッファ領域12bに切り替える。したがって、バッファ切り替えの通知後における格納処理では、記録媒体11に書き込まれたデータが分割バッファ領域12bに格納される。
ここで、制御部23は、バッファ切り替えが通知される前に、制御部13からのデータを受信して記録媒体21に格納したとき、そのデータに対応する制御情報24aを制御情報記憶部22の分割領域22aに格納する。一方、制御部23は、バッファ切り替えが通知された後に、制御部13からのデータを受信して記録媒体21に格納したとき、そのデータに対応する制御情報24bを制御情報記憶部22の分割領域22bに格納する。このように、制御装置20は、バッファ切り替えの通知を受けることで、その前後で記録媒体21に格納したデータに対応する制御情報を、区別して保持できる。
非同期コピー処理では、制御部13は、分割バッファ領域12aに格納されたデータをまとめて制御装置30に送信する。すなわち、制御部13は、分割バッファ領域12aに対するデータの格納が完了した後、分割バッファ領域12a内のデータを制御装置30に送信する。また、制御部13は、分割バッファ領域12bに格納されたデータをまとめて制御装置30に送信する。
制御部33は、制御部13から送信された分割バッファ領域12aのデータを受信し、受信したデータを記録媒体31に格納する。また、制御部33は、制御部13から送信された分割バッファ領域12bのデータを受信し、記録媒体31に格納する。
このような非同期コピーによれば、分割バッファ領域単位でデータがコピーされる。したがって、制御装置10と制御装置30との間では、上位装置1からの書き込みの順序性が保証された非同期コピーが実行される。
制御部13は、非同期コピー処理での制御装置30に対するデータの送信が完了すると、完了通知を制御装置20に送信する。制御部23は、完了通知を受信すると、制御情報24aを分割領域22aから消去する。このように、制御部23は、完了通知を受信することにより、制御情報24aに対応するデータ、すなわち分割バッファ領域12aに格納されたデータについての非同期コピー処理が完了したことを認識できる。
次に、制御装置10が停止した場合について説明する。
制御部23は、例えば、上記のバッファ切り替えが通知された後に制御装置10が停止した場合、上位装置1からの書き込み要求の受信処理を制御部13から引き継いで、書き込みが要求されたデータを記録媒体21に格納する。そして、制御部23は、その後の所定のタイミングで、記録媒体21に格納したデータを制御装置30に送信する。
これとともに、制御部23は、バッファ切り替えが通知された後に制御装置10が停止したとき、分割領域22aに制御情報24aが残っている場合には、この制御情報24aに基づいて記録媒体21からデータを読み出し、読み出したデータを制御装置30に送信する。制御部33は、制御部23からこのデータを受信し、記録媒体31に格納する。
ここで、分割バッファ領域12aのデータを制御装置10から制御装置30に送信している途中で制御装置10が停止した場合、記録媒体11のデータと記録媒体31のデータとが一致しなくなる可能性がある。一方、制御部23は、バッファ切り替えが通知された後に制御装置10が停止したとき、分割領域22aに制御情報24aが残っていることで、分割領域22aに対応する分割バッファ領域12aのデータが制御装置30に送信されていない可能性があると判定できる。このように判定した場合、制御部23は、制御情報24aに基づいて、分割バッファ領域12aのデータと同一のデータを記録媒体21から読み出し、制御装置30に送信する。送信されたデータを制御部33が記録媒体31に格納することで、記録媒体31のデータが記録媒体21のデータと等価になる。
このような処理により、制御部23は、記録媒体21に格納されているデータのうち、記録媒体31に格納されていない可能性のあるデータだけを、記録媒体21から記録媒体31にコピーすることができる。これにより、制御装置20が書き込み制御処理を引き継ぐフェイルオーバの際に、非同期コピーのコピー元装置である制御装置20と、コピー先装置である制御装置30の各データを短時間で等価にすることができる。
なお、上位装置1からの書き込み要求に応じてデータを記録媒体21に格納する処理は、例えば、制御情報24aに基づくデータを記録媒体21から制御装置30へ送信する処理が完了した後に実行されてもよい。あるいは、これらの処理は並行して実行されてもよい。後者の場合、制御装置10が停止してから上位装置1からの要求に応じた書き込み制御処理が再開されるまでの時間を短縮できる。
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの構成例を示す図である。図2に示すストレージシステムは、ストレージ装置100,200,300およびホスト装置400を含む。ホスト装置400とストレージ装置100,200とは、例えば、SAN(Storage Area Network)51を介して接続されている。ストレージ装置100とストレージ装置200とは、例えば、専用の通信回線を介して接続され、ストレージ装置100,200とストレージ装置300とは、例えば、WAN(Wide Area Network)52を介して接続されている。ストレージ装置100とストレージ装置200との距離と比較して、ストレージ装置300は遠距離に配置されている。
ストレージ装置100は、CM(Controller Module)110,110aとドライブ部120,120aを有する。ドライブ部120,120aのそれぞれには、複数の記憶装置が搭載されている。それらの記憶装置は、例えばHDD(Hard Disk Drive)であり、その場合、ドライブ部120,120aはディスクアレイ装置である。CM110は、ドライブ部120内の記憶装置に対するアクセスを制御する制御装置であり、CM110aは、ドライブ部120a内の記憶装置に対するアクセスを制御する制御装置である。
同様に、ストレージ装置200は、CM210,210aとドライブ部220,220aを有しており、ストレージ装置300は、CM310,310aとドライブ部320,320aを有している。なお、図2のストレージシステムにおいては、CM110,110a,210,210a,310,310aが相互に接続されている。
CM110は、ホスト装置400からの要求に応じて、ドライブ部120内の記憶装置によって実現される論理ボリュームに対するアクセスを制御できるようになっている。同様に、CM110aは、ホスト装置400からの要求に応じて、ドライブ部120a内の記憶装置によって実現される論理ボリュームに対するアクセスを制御できるようになっている。CM110,110aは、対応する論理ボリュームに対するアクセス時に利用するキャッシュをそれぞれが保持する分散キャッシュ方式でアクセス制御を行う。
ストレージ装置200は、ストレージ装置100がアクティブ状態(運用状態)のとき、スタンバイ状態(待機状態)になっている。この状態では、CM210,210aは、それぞれCM110,110a内のキャッシュのデータを受信してバックアップする。ストレージ装置100内のキャッシュのデータは、同期コピーによってストレージ装置200にバックアップされる。そして、ストレージ装置100に障害が発生したとき、ストレージ装置200はスタンバイ状態からアクティブ状態に遷移し(すなわちフェイルオーバし)、ホスト装置400からの要求に応じた論理ボリュームへのアクセス制御を短時間で引き継ぐ。
ストレージ装置300も、ストレージ装置100がアクティブ状態のとき、ストレージ装置100内のキャッシュのデータを受信してバックアップする。具体的には、CM310,310aは、それぞれCM110,110a内のキャッシュのデータを受信してバックアップする。ただし、ストレージ装置100内のキャッシュのデータは、非同期コピーによってストレージ装置300にバックアップされる。そして、ストレージ装置100に障害が発生したとき、ストレージ装置300は,アクティブ状態に遷移したストレージ装置200内のキャッシュのデータをバックアップする。このときも、ストレージ装置200内のキャッシュのデータは、非同期コピーによってストレージ装置300にバックアップされる。
このように、図2に示すストレージシステムでは、ストレージ装置100,200,300が正常に動作しているとき、キャッシュのデータに対応するバックアップデータが二重に記憶され、これによってキャッシュのデータが失われるリスクが低減されている。また、遠隔地に配置されたストレージ装置300に同期コピーによってデータをバックアップした場合、RTTが増大してホスト装置400に対する応答速度が大きく低下してしまう。しかし、図2のストレージシステムによれば、ストレージ装置300には非同期コピーによってデータがバックアップされるので、このような応答速度の低下を防止できる。換言すると、ホスト装置400に対する応答性能を落とさずに、ストレージ装置300を遠隔地に配置することができるので、例えば、影響が広範囲に及ぶ大きな災害が発生した場合にデータが失われるリスクを低減できる。
図3は、CMのハードウェア構成例を示す図である。この図3では、CM110を例示する。
CM110は、プロセッサ111、RAM112、SSD(Solid State Drive)113、ホストインタフェース114、ドライブインタフェース115およびリモートアダプタ116,117を有する。これらの構成要素は、バス118を介して接続されている。
プロセッサ111は、CM110全体を統括的に制御する。プロセッサ111は、マルチプロセッサであってもよい。プロセッサ111は、例えば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、またはPLD(Programmable Logic Device)である。また、プロセッサ111は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
RAM112は、CM110の主記憶装置として使用される。RAM112には、プロセッサ111に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM112には、プロセッサ111による処理に必要な各種データが格納される。
SSD113は、CM110の補助記憶装置として使用される。SSD113には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、HDDなどの他の種類の記憶装置が用いられてもよい。
ホストインタフェース114は、ホスト装置400と通信するためのインタフェースである。ドライブインタフェース115は、ドライブ部120内の記憶装置と通信するためのインタフェースである。ドライブインタフェース115は、例えば、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)インタフェースである。リモートアダプタ116は、ストレージ装置200と通信するためのインタフェースであり、リモートアダプタ117は、ストレージ装置300と通信するためのインタフェースである。
以上のハードウェア構成によってCM110の処理機能が実現される。なお、CM110a,210,210a,310,310aについても、図3と同様のハードウェア構成によって実現される。
図4は、各CMが備える処理機能の構成例を示すブロック図である。
まず、CM110は、制御部130、キャッシュ140、バッファ150および管理情報記憶部160を有する。制御部130の処理は、プロセッサ111が所定のプログラムを実行することで実現される。キャッシュ140およびバッファ150は、RAM112の記憶領域の一部によって実現される。管理情報記憶部160は、RAM112またはSSD113の記憶領域の一部によって実現される。
制御部130は、ホスト装置400からの要求に応じた論理ボリュームに対するアクセスを、キャッシュ140を用いて制御する。例えば、制御部130は、論理ボリュームに対するアクセスを、ライトバック方式を用いて制御する。また、制御部130は、キャッシュ140に書き込んだデータのCM210,310に対するコピー処理を実行する。制御部130は、CM210に対しては同期コピーを行い、CM310に対しては非同期コピーを行う。
例えば、ライトバック方式が用いられる場合、制御部130は、論理ボリュームに対するライト要求を受けると、ライトが要求されたデータ(ライトデータ)をキャッシュ140に格納する。これとともに、制御部130は、ライトデータをCM210に送信し、CM210のキャッシュ(後述するキャッシュ240)にも格納する。制御部130は、以上の処理が完了すると、ホスト装置400にライト完了通知を送信する。制御部130は、その後の非同期のタイミングで、キャッシュ140に格納されたライトデータをドライブ部120内の記憶装置に書き込む。さらに、制御部130は、ライト完了通知の送信後の非同期のタイミングで、キャッシュ140に格納されたライトデータをCM310に送信し、CM310のキャッシュ(後述するキャッシュ340)に書き込む。
キャッシュ140には、ホスト装置400からのアクセス対象の論理ボリュームに含まれる少なくとも一部のデータが、一時的に格納される。バッファ150には、キャッシュ140からCM210,310に転送されるライトデータが一時的に格納される。バッファ150は、複数の分割領域に区分されており、書き込みの順序性を保ったまま非同期コピーを実行するために利用される。
管理情報記憶部160には、コピー処理で参照される各種の情報が格納される。例えば、管理情報記憶部160には、バッファ150の各分割領域に対応する制御情報領域が設定される。制御情報領域には、キャッシュ240に格納した各ライトデータに対応するライト制御情報が登録される。ライト制御情報は、ライトデータの書き込み先を示す情報であり、論理ボリュームを識別するLUN(Logical Unit Number)、論理ボリュームにおける書き込み先の先頭アドレスを示すLBA(Logical Block Address)、データ長をブロック単位で示すブロックカウントを含む。このようなライト制御情報は、ライトデータをキャッシュ140への格納後の非同期のタイミングでバッファ150に格納するために利用される。
なお、図示しないが、CM110aもCM110と同様の処理機能を備える。ただし、後述するバッファの世代管理などのリモートコピー処理全体の制御に関しては、CM110はマスタとして動作し、CM110aはスレーブとして動作する。
CM210は、制御部230、キャッシュ240、バッファ250および管理情報記憶部260を有する。制御部230の処理は、CM210が備えるプロセッサが所定のプログラムを実行することで実現される。キャッシュ240およびバッファ250は、CM210が備えるRAMの記憶領域の一部によって実現される。管理情報記憶部260は、CMが備えるRAMまたはSSDの記憶領域の一部によって実現される。
制御部230は、ストレージ装置100が運用状態のとき、CM110から転送されるライトデータをキャッシュ240に格納する処理を実行する。このとき、制御部230は、キャッシュ240に格納したライトデータについてのライト制御情報を管理情報記憶部260に登録する。登録されたライト制御情報は、フェイルオーバ後に、キャッシュ240に格納されたライトデータのうち、CM310のキャッシュに格納されていないライトデータをCM310に送信するために利用される。
また、障害発生によりストレージ装置100が停止して、ストレージ装置200がアクティブ状態に遷移すると(フェイルオーバ)、制御部230は、論理ボリュームに対するアクセス制御をCM110の制御部130から引き継ぐ。このとき、制御部230は、ホスト装置400からの要求に応じた論理ボリュームに対するアクセスを、キャッシュ240を用いて制御する。これとともに、制御部230は、キャッシュ240のライトデータを非同期でCM310のキャッシュにコピーする非同期コピー処理を実行する。
バッファ250には、ストレージ装置200がアクティブ状態のとき、キャッシュ240からCM310に転送されるライトデータが一時的に格納される。管理情報記憶部260には、コピー処理で参照される各種の情報が格納される。
なお、図示しないが、CM210aもCM210と同様の処理機能を備える。
CM310は、制御部330、キャッシュ340、バッファ350および管理情報記憶部360を有する。制御部330の処理は、CM310が備えるプロセッサが所定のプログラムを実行することで実現される。キャッシュ340およびバッファ350は、CM310が備えるRAMの記憶領域の一部によって実現される。管理情報記憶部360は、CMが備えるRAMまたはSSDの記憶領域の一部によって実現される。
制御部330は、CM110,210のうち運用状態のCMから転送されたライトデータを、キャッシュ340に格納する。キャッシュ340には、CM110のキャッシュ140またはCM210のキャッシュ240に格納されたライトデータに対応するコピーデータが格納される。バッファ350には、CM110またはCM210から転送されたライトデータが一時的に格納される。管理情報記憶部360には、コピー処理、すなわち受信したライトデータをキャッシュ340に格納する処理において参照される各種の情報が格納される。
なお、図示しないが、CM310aもCM310と同様の処理機能を備える。
次に、上記のストレージシステムで実行される非同期コピー処理について説明する。本実施の形態では、ストレージ装置100がアクティブ状態のとき、ストレージ装置100とストレージ装置300との間において、順序性が保証された非同期コピーが実行される。
図5は、非同期コピーの基本的な処理手順を説明するための図である。なお、図5では、ストレージ装置100とストレージ装置200との間の同期コピーに関する処理については省略している。
ストレージ装置100がアクティブ状態のとき、ストレージ装置100は非同期コピーにおけるコピー元装置となり、ストレージ装置300が非同期コピーにおけるコピー先装置となる。前述のように、ストレージ装置100のCM110は、コピー元となるキャッシュ140と、非同期コピーの際に利用されるバッファ150を備える。ストレージ装置100のCM110aも同様に、コピー元となるキャッシュ140aと、非同期コピーの際に利用されるバッファ150aを備える。
また、前述のように、ストレージ装置300のCM310は、コピー先となるキャッシュ340と、非同期コピーの際に利用されるバッファ350を備える。ストレージ装置300のCM310aも同様に、コピー先となるキャッシュ340aと、非同期コピーの際に利用されるバッファ350aを備える。
バッファ150,150a,350,350aは、それぞれ同数の分割領域に区分されている。図5において、各分割領域に記載された数字は、各分割領域のID(Identification)を示す。以下の説明では、IDが「xxxx」の分割領域を「分割領域(xxxx)」と表記する。
非同期コピー処理においては、バッファ150,150a,350,350aのそれぞれから分割領域が1つずつ選択され、選択された分割領域が、ホスト装置400から同一期間に書き込まれたライトデータの格納に利用される。そこで、以下の説明では、各分割領域を「世代」という概念で識別する場合がある。図5の例では、分割領域(0000),(0100),(2000),(2100)が同一世代に属する。また、分割領域(0001),(0101),(2001),(2101)が同一世代に属する。また、分割領域(0002),(0102),(2002),(2102)が同一世代に属する。また、分割領域(0003),(0103),(2003),(2103)が同一世代に属する。また、同一世代に属する分割領域の組み合わせを「バッファセット」と呼ぶ。
CM110は、ホスト装置400からライト要求を受信すると、ホスト装置400から送信されたライトデータをキャッシュ140に書き込み(ステップS11a)、ホスト装置にライト完了通知を送信する。CM110aも同様に、ホスト装置400から送信されたライトデータをキャッシュ140aに書き込み(ステップS11b)、ホスト装置400にライト完了通知を送信する。
CM110は、キャッシュ140への書き込みとは非同期のタイミングで、キャッシュ140に書き込まれたライトデータを分割領域(0000)に格納(コピー)する(ステップS12a)。CM110aも同様に、キャッシュ140aへの書き込みとは非同期のタイミングで、キャッシュ140aに書き込まれたライトデータを分割領域(0100)に格納(コピー)する(ステップS12b)。
その後、コピー元のストレージ装置100では、分割領域(0000),(0100)の少なくとも一方の残容量がなくなるか、または一定時間が経過すると、バッファセットの切り替えが行われる。バッファセットの切り替えとは、ライトデータの格納先とする分割領域を切り替えることを指す。バッファセットの切り替え発生により、キャッシュ140,140aに書き込まれたライトデータの格納先は、次世代のバッファセットに属する分割領域(0001),(0101)にそれぞれ切り替えられる。これとともに、前世代のバッファセットに属する分割領域(0000),(0100)は、コピー先装置への転送の対象となる。
CM110は、分割領域(0000)の残容量がなくなるか、または一定時間が経過すると、分割領域(0000)に格納されたライトデータをまとめてCM310に転送する(ステップS13a)。CM110aも同様に、分割領域(0100)に格納されたライトデータをまとめてCM310aに転送する(ステップS13b)。
CM310は、CM110から受信したライトデータを分割領域(2000)に一時的に格納し、すべてのライトデータが格納されると、分割領域(2000)に格納されたライトデータをキャッシュ340に書き込む(ステップS14a)。CM310aも同様に、CM110aから受信したライトデータを分割領域(2100)に一時的に格納し、すべてのライトデータが格納されると、分割領域(2100)に格納されたライトデータをキャッシュ340aに書き込む(ステップS14b)。以下、バッファ350,350aからキャッシュ340,340aへの書き込みを「展開」と呼ぶ。
分割領域(2000),(2100)に格納されたデータの展開が完了すると、分割領域(0000),(0100),(2000),(2100)が属するバッファセットは未使用領域に戻される。このように分割領域が未使用領域に戻されることを「解放」と呼ぶ。
以上のように、コピー用のバッファを用い、バッファセット単位で装置間のライトデータの転送およびバッファからキャッシュへのライトデータの展開を行うことで、バッファセット単位での書き込みの順序性が保証される。
ところで、前述のように、ストレージ装置100に障害が発生した場合には、ホスト装置400からの要求に応じたアクセス制御をストレージ装置200が引き継ぐ(フェイルオーバ)。ここで、ストレージ装置100とストレージ装置200との間では、同期コピーにより常に同じデータがキャッシュに保持されており、ストレージ装置100に障害が発生した場合でもこの点に変わりはない。一方、ストレージ装置100とストレージ装置300との間で非同期コピーによるデータの転送中にストレージ装置100に障害が発生すると、ストレージ装置200とストレージ装置300との間ではキャッシュのデータが等価にならない。このため、フェイルオーバの際に、ストレージ装置200とストレージ装置300との間でキャッシュの等価性を保ちつつ、ホスト装置400からの要求に応じたアクセス制御を短時間で再開することが、このストレージシステムでの1つの課題となる。
本実施の形態では、同期コピー先のストレージ装置200において、コピー元からのライトデータをキャッシュ240に書き込むとともに、そのライトデータを示すライト制御情報を管理情報記憶部に記憶しておく。また、バッファセットの切り替えおよび解放の処理をストレージ装置100,200,300で同期させ、ストレージ装置200が切り替え前、切り替え後かつ未解放のそれぞれのバッファセットに対応するライト制御情報を識別できるようにする。
そして、ストレージ装置100に障害が発生したとき、ストレージ装置200は、未解放のバッファセットに対応するライト制御情報に基づいて、そのライト制御情報に対応するライトデータをキャッシュから読み出し、ストレージ装置300に転送する。ストレージ装置300は、転送されたライトデータをキャッシュに書き込む。これにより、ストレージ装置200とストレージ装置300との間でキャッシュのデータを等価にする。その際に、ストレージ装置100からストレージ装置300への転送が完了していない可能性のあるライトデータだけが、ストレージ装置200からストレージ装置300に転送されるので、データが等価になるまでの時間が短縮される。
また、ストレージ装置200は、上記のようなキャッシュからストレージ装置300へのデータ転送をバックグラウンドで実行しながら、ホスト装置400からの要求に応じた論理ボリュームへのアクセス制御をストレージ装置100から引き継ぐ。これにより、ホスト装置400からの要求に応じたアクセス制御を短時間で再開する。
図6は、各CMの管理情報記憶部に記憶される情報を示す図である。
CM110の管理情報記憶部160には、セッション管理テーブル161、バッファセット管理テーブル162、バッファ管理テーブル163、切り替え状態情報164、格納バッファセット情報165、切り替え待ちキュー166、格納完了待ちキュー167およびコピービットマップ168が記憶される。なお、図示しないが、CM110aの管理情報記憶部にも同様の情報が記憶される。
また、CM210の管理情報記憶部260には、セッション管理テーブル261、バッファセット管理テーブル262、バッファ管理テーブル263、切り替え状態情報264、格納バッファセット情報265、切り替え待ちキュー266、格納完了待ちキュー267およびコピービットマップ268が記憶される。なお、図示しないが、CM210aの管理情報記憶部にも同様の情報が記憶される。
さらに、CM310の管理情報記憶部360には、セッション管理テーブル361、バッファセット管理テーブル362およびバッファ管理テーブル363が記憶される。なお、図示しないが、CM310aの管理情報記憶部にも同様の情報が記憶される。
セッション管理テーブル161,261,361には、ストレージ装置間で設定されるコピーセッションに関する設定情報が登録される。本実施の形態では、ストレージ装置100とストレージ装置200との間では、同期コピーセッションが設定される。また、ストレージ装置100とストレージ装置300との間では、非同期コピーセッションが設定される。さらに、ストレージ装置200とストレージ装置300との間では、非同期コピーセッションが設定される。
セッション管理テーブル161,261,361には、例えば、各コピーセッションにおける同期コピー、非同期コピーの種別、コピー元装置およびコピー先装置を示す情報、セッションステータスが登録される。セッションステータスは、コピーセッションの状態を示す情報が登録される。
ストレージ装置100が正常に運用されている状態では、CM110とCM210との間の同期コピーセッションと、CM110とCM310との間の非同期コピーセッションの各セッションステータスが「アクティブ」となる。この状態では、同期コピーと、書き込みの順序性が保証された非同期コピーとが正常に実行されている。また、CM210とCM310との間の非同期コピーセッションのセッションステータスは、起動していないことを示す「スタンバイ」となる。
フェイルオーバが発生すると、CM210とCM310との間の非同期コピーセッションのセッションステータスが、まず「コピーイング」に変更される。この状態では、CM210は、未解放のバッファセットに対応するライト制御情報に基づいて、そのライト制御情報に対応するコピー箇所をコピービットマップ268に記録する。そして、CM210は、コピービットマップ268に記録されたコピー箇所に対応するデータをキャッシュ240から読み出し、CM310に送信する。これにより、ボリュームのデータのうち、フェイルオーバの前にCM110からCM310に対して転送が済んでいなかった差分データがCM310に転送される。そして、コピービットマップ268に記録されたすべてのコピー箇所についてのデータ転送が完了すると、セッションステータスは「アクティブ」に変更される。
なお、セッションステータスが「コピーイング」の状態でホスト装置400からのライト要求を受信した場合、次のような処理が行われる。CM210は、ライトデータをキャッシュ240に書き込むとともに、ライト要求に対応するコピー箇所をコピービットマップ268に記録する。このコピー箇所はCM310への転送が済んでいないデータの位置として取り扱われ、上記のようなコピービットマップ268に基づく差分データの転送処理により、このコピー箇所に対応するデータがCM310に送信される。コピービットマップ268を用いることにより、CM210は、ライト要求を受信してライトデータをキャッシュ240に書き込む処理と、差分データをCM310に転送する処理とを並列に実行することができる。その結果、ストレージ装置100が停止してからホスト装置400からの要求に応じた書き込み制御処理が再開されるまでの時間を短縮できる。
そして、差分データの転送が完了し、セッションステータスが「アクティブ」になると、CM210とCM310との間で書き込みの順序性が保証された非同期コピーが開始される。すなわち、CM210は、CM110と同等の非同期コピーを再開する。
バッファセット管理テーブル162,262,362には、非同期コピーセッションにおいて利用されるバッファセットを示す情報が登録される。バッファ管理テーブル163,263には、バッファセット内の各分割領域に格納するライトデータを示すライト制御情報が登録される。バッファ管理テーブル363には、バッファセット内の各分割領域に格納されたライトデータを示すライト制御情報が登録される。
ここで、図7は、バッファセット管理テーブルについて説明するための図である。
CM110のバッファ150には、CM110がアクティブ状態のとき、CM110からCM310に転送されるライトデータが一時的に格納される。CM210のバッファ250には、CM210がアクティブ状態のとき、CM210からCM310に転送されるライトデータが一時的に格納される。CM310のバッファ350には、CM110またはCM210から転送されたライトデータが一時的に格納される。バッファ150,250,350は、それぞれ同数の分割領域に分割されている。なお、図7において各分割領域に記載された数字は、分割領域のIDを示す。
CM110のバッファセット管理テーブル162には、非同期コピーセッションの処理において利用されるバッファセットを示す情報が登録される。バッファセットを示す情報は、コピー元の分割領域のIDとコピー先の分割領域のIDを含む。例えば図7では、コピー元が分割領域(0000)、コピー先が分割領域(2000)の組み合わせと、コピー元が分割領域(0100)、コピー先が分割領域(2100)の組み合わせとが、同一世代のバッファセットとして登録されている。
CM210のバッファセット管理テーブル262には、非同期コピーセッションの処理において利用されるバッファセットを示す情報が登録される。例えば図7では、コピー元が分割領域(1000)、コピー先が分割領域(2000)の組み合わせと、コピー元が分割領域(1100)、コピー先が分割領域(2100)の組み合わせとが、同一世代のバッファセットとして登録されている。
バッファセット管理テーブル162とバッファセット管理テーブル262との間では、コピー先として同じIDの分割領域が登録されたバッファセットが登録されており、このようなバッファセットが同一世代のバッファセットとして利用される。このような情報登録方法によれば、CM110からCM210に対してコピー先の分割領域のIDを送信することで、世代を通知できる。これにより、CM110とCM210との間で世代(バッファセット)の切り替えや解放の処理を同期させることができる。
なお、図示しないが、CM110aの管理情報記憶部にも、バッファセット管理テーブル162と同一の情報が登録されたバッファセット管理テーブルが保持される。また、CM210aの管理情報記憶部にも、バッファセット管理テーブル262と同一の情報が登録されたバッファセット管理テーブルが保持される。
図8は、バッファ管理テーブルの構成例を示す図である。図8では、CM110のバッファ管理テーブル163を例示している。
バッファ管理テーブル163は、制御情報領域163a〜163dに区分されている。制御情報領域163a,163b,163c,163dは、バッファ150の分割領域(0000),(0001),(0002),(0003)にそれぞれ対応付けられている。制御情報領域163a〜163dのそれぞれには、対応する分割領域に格納するライトデータを示すライト制御情報163−1が、格納状態情報163−2を付加した状態で登録される。
ライト制御情報163−1は、対応するライトデータをキャッシュ140からバッファ150内の対応する分割領域に格納するために参照される。格納状態情報163−2は、ライト制御情報163−1に対応するライトデータがキャッシュ140からバッファ150に対して格納済みか否かを示すフラグ情報である。ライト制御情報163−1が制御情報領域に登録されたとき、「未格納」を示す格納状態情報163−2がライト制御情報163−1に付加される。
CM210のバッファ管理テーブル263も、CM110のバッファ管理テーブル163と同様に、バッファ250の各分割領域に対応する制御情報領域に区分されている。バッファ管理テーブル263の制御情報領域には、バッファ管理テーブル163における同じ世代の制御情報領域と同じライト制御情報が、格納状態情報を付加した状態で登録される。CM110がアクティブ状態、CM210がスタンバイ状態のとき、制御情報領域に登録されたライト制御情報は、フェイルオーバした場合に、対応するライトデータをキャッシュ240からCM310に転送するために参照される。一方、CM210がアクティブ状態に遷移した後に制御情報領域に登録されたライト制御情報は、対応するライトデータをキャッシュ240からバッファ150内の対応する分割領域に格納するために参照される。
CM310のバッファ管理テーブル363も、CM110のバッファ管理テーブル163と同様に、バッファ350の各分割領域に対応する制御情報領域に区分されている。バッファ管理テーブル363の制御情報領域には、対応する分割領域に格納されたライトデータを示すライト制御情報が登録される。ライト制御情報は、対応するライトデータをバッファ350内の対応する分割領域からキャッシュ340に格納する(展開する)ために参照される。
以下、図6に戻って説明を続ける。
切り替え状態情報164,264は、バッファセットの切り替え処理が実行中か否かを示す情報である。切り替え状態情報164は、CM110がアクティブ状態の場合に利用され、切り替え状態情報264は、CM210がアクティブ状態の場合に利用される。
格納バッファセット情報165,265は、現在格納予約対象となっているバッファセットを示す情報である。「格納予約」とは、バッファの分割領域に格納すべきライトデータを示すライト制御情報を、その分割領域に対応する、バッファ管理テーブルの制御情報領域に登録することを指す。格納バッファセット情報165,265が示すバッファセットは、それぞれバッファ150,250に含まれる分割領域に対応付けられている。なお、CM110のバッファ150を例に示すと、本実施の形態では、格納予約対象となるバッファセットは、分割領域(0000),(0001),(0002),(0003),(0000),・・・の順で切り替えられる。
切り替え待ちキュー166,266は、切り替え処理の実行中にホスト装置400からライト要求を受信した場合に、切り替え処理が完了するまでの間、そのライト要求を示すライト制御情報を一時的に保持するためのFIFO(First In First Out)方式のキューである。切り替え待ちキュー166は、CM110がアクティブ状態の場合に利用され、切り替え待ちキュー266は、CM210がアクティブ状態の場合に利用される。
格納完了待ちキュー167,267は、ライト制御情報を一時的に保持するキューである。格納完了待ちキュー167,267には、ホスト装置400からライト要求を受信したとき、書き込み先領域と重複する領域に対して以前の世代でライトが要求され、かつバッファへの格納が済んでないライトデータがある場合に、格納が完了するまで受信したライト要求を示すライト制御情報を一時的に保持する。格納完了待ちキュー167は、CM110がアクティブ状態の場合に利用され、格納完了待ちキュー267は、CM210がアクティブ状態の場合に利用される。
コピービットマップ268は、フェイルオーバしてCM210がアクティブ状態に遷移したときに、未解放のバッファセットのライトデータをキャッシュ240からCM310に転送するために利用される。コピービットマップ268は、論理ボリューム内のコピー処理単位のブロックごとのビットを有する。ビットに対応するブロックについて転送すべきライトデータがある場合、そのビットに「1」が設定される。このコピービットマップ268を用いることで、フェイルオーバの際にキャッシュ240,340のデータを等価にする場合に、差分データのみをキャッシュ240からCM310に転送できるようになる。
コピービットマップ168は、フェイルバック後にCM110の動作を再開させる際に、コピービットマップ268と同様の用途で使用される。
次に、図9〜図12を用いて、ストレージ装置100が正常に動作している状態(アクティブ状態)でのコピー処理の概要を説明する。
まず、図9は、ホスト装置からのライト要求に応じたライトI/O(Input/Output)処理例を示す図である。
図9に示すように、初期状態では、ホスト装置400はライト要求をCM110に送信する。また、バッファ150の分割領域(0000)およびバッファ250の分割領域(1000)が、格納対象に設定されているとする。すなわち、分割領域(0000),(1000)が、現世代のバッファセットに属している。
CM110は、ホスト装置400からライト要求およびライトデータを受信すると(ステップS11a)、ライトデータをキャッシュ140に格納するとともに、ライトデータをCM210に送信する(ステップS11b)。送信されたライトデータは、CM210のキャッシュ240に格納される。
また、CM110は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル163の制御情報領域のうち、分割領域(0000)に対応する制御情報領域に登録する(ステップS12a)。このとき、ライト制御情報には「未格納」を示す格納状態情報が付加される。CM220は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル263の制御情報領域のうち、分割領域(1000)に対応する制御情報領域に登録する(ステップS12b)。
以上の処理が完了すると、CM110は、ホスト装置400にライト完了通知を送信する。このようにしてCM110とCM210との間での同期コピーが実現され、キャッシュ140,240にそれぞれ書き込まれたデータは常に等価となる。これとともに、CM110,210において、バッファ管理テーブルへのライト制御情報の登録、すなわちバッファ格納のための格納予約が行われる。
CM110では、キャッシュ140へのライトデータの書き込みとは非同期のタイミングで、次のような処理が実行される。CM110は、非同期コピーセッションの処理として、ステップS12aで登録したライト制御情報に基づいて、キャッシュ140に書き込まれたライトデータをバッファ150の分割領域(0000)に格納(コピー)する(ステップS13)。格納が完了すると、CM110は、ライト制御情報に付加された格納状態情報を「格納済み」に更新する。このように、バッファ150への格納処理がキャッシュ140への書き込み処理とは非同期で実行されることで、ホスト装置400からのライト要求に対する応答時間を短縮できる。
一方、CM210では、バッファ250へのライトデータの格納は行われない。すなわち、CM210がスタンバイの状態では、バッファ250は使用されず、バッファ250の領域をCM210のRAMに確保しておく必要がない。
なお、図示しないが、ホスト装置400はCM110aに対してもライト要求を送信できる。このライト要求に応じて、CM110a,210aは、それぞれCM110,210と同様の処理を実行する。
図10は、バッファセットの切り替え処理例を示す図である。
図9の処理が継続されると、バッファ150の分割領域(0000)に格納すべきライトデータが増加していく。そして、CM110は、ホスト装置400からデータのライト要求を受信したとき(ステップS21)に、分割領域(0000)に空き領域がなく、そのデータを格納できないと判定したとする。なお、この判定は、バッファ管理テーブル163の分割領域(0000)に対応する制御情報領域に登録されたライト制御情報に基づいて行われる。
このとき、CM110は、CM210に対してバッファセットの切り替えを通知する(ステップS22)。これにより、これ以後にホスト装置400から受信したライトデータの格納先となる分割領域が、CM110とCM210とで同期して切り替えられる。換言すると、バッファセットの世代がCM110とCM210とで同期して切り替えられる。
切り替え通知の後、ステップS21で受信されたライトデータは、キャッシュ140に格納されるとともに、CM210に送信されてキャッシュ240に格納される(ステップS23)。また、切り替え前とは異なり、CM110は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル163の制御情報領域のうち、分割領域(0001)に対応する制御情報領域に登録する(ステップS24a)。このとき、ライト制御情報には「未格納」を示す格納状態情報が付加される。また、CM220は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル263の制御情報領域のうち、分割領域(1001)に対応する制御情報領域に登録する(ステップS24b)。以上の処理が完了すると、CM110は、ホスト装置400にライト完了通知を送信する。
また、CM110は、上記とは非同期のタイミングで、ステップS24aで登録したライト制御情報に基づいて、キャッシュ140に書き込まれたライトデータをバッファ150の分割領域(0001)に格納(コピー)する(ステップS25)。格納が完了すると、CM110は、ライト制御情報に付加された格納状態情報を「格納済み」に更新する。
このようにして、ライトデータの格納予約先となる分割領域が切り替えられる。また、バッファセットの切り替え通知はCM110a,210aにも通知され、CM110a,210aでもデータの格納予約先となる分割領域が切り替えられる。これにより、データの格納予約先のバッファセットの世代が、ストレージ装置100,200との間で同期して切り替えられる。
なお、図10の処理において、CM110がホスト装置400からのライトデータをキャッシュ140に格納する際に、そのライトデータと書き込み先が重複する、以前の世代における古いライトデータについて、バッファ150への格納が済んでない場合がある。この場合、CM110は、新たなライトデータのキャッシュ140への格納を保留して、そのライトデータを示すライト制御情報を格納完了待ちキュー167に登録する。これにより、新たなライトデータによるライトI/O処理は待ち状態となる。その後、古いライトデータのバッファ150への格納が完了すると、CM110は、格納完了待ちキュー167からライト制御情報を読み出して、そのライト制御情報に基づいてライトデータをキャッシュ140に格納し、ライト制御情報をバッファ管理テーブル163の制御情報領域に登録する。このような処理により、世代間でライトデータの書き込みの順序性を正確に保つことができる。
一方、前世代のバッファセットについては、次の図11に示す処理が実行される。
図11は、ライトデータの転送およびバッファセットの展開処理例を示す図である。
CM110は、切り替えの発生前までにキャッシュ140に書き込まれたすべてのデータがバッファ150の分割領域(0000)に格納されると、分割領域(0000)内のデータをCM310に転送する(ステップS31)。すなわち、CM110は、分割領域単位でデータをまとめてCM310に転送する。このとき、CM110は、バッファ350における格納先の分割領域のID「2000」を、ライトデータとともに転送する。CM310は、受信したライトデータをバッファ350の分割領域(2000)に一時的に格納するとともに、そのライトデータを示すライト制御情報を、バッファ管理テーブル363における分割領域(2000)に対応する制御情報領域に登録する。これらの処理が完了すると、CM310は、分割領域(2000)に格納されたライトデータをキャッシュ340に書き込む(ステップS32)。すなわち、バッファ350内のライトデータがキャッシュ340に展開される。
なお、実際には、CM110とCM310との間だけでなく、CM110aとCM310aとの間でも、上記の処理が実行される。すなわち、CM110aのバッファからライトデータが転送され、CM310aのバッファに一旦格納された後、CM310aのキャッシュに展開される。
また、上記の転送および展開処理と並行して、CM110によるライトI/O処理が継続される。すなわち、CM110は、ホスト装置400からライト要求およびライトデータを受信すると(ステップS33a)、ライトデータをキャッシュ140に格納するとともに、ライトデータをCM210に送信する(ステップS33b)。送信されたライトデータは、CM210のキャッシュ240に格納される。
また、CM110は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル163の制御情報領域のうち、分割領域(0001)に対応する制御情報領域に登録する(ステップS34a)。一方、CM210は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル263の制御情報領域のうち、分割領域(1001)に対応する制御情報領域に登録する(ステップS34b)。
以上の処理が完了すると、CM110は、ホスト装置400にライト完了通知を送信する。また、CM110は、その後の非同期のタイミングで、制御情報領域に登録したライト制御情報に基づいて、対応するライトデータをバッファ150の分割領域(0001)に格納する(ステップS35)。
図12は、バッファセットの解放処理例を示す図である。分割領域(2000)に格納された全ライトデータについて図11のステップS32に示した展開処理が完了すると、図12に示すような処理が実行される。
CM310は、バッファセットの解放をCM110に通知する(ステップS41a)。通知を受けたCM310は、バッファセットの解放をCM210に通知する(ステップS41b)。CM310は、分割領域(2000)を解放し(ステップS42a)、解放通知を受けたCM110,210も、それぞれ分割領域(0000),(1000)を解放する(ステップS42b,42c)。分割領域の解放とは、分割領域を未使用の空き領域に戻すことである。上記処理により、同じ世代のバッファセットに属する分割領域(0000),(1000),(2000)が同期して解放される。
なお、実際の処理では、CM310だけでなく、CM310aでもキャッシュへの展開が完了した場合に、バッファセットの解放が通知される。解放通知は、CM310からCM310a、CM110からCM110a、CM210からCM210aにそれぞれ送信され、これによってCM310a,110a,210aでも同じ世代のバッファセットに属する分割領域が解放される。
以上の図9〜図12に示した処理により、CM110とCM210との間で同期コピーが実行されるとともに、CM110とCM310との間で非同期コピーが実行される。また、CM110,210,310の間でバッファセットの解放が同期して行われる。そして、CM210では、バッファセットが解放されるまでの間、そのバッファセットの世代においてキャッシュ240に書き込まれたライトデータを示すライト制御情報が、バッファ管理テーブル263に保持される。このようにしてバッファ管理テーブル263に保持されたライト制御情報は、CM110からCM310へのデータ転送中にフェイルオーバが発生した場合に、CM210とCM310との間でキャッシュのデータの整合をとるために使用される。
図13は、フェイルオーバが発生した場合の処理例を示す図である。図13では、図11のようにバッファ150の分割領域(0000)からバッファ350の分割領域(2000)へデータが転送されている途中で、ストレージ装置100の動作が停止した場合の処理例を示す。
ストレージ装置100の動作が停止すると、ホスト装置400が備えるアクセス先制御機能により、ホスト装置400からの書き込みの要求先は、ストレージ装置100からストレージ装置200へ自動的に変更される。このとき、ホスト装置400が認識する論理的な書き込み先ボリュームが変更されることなく、物理的な書き込み先が変更される。
また、ストレージ装置200は、ストレージ装置300との間に設定されていた非同期コピーセッションのセッションステータスを「コピーイング」に変更し、ホスト装置400からのライト要求の受信を開始する。このとき、ライト要求に応じた処理と並行して、前世代のバッファセット、すなわち分割領域(1000),(2000)に関する次のような処理が、バックグラウンドで実行される。
ストレージ装置100の動作が停止した時点では、バッファ管理テーブル263における分割領域(1000)に対応する制御情報領域に、ライト制御情報が登録されている。これらのライト制御情報に対応するライトデータは、CM110からCM310に対する転送が完了していない可能性があるデータである。そこで、CM210は、これらのライト制御情報に対応するライトデータをキャッシュ240から読み出して、CM310に転送する(ステップS51)。
CM310は、転送されたライトデータをキャッシュ340に格納する。キャッシュ340への格納が完了すると、バッファセットの解放が通知され、分割領域(1000),(2000)が未使用の空き領域に戻される。
このような処理により、フェイルオーバの前に分割領域(0000)から分割領域(2000)へのデータ転送が未完了であっても、転送が未完了の可能性があるライトデータを示すライト制御情報がCM210のバッファ管理テーブル263に保持されている。このため、CM210は、保持されたライト制御情報に基づいて、転送が未完了の可能性があるライトデータをキャッシュ240から読み出し、CM310に転送することができる。これによって、キャッシュ240,340の各データを等価にすることができる。
また、CM210は、保持されたライト制御情報に基づいて、キャッシュ240に格納されているライトデータのうち、CM310に転送されていない可能性のある差分データだけを抽出して、CM310に転送することができる。これにより、キャッシュ240,340の各データを等価にするためにCM210からCM310に転送されるデータ量を抑制でき、キャッシュ240,340の各データが等価になるまでの時間を短縮できる。
一方、このような処理と並行して、CM210は、ホスト装置400からのライト要求に応じた処理を実行する。CM210は、ホスト装置400からライト要求を受け付けると、ホスト装置400から受信したライトデータをキャッシュ240に書き込み、ホスト装置400に書き込み完了通知を送信する(ステップS52)。また、CM210はその後、キャッシュ240に書き込んだライトデータをCM310に転送する(ステップS53)。CM310は、転送されたライトデータをキャッシュ340に格納する。
このように、フェイルオーバ時点でCM110からCM310への転送が未完了の可能性があるライトデータのCM310への転送処理と、ホスト装置400からのライト要求に応じた処理とが、並列に実行される。これにより、ストレージ装置100の動作が停止したとき、CM210は、ホスト装置400からのライト要求に応じたアクセス制御を短時間で引き継ぐことができるとともに、そのバックグラウンドで、前世代のバッファセットに関する残りの処理を実行できる。
なお、実際の処理では、上記の処理はコピービットマップ268を用いて実行される。フェイルオーバが発生すると、CM210は、コピービットマップ268のビットのうち、バッファ管理テーブル263の制御情報領域に登録されているライト制御情報に対応するビットを「1」にする。これにより、キャッシュ240からCM310にコピーすべきライトデータの位置がコピービットマップ268に記録される。CM210は、キャッシュ240のライトデータのうち、コピービットマップ268においてビット値が「1」とされたビットが示すライトデータを、キャッシュ240から読み出してCM310に転送する(ステップS51の処理に対応)。CM210は、コピービットマップ268の全ビットが「0」になるまで、コピービットマップ268に基づくデータ転送を実行する。
一方、CM210は、ホスト装置400からライト要求を受信し、ライトデータをキャッシュ240に書き込んだとき、コピービットマップ268のビットのうち、ライトデータの書き込み先に対応するビットも「1」にする。上記のように、CM210は、コピービットマップ268の全ビットが「0」になるまでコピービットマップ268に基づくデータ転送を実行する。このため、ライト要求に応じてキャッシュ240に書き込まれたライトデータも、コピービットマップ268に基づいてキャッシュ240からCM310に転送される。
このように、実際には、コピービットマップ268に基づくCM310へのデータ転送処理と、ホスト装置400からのライト要求に応じたライトデータの書き込みおよびコピービットマップ268の更新の処理とが、並列に実行される。これにより、ストレージ装置100の動作が停止したとき、CM210は、ホスト装置400からのライト要求に応じたアクセス制御を時間を空けずに引き継ぐことができる。
そして、コピービットマップ268の全ビットが「0」になると、CM210は、CM310との間の非同期コピーセッションのセッションステータスを「アクティブ」にする。これにより、CM110と同等の非同期コピーがCM210で再開される。すなわち、CM210は、ホスト装置400からのライト要求を受け付けつつ、書き込みの順序性が保証された非同期コピーを実行する。
図13の例では、CM210は、セッションステータスが「アクティブ」になった後にライト要求を受信すると、ライトデータをキャッシュ240に書き込む。これとともに、CM210は、ライトデータの書き込み先を示すライト制御情報を、バッファ管理テーブル263の制御情報領域のうち、分割領域(1001)に対応する制御情報領域に登録する。以上の処理が完了すると、CM210は、ホスト装置400にライト完了通知を送信する。
また、その後の非同期のタイミングにおいて、CM210は、制御情報領域に登録したライト制御情報に基づいて、キャッシュ240に書き込まれたライトデータをバッファ250の分割領域(1001)に格納(コピー)する。そして、バッファセットの切り替えが行われた後、CM210は、分割領域(1001)に格納されたライトデータをCM310に転送する。転送されたライトデータは、バッファ350の分割領域(2001)を介してキャッシュ340に格納される。
このような処理により、セッションステータスが「アクティブ」のとき、CM210は、フェイルオーバ前のCM110と同等の非同期コピーを実行できる。
なお、CM210aとCM310aとの間でも、上記と同様の処理が実行される。
ところで、特許文献1に記載された処理によれば、CM110がアクティブ状態である間に、CM210とCM310との通信が発生する。例えば、特許文献1では、CM110でバッファ150に対してライトデータが格納される際(例えば、図9のステップS13に対応)に、CM210でもバッファ250に対してライトデータが格納される。また、CM110から転送されたライトデータがCM310のバッファ350に格納されたとき、CM210からCM310に対してライト制御情報が送信される。CM310では、受信したライト制御情報を用いて、バッファ350に格納されたライトデータの照合が行われる。この照合によりCM110,210,310の同世代のバッファセットのデータ一致が確認されると、ライトデータがCM310のキャッシュ340に展開され、バッファセットの解放が通知される。この解放通知は、CM310からCM110に対してだけでなく、CM310からCM210へも直接送信される。
これに対して、図9〜図12に示したように、本実施の形態では、CM110がアクティブ状態である間、CM210とCM310との間の通信は一切行われない。このため、CM110がアクティブの状態におけるCM間の通信量を削減できる。特に、CM310はCM110,210に対して遠隔地に設定される場合が多く、CM110,210とCM310との間の通信路における通信料金が割高になる場合が多い。本実施の形態では、CM210とCM310との間の通信が一切行われなくなることで、必要な通信料金を削減できる。
また、本実施の形態では、CM310においてバッファ350に格納されたライトデータをキャッシュ340に展開する際に、CM210からの送信情報を待つ必要がなく、その送信情報に基づく照合処理も行われない。そのため、バッファ150からバッファ350へのデータ転送を開始してから、キャッシュ340へのデータ展開を行い、バッファセットが解放されるまでの時間を短縮できる。このような転送・展開・解放の処理時間の短縮により、次のような効果も得られる。
図10のようにバッファセットの切り替えが行われる際に、バッファ150に空き分割領域がない場合には、分割領域(0001)が解放されるまで待ち状態となり、切り替え処理は一時停止される。上記のように分割領域(0001)が解放されるまでの時間が短縮されることで、切り替え処理が再開されるまでの時間も短縮される。その結果、切り替えにかかる全体の処理時間を短縮できる。
また、図10のケースのように、ホスト装置400からのライト要求を受信したときに、格納予約対象の分割領域(0000)の空きがないことから切り替えが必要となった場合には、ライト要求に対応するライト制御情報が切り替え待ちキュー166に登録される。そして、切り替えが完了するまでライト要求に応じたライトI/O処理が一時停止される。この場合、上記のように、切り替え処理時間が短縮されることで、ライトI/O処理が再開されるまでの時間も短縮される。その結果、ホスト装置400からのライト要求に対する応答時間を短縮できる。
次に、ストレージシステムにおける処理手順をシーケンス図およびフローチャートを用いて説明する。
まず、図14〜図17を用いて、ストレージ装置100,200,300が正常に動作しており、ストレージ装置100がアクティブ状態、ストレージ装置200がスタンバイ状態である場合の処理を説明する。
図14は、ライトI/O処理の手順を示すシーケンス図の例である。
CM110の制御部130は、ホスト装置400からライト要求およびライトデータを受信する(ステップS101)。制御部130は、切り替え状態情報164を参照して、現在バッファセットの切り替え処理を実行中かを判定する(ステップS102)。ステップS102で実行中であると判定された場合、制御部130は、ライト要求を示すライト制御情報を切り替え待ちキュー166に登録し(ステップS103)、ライトI/O処理を終了する。このとき、ライトデータはRAM112に一時的に保持される。後述するように、切り替え処理が完了すると、切り替え待ちキュー166からライト制御情報が取り出される。そして、このライト制御情報および対応するライトデータについて、ステップS102以降の処理が実行される(図15のステップS130に対応)。
一方、ステップS102で切り替え処理が実行中でないと判定された場合、制御部130は、バッファ150における格納先の分割領域(ここでは例として、分割領域(0001)とする)に、受信したライトデータを格納できるだけの空き領域があるかを判定する(ステップS104)。この判定では、制御部130は、バッファ管理テーブル163における分割領域(0001)に対応する制御情報領域に登録されたライト制御情報に基づいて、対応するライトデータの合計サイズを算出する。制御部130は、算出された合計サイズに受信したライトデータのサイズを加算した値が、分割領域のサイズより大きい場合に、空き領域がないと判定する。
ステップS104で空き領域がないと判定された場合、制御部130は、ライト要求を示すライト制御情報を切り替え待ちキュー166に登録し、バッファセットの切り替え処理を起動する(ステップS105)。これにより、図15に示す切り替え処理が開始される。なお、ライトデータはRAM112に一時的に保持される。また、上記と同様に、切り替え処理が完了すると、切り替え待ちキュー166からライト制御情報が取り出され、このライト制御情報および対応するライトデータについて、ステップS102以降の処理が実行される(図15のステップS130に対応)。
一方、ステップS104で空き領域があると判定された場合、制御部130は、ライトデータの書き込み先領域と重複する領域に対して以前の世代でライトが要求され、かつバッファ150に対して未格納のライトデータがあるかを判定する(ステップS106)。この判定では、制御部130は、バッファ管理テーブル163の制御情報領域のうち、現在より前の世代であり、かつ解放されていないバッファセットに対応する制御情報領域を参照する。制御部130は、参照した制御情報領域に、書き込み先領域がステップS101で受信した新たなライトデータの書き込み先と重複し、かつ、格納状態情報が「未格納」を示すライト制御情報が存在する場合に、ステップS106の条件を満たすと判定する。
この条件を満たす場合、新たなライトデータをキャッシュ140に格納してしまうと、ステップS106の条件を満たす古いライトデータの少なくとも一部が上書きされてしまう。このため、古いライトデータを以前の世代に属する分割領域に正しく残せなくなり、書き込みの順序性を維持できなくなる。そこで、ステップS106の条件を満たす場合、制御部130は、ライト要求を示すライト制御情報を格納完了待ちキュー167に登録し(ステップS107)、ライトI/O処理を終了する。このとき、新たなライトデータはRAM112に一時的に保持される。後述するように、上記の古いライトデータがバッファ150の分割領域に格納されると、格納完了待ちキュー167からライト制御情報が取り出される。そして、このライト制御情報および対応するライトデータについて、ステップS102以降の処理が実行される(図16のステップS137に対応)。
一方、ステップS106の条件を満たさない場合、制御部130は、同期コピー処理および格納予約処理を実行する。すなわち、制御部130は、受信したライトデータを示すライト制御情報を、バッファ管理テーブル163における分割領域(0001)に対応する制御情報領域に登録する(ステップS108)。また、制御部130は、ライトデータをライト制御情報とともにCM210に送信する(ステップS109)。このとき、例えば、バッファ250における格納先の分割領域(1001)を示す識別情報が、ライトデータに付加されて送信される。あるいは、分割領域の識別情報の代わりに、世代番号やバッファセットの識別番号が付加されてもよい。
CM210の制御部230は、受信したライト制御情報を、バッファ管理テーブル263における分割領域(1001)に対応する制御情報領域に登録するとともに、受信したライトデータをキャッシュ240に書き込む(ステップS110)。これらの処理が完了すると、制御部230は、CM110に完了通知を送信する(ステップS111)。
CM110の制御部130は、ライトデータをキャッシュ140に書き込む(ステップS112)。そして、制御部130は、ライト完了通知をホスト装置400に送信して、ライト要求に対する応答を行う(ステップS113)。
図15は、バッファセットの切り替え処理の手順を示すシーケンス図の例である。バッファセットの切り替え条件が満たされると、図15の処理が開始される。切り替え条件が満たされる場合とは、図14のステップS104で空き領域がないと判定された場合か、または、直近の切り替え処理が実行されてから一定時間が経過した場合である。なお、図15の処理は、図14の処理と並列に実行される。
CM110の制御部130は、切り替え状態情報164を、切り替え処理中を示すように更新する(ステップS121)。そして、制御部130は、バッファ150内の分割領域の空き状態を確認し、次のような判定を行う(ステップS122)。制御部130は、空きの分割領域(解放された分割領域)が1つもない場合、分割領域の解放完了待ち状態となる(ステップS123)。この場合、制御部130は、一定時間後にステップS121の処理を再度実行する。
ステップS121において、空きの分割領域がある場合、具体的には、次の世代に対応する分割領域が解放されている場合には、制御部130は、バッファセットを切り替える(ステップS124)。具体的には、制御部130は、格納バッファセット情報165を、次の世代のバッファセットを示すように更新する。また、制御部130は、CM210に対してバッファセットの切り替えを通知する(ステップS125)。
CM210の制御部230は、バッファセットを切り替える(ステップS126)。具体的には、制御部230は、格納バッファセット情報265を、次の世代のバッファセットを示すように更新する。そして、制御部230は、完了通知をCM110に送信する(ステップS127)。
CM110の制御部130は、切り替え状態情報164を、切り替え処理中でないことを示すように更新する(ステップS128)。そして、制御部130は、切り替え待ちキュー166にライト制御情報が登録されているかを判定する(ステップS129)。ライト制御情報が登録されている場合、制御部130は、そのライト制御情報を切り替え待ちキュー166から取り出し、そのライト制御情報について、図14のステップS102からのライトI/O処理を起動する(ステップS130)。これにより、取り出されたライト制御情報についてのライトI/O処理が再開される。なお、切り替え待ちキュー166にライト制御情報が複数登録されている場合、それらを順番に選択してライトI/O処理を起動する。一方、ステップS129でライト制御情報が登録されていないと判定された場合、切り替え処理は終了される。
図16は、バッファ格納処理の手順を示すフローチャートの例である。図15に示した切り替え処理が完了すると、切り替え後のバッファセットについて図16に示すバッファ格納処理が開始される。なお、図16の処理は、図14の処理や、他のバッファセットについての図15の処理と並列に実行される。
CM110の制御部130は、バッファ管理テーブル163における処理対象のバッファセットに対応する制御情報領域に、ライト制御情報が登録されているかを判定する(ステップS131)。ライト制御情報が登録されていない場合、制御部130は、バッファセットの切り替え処理が実行されたかを判定する(ステップS132)。制御部130は、格納バッファセット情報165が示すバッファセットの世代が、処理対象のバッファセットと一致しない場合に、切り替え処理が実行されたと判定する。この場合、切り替えが行われたバッファセットに対応する制御情報領域に登録されたすべてのライト制御情報を処理済みの状態となるので、バッファ格納処理は完了する。一方、切り替え処理が実行されていない場合、制御部130は、一定時間後にステップS131の処理を実行する。
ステップS131でライト制御情報が登録されていた場合、制御部130は、制御情報領域に登録されたライト制御情報のうち最も先に登録されたライト制御情報を選択する(ステップS133)。次に、制御部130は、選択されたライト制御情報が示すライトデータをキャッシュ140から読み出し、バッファ150における処理対象のバッファセットに対応する分割領域に格納(コピー)する(ステップS134)。そして、制御部130は、選択されたライト制御情報に付加された格納状態情報を、格納済みを示すように更新する(ステップS135)。
次に、制御部130は、格納完了待ちキュー167を参照し、書き込み先領域が重複する新たなライトデータを示すライト制御情報が登録されているかを判定する(ステップS136)。この新たなライトデータとは、その書き込み先領域の少なくとも一部が、ステップS133で選択されたライトデータの書き込み先領域と重複するデータである。
ステップS136で該当するライト制御情報が登録されている場合、制御部130は、そのライト制御情報を格納完了待ちキュー167から取り出す。そして、制御部130は、取り出したライト制御情報について、図14のステップS102からのライトI/O処理を起動する(ステップS137)。これにより、取り出されたライト制御情報についてのライトI/O処理が再開される。その後、制御部130は、ステップS131の処理を実行する。
一方、ステップS136で該当するライト制御情報が登録されていない場合、制御部130は、ステップS131の処理を実行する。
図17は、転送・展開・解放処理の手順を示すシーケンス図の例である。図16のステップS132で「Yes」と判定されてバッファ格納処理が完了すると、その処理が完了したバッファセット(すなわち、切り替え済みかつバッファ格納済みのバッファセット)について図17に示す処理が開始される。なお、図17の処理は、図14の処理や、他のバッファセットについての図15、図16の処理と並列に実行される。
CM110の制御部130は、バッファ150の分割領域(ここでは例として、分割領域(0001)とする)に格納されたすべてのライトデータを、対応するライト制御情報とともにCM310に転送する(ステップS141)。このとき、例えば、バッファ350における格納先の分割領域(2001)を示す識別情報が、ライトデータに付加されて送信される。あるいは、分割領域の識別情報の代わりに、世代番号やバッファセットの識別番号が付加されてもよい。
CM310の制御部330は、受信したライトデータをバッファ350の分割領域(2001)に格納するとともに、受信したライト制御情報を、バッファ管理テーブル363における分割領域(2001)に対応する制御情報領域に登録する(ステップS142)。これらの処理が完了すると、制御部330は、分割領域(2001)に格納されたライトデータをキャッシュ340に書き込む(ステップS143)。これにより、ライトデータがキャッシュ340に展開される。
制御部330は、バッファセットの解放をCM110に通知する(ステップS144)。CM110の制御部130は、解放通知を受けると、バッファセットの解放をCM210に通知する(ステップS145)。これとともに、制御部130は、処理対象のバッファセットを解放する処理を行う(ステップS146)。具体的には、制御部130は、分割領域(0001)を空き領域に戻し、バッファ管理テーブル163における分割領域(0001)に対応する制御情報領域に登録されたライト制御情報を消去する。
CM210の制御部230は、解放通知を受けると、処理対象のバッファセットを解放する処理を行う(ステップS147)。具体的には、制御部230は、分割領域(1001)を空き領域に戻し、バッファ管理テーブル263における分割領域(1001)に対応する制御情報領域に登録されたライト制御情報を消去する。
制御部230は、バッファセットの解放完了をCM110に通知する(ステップS148)。CM110の制御部130は、解放完了通知を受けると、バッファセットの解放完了をCM310に通知する(ステップS149)。CM310の制御部330は、処理対象のバッファセットを解放する処理を行う(ステップS150)。具体的には、制御部330は、分割領域(2001)を空き領域に戻し、バッファ管理テーブル363における分割領域(2001)に対応する制御情報領域に登録されたライト制御情報を消去する。
このような処理により、CM110,210,310における同世代のバッファセットが同期して解放される。
以上の図17の処理では、特許文献1と比較した場合、ステップS143での展開の際に、CM210からの送信情報を待つ必要がなく、その送信情報に基づく照合処理も行われない。このため、図17の転送・展開・解放の全体の処理時間を短縮できる。
そして、このような転送・展開・解放の処理時間が短縮されることで、例えば、図15のステップS123における解放完了待ち時間を短縮でき、それによって、バッファセットの切り替え処理時間を短縮できる。その結果、例えば、図14のステップS103,S105で切り替え待ちキュー166に登録されたライト制御情報についてのライトI/O処理を、短時間で再開でき、それによって、ホスト装置400からのライト要求に対する応答時間を短縮できる。
次に、図18〜図20を用いて、障害などによってストレージ装置100の動作が停止した場合の処理について説明する。なお、図18、図19の説明では、例として、フェイルオーバの発生時点でバッファ250における分割領域(1000),(1001)が解放されていないものとする。
図18は、フェイルオーバ後の再同期処理の手順を示すシーケンス図の例である。再同期とは、CM210のキャッシュ240とCM310のキャッシュ340とを等価にする処理である。
CM210の制御部230は、ストレージ装置100が停止したことを検知すると(ステップS151)、CM310に対してフェイルオーバの発生を通知する(ステップS152)。これとともに、制御部230は、ストレージ装置300との間の非同期コピーセッションのセッションステータスを「コピーイング」に変更する(ステップS153)。一方、CM310の制御部330は、フェイルオーバの発生通知を受けると、ストレージ装置200との間の非同期コピーのセッションステータスを「コピーイング」に変更する(ステップS154)。
CM210の制御部230は、バッファ管理テーブル263の制御情報領域を参照し、ライト制御情報が登録されているかを確認する。ライト制御情報が登録されている場合、以下の処理が実行される。ここでは、(1000),(1001)に対応する制御情報領域にライト制御情報が登録されているものとする。制御部230は、これらの制御情報領域に登録されたライト制御情報に基づいて、コピービットマップ268を作成する(ステップS155)。コピービットマップ268は、書き込み対象の論理ボリュームにおける、コピー処理単位のブロックごとのビットを有する。各ビットの初期値は「0」とする。
制御部230は、上記制御情報領域からライト制御情報を1つずつ取得し、コピービットマップ268のビットのうち、取得したライト制御情報によって指定された書き込み先領域に含まれるブロックに対応するビットを「1」に更新する。上記制御情報領域に登録されたライト制御情報は、CM110のバッファ150からCM310に対する転送が完了していない可能性のあるライトデータを示す。上記処理により、コピービットマップ268には、このようなライトデータが存在する論理ボリューム上の位置が登録される。
なお、このようにしてコピービットマップ268が作成されると、ホスト装置400からのアクセス要求の受け付けが開始される。例えば、ホスト装置400からライト要求を受信したとき、後の図19に示すライトI/O処理が、図18における以下の処理と並行して実行される。
制御部230は、作成されたコピービットマップ268からビット値が「1」のビットを1つ選択する。制御部230は、選択されたビットに対応するライトデータをキャッシュ240から読み出し、対応するライト制御情報とともにCM310に転送する(ステップ156)。
CM310の制御部330は、受信したライトデータをキャッシュ340に格納する(ステップS157)。CM210の制御部230は、ライトデータの格納完了通知をCM310から受信すると、コピービットマップ268における、このライトデータに対応するビットを「0」に更新する(ステップS158)。そして、制御部230は、コピービットマップ268の全ビットが「0」かを判定する(ステップS159)。
ビット値が「1」のビットが残っている場合、制御部330は、コピービットマップ268からビット値が「1」のビットを新たに選択して、ステップS156の処理を実行する。このようにして、コピービットマップ268の全ビットが「0」になるまでステップS156〜S158の処理が繰り返される。
そして、ステップS159においてコピービットマップ268の全ビットが「0」になると、CM210のキャッシュ240とCM310のキャッシュ340とが同期した状態(すなわち、互いのデータが等価の状態)となる。このとき、CM210の制御部230は、バッファセットの解放をCM310に通知する(ステップS160)。これとともに、制御部230は、未解放のバッファセットを解放する処理を行う(ステップS161)。具体的には、制御部230は、分割領域(1000),(1001)を空き領域に戻し、バッファ管理テーブル263における分割領域(1000),(1001)に対応する制御情報領域に登録されたライト制御情報を消去する。
CM310の制御部330は、解放通知を受けると、未解放のバッファセットを解放する処理を行う(ステップS162)。具体的には、制御部230は、分割領域(2000),(2001)を空き領域に戻す処理を実行する。解放処理が完了すると、制御部330は、バッファセットの解放完了をCM210に通知する(ステップS163)。
以上の処理により、分割領域(1000),(1001),(2000),(2001)が、同期して解放される。このとき、すべてのバッファセットが解放された状態となる。
CM210の制御部230は、ストレージ装置300との間の非同期コピーセッションのセッションステータスを「アクティブ」に変更する(ステップS164)。また、制御部230は、CM310に対してステータスの変更を指示し、CM310の制御部330は、指示に応じてストレージ装置200との間の非同期コピーセッションのセッションステータスを「アクティブ」に変更する(ステップS165)。セッションステータスが「アクティブ」に変更されることで、CM210とCM310との間で、書き込みの順序性が確保された非同期コピーが開始される。
なお、セッションステータスが「アクティブ」に変更された時点では、すべてのバッファセットが解放された状態となっている。このため、ホスト装置400からのライト要求に応じたライトI/O処理を開始する際には、どのバッファセットが現世代のバッファセット(格納対象のバッファセット)として選択されてもよい。例えば、CM210,310は、セッションステータスを「アクティブ」に変更すると、あらかじめ決められたバッファセットを現世代のバッファセットとして選択する。
ここで、上記の図18では、コピービットマップ268を用いてデータ転送を行う処理について説明した。しかし、他の方法として、ステップS155で参照した制御情報領域から1つずつライト制御情報を取得し、取得したライト制御情報が示すライトデータをキャッシュ240からCM310に転送する方法が用いられてもよい。ただし、コピービットマップ268を用いることで、CM210からCM310へのデータ転送量を削減できる可能性が生じる。
例えば、未解放のバッファセットが複数存在し、それらのバッファセット間で書き込み先領域が同一のライトデータを示すライト制御情報があった場合でも、CM210のキャッシュ240には、それらのライトデータのうち最新のライトデータしか格納されていない。このため、このようなライトデータを示すライト制御情報が存在していたとしても、対応するライトデータをCM310に1回だけ転送すれば済む。
コピービットマップ268を用いることで、このように書き込み先領域が同一のライトデータを、1回の転送処理によってCM210からCM310に転送できるようになる。これにより、CM210からCM310へのデータ転送量を削減でき、キャッシュ240のデータとキャッシュ340のデータとが等価になるまでの時間を短縮できる。
なお、コピービットマップ268には、上記のように未転送の可能性があるライトデータの位置に加えて、次の図19で示すライトI/O処理において新たにライトデータが書き込まれた位置も記録される。このため、ステップS156〜S158の処理では、ライトI/O処理において新たに書き込まれたライトデータも、CM310に転送される。
これにより、キャッシュの再同期と並行して、ホスト装置400からのライト要求に応じたライトI/O処理を実行できるようになる。このため、CM210は、フェイルオーバの発生から短時間で、ホスト装置400からの新たなライト要求の受け付けを開始できる。したがって、CM210は、ホスト装置400からのライト要求に応じたライトI/O処理を、CM110から短時間で引き継ぐことができる。
また、ライトI/O処理においてコピービットマップ268が用いられることで、ライト要求によって新たに書き込まれたデータを、キャッシュ240への書き込みとは非同期に(すなわち、ライトバック方式によって)CM310に転送できる。このため、ライト要求に対する応答性能を向上させることができる。
図19は、コピーイング状態でのライトI/O処理の手順を示すフローチャートの例である。前述のように、図18のステップS153,S154でセッションステータスが「コピーイング」となり、ステップS155でコピービットマップ268が作成されると、ホスト装置400からのアクセス要求の受け付けが開始される。セッションステータスが「コピーイング」の状態においてホスト装置400からライト要求を受信すると、図19の処理が実行される。
CM210の制御部230は、ホスト装置400からライト要求およびライトデータを受信する(ステップS171)。すると、制御部230は、ライトデータをキャッシュ240に書き込む(ステップS172)。また、制御部230は、コピービットマップ268のビットのうち、ライトデータの書き込み先領域に含まれるブロックに対応するビットを「1」に更新する(ステップS173)。そして、制御部230は、ライト完了通知をホスト装置400に送信して、ライト要求に対する応答を行う(ステップS174)。
以上の図19では、ステップS173の処理により、新たにライトデータが書き込まれた位置がコピービットマップ268に記録される。これにより、図18のステップS156〜S158の処理が実行されることで、新たにキャッシュ240に書き込まれたライトデータが、ライト要求に対する応答とは非同期でCM310に転送されるようになる。
次に、図18のステップS164,S165で非同期コピーセッションのセッションステータスが「アクティブ」になった後に、ホスト装置400からライト要求を受信した場合のCM210の処理について、図20を用いて説明する。
図20は、アクティブ状態でのライトI/O処理の手順を示すフローチャートの例である。以下に示すように、CM210において実行されるライトI/O処理は、基本的に、図14に示したCM110でのライトI/O処理から、CM210との通信に関する処理(ステップS109〜S111)を除いた処理と同様である。
すなわち、CM210の制御部230は、ホスト装置400からライト要求およびライトデータを受信する(ステップS181)。制御部230は、切り替え状態情報264を参照して、現在バッファセットの切り替え処理が実行中かを判定する(ステップS182)。ステップS182で実行中であると判定された場合、制御部230は、ライト要求を示すライト制御情報を切り替え待ちキュー266に登録し(ステップS183)、ライトI/O処理を終了する。このとき、ライトデータはCM210のRAMに一時的に保持される。なお、切り替え処理が完了すると、切り替え待ちキュー266からライト制御情報が取り出される。そして、このライト制御情報および対応するライトデータについて、ステップS172以降の処理が実行される(図15のステップS130に対応)。
一方、ステップS182で切り替え処理が実行中でないと判定された場合、制御部230は、バッファ250における格納先の分割領域(ここでは例として、分割領域(1001)とする)に、受信したライトデータを格納できるだけの空き領域があるかを判定する(ステップS184)。空き領域がないと判定された場合、制御部230は、ライト要求を示すライト制御情報を切り替え待ちキュー266に登録し、バッファセットの切り替え処理を起動する(ステップS185)。これにより、図15と同様の手順で切り替え処理が開始される。なお、ライトデータはCM210のRAMに一時的に保持される。また、上記と同様に、切り替え処理が完了すると、切り替え待ちキュー266からライト制御情報が取り出され、このライト制御情報および対応するライトデータについて、ステップS182以降の処理が実行される(図15のステップS130に対応)。
一方、ステップS184で空き領域があると判定された場合、制御部230は、ライトデータの書き込み先領域と重複する領域に対して以前の世代でライトが要求され、かつバッファ250に対して未格納のライトデータがあるかを判定する(ステップS186)。この条件を満たす場合、制御部230は、ライト要求を示すライト制御情報を格納完了待ちキュー267に登録し(ステップS187)、ライトI/O処理を終了する。このとき、新たなライトデータはCM210のRAMに一時的に保持される。なお、上記の古いライトデータがバッファ150の分割領域に格納されると、格納完了待ちキュー267からライト制御情報が取り出される。そして、このライト制御情報および対応するライトデータについて、ステップS182以降の処理が実行される(図16のステップS137に対応)。
一方、ステップS186の条件を満たさない場合、制御部230は、受信したライトデータを示すライト制御情報を、バッファ管理テーブル263における分割領域(1001)に対応する制御情報領域に登録する(ステップS188)。そして、制御部230は、ライトデータをキャッシュ240に書き込む(ステップS189)。制御部230は、ライト完了通知をホスト装置400に送信して、ライト要求に対する応答を行う(ステップS190)。
なお、図示を省略するが、CM210の制御部230は、図20の処理を1回でも実行すると、図15におけるCM110の処理(CM210への切り替え通知を除く)、図16に示す処理、図17におけるCM110の処理(CM210へのバッファセット解放の通知を除く)と同様の処理を実行する。例えば、図20で例示した分割領域(1001)には、ライトデータがキャッシュ240からコピーされる。また、分割領域(1001)の空きがなくなるなどの条件が満たされると、バッファセットの切り替えが行われ、その後、分割領域(1001)に格納されたライトデータがCM310に送信される。このような処理により、フェイルオーバ前のCM110と同様に、書き込みの順序性が保証された非同期コピーが行われる。
なお、上記の各実施の形態に示した装置(例えば、制御装置10,20,30、CM110,110a,210,210a,310,310a)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。