(57)【特許請求の範囲】
【請求項１】
第一の論理ボリュームを有する正記憶制御装置と、前記第一の論理ボリュームとコピーペアを形成可能な第二の論理ボリュームを有する副記憶制御装置とを備えるストレージシステムであって、
前記正記憶制御装置は、
ホストアクセスによる前記第一の論理ボリュームの更新位置を管理する第一の差分ビットマップテーブルと、
前記第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報と、
前記ホストアクセスによって更新される前のデータであって、且つ前記第一の論理ボリュームに書かれていたデータである更新前データを格納する第一のプール領域と、
所定のタイミング以降に前記第一の論理ボリュームが更新されるときに前記更新前データを前記第一のプール領域に書き込む第一の書き込み手段と、
前記所定のタイミング以降に前記第一の論理ボリュームが更新されると、前記第一のスナップショット管理情報を前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを論理的に復元するための情報に更新する第一のスナップショット更新手段と、
前記第一の論理ボリュームの更新データが前記第二の論理ボリュームにリモートコピーされたか否かを管理する第一の転送差分ビットマップテーブルと、
前記第一の差分ビットマップテーブルのビット情報を前記第一の転送差分ビットマップテーブルにマージすることにより前記第一の転送差分ビットマップテーブルを更新する転送差分ビットマップテーブル更新手段と、
更新された前記第一の転送差分ビットマップテーブルに基づいて、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを構成する各データが前記第一の論理ボリュームと前記第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して前記第二の論理ボリュームに送信するリモートコピー手段と、
を備え、
前記副記憶制御装置は、
前記リモートコピーによる前記第二の論理ボリュームの更新位置を管理する第二の転送差分ビットマップテーブルと、
前記第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報と、
前記リモートコピーによって更新される前のデータであって、且つ前記第二の論理ボリュームに書かれていたデータである更新前データを格納する第二のプール領域と、
前記リモートコピーによって前記第二の論理ボリュームが更新されるときに前記更新前データを前記プール領域に書き込む第二の書き込み手段と、
前記第二の論理ボリュームが更新されると、前記第二のスナップショット管理情報を所定のタイミングの時点における前記第二の論理ボリュームのデータイメージを論理的に復元する情報に更新する第二のスナップショット更新手段と、
を備え、
前記第一のスナップショット管理情報は、前記第一のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記正記憶制御装置は、前記第一のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
前記空きキュー管理手段は、接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±１の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックし、前記接続対象となる差分データ制御ブロックの番号＋１の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号＋１の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号−１の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−１の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号±１の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続する、ストレージシステム。
【請求項２】
第一の論理ボリュームを有する正記憶制御装置と、前記第一の論理ボリュームとコピーペアを形成可能な第二の論理ボリュームを有する副記憶制御装置とを備えるストレージシステムであって、
前記正記憶制御装置は、
ホストアクセスによる前記第一の論理ボリュームの更新位置を管理する第一の差分ビットマップテーブルと、
前記第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報と、
前記ホストアクセスによって更新される前のデータであって、且つ前記第一の論理ボリュームに書かれていたデータである更新前データを格納する第一のプール領域と、
所定のタイミング以降に前記第一の論理ボリュームが更新されるときに前記更新前データを前記第一のプール領域に書き込む第一の書き込み手段と、
前記所定のタイミング以降に前記第一の論理ボリュームが更新されると、前記第一のスナップショット管理情報を前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを論理的に復元するための情報に更新する第一のスナップショット更新手段と、
前記第一の論理ボリュームの更新データが前記第二の論理ボリュームにリモートコピーされたか否かを管理する第一の転送差分ビットマップテーブルと、
前記第一の差分ビットマップテーブルのビット情報を前記第一の転送差分ビットマップテーブルにマージすることにより前記第一の転送差分ビットマップテーブルを更新する転送差分ビットマップテーブル更新手段と、
更新された前記第一の転送差分ビットマップテーブルに基づいて、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを構成する各データが前記第一の論理ボリュームと前記第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して前記第二の論理ボリュームに送信するリモートコピー手段と、
を備え、
前記副記憶制御装置は、
前記リモートコピーによる前記第二の論理ボリュームの更新位置を管理する第二の転送差分ビットマップテーブルと、
前記第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報と、
前記リモートコピーによって更新される前のデータであって、且つ前記第二の論理ボリュームに書かれていたデータである更新前データを格納する第二のプール領域と、
前記リモートコピーによって前記第二の論理ボリュームが更新されるときに前記更新前データを前記プール領域に書き込む第二の書き込み手段と、
前記第二の論理ボリュームが更新されると、前記第二のスナップショット管理情報を所定のタイミングの時点における前記第二の論理ボリュームのデータイメージを論理的に復元する情報に更新する第二のスナップショット更新手段と、
を備え、
前記第二のスナップショット管理情報は、前記第二のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記副記憶制御装置は、前記第二のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
前記空きキュー管理手段は、接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±１の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックし、前記接続対象となる差分データ制御ブロックの番号＋１の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号＋１の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号−１の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−１の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続し、前記接続対象となる差分データ制御ブロックの番号±１の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続する、ストレージシステム。
【請求項３】
請求項１又は２に記載のストレージシステムであって、
前記副記憶制御装置は、
ホストシステムから正副切り替えコマンドを受信すると、前記正記憶制御装置から前記副記憶制御装置にリモートコピーされていない未転送データが存在するか否かを前記正記憶制御装置に問い合せる手段と、
前記未転送データが存在する場合に、前記正記憶制御装置から前記未転送データを受信し、前記第二の論理ボリュームを更新する手段と、
を更に備える、ストレージシステム。
【請求項４】
請求項１又は２に記載のストレージシステムであって、
前記第一の書き込み手段は、前記第一の差分ビットマップテーブルのうちデータ更新有りを示すビットであって、且つ前記第一の転送差分ビットマップテーブルに未だマージされていないビットに対応する前記第一の論理ボリュームの前記更新前データを前記第一のプール領域に書き込む、ストレージシステム。
【請求項５】
請求項１又は２に記載のストレージシステムであって、
前記正記憶制御装置は、複数の第一の論理ボリュームと、複数の第一のプール領域とを備えており、
各々の第一の論理ボリュームは、何れかの第一のプール領域に対応けられており、
前記第一の書き込み手段は、前記第一の論理ボリュームに対応付けられている前記第一のプール領域に前記第一の論理ボリュームの更新前データを書き込む、ストレージシステム。
【請求項６】
第一の論理ボリュームを有する正記憶制御装置へのホストアクセスを受け付けるステップと、
前記ホストアクセスによる前記第一の論理ボリュームの更新位置を第一の差分ビットマップテーブルにより管理するステップと、
所定のタイミング以降に前記第一の論理ボリュームが更新されるときに、前記ホストアクセスによって更新される前のデータであって、且つ前記第一の論理ボリュームに書かれていたデータである更新前データを第一のプール領域に書き込むステップと、
前記所定のタイミング以降に前記第一の論理ボリュームが更新されると、前記第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報を、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを論理的に復元する情報に更新するステップと、
前記正記憶制御装置が有する前記第一の論理ボリュームの更新データが、副記憶制御装置が有する第二の論理ボリュームにリモートコピーされたか否かを管理する第一の転送差分ビットマップテーブルに前記第一の差分ビットマップテーブルのビット情報をマージするステップと、
更新された前記第一の転送差分ビットマップテーブルに基づいて、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを構成する各データが前記第一の論理ボリュームと前記第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して前記第二の論理ボリュームにリモートコピーするステップと、
前記リモートコピーによる前記第二の論理ボリュームの更新位置を第二の転送差分ビットマップテーブルにより管理するステップと、
前記リモートコピーによって更新される前のデータであって、且つ前記第二の論理ボリュームに書かれていたデータである更新前データを第二のプール領域に書き込むステップと、
前記第二の論理ボリュームが更新されると、前記第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報を、所定のタイミングの時点における前記第二の論理ボリュームのデータイメージを論理的に復元する情報に更新するステップと、
を備え、
前記第一のスナップショット管理情報は、前記第一のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記正記憶制御装置は、前記第一のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±１の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックするステップと、
前記接続対象となる差分データ制御ブロックの番号＋１の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号＋１の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号−１の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−１の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号±１の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続するステップと、
を更に備える、ストレージシステムの制御方法。
【請求項７】
第一の論理ボリュームを有する正記憶制御装置へのホストアクセスを受け付けるステップと、
前記ホストアクセスによる前記第一の論理ボリュームの更新位置を第一の差分ビットマップテーブルにより管理するステップと、
所定のタイミング以降に前記第一の論理ボリュームが更新されるときに、前記ホストアクセスによって更新される前のデータであって、且つ前記第一の論理ボリュームに書かれていたデータである更新前データを第一のプール領域に書き込むステップと、
前記所定のタイミング以降に前記第一の論理ボリュームが更新されると、前記第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報を、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを論理的に復元する情報に更新するステップと、
前記正記憶制御装置が有する前記第一の論理ボリュームの更新データが、副記憶制御装置が有する第二の論理ボリュームにリモートコピーされたか否かを管理する第一の転送差分ビットマップテーブルに前記第一の差分ビットマップテーブルのビット情報をマージするステップと、
更新された前記第一の転送差分ビットマップテーブルに基づいて、前記所定のタイミングの時点における前記第一の論理ボリュームのデータイメージを構成する各データが前記第一の論理ボリュームと前記第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して前記第二の論理ボリュームにリモートコピーするステップと、
前記リモートコピーによる前記第二の論理ボリュームの更新位置を第二の転送差分ビットマップテーブルにより管理するステップと、
前記リモートコピーによって更新される前のデータであって、且つ前記第二の論理ボリュームに書かれていたデータである更新前データを第二のプール領域に書き込むステップと、
前記第二の論理ボリュームが更新されると、前記第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報を、所定のタイミングの時点における前記第二の論理ボリュームのデータイメージを論理的に復元する情報に更新するステップと、
を備え、
前記第二のスナップショット管理情報は、前記第二のプール領域の各ブロックに対応付けられた複数の差分データ制御ブロックを含み、
前記副記憶制御装置は、前記第二のプール領域に書き込まれた前記更新前データが消去されると、消去された前記更新前データを管理していた差分データ制御ブロックを空きキューに接続する空きキュー管理手段を更に備え、
接続対象となる差分データ制御ブロックを前記空きキューに接続する際に、前記接続対象となる差分データ制御ブロックの番号±１の番号を有する差分データ制御ブロックが前記空きキューに接続されているか否かをチェックするステップと、
前記接続対象となる差分データ制御ブロックの番号＋１の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号＋１の番号を有する差分データ制御ブロックの直前に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号−１の番号を有する差分データ制御ブロックが前記空きキューに接続されている場合には、前記接続対象となる差分データ制御ブロックの番号−１の番号を有する差分データ制御ブロックの直後に前記接続対象となる差分データ制御ブロックを接続するステップと、
前記接続対象となる差分データ制御ブロックの番号±１の番号を有する差分データ制御ブロックが前記空きキューに接続されてない場合には、前記空きキューの最後尾に前記接続対象となる差分データ制御ブロックを接続するステップと、
を更に備える、ストレージシステムの制御方法。
【請求項８】
請求項６又は７に記載のストレージシステムの制御方法であって、
ホストシステムから正副切り替えコマンドを受信するステップと、
前記正記憶制御装置から前記副記憶制御装置にリモートコピーされていない未転送データが存在するか否かを前記正記憶制御装置に問い合せるステップと、
前記未転送データが存在する場合に、前記正記憶制御装置から前記未転送データを受信して前記第二の論理ボリュームを更新するステップと、
を更に備える、ストレージシステムの制御方法。
【請求項９】
請求項６又は７に記載のストレージシステムの制御方法であって、
前記第一の差分ビットマップテーブルのうちデータ更新有りを示すビットであって、且つ前記第一の転送差分ビットマップテーブルに未だマージされていないビットに対応する前記第一の論理ボリュームの前記更新前データを前記第一のプール領域に書き込むステップを更に備える、ストレージシステムの制御方法。
【請求項１０】
請求項６又は７に記載のストレージシステムの制御方法であって、
前記正記憶制御装置は、複数の第一の論理ボリュームと、複数の第一のプール領域とを備えており、
各々の第一の論理ボリュームは、何れかの第一のプール領域に対応けられており、
前記第一の論理ボリュームに対応付けられている前記第一のプール領域に前記第一の論理ボリュームの更新前データを書き込むステップを更に備える、ストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージシステム及びその制御方法に関する。
【背景技術】
【０００２】
データセンタのような大規模なデータを取り扱うデータベースシステムでは、ホストシステムとは別に構成されたストレージシステムを用いてデータを管理する。このようなストレージシステムとして、例えば、ディスクアレイシステムが知られている。ディスクアレイシステムは、アレイ状に配列された多数のディスクドライブをＲＡＩＤ（Redundant Array of Independent Inexpensive Disks）管理する。多数のディスクドライブが提供する物理的な記憶領域上には、少なくとも１つ以上の論理ユニットが形成され、この論理ユニットがホストシステムに提供される。ホストシステムは、論理ユニットを一つの物理的なデバイスとして認識し、論理ユニットへのデータアクセスを行う。
【０００３】
この種のストレージシステムでは、災害等に備えてデータを確実に保護するための措置が講じられている。例えば、特開２００５−２９３４６９号公報には、正記憶制御装置に書き込まれるデータを副記憶制御装置にリモートコピーし、データを二重化することで、耐障害性を高めるシステムが開示されている。
【特許文献１】特開２００５−２９３４６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、正記憶制御装置へのデータ入出力を要求するホストシステムに障害が生じたり、或いは正記憶制御装置とホストシステムの両方に障害が生じたりすると、記憶制御装置の正副を切り替えて、運用を継続する必要がある。非同期リモートコピーにより、正記憶制御装置から副記憶制御装置にデータが転送される場合には、正副切り替え時点で、正記憶制御装置から副記憶制御装置に未だ転送されていない未転送データが存在する場合も想定されるので、副記憶制御装置のデータをできるだけ新しいものにするには、未転送データを適切に処理する必要がある。更に、ホストシステムに障害が生じると、正副切り替え処理の最中にも正記憶制御装置にライトアクセスが要求される場合も想定されるので、このようなライトアクセスを適切に処理する必要もある。
【０００５】
そこで、本発明は、システム障害時における記憶制御装置の正副切り替え処理を適切に行うことを課題とする。本発明の更なる目的は、後述する実施の形態の記載から明らかになるであろう。
【課題を解決するための手段】
【０００６】
上記の課題を解決するため、本発明のストレージシステムは、第一の論理ボリュームを有する正記憶制御装置と、第一の論理ボリュームとコピーペアを形成可能な第二の論理ボリュームを有する副記憶制御装置とを備える。
【０００７】
正記憶制御装置は、ホストアクセスによる第一の論理ボリュームの更新位置を管理する第一の差分ビットマップテーブルと、第一の論理ボリュームのデータイメージを論理的に復元するための第一のスナップショット管理情報と、ホストアクセスによって更新される前のデータであって、且つ第一の論理ボリュームに書かれていたデータである更新前データを格納する第一のプール領域と、所定のタイミング以降に第一の論理ボリュームが更新されるときに更新前データを第一のプール領域に書き込む第一の書き込み手段と、所定のタイミング以降に第一の論理ボリュームが更新されると、第一のスナップショット管理情報を所定のタイミングの時点における第一の論理ボリュームのデータイメージを論理的に復元するための情報に更新する第一のスナップショット更新手段と、第一の論理ボリュームの更新データが第二の論理ボリュームにリモートコピーされたか否かを管理する第一の転送差分ビットマップテーブルと、第一の差分ビットマップテーブルのビット情報を第一の転送差分ビットマップテーブルにマージすることにより第一の転送差分ビットマップテーブルを更新する転送ビットマップテーブル更新手段と、更新された第一の転送差分ビットマップテーブルに基づいて、所定のタイミングの時点における第一の論理ボリュームのデータイメージを構成する各データが第一の論理ボリュームと第一のプール領域の何れに存在するのかを判別し、判別された方からデータを取得して第二の論理ボリュームに送信するリモートコピー手段と、を備える。
【０００８】
副記憶制御装置は、リモートコピーによる第二の論理ボリュームの更新位置を管理する第二の転送差分ビットマップテーブルと、第二の論理ボリュームのデータイメージを論理的に復元するための第二のスナップショット管理情報と、リモートコピーによって更新される前のデータであって、且つ第二の論理ボリュームに書かれていたデータである更新前データを格納する第二のプール領域と、リモートコピーによって第二の論理ボリュームが更新されるときに更新前データを前記プール領域に書き込む第二の書き込み手段と、第二の論理ボリュームが更新されると第二のスナップショット管理情報を所定のタイミングの時点における第二の論理ボリュームのデータイメージを論理的に復元する情報に更新する第二のスナップショット更新手段と、を備える。
【０００９】
副記憶制御装置は、ホストシステムから正副切り替えコマンドを受信すると、正記憶制御装置から副記憶制御装置にリモートコピーされていない未転送データが存在するか否かを正記憶制御装置に問い合せ、未転送データが存在する場合に、正記憶制御装置から未転送データを受信し、第二の論理ボリュームを更新する。
【００１０】
正記憶制御装置は、副記憶制御装置が正副切り替えコマンドを受信した時点以降における、第一の論理ボリュームへのホストアクセスによる第一の論理ボリュームの更新位置を第一の差分ビットマップテーブルにより管理する。
【００１１】
副記憶制御装置は、未転送データの問い合わせに対する正記憶制御装置からの応答がない場合には、第二のスナップショット管理情報に基づいて、過去のある時点における第二の論理ボリュームのデータイメージを復元する。
【発明の効果】
【００１２】
本発明によれば、システム障害時における記憶制御装置の正副切り替え処理を適切に行うことができる。
【発明を実施するための最良の形態】
【００１３】
以下、各図を参照しながら本発明の実施形態について説明する。
図１は本実施形態に係るストレージシステム１０のシステム構成を示す。ストレージシステム１０は、ローカルサイトに設置されている正記憶制御装置２０と、リモートサイトに設置されている副記憶制御装置５０とを備える。正記憶制御装置２０、副記憶制御装置５０、正ホストシステム１００、及び副ホストシステム１１０は、ＳＡＮ（Storage Area Network）１２０を介して相互に接続されている。
【００１４】
正ホストシステム１００は、常用系のホストシステムであり、主として、システムが正常なときに、正記憶制御装置２０にＩ／Ｏ処理を要求する。副ホストシステム１１０は、待機系のホストシステムであり、主として、システムに障害が発生したときに、副記憶制御装置５０にＩ／Ｏ処理を要求し、障害発生時に正ホストシステム１００が行っていた処理を引き継ぐ。正ホストシステム１００、及び副ホストシステム１１０は、例えば、パーソナルコンピュータ、ワークステーション、メインフレームコンピュータ等である。
【００１５】
ストレージシステム１０は、正記憶制御装置２０に書き込まれたデータが副記憶制御装置５０にリモートコピーされるように構成されている。副記憶制御装置５０は、正記憶制御装置２０が過去に保持していたデータイメージと同一のデータイメージを保持する。これにより、正記憶制御装置２０に障害が生じた場合でも、副記憶制御装置５０を用いて、システムを稼動させることができる。リモートコピー方式としては、正記憶制御装置２０と副記憶制御装置５０との両方にデータを書き込んだことを条件として、正ホストシステム１００にライト完了を報告する同期コピーでもよく、或いは正記憶制御装置２０にデータが書き込まれた段階で、正ホストシステム１００にライト完了を報告し、適当な時期にそのデータを副記憶制御装置５０に転送する非同期コピーでもよい。以下の説明では、正記憶制御装置２０を稼働系の正記憶制御装置として運用し、副記憶制御装置５０を待機系の副記憶制御装置として運用する例を示す。
【００１６】
正記憶制御装置２０は、主に、コントローラ３０と、記憶装置４０とを備える。
【００１７】
コントローラ３０は、ＬＡＮ（Local Area Network）インターフェース３１、フロントエンドインターフェース３２、ＣＰＵ３３、データ転送コントローラ３４、キャッシュメモリ３５、ローカルメモリ３６、及びバックエンドインターフェース３７を備える。
【００１８】
コントローラ３０は、複数のディスクドライブ４１をいわゆるＲＡＩＤ方式に規定されるＲＡＩＤレベル（例えば、０，１，５）で制御することができる。ＲＡＩＤ方式においては、複数のディスクドライブ４１が一つのＲＡＩＤグループとして管理される。ＲＡＩＤグループ上には、正ホストシステム１００からのアクセス単位である複数の論理ボリューム４２が定義されている。それぞれの論理ボリューム４２には、ＬＵＮ（Logical Unit Number）がアサインされる。
【００１９】
ＣＰＵ３３は、正ホストシステム１００からのデータ入出力要求に応答して、複数のディスクドライブ４１へのＩ／Ｏ処理（ライトアクセス、又はリードアクセス）を制御するプロセッサである。
【００２０】
ローカルメモリ３６には、各種マイクロプログラム、及びボリューム管理テーブルなどが格納されている。各種マイクロプログラム、及びボリューム管理テーブルの詳細については、後述する。
【００２１】
キャッシュメモリ３５は、ディスクドライブ４１に書き込むためのライトデータ、又はディスクドライブ４１から読み出したリードデータを一時的に格納するバッファメモリである。キャッシュメモリ３５は、電源バックアップされており、正記憶制御装置２０に電源障害が発生した場合でも、キャッシュデータのロストを防ぐ不揮発性メモリとして構成されている。
【００２２】
データ転送コントローラ３４は、キャッシュメモリ３５、フロントエンドインターフェース３２、バックエンドインターフェース３７、及びＣＰＵ３３を相互に接続し、正ホストシステム１００とディスクドライブ４１との間のデータ転送を制御する。正ホストシステム１００からのライトアクセスが要求されると、データ転送コントローラ３４は、フロントエンドインターフェース３２を介して正ホストシステム１００から受け取ったデータをキャッシュメモリ３５に書き込み、その後、そのライトデータをディスクドライブ４１へ非同期書き込みすることを目的として、そのライトデータをバックエンドインターフェース３７へ転送する。また、正ホストシステム１００からのリードアクセスが要求されると、バックエンドインターフェース３７を介してディスクドライブ４１から読みとったリードデータをキャッシュメモリ３５に書き込むとともに、フロントエンドインターフェース３２にそのリードデータを転送する。
【００２３】
フロントエンドインターフェース３２は、正ホストシステム１００とのインターフェースを制御するコントローラであり、例えば、ファイバチャネルプロトコルに基づく正ホストシステム１００からのブロックアクセス要求を受信する機能を有する。
【００２４】
バックエンドインターフェース３７は、ディスクドライブ４１とのインターフェースを制御するコントローラであり、例えば、ディスクドライブ４１を制御するプロトコルに基づくディスクドライブ４１へのデータ入出力要求を制御する機能を有する。
【００２５】
ＬＡＮインターフェース３１は、ＬＡＮ９０に接続するインターフェースであり、ＴＣＰ／ＩＰに基づいて管理端末８０との間でデータ及び制御信号の送受信を制御する。
【００２６】
記憶装置４０は、複数のディスクドライブ４１を備える。ディスクドライブ４１は、ＦＣ（Fibre Channel）ディスクドライブ、ＳＡＴＡ（Serial Advanced Technology Attachment）ディスクドライブ、ＰＡＴＡ（Parallel Advanced Technology Attachment）ディスクドライブ、ＦＡＴＡ（Fibre Attached Technology Adapted）ディスクドライブ、ＳＡＳ（Serial Attached SCSI）ディスクドライブ或いはＳＣＳＩ（Small Computer System Interface）ディスクドライブ等のストレージデバイスである。
【００２７】
正記憶制御装置２０は、ＬＡＮ（Local Area Network）９０を介して管理端末８０に接続されている。管理端末８０は、例えば、ＣＰＵ、メモリ及びディスプレイ等のハードウェア資源を備えるコンピュータシステムである。システム管理者は、管理端末８０を入力操作することにより、正記憶制御装置２０を管理するためのコマンドを正記憶制御装置２０に送信する。正記憶制御装置２０を管理するためのコマンドとして、例えば、ディスクドライブ４１の増設或いは減設、又はＲＡＩＤ構成の変更を指示するためのコマンド、正ホストシステム１００と正記憶制御装置２０との間の通信パスを設定するためのコマンド、ＣＰＵ３３のマイクロプログラムをメモリ２６にインストールするためのコマンド、正記憶制御装置２０の動作状態の確認や故障部位を特定するためのコマンド等がある。
【００２８】
副記憶制御装置５０は、主に、コントローラ６０と、記憶装置７０とを備える。
【００２９】
コントローラ６０の詳細構成は、上述したコントローラ３０の詳細構成と同様である。記憶装置７０は、複数のディスクドライブ７１を備える。コントローラ６０は、複数のディスクドライブ７１をいわゆるＲＡＩＤ方式に規定されるＲＡＩＤレベル（例えば、０，１，５）で制御することができる。ＲＡＩＤ方式においては、複数のディスクドライブ７１が一つのＲＡＩＤグループとして管理される。ＲＡＩＤグループ上には、副ホストシステム１１０からのアクセス単位である複数の論理ボリューム７２が定義されている。それぞれの論理ボリューム７２には、ＬＵＮ（Logical Unit Number）がアサインされる。
【００３０】
図２は各種マイクロプログラム及びボリューム管理テーブルを示す。
【００３１】
ローカルメモリ３６は、内部コピー実行プログラム２００、リモートコピー実行プログラム２１０、制御プログラム２２０、及びボリューム管理テーブル２３０を格納する。内部コピー実行プログラム２２０は、内部コピー処理、及びスナップショット更新処理を実行する。リモートコピー実行プログラム２１０は、リモートコピーを実行する。制御プログラム２２０は、内部コピー実行プログラム２００、及びリモートコピー実行プログラム２１０を制御する。ボリューム管理テーブル２３０は、複数の論理ボリューム４２に関する情報を格納する。
【００３２】
図３はボリューム管理テーブル２３０のテーブル構造を示す。
【００３３】
ボリューム管理テーブル２３０には、複数の論理ボリューム４２の各々について、論理ボリューム（以下、「ＶＯＬ」と略記することがある。）を識別するためのＶＯＬ−ＩＤと、その論理ボリュームへのアクセスパスを示すパス情報と、その論理ボリュームの種類（以下、「ＶＯＬ種類」と記す。）と、その論理ボリュームがプールＶＯＬであるか否かを示すフラグ（以下、「プールＶＯＬ」フラグと記す。）と、その論理ボリュームを含んだＶＯＬペアに関する情報（以下、「ペア情報」と記す。）と、が対応付けられて格納される。ボリューム管理テーブル２３０に格納される情報のうちの少なくとも一つの情報要素（例えば、ＶＯＬ−ＩＤ、ＶＯＬ種類、プールＶＯＬフラグ）は、管理端末８０又は正ホストシステム１００などから入力できる。
【００３４】
ＶＯＬ種類としては、例えば、「プライマリ」、「セカンダリ」、「プール」がある。「プライマリ」という種類のＶＯＬ（以下、「プライマリＶＯＬ」又は「ＰＶＯＬ」と記す。）は、コピー処理（例えば、リモートコピー処理）において、コピー元となるＶＯＬである。「セカンダリ」という種類のＶＯＬ（以下、「セカンダリＶＯＬ」又は「ＳＶＯＬ」と記す。）は、コピー処理（例えば、リモートコピー処理）において、コピー先となるＶＯＬである。セカンダリＶＯＬは、少なくともプライマリＶＯＬの容量以上の記憶容量を有する。プライマリＶＯＬもセカンダリＶＯＬも、パス情報は定義されている。但し、「プール」という種類のＶＯＬ（以下、「プールＶＯＬ」と記す。）は、パス情報が未定義である。プールＶＯＬの詳細については、後述する。
【００３５】
プールＶＯＬフラグは、それに対応する論理ボリュームがプールＶＯＬであるか否かを示す。具体的には、例えば、プールＶＯＬフラグが「１」であれば、それに対応する論理ボリュームは、プールＶＯＬであり、プールＶＯＬフラグが「０」であれば、それに対応する論理ボリュームは、プールＶＯＬでない。
【００３６】
ペア情報には、例えば、ペア相手情報、及びペア状態が含まれている。ペア相手情報には、例えば、ペア相手となる論理ボリューム（以下、ペア相手ＶＯＬ）に関する情報として、ペア相手ＶＯＬを有する記憶制御装置のＩＤ、ペア相手ＶＯＬのＶＯＬ−ＩＤ、及びパス情報などがある。ペア状態としては、例えば、「ＳＭＰＬ」、「ＣＯＰＹ」、「ＰＡＩＲ」、「ＰＳＵＳ」、「ＳＰＬＩＴ」、「ＳＳＷＳ」などがある。
【００３７】
「ＳＭＰＬ」とは、ペア生成前の正副関係のない状態を示す。
【００３８】
「ＣＯＰＹ」は、プライマリＶＯＬのデータをセカンダリＶＯＬにコピーする形成コピー中の状態を示す。「ＣＯＰＹ」では、セカンダリＶＯＬへのライトは禁止される。
【００３９】
「ＰＡＩＲ」は、プライマリＶＯＬからセカンダリＶＯＬへ非同期コピーを行っている状態を示す。「ＰＡＩＲ」では、セカンダリＶＯＬへのライトは禁止される。
【００４０】
「ＰＳＵＳ」は、プライマリＶＯＬからセカンダリＶＯＬへ非同期コピーを停止している状態を示す。「ＰＳＵＳ」では、セカンダリＶＯＬへのリード／ライトは禁止される。
【００４１】
「ＳＰＬＩＴ」は、プライマリＶＯＬとセカンダリＶＯＬとを論理的に分離して、プライマリＶＯＬの更新前後の差分データのみをセカンダリＶＯＬにコピーする状態を示す。
【００４２】
「ＳＳＷＳ」は、セカンダリＶＯＬがリード／ライト可能な状態を示す。「ＳＳＷＳ」では、セカンダリＶＯＬのデータは、前回の確定内容にリストアされ、プライマリＶＯＬは、「ＰＳＵＳ」に遷移する。
【００４３】
ＣＰＵ３３は、ボリューム管理テーブル２３０を参照することにより、アクセスすべき論理ボリューム４２の種類、及びペア情報を特定することができる。また、ＣＰＵ３３は、プールＶＯＬが後述のバーチャルＶＯＬに割りアサインされた場合には、そのプールＶＯＬへのパスを表す情報を定義し、定義されたパス情報をボリューム管理テーブル２３０に登録することができる。また、ＣＰＵ３３は、アサインされなくなったプールＶＯＬについてのパス情報を消去することにより、プールＶＯＬを未使用状態にすることができる。ＣＰＵ３３は、各プールＶＯＬについて、パス情報が登録されているか否かにより、各プールＶＯＬが使用中であるか、或いは未使用状態であるかを判別することができる。
【００４４】
図４は正記憶制御装置２０が実行する非同期リモートコピーの処理概要を示す。
【００４５】
正記憶制御装置２０は、ＣＰＵ３３、キャッシュメモリ３５、プライマリＶＯＬ６００、バーチャルＶＯＬ６１０、複数のプールＶＯＬ６２０、スナップショット管理情報３００、及び転送差分ビットマップテーブル５１０を備える。
【００４６】
プールＶＯＬ６２０は、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０とのペア状態がスプリットされた時点以降にプライマリＶＯＬ６００のデータイメージが更新されたときに、更新前後の差分データを退避させるための論理ボリュームである。
【００４７】
バーチャルＶＯＬ６１０は、ある時刻にプライマリＶＯＬ６００に格納されているデータと、ある時刻以降にプライマリＶＯＬ６００からプールＶＯＬ６２０に退避されたデータとから、ある時刻におけるプライマリＶＯＬ６００のデータイメージを復元するための仮想的な論理ボリュームである。バーチャルＶＯＬ６１０は、プライマリＶＯＬ６００のスナップショットを論理的に保持することができる。本明細書では、過去のある時点におけるプライマリＶＯＬ６００のデータイメージを論理的にバーチャルＶＯＬ６１０上に復元する処理（即ち、スナップショットを作成する処理）を「内部コピー」と称する。バーチャルＶＯＬ６１０は、プライマリＶＯＬ６００又はセカンダリＶＯＬ７００とペアを形成することができる。本実施形態では、バーチャルＶＯＬ６１０は、キャッシュメモリ３５の記憶領域に形成される場合を例示するが、ディスクドライブ４１の記憶領域に形成されていてもよい。説明の便宜上、バーチャルＶＯＬ６１０をＰ＿ＶＶＯＬと略記する場合がある。
【００４８】
ＣＰＵ３３は、バーチャルＶＯＬ６１０に、複数のプールＶＯＬ６２０の中から一以上のプールＶＯＬ６２０（例えば、どのＶＯＬにも対応付けられていない未使用のプールＶＯＬ）を選択し、選択された一以上のプールＶＯＬ６２０をバーチャルＶＯＬ６１０にアサインできる。ＣＰＵ３３は、バーチャルＶＯＬ６１０にアサインされるプールＶＯＬ６２０の数を、記憶資源の消費状況に応じて、適宜に増減することができる。
【００４９】
スナップショット管理情報３００は、ある時刻におけるプライマリＶＯＬ６００のデータイメージを、スナップショットを用いて復元するための情報である。ＣＰＵ３３は、スナップショット管理情報３００を参照することにより、ある時刻におけるプライマリＶＯＬ６００のデータイメージを構成する各データがプールＶＯＬ６２０に存在するのか、或いはプライマリＶＯＬ６００に存在するのかを判別し、判別された方からデータを取得することにより、ある時刻におけるプライマリＶＯＬ６００のデータイメージをバーチャルＶＯＬ６１０に復元できる。スナップショット管理情報３００は、プライマリＶＯＬ６００のデータ更新位置を示す差分ビットマップテーブル３１０を含む。
【００５０】
転送差分ビットマップテーブル５１０は、プライマリＶＯＬ６００とセカンダリＶＯＬ７００とが同期した後において、プライマリＶＯＬ６００のデータが更新されたときに、セカンダリＶＯＬ７００にリモートコピーされるべき差分データの位置を示す。
【００５１】
ＣＰＵ３３は、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態をコピー状態にすることができる。ライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態がコピー状態になっているときに、プライマリＶＯＬ６００にデータが書き込まれると、ＣＰＵ３３は、そのデータをバーチャルＶＯＬ６１０又はプールＶＯＬ６２０に書き込む。
【００５２】
ＣＰＵ３３は、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態をスプリット状態にすることができる。ライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態がスプリット状態になっているときに、プライマリＶＯＬ６００にデータが書き込まれると、ＣＰＵ３３は、内部コピープログラム２００を動作させて、内部コピー処理及びスナップショット更新処理を実行する。
【００５３】
副記憶制御装置５０は、ＣＰＵ６３、キャッシュメモリ６５、セカンダリＶＯＬ７００、複数のバーチャルＶＯＬ７１０Ａ，７１０Ｂ、複数のプールＶＯＬ７２０、スナップショット管理情報４００、及び転送差分ビットマップテーブル５２０を備える。
【００５４】
プールＶＯＬ７２０は、セカンダリＶＯＬ７００とバーチャルＶＯＬ７１０Ａ又はバーチャルＶＯＬ７１０Ｂとのペア状態がスプリットされた時点以降にセカンダリＶＯＬ７００のデータイメージが更新されたときに、更新前後の差分データを退避させるための論理ボリュームである。
【００５５】
バーチャルＶＯＬ７１０Ａ，７１０Ｂは、ある時刻にセカンダリＶＯＬ７００に格納されているデータと、ある時刻以降にセカンダリＶＯＬ７００からプールＶＯＬ７２０に退避されたデータとから、ある時刻におけるセカンダリＶＯＬ７００のデータイメージを復元するための仮想的な論理ボリュームである。バーチャルＶＯＬ７１０Ａ，７１０Ｂは、セカンダリＶＯＬ７００のスナップショットを論理的に保持することができる。本実施形態では、バーチャルＶＯＬ７１０Ａ，７１０Ｂは、キャッシュメモリ６５の記憶領域に形成される場合を例示するが、ディスクドライブ７１の記憶領域に形成されていてもよい。説明の便宜上、バーチャルＶＯＬ７１０Ａ，７１０ＢをＳ＿ＶＶＯＬと略記する場合がある。
【００５６】
スナップショット管理情報４００は、ある時刻におけるセカンダリＶＯＬ７００のデータイメージを、スナップショットを用いて復元するための情報である。ＣＰＵ６３は、スナップショット管理情報４００を参照することにより、ある時刻におけるセカンダリＶＯＬ７００のデータイメージを構成する各データがプールＶＯＬ７２０に存在するのか、或いはセカンダリＶＯＬ７００に存在するのかを判別し、判別された方からデータを取得することにより、ある時刻におけるセカンダリＶＯＬ７００のデータイメージをバーチャルＶＯＬ７１０Ａ，７１０Ｂに復元できる。スナップショット管理情報４００は、セカンダリＶＯＬ７００のデータ更新位置を示す差分ビットマップテーブル４１０Ａ，４１０Ｂを含む。
【００５７】
転送差分ビットマップテーブル５２０は、プライマリＶＯＬ６００とセカンダリＶＯＬ７００とが同期した後において、プライマリＶＯＬ６００のデータが更新されたときに、リモートコピーによりセカンダリＶＯＬ７００のデータが更新された位置を示す。
【００５８】
次に、内部コピー処理、スナップショット更新処理、及びリモートコピー処理の詳細について説明を加える。以降の説明では、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態がスプリット状態にあることを前提とする。
【００５９】
正記憶制御装置２０は、正ホストシステム１００からライトアクセス要求を受けると（Ｓ１０１）、ライトデータをキャッシュメモリ３５に格納し（Ｓ１０２）、ライト完了を正ホストシステム１００に報告する（Ｓ１０３）。
【００６０】
ＣＰＵ３３は、キャッシュメモリ３５に書き込まれたライトデータを読み出し、プライマリＶＯＬ６００に書き込む（Ｓ１０４）。このとき、ＣＰＵ３３は、更新前データ（ライトデータによって更新（上書き）される前のデータであって、且つプライマリＶＯＬ６００に書かれていた過去のデータ）をプライマリＶＯＬ６００からプールＶＯＬ６２０に移動させる（Ｓ１０５）。
【００６１】
プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態がスプリット状態にあるときに、内部コピーを実行すると、ある時刻におけるプライマリＶＯＬ６００のデータイメージを構成する各データは、プライマリＶＯＬ６００とプールＶＯＬ６２０とに分散される。
【００６２】
次に、ＣＰＵ３３は、スナップショット管理情報３００を、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態がスプリットされた時点（以下、「スプリット時点」と称する。）にプライマリＶＯＬ６００に格納されているデータと、そのスプリット時点以降にプライマリＶＯＬ６００からプールＶＯＬ６２０に移動されたデータとから、そのスプリット時点におけるプライマリＶＯＬ６００のデータイメージを復元するための情報に更新する（Ｓ１０６）。このスナップショット更新処理により、バーチャルＶＯＬ６１０は、ライマリＶＯＬ６００のスナップショットを論理的に保持することができる。
【００６３】
ＣＰＵ３３は、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態がスプリット状態にあるときに、正ホストシステム１００からライトアクセス要求を受ける都度に、上述したＳ１０２〜Ｓ１０６の処理を繰り返し実行する。
【００６４】
ＣＰＵ３３は、スプリット時点から所定時間経過後にリモートコピー実行プログラム２１０を動作させ、リモートコピー処理を実行する。リモートコピー実行プログラム２１０は、差分ビットマップテーブル３１０を転送差分ビットマップテーブル５１０にマージする。そして、リモートコピー実行プログラム２１０は、転送差分ビットマップテーブル５１０に基づいて、スプリット時点におけるプライマリＶＯＬ６００のデータイメージを復元するための各データがプライマリＶＯＬ６００に存在するのか、或いはプールＶＯＬ６２０に存在するのかを判別し、判別された方からデータを取得してそのデータを副記憶制御装置５０に転送する（Ｓ１０７）。このリモートコピー処理により、スプリット時点におけるプライマリＶＯＬ６００のデータイメージがセカンダリＶＯＬ７００に復元される。
【００６５】
副記憶制御装置５０は、正記憶制御装置２０からデータを受信すると、正記憶制御装置２０にライト完了を報告する（Ｓ１０８）。
【００６６】
以後、ＣＰＵ６３は、正記憶制御装置２０から受信したデータをセカンダリＶＯＬ７００に書き込む際に、更新前データ（ライトデータによって更新（上書き）される前のデータであって、且つセカンダリＶＯＬ７００に書かれていた過去のデータ）をセカンダリＶＯＬ７００からプールＶＯＬ７２０に移動させる（Ｓ１０９）。
【００６７】
更に、ＣＰＵ６３は、スナップショット管理情報４００を、スプリット時点にセカンダリＶＯＬ７００に格納されているデータと、スプリット時点以降にセカンダリＶＯＬ７００からプールＶＯＬ７２０に移動されたデータとから、スプリット時点におけるセカンダリＶＯＬ７００のデータイメージを復元するための情報に更新する（Ｓ１１０）。
【００６８】
尚、ＣＰＵ６３は、バーチャルＶＯＬ７１０Ａ，７１０Ｂを交互に切り替えて使用する。これにより、例えば、ＣＰＵ６３は、バーチャルＶＯＬ７１０ＡにセカンダリＶＯＬ７００のスナップショットを論理的に作成しつつ、差分ビットマップテーブル４１０Ｂをクリアすることができる。差分ビットマップテーブル４１０Ａ，４１０Ｂをクリアするには、長時間を要する。バーチャルＶＯＬ７１０Ａ，７１０Ｂを交互に切り替えて使用することで、スナップショットの作成と、差分ビットマップテーブル４１０Ａ，４１０Ｂのクリアを並行処理できるので、効率がよい。
【００６９】
ＣＰＵ３３は、正記憶制御装置２０を制御するための手段（例えば、プライマリＶＯＬ６００の更新前データをプールＶＯＬ６２０に書き込むための書き込み手段、スナップショット管理情報３００を更新するスナップショット更新手段、転送差分ビットマップテーブル５１０を更新する転送差分ビットマップテーブル更新手段、正記憶制御装置２０から副記憶制御装置５０へ未転送データをリモートコピーするリモートコピー手段など）として機能する。
【００７０】
ＣＰＵ６３は、副記憶制御装置５０を制御するための手段（例えば、セカンダリＶＯＬ７００の更新前データをプールＶＯＬ７２０に書き込むための書き込み手段、スナップショット管理情報４００を更新するスナップショット更新手段など）として機能する。
【００７１】
図５は正記憶制御装置２０において実行される非同期リモートコピーの処理シーケンスを示す。
【００７２】
時刻ｔ０は、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態がスプリットされたスプリット時点を示す。この時刻ｔ０におけるプライマリＶＯＬ６００のデータイメージを「イメージＴ０」と称する。イメージＴ０は、プライマリＶＯＬ６００の第一のブロック領域にデータブロックＡが格納されているデータイメージとする。この時刻ｔ０の時点では、プールＶＯＬ６２０に更新前データは格納されていない。スナップショット管理情報３００は、イメージＴ０を復元するための情報になっている。
【００７３】
時刻ｔ１で（つまり、スプリット状態の期間中に）、プライマリＶＯＬ６００の第一のブロック領域にデータブロックＢが上書きされると、プライマリＶＯＬ６００のデータイメージがイメージＴ０からイメージＴ１に変化する。このとき、内部コピー実行プログラム２００は、データブロックＡ（更新前データ）をプライマリＶＯＬ６００からバーチャルＶＯＬ６２０に書き込み、スナップショット管理情報３００を、プライマリＶＯＬ６００の第一のブロック領域に更新があり、且つその第一のブロック領域に存在していたデータブロックＡ（更新前データ）がバーチャルＶＯＬ６２０に格納されたことを示す情報に更新する。
【００７４】
また、時刻ｔ１で、制御プログラム２２０がリモートコピー処理の実行をリモートコピー実行プログラム２１０に命じる。リモートコピー実行プログラム２１０は、転送差分ビットマップテーブル５１０を参照することにより、イメージＴ０を構成するデータブロックＡがバーチャルＶＯＬ６１０に存在することを特定し、バーチャルＶＯＬ６１０からデータブロックＡを取得し、データブロックＡを副記憶制御装置５０に送信する。
【００７５】
時刻ｔ２は、リモートコピー処理が完了した時点である。この結果、時刻ｔ０の時点でプライマリＶＯＬ６００に形成されていたイメージＴ０が、セカンダリＶＯＬ７００に複製される。
【００７６】
また、時刻ｔ２で（つまり、スプリット状態の期間中に）、プライマリＶＯＬ６００の第二のブロック領域にデータブロックＣが書かれると、プライマリＶＯＬ６００のデータイメージがイメージＴ１からイメージＴ２に変化する。このとき、内部コピー実行プログラム２００は、スナップショット管理情報３００を、プライマリＶＯＬ６００第二のブロック領域に更新があったことを示す情報に更新する。
【００７７】
例えば、時刻ｔ２の後であって時刻ｔ３の前に、プライマリＶＯＬ６００の第二のブロック領域にデータブロックＤが上書きされると、プライマリＶＯＬ６００のデータイメージがイメージＴ２からイメージＴ３（第一のブロック領域にデータブロックＢが存在し、第二のブロック領域にデータブロックＤが存在するデータイメージ）に変化する。このとき、内部コピー実行プログラム２００は、データブロックＣ（更新前データ）をプライマリＶＯＬ６００からプールＶＯＬ６２０に移動させ、スナップショット管理情報３００を、プライマリＶＯＬ６００の第二のブロック領域に更新があり、その第二のブロック領域に存在していたデータブロックＣがプールＶＯＬ６２０に格納されたことを示す情報に更新する。
【００７８】
その後、プライマリＶＯＬ６００の更新が行われる前に、時刻ｔ３で、再び、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０とがスプリット状態にされる。
【００７９】
この時刻ｔ３の時点で、換言すれば、スプリット状態にされた場合に、ＣＰＵ３３は、その時刻ｔ３におけるプライマリＶＯＬ６００のイメージＴ３をバーチャルＶＯＬ６１０に論理的に保持することを目的として、プールＶＯＬ６２０に格納されている全ての更新前データを消去する。
【００８０】
また、ＣＰＵ３３は、スナップショット管理情報３００を、イメージＴ０を復元するための情報からイメージＴ３を復元するための情報に更新する。具体的には、例えば、時刻ｔ３の時点では、プライマリＶＯＬ６００において、未だ更新が行われていない状態なので、ＣＰＵ３３は、スナップショット管理情報３００を、プライマリＶＯＬ６００で更新が行われていないことを示す情報に更新する。
【００８１】
時刻ｔ４の時点でプライマリＶＯＬ６００の第二のブロック領域にデータブロックＥが上書きされると、プライマリＶＯＬ６００のデータイメージがイメージＴ３からイメージＴ４に変化する。このとき、内部コピー実行プログラム２００は、データブロックＤ（更新前データ）をプライマリＶＯＬ６００からバーチャルＶＯＬ６１０に書き込み、スナップショット管理情報３００を、プライマリＶＯＬ６００の第二のブロック領域で更新があり、且つその第二のブロック領域に存在していたデータブロックＤがプールＶＯＬ６２０に移動したことを示す情報に更新する。
【００８２】
時刻ｔ４の時点でリモートコピー処理が行われる。リモートコピー実行プログラム２１０は、転送差分ビットマップテーブル５１０を参照することにより、プライマリＶＯＬ６００の第一のブロック領域に更新が無いので、イメージＴ３を構成するデータブロックＢがプライマリＶＯＬ６００に存在することを把握し、更にプライマリＶＯＬ６００の第二のブロック領域に更新があったので、イメージＴ３を構成する別のデータブロックＤがプールＶＯＬ６２０に存在することを把握する。リモートコピー実行プログラ２１０は、プライマリＶＯＬ６００からデータブロックＢを取得し、更にプールＶＯＬ６２０からデータブロックＤを取得し、データブロックＢ及びデータブロックＤを副記憶制御装置５０に転送する。
【００８３】
時刻ｔ５の時点は、リモートコピー処理が完了した時点である。この結果、セカンダリＶＯＬ７００におけるイメージＴ０が、時刻ｔ３におけるプライマリＶＯＬ６００のイメージＴ３に更新される。つまり、セカンダリＶＯＬ７００の第一ブロック領域のデータブロックＡにデータブロックＢが上書きされ、更にセカンダリＶＯＬ７００の第二のブロック領域にデータブロックＤが書き込まれる。
【００８４】
尚、これ以降、副記憶制御装置５０は、次のスプリット時点ｔ６のイメージＴ６を構成するデータを受信するまでの期間、イメージＴ３を保存する。
【００８５】
以後、時刻ｔ３乃至時刻ｔ５において実行された上述の処理が繰り返される。
【００８６】
つまり、正記憶制御装置２０では、定期的に又は不定期的に、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０とがスプリット状態にされる。そのスプリット状態にされている期間中であって、次にスプリット状態にされる時点までに（換言すれば、内部コピー処理及びスナップショット更新処理に並行して）、リモートコピー処理が実行される。そのリモートコピー処理が完了した時点以降に、再び、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０とがスプリット状態にされ、プールＶＯＬ６２０から更新前データが消去される。このような処理が繰り返されることにより、定期的に又は不定期的になされたスプリット時点におけるプライマリＶＯＬ６００のデータイメージ（図５の例では、時刻ｔ０におけるイメージＴ０、時刻ｔ３におけるイメージＴ３、時刻ｔ６におけるイメージＴ６）をバーチャルＶＯＬ６１０に論理的に保持し、そのデータイメージをセカンダリＶＯＬ７００にコピーできる。
【００８７】
図６は本実施形態に係るスナップショット更新処理の概要を示し、より詳細には、プライマリＶＯＬ６００のデータイメージがイメージＴ３からイメージＴ４に変化し、バーチャルＶＯＬ６１０によってイメージＴ３が論理的に保持される様子を示す。
【００８８】
スナップショット管理情報３００は、差分ビットマップテーブル３１０、アドレステーブル３２０、及び差分データ制御ブロック（Differential Data Control Block）３３０を含む。
【００８９】
差分ビットマップテーブル３１０は、プライマリＶＯＬ６００内の複数のブロック領域（例えば、１ブロック領域は６４Ｋバイト）にそれぞれ対応する複数のビットを有する。例えば、イメージＴ３からイメージＴ４に変わる場合、図６に示すように、プライマリＶＯＬ６００の第一のブロック領域は、更新されないので、その第一のブロック領域に対応するビットは「０」のままであり、第二のブロック領域のデータブロックＤにデータブロックＤが上書きされるので、その第二のブロック領域に対応するビットが「０」から「１」に更新される。
【００９０】
アドレステーブル３２０は、プライマリＶＯＬ６００の複数のブロック領域にそれぞれ対応したアドレス領域を有する。あるブロック領域に対応する更新前データが存在していれば、そのあるブロック領域に対応するアドレス領域には、そのアドレス領域に対応するアドレスであって、差分データ制御ブロック３３０上のアドレスが格納される。
【００９１】
差分データ制御ブロック３３０は、例えば、プールＶＯＬ６２０内の複数のブロック領域にそれぞれ対応する管理領域を有する。各管理領域には、プールＶＯＬ６２０内のブロック領域に対応する位置に格納された更新前データがどの世代のスナップショットのデータであるかが記録される。それぞれの差分データ制御ブロック３３０は、ポインタによって他の差分データ制御ブロック３００に接続されている。本明細書では、差分データ制御ブロック３３０のキュー構造を「ＤＤＣＢキュー」と称する。また、便宜上、差分データ制御ブロック３３０を「ＤＤＣＢ」と称する場合がある。ＣＰＵ３３は、管理領域を辿ることによって、複数世代の更新前データを取得することができる。
【００９２】
尚、差分データ制御ブロック３３０の使用されていない領域は、空きキューとして管理される。空きキューは、空きキューカウンタ３４０によって管理される。
【００９３】
上述の構成により、スナップショット作成時点におけるプライマリＶＯＬ６００のデータイメージを論理的にバーチャルＶＯＬ６１０に複写できる。そして、バーチャルＶＯＬ６１０内のデータがどの世代の更新前データであるかは、差分データ制御ブロック３３０によって管理される。
【００９４】
図７は差分ビットマップテーブル３１０の詳細構成を示す。
【００９５】
差分ビットマップテーブル３１０は、ブロック情報テーブル３１１、ブロック管理詳細テーブル３１２、及びブロック管理テーブル３１３を含む。
【００９６】
ブロック管理テーブル３１３は、プライマリＶＯＬ６００内の各ブロック領域（以下、「ＢＬＫ」と記す場合がある。）について、「ＢＬＫ使用状態」、及び「初期化状態」を管理する。ＢＬＫ使用状態には、「使用」、及び「未使用」がある。「使用」は、ブロック領域が何れかのコピー系で使用されていることを示す。「未使用」は、ブロック領域が何れかのコピー系で使用されていないことを示す。「初期化状態」には、「未使用」、「未初期化０」、「未初期化１」、及び「初期化済」がある。「未使用」は、ブロック領域が確保されていないことを示す。「未初期化０」は、ブロック領域が「０」に初期化されていないことを示す。「未初期化１」は、ブロック領域が「１」に初期化されていないことを示す。「初期化済」は、ブロック領域が「０」又は「１」に初期化されていることを示す。
【００９７】
ブロック管理詳細テーブル３１２は、複数のブロック領域に関するブロック管理テーブル３１３を一纏めにしたものである。
【００９８】
ブロック情報テーブル３１１は、複数のブロック管理詳細テーブル３１２を一纏めにしたものであり、プライマリＶＯＬ６００内の各ＬＵ（Logical Unit）に属するブロック領域を管理する。
【００９９】
差分マージ状態管理テーブル３５０は、差分ビットマップテーブル３１０から転送差分ビットマップテーブル５１０へのマージ処理の有無を管理する。マージ完了フラグは、マージ処理が「実施済み」であるか、或いは「未実施」であるかを示す。マージ処理の詳細については、後述する。
【０１００】
図８は差分ビットマップテーブル３１０から転送差分ビットマップテーブル５１０へのマージ処理の概要を示す。これらのビットマップテーブル３１０，５１０の「黒」は、ビットが「１」であること、即ち、ビットオンであることを示し、「白」は、ビットが「０」であること、即ち、ビットオフであることを示す。
【０１０１】
図８（Ａ）は、プライマリＶＯＬ６００とセカンダリＶＯＬ７００とがペア状態にあり、マージ完了フラグが「未実施」にあることを示す。
【０１０２】
図８（Ｂ）は、プライマリＶＯＬ６００へのライトアクセス時におけるマージ処理を示す。プライマリＶＯＬ６００へライトアクセスがあると、ＣＰＵ３３は、マージ完了フラグを参照し、差分ビットマップテーブル３１０から転送差分ビットマップテーブル５１０へのマージ処理の有無をチェックする。
【０１０３】
マージ完了フラグは、「未実施」を示しているため、ＣＰＵ３３は、ビットのマージ処理を行い、マージ完了フラグを「実施済み」に更新する。更に、ＣＰＵ３３は、差分ビットマップテーブル３１０のビットのうちマージ処理を行ったビットを「未初期化０」に更新するとともに、プライマリＶＯＬ６００へライトアクセスがあった位置に対応するビットを「１」に更新する。
【０１０４】
図８（Ｃ）は、リモートコピー時におけるマージ処理を示す。ＣＰＵ３３は、リモートコピー実施時に差分ビットマップテーブル３１０から転送差分ビットマップテーブル５１０へのマージ処理を行い、マージ完了フラグを「実施済み」に更新する。更に、ＣＰＵ３３は、差分ビットマップテーブル３１０のビットのうちマージ処理を行ったビットを「未初期化０」に更新するとともに、転送差分ビットマップテーブル５１０のビットのうちセカンダリＶＯＬ７００へリモートコピーされたデータの位置に対応するビットを「０」に更新する。
【０１０５】
図８（Ｄ）は、リモートコピー時における転送差分ビットマップテーブル５１０のビットオフ処理を示す。ＣＰＵ３３は、転送差分ビットマップテーブル５１０を参照しながら引き続きリモートコピーを実施し、転送差分ビットマップテーブル５１０のビットのうちセカンダリＶＯＬ７００へリモートコピーされたデータの位置に対応するビットを「０」に更新する。尚、差分ビットマップテーブル３１０には、プライマリＶＯＬ６００にライトアクセスがあるまで、ビット「１」は存在しない。
【０１０６】
尚、プールＶＯＬ６２０は、バーチャルＶＯＬ６１０からセカンダリＶＯＬ７００へ更新前データをリモートコピーすることを前提に、更新前データを一時的に退避するものであるため、プールＶＯＬ６２０に退避する必要のある更新前データは、差分ビットマップテーブル３１０のビットのうちビット「１」を有し、且つ、転送差分ビットマップテーブル５１０に未だマージされていないビットに対応するブロック領域の更新前データである。プールＶＯＬ６１０に退避する更新前データをリモートコピーする必要のあるデータに限定することで、プールＶＯＬ６１０に格納されるデータ量の増加を抑制できる。
【０１０７】
一方、プールＶＯＬ７２０に保存される更新前データは、セカンダリＶＯＬ７００のデータリカバリに用いられるものであるため、セカンダリＶＯＬ７００の更新前データは、全てプールＶＯＬ７２０に保存しておく必要がある。
【０１０８】
図９は正記憶制御装置２０において実行される非同期リモートコピーのフローチャートを示す。
【０１０９】
ＣＰＵ３３は、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態をスプリット状態にし、ボリューム管理テーブル２３０を更新する（Ｓ２０１；ＹＥＳ）。
【０１１０】
プライマリＶＯＬ６００へのライトアクセスにより、新たなデータがプライマリＶＯＬ６００に書き込まれると（Ｓ２０２；ＹＥＳ）、ＣＰＵ３３は、上述した内部コピー処理、及びスナップショット更新処理を実行する（Ｓ２０３）。
【０１１１】
プライマリＶＯＬ６００へのライトアクセスと、そのライトアクセスに伴う内部コピー処理及びスナップショット更新処理は、少なくとも、スプリット状態の期間中にリモートコピーが実施されるまで繰り返される（Ｓ２０４；ＮＯ）。
【０１１２】
スプリット状態の期間中にリモートコピー処理を実行することになると（Ｓ２０４；ＹＥＳ）、ＣＰＵ３３は、マージ完了フラグを参照し、差分ビットマップテーブル３１０から転送差分ビットマップテーブル５１０へのマージ処理が未実施であるか否かをチェックする（Ｓ２０５）。
【０１１３】
マージ処理が未実施の場合には（Ｓ２０５；ＹＥＳ）、ＣＰＵ３３は、差分ビットマップテーブル３１０から転送差分ビットマップテーブル５１０へのマージ処理を行い（Ｓ２０６）、転送差分ビットマップテーブル５１０を参照し（Ｓ２０７）、リモートコピーを実施する（Ｓ２０８）。
【０１１４】
マージ処理が実施済みの場合には（Ｓ２０５；ＮＯ）、ＣＰＵ３３は、転送差分ビットマップテーブル５１０を参照し（Ｓ２０７）、リモートコピーを実施する（Ｓ２０８）。
【０１１５】
リモートコピーが完了し、再度、スプリット状態に移行すると（Ｓ２０９；ＹＥＳ）、ＣＰＵ３３は、プールＶＯＬ６２０に格納されている全ての更新前データを消去するとともに、スナップショット管理情報３００の更新情報も消去する（Ｓ２１０）。これにより、バーチャルＶＯＬ６１０もスナップショット管理情報３００も、再びスプリット状態が開始された時点におけるプライマリＶＯＬ６００のデータイメージを復元する情報に更新される。
【０１１６】
以後、Ｓ２０２乃至Ｓ２１０の処理が繰り返される。即ち、点線枠８００に示されるループが形成される。このループにおいて、例えば、スプリット状態が解除された場合、ＣＰＵ３３は、このループから抜けてＳ２０１の処理を実行する。上述した図５の処理は、点線枠８００に示されるループの処理の一例である。
【０１１７】
一方、スプリット状態が開始されておらず（Ｓ２０１；ＮＯ）、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態がコピー状態であれば（Ｓ２１１；ＹＥＳ）、プライマリＶＯＬ６００へのライトアクセスにより、新たなデータがプライマリＶＯＬ６００に書き込まれると（Ｓ２１２；ＹＥＳ）、上述した通常コピー処理が実行される（Ｓ２１３）。
【０１１８】
プライマリＶＯＬ６００とバーチャルＶＯＬ６１０とのペア状態がスプリット状態でもなく（Ｓ２０１；ＮＯ）、且つコピー状態でもない場合には（Ｓ２１１；ＮＯ）、そのときのペア状態に応じた処理が行われる（Ｓ２１４）。
【０１１９】
尚、上述の説明では、説明の便宜上、一つのＰＶＯＬ６００を一つのプールＶＯＬ６２０に対応付ける例を示したが、これに限られるものではない。正記憶制御装置２０は、複数のＰＶＯＬと、複数のプールグループとを備え、ある一つのＰＶＯＬから退避される更新前データは、ある一つのプールグループにのみに格納されるように構成されてもよい。同様に、副記憶制御装置５０は、複数のＳＶＯＬと、複数のプールグループとを備え、ある一つのＳＶＯＬから退避される更新前データは、ある一つのプールグループにのみに格納されるように構成されてもよい。プールグループは、一つ以上のＬＵ（Logical Unit）から成る記憶領域である。プールグループは、プール領域と別称することもできる。
【０１２０】
図１０はＰＶＯＬとプールグループとの対応関係を示す説明図である。同図に示すように、正記憶制御装置２０は、複数のＰＶＯＬ１，ＰＶＯＬ２，ＰＶＯＬ３と、複数のプールグループ１，２とを備える。ＰＶＯＬ１は、プールグループ１に対応付けられており、ＰＶＯＬ１からの退避データは、プールグループ１に格納される。プールグループ１は、ＬＵ１，ＬＵ２，ＬＵ３から成る記憶領域である。ＰＶＯＬ２及びＰＶＯＬ３は、プールグループ２に対応付けられており、ＰＶＯＬ２又はＰＶＯＬ３からの退避データは、プールグループ２に格納される。プールグループ２は、ＬＵ４，ＬＵ５，ＬＵ６から成る記憶領域である。
【０１２１】
図１１はプールグループ−ＰＶＯＬ対応テーブル９００を示す。プールグループ−ＰＶＯＬ対応テーブル９００は、「プールグループ＃」、「所属ＬＵ」、「ＰＶＯＬ＃」をそれぞれ対応付けて格納する。「プールグループ＃」は、プールグループの番号を示す。「所属ＬＵ」は、プールグループに所属しているＬＵの番号を示す。「ＰＶＯＬ＃」は、ＰＶＯＬの番号を示す。
【０１２２】
このように、ある一つのＰＶＯＬからの退避データを、ある一つのプールグループにのみ格納しておくことで、何れかのプールグループに障害（例えば、オーバーフローなど）が生じたとしても、他のプールグループに影響を与えることはない。
【０１２３】
次に、差分データ制御ブロック３３０のキュー管理について説明する。アドレステーブル３２０内の番号は、差分データ制御ブロック３３０の番号（以下、「ＤＤＣＢ番号」又は「ＤＤＣＢ＃」と記す。）を示す。プールＶＯＬ６２０に格納されているデータが消去されると、その消去されたデータを管理していたＤＤＣＢキューを空きキューに遷移させる必要がある。ＤＤＣＢを接続して空きキューを形成するには、以下のアルゴリズムを適用できる。
【０１２４】
（１）「新たに接続するＤＤＣＢ」のＤＤＣＢ＃±１，ＤＤＣＢ＃±２，…，又はＤＤＣＢ＃±ＮのＤＤＣＢ＃を有するＤＤＣＢが空きキューに存在するか否かをチェックする。
（２）「新たに接続するＤＤＣＢ」のＤＤＣＢ＃＋１，ＤＤＣＢ＃＋２，…，又はＤＤＣＢ＃＋ＮのＤＤＣＢ＃を有するＤＤＣＢが複数存在する場合には、「新たに接続するＤＤＣＢ」のＤＤＣＢ＃に一番近いＤＤＣＢ＃を有するＤＤＣＢの直前に「新たに接続するＤＤＣＢ」を接続する。
（３）「新たに接続するＤＤＣＢ」のＤＤＣＢ＃＋１，ＤＤＣＢ＃＋２，…，又はＤＤＣＢ＃＋ＮのＤＤＣＢ＃を有するＤＤＣＢが一つのみ存在する場合には、そのＤＤＣＢの直前に「新たに接続するＤＤＣＢ」を接続する。
（４）「新たに接続するＤＤＣＢ」のＤＤＣＢ＃−１，ＤＤＣＢ＃−２，…，又はＤＤＣＢ＃−ＮのＤＤＣＢ＃を有するＤＤＣＢが複数存在する場合には、「新たに接続するＤＤＣＢ」のＤＤＣＢ＃に一番近いＤＤＣＢ＃を有するＤＤＣＢの直後に「新たに接続するＤＤＣＢ」を接続する。
（５）新たに接続するＤＤＣＢのＤＤＣＢ＃−１，ＤＤＣＢ＃−２，…，又はＤＤＣＢ＃−ＮのＤＤＣＢ＃を有するＤＤＣＢが一つのみ存在する場合には、そのＤＤＣＢの直後に「新たに接続するＤＤＣＢ」を接続する。
（６）「新たに接続するＤＤＣＢ」のＤＤＣＢ＃±１，ＤＤＣＢ＃±２，…，又はＤＤＣＢ＃±ＮのＤＤＣＢ＃を有するＤＤＣＢが存在しない場合には、空きキューの最後尾に「新たに接続するＤＤＣＢ」を接続する。
【０１２５】
図１２及び図１３は、上述のアルゴリズムにおいて、Ｎ＝１とした例を示す。
【０１２６】
図１２（Ａ）は、初期状態を示す。何れのＤＤＣＢキューも空きキューに遷移していない。
【０１２７】
図１２（Ｂ）は、ＤＤＣＢ＃１０、ＤＤＣＢ＃５、及びＤＤＣＢ＃３のＤＤＣＢキューが空きキューに遷移した状態を示す。
【０１２８】
ＤＤＣＢ＃５のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃４又はＤＤＣＢ＃６のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃１０のＤＤＣＢしか存在しないので、ＤＤＣＢ＃５のＤＤＣＢを空きキューの最後尾に接続する。
【０１２９】
ＤＤＣＢ＃３のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃２又はＤＤＣＢ＃４のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃１０、及びＤＤＣＢ＃５しか存在しないので、ＤＤＣ＃３のＤＤＣＢを空きキューの最後尾に接続する。
【０１３０】
図１２（Ｃ）は、更に、ＤＤＣＢ＃１１、及びＤＤＣＢ＃４のＤＤＣＢキューが空きキューに遷移した状態を示す。
【０１３１】
ＤＤＣＢ＃１１のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃１０又はＤＤＣＢ＃１２のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃１０のＤＤＣＢが存在するので、ＤＤＣＢ＃１０のＤＤＣＢの直後にＤＤＣＢ＃１１のＤＤＣＢを挿入して、空きキューを形成する。
【０１３２】
ＤＤＣＢ＃４のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃３又はＤＤＣＢ＃５のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃３のＤＤＣＢが存在するので、ＤＤＣＢ＃３のＤＤＣＢの直後にＤＤＣＢ＃４のＤＤＣＢを挿入して、空きキューを形成する。
【０１３３】
図１３（Ａ）は、更に、ＤＤＣＢ＃３０、ＤＤＣＢ＃１、及びＤＤＣＢ＃２１のＤＤＣＢキューが空きキューに遷移した状態を示す。
【０１３４】
ＤＤＣＢ＃３０のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃２９又はＤＤＣＢ＃３１のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃１０、ＤＤＣＢ＃５、ＤＤＣＢ＃３、ＤＤＣＢ＃１１、ＤＤＣＢ＃４のＤＤＣＢしか存在しないので、ＤＤＣＢ＃３０のＤＤＣＢを空きキューの最後尾に接続する。
【０１３５】
ＤＤＣＢ＃１のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃０又はＤＤＣＢ＃２のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃１０、ＤＤＣＢ＃５、ＤＤＣＢ＃３、ＤＤＣＢ＃１１、ＤＤＣＢ＃４、ＤＤＣＢ＃３０のＤＤＣＢしか存在しないので、ＤＤＣＢ＃１のＤＤＣＢを空きキューの最後尾に接続する。
【０１３６】
ＤＤＣＢ＃２１のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃２０又はＤＤＣＢ＃２２のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃１０、ＤＤＣＢ＃５、ＤＤＣＢ＃３、ＤＤＣＢ＃１１、ＤＤＣＢ＃４、ＤＤＣＢ＃３０、ＤＤＣＢ＃１のＤＤＣＢしか存在しないので、ＤＤＣＢ＃２１のＤＤＣＢを空きキューの最後尾に接続する。
【０１３７】
図１３（Ｂ）は、更に、ＤＤＣＢ＃２２、ＤＤＣＢ＃２３、ＤＤＣＢ＃９、及びＤＤＣＢ８＃のＤＤＣＢキューが空きキューに遷移した状態を示す。
【０１３８】
ＤＤＣＢ＃２２のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃２１又はＤＤＣＢ＃２３のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃２１のＤＤＣＢが存在するので、ＤＤＣＢ＃２１のＤＤＣＢの直後にＤＤＣＢ＃２２のＤＤＣＢを接続して、空きキューを形成する。
【０１３９】
ＤＤＣＢ＃２３のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃２２又はＤＤＣＢ＃２４のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃２２のＤＤＣＢが存在するので、ＤＤＣＢ＃２２のＤＤＣＢの直後にＤＤＣＢ＃２３のＤＤＣＢを接続して、空きキューを形成する。
【０１４０】
ＤＤＣＢ＃９のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃８又はＤＤＣＢ＃１０のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃１０のＤＤＣＢが存在するので、ＤＤＣＢ＃１０のＤＤＣＢの直前にＤＤＣＢ＃９のＤＤＣＢを接続して、空きキューを形成する。
【０１４１】
ＤＤＣＢ＃８のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃７又はＤＤＣＢ＃９のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃９のＤＤＣＢが存在するので、ＤＤＣＢ＃９のＤＤＣＢの直前にＤＤＣＢ＃８のＤＤＣＢを接続して、空きキューを形成する。
【０１４２】
図１３（Ｃ）は、更に、ＤＤＣＢ＃２０、及びＤＤＣＢ＃１９のＤＤＣＢキューが空きキューに遷移した状態を示す。
【０１４３】
ＤＤＣＢ＃２０のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃１９又はＤＤＣＢ＃２１のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃２１のＤＤＣＢが存在するので、ＤＤＣＢ＃２１のＤＤＣＢの直前にＤＤＣＢ＃２０のＤＤＣＢを接続して、空きキューを形成する。
【０１４４】
ＤＤＣＢ＃１９のＤＤＣＢを空きキューに接続する前処理として、ＤＤＣＢ＃１８又はＤＤＣＢ＃２０のＤＤＣＢをサーチする。空きキューには、ＤＤＣＢ＃２０のＤＤＣＢが存在するので、ＤＤＣＢ＃２０のＤＤＣＢの直前にＤＤＣＢ＃１９のＤＤＣＢを接続して、空きキューを形成する。
【０１４５】
図１３（Ｃ）に示すように、空きキューを構成する複数のＤＤＣＢのうち一部のＤＤＣＢの並びはシーケンシャルになっている。複数のＤＤＣＢがシーケンシャルに連続していると、プールＶＯＬ６２０へのディスクアクセス時におけるシークタイムが短くなり、高速アクセスを実現できる。
【０１４６】
上述のアルゴリズムでは、空きキューの全てにおいて、ＤＤＣＢの並びがシーケンシャルになるとは限らない。そこで、上述のアルゴリズムを適用せずに、空きキューの全てにおいて、ＤＤＣＢの並びがシーケンシャルになるようなアルゴリズムを適用してもよい。
【０１４７】
上述の説明では、プールＶＯＬ６２０を管理するＤＤＣＢキューについて例示したが、プールＶＯＬ７２０を管理するＤＤＣＢキューについても同様に適用できる。特に、プールＶＯＬ６２０に退避されるデータは、スプリット時点におけるプライマリＶＯＬ６００のデータを更新したデータであって、且つセカンダリＶＯＬ７００へ転送されていないデータに制限できるものの、プールＶＯＬ７２０は、セカンダリＶＯＬ７００をリストアするために使用されるものであるから、プールＶＯＬ７２０に退避されるデータに制限はない。しかも、プールＶＯＬ７２０は、データが書き込まれる順序とデータが削除される順序が異なるので、プールＶＯＬ７２０を管理するＤＤＣＢキューの並びが無秩序となる。そこで、プールＶＯＬ７２０を管理するＤＤＣＢキューのキュー管理方法として、上述の方法を適用すれば、プールＶＯＬ７２０にシーケンシャルアクセスできる。副記憶制御装置５０がＲＡＩＤレベル５又は６でＲＡＩＤ管理している場合には、パリティ生成のオーバーヘッドが大幅に減るので、その効果は大きい。
【０１４８】
次に、図１４乃至図１７を参照しながら、正副を切り替える処理の流れについて説明する。正副切り替え処理は、例えば、正ホストシステム１００又は正記憶制御装置２０に障害が生じたことを契機として、実行される。正副切り替え処理は、副ホストシステム１１０から記憶制御装置３０へ正副切り替えコマンドが送信されることにより、実行される。正副切り替えコマンドは、単一のコマンドによって構成することもできるが、本実施形態では、二つのコマンド（SVOL-takeoverコマンド、及びSwap-takeoverコマンド）によって構成される例を示す。SVOL-takeoverコマンドは、正副切り替えの前処理として、プライマリＶＯＬ６００からセカンダリＶＯＬ７００への未転送データを処理するためのコマンドである。Swap-takeoverコマンドは、旧プライマリＶＯＬを新セカンダリＶＯＬに、旧セカンダリＶＯＬを新プライマリＶＯＬに切り替えるためのコマンドである。
【０１４９】
尚、図１４乃至図１７において、「ＴＣＡ」は、プライマリＶＯＬ６００とセカンダリＶＯＬ７００との間のペアを称する。「ＴＣＢ」は、バーチャルＶＯＬ６１０とセカンダリＶＯＬ７００との間のペアを称する。「ＱＳ」は、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア、又はセカンダリＶＯＬ７００とバーチャルＶＯＬ７１０との間のペアを称する。
【０１５０】
まず、図１４及び図１５を参照しながら、プライマリＶＯＬ６００へのライトアクセスがない状態で正副を切り替える処理の流れについて説明する。
【０１５１】
図１４（Ａ）は、副記憶制御装置５０が副ホストシステム１１０からSVOL-takeoverコマンドを受信した時点での各ボリュームのペア状態を示す。プライマリＶＯＬ６００とセカンダリＶＯＬ７００との間のペア状態は「ＰＡＩＲ」、バーチャルＶＯＬ６１０とセカンダリＶＯＬ７００との間のペア状態は「ＰＡＩＲ」、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態は「ＰＳＵＳ」、セカンダリＶＯＬ７００とバーチャルＶＯＬ７１０との間のペア状態は「ＰＳＵＳ」である。
【０１５２】
図１４（Ｂ）に示すように、副記憶制御装置５０は、SVOL-takeoverコマンドを受信すると、正記憶制御装置２０にＳＳＷＳコマンドを送信する。ＳＳＷＳコマンドとは、プライマリＶＯＬ６００からセカンダリＶＯＬ７００への未転送データがあるか否かを正記憶制御装置２０に問い合わせ、未転送データがある場合には、その未転送データを副記憶制御装置５０に転送することを要求するコマンドである。各ボリューム間のペア状態に変化はない。
【０１５３】
図１４（Ｃ）に示すように、正記憶制御装置２０は、副記憶制御装置５０からＳＳＷＳコマンドを受信すると、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態を「ＰＳＵＳ」→「ＰＡＩＲ」→「ＰＳＵＳ」に変更するとともに、バーチャルＶＯＬ６１０とセカンダリＶＯＬ７００との間のペア状態を「ＰＡＩＲ」→「ＰＳＵＳ」→「ＰＡＩＲ」に変更することにより、バーチャルＶＯＬ６１０内のデータがその時点（プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態が「ＰＳＵＳ」に変更された時点）のプライマリＶＯＬ６００のデータで更新され、更新前後の差分データがバーチャルＶＯＬ６１０からセカンダリＶＯＬ７００へ転送される。
【０１５４】
図１４（Ｄ）に示すように、バーチャルＶＯＬ６１０からセカンダリＶＯＬ７００への差分データ転送が完了すると、ストレージシステム１０は、バーチャルＶＯＬ６１０とセカンダリＶＯＬ７００との間のペア状態を「ＰＡＩＲ」から「ＳＳＷＳ」に変更するとともに、バーチャルＶＯＬ７１０のボリューム状態を「ＳＭＰＬ」に変更する。「ＳＭＰＬ」は、どのボリュームとも正副関係のない状態を示す。
【０１５５】
図１４（Ｅ）に示すように、ストレージシステム１０は、セカンダリＶＯＬ７００の状態を「ＳＳＷＳ」に変更する。「ＳＳＷＳ」は、セカンダリＶＯＬ７００がリード／ライト可能な状態を示す。この状態では、セカンダリＶＯＬ７００のデータは、前回の確定内容にリストアされる。
【０１５６】
図１５（Ａ）に示すように、憶制御装置５０が副ホストシステム１１０からSwap-takeoverコマンドを受信すると、副記憶制御装置５０は、旧セカンダリＶＯＬ７００を新プライマリＶＯＬ７００Ａに切り替えるとともに、旧プライマリＶＯＬ６００を新セカンダリＶＯＬ６００Ａに切り替える処理（正副切り替え処理）を実行する。このとき、仮に正記憶制御装置２０がバーチャルＶＯＬ６１０内のスナップショットを用いて、新プライマリＶＯＬ６００Ａのデータをリストアしている場合には、そのリストアが完了するのを持って、図１５（Ｂ）の状態に遷移する。
【０１５７】
図１５（Ｂ）に示すように、新セカンダリＶＯＬ６００ＡとバーチャルＶＯＬ６１０との間のペア状態が「ＳＭＰＬ」に変更されるとともに、新プライマリＶＯＬ７００ＡとバーチャルＶＯＬ６１０との間のペア状態が「ＳＭＰＬ」に変更される。
【０１５８】
図１５（Ｃ）に示すように、正記憶制御装置２０から副記憶制御装置５０へ転送差分ビットマップテーブル５１０が転送され、転送差分ビットマップテーブル５１０が転送差分ビットマップテーブル５２０にマージされる。
【０１５９】
図１５（Ｄ）に示すように、転送差分ビットマップテーブル５２０に基づいて、副記憶制御装置５０が新セカンダリＶＯＬ６００Ａに差分データを書き込む処理（初期コピー）が実行される。
【０１６０】
図１５（Ｅ）は、初期コピー完了後の各ボリュームのペア状態を示す。旧プライマリＶＯＬ６００用のバーチャルＶＯＬ６１０は、新セカンダリＶＯＬ６００Ａ用のバーチャルＶＯＬ６１０Ａに切り替えられとともに、旧セカンダリＶＯＬ７００用のバーチャルＶＯＬ７１０は、新プライマリＶＯＬ７００Ａ用のバーチャルＶＯＬ７１０Ａに切り替えられる。新プライマリＶＯＬ７００Ａと新セカンダリＶＯＬ６００Ａとの間のペア状態は「ＰＡＩＲ」になり、新セカンダリＶＯＬ６００ＡとバーチャルＶＯＬ７１０Ａとの間のペア状態は「ＰＡＩＲ」になる。副記憶制御装置５０は、副ホストシステム１１０からのライトアクセスを受け付けることができる。
【０１６１】
次に、図１６を参照しながら、プライマリＶＯＬ６００へのライトアクセスがある状態で正副を切り替える処理の流れについて説明する。
【０１６２】
図１６（Ａ）は、副記憶制御装置５０が副ホストシステム１１０からSVOL-takeoverコマンドを受信した時点での各ボリュームのペア状態を示す。プライマリＶＯＬ６００とセカンダリＶＯＬ７００との間のペア状態は「ＰＡＩＲ」、バーチャルＶＯＬ６１０とセカンダリＶＯＬ７００との間のペア状態は「ＰＡＩＲ」、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態は「ＰＳＵＳ」、セカンダリＶＯＬ７００とバーチャルＶＯＬ７１０との間のペア状態は「ＰＳＵＳ」である。
【０１６３】
図１６（Ｂ）に示すように、副記憶制御装置５０は、SVOL-takeoverコマンドを受信すると、正記憶制御装置２０にＳＳＷＳコマンドを送信する。各ボリューム間のペア状態に変化はない。
【０１６４】
図１６（Ｃ）に示すように、正記憶制御装置２０は、副記憶制御装置５０からＳＳＷＳコマンドを受信すると、プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態を「ＰＳＵＳ」→「ＰＡＩＲ」→「ＰＳＵＳ」に変更するとともに、バーチャルＶＯＬ６１０とセカンダリＶＯＬ７００との間のペア状態を「ＰＡＩＲ」→「ＰＳＵＳ」→「ＰＡＩＲ」に変更することにより、バーチャルＶＯＬ６１０内のデータがその時点（プライマリＶＯＬ６００とバーチャルＶＯＬ６１０との間のペア状態が「ＰＳＵＳ」に変更された時点）のプライマリＶＯＬ６００のデータで更新され、更新前後の差分データがバーチャルＶＯＬ６１０からセカンダリＶＯＬ７００へ転送される。
【０１６５】
図１６（Ｄ）に示すように、正記憶制御装置２０は、正ホストシステム１００からライトアクセスを受けると、ＰＶＯＬ６００のデータ更新位置に対応する差分ビットマップテーブル３１０のビットをオンにする。プライマリＶＯＬ６００とセカンダリＶＯＬ７００との間のペア状態は「ＰＳＵＳ」である。正ホストシステム１００からのライトアクセスによるプライマリＶＯＬ６００のデータ更新については、正記憶制御装置２０は、プライマリＶＯＬ６００のデータ更新位置を差分ビットマップテーブル３１０で追跡するのみで、スナップショットの作成は行わない。
【０１６６】
図１６（Ｅ）に示すように、バーチャルＶＯＬ６１０からセカンダリＶＯＬ７００への差分データ転送が完了すると、ストレージシステム１０は、バーチャルＶＯＬ６１０とセカンダリＶＯＬ７００との間のペア状態を「ＰＡＩＲ」から「ＳＳＷＳ」に変更するとともに、バーチャルＶＯＬ７１０のボリューム状態を「ＳＭＰＬ」に変更する。
【０１６７】
図１６（Ｆ）に示すように、ストレージシステム１０は、セカンダリＶＯＬ７００の状態を「ＳＳＷＳ」に変更する。「ＳＳＷＳ」は、セカンダリＶＯＬ７００がリード／ライト可能な状態を示す。この状態では、セカンダリＶＯＬ７００のデータは、前回の確定内容にリストアされる。
【０１６８】
その後、正副切り替え処理は、図１５に示す処理に移行する。図１５に示す処理の詳細については、既述してあるので、ここでの説明は省略する。
【０１６９】
次に、図１７を参照しながら、正記憶制御装置２０の状態が不明の状態で正副を切り替える処理の流れについて説明する。
【０１７０】
図１７（Ａ）は、副記憶制御装置５０が副ホストシステム１１０からSVOL-takeoverコマンドを受信した時点での各ボリュームのペア状態を示す。
【０１７１】
図１７（Ｂ）に示すように、副記憶制御装置５０は、SVOL-takeoverコマンドを受信すると、正記憶制御装置２０にＳＳＷＳコマンドを送信する。ところが、正記憶制御装置２０は、障害等が生じているので、ＳＳＷＳコマンドに対する応答が返ってこないまま、タイムアウトになる。
【０１７２】
図１７（Ｃ）に示すように、副記憶制御装置５０は、バーチャルＶＯＬ７１０に論理的に保持されているスナップショットを用いてセカンダリＶＯＬ７００のデータをリストアする。セカンダリＶＯＬ７００は、最新のスナップショットを取得した時刻におけるデータイメージにまで復元できる。副記憶制御装置５０は、セカンダリＶＯＬ７００の状態を「ＳＳＷＳ」に変更する。
【０１７３】
図１７（Ｄ）に示すように、副記憶制御装置５０は、バーチャルＶＯＬ７１０の状態を「ＳＭＰＬ」に変更する。
【０１７４】
正ホストシステム１００又は正記憶制御装置２０に障害が生じた場合に、上述した正副切り替え処理を実行することにより、副ホストシステム１１０及び副記憶制御装置５０を稼働系システムとして運用することができる。
【図面の簡単な説明】
【０１７５】
【図１】本実施形態に係るストレージシステムのシステム構成図である。
【図２】各種マイクロプログラム及びボリューム管理テーブルの説明図である。
【図３】ボリューム管理テーブルの説明図である。
【図４】非同期リモートコピーの処理概要を示す説明図である。
【図５】非同期リモートコピーの処理シーケンスを示す説明図である。
【図６】スナップショット更新処理の概要を示す説明図である。
【図７】差分ビットマップテーブルの詳細構成図である。
【図８】マージ処理の概要を示す説明図である。
【図９】非同期リモートコピーのフローチャートを示す説明図である。
【図１０】ＰＶＯＬとプールグループとの対応関係を示す説明図である。
【図１１】プールグループ−ＰＶＯＬ対応テーブルの説明図である。
【図１２】差分データ制御ブロックのキュー管理の概要を示す説明図である。
【図１３】差分データ制御ブロックのキュー管理の概要を示す説明図である。
【図１４】プライマリＶＯＬへのライトアクセスがない場合のSVOL-takeovber処理を示す説明図である。
【図１５】Swap-Takeover処理を示す説明図である。
【図１６】プライマリＶＯＬへのライトアクセスがある場合のSVOL-takeovber処理を示す説明図である。
【図１７】正記憶制御装置に障害が生じている場合のSVOL-takeovber処理を示す説明図である。
【符号の説明】
【０１７６】
１０…ストレージシステム  ２０…正記憶制御装置  ５０…副記憶制御装置  ３００，４００…スナップショット管理情報  ３１０，４１０Ａ、４１０Ｂ…差分ビットマップテーブル  ５１０，５２０…転送差分ビットマップテーブル  ６００…ＰＶＯＬ  ７００…ＳＶＯＬ  ６１０，７１０…バーチャルＶＯＬ  ６２０，７２０…プールＶＯＬ
【図１】
0004800056.tif 000002
【図２】
0004800056.tif 000003
【図３】
0004800056.tif 000004
【図４】
0004800056.tif 000005
【図５】
0004800056.tif 000006
【図６】
0004800056.tif 000007
【図７】
0004800056.tif 000008
【図８】
0004800056.tif 000009
【図９】
0004800056.tif 000010
【図１０】
0004800056.tif 000011
【図１１】
0004800056.tif 000012
【図１２】
0004800056.tif 000013
【図１３】
0004800056.tif 000014
【図１４】
0004800056.tif 000015
【図１５】
0004800056.tif 000016
【図１６】
0004800056.tif 000017
【図１７】
0004800056.tif 000018