(57)【要約】【課題】コピーペアを構成する記憶装置システム間でコピー方向を一方向に固定せずに双方向にコピーを行えるようにする。【解決手段】コピーペアを構成する記憶装置システム１０７０、１０８０は、データ一貫性保持制御部２０４０を設ける。データ一貫性保持制御部２０４０は、上位装置から受領した書き込みデータとＤＫＣＩ／Ｆを介して他の記憶装置システムから受信した書き込みデータとが物理記憶装置の同一格納場所に重複して書き込まれるときに上位装置から書き込みデータを受領した受領時刻の順に書き込まれるように、コピーペアを形成する論理ボリュームへの書き込みデータを対応する受領時刻から所定時間以上キャッシュ部２０５０に待機させた後に物理記憶装置に書き込むよう制御する。【選択図】図４
2004334434.tif 000002
【特許請求の範囲】
【請求項１】
複数の上位装置と、少なくとも１つの前記上位装置から書き込みデータを受け取る複数の記憶装置システムとを有するコンピュータシステムにおける前記記憶装置システムであって、
前記記憶装置システムは、複数の前記記憶装置システムに亘って同一のデータが保存されるように制御される論理ボリュームに対応して前記論理ボリューム上のデータを記録する物理記憶装置と、前記上位装置から前記書き込みデータを受け取った受領時刻を保存する手段と、前記論理ボリュームへの書き込みデータと対応する前記受領時刻とを他の前記記憶装置システムへ送信し他の前記記憶装置システムから書き込みデータと対応する前記受領時刻とを受信する通信インタフェース手段と、前記上位装置から受領した書き込みデータと前記通信インタフェース手段を介して受信した書き込みデータとが前記物理記憶装置の同じ格納場所に重複して書き込まれるときに前記受領時刻の順に書き込まれるように、前記論理ボリュームへの書き込みデータを対応する前記受領時刻から所定時間以上一時記憶装置上に待機させた後に前記物理記憶装置に書き込むよう制御するデータ一貫性保持制御手段とを有することを特徴とする記憶装置システム。
【請求項２】
前記記憶装置システムは、さらに前記一時記憶装置に待機中の各書き込みデータに対応する前記受領時刻を前記受領時刻の古いものから順に配列したテーブルと、前記テーブルの先頭から順に、受領時刻から前記所定時間以上経過した書き込みデータを探索する手段とを有することを特徴とする請求項１記載の記憶装置システム。
【請求項３】
前記記憶装置システムは、さらに書き込みデータの各ブロックが前記一時記憶装置に存在するか否かをビット値で設定するビットマップテーブルと、前記ビットマップテーブルを参照して新しい書き込みデータが他の書き込みデータと前記同じ格納場所に重複して書き込まれるか否かを判定する手段とを有することを特徴とする請求項１記載の記憶装置システム。
【請求項４】
前記記憶装置システムは、さらに前記上位装置から前記論理ボリュームの一部領域をロックする要求を受領して前記一部領域をロックする手段と、前記通信インタフェース手段を介して受領した前記ロック要求を他の前記記憶装置システムへ送信する手段と、前記通信インタフェース手段を介して他の前記記憶装置システムからロック要求を受領して指定された一部領域をロックする手段と、前記一部領域に対する前記上位装置及び他の前記記憶装置システムからの書き込みデータの要求を、当該一部領域をロックした上位装置からの要求である場合を除いて拒絶する手段とを有することを特徴とする請求項１記載の記憶装置システム。
【請求項５】
複数の上位装置と、少なくとも１つの前記上位装置から書き込みデータを受け取る複数の記憶装置システムとを有するコンピュータシステムにおける前記記憶装置システムであって、
前記記憶装置システムは、複数の前記記憶装置システムに亘って同一のデータが保存されるように制御される論理ボリュームに対応して前記論理ボリューム上のデータを記録する物理記憶装置と、前記上位装置から前記書き込みデータを受け取った受領時刻を保存する手段と、前記論理ボリュームへの書き込みデータと対応する前記受領時刻とを他の前記記憶装置システムへ送信し他の前記記憶装置システムから書き込みデータと対応する前記受領時刻とを受信する通信インタフェース手段と、前記上位装置からの前記書き込みデータ及び他の前記記憶装置システムからの前記書き込みデータの各々に対応する前記受領時刻の古いものから順に配列したテーブルと、前記テーブルを参照し、前記論理ボリュームへの書き込みデータについて前記受領時刻から所定時間以上経過した書き込みデータを前記受領時刻の古い順に前記物理記憶装置に書き込むよう制御するデータ一貫性保持制御手段とを有することを特徴とする記憶装置システム。
【請求項６】
前記記憶装置システムは、さらに前記上位装置から前記論理ボリュームの一部領域をロックする要求を受領して前記一部領域をロックする手段と、前記通信インタフェース手段を介して受領した前記ロック要求を他の前記記憶装置システムへ送信する手段と、前記通信インタフェース手段を介して他の前記記憶装置システムからロック要求を受領して指定された一部領域をロックする手段と、前記一部領域に対する前記上位装置及び他の前記記憶装置システムからの書き込みデータの要求を、当該一部領域をロックした上位装置からの要求である場合を除いて拒絶する手段とを有することを特徴とする請求項５記載の記憶装置システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、記憶装置システムに係わり、特にある記憶装置システムから他の記憶装置システムへのコピーを双方向に行う技術に関する。
【０００２】
【従来の技術】
上位装置であるホストコンピュータ及び複数の記憶装置システム（ストレージシステム）を有する情報システムにおいて、記憶装置システム間でのデータコピーを行う技術として、リモートコピーがある。リモートコピーとは、情報処理システムにおいて、上位装置が介在することなしに、物理的に離れた場所にある複数の記憶装置システムの間でデータのコピー、すなわち２重書きを行う技術である。記憶装置システムとは、複数の記憶装置及びそれらの記憶装置を制御するコントローラとから構成されるシステムを指す。リモートコピーを行う情報処理システムは、物理的に離れた場所にそれぞれ配置される記憶装置システムが専用回線あるいは公衆回線でお互いに接続されている。この接続に用いられる専用線あるいは公衆回線をリモートコピーラインという。
【０００３】
ある記憶装置システムが有する論理的な記憶領域（以下、「論理ボリューム」という）のうち、リモートコピーの対象となる論理ボリューム（以下、「コピー元論理ボリューム」という）の容量と同容量の論理ボリュームがコピーされる他の記憶装置システムに確保される。この確保された論理ボリューム（以下、「コピー先論理ボリューム」という）は、コピー元論理ボリュームと一対一の対応関係（以下、「コピーペア」という）を有するように形成される。コピー元論理ボリュームのデータは、専用回線または公衆回線を介してコピー先論理ボリュームにコピーされる。コピー元論理ボリュームに含まれるデータの更新があった場合、更新されたデータは専用回線等を介してコピー先論理ボリュームを有する記憶装置システムに転送され、コピー元論理ボリュームに対応するコピー先論理ボリュームにも更新されたデータが書き込まれる。リモートコピーの技術を用いると、複数の記憶装置システムを有する情報処理システムにおいて、複数の記憶装置システムで同一内容の論理ボリュームを保持する事ができる。
【０００４】
コピー元とコピー先というコピーペアを形成することによって、コピー元からコピー先へとコピー方向が一方方向に決定される。コピー元論理ボリュームには、上位装置より書き込み処理ができる。逆にコピー先論理ボリュームは、上位装置の書き込み処理はできない。
【０００５】
仮にコピーの方向を一方方向に固定せずにコピーペアを構成している記憶装置システムへの書き込みを可能とすると、それぞれの記憶装置システム内のデータの内容を同一に保つことができない。これは上位装置が記憶装置に書き込みを行い、その後に書き込み内容をコピー先の記憶装置に書き込むときのコピーデータの転送に要する転送時間のためである。
【０００６】
具体的に２つの記憶装置システムＡ、記憶装置システムＢの間でコピーペアが形成されている環境を例にとって説明を行う。ここで記憶装置システムＡと記憶装置システムＢは地理的に十分離れており、上位装置より記憶装置システムＡにデータが書き込みされ、次に記憶装置システムＡから記憶装置システムＢへ２重化データを転送し書き込むまでに例えば１秒以上時間がかかるものとする。
【０００７】
ここでほぼ同時刻に記憶装置システムＡと記憶装置システムＢの同じ領域にそれぞれの上位装置から異なる内容（それぞれ内容Ａ、内容Ｂ）の書き込みがあったとすると、記憶装置システムＡ、記憶装置システムＢには、それぞれ内容Ａ、内容Ｂが書き込まれる。それぞれ書き込み終了後、ほぼ同じタイミングで記憶装置システムＡから記憶装置システムＢへ、また記憶装置システムＢから記憶装置システムＡへ、内容Ａ、内容Ｂが転送される。このような状況では、記憶装置システムＡ、記憶装置システムＢが転送データを受領後、記憶装置システムＡ、記憶装置システムＢにそれぞれ内容Ｂ、内容Ａが書き込まれることになる。記憶装置システムＡ内は内容Ａの上に内容Ｂが上書きされた状態となり、記憶装置システムＢ内は内容Ｂの上に内容Ａが上書きされた状態となる。このような場合、記憶装置システムＡ、記憶装置システムＢ内の書き込まれた内容は異なったものとなり、ボリュームの２重化が正常に行われていないことになってしまう。
【０００８】
このような状態を避け、ボリュームの完全な二重化を実現するために、コピー先、コピー元というようにコピー方向が一方方向に決められる。リモートコピーに関する技術は、米国特許５，７４２，７９２号公報（特許文献１）に開示されている。
【０００９】
従来、複数の上位装置から共有される記憶装置は、任意の上位装置からの共有排他制御要求に基づき、個々の上位装置からのアクセス要求に対する共有排他制御を実現している。例えば上位装置と記憶装置とのインターフェースとしてＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）を採用する情報システムは、ＳＣＳＩで規定するリザーブ系のコマンドを用いて、前記記憶装置の論理ボリューム単位での共有排他制御を実現することができる。ある上位装置が論理ボリュームをリザーブした際には、リザーブした上位装置からのみのリードアクセス、ライトアクセスが可能な状態となる。
【００１０】
ＳＣＳＩリザーブ系コマンドにおいて、ディスクのブロック単位で共有排他制御を行えるような拡張コマンドも用意されている。この論理ボリューム上の一部の領域（エクステント）をリザーブするＳＣＳＩコマンドはエクステント・リザーブ（以下、「領域リザーブ」という）と定義されている。リザーブされる領域は、リザーブ属性をもつ。リザーブ属性は、リード・シェア、排他ライト、排他リード、排他アクセスが可能である。ＳＣＳＩ−２に関する技術は、１９９７年２月１日第３版ＣＱ出版ＳＣＳＩ−２詳細解説の項目６．１５（非特許文献１）で説明されている。
【００１１】
現状のリモートコピー技術環境では、ＳＣＳＩのリザーブ系コマンドによる共有排他制御機構は考慮されておらず、ある記憶装置システム中の論理ボリュームをリザーブコマンドによりロックした際も他の記憶装置システム内のリモートコピー対応論理ボリュームにはロックの状態が伝わらない。
【００１２】
【特許文献１】
米国特許５，７４２，７９２号公報
【非特許文献１】
ＳＣＳＩ−２詳細解説、第３版、項目６．１５、ＣＱ出版、１９９７年２月１日発行
【００１３】
【発明が解決しようとする課題】
上記従来技術のリモートコピーは、コピー元論理ボリュームのみにしか上位装置より書き込みができないという問題があった。またリモートコピー対応論理ボリュームにはリザーブ系コマンドによるロック状態が伝わらないという問題があった。
【００１４】
本発明の第１の目的は、コピーペアを構成する記憶装置システム間でコピー方向を一方向に固定せず、双方向にコピーを行うよう制御することにある。
【００１５】
本発明の第２の目的は、双方向コピーの下でリザーブ系コマンドによるリザーブ状態をリモートコピーが実施されている記憶装置システム間で伝播させることにある。
【００１６】
【課題を解決するための手段】
本発明は、記憶装置システム間での双方向コピーを可能とするために、コピーペアを構成する記憶装置システムにデータ一貫性保持制御手段を設ける。このデータ一貫性保持制御手段は、上位装置から受領した書き込みデータと通信インタフェース手段を介して他の記憶装置システムから受信した書き込みデータとが物理記憶装置の同じ格納場所に重複して書き込まれるときに上位装置から書き込みデータを受領した受領時刻の順に書き込まれるように、コピーペアを形成する論理ボリュームへの書き込みデータを対応する受領時刻から所定時間以上一時記憶装置上に待機させた後に物理記憶装置に書き込むよう制御する。
【００１７】
また本発明の記憶装置システムは、さらに上位装置から論理ボリュームの一部領域をロックする要求を受領してその一部領域をロックする手段と、通信インタフェース手段を介して受領したロック要求を他の記憶装置システムへ送信する手段と、通信インタフェース手段を介して他の記憶装置システムからロック要求を受領して指定された一部領域をロックする手段と、この一部領域に対する上位装置及び他の記憶装置システムからの書き込みデータの要求を、当該一部領域をロックした上位装置からの要求である場合を除いて拒絶する手段とを有する。
【００１８】
【発明の実施の形態】
（１）第１の実施例
以下、双方向コピーに係る第１の実施例について図面を参照して説明する。
【００１９】
図１は、本実施形態のコンピューターシステム１１００の構成図である。コンピューターシステム１１００は、記憶装置システム１０７０にＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１０４０を介して接続された複数の上位装置１０００、上位装置１０１０からなるサイト１１１０と、記憶装置システム１０８０にＳＡＮ１０５０を介して接続された複数の上位装置１０２０、上位装置１０３０からなるサイト１１２０で構成されている。記憶装置システム１０７０と記憶装置システム１０８０は、専用回線あるいは公衆回線を用いたリモートコピーライン１０６０で接続されている。記憶装置システム１０７０及び記憶装置システム１０８０は、リモートコピーライン１０６０を介してＳＣＳＩプロトコルを用いて互いに通信することができる。
【００２０】
図２は、図１で示すコンピューターシステム１１００において双方向コピーが実施されている状態を説明する図である。図２において、上位装置１０１０は、記憶装置システム１０７０に対してデータの書き込みＢ１２００を行う。書き込みＢ１２００のデータは記憶装置システム１０７０に記憶された後、リモートコピーライン１０６０を介して、データが送信され（矢印１２４０）、記憶装置システム１０８０にコピーされる。同様に、上位装置１０２０から記憶装置システム１０８０への書き込みＣ１２１０も、リモートコピーライン１０６０を介したデータ送信（矢印１２３０）が行われ、記憶装置システム１０７０にコピーされる。同様に、上位装置１０３０から記憶装置システム１０８０への書き込みＤ１２２０も、リモートコピーライン１０６０を介したデータ送信（矢印１２５０）が行われ、記憶装置システム１０７０にコピーされる。つまり各上位装置１０１０、１０２０及び１０３０のそれぞれの書き込みＢ１２００、Ｃ１２１０及びＤ１２２０はそれぞれのサイトの記憶装置システムに書き込まれ、次に上位装置を介さずに相手サイトの記憶装置システムにコピーされる。
【００２１】
図３は、記憶装置システム１０７０のハードウェア構成を示している。なお記憶装置システム１０７０は、ディスクアレイ装置や、半導体記憶装置などを含んでいてもよい。記憶装置システム１０７０は、ホストＩ／Ｆ１３００、ＤＫＣＩ／Ｆ１３２０、ディスク制御部１３５０、共有メモリ１３６０、キャッシュメモリ１３４０、これらの間を通信可能に接続するクロスバススイッチなどで構成されるスイッチング制御部１３３０、タイマー１３１０、物理ディスク１３７０及びプロセッサ１３８０などで構成される。
【００２２】
ホストＩ／Ｆ１３００は、ＣＰＵ、メモリを備え、少なくとも１つの上位装置との間の通信を制御する。ホストＩ／Ｆ１３００は、上位装置からのデータＩ／Ｏ要求を受信してそのデータＩ／Ｏ要求を共有メモリ１３６０に書き込む。なおリモートコピーの機能は、ＤＫＣＩ／Ｆ１３２０のＣＰＵがこの機能を実現するプログラムを実行することにより提供される。
【００２３】
キャッシュメモリ１３４０は、主としてホストＩ／Ｆ１３００、ＤＫＣＩ／Ｆ１３２０とディスク制御部１３５０との間で授受されるデータを一時的に記憶するために用いられる。例えばホストＩ／Ｆ１３００が上位装置から受信したデータ入出力コマンドが書き込みコマンドである場合には、ホストＩ／Ｆ１３００は上位装置から受信した書き込みデータをキャッシュメモリ１３４０に書き込む。またディスク制御部１３５０はキャッシュメモリ１３４０から書き込みデータを読み出して物理ディスク１３７０に書き込む。
【００２４】
ディスク制御部１３５０は、ＣＰＵ、メモリを備え、ホストＩ／Ｆ１３００やＤＫＣＩ／Ｆ１３２０より共有メモリ１３６０に書き込まれたＩ／Ｏ要求を読み出してそのＩ／Ｏ要求に設定されているコマンド（本実施形態ではＳＣＳＩ規格のコマンド）にしたがって、物理ディスク１３７０にデータの書き込みや読み出しなどの処理を実行する。ディスク制御部１３５０は、読み出しコマンドの場合は、物理ディスク１３７０から読み出したデータをキャッシュメモリ１３４０に書き込む。またデータの書き込み完了通知や読み出し完了通知などをホストＩ／Ｆ１３００に送信する。ディスク制御部１３５０は、物理ディスク１３７０をいわゆるＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）方式のＲＡＩＤレベル（例えば、０、１、５）に従って、複数の物理ディスクに一つの論理ボリュームを分散配置する機能を備えることもある。
【００２５】
物理ディスク１３７０は、例えばハードディスク装置など書き込みデータを最終的に記録する物理記憶装置である。物理ディスク１３７０は記憶装置システムと一体型とすることも出来るし別筐体とすることもできる。ＤＫＣＩ／Ｆ１３２０は、ＣＰＵ、メモリを備え、他の記憶装置システムとの間でデータ転送をするための通信インターフェースであり、リモートコピーにおける他の記憶装置システムへのデータの転送は、このＤＫＣＩ／Ｆ１３２０を介して行われる。それぞれの記憶装置システムは１つのタイマー１３１０を持ち、それぞれのタイマーは、できる限り同一の時刻になるように調整されているものとする。タイマー１３１０はホストＩ／Ｆ１３００が上位装置よりＩ／Ｏの受付がなされた時刻を記録するためなどに用いられる。
【００２６】
プロセッサ１３８０は、ＣＰＵ、メモリを備え、ホストＩ／Ｆ１３００、ＤＫＣＩ／Ｆ１３２０、ディスク制御部１３５０以外の後述するプログラムを実行する。
【００２７】
図４は、本実施形態の双方向リモートコピーに関するソフトウエア構成を示す図である。本構成は、記憶装置システムの双方向リモートコピーを実現するために、メイン制御２０２０、キャッシュ部２０５０およびデータ一貫性保持制御部２０４０の各プログラムを備える。これらのプログラムは、プロセッサ１３８０によって実行される。またメモリ上にビットマップテーブル２０３０を備える。
【００２８】
メイン制御２０２０は、ホストＩ／Ｆ１３００から入出力要求を受け取り、データ一貫性保持制御部２０４０及びキャッシュ部２０５０を起動し、入出力処理の結果をホストＩ／Ｆ１３００へ返す。またＤＫＣＩ／Ｆ１３２０を介する入出力要求の受け渡しを制御する。
【００２９】
ビットマップテーブル２０３０は、リモートコピーの対象である物理ディスク上の１ブロックが１ビットに対応するようビットマップ化したテーブルである。ビットマップテーブル２０３０は、ビット値０、ビット値１の２つの状態を持つ。値０は、該当ビットに対応するディスクのブロックのデータがキャッシュメモリ１３４０上にキャッシュされていない状態を表す。値１は、該当ビットに対応するディスクのブロックのデータがキャッシュメモリ１３４０上にデータがキャッシュされており、キャッシュ上に最新のデータがある状態を表す。
【００３０】
キャッシュ部２０５０は、ホストＩ／Ｆ１３００及びＤＫＣＩ／Ｆ１３２０からの書き込みデータをキャッシュメモリ１３４０に書き込む処理を行うプログラムである。キャッシュには書き込みデータのキャッシュ以外に、リードキャッシュがある。リードキャッシュ技術は、上位装置が記憶装置システム内のデータをリードする際に、物理ディスク１３７０へ直接アクセスし参照データをリードするよりも素早くリードデータを上位装置へ受け渡しができるように、キャッシュメモリ１３４０上に、頻繁にアクセスのあるデータをキャッシュデータとして持つ技術である。しかし本実施形態では、本発明の特徴を明確にするためにキャッシュ部２０５０は、書き込みデータのキャッシュ制御のみ行うものとする。
【００３１】
データ一貫性保持制御部２０４０は、入出力要求がデータ書き込みに関するものであるときに起動され、ビットマップテーブル２０３０に基づいて双方向コピーが実施される記憶装置システムの間でデータの一貫性が保持されるように制御する。
【００３２】
ホストＩ／Ｆ１３００  、ＤＫＣＩ／Ｆ１３２０からの記憶装置システムへの書き込みデータは、キャッシュメモリ１３４０上で一定時間保持された後に、ディスク制御部１３５０を介して物理ディスク１３７０に書き込まれる。データ一貫性保持制御部２０４０は、書き込みデータをキャッシュに保持する時間を監視制御する。この時間は、書き込みデータがコピー先に送信される転送時間及び本発明における制御処理にかかる時間を考慮した十分長い時間とする。
【００３３】
本実施例では、ホストＩ／Ｆ１３００が上位装置からの書き込み要求を受けた時刻より、３分間はキャッシュメモリ１３４０上に保持する。データ一貫性保持制御部２０４０は、３分以上キャッシュメモリ１３４０上にある書き込みデータを、コピーペアを構成する記憶装置システム間でほぼ同じ時刻に一斉に物理ディスク１３７０へ書き込むよう制御する。この一斉書き込みは、１分ごとに行われる。例えば時刻が００時００分００秒、００時０１分００秒、００時０２分００秒のとき一斉書き込みが行われる。つまり３分以上４分未満キャッシュメモリ１３４０上でキャッシュされたデータは、時刻００秒のディスクへの書き込み処理の際に、物理ディスク１３７０へ書き込まれる。以下、この１分ごとに行われる物理ディスク１３７０への書き込み処理を「一斉書き込み処理」と呼ぶ。
【００３４】
物理ディスク１３７０に書き込み内容を書き込む際には、コピーペアの記憶装置システム内のタイマー１３１０は、できる限り同一の時刻になるよう時刻合わせがされており、物理ディスク１３７０に書き込む内容は３分後にはまったく同じものとなるように制御される。これによって各記憶装置システムは、同一データをほぼ同じタイミングで物理ディスク１３７０に書き込む。
【００３５】
図５は、データ一貫性保持制御部２０４０が保持するデータ一貫性保持テーブル１００のデータ形式を示す図である。データ一貫性保持テーブル１００は、テーブル管理番号１０１、受領時刻１０２、上位装置認識番号１０３、対象ブロック開始アドレス１０４、対象サイズ１０５、ストレージシリアル番号１０６及びキャッシュデータ格納アドレス１０７という項目によって構成される。
【００３６】
受領時刻１０２は、ホストＩ／Ｆ１３００が上位装置より書き込みデータを受領した時刻を格納する。上位装置認識番号１０３は、記憶装置に書き込みを行った上位装置の識別番号である。この識別番号は上位装置ごとに一意であり、ＩＰアドレス、ファイバーチャネルについて用いられるＷＷＮ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｎａｍｅ）などである。対象ブロック開始アドレス１０４及び対象サイズ１０５は、それぞれ書き込みの対象のブロック番号及び書き込みブロック数である。ストレージシリアル番号１０６は、記憶装置システムごとに付けられている一意の値であり、どの記憶装置システムが上位装置より書き込みの要求を受領したかを表す値となる。キャッシュデータ格納アドレス１０７は、書き込みデータが格納されているキャッシュメモリ１３４０のアドレスである。キャッシュデータ格納アドレス１０７は、Ｃ言語のｍａｌｌｏｃなどを用いてキャッシュメモリ１３４０上にデータ格納領域が確保されるとき、その先頭アドレスを示す（キャッシュ上のデータの削除は、Ｃ言語のｆｒｅｅなどによって行える）。
【００３７】
データ一貫性保持テーブル１００は、受領時刻１０２を基準に時系列順にソーティングされており、最新のレコード（あるいはエントリ）がテーブルの一番末尾に来るようになっている。テーブル管理番号１０１は、テーブルの先頭より１から順に２、３、…と整数の管理番号を格納している。管理番号１は、キャッシュメモリ１３４０上で一番時刻の古いデータを表すレコードであり、管理番号が一番大きなレコードは最新の時刻をもつ書き込みレコードとなるように、レコードが配列される。管理番号が一番大きなレコードの次のレコードは、未登録のエントリなのでその管理番号に−１を代入する。
【００３８】
具体的に図５を用いて説明すると、現在１００個のレコードがデータ一貫性保持テーブル１００に登録されている。各レコードは受領時刻１０２により時間の古いもの昇順でソートされている。テーブル管理番号１０１は、先頭レコードの番号を１として順に１００まで割り当てられている。テーブル管理番号１０１が１００の一つ下のレコードは存在しない。この未登録のレコード格納領域のテーブル管理番号１０１には−１が代入されている。
【００３９】
図６は、ビットマップテーブル２０３０のデータ形式を示す図である。ビットマップテーブル２０３０の各欄は、物理ディスク上のブロックに対応し、ブロックの順に配列されている。各欄にはビット値１又は０が設定され、上記のようにそのブロックのデータがキャッシュされているか否かを示す。一時ビットマップテーブル２００は、上位装置からの入出力要求が入出力の対象とするブロックの範囲のビットマップを格納するテーブルである。
【００４０】
図７及び図８を用いてメイン制御部２０２０の処理手順について説明する。メイン制御部２０２０は、ホストＩ／Ｆ１３００及びＤＫＣＩ／Ｆ１３２０から受け取った入出力要求（以下Ｉ／Ｏという）を処理する。ホストＩ／Ｆ１３００からのＩ／Ｏは、上位装置からのＩ／Ｏであり、ＤＫＣＩ／Ｆ１３２０からのＩ／Ｏは、他の記憶装置システムからのＩ／Ｏである。ここでホストＩ／Ｆ１３００からの要求に関する処理は図７で示し、ＤＫＣＩ／Ｆ１３２０からの要求に関する処理は図８で示す。
【００４１】
図７は、ホストＩ／Ｆ１３００からのＩ／Ｏを処理するメイン制御部２０２０の処理手順を示すフローチャートである。ホストＩ／Ｆ１３００から記憶装置システムにＩ／Ｏ要求が来たとき、ステップ３０００で参照系のコマンド（ＳＣＳＩにおけるリードなどのコマンド）か、更新変更系のコマンド（ＳＣＳＩにおけるライトなどのコマンド）かを識別し、処理を分岐させる。本実施例においては、参照系のコマンドと更新変更系のコマンドのみに注目する。参照系コマンドのときは、ステップ３００５に処理が移る。更新変更系のコマンドのときは、ステップ３０５０に処理が移る。
【００４２】
ステップ３００５では、上位装置が要求している参照範囲（参照のブロック開始アドレス、ブロック数）に対応するビットマップテーブル２０３０のビット値を参照し、それらを一時ビットマップテーブル２００にコピーする。一時ビットマップテーブル２００作成後、処理はステップ３０１０に移る。ステップ３０１０では、一時ビットマップテーブル２００の示すブロックアドレスにおいて、最新の内容がキャッシュメモリ１３４０上に存在するか、物理ディスク１３７０上に存在するかを判断する。
【００４３】
上位装置が要求している参照範囲において、一時ビットマップテーブル２００のビット値０のブロック範囲と、ビット値１のブロック範囲では、最新のデータの格納場所が変わってくる。ビット値が０のブロック範囲の参照要求は、物理ディスク１３７０上のデータが最新のデータという状態であり処理はステップ３０２０に移る。ビット値が１のブロック範囲の参照要求は、上位装置の参照範囲はキャッシュメモリ１３４０上のデータが最新のデータという状態であり処理はステップ３０４０に移る。ステップ３０２０は、ディスク制御部１３５０を介して参照範囲データを読み込む処理である。ステップ３０４０は、キャッシュ部２０５０を介して参照範囲データを読み込む。キャッシュ部２０５０を介してデータを参照する際は、データ一貫性保持テーブル１００を用いて参照対象範囲のデータを読み込む。具体的には、データ一貫性保持テーブル１００のレコードをテーブル管理番号１０１の一番大きなものから小さいものへ順番に、参照範囲と対象ブロックアドレス２０４、対称サイズ２０５を比較していき、変更のあったデータがキャッシュされているキャッシュメモリ１３４０のアドレスを検索し、キャッシュメモリ１３４０より参照範囲データを読み込む。
【００４４】
ステップ３０２０、ステップ３０４０の後、ステップ３０３０でそれぞれの読み込みデータを一時ビットマップテーブル２００のブロック範囲の読み込みデータとして結合させ、ホストＩ／Ｆ１３００に渡す。ホストＩ／Ｆ１３００にデータを渡した後にＩ／Ｏ処理が終了する。ホストＩ／Ｆ１３００は、渡された読み込みデータを参照要求が発行された上位装置へ送信する。
【００４５】
ステップ３０５０、ステップ３０６０及びステップ３０７０は、ホストＩ／Ｆ１３００から更新変更コマンドを受理した際の処理である。記憶装置システム内のデータに書き込みを行う際には、データ一貫性制御部２０４０が処理を行うので、メイン制御部２０２０は、データ一貫性保持制御２０４０にデータを渡し、リモートコピー先記憶装置システムへのデータ送信、ホストへの更新変更処理の完了を通知する処理となる。リモートコピー先記憶装置システムへのデータ送信の場合、メイン制御部２０２０は、ライトされた内容に加えて、データ一貫性保持テーブル２００の項目である受領時刻１０２、上位装置識別番号１０３、対象ブロック開始アドレス１０４、対象サイズ１０５、ストレージシリアル番号２０６の情報を送信する。ここで送信方法について特に記載しないが、ＳＣＳＩのライトコマンドを拡張したベンダ固有コマンドを用いてもよい。
【００４６】
ステップ３０５０は、データ一貫性保持制御部２０４０の処理であり、詳細は後述する。ステップ３０５０後にステップ３０６０に処理が移り、書き込みデータがＤＫＣＩ／Ｆ１３２０へ渡される。ＤＫＣＩ／Ｆ１３２０は、この書き込みデータをコピー先記憶装置システムのＤＫＣＩ／Ｆ１３２０へ送信する。その後ステップ３０７０に処理が移行する。ステップ３０７０は、ホストＩ／Ｆ１３００へ書き込み完了報告を行う。ホストＩ／Ｆ１３００は、書き込み要求を行った上位装置に書き込み完了の通知を行う。
【００４７】
図８は、メイン制御部２０２０がＤＫＣＩ／Ｆ１３２０から書き込みデータを受け取ったときの処理のフローチャートである。ステップ３１００は、データ一貫性保持制御部処理である。
【００４８】
図９は、データ一貫性保持制御部２０４０が上位装置からの書き込み要求を処理する際のフローチャートである。データ一貫性保持制御部２０４０は、リモートコピーペアを形成する論理ボリュームが、完全に２重化されたボリュームとなるようにライトデータ（書き込み内容）の処理を行う制御部である。データ一貫性保持制御部２０４０は、データ一貫性保持テーブル１００とビットマップテーブル２０３０を更新し、ライトデータをキャッシュメモリ１３４０上へ書き込む処理を行う。
【００４９】
ステップ３２００は、ライトデータの書き込み範囲（ディスクのブロック開始アドレス、ブロック数）に対応するビットマップテーブル２０３０の範囲にビット値１のビットがあるか否かを調べる。この結果、ライトデータの範囲のビットマップがすべてビット値０の際は、処理はステップ３２７０に移る。ライトデータの範囲に一部分でもビット値１がある場合（キャッシュ上にライトデータの書き込みブロックと同じブロックのデータがキャッシュされている場合）、処理はステップ３２１０に処理は移る。
【００５０】
ステップ３２１０では、データ一貫性保持制御部２０４０は、ライトされたブロック数分のビットを持つ一時ビットマップテーブル２００を作成する。一時ビットマップ２００は、ライトデータの書き込みブロックと対応しており、一時ビットマップ２００の先頭はライトデータの書き込み先頭ブロックと対応している。ステップ３２１０では、ビットマップテーブル２０３０を参照し用意した一時ビットマップテーブル２００にライトデータの範囲のビット値をコピーする。コピー後、処理はステップ３２２０に移る。
【００５１】
ステップ３２２０は、データ一貫性保持テーブル１００の一番最近に書かれたレコードを検索する。一番最近書かれたレコードの検索は、データ一貫性保持テーブル１００を上から順に検索してゆき、テーブル管理番号が−１となったエントリの一つ上のエントリとなる。検索されたレコードのテーブル管理番号１０１をメモリ上のカレントという変数に入れる。カレントは、整数を代入できる変数とする。テーブル管理番号をカレントに代入後、処理はステップ３２３０に移る。
【００５２】
ステップ３２３０からステップ３２６０の処理はループ処理となっており、ループ終了条件は一時ビットマップテーブル２００のビット値がすべて０になることである。以下、ビット値を０にしていく手順を説明する。一時ビットマップテーブル２００のビット値が１に対応するブロックへの書き込みデータは、既にキャッシュメモリ１３４０上に存在している。よってデータ一貫性保持テーブル１００のレコードを検索することにより、このキャッシュメモリ１３４０上の重複データ（一時ビットマップテーブル２００においてビット値１であるデータ）をすべて検索し、検索で見つかったレコードの重複範囲に対応する一時ビットマップテーブル２００のビット値を０にする。また重複データに対応する範囲に後述する重複ブロック削除処理３２４０を行う。このデータ一貫性保持テーブル１００の各レコードを検索していくことによって、一時ビットマップテーブル２００のビット値を０としていく処理が行われる。一時ビットマップテーブル２００のビット値がすべて０になるとループ処理は終了する。
【００５３】
ステップ３２３０は、データ一貫性保持テーブル１００のテーブル管理番号２０１が変数カレントと一致するレコード（以下「カレントレコード」という）の対象ブロック開始アドレス１０４と対象サイズ１０５を用いて、ライトデータの書き込み範囲と重複する部分があるか否か判定する。判定の結果、重複部分がない場合、処理はステップ３２５０に移る。重複がある場合、処理はステップ３２４０に移る。ステップ３２４０の重複ブロック削除処理終了後はステップ３２５０に移る。ステップ３２５０は、比較対象レコードであるカレントレコードを１つ上のレコードに変更する処理である。具体的にカレントの変数値を−１してやればよい。変数の値を変更後、処理はステップ３２６０へ移る。ステップ３２６０は、ループ処理の終了条件判定を行う処理であり、一時ビットマップテーブル２００の値がすべて０になっているかを判定する。
【００５４】
一時ビットマップテーブル２００のビット値がすべて０になっている場合には、処理はステップ３２７０へ移る。ビット値に１が残っている場合には、ループの先頭であるステップ３２３０に処理が移る。ステップ３２７０は、ライトデータの書き込み範囲に相当するビットマップテーブル２０３０のビット値をすべて１に変更する処理である。処理終了の後、ステップ３２８０に移る。ステップ３２８０では、データ一貫性保持制御部２０４０は、ライトデータに関する情報をデータ一貫性保持テーブル１００に書き込む。具体的には、テーブル管理番号１０１に一番最近書かれたレコードのテーブル管理番号＋１の値を書き込む。その一行下のテーブル管理番号１０１には−１を書き込む、更にライトデータの情報を元に、受領時刻１０２、上位装置識別番号１０３、対象ブロック開始アドレス１０４、対象サイズ１０５、ストレージシリアル番号１０６及びキャッシュデータ格納アドレス１０７をそれぞれ書き込む。データ一貫性保持テーブル１００を更新した後、処理はステップ３２９０に移る。ステップ３２９０は、キャッシュメモリ１３４０上のキャッシュデータ格納アドレス１０７に設定したアドレスにライトデータを書き込む。書き込み終了後、データ一貫性保持制御部２０４０の処理が終了する。
【００５５】
図１０は、重複ブロック削除処理を示すフローチャートである。重複ブロック削除処理は、記憶装置システムに書き込み要求のあるライトデータの書き込み範囲と、キャッシュメモリ１３４０上にあるキャッシュデータの書き込み範囲に重複がある場合の処理である。重複があるということは、ライトデータがキャッシュデータを上書きするか又はキャッシュデータがライトデータを上書きする。重複ブロック削除処理は、この重複した範囲において上書きされ更新される部分を削除する処理である。
【００５６】
（ａ）ライトデータがキャッシュデータを上書きする場合
リモートコピーを用いない環境など、通常はホストＩ／Ｆ１３００で受領したライトデータの順番にキャッシュ書き込みが行われる。よってライトデータが最新のデータとなり、ライトデータがキャッシュデータを上書きする。
【００５７】
（ｂ）キャッシュデータがライトデータを上書きする場合
ＤＫＣＩ／Ｆ１３２０で受領したライトデータは、最新の書き込みデータである保証がない。これはリモートコピー元記憶装置システムにライトデータが書き込まれた後に、リモートコピーライン１０６０を介して転送されてきたライトデータであり、すでに受領時刻１０２より時間が経っている。よってキャッシュデータの方がライトデータよりも最新のデータとなるケースが生じる。このケースの場合、キャッシュデータが最新のデータとなり、キャッシュデータがライトデータを上書する。
【００５８】
ステップ３３００では、ライトデータとキャッシュデータのホストＩ／Ｆ１３００で受領された時刻（受領時刻１０２）を比較する。ライトデータの受領時刻の方が新しい（時刻として最近）場合は、処理はステップ３３１０に移る。キャッシュデータの受領時刻の方が新しい場合は、処理はステップ３３５０に移る。本実施例において時刻の比較を行う際に、まったく同じ時刻を比較する場合の処理は含んでいない。同じ時刻を比較する場合とは、例えば記憶装置システム１０７０、記憶装置システム１１２０において計測した結果として同時に同じ領域へ書き込みが来た場合に生じる。この際の処理としては、優先記憶装置システムを決めておき、もし時刻が全く同じ場合は、優先記憶装置システム側の書き込みを優先させるなどの回避策が考えられる。
【００５９】
ステップ３３１０は、比較したキャッシュデータについてライトデータの書き込み範囲と重複する部分を削除する処理を行う。この削除処理により、キャッシュメモリ１３４０上の削除対象データ及びデータ一貫性保持テーブル１００の対象ブロック開始アドレス１０４、対象サイズ１０５及びキャッシュデータ格納アドレス１０７のレコード値が変更される。
【００６０】
ここで例外的な処理が必要となる場合がある。この例外処理は、キャッシュデータの一部削除により、キャッシュデータの中間部分が抜き取られ、キャッシュデータが２つのレコードに分離された場合である。具体的には、削除対象のキャッシュデータの対象ブロック開始アドレス１０４：１０００番地から対象サイズ１０５：２００ブロックであったとする。そこにライトデータ対象ブロック開始アドレス１０４：１０２０番地から対象サイズ１０５：１００ブロックという書き込み要求が来た場合に、キャッシュデータのデータ一貫性保持テーブル１００に書かれたレコードは、ライトデータと重複部分を削除したことにより（対象ブロック開始アドレス１０４、対象サイズ１０５）が（１０００、１９）、（１１２１、７９）という２つのレコードに分割される。ここで行われる分割処理は、現在のキャッシュデータの表すレコード以降のレコードを１行下に下げ、テーブル管理番号１０１を下げたレコードに対して管理番号の変更（＋１）をする。この処理によって用意された１行下のレコード行を用いてキャッシュデータを分割し、２つのレコードにする。
【００６１】
ステップ３３２０は、ステップ３３１０で変更したキャッシュデータについて、キャッシュデータがすべて削除されていないか判定する。すべて削除されている状態とは、キャッシュデータの書き込み範囲がライトデータの書き込み範囲に完全に含まれており、キャッシュデータがすべて削除されてしまう状態である。キャッシュデータの一部が削除されたときは、処理はステップ３３４０へ移る。キャッシュデータがすべて削除されたときは、ステップ３３３０の処理を行う。ステップ３３３０は、比較しているキャッシュデータがすべて削除されたので、データ一貫性保持テーブル１００の比較したキャッシュデータのレコード行を削除する。削除後、１行うしろ以降のレコードを１行上にスライドさせ、移動させたレコードのテーブル管理番号１０１を変更（−１）する。
【００６２】
ステップ３３５０は、ライトデータについて比較したキャッシュデータの書き込み範囲と重複する部分を削除する処理を行う。この削除処理により、ライトデータのサイズは小さくなり、新しい対象ブロック開始アドレス１０４、対象サイズ１０５を持つことになる。もしライトデータが分割された場合は、分割されたライトデータはそれぞれ別書き込みとして書き込み処理が行われる。
【００６３】
ステップ３３６０は、ステップ３３５０で変更したライトデータについて、ライトデータがすべて削除されていないか判定する。ライトデータがすべて削除された状態とは、ライトデータの書き込み範囲がキャッシュデータの書き込み範囲に含まれており、ライトデータがすべて削除されてしまう状態である。ライトデータの一部が削除されたときは、処理はステップ３３４０へ移る。ライトデータがすべて削除されたときは、処理はステップ３３７０へ移る。
【００６４】
ステップ３３４０は、ステップ３３１０またはステップ３３５０で処理された重複ブロックに対応する一時ビットマップテーブル２００のビット値を各々０にする。ビット値変更後に処理はステップ３２５０へ移る。ステップ３３７０は、ライトデータがすべて削除されており、書き込む内容がないのでデータ一貫性保持制御部のライトデータ書き込み処理を終了させる。
【００６５】
図１１は、キャッシュメモリ１３４０上のキャッシュデータを物理ディスク１３７０に書き込むデータ一貫性保持制御部２０４０の処理（一斉書き込み処理）を示すフローチャートである。一斉書き込み処理は、タイマー１３１０によって６０秒に一回すべての記憶装置システムで一斉して起動される。ステップ３４００は、データ一貫性保持テーブル１００において一番昔に書かれたレコードであるテーブル管理番号１０１が１を変数カレントに代入する。代入後、処理はステップ３４１０に移る。ステップ３４１０では、テーブル管理番号１０１がカレントのレコードの受領時刻１０２を参照する。カレントレコードの受領時刻１０２が、一斉書き込み処理開始時間より３分経っていないときは処理がステップ３４７０へ移り、３分以上経過しているときは処理がステップ３４２０に移る。
【００６６】
ステップ３４２０は、カレントレコードの書き込み範囲を示すビットマップテーブル２０３０のビット値をすべて０に変更する。変更後処理は、ステップ３４３０へ移る。ステップ３４３０では、データ一貫性保持制御部２０４０は、ディスク制御部１３５０にカレントレコードの書き込みデータ（対象ブロック開始アドレス１０４、対象サイズ１０５、及びキャッシュデータ格納アドレス１０７で指定されたキャッシュメモリ１３４０上のデータ）を渡す。ディスク制御部１３５０は、物理ディスク１３７０にカレントレコードの書き込み内容を書き込む。ディスク制御部１３５０にデータを受け渡し終了後、処理はステップ３４４０へ移る。
【００６７】
ステップ３４４０は、ディスク制御部１３５０に渡したキャッシュメモリ１３４０上のキャッシュデータを削除する。削除後、処理はステップ３４５０へ移る。ステップ３４５０は、カレントレコードで示されるデータ一貫性保持テーブル１００上のレコードの削除を行う。カレントレコード行の削除は、データ一貫性保持テーブル１００のカレントレコードのテーブル管理番号１０１、受領時刻１０２、上位装置識別番号２０３、対象ブロック開始アドレス１０４、対象サイズ１０５、ストレージシリアル番号１０６及びキャッシュデータ格納アドレス１０７に書きこまれている情報をそれぞれ削除することである。カレントレコードの削除カレント行の削除終了後、処理はステップ３４６０へ移る。ステップ３４６０は、カレントの変数値を＋１とする。カレントの示すレコードは、今回物理ディスク１３７０に書き込まれたレコードの次に書き込まれたレコードとなる。そして処理はステップ３４１０に戻り、カレントレコードが一斉書き込み処理対象レコードであるか否かを判定する。
【００６８】
ステップ３４７０は、データ一貫性保持テーブル１００を更新する。テーブルの先頭レコードが未使用レコードとならないようにレコードを順に上に詰め、テーブル管理番号１０１を上のレコードから順に１、２、３、…と振りなおす。データ一貫性保持テーブル１００の変更後、処理は終了する。
【００６９】
なお第１の実施例の変形例として、ビットマップテーブル２０３０を設けないような実施例も可能である。その場合には、データ一貫性保持制御部２０４０は、キャッシュメモリ１３４０には重複ブロックを考慮せず、書き込みデータをそのまま受領時刻の順に格納するものとする。データ一貫性保持制御部２０４０は、ステップ３２８０のデータ一貫性保持テーブル１００への書き込みとステップ３２９０のキャッシュデータの書き込みを行う。重複ブロック削除処理はない。また記憶装置システムが上位装置から参照系コマンドを受けた場合のステップ３０１０、３０２０及び３０４０は、データ一貫性保持テーブル１００を最新のレコードから順に探索し、書き込みデータがキャッシュメモリ１３４０に存在する参照範囲についてはキャッシュメモリ１３４０からデータを読み取り、キャッシュメモリ１３４０に存在しない参照範囲についてはディスク制御部１３５０を介して物理ディスク１３７０からデータを読み取る。
（２）第２の実施例
第１の実施例は、ライトデータの書き込み処理の際ステップ３０６０において、ＤＫＣＩ／Ｆ１３２０へ書き込み内容が渡される。ここでコピー先記憶装置システムの書き込み処理の終了を待っていない。ステップ３０７０で、コピー先記憶装置システムの書き込み処理終了を待つか、待たないかによってコピーペアのボリューム内データの一致性が変わる。
【００７０】
第１の実施例では、コピー先記憶装置システムへ書き込み処理が完了する前に上位装置へ書き込み終了が通知される。しかしコピー先記憶装置システムへの書き込み処理は、リモートコピーのデータ転送時間と実際の書き込み処理をする時間を要する。この処理に要する時間の間、書き込み内容はコピー先の記憶装置システムとコピー元の記憶装置システムにおいて差異がでる。完全に２重化したボリュームをリモートコピーペアとして形成する場合には、ステップ３０７０でコピー先記憶装置の書き込み完了通知を待つ。コピー先記憶装置システムの書き込みにかかる時間だけ書き込まれたデータに関して一致性が失われても影響のない環境の場合には、メイン制御部２０２０は、コピー先記憶装置システムの書き込み完了を待たず、ホストＩ／Ｆ１３００へ書き込み完了を通知する。
（３）第３の実施例
第３の実施例は、第２の実施例に変更を加えて、リザーブ情報の伝播を実現する。第３の実施例は、ディスク領域のリザーブによってその領域の排他アクセスを行う場合に適用される。図１２は、ＳＣＳＩのリザーブ情報をリモートコピーの対象とする記憶装置システムに伝播させるための第３の実施例のシステム構成を示す。
【００７１】
図１２のシステムは、排他制御部４０００、データ一貫性保持制御部４０２０及びメイン制御４０３０の各プログラムを備える。これらのプログラムは、プロセッサ１３８０によって実行される。またメモリ上にビットマップテーブル４０１０を備える。その他の構成要素は、第１の実施例の通りである。
【００７２】
排他制御部４０００は、ロック状態保持テーブル４００を保持し、上位装置からのリザーブ状態を管理する。排他制御部４０００は、双方向リモートコピーの対象となる記憶装置システムの各々が同じ内容のロック状態保持テーブル４００を持つように制御する。この同じ内容のロック状態保持テーブル４００を持つことによって、ある記憶装置システムのボリュームを上位装置がロックした際に、コピーペアを形成している他サイトのペアボリュームもロックされている状態になる。
【００７３】
ビットマップテーブル４０１０は、ビットマップテーブル２０３０と比べてビットマップが表す状態が４つになる。これによってビットマップテーブル４０１０は、ディスクの１ブロックに対して１ビットのビットマップではなく、２ビットでディスクの状態を保持する。ここでは通常使用される「ビットマップ」ではなくなるが、本実施例ではビットマップと呼ぶことにする。
【００７４】
データ一貫性保持制御部４０２０は、データ一貫性保持制御部２０４０と比べてビットマップのとるビット値が増える（ビットマップの持つ状態が増える）ことによるビット値による処理の分岐条件に変更がある。メイン制御部４０３０は、メイン制御部２０２０と比べて、ホストＩ／Ｆ１３００及びＤＫＣＩ／Ｆ１３２０が、参照系コマンド及び更新変更系コマンド以外にリザーブ系コマンドを受領し処理することに起因する処理の変更がある。
【００７５】
図１３のビットマップ値テーブル３００は、ビットマップテーブル４０１０の持つビット値０、ビット値１、ビット値２及びビット値３が表現する状態の意味を説明するテーブルである。ビット値０は、どの上位装置にもリザーブされておらず、物理ディスク１３７０のデータが最新の状態を示す。ビット値１は、どの上位装置にもリザーブされておらず、キャッシュメモリ１３４０のデータが最新の状態を示す。ビット値２は、ある上位装置にリザーブされており、物理ディスク１３７０のデータが最新の状態を示す。ビット値３は、ある上位装置にリザーブされており、キャッシュメモリ１３４０のデータが最新の状態を示す。
【００７６】
図１４は、排他制御部４０００が保持するロック状態保持テーブル４００のデータ形式を示す。ロック状態保持テーブル４００は、管理番号４０１、ロック開始時刻４０２、上位装置識別番号４０３、ロック対象開始アドレス４０４及びロック対象サイズ４０５という項目によって構成される。ロック開始時刻４０２は、上位装置より記憶装置システム内のホストＩ／Ｆ１３００にロック要求が受理された時刻を格納する。上位装置識別番号４０３は、データ一貫性保持テーブル１００の上位装置識別番号２０３と同意である。ロック開始アドレス４０４及び対象サイズ４０５は、それぞれロック対象となっているディスクのブロック番地およびブロック数を設定する。管理番号４０１は、テーブルの先頭より１から順に２、３、…と整数の管理番号を格納しているものとする。管理番号は１から始まり＋１ずつ増加していき、最終レコードの次の管理番号は−１とする。
【００７７】
図１５及び図１６は、メイン制御部４０３０の処理手順を示すフローチャートである。図１５は図７に、図１６は図８に変更を加えたものとなる。この変更箇所を以下に説明する。図１５は、メイン制御部４０３０がホストＩ／Ｆ１３００からＩ／Ｏを受け取ったときのフローチャートである。
【００７８】
メイン制御部４０３０は、ホストＩ／Ｆ１３００から入出力要求を受けたとき、ステップ５０００において参照系のコマンド、更新変更系のコマンド及びロック系のコマンド（ＳＣＳＩにおけるリザーブ、領域リザーブ、リリースなどのコマンド）を認識し、処理を分岐させる。参照系のコマンドの際は、ステップ５００５へ処理が移る。更新変更系のコマンドの際は、ステップ５０１０に処理が移る。ロック系のコマンドの際は、ステップ５０７０に処理が移る。ステップ５０１０とステップ５００５は同じ処理である。この処理は、参照および更新変更の処理を行う処理対象範囲が他の上位装置によってリザーブ系のコマンドを用いたロックをしているか否かを調べる。このロックの状態により、メイン制御部４０３０は、参照及び更新変更要求をした上位装置がその要求範囲について参照及び更新変更の処理が可能か否かを判定する。この判定処理の詳細については後述する。
【００７９】
参照系コマンドのときは、ステップ５００５の処理終了後にステップ５０２０の判定結果分岐へ処理が移る。更新変更系のコマンドのときは、ステップ５０１０の処理終了後にステップ５０５０の判定結果分岐へ処理が移る。参照系の要求の際、ステップ５０２０において要求範囲が参照可能な場合は、処理はステップ５０３０へ移る。参照不可能な場合は、処理はステップ５０４０へ移る。更新変更系の要求の際はステップ５０５０において要求範囲が更新変更可能な場合は、処理はステップ５０６０へ移る。更新変更不可能な場合は、処理はステップ５０４０へ移る。ステップ５０４０は、参照・更新変更が不可能な際、上位装置にホストＩ／Ｆ１３００を介して要求範囲が利用不可を通知する（ＳＣＳＩプロトコルでは、Ｒｅｓｅｒｖａｔｉｏｎ  Ｃｏｎｆｌｉｃｔが上位装置へ返される）。
【００８０】
ステップ５０３０は、ステップ３００５、ステップ３０１０、ステップ３０２０、ステップ３０４０及びステップ３０３０の処理を行う。ここでビットマップテーブル４０１０においてビット値０、ビット値２のブロック参照要求は、物理ディスク１３７０上のデータが最新のデータという状態であり、参照データは物理ディスク１３７０より読み込まれるものとなる。ビット値１、ビット値３のブロック範囲の参照要求は、キャッシュメモリ１３４０上のデータが最新のデータという状態であり、参照データはキャッシュメモリ１３４０より読み込まれるものとなる。
【００８１】
ステップ５０６０は、後述するデータ一貫性保持制御部４０２０の処理である。ステップ５０７０は、ホストＩ／Ｆ１３００よりロック系のコマンドがメイン制御部４０３０に渡された際の排他制御部４０００の処理である。後述する排他制御部４０００は、戻り値をメイン制御部４０３０に返す。戻り値の受け取り終了後、処理はステップ５０８０に移る。ステップ５０８０は、ホストＩ／Ｆ１３００に排他制御部４０００から受け取った戻り値を渡す。戻り値をホストＩ／Ｆ１３００に送信後、ロック系のコマンドを受理した際の処理は完了となる。
【００８２】
図１６は、メイン制御部４０３０がＤＫＣＩ／Ｆ１３２０からＩ／Ｏを受け取った時の処理手順を示すフローチャートである。ステップ５１００は、更新変更系のコマンド又はロック系のコマンドを認識し、処理を分岐させる。更新変更系のコマンドの場合は、ステップ５１１０に処理が移る。ロック系のコマンドの場合は、ステップ５１２０に処理が移る。ステップ５１１０は、後述するデータ一貫性保持制御部４０２０の処理である。ステップ５１２０は、ＤＫＣＩ／Ｆ１３２０からロック系のコマンドが渡された場合の処理である。ステップ５１２０の処理は、排他制御部４０００で行われ、メイン制御部４０３０は、排他制御部４０００からその戻り値を受け取る。戻り値の受け取り終了後、処理はステップ５１３０に移る。ステップ５１３０は、ＤＫＣＩ／Ｆ１３２０に排他制御部４０００から受け取った戻り値を渡す。戻り値をＤＫＣＩ／Ｆ１３２０へ送信後、処理は完了となる。
【００８３】
図１７及び図１８は、データ一貫性保持制御部４０２０のフローチャートである。データ一貫性保持制御部２０４０からの変更点は、ビットマップテーブル４０１０の持つ状態が増えたことによる変更である。図１７は図９で示したフローチャートの変更である。図１７は、ステップ３２００がステップ５２００に、ステップ３２１０がステップ５２１０に、ステップ３２７０がステップ５２２０に処理が変更された。ステップ５２００は、ライトデータの書き込み範囲についてビットマップテーブル４０１０の対応するビット値と比較する。この比較の結果、ライトデータの範囲のすべてのビット値が、ビット値０又はビット値２のとき（物理ディスク１３７０に最新のデータがあるとき）は、ステップ５２２０に処理が移る。ライトデータの範囲についてビットマップテーブル４０１０の対応するビット値がビット値１又はビット値３を含むとき（キャッシュメモリ１３４０上に最新のデータがあるとき）は、ステップ５２１０に処理が移る。
【００８４】
ステップ５２１０では、ライトデータの範囲と同じ大きさの一時ビットマップテーブル２００を作成する。一時ビットマップテーブル２００は、ライトデータの書き込みブロックと対応している。一時ビットマップテーブル２００は、ビットマップテーブル４０１０において、ビット値１又はビット値３を表しているブロックにビット値１を代入し、ビット値０又はビット値２を表しているブロックにビット値０を代入する。つまりキャッシュメモリ１３４０上に変更データが存在するディスクのブロック位置をビット値１として、一時ビットマップテーブル２００に格納する。
【００８５】
ステップ５２２０は、ビットマップテーブル４０１０のビット値を変更する処理である。処理前のビットマップテーブル４０１０のビット値が０又は１の場合は１に変更し、ビット値が２又は３の場合は３に変更する。
【００８６】
図１８は、キャッシュメモリ１３４０上のキャッシュデータを物理ディスク１３７０に書き込む処理（一斉書き込み処理）のステップ３４２０を変更し、ステップ５３００にしたものである。ステップ５３００は、ビットマップテーブル４０１０のビット値の変更を行う処理であるが、変更対象のビットマップテーブル４０１０のビット値１の場合はビット値０へ、ビット値３の場合はビット値２へ変更する処理を行う。これは一斉書き込み処理によってキャッシュメモリ１３４０上のキャッシュデータがなくなることによるビットマップビット値の変更処理である。
【００８７】
図１９、図２０及び図２１は、排他制御部４０００に関する処理のフローチャートである。図１９は、上位装置の書き込み要求が来た際に、書き込み範囲に書き込み処理が可能か、すなわち書き込み範囲が書き込み要求を出した上位装置以外によって既にロックされていないか、判定する処理を示している。
【００８８】
ステップ５４００は、処理要求範囲（参照、更新変更要求されている範囲）に対応するビットマップテーブル４０１０を参照することにより、上位装置によって要求範囲がロックされていないか判定する。要求範囲がすべてビット値０又は１の場合は、処理要求範囲はどの上位装置にもロックされておらず、排他制御部４０００は、利用可能を戻り値に設定する。処理要求範囲にビット値２又はビット値３が含まれる場合は、ステップ５４１０に処理が移る。ステップ５４１０では、処理要求範囲をロックしている上位装置が処理要求をしている上位装置であるかロック状態保持テーブル４００のレコードを参照して判定する。この判定は、処理要求範囲に対応するビットマップテーブル４０１０においてビット値２又はビット値３のロック状態保持テーブル４００のレコードをすべて検索し、検索されたレコードの上位装置識別番号４０３が今回処理要求をしている上位装置であるか否かを判定する。処理要求をしている上位装置によるロックの際には、今回のライトデータは処理可能であり、利用可能を戻り値に設定する。処理要求をしている上位装置以外の処理要求の際は、利用不可を戻り値に設定する。
【００８９】
図２０は、ホストＩ／Ｆ１３００が上位装置からディスクのロック要求を受理した際の排他制御部４０００のフローチャートである。ステップ５５００は、ロック要求範囲（ロックを要求しているディスクのブロック範囲）が既に他の上位装置によりロックされていないか、ビットマップテーブル４０１０のビット値を参照して判定する。ロック要求範囲に対応するビット値がすべて０又は１のとき（どの上位装置もロックしていない状態）、処理はステップ５５３０に移る。ロック要求範囲に対応するビット値に２又は３を含む場合は、ロック要求範囲がある上位装置によって既にロックされていることになる。この際、ステップ５５０５でロック指定範囲のリザーブが今回ロックを要求している上位装置のリザーブ状態であるか判定する。ロックをしている上位装置からのロック要求である際は、ロック完了の戻り値をセットする。
【００９０】
別の上位装置のロック状態の際は本来、ロック失敗を戻り値に設定する。しかしリモートコピー環境下においてコピーペアの他のサイトがロック解消処理を実行中であり、自サイトへその処理結果が届く間にロック要求を受理したということもあり得る。よってステップ５５１０の処理によってコピー先記憶装置システムにロック要求を送信する。この戻り値をステップ５５２０で判定し、ロック失敗が相手サイトの記憶装置システムより戻ってきた際は、ロック失敗を戻り値に設定する。処理５５２０よりロック完了を受信した際は、もう一度ステップ５５００に処理を移し、ロック処理を最初から行う。
【００９１】
ステップ５５０５、ステップ５５２０は、まず自ホスト内ビットマップテーブル４０１０参照による他の上位装置によるロックされている状態であるかどうかという判定する。次に他サイトへのロック要求の戻り値を見る。この処理は、自サイトのビットマップを判定しロックが不可能という判定後、上位装置にロック失敗を伝達するため、上位装置が再びロック要求を出す時間より早く、効率的である。他サイトにロック要求を送信してそのロック要求を待つ処理は、リモートコピー環境下のリザーブ情報伝播において伝播にかかるタイムラグに対応するために必要な処理となる。
【００９２】
ここで具体的にステップ５５２０の処理が必要となる環境について図２２及び図２３のコンピューターシステム６０００を用いて説明する。図２２は、このコンピュータシステムの構成図である。このシステムは、サイト１１１０とサイト１１２０のホストＡ６０１０とホストＢ６０２０がクラスタ環境を構築している。このクラスタは論理ボリュームをクラスタのリソースとして運用していると仮定する。サイト１１１０内には論理ボリュームＡ６０４０があり、サイト１１２０内には論理ボリュームＢ６０５０がある。それぞれの論理ボリュームは、双方向リモートコピーによってコピーペアが形成されている。両ホストは、これら複数の論理ボリュームを同一の論理ボリュームとして扱っているものとする。ホストＡとホストＢは、ＩＰ（Ｉｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌ）ネットワーク６０３０を用いて通信するものとする。
【００９３】
次に図２３の状態遷移と処理の例について説明する。このクラスタではＳＣＳＩのリザーブコマンドによってディスクの排他制御を行うことがある。例えばマイクロソフト社のクラスタサーバーなどである。ここでサイト１１１０のホストＡ６０１０が論理ボリュームＡ６０４０をオフラインのリソースとして運用をするとき、ホストＡ６０１０は、論理ボリュームＡ６０４０をリザーブしている。次にホストＡ６０１０の業務をホストＢ６０２０へ、使用していた論理ボリュームＡ６０４０をリモートコピーペアである論理ボリュームＢ６０５０に移行（フェイルオーバー）するものとする。ホストＡ６０１０は、論理ボリュームＡ６０４０をリリースし、ホストＢ６０２０は、論理ボリュームＢ６０５０をリザーブし、ホストＢ６０２０は論理ボリュームＢ６０５０を用いて運用を行う。ホストＡ６０１０とホストＢ６０２０はＩＰネットワーク６０３０を用いてフェイルオーバーを連絡して処理の移行を円滑に行う。
【００９４】
この際、ホストＡ６０１０のリリースとホストＢ６０２０のリザーブがほぼ同時に実行されると、ステップ５５１０及びステップ５５２０の処理がない場合は、ホストＢ６０２０は、論理ボリュームＢ６０５０をリザーブすることができない。すなわち論理ボリュームＡ６０４０がリリースされているにも関わらず、論理ボリュームＢ６０５０がリリースされていないため、ホストＢ６０２０が論理ボリュームＢ６０５０をリザーブできない。こうしてリリースした論理ボリュームをリザーブできないことによって、クラスタサーバーの動作に影響する可能性が生じる。よってリザーブ要求の結果をすぐリザーブ要求ホストへ返すのでなく、ステップ５５１０、５５２０のように相手サイトへのリザーブ要求の返信を待ち、ホストに返す処理が必要となる。
【００９５】
ステップ５５３０は、ロック対象領域に相当するビットマップテーブル４０１０のビット値を２又は３にする。具体的には、ビットマップテーブル４０１０の変更対象ビットマップのビット値が０の場合は２へ、ビット値が１の場合は３へ変更する処理を行う。ビット値変更後、処理はステップ５５４０に移る。ステップ５５４０は、ロック状態保持テーブル４００の管理番号４０１が−１のレコード位置に、ロック要求のロック開始時刻４０２、上位装置識別番号４０３、ロック対象開始アドレス４０４及びロック対象サイズ４０５のレコードを登録する。その管理番号４０１は、一つ上のレコードの管理番号４０１に＋１した整数が設定される。次に排他制御部４０００は、登録したレコードの一つ下の空きレコードの管理番号４０１に−１を設定する。このレコードの書き込み処理終了後、ステップ５５５０に処理を移す。ステップ５５５０は、相手サイト記憶装置システムにロック要求を送信する。ここで送信方法について特に記載しないが、ＳＣＳＩのライトコマンドを拡張したベンダ固有コマンドを用いてもよい。
【００９６】
ステップ５５１０及びステップ５５５０の処理では、ロック状態保持テーブル４００のレコード項目及びロック要求時の戻り値は、リモートコピーライン１０６０を介してＤＫＣＩ／Ｆ１３２０に渡される。ステップ５５５０は、相手サイトからの戻り値を判定する。ロック完了が戻り値の際は、ロック完了を戻り値にセットする。ロック失敗が戻り値の際は、ロック失敗を戻り値にセットする。
【００９７】
ステップ５５５０及びステップ５５６０の処理の結果、相手サイトからロック失敗が戻ってくる場合について説明する。この場合は、記憶装置システム１０７０と記憶装置システム１０８０がほぼ同時に上位装置よりロック要求を受け取った時である。この場合に、サイト１１１０のロック要求が失敗したときは、サイト１１２０のロックが成功する。そこで記憶装置システム１０７０はステップ５５３０及びステップ５５４０で行った処理をキャンセルしなくてはならないが、このキャンセル処理は、後述するようにロックが成功した記憶装置システム１０８０の記憶装置システム１０７０へのロック形成処理で行われる（図２１のステップ５６５０の処理参照）。
【００９８】
図２１は、ＤＫＣＩ／Ｆ１３２０が他のサイトよりロック要求を受理した際の排他制御部４０００の処理手順を示す。ステップ５６００は、ビットマップテーブル４０１０中のロック要求範囲に対応するビットマップのビット値を判定する。ロック要求範囲がすべてビット値０又は１の場合は、ステップ５５３０に移る。ロック要求範囲にビット値２又は３が含まれる場合は、ステップ５６１０に処理が移る。ステップ５６１０は、ロック要求領域に対応するサイズの一時ビットマップテーブル２００を作成し、ビットマップテーブル４０１０の対応するビット値２、ビット値３に注目して一時ビットマップテーブル２００にビットマップ情報を書き込む。
【００９９】
ビットマップ情報の書き込み時、ビットマップテーブル４０１０でビット値２、ビット値３の際にはビット値１を、ビットマップテーブル４０１０でビット値０、ビット値１の際にはビット値０を一時ビットマップテーブル２００に書き込む。このように一時ビットマップテーブル２００は、該当ブロックがロックされているか否かのみに注目し、重複されてロックされているブロックに対応するビットにはビット値１を、ロックされていないブロックに対応するビットにはビット値０を持つビット値になる。
【０１００】
一時ビットマップテーブル２００作成後、ステップ５６２０に処理を移動する。ステップ５６２０は、ロック状態保持テーブル４００の一番新しく書き込まれたレコード（管理番号４０１が−１の一つ上のレコード）の管理番号４０１を変数カレントに代入する。代入後処理はステップ５６３０に移る。
【０１０１】
ステップ５６３０は、一時ビットマップテーブル２００のビット値１の範囲とカレントレコードのロック範囲において重複してロックしている部分があるか否か判定する。重複する場合は、一時ビットマップテーブル２００の重複部分のビット値を０にし、ステップ５６４０の処理に移る。重複がない場合は、ステップ５６８０の処理に移る。ステップ５６８０は、変数カレントを−１にし、処理をステップ５６９０に処理を移す。ステップ５６９０は、今回のロック要求時刻とカレントレコードのロック開始時刻４０２を比較する。カレントレコードのロック開始時刻４０２のほうが古い（時刻が前）場合は、当該ブロック範囲には今回のロック要求時刻よりも昔にロックされているブロック範囲があるので、ロック失敗を戻り値に設定する、カレントレコードのロック開始時刻４０２のほうが新しい（時刻が後）場合は、ステップ５６３０の処理に移る。まったく同じ時刻を比較する場合の処理は、ステップ３３００の場合と同様である。
【０１０２】
ステップ５６４０では、一時ビットマップテーブル２００のビット値がすべて０になっているか判定する。すべてビット値が０となっている際は、当該ブロック範囲には今回のロック要求時刻よりも新しいロック要求しか来ていないこととなり、処理はステップ５６５０へ移る。ビット値に１を含む際は、処理はステップ５６８０へ移る。
【０１０３】
ステップ５６５０は、ロック要求時刻よりあとにロックされ、ロック要求範囲と重複したレコードについて、ロック状態保持テーブル４００からそのレコードを削除する。削除後、ロック状態保持テーブル４００のレコードを上から順に空のレコードがないように整列し、管理番号を振りなおす。ビットマップテーブル４０１０において削除するレコード範囲を表すビット値を、ビット値３であった場合にはビット値１へ、ビット値２であった場合にはビット値０へ変更する。次にステップ５５３０及びステップ５５４０を順に実行しロック完了を戻り値にセットする。
【０１０４】
図２４及び図２５は、ホストＩ／Ｆ１３００及びＤＫＣＩ／Ｆ１３２０がロック解消要求（ＳＣＳＩのリリースコマンドなど）を受理した際の処理となる。図２４は、ホストＩ／Ｆ１３００がロック解消要求を受理した際の処理を示し、図２５は、ＤＫＣＩ／Ｆ１３２０が他のサイトよりロック解消要求を受理した際の処理を示す。
【０１０５】
ステップ５７００は、ロック解消要求範囲に対応するビットマップテーブル４０１０のビット値を、処理前のビット値が２のときは０へ、ビット値が３のときは１へ変更を行う。変更後処理はステップ５７１０へ移る。ステップ５７１０は、ロック解消のロック状態保持テーブル４００のレコードを削除する。削除後ロック解消されたレコードより下に書かれたレコードを一つ上に移動させ、移動させた後移動させたレコードの管理番号４０１を振りなおす。管理番号４０１は移動させたレコードの管理番号を−１すればよい。ステップ５７２０は、ロック解消要求をコピーペアの各記憶装置システムのＤＫＣＩ／Ｆ１３２０へ送信する処理である。図２４及び図２５のいずれの場合もロック解消処理終了後、ロック解除を戻り値に設定する。
【０１０６】
図２４及び図２５のロック解消処理は、ＳＣＳＩコマンドのリリース、リセットなど各種コマンドを分けていない。本実施例は、すべての上位装置よりロック解消が来た際に、ロック解消要求範囲についてはロックが解消されるという処理になっている。図２４及び図２５の処理において、上位装置の識別判定処理などを入れると、更に厳密にＳＣＳＩプロトコルに準じたロック解消をするリモートコピーペア環境に適応できる。
（４）第４の実施例
実施例３は、実施例２の双方向リモートコピーを用いた際のリザーブ情報の伝播を実現した。実施例４は、実施例１の双方向リモートコピーを用いた際のリザーブ情報の伝播の実現方法を示す。
【０１０７】
実施例１の双方向リモートコピーは、書き込み内容がＤＫＣＩ／Ｆ１３２０へ渡される。ここでコピー先記憶装置システムの書き込み処理の終了を待っていない。この状態ではリザーブ処理中に書き込みが行われる可能性がある。リザーブ処理中の書き込み内容に関して、リザーブ要求時刻後に書き込まれた内容を、そのまま書き込み内容として扱うか、書き込み内容はなかったものとして削除するかを選択する必要がある。この処理を図２０及び図２１のロック完了を戻り値に設定する前に入れることとなる。
【０１０８】
ここで書き込み内容を削除し、書き込みが行われなかったことにするための処理を示す。ロック完了を戻り値に設定する前に、データ一貫性テーブルのロック対象範囲にロック開始時刻以降に書き込まれたライトデータがあるか否かを検索をし、書き込みデータが存在するとき、この書き込みデータは書き込みが行われなかったことなり、データ一貫性保持テーブル１００内のレコード及びキャッシュメモリ１３４０上のキャッシュデータが削除される。この変更により、実施例１の双方向リモートコピーを用いた際のリザーブ情報の伝播を実現できる。
（５）第５の実施例
第５の実施例は、第３の実施例を変更し、リザーブ情報の伝播を別の手段で実現する。第５の実施例は、記憶装置システム内の排他制御部４０００がロック状態保持テーブル４００を持たず、物理ディスク１３７０に直接リザーブ系コマンドを送信して、ＳＣＳＩのプロトコルを用いてロック状態を管理する。このときコピーペア先の記憶装置システムへはリモートコピーライン１０６０を介してコピー先の物理ディスク１３７０も上位装置のＳＣＳＩ  ＩＤを用いてリザーブを行う。このリザーブ処理は、ディスク制御部１３５０がサード・パーティ・リザーブを用いて、物理ディスク１３７０をロック要求上位装置からのリザーブとしてロックする。上位装置よりの参照、変更更新などの要求の際も、まず物理ディスク１３７０を用いて利用可能状態か判定する。
【０１０９】
この実施例は、ＳＣＳＩプロトコルをそのまま用いるため、リザーブ属性などのリザーブ情報の伝播が正確に実施できる。ここでリザーブ状態はディスクを直接ＳＣＳＩコマンドによって管理されるが、データはデータ一貫性保持制御部４０２０によって管理される。よって物理ディスク１３７０は正確なリザーブ状態を持つが、最新のデータを持たないという状態も出てくる。
【０１１０】
【発明の効果】
本発明によれば、複数の記憶装置システム間でコピーペアを構成するとき、コピーペアを構成するボリュームは双方向にコピーを行うことができる。各上位装置は、コピーペアを形成するどのボリュームにも自由に書き込むことができる。また双方向コピーの下で記憶装置システム間でリザーブ状態を伝播できるようになる。
【図面の簡単な説明】
【図１】実施形態のコンピューターシステムの構成図である。
【図２】実施形態の双方向リモートコピーを説明する図である。
【図３】実施形態の記憶装置システムのハードウェア構成図である。
【図４】第１の実施例の記憶装置システムのソフトウェア構成図である。
【図５】第１の実施例のデータ一貫性保持テーブルの構成図である。
【図６】第１の実施例の一時ビットマップテーブルの例を示す図である。
【図７】第１の実施例のホストＩ／Ｆより受けたＩ／Ｏを処理する処理手順を示すフローチャートである。
【図８】第１の実施例のＤＫＣＩ／Ｆより受けたＩ／Ｏを処理する処理手順を示すフローチャートである。
【図９】第１の実施例のデータ一貫性保持制御部の書き込み要求時のフローチャートである。
【図１０】第１の実施例のデータ一貫性保持制御部の重複ブロック削除処理のフローチャートである。
【図１１】第１の実施例のデータ一貫性保持制御部の一斉書き込み処理のフローチャートである。
【図１２】第３の実施例の記憶装置システムのソフトウェア構成図である。
【図１３】第３の実施例のビットマップ値を説明する図である。
【図１４】第３の実施例のロック状態保持テーブルの例を示す図である。
【図１５】第３の実施例のホストＩ／Ｆより受けたＩ／Ｏを処理する際のフローチャートである。
【図１６】第３の実施例のＤＫＣＩ／Ｆより受けたＩ／Ｏを処理する処理手順を示すフローチャートである。
【図１７】第３の実施例のデータ一貫性保持制御部の書き込み要求時のフローチャートである
【図１８】第３の実施例のデータ一貫性保持制御部の一斉書き込み処理のフローチャートである。
【図１９】第３の実施例の排他制御部の上位装置利用可・不可判定処理のフローチャートである。
【図２０】第３の実施例の排他制御部のホストＩ／Ｆより受けたロック形成要求によるロック形成処理のフローチャートである。
【図２１】第３の実施例の排他制御部のＤＫＣＩ／Ｆより受けたロック形成要求によるロック形成処理のフローチャートである。
【図２２】第３の実施例を適用するコンピューターシステムの構成図である。
【図２３】図２２のシステムの処理の一例に関する処理シーケンス図である。
【図２４】第３の実施例の排他制御部のホストＩ／Ｆより受けたロック解消要求によるロック解消処理のフローチャートである。
【図２５】第３の実施例の排他制御部のＤＫＣＩ／Ｆより受けたロック解消要求によるロック解消処理のフローチャートである。
【符号の説明】
１０００：上位装置、１０７０：記憶装置システム、１０８０：記憶装置システム、１３７０：物理ディスク、２０４０，４０２０：データ一貫性保持制御部、４０００：排他制御部。
【図１】
2004334434.tif 000003
【図２】
2004334434.tif 000004
【図３】
2004334434.tif 000005
【図４】
2004334434.tif 000006
【図５】
2004334434.tif 000007
【図６】
2004334434.tif 000008
【図７】
2004334434.tif 000009
【図８】
2004334434.tif 000010
【図９】
2004334434.tif 000011
【図１０】
2004334434.tif 000012
【図１１】
2004334434.tif 000013
【図１２】
2004334434.tif 000014
【図１３】
2004334434.tif 000015
【図１４】
2004334434.tif 000016
【図１５】
2004334434.tif 000017
【図１６】
2004334434.tif 000018
【図１７】
2004334434.tif 000019
【図１８】
2004334434.tif 000020
【図１９】
2004334434.tif 000021
【図２０】
2004334434.tif 000022
【図２１】
2004334434.tif 000023
【図２２】
2004334434.tif 000024
【図２３】
2004334434.tif 000025
【図２４】
2004334434.tif 000026
【図２５】
2004334434.tif 000027