(57)【特許請求の範囲】
【請求項１】
第１のストレージ装置をコピー元として、前記第１のストレージ装置とネットワークを介して接続する第２のストレージ装置をコピー先としてリモートコピーを実行可能なストレージ制御装置であって、
前記第１のストレージ装置が有するコピー元ボリュームを更新するデータを更新世代ごとに記憶するバッファを有する記憶部と、
前記コピー元ボリュームを更新するデータを受け付けた場合に、前記データを前記バッファに記憶し、前記コピー元ボリュームにおいて前記データが記憶される位置と前記バッファにおいて前記データが記憶されている位置との対応関係を示す対応関係情報を前記記憶部に記憶し、
前記第１のストレージ装置から前記第２のストレージ装置に前記データを転送する場合に、前記バッファが記憶する前記データのうち更新世代が古いデータを転送対象とし、前記更新世代が古いデータで前記コピー元ボリュームを更新し、前記更新世代が古いデータを前記バッファから削除するとともに、前記更新世代が古いデータに対応する対応関係情報を前記記憶部から削除し、
前記バッファの容量が不足した場合に、前記バッファが記憶する所定の更新世代が古いデータにもとづいて前記コピー元ボリュームにおける所定の領域単位の更新の有無を示す更新記録情報を生成して前記記憶部に記憶し、前記対応関係情報にしたがい前記コピー元ボリュームを前記所定の更新世代が古いデータで更新し、前記所定の更新世代が古いデータを前記バッファから削除するとともに、前記所定の更新世代が古いデータに対応する対応関係情報を前記記憶部から削除し、前記更新記録情報にもとづいて前記コピー元ボリュームが記憶するデータを前記第２のストレージ装置に転送する、
制御部と、
を備えるストレージ制御装置。
【請求項２】
前記制御部は、前記所定の更新世代が古いデータを前記バッファから削除した後、前記バッファの容量が再度不足した場合に前記バッファから削除対象となるデータにもとづく更新記録情報を転送制御用更新記録情報として生成して前記記憶部に記憶する、
請求項１記載のストレージ制御装置。
【請求項３】
前記制御部は、リモートコピーの順序性が保証されていない状態で前記バッファの容量が不足した場合に、前記転送制御用更新記録情報を前記更新記録情報に反映し、
前記リモートコピーの順序性が保証されていない状態は、前記更新記録情報において前記コピー元ボリュームにおける所定の領域単位の更新有無を示すビットに対応する前記転送制御用更新記録情報のビットの少なくとも一つが、所定の領域単位の更新ありを示している状態である、
請求項２記載のストレージ制御装置。
【請求項４】
前記制御部は、前記コピー元ボリュームからのデータの読み出しを受け付けた場合、前記対応関係情報を参照し、読み出し対象データを前記バッファが記憶しているとき、前記バッファから前記読み出し対象データを取得して応答し、前記読み出し対象データを前記バッファが記憶していないとき、前記コピー元ボリュームから前記読み出し対象データを取得して応答する、
請求項１記載のストレージ制御装置。
【請求項５】
第１のストレージ装置をコピー元として、前記第１のストレージ装置とネットワークを介して接続する第２のストレージ装置をコピー先としてリモートコピーを実行可能なストレージ制御装置に、
前記第１のストレージ装置が有するコピー元ボリュームを更新するデータを受け付けた場合に、記憶部に設けられるバッファに前記データを更新世代ごとに記憶し、前記コピー元ボリュームにおいて前記データが記憶される位置と前記バッファにおいて前記データが記憶されている位置との対応関係を示す対応関係情報を前記記憶部に記憶する処理と、
前記第１のストレージ装置から前記第２のストレージ装置に前記データを転送する場合に、前記バッファが記憶する前記データのうち前記更新世代が古いデータを転送対象とし、前記更新世代が古いデータで前記コピー元ボリュームを更新し、前記更新世代が古いデータを前記バッファから削除するとともに、前記更新世代が古いデータに対応する対応関係情報を前記記憶部から削除する処理と、
前記バッファの容量が不足した場合に、前記バッファが記憶する所定の更新世代が古いデータにもとづいて前記コピー元ボリュームにおける所定の領域単位の更新の有無を示す更新記録情報を生成して前記記憶部に記憶し、前記対応関係情報にしたがい前記コピー元ボリュームを前記所定の更新世代が古いデータで更新し、前記所定の更新世代が古いデータを前記バッファから削除するとともに、前記所定の更新世代が古いデータに対応する対応関係情報を前記記憶部から削除し、前記更新記録情報にもとづいて前記コピー元ボリュームが記憶するデータを前記第２のストレージ装置に転送する処理と、
を実行させるコピー制御プログラム。
【請求項６】
第１のストレージ装置をコピー元として、前記第１のストレージ装置とネットワークを介して接続する第２のストレージ装置をコピー先としてリモートコピーを実行可能なストレージ制御装置が実行するコピー制御方法であって、
前記ストレージ制御装置が、
前記第１のストレージ装置が有するコピー元ボリュームを更新するデータを受け付けた場合に、記憶部に設けられるバッファに前記データを更新世代ごとに記憶し、前記コピー元ボリュームにおいて前記データが記憶される位置と前記バッファにおいて前記データが記憶されている位置との対応関係を示す対応関係情報を前記記憶部に記憶する処理と、
前記第１のストレージ装置から前記第２のストレージ装置に前記データを転送する場合に、前記バッファが記憶する前記データのうち前記更新世代が古いデータを転送対象とし、前記更新世代が古いデータで前記コピー元ボリュームを更新し、前記更新世代が古いデータを前記バッファから削除するとともに、前記更新世代が古いデータに対応する対応関係情報を前記記憶部から削除する処理と、
前記バッファの容量が不足した場合に、前記バッファが記憶する所定の更新世代が古いデータにもとづいて前記コピー元ボリュームにおける所定の領域単位の更新の有無を示す更新記録情報を生成して前記記憶部に記憶し、前記対応関係情報にしたがい前記コピー元ボリュームを前記所定の更新世代が古いデータで更新し、前記所定の更新世代が古いデータを前記バッファから削除するとともに、前記所定の更新世代が古いデータに対応する対応関係情報を前記記憶部から削除し、前記更新記録情報にもとづいて前記コピー元ボリュームが記憶するデータを前記第２のストレージ装置に転送する処理と、
を実行するコピー制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、コピー制御プログラム、およびコピー制御方法に関する。
【背景技術】
【０００２】
遠隔地に存在するストレージ装置をコピー先として、コピー元となるボリュームのデータを転送するリモートコピーが知られ、このようなリモートコピーは、たとえば災害対策を目的として利用されている。また、順序性を保証したリモートコピーがあり、順序性を保証したリモートコピーは、コピー元ボリュームにおけるデータの更新の順序性を保ってコピー先ボリュームにデータをコピーする。
【０００３】
順序性を保証したリモートコピーは、コピー元ボリュームを更新したデータをコピー元バッファに保存し、コピー元バッファからコピー先ボリュームへ更新順にデータを転送する。この時、ネットワークの障害等によりストレージ装置間の通信ができなくなると、コピー元ボリュームへの更新によりコピー元バッファの枯渇が発生し得る。
【０００４】
コピー元のストレージ装置は、コピー元バッファが記憶するデータからコピー元ボリュームの更新領域に対応するビット列を生成して、以降、正常に復帰するまでの間、ビット列を用いてコピー元ボリュームへの更新を管理する。ビット列は、コピー元ボリュームの所定の領域単位での更新の有無を管理する情報であり、更新順序に関する情報を含まない。そのため正常に復帰するまでの間、リモートコピーは、順序性が保証されない状態となる。
【０００５】
このような順序性が保証されない状態に陥ることを抑制するため、コピー元バッファの枯渇を抑制する試みがある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−１４０６５１号公報
【特許文献２】特開２０１１−１５０６０２号公報
【特許文献３】特開２００７−１８２３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、一旦、コピー元バッファの枯渇が発生すると、コピー元ボリュームの更新領域に対応するビット列を生成してコピー元バッファがクリアされる。このようにして生成されたビット列に対応する転送対象データは、コピー元バッファのサイズに応じた大きさとなり、その転送に多くの時間を要する。
【０００８】
このようなリモートコピーは、コピー元バッファの枯渇により、順序性が保証されない状態が長時間継続することから、より速やかに順序性が保証された状態に復帰することが求められる。
【０００９】
１つの側面では、本発明は、リモートコピーにおける順序性が保証されない状態から、より速やかに順序性が保証された状態に復帰できるストレージ制御装置、コピー制御プログラム、およびコピー制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、以下に示すような、ストレージ制御装置が提供される。ストレージ制御装置は、第１のストレージ装置をコピー元として、第１のストレージ装置とネットワークを介して接続する第２のストレージ装置をコピー先としてリモートコピーを実行可能である。ストレージ制御装置は、記憶部と、制御部とを備える。記憶部は、第１のストレージ装置が有するコピー元ボリュームを更新するデータを更新世代ごとに記憶するバッファを有する。制御部は、コピー元ボリュームを更新するデータを受け付けた場合に、データをバッファに記憶し、コピー元ボリュームにおいてデータが記憶される位置とバッファにおいてデータが記憶されている位置との対応関係を示す対応関係情報を記憶部に記憶し、第１のストレージ装置から第２のストレージ装置にデータを転送する場合に、バッファが記憶するデータのうち更新世代が古いデータを転送対象とし、更新世代が古いデータでコピー元ボリュームを更新し、更新世代が古いデータをバッファから削除するとともに、更新世代が古いデータに対応する対応関係情報を記憶部から削除し、バッファの容量が不足した場合に、バッファが記憶する所定の更新世代が古いデータにもとづいてコピー元ボリュームにおける所定の領域単位の更新の有無を示す更新記録情報を生成して記憶部に記憶し、対応関係情報にしたがいコピー元ボリュームを所定の更新世代が古いデータで更新し、所定の更新世代が古いデータをバッファから削除するとともに、所定の更新世代が古いデータに対応する対応関係情報を記憶部から削除し、更新記録情報にもとづいてコピー元ボリュームが記憶するデータを第２のストレージ装置に転送する。
【発明の効果】
【００１１】
１態様によれば、ストレージ制御装置、コピー制御プログラム、およびコピー制御方法において、リモートコピーにおける順序性が保証されない状態から、より速やかに順序性が保証された状態に復帰できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施形態のストレージシステムの構成の一例を示す図である。
【図２】第２の実施形態のストレージシステムの構成の一例を示す図である。
【図３】第２の実施形態のストレージ装置の構成の一例を示す図である。
【図４】第２の実施形態のＣＭのハードウェア構成の一例を示す図である。
【図５】第２の実施形態のコピー元ストレージ装置の機能構成の一例を示す図である。
【図６】第２の実施形態のコピー先ストレージ装置の機能構成の一例を示す図である。
【図７】第２の実施形態のライトＩ／Ｏ受付処理のフローチャートを示す図である。
【図８】第２の実施形態のインデックステーブルの一例を示す図である。
【図９】第２の実施形態におけるライトＩ／Ｏの受付にもとづくコピー元バッファの更新の一例を示す図である。
【図１０】第２の実施形態におけるライトＩ／Ｏの受付にもとづくインデックステーブルの更新の一例を示す図である。
【図１１】第２の実施形態の転送処理のフローチャートを示す図である。
【図１２】第２の実施形態におけるコピー元バッファからの転送データの削除の一例を示す図である。
【図１３】第２の実施形態における転送データに対応するエントリのインデックステーブルからの削除の一例を示す図である。
【図１４】第２の実施形態のリードＩ／Ｏ受付処理のフローチャートを示す図である。
【図１５】第２の実施形態のコピー元バッファ枯渇処理のフローチャートを示す図である。
【図１６】第２の実施形態の順序性が保証されている状態でコピー元バッファが枯渇したときの、更新記録用ビット列の生成および転送制御用ビット列の生成の一例を示す図である。
【図１７】第２の実施形態の順序性が保証されていない状態でコピー元バッファが枯渇したときの、更新記録用ビット列の更新および転送制御用ビット列の生成の一例を示す図である。
【図１８】第２の実施形態の復旧処理のフローチャートを示す図である。
【図１９】第２の実施形態の復旧時第１転送処理のフローチャートを示す図である。
【図２０】第２の実施形態の復旧時第２転送処理のフローチャートを示す図である。
【図２１】第２の実施形態の更新記録用ビット列と転送制御用ビット列とにもとづくデータ転送の順序の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、実施の形態について、図面を参照しながら詳細に説明する。
［第１の実施形態］
まず、第１の実施形態のストレージシステムについて図１を用いて説明する。図１は、第１の実施形態のストレージシステムの構成の一例を示す図である。
【００１４】
ストレージシステム１は、ストレージ制御装置２と、第１のストレージ装置３と、ネットワーク５を介して第１のストレージ装置３と接続する第２のストレージ装置４とを含む。ストレージ制御装置２は、第１のストレージ装置３と一体または別体に設けられ、第１のストレージ装置３を制御対象とする情報処理装置である。第１のストレージ装置３は、コピー元ボリューム３ａにデータを記憶可能であり、第２のストレージ装置４は、コピー先ボリューム４ａにデータを記憶可能である。ストレージ制御装置２は、第１のストレージ装置３をコピー元とし第２のストレージ装置４をコピー先とするリモートコピーを実行可能である。
【００１５】
ストレージ制御装置２は、記憶部２ａと、制御部２ｂとを備える。記憶部２ａは、所定の容量を有するバッファ２ｃを有する。バッファ２ｃは、コピー元ボリューム３ａを更新するデータを更新世代ごとに記憶する。たとえば、バッファ２ｃは、更新世代が古い順に、１世代データ８ｂ、２世代データ８ｃ、および３世代データ８ｄを記憶する。
【００１６】
制御部２ｂは、コピー元ボリューム３ａを更新するデータを、たとえば図示しないホストからのライトＩ／Ｏ（Input / Output）として受け付ける。制御部２ｂは、受け付けたデータを最新の更新世代のデータとしてバッファ２ｃに記憶する。制御部２ｂは、対応関係情報６を記憶部２ａに記憶する。対応関係情報６は、コピー元ボリューム３ａにおいてデータ８が記憶される位置と、バッファ２ｃにおいてデータ８が記憶されている位置との対応関係を示す。コピー元ボリューム３ａにおいてデータ８が記憶される位置は、受け付けたデータ８によって更新される記憶領域を示す。この時点で、受け付けたデータは、バッファ２ｃに記憶され、コピー元ボリューム３ａに記憶されない。すなわち、コピー元ボリューム３ａは、データ８が記憶されることとなる領域に、データ８によって更新される前のデータを記憶する。
【００１７】
制御部２ｂは、第１のストレージ装置３から第２のストレージ装置４にデータを転送する場合に、バッファ２ｃが記憶するデータのうち更新世代が古いデータを転送対象とする。制御部２ｂは、転送対象とした更新世代が古いデータ（転送対象データ）でコピー元ボリューム３ａを更新する。ストレージ制御装置２が受け付けたデータは、この時点でコピー元ボリューム３ａに記憶される。制御部２ｂは、転送対象データをバッファ２ｃから削除するとともに、転送対象データに対応する対応関係情報６を記憶部２ａから削除する。
【００１８】
制御部２ｂは、バッファ２ｃの容量が不足した場合に、バッファ２ｃが記憶する所定の更新世代が古いデータ（特定データ）にもとづいて更新記録情報７を生成して記憶部２ａに記憶する。制御部２ｂは、世代単位で特定データとする範囲（たとえば、２つの更新世代）を選択する。更新記録情報７は、コピー元ボリューム３ａにおける所定の領域単位の更新の有無を示す情報であり、たとえば１ビットが所定の領域単位の更新の有無を示すビット列やビットマップなどで表わされる。
【００１９】
制御部２ｂは、対応関係情報６にしたがいコピー元ボリューム３ａを特定データで更新する。制御部２ｂは、特定データをバッファ２ｃから削除するとともに、特定データに対応する対応関係情報６を記憶部２ａから削除する。制御部２ｂは、更新記録情報７にもとづいてコピー元ボリューム３ａが記憶するデータを第２のストレージ装置４に転送する。
【００２０】
これにより、ストレージ制御装置２は、特定データによりバッファ２ｃの空き容量を確保することができる。また、ストレージ制御装置２は、更新記録情報７にもとづいて転送するデータ量を抑制することができることから、リモートコピーにおける順序性が保証されない状態から、より速やかに順序性が保証された状態に復帰できる。
【００２１】
上記処理について一例をあげて説明する。たとえば、制御部２ｂは、ホストからのライトＩ／Ｏによりコピー元ボリューム３ａへの更新データを受付データ８ａとして受け付けて、すでに１世代データ８ｂおよび２世代データ８ｃが記憶されていれば最新の更新世代となる３世代データ８ｄとしてバッファ２ｃに記憶する。制御部２ｂは、コピー元ボリューム３ａにおいて更新対象となる記憶領域と、３世代データ８ｄのバッファ２ｃの記憶領域との対応関係を対応関係情報６として記憶部２ａに記憶する。
【００２２】
バッファ２ｃが１世代データ８ｂ、２世代データ８ｃ、および３世代データ８ｄを記憶するとき、制御部２ｂは、更新世代が古い１世代データ８ｂを転送対象とする。制御部２ｂは、１世代データ８ｂでコピー元ボリューム３ａを更新し、１世代データ８ｂをバッファ２ｃから削除するとともに、１世代データ８ｂに対応する対応関係情報６を記憶部２ａから削除する。
【００２３】
バッファ２ｃが１世代データ８ｂ、２世代データ８ｃ、および３世代データ８ｄを記憶した状態でバッファ２ｃの容量が不足した場合に、制御部２ｂは、１世代データ８ｂを特定データとする。制御部２ｂは、１世代データ８ｂにもとづいて更新記録情報７を生成して記憶部２ａに記憶する。制御部２ｂは、対応関係情報６にしたがいコピー元ボリューム３ａにおける１世代データ８ｂが記憶される位置を特定し、１世代データ８ｂでコピー元ボリューム３ａを更新する。制御部２ｂは、１世代データ８ｂをバッファ２ｃから削除するとともに、１世代データ８ｂに対応する対応関係情報６を記憶部２ａから削除する。これにより、バッファ２ｃは、１世代データ８ｂの分だけ容量を確保し、さらなる受付データをバッファ２ｃに記憶することができる。制御部２ｂは、更新記録情報７にもとづいて未転送のデータ８ｅを特定し、コピー元ボリューム３ａが記憶するデータ８ｅを第２のストレージ装置４に転送する。
【００２４】
［第２の実施形態］
次に、第２の実施形態のストレージシステムについて図２を用いて説明する。図２は、第２の実施形態のストレージシステムの構成の一例を示す図である。
【００２５】
ストレージシステム１０は、複数のストレージ装置１１と、複数のストレージ装置１１を接続するネットワーク１２を含む。ストレージシステム１０は、１つのストレージ装置１１をコピー元（コピー元ストレージ装置）とし、他のストレージ装置１１をコピー先（コピー先ストレージ装置）とするリモートコピーをおこなうことができる。なお、ストレージシステム１０は、コピー元ストレージ装置とコピー先ストレージ装置との間でコピーセッションを生成することで、複数のコピー元ストレージ装置から１つのコピー先ストレージ装置に対してリモートコピーをおこなうことができる。また、ストレージシステム１０は、１つのコピー元ストレージ装置が複数のコピー先ストレージ装置に対してリモートコピーをおこなうことができる。
【００２６】
次に、第２の実施形態のストレージ装置１１の構成について図３を用いて説明する。図３は、第２の実施形態のストレージ装置１１の構成の一例を示す図である。
ストレージ装置１１は、ＣＭ１００と複数のＨＤＤ（Hard Disk Drive：ハードディスクドライブ）１３（１３ａ，１３ｂ，・・・，１３ｃ）を含む。ストレージ装置１１は、複数のＨＤＤ１３を用いて１以上のボリューム（ＬＵＮ（Logical Unit Number））を実装する。ＣＭ（Controller Module）１００は、ストレージ装置１１を制御対象とする制御装置であり、図示しないホストからＩ／Ｏ要求を受け付けてＨＤＤ１３に対してデータの読み出し、または書き込みをおこなう。
【００２７】
なお、ＣＭ１００は、ストレージ装置１１と一体に設けられるものであってもよいし、別体にして設けられるものであってもよい。
次に、ＣＭ１００のハードウェア構成について図４を用いて説明する。図４は、第２の実施形態のＣＭのハードウェア構成の一例を示す図である。
【００２８】
ＣＭ１００は、ネットワークインタフェース１０１と、プロセッサ１０２と、ＲＡＭ（Random Access Memory）１０３と、ＨＤＤ１０４と、機器接続インタフェース１０５と、ディスクインタフェース１０６を含む。
【００２９】
ＣＭ１００は、プロセッサ１０２によって装置全体が制御されている。プロセッサ１０２には、バスを介してＲＡＭ１０３と複数の周辺機器が接続されている。プロセッサ１０２は、２以上のプロセッサからなるマルチコアプロセッサであってもよい。
【００３０】
プロセッサ１０２は、たとえばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。
【００３１】
ＲＡＭ１０３は、ＣＭ１００の主記憶装置として使用される。ＲＡＭ１０３には、プロセッサ１０２に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時格納される。また、ＲＡＭ１０３には、プロセッサ１０２による処理に必要な各種データが格納される。また、ＲＡＭ１０３は、プロセッサ１０２のキャッシュメモリとして機能する。
【００３２】
バスに接続されている周辺機器としては、ネットワークインタフェース１０１、ＨＤＤ１０４、機器接続インタフェース１０５、およびディスクインタフェース１０６がある。
ネットワークインタフェース１０１は、ネットワーク１２を介して他のストレージ装置１１との間でデータの送受信をおこなう。
【００３３】
ＨＤＤ１０４は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しをおこなう。ＨＤＤ１０４は、ＣＭ１００の補助記憶装置として使用される。ＨＤＤ１０４には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
【００３４】
機器接続インタフェース１０５は、ＣＭ１００に周辺機器を接続するための通信インタフェースである。たとえば機器接続インタフェース１０５には、図示しないメモリ装置やメモリリーダライタを接続することができる。メモリ装置は、機器接続インタフェース１０５との通信機能を搭載した記録媒体である。メモリリーダライタは、メモリカードへのデータの書き込み、またはメモリカードからのデータの読み出しをおこなう装置である。メモリカードは、たとえば、カード型の記録媒体である。
【００３５】
また、機器接続インタフェース１０５には、図示しないモニタを接続してもよい。その場合、機器接続インタフェース１０５は、プロセッサ１０２からの命令にしたがって、画像をモニタの画面に表示させるグラフィック処理機能を有する。
【００３６】
また、機器接続インタフェース１０５は、図示しないキーボードやマウスを接続してもよい。その場合、機器接続インタフェース１０５は、キーボードやマウスから送られてくる信号をプロセッサ１０２に送信する。なお、マウスは、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３７】
また、機器接続インタフェース１０５は、図示しない光学ドライブ装置を接続してもよい。光学ドライブ装置は、レーザ光などを利用して、光ディスクに記録されたデータの読み取りをおこなう。光ディスクは、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００３８】
ディスクインタフェース１０６は、１または２以上のＨＤＤ１３との間でデータの送受信をおこなう。
以上のようなハードウェア構成によって、第２の実施形態のＣＭ１００の処理機能を実現することができる。なお、第１の実施形態に示したストレージ制御装置２も、図４に示したＣＭ１００と同様のハードウェアにより実現することができる。
【００３９】
ＣＭ１００は、たとえば、コンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施形態の処理機能を実現する。ＣＭ１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。たとえば、ＣＭ１００に実行させるプログラムをＨＤＤ１０４に格納しておくことができる。プロセッサ１０２は、ＨＤＤ１０４内のプログラムの少なくとも一部をＲＡＭ１０３にロードし、プログラムを実行する。また、ＣＭ１００に実行させるプログラムを、光ディスク、メモリ装置、メモリカードなどの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、たとえばプロセッサ１０２からの制御により、ＨＤＤ１０４にインストールされた後、実行可能となる。またプロセッサ１０２が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４０】
次に、ストレージ装置１１がコピー元ストレージ装置として動作する場合の機能構成と、コピー元ストレージ装置が実行する処理の概要について図５を用いて説明する。図５は、第２の実施形態のコピー元ストレージ装置の機能構成の一例を示す図である。
【００４１】
コピー元ストレージ装置１１ａは、ストレージシステム１０における複数のストレージ装置１１のうちリモートコピーのコピー元となるストレージ装置１１である。コピー元ストレージ装置１１ａは、１以上のコピー元ＬＵＮを有し、たとえばコピー元ＬＵＮ１とコピー元ＬＵＮ２を有する。コピー元ＬＵＮは、コピー元ボリュームとして、コピー先ストレージ装置へのコピー対象となるデータを記憶する。
【００４２】
コピー元ストレージ装置１１ａは、コピー先となるストレージ装置１１ごとにコピーセッションを生成し、コピーセッションごとにコピー元バッファ１１２を用意する。コピー元ストレージ装置１１ａは、複数のコピーセッションを生成することができ、コピーセッションごとに独立したコピー制御をおこなう。
【００４３】
コピー元ストレージ装置１１ａは、コピー元ＬＵＮへのデータの更新（更新データ）を受け付けた場合、コピー元バッファ１１２に更新データを格納する。コピー元ストレージ装置１１ａは、この時点でコピー元ＬＵＮへのデータの更新をおこなわない。コピー元ストレージ装置１１ａは、コピー元ＬＵＮにおいて更新前のデータが格納されている領域と、コピー元バッファ１１２が更新データを格納する領域との対応関係をインデックステーブル１１３に記録する。これにより、コピー元ストレージ装置１１ａは、コピー元バッファ１１２とインデックステーブル１１３とからコピー元ＬＵＮへのデータの更新を所要のタイミングでおこなうことができる。なお、コピー元ストレージ装置１１ａは、コピー元バッファ１１２ごとにインデックステーブル１１３を保持する。
【００４４】
コピー元バッファ１１２は、コピー元ＬＵＮを更新するデータを、更新順序に応じた記憶領域に格納する。コピー元バッファ１１２は、更新順序に応じた更新世代ごとの記憶領域を有する。コピー元ストレージ装置１１ａは、所定単位の更新データを１つの世代としてコピー元バッファ１１２に格納し、更新データを更新世代ごとに管理可能にしている。たとえば、コピー元ストレージ装置１１ａは、一定時間の経過や、更新データのサイズが所定量を超えた場合に、更新データを格納する世代を変更する。
【００４５】
コピー元ストレージ装置１１ａは、コピー元バッファ１１２が格納する世代のうち送信対象とする世代の更新データを、世代単位でキャッシュ１１１に格納するとともに、コピー元ＬＵＮに格納する。キャッシュ１１１は、コピー先ストレージ装置に転送するデータ（転送データ）を一時的に格納するメモリである。コピー元ストレージ装置１１ａは、キャッシュ１１１に格納したデータを、ネットワークインタフェース１０１からコピー先ストレージ装置に転送する。これにより、コピー元ストレージ装置１１ａは、コピー先ストレージ装置との整合性を確保する。
【００４６】
このように、コピー元ストレージ装置１１ａは、世代ごとにデータを転送するので、転送データがそれぞれの世代で半端なデータになることがない。なお、コピー元バッファ１１２は、複数のコピーセッションにて共有されうる。たとえば、コピー元ストレージ装置１１ａが有するコピー元ＬＵＮ１とコピー元ＬＵＮ２を合わせて整合性のあるデータを保ちたい場合、それぞれのコピーセッションが１つのコピー元バッファ１１２を共有する。
【００４７】
一方で、コピー元バッファ１１２は、コピー元ＬＵＮへのデータ更新により記憶領域を解放するが、回線障害や過剰な更新により記憶容量を枯渇することがある。コピー元ストレージ装置１１ａは、コピー元バッファ１１２における世代単位の一部領域を解放し、コピー元ＬＵＮへのデータ更新をおこなうことで、コピー元バッファ１１２の記憶容量を確保することをおこなう。このとき、コピー元ストレージ装置１１ａは、コピー元ＬＵＮごとの更新領域を示す、更新記録用ビット列１１４と転送制御用ビット列１１５とを生成する。たとえば、コピー元ストレージ装置１１ａは、コピー元ＬＵＮ１に対応して更新記録用ビット列１１４ａと転送制御用ビット列１１５ａとを生成し、コピー元ＬＵＮ２に対応して更新記録用ビット列１１４ｂと転送制御用ビット列１１５ｂとを生成する。その後、コピー元ストレージ装置１１ａは、コピー先ストレージ装置にデータを転送可能になった際に、更新記録用ビット列１１４と転送制御用ビット列１１５とを参照し、送信データをキャッシュ１１１に格納する。
【００４８】
転送制御用ビット列１１５は、更新記録用ビット列１１４と同様のフォーマットであり、更新記録用ビット列１１４にもとづくデータ転送の順序制御に用いられる情報である。また、転送制御用ビット列１１５は、再度のコピー元バッファ枯渇時に、更新記録用ビット列１１４に統合される情報である。したがって、転送制御用ビット列１１５は、更新記録用ビット列１１４の一形態として捉えることができる。更新記録用ビット列１１４と転送制御用ビット列１１５の詳細については、後で説明する。
【００４９】
なお、キャッシュ１１１は、更新記録用ビット列１１４が作成されない転送データと、更新記録用ビット列１１４が作成された転送データとを格納する。そのため、コピー元ストレージ装置１１ａは、コピー先ストレージ装置が識別可能なフォーマットで転送データをキャッシュ１１１に格納する。これにより、コピー先ストレージ装置は、転送データが、更新記録用ビット列１１４が作成されたものであるか否かを区別することができる。
【００５０】
コピー元ストレージ装置１１ａは、コピースケジューラ１１０を含む。コピースケジューラ１１０は、リモートコピーを制御する制御部として機能し、たとえばプロセッサ１０２がプログラムを実行することにより、コピースケジューラ１１０の処理機能を実現する。コピースケジューラ１１０は、コピー元ストレージ装置１１ａが更新データを受け付けた場合、コピー元バッファ１１２の使用状況を確認しながら適切な世代に更新データを格納する。また、コピースケジューラ１１０は、コピー元バッファが枯渇していた場合、更新記録用ビット列１１４と転送制御用ビット列１１５の生成（更新を含む）をおこなう。また、コピースケジューラ１１０は、コピー先ストレージ装置にデータを転送可能な場合、更新記録用ビット列１１４と転送制御用ビット列１１５にしたがいコピー元ＬＵＮから読み出したデータをキャッシュ１１１に格納する。
【００５１】
なお、コピー元ストレージ装置１１ａは、キャッシュ１１１、コピー元バッファ１１２、インデックステーブル１１３、更新記録用ビット列１１４、および転送制御用ビット列１１５を、ＲＡＭ１０３あるいはＨＤＤ１０４に保持することができる。
【００５２】
次に、ストレージ装置１１がコピー先ストレージ装置として動作する場合の機能構成と、コピー先ストレージ装置が実行する処理の概要について図６を用いて説明する。図６は、第２の実施形態のコピー先ストレージ装置の機能構成の一例を示す図である。
【００５３】
コピー先ストレージ装置１１ｂは、ストレージシステム１０における複数のストレージ装置１１のうちリモートコピーのコピー先となるストレージ装置１１である。コピー先ストレージ装置１１ｂは、１以上のコピー先ＬＵＮを有し、たとえばコピー先ＬＵＮ１とコピー先ＬＵＮ２とコピー先ＬＵＮ３とを有する。コピー先ＬＵＮは、コピー先ボリュームとして、コピー元ストレージ装置からのコピー対象となるデータを記憶する。
【００５４】
コピー先ストレージ装置１１ｂは、コピースケジューラ１２０を含む。コピースケジューラ１２０は、リモートコピーを制御する制御部として機能し、たとえばプロセッサ１０２がプログラムを実行することにより、コピースケジューラ１２０の処理機能を実現する。コピー先ストレージ装置１１ｂは、コピー元ストレージ装置１１ａからの転送データを、ネットワークインタフェース１０１を介してキャッシュ１２１に格納する。コピースケジューラ１２０は、キャッシュ１２１が格納するデータの種類に応じた処理を実行する。コピースケジューラ１２０は、キャッシュ１２１が格納する転送データのうち更新記録用ビット列１１４が作成されない転送データを、コピー先バッファ１２２の該当世代に対応する領域に格納する。コピースケジューラ１２０は、コピー先バッファ１２２の１つの世代の受信を完了した場合に、コピー先バッファ１２２から該当する世代のデータを、コピー先ＬＵＮの該当する領域に格納する。また、コピースケジューラ１２０は、キャッシュ１２１が格納する転送データのうち更新記録用ビット列１１４が作成された転送データを、コピー先ＬＵＮの該当する領域に格納する。
【００５５】
なお、コピー先ストレージ装置１１ｂは、キャッシュ１２１およびコピー先バッファ１２２を、ＲＡＭ１０３あるいはＨＤＤ１０４に保持することができる。
次に、ライトＩ／Ｏ受付処理について図７を用いて説明する。図７は、第２の実施形態のライトＩ／Ｏ受付処理のフローチャートを示す図である。
【００５６】
ライトＩ／Ｏ受付処理は、ライトＩ／Ｏにより受け付けた更新データ（新規に書き込まれるデータを含む）をコピー元バッファ１１２に格納する処理である。ライトＩ／Ｏ受付処理は、図示しないホストからライトＩ／Ｏを受け付けて、コピー元ストレージ装置１１ａ（コピースケジューラ１１０）が実行する処理である。
【００５７】
［ステップＳ１１］コピースケジューラ１１０は、コピー元ＬＵＮに対する更新データをコピー元バッファ１１２の最新世代に対応する領域に保存する。なお、コピースケジューラ１１０は、インデックステーブル１１３を参照して、更新データによって上書きされるデータ（古い世代の更新データ）をコピー元バッファ１１２が格納している場合、コピー元バッファ１１２から古い世代の更新データを消去する。
【００５８】
［ステップＳ１２］コピースケジューラ１１０は、インデックステーブル１１３に更新データに対応するエントリを追加または更新する。
［ステップＳ１３］コピースケジューラ１１０は、コピー元バッファ１１２の空き領域が十分であるか否かを判定する。コピースケジューラ１１０は、コピー元バッファ１１２の空き領域が十分でない場合にステップＳ１４にすすみ、コピー元バッファ１１２の空き領域が十分である場合にライトＩ／Ｏ受付処理を終了する。たとえば、コピースケジューラ１１０は、コピー元バッファ１１２の空き領域と、あらかじめ設定する閾値とを比較することにより、コピー元バッファ１１２の空き領域が十分であるか否かの判定をおこなうことができる。
【００５９】
［ステップＳ１４］コピースケジューラ１１０は、コピー元バッファ枯渇処理を実行する。コピー元バッファ枯渇処理は、コピー元バッファ１１２の空き領域が十分でない場合、すなわちコピー元バッファ１１２が枯渇したとみなせる状態である場合に、コピー元バッファ１１２の所定領域を解放して空き領域を確保する処理である。コピー元バッファ枯渇処理については、後で図１５を用いて説明する。コピースケジューラ１１０は、コピー元バッファ枯渇処理の実行後にライトＩ／Ｏ受付処理を終了する。
【００６０】
ここで、インデックステーブル１１３について図８を用いて説明する。図８は、第２の実施形態のインデックステーブルの一例を示す図である。
インデックステーブル３０１は、インデックステーブル１１３の一例である。インデックステーブル３０１は、項目「ＬＵＮ：ＬＢＡ」と、項目「バッファアドレス」とを含む。項目「ＬＵＮ：ＬＢＡ」は、コピー元ＬＵＮを特定可能な識別情報と、コピー元ＬＵＮにおけるＬＢＡ（Logical Block Address）を示す。項目「バッファアドレス」は、コピー元バッファ１１２のアドレスを示す。インデックステーブル３０１は、項目「ＬＵＮ：ＬＢＡ」と項目「バッファアドレス」の対をエントリとして含む。エントリは、項目「ＬＵＮ：ＬＢＡ」を更新することとなるデータの、コピー元バッファ１１２における格納位置を示す。
【００６１】
たとえば、ＬＵＮ：ＬＢＡ「０ｘ００：０ｘ１００」とバッファアドレス「０ｘ１０００」を含むエントリは、ＬＵＮ「０ｘ００」のＬＢＡ「０ｘ１００」を更新することとなるデータがコピー元バッファ１１２のバッファアドレス「０ｘ１０００」に格納されていることを示す。
【００６２】
このようなインデックステーブル３０１のエントリの追加あるいは更新について図９および図１０を用いて説明する。まず、ライトＩ／Ｏの受付にもとづくコピー元バッファ１１２の更新について図９を用いて説明する。図９は、第２の実施形態におけるライトＩ／Ｏの受付にもとづくコピー元バッファの更新の一例を示す図である。
【００６３】
コピー元バッファ１１２は、第１世代から第ｎ世代までの更新データを格納していたところ、ＬＵＮ「０ｘ００」のＬＢＡ「０ｘ１００−０ｘ２００」を更新先とするライトＩ／Ｏを受け付け、第（ｎ＋１）世代として更新データが格納された状態を示す。このとき、コピースケジューラ１１０は、インデックステーブル１１３にＬＵＮ：ＬＢＡ「０ｘ００：０ｘ１００−０ｘ２００」と重複するエントリがなければ、更新データに対応するエントリをインデックステーブル１１３に追加する。この場合、インデックステーブル１１３は、ＬＵＮ：ＬＢＡ「０ｘ００：０ｘ１００」とバッファアドレス「０ｘ７０００」を含むエントリを追加する。
【００６４】
一方、コピースケジューラ１１０は、インデックステーブル１１３にＬＵＮ：ＬＢＡ「０ｘ００：０ｘ１００−０ｘ２００」と重複するエントリがあれば、インデックステーブル１１３から重複するエントリを削除し、更新データに対応するエントリを追加する。すなわち、コピースケジューラ１１０は、エントリが重複することとなる場合、インデックステーブル１１３にある古いエントリを新しいエントリによって更新する。
【００６５】
ここで、ライトＩ／Ｏの受付にもとづくインデックステーブル１１３の更新について図１０を用いて説明する。図１０は、第２の実施形態におけるライトＩ／Ｏの受付にもとづくインデックステーブルの更新の一例を示す図である。
【００６６】
インデックステーブル３０２は、ＬＵＮ：ＬＢＡ「０ｘ００：０ｘ１００」とバッファアドレス「０ｘ７０００」を含むエントリ（追加エントリ）を、インデックステーブル３０１（図８参照）に追加して更新したものである。インデックステーブル３０１は、ＬＵＮ：ＬＢＡ「０ｘ００：０ｘ１００」とバッファアドレス「０ｘ１０００」を含むエントリ（既存エントリ）を有することから、ＬＵＮ：ＬＢＡ「０ｘ００：０ｘ１００」が追加エントリと重複する。このため、コピースケジューラ１１０は、重複する既存エントリを削除して追加エントリを追加する更新をおこなう。これにより、コピースケジューラ１１０は、コピー元バッファ１１２を効率的に使用することができるほか、転送データ量の削減、バッファ枯渇にもとづく順序性が保証されない状態からの早期復帰を図ることができる。
【００６７】
次に、転送処理について図１１を用いて説明する。図１１は、第２の実施形態の転送処理のフローチャートを示す図である。
転送処理は、コピー元バッファ１１２が格納する更新データを、コピー先ストレージ装置１１ｂに転送する処理である。転送処理は、コピー元バッファ１１２が更新データを格納している状態で、コピー元ストレージ装置１１ａ（コピースケジューラ１１０）が実行する処理である。
【００６８】
［ステップＳ２１］コピースケジューラ１１０は、転送可能状態であるか否かを判定する。転送可能状態は、コピー元ストレージ装置１１ａとコピー先ストレージ装置１１ｂとが通信可能な状態であり、コピー元ストレージ装置１１ａからコピー先ストレージ装置１１ｂへとデータ転送をおこなうことができる状態である。コピースケジューラ１１０は、転送可能状態である場合にステップＳ２２にすすみ、転送可能状態でない場合に転送処理を終了する。
【００６９】
［ステップＳ２２］コピースケジューラ１１０は、転送条件の成立を判定する。転送条件は、コピー元ストレージ装置１１ａからコピー先ストレージ装置１１ｂへとデータ転送をおこなうための条件であり、あらかじめ定められる。転送条件は、たとえば、コピー元バッファ１１２に更新データが格納されてから所定時間が経過したこと、１つの世代の更新データが所定量格納されたことなどがある。コピースケジューラ１１０は、転送条件が成立する場合にステップＳ２３にすすみ、転送条件が成立しない場合に転送処理を終了する。
【００７０】
［ステップＳ２３］コピースケジューラ１１０は、転送対象となる世代のデータ（転送データ）をキャッシュ１１１に格納する。キャッシュ１１１に格納されたデータは、所要のタイミングで、ネットワークインタフェース１０１を介してコピー先ストレージ装置１１ｂに転送される。
【００７１】
［ステップＳ２４］コピースケジューラ１１０は、転送データをコピー元ＬＵＮに格納する。これにより、コピー元ＬＵＮは、ライトＩ／Ｏにもとづく更新データで更新される。
【００７２】
［ステップＳ２５］コピースケジューラ１１０は、コピー元バッファ１１２から転送データを削除する。これにより、コピー元バッファ１１２は、転送データを格納していた領域が解放される。
【００７３】
［ステップＳ２６］コピースケジューラ１１０は、解放されたバッファアドレスをキーにしてインデックステーブル１１３を検索し、ヒットしたエントリ（転送データに対応するエントリ）を削除する。コピースケジューラ１１０は、ヒットしたエントリを削除した後、転送処理を終了する。
【００７４】
このようなコピー元バッファ１１２からの転送データの削除と、転送データに対応するエントリのインデックステーブル１１３からの削除について図１２および図１３を用いて説明する。まず、コピー元バッファ１１２からの転送データの削除について図１２を用いて説明する。図１２は、第２の実施形態におけるコピー元バッファからの転送データの削除の一例を示す図である。
【００７５】
コピー元バッファ１１２は、バッファアドレス「０ｘ３０００」を転送元領域とし、転送元領域に格納されているデータをコピー先バッファ１２２への転送対象としている。なお、コピー元バッファ１１２からコピー先バッファ１２２への転送は、コピー元ストレージ装置１１ａのキャッシュ１１１とコピー先ストレージ装置１１ｂのキャッシュ１２１を介しておこなわれる。コピー元バッファ１１２は、コピー先バッファ１２２へデータを転送し、コピー元ＬＵＮにデータを格納した後、バッファアドレス「０ｘ３０００」の領域を解放する。
【００７６】
ここで、データ転送にもとづくインデックステーブル１１３の更新について図１３を用いて説明する。図１３は、第２の実施形態における転送データに対応するエントリのインデックステーブルからの削除の一例を示す図である。
【００７７】
インデックステーブル３０３は、インデックステーブル３０２（図１０参照）から転送データに対応するエントリを削除したものである。インデックステーブル３０２は、ＬＵＮ：ＬＢＡ「０ｘ００：０ｘ２００」とバッファアドレス「０ｘ３０００」を含むエントリ（削除エントリ）を有するが、インデックステーブル３０３は、削除エントリを有しない。
【００７８】
次に、リードＩ／Ｏ受付処理について図１４を用いて説明する。図１４は、第２の実施形態のリードＩ／Ｏ受付処理のフローチャートを示す図である。
リードＩ／Ｏ受付処理は、リードＩ／Ｏにしたがいコピー元ＬＵＮからデータ（読み出し対象データ）を読み出す処理である。リードＩ／Ｏ受付処理は、図示しないホストからリードＩ／Ｏを受け付けて、コピー元ストレージ装置１１ａ（コピースケジューラ１１０）が実行する処理である。
【００７９】
［ステップＳ３１］コピースケジューラ１１０は、リードＩ／Ｏが要求するコピー元ＬＵＮの読み出し対象領域を含むエントリを、インデックステーブル１１３から検索する。
［ステップＳ３２］コピースケジューラ１１０は、検索結果の有無、すなわち該当するエントリがインデックステーブル１１３に含まれているか否かを判定する。コピースケジューラ１１０は、検索結果がある場合にステップＳ３３にすすみ、検索結果がない場合にステップＳ３４にすすむ。
【００８０】
［ステップＳ３３］コピースケジューラ１１０は、該当するエントリがインデックステーブル１１３に含まれていることから、インデックステーブル１１３を参照してコピー元バッファ１１２から読み出し対象データを取得する。
【００８１】
［ステップＳ３４］コピースケジューラ１１０は、該当するエントリがインデックステーブル１１３に含まれていないことから、コピー元ＬＵＮから読み出し対象データを取得する。
【００８２】
［ステップＳ３５］コピースケジューラ１１０は、取得した読み出し対象データを含めてリードＩ／Ｏに対する応答をおこない、リードＩ／Ｏ受付処理を終了する。
このように、コピー元ストレージ装置１１ａは、コピー元ＬＵＮに書き込まれていないデータをコピー元バッファ１１２が格納している場合であっても、インデックステーブル１１３を参照して読み出し対象データをリードＩ／Ｏに応答することができる。
【００８３】
次に、コピー元バッファ枯渇処理について図１５を用いて説明する。図１５は、第２の実施形態のコピー元バッファ枯渇処理のフローチャートを示す図である。
コピー元バッファ枯渇処理は、コピー元バッファ１１２の空き領域が十分でない場合、コピー元バッファ１１２の所定領域を解放して空き領域を確保する処理である。コピー元バッファ枯渇処理は、コピースケジューラ１１０がライトＩ／Ｏ受付処理のステップＳ１４で実行する処理である。
【００８４】
［ステップＳ４１］コピースケジューラ１１０は、順序性フラグがセットされているか否かを判定する。コピースケジューラ１１０は、順序性フラグがセットされている場合にステップＳ４２にすすみ、順序性フラグがセットされていない（リセットされている）場合にステップＳ５１にすすむ。順序性フラグは、リモートコピーの順序性が保証されている状態をセット（たとえば、「ＯＮ」）で示し、リモートコピーの順序性が保証されていない状態をリセット（たとえば、「ＯＦＦ」）で示す。
【００８５】
［ステップＳ４２］コピースケジューラ１１０は、コピー元バッファ１１２の特定領域から更新記録用ビット列１１４を生成する。すなわち、コピースケジューラ１１０は、順序性が保証されている状態において、更新記録用ビット列１１４の生成をおこなう。
【００８６】
特定領域は、コピー元バッファ１１２のうち解放対象となる領域である。特定領域は、たとえば、世代が古い順に所定世代数のデータを格納する領域である。更新記録用ビット列１１４は、コピー元ＬＵＮにおける所定の領域単位の更新の有無を示す情報であり、ビット列におけるビットの位置がコピー元ＬＵＮにおける領域の位置を示し、１ビットが対応する領域の更新の有無を示す。
【００８７】
［ステップＳ４３］コピースケジューラ１１０は、コピー元バッファ１１２の特定領域に格納されているデータをコピー元ＬＵＮに格納する。詳しくは、コピースケジューラ１１０は、コピー元バッファ１１２の特定領域に対応するバッファアドレスをキーにしてインデックステーブル１１３からコピー元ＬＵＮのアドレスを検索し、コピー元ＬＵＮにデータを格納する。
【００８８】
［ステップＳ４４］コピースケジューラ１１０は、インデックステーブル１１３を更新する。詳しくは、コピースケジューラ１１０は、コピー元バッファ１１２の特定領域に対応するバッファアドレスをキーにしてインデックステーブル１１３を検索し、ヒットしたエントリを削除する。
【００８９】
［ステップＳ４５］コピースケジューラ１１０は、コピー元バッファ１１２の特定領域を解放する。これにより、コピー元ストレージ装置１１ａは、コピー元バッファ１１２に空き領域を確保し、コピー元バッファ１１２の枯渇状態を解消できる。
【００９０】
コピー元バッファ１１２の特定領域の解放は、ライトＩ／Ｏの更新データをコピー元バッファ１１２の空き領域に格納可能にする。したがって、コピー元ストレージ装置１１ａは、順序性が保証された状態に復帰するまで、コピー先ストレージ装置１１ｂに転送すべきデータの増加を抑制することができる。
【００９１】
［ステップＳ４６］コピースケジューラ１１０は、コピー元バッファ１１２の特定領域から転送制御用ビット列１１５を生成する。転送制御用ビット列１１５は、コピー元ＬＵＮにおける所定の領域単位の更新の有無を示す情報であり、ビット列におけるビットの位置がコピー元ＬＵＮにおける領域の位置を示し、１ビットが対応する領域の更新の有無を示す。
【００９２】
なお、ステップＳ４６における特定領域は、ステップＳ４５における特定領域の解放により更新されているので、ステップＳ４１からステップＳ４５における特定領域と異なる領域である。たとえば、ステップＳ４２における特定領域が第１世代から第３世代のデータを格納する領域であるとき、ステップＳ４６における特定領域は、ステップＳ４２のときの第４世代から第６世代のデータを格納する領域である。したがって、転送制御用ビット列１１５の生成もととなる特定領域は、更新記録用ビット列１１４の生成もととなる特定領域と異なる。
【００９３】
［ステップＳ４７］コピースケジューラ１１０は、転送制御フラグをセットする。転送制御フラグは、復旧処理において転送制御用ビット列１１５を転送制御に用いる状態をセット（たとえば、「ＯＮ」）で示し、復旧処理において転送制御用ビット列１１５を転送制御に用いない状態をリセット（たとえば、「ＯＦＦ」）で示す。
【００９４】
［ステップＳ４８］コピースケジューラ１１０は、順序性フラグをリセットする。
［ステップＳ４９］コピースケジューラ１１０は、コピー元ストレージ装置１１ａからコピー先ストレージ装置１１ｂにデータ転送が可能な状態（転送可能状態）であるか否かを判定する。コピースケジューラ１１０は、転送可能状態であればステップＳ５０にすすみ、転送可能状態でなければコピー元バッファ枯渇処理を終了する。
【００９５】
［ステップＳ５０］コピースケジューラ１１０は、コピー元バッファ枯渇処理と独立に実行される復旧処理における更新記録用ビット列１１４の参照位置を初期化する。コピースケジューラ１１０は、更新記録用ビット列１１４の参照位置を初期化した後、コピー元バッファ枯渇処理を終了する。更新記録用ビット列１１４の参照位置は、後述する復旧処理において更新記録用ビット列１１４を走査する際の走査開始位置である。コピースケジューラ１１０は、たとえば、先頭ビットを参照位置に設定する。
【００９６】
［ステップＳ５１］コピースケジューラ１１０は、転送制御用ビット列１１５を更新記録用ビット列１１４にマージする。なお、コピースケジューラ１１０は、転送制御用ビット列１１５と更新記録用ビット列１１４の論理和を求めることにより、転送制御用ビット列１１５と更新記録用ビット列１１４をマージできる。
【００９７】
これにより、更新記録用ビット列１１４は、マージ前の更新記録用ビット列１１４が保持する更新領域を示す情報と、転送制御用ビット列１１５が保持する更新領域を示す情報とを統合する。すなわち、コピースケジューラ１１０は、順序性が保証されていない状態において、すでに生成されている更新記録用ビット列１１４の更新をおこなう。この後、コピースケジューラ１１０は、順序性が保証されている状態と同様にステップＳ４３以降の処理を実行した後、コピー元バッファ枯渇処理を終了する。
【００９８】
次に、コピー元バッファ枯渇処理における順序性が保証されている状態で実行されるステップＳ４２からステップＳ４６の処理について、図１６を用いて説明する。図１６は、第２の実施形態の順序性が保証されている状態でコピー元バッファが枯渇したときの、更新記録用ビット列の生成および転送制御用ビット列の生成の一例を示す図である。
【００９９】
コピー元バッファ１１２１は、第１世代から第ｎ世代までデータを格納し、第１世代から第３世代のデータを格納する領域を特定領域１１２３とする。コピースケジューラ１１０は、特定領域１１２３のデータから更新記録用ビット列１１４を生成する（ステップＳ４２）。コピースケジューラ１１０は、特定領域１１２３のデータをコピー元ＬＵＮに格納し（ステップＳ４３）、特定領域１１２３に対応するエントリをインデックステーブル１１３から削除する（ステップＳ４４）。コピースケジューラ１１０は、コピー元バッファ１１２１の特定領域１１２３を解放する（ステップＳ４５）。
【０１００】
これにより、コピー元バッファ１１２１は、コピー元バッファ１１２２のようになる。すなわち、コピー元バッファ１１２２は、コピー元バッファ１１２１の特定領域１１２３を空き領域とし、コピー元バッファ１１２１の各領域の世代が更新される。たとえば、コピー元バッファ１１２１の第４世代がコピー元バッファ１１２２の第１世代となり、コピー元バッファ１１２１の第ｎ世代がコピー元バッファ１１２２の第（ｎ−３）世代となる。コピースケジューラ１１０は、コピー元バッファ１１２２の特定領域１１２４のデータから転送制御用ビット列１１５を生成する（ステップＳ４６）。
【０１０１】
次に、コピー元バッファ枯渇処理における順序性が保証されていない状態で実行されるステップＳ５１の処理、およびステップＳ４３からステップＳ４６の処理について、図１７を用いて説明する。図１７は、第２の実施形態の順序性が保証されていない状態でコピー元バッファが枯渇したときの、更新記録用ビット列の更新および転送制御用ビット列の生成の一例を示す図である。
【０１０２】
コピー元バッファ１１２５は、第１世代から第ｎ世代までデータを格納し、第１世代から第３世代のデータを格納する領域を特定領域１１２７とする。コピースケジューラ１１０は、転送制御用ビット列１１５１を更新記録用ビット列１１４１にマージし、更新記録用ビット列１１４２を生成する（ステップＳ５１）。なお、コピー元バッファ枯渇処理は、順序性が保証されていない状態で実行される前に、少なくとも１度は順序性が保証されている状態で実行される。したがって、転送制御用ビット列１１５１と更新記録用ビット列１１４１は、ステップＳ５１の実行までに生成されている。コピースケジューラ１１０は、特定領域１１２７のデータをコピー元ＬＵＮに格納し（ステップＳ４３）、特定領域１１２７に対応するエントリをインデックステーブル１１３から削除する（ステップＳ４４）。コピースケジューラ１１０は、コピー元バッファ１１２５の特定領域１１２７を解放する（ステップＳ４５）。
【０１０３】
これにより、コピー元バッファ１１２５は、コピー元バッファ１１２６のようになる。コピースケジューラ１１０は、コピー元バッファ１１２６の特定領域１１２８のデータから転送制御用ビット列１１５２を生成する（ステップＳ４６）。
【０１０４】
このように、ステップＳ４６で生成される転送制御用ビット列１１５は、次回のコピー元バッファ枯渇処理が順序性が保証されていない状態で実行された場合に、ステップＳ５１で更新記録用ビット列１１４にマージされる。
【０１０５】
図１６と図１７を用いて説明したように、コピー元ストレージ装置１１ａは、コピー元バッファ１１２が枯渇したとき、特定領域に限って更新記録用ビット列１１４を生成する。これは、従来おこなわれているコピー元バッファ全体から更新記録用ビット列を生成する場合と比較して、更新記録用ビット列で「Ｏｎ」となるビット数を限定する。コピー元ストレージ装置１１ａは、更新記録用ビット列で「Ｏｎ」となるビット数を限定することにより、経路復旧時に順序性が保証された状態に復帰するために転送すべきデータ量を削減することができる。したがって、コピー元ストレージ装置１１ａは、転送すべきデータ量の削減により、順序性が保証された状態に復帰するまでの時間を短縮することができる。
【０１０６】
次に、復旧処理について図１８を用いて説明する。図１８は、第２の実施形態の復旧処理のフローチャートを示す図である。
復旧処理は、更新記録用ビット列１１４にもとづいて、あるいは更新記録用ビット列１１４と転送制御用ビット列１１５とにもとづいてコピー元ストレージ装置１１ａからコピー先ストレージ装置１１ｂにデータ転送をおこなう処理である。復旧処理は、更新記録用ビット列１１４が生成されている状態で転送可能状態を検出した場合に、コピースケジューラ１１０が実行する処理である。
【０１０７】
［ステップＳ６１］コピースケジューラ１１０は、更新記録用ビット列１１４の参照位置として先頭ビットを選択する。
［ステップＳ６２］コピースケジューラ１１０は、転送制御フラグがセットされているか否かを判定する。コピースケジューラ１１０は、転送制御フラグがセットされている場合にステップＳ６３にすすみ、転送制御フラグがセットされていない場合にステップＳ６４にすすむ。
【０１０８】
［ステップＳ６３］コピースケジューラ１１０は、復旧時第１転送処理を実行する。復旧時第１転送処理は、更新記録用ビット列１１４と転送制御用ビット列１１５とにもとづいてコピー元ストレージ装置１１ａからコピー先ストレージ装置１１ｂにデータ転送をおこなう処理である。復旧時第１転送処理の詳細は、図１９を用いて後で説明する。コピースケジューラ１１０は、復旧時第１転送処理の実行後、ステップＳ６１にすすむ。なお、コピースケジューラ１１０は、復旧時第１転送処理の実行中に転送制御フラグをリセットするので、コピー元バッファ枯渇処理においてあらためて転送制御フラグがセットされない限り、復旧処理において復旧時第１転送処理の実行は一回限りである。
【０１０９】
［ステップＳ６４］コピースケジューラ１１０は、復旧時第２転送処理を実行する。復旧時第２転送処理は、更新記録用ビット列１１４にもとづいてコピー元ストレージ装置１１ａからコピー先ストレージ装置１１ｂにデータ転送をおこなう処理である。復旧時第２転送処理の詳細は、図２０を用いて後で説明する。コピースケジューラ１１０は、復旧時第２転送処理の実行後、復旧処理を終了する。
【０１１０】
次に、復旧時第１転送処理について図１９を用いて説明する。図１９は、第２の実施形態の復旧時第１転送処理のフローチャートを示す図である。
復旧時第１転送処理は、更新記録用ビット列１１４と転送制御用ビット列１１５とにもとづいてコピー元ストレージ装置１１ａからコピー先ストレージ装置１１ｂにデータ転送をおこなう処理である。復旧時第１転送処理は、復旧処理のステップＳ６３でコピースケジューラ１１０が実行する処理である。
【０１１１】
［ステップＳ７１］コピースケジューラ１１０は、更新記録用ビット列１１４の選択されているビット（選択ビット）が「Ｏｎ」であるか否かを判定する。たとえば、ビットが「Ｏｎ」は、ビット＝「１」であり、ビットが「Ｏｆｆ」は、ビット＝「０」である。コピースケジューラ１１０は、選択ビットが「Ｏｎ」である場合にステップＳ７２にすすみ、選択ビットが「Ｏｎ」でない場合、すなわち選択ビットが「Ｏｆｆ」である場合にステップＳ７５にすすむ。
【０１１２】
［ステップＳ７２］コピースケジューラ１１０は、選択ビットに対応する転送制御用ビット列１１５のビット（対応ビット）が「Ｏｆｆ」であるか否かを判定する。コピースケジューラ１１０は、対応ビットが「Ｏｆｆ」である場合にステップＳ７３にすすみ、対応ビットが「Ｏｆｆ」でない場合、すなわち対応ビットが「Ｏｎ」である場合にステップＳ７５にすすむ。
【０１１３】
［ステップＳ７３］コピースケジューラ１１０は、コピー元ＬＵＮにおける選択ビットに対応するデータをキャッシュ１１１に格納する。キャッシュ１１１に格納されたデータは、コピー元ストレージ装置１１ａからコピー先ストレージ装置１１ｂにデータ転送される。
【０１１４】
［ステップＳ７４］コピースケジューラ１１０は、選択ビットを「Ｏｆｆ」にする。
［ステップＳ７５］コピースケジューラ１１０は、更新記録用ビット列１１４の末尾ビットを選択しているか否か、すなわち選択ビットが更新記録用ビット列１１４の末尾ビットであるか否かを判定する。コピースケジューラ１１０は、選択ビットが末尾ビットでない場合にステップＳ７６にすすみ、選択ビットが末尾ビットである場合にステップＳ７７にすすむ。
【０１１５】
［ステップＳ７６］コピースケジューラ１１０は、更新記録用ビット列１１４の選択ビットを末尾側に１つシフトして、選択ビットを更新する。コピースケジューラ１１０は、選択ビットを更新後にステップＳ７１にすすむ。
【０１１６】
［ステップＳ７７］コピースケジューラ１１０は、転送制御フラグをリセットした後、復旧時第１転送処理を終了する。
このように復旧時第１転送処理において、コピースケジューラ１１０は、選択ビット＝「Ｏｎ」かつ対応ビット＝「Ｏｆｆ」となるコピー元ＬＵＮにおける領域を転送対象データとする。すなわち、コピースケジューラ１１０は、選択ビット＝「Ｏｎ」であっても、対応ビット＝「Ｏｎ」となるコピー元ＬＵＮにおける領域を転送対象データとしない。選択ビット＝「Ｏｎ」かつ対応ビット＝「Ｏｎ」は、コピー元ＬＵＮに格納されているデータより新しい世代のデータがコピー元バッファ１１２に格納されていることを示す。したがって、このようなデータは、コピー先ストレージ装置１１ｂに転送しても、より新しい世代のデータの転送によって更新される。このような重複転送は、転送データ量をいたずらに増大させ、復旧遅延の一因となる。復旧時第１転送処理は、このような重複転送を回避して転送データ量を抑制する。
【０１１７】
なお、データ転送を抑制されたデータは、再度のコピー元バッファ１１２の枯渇による復旧時第１転送処理、または復旧時第２転送処理によって転送機会を得る。
次に、復旧時第２転送処理について図２０を用いて説明する。図２０は、第２の実施形態の復旧時第２転送処理のフローチャートを示す図である。
【０１１８】
復旧時第２転送処理は、更新記録用ビット列１１４にもとづいてコピー元ストレージ装置１１ａからコピー先ストレージ装置１１ｂにデータ転送をおこなう処理である。復旧時第２転送処理は、復旧処理のステップＳ６４でコピースケジューラ１１０が実行する処理である。
【０１１９】
［ステップＳ８１］コピースケジューラ１１０は、選択ビットが「Ｏｎ」であるか否かを判定する。コピースケジューラ１１０は、選択ビットが「Ｏｎ」である場合にステップＳ８２にすすみ、選択ビットが「Ｏｎ」でない場合、すなわち選択ビットが「Ｏｆｆ」である場合にステップＳ８４にすすむ。
【０１２０】
［ステップＳ８２］コピースケジューラ１１０は、コピー元ＬＵＮにおける選択ビットに対応するデータをキャッシュ１１１に格納する。キャッシュ１１１に格納されたデータは、コピー元ストレージ装置１１ａからコピー先ストレージ装置１１ｂにデータ転送される。
【０１２１】
［ステップＳ８３］コピースケジューラ１１０は、選択ビットを「Ｏｆｆ」にする。
［ステップＳ８４］コピースケジューラ１１０は、更新記録用ビット列１１４の末尾ビットを選択しているか否か、すなわち選択ビットが更新記録用ビット列１１４の末尾ビットであるか否かを判定する。コピースケジューラ１１０は、選択ビットが末尾ビットでない場合にステップＳ８５にすすみ、選択ビットが末尾ビットである場合にステップＳ８６にすすむ。
【０１２２】
［ステップＳ８５］コピースケジューラ１１０は、更新記録用ビット列１１４の選択ビットを末尾側に１つシフトして、選択ビットを更新する。コピースケジューラ１１０は、選択ビットを更新後にステップＳ８１にすすむ。
【０１２３】
［ステップＳ８６］コピースケジューラ１１０は、順序性フラグをセットする。順序性フラグのセットは、更新記録用ビット列１１４にもとづくデータ転送の完了により、コピー元ストレージ装置１１ａが順序性が保証された状態に復帰したことによる。コピースケジューラ１１０は、順序性フラグをセットした後、復旧時第２転送処理を終了する。
【０１２４】
次に、更新記録用ビット列１１４と転送制御用ビット列１１５とにもとづくデータ転送の順序について図２１を用いて説明する。図２１は、第２の実施形態の更新記録用ビット列と転送制御用ビット列とにもとづくデータ転送の順序の一例を示す図である。
【０１２５】
更新記録用ビット列１１４３は、更新記録用ビット列１１４の一例であり、転送制御用ビット列１１５３は、転送制御用ビット列１１５の一例である。更新記録用ビット列１１４３および転送制御用ビット列１１５３は、第０ビットから第１４ビットまでの１５ビットのビット列からなるとする。
【０１２６】
コピースケジューラ１１０は、コピー元ＬＵＮに格納されていながらコピー先ストレージ装置１１ｂに未転送のデータについて、更新記録用ビット列１１４３と転送制御用ビット列１１５３とを用いて転送順序を決定する。
【０１２７】
コピースケジューラ１１０は、復旧時第１転送処理において、更新記録用ビット列１１４３を先頭から末尾に向かって走査し、選択ビット＝「１」かつ対応ビット＝「０」となるビットを探す。したがって、コピースケジューラ１１０は、第１ビットの転送順序を１番目に、第５ビットの転送順序を２番目に、第１０ビットの転送順序を３番目に、第１３ビットの転送順序を４番目に決定する。選択されたビット（第１ビット、第５ビット、第１０ビット、および第１３ビット）は、データ転送により「０」が順次セットされる。
【０１２８】
コピースケジューラ１１０は、復旧時第１転送処理において、更新記録用ビット列１１４３を末尾まで走査すると、転送制御フラグをリセットするので、復旧時第１転送処理の実行から復旧時第２転送処理の実行に切り替わる。
【０１２９】
コピースケジューラ１１０は、復旧時第２転送処理において、再び、更新記録用ビット列１１４３を先頭から末尾に向かって走査し、選択ビット＝「１」となるビットを探す。したがって、コピースケジューラ１１０は、第２ビットの転送順序を５番目に、第４ビットの転送順序を６番目に、第７ビットの転送順序を７番目に、第１２ビットの転送順序を８番目に、第１４ビットの転送順序を９番目に決定する。選択されたビット（第２ビット、第４ビット、第７ビット、第１２ビット、および第１４ビット）は、データ転送により「０」が順次セットされる。
【０１３０】
このように、コピースケジューラ１１０は、選択ビット＝「１」かつ対応ビット＝「１」となるビットに優先して、選択ビット＝「１」かつ対応ビット＝「０」となるビットにもとづくデータ転送を優先する。このような転送順序の優先制御は、コピー元バッファ１１２の再枯渇により転送制御用ビット列１１５３が更新記録用ビット列１１４３にマージされた場合の重複転送を抑制する。たとえば、転送制御用ビット列１１５３によらずに第２ビットの転送順序を２番目とした場合、第２ビットの転送後のコピー元バッファ１１２の再枯渇により、再び第２ビットが「１」となり転送対象となる。コピースケジューラ１１０は、第２ビットの転送順序を５番目に先送りすることで、コピー元バッファ１１２の再枯渇時の重複転送機会を低減している。
【０１３１】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、ストレージ制御装置２、第１のストレージ装置３、第２のストレージ装置４、およびストレージ装置１１が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１３２】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１３３】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【０１３４】
また、上記の処理機能の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤなどの電子回路で実現することもできる。
【符号の説明】
【０１３５】
１，１０  ストレージシステム
２  ストレージ制御装置
２ａ  記憶部
２ｂ  制御部
２ｃ  バッファ
３  第１のストレージ装置
３ａ  コピー元ボリューム
４  第２のストレージ装置
４ａ  コピー先ボリューム
５，１２  ネットワーク
１１  ストレージ装置
１１ａ  コピー元ストレージ装置
１１ｂ  コピー元ストレージ装置
１３，１３ａ，１３ｂ，１３ｃ，１０４  ＨＤＤ
１００  ＣＭ
１０１  ネットワークインタフェース
１０２  プロセッサ
１０３  ＲＡＭ
１０５  機器接続インタフェース
１０６  ディスクインタフェース
１１０，１２０  コピースケジューラ
１１１，１２１  キャッシュ
１１２，１１２１，１１２２，１１２５，１１２６  コピー元バッファ
１１３，３０１，３０２，３０３  インデックステーブル
１１４，１１４ａ，１１４ｂ，１１４１，１１４２，１１４３  更新記録用ビット列
１１５，１１５ａ，１１５ｂ，１１５１，１１５２，１１５３  転送制御用ビット列
１２２  コピー先バッファ
１１２３，１１２４，１１２７，１１２８  特定領域
【図１】
0006350090.tif 000002
【図２】
0006350090.tif 000003
【図３】
0006350090.tif 000004
【図４】
0006350090.tif 000005
【図５】
0006350090.tif 000006
【図６】
0006350090.tif 000007
【図７】
0006350090.tif 000008
【図８】
0006350090.tif 000009
【図９】
0006350090.tif 000010
【図１０】
0006350090.tif 000011
【図１１】
0006350090.tif 000012
【図１２】
0006350090.tif 000013
【図１３】
0006350090.tif 000014
【図１４】
0006350090.tif 000015
【図１５】
0006350090.tif 000016
【図１６】
0006350090.tif 000017
【図１７】
0006350090.tif 000018
【図１８】
0006350090.tif 000019
【図１９】
0006350090.tif 000020
【図２０】
0006350090.tif 000021
【図２１】
0006350090.tif 000022