(57)【要約】【課題】任意世代のコピー対象のスナップショットについてのコピー用差分情報を高速に作成する。【解決手段】コピー済みである第一の時点のスナップショットから最新の時点となる第Ｎの時点のスナップショットまでのうちの二つのスナップショット間の差分情報が記憶部に取得される。記憶部には、二以上の差分情報が記憶される。二以上の差分情報には、第一の時点のスナップショットと、Ｎ個のスナップショットのうちの第一の時点のスナップショット以外のいずれかのスナップショットとの間の差分を表す差分情報が含まれている。二以上の差分情報を基に、第一の時点のスナップショットとＮ個のスナップショットのうちの指定されたスナップショットとの間の差分を表す情報であって、上記指定されたスナップショットのコピーで使用されるコピー用差分情報が生成される。【選択図】図１
2010026939.tif 000002
【特許請求の範囲】
【請求項１】
論理ボリュームと、
記憶部と、
前記論理ボリュームのスナップショットを取得するスナップショット取得部と、
コピー済みである第一の時点のスナップショットから最新の時点となる第Ｎの時点のスナップショットまでのＮ個のスナップショットのうち前記第一の時点のスナップショット以外の指定されたスナップショットをコピーするコピー制御部と（Ｎは三以上の整数）、
前記Ｎ個のスナップショットのうちの二つのスナップショット間の差分を表す差分情報を前記記憶部に取得する差分情報取得部と、
前記記憶部に記憶されている二以上の前記差分情報を基に、前記第一の時点のスナップショットと前記指定されたスナップショットとの間の差分を表す情報であって、前記指定されたスナップショットのコピーで使用されるコピー用差分情報を生成するコピー用差分情報生成部と、を備え、
前記二以上の差分情報には、前記第一の時点のスナップショットと、前記Ｎ個のスナップショットのうちの前記第一の時点のスナップショット以外のいずれかのスナップショットとの間の差分を表す差分情報が含まれており、
前記コピー制御部は、前記コピー用差分情報を用いて、前記指定されたスナップショットのコピーを行う、
記憶制御装置。
【請求項２】
前記二以上の差分情報は、前記論理ボリューム又は前記スナップショットを構成する複数の記憶領域にそれぞれ対応した複数のビットで構成された下記の二つの差分ビットマップであり、
（１）スナップショットが取得される時点毎にリセットされるビットマップであって、スナップショットが取得されてから次にスナップショットが取得されるまでの間に前記論理ボリュームの更新された記憶領域に対応するビットが更新される第一の差分ビットマップ、
（２）リセット直前の第一の差分ビットマップのマージ先となる第二の差分ビットマップ、
退避用の記憶資源と、
前記論理ボリュームを構成する複数の記憶領域のうちのいずれかを指定したライト要求を受け、前記ライト要求から特定されるライト先記憶領域に対応した、前記第一の差分ビットマップにおけるビットが、未更新を表す値であれば、前記ライト先記憶領域に記憶されているデータを前記退避用の記憶資源に退避し、前記ライト要求に従うデータを、前記ライト先記憶領域に書込み、前記ライト先記憶領域に対応した、前記第一の差分ビットマップにおけるビットを、未更新を表す値から更新済みを表す値に更新するライト処理部と
を更に備え、
前記スナップショット取得部は、スナップショットが取得される都度に、その時点での前記第一の差分ビットマップを前記第二の差分ビットマップとの論理和を算出することで、その時点での前記第一の差分ビットマップを前記第二の差分ビットマップにマージし、前記第一の差分ビットマップをリセットし、
前記指定されたスナップショットが前記第Ｎの時点のスナップショットである場合、前記コピー用差分情報は、前記第二の差分ビットマップ又はそれの複製である、
請求項１記載の記憶制御装置。
【請求項３】
前記第一の時点のスナップショットよりも後に作成されたスナップショットを削除する場合、前記第二の差分ビットマップを破棄するスナップショット削除部、を更に備える、
請求項２記載の記憶制御装置。
【請求項４】
スナップショット管理情報が記憶される別の記憶部を備え、
前記スナップショット管理情報には、スナップショット毎に、前記論理ボリュームを構成する各記憶領域についてのデータのアドレスが含まれており、
前記ライト処理部は、前記論理ボリュームの前記ライト先記憶領域についての、前記スナップショット管理情報に含まれるアドレスを、前記ライト先記憶領域に記憶されているデータの退避先の記憶領域を表すアドレスに更新し、
前記コピー用差分情報生成部は、前記指定されたスナップショットが前記第Ｎの時点のスナップショットでない場合、前記スナップショット管理情報を基に、前記コピー用差分情報を生成する、
請求項２又は３記載の記憶制御装置。
【請求項５】
前記二以上の差分情報は、前記論理ボリューム又は前記スナップショットを構成する複数の記憶領域にそれぞれ対応した複数のビットで構成された下記の二以上の差分ビットマップであり、
（１）スナップショットが取得される時点毎にリセットされるビットマップであって、スナップショットが取得されてから次にスナップショットが取得されるまでの間に前記論理ボリュームの更新された記憶領域に対応するビットが更新される第一の差分ビットマップ、
（２）各時点でのリセット直前の第一の差分ビットマップの複製である各第二の差分ビットマップ、
退避用の記憶資源と、
前記論理ボリュームを構成する複数の記憶領域のうちのいずれかを指定したライト要求を受け、前記ライト要求から特定されるライト先記憶領域に対応した、前記第一の差分ビットマップにおけるビットが、未更新を表す値であれば、前記ライト先記憶領域に記憶されているデータ要素を前記退避用の記憶資源に退避し、前記ライト要求に従うデータ要素を、前記ライト先記憶領域に書込み、前記ライト先記憶領域に対応した、前記第一の差分ビットマップにおけるビットを、未更新を表す値から更新済みを表す値に更新するライト処理部と、
前記Ｎ個のスナップショットのうち前記第一の時点のスナップショット以外の複数個のコピー対象のスナップショットの指定をユーザから受け付ける受付部と、
第二の差分ビットマップをマージする差分マージ部と
を更に備え、
前記スナップショット取得部は、スナップショットが取得される都度に、その時点での前記第一の差分ビットマップの複製として前記第二の差分ビットマップを前記記憶部に取得し、前記第一の差分ビットマップをリセットし、
前記差分マージ部が、指定された各コピー対象のスナップショットについて、コピー対象のスナップショットと直前の時点のスナップショットとの差分を表す第二の差分ビットマップと、そのコピー対象のスナップショットと直前のコピー対象のスナップショット（直前のコピー対象のスナップショットが存在しない場合には前記第一の時点のスナップショット）との間に関わる一以上の第二の差分ビットマップとの論理和を算出することで、前記第二の差分ビットマップに前記一以上の第二の差分ビットマップをマージし、前記論理和の基になった前記一以上の第二の差分ビットマップを破棄する、
請求項１記載の記憶制御装置。
【請求項６】
前記受付部は、前記Ｎ個のスナップショットのうちのコピーの済んでいない複数個のスナップショットにそれぞれ付与されている識別情報を選択可能にユーザに知らせる、
請求項５記載の記憶制御装置。
【請求項７】
前記二以上の差分情報は、下記の二以上の差分情報であり、
（１）スナップショットが取得される時点毎にリセットされる情報であって、スナップショットが取得されてから次にスナップショットが取得されるまでの間の前記論理ボリュームの差分を表す第一の差分情報、
（２）各時点でのリセット直前の第一の差分情報の複製である各第二の差分情報、
前記コピー用差分情報は、前記指定されたスナップショットとそれの直前の時点のスナップショットとの間の差分を表す前記第二の差分情報に、前記第一の時点のスナップショットと前記指定されたスナップショットとの間に関わる他の一以上の第二の差分情報がマージされた情報である、
請求項１記載の記憶制御装置。
【請求項８】
前記コピー用差分情報生成部は、前記第二の差分情報に前記他の一以上の第二の差分情報がマージされた後に前記他の一以上の第二の差分情報を破棄する、
請求項７記載の記憶制御装置。
【請求項９】
前記二以上の差分情報は、下記の二つの差分情報であり、
（１）スナップショットが取得される時点毎にリセットされる情報であって、スナップショットが取得されてから次にスナップショットが取得されるまでの間の前記論理ボリュームの差分を表す第一の差分情報、
（２）リセット直前の第一の差分情報のマージ先となる第二の差分情報、
前記スナップショット取得部は、スナップショットが取得される都度に、その時点での前記第一の差分情報を前記第二の差分情報にマージし、前記第一の差分情報をリセットし、
前記指定されたスナップショットが前記第Ｎの時点のスナップショットである場合、前記コピー用差分情報は、前記第二の差分情報又はそれの複製である、
請求項１記載の記憶制御装置。
【請求項１０】
前記第一の時点のスナップショットよりも後に作成されたスナップショットを削除する場合、前記第二の差分ビットマップを破棄するスナップショット削除部、を更に備える、
請求項９記載の記憶制御装置。
【請求項１１】
前記論理ボリュームを構成する各記憶領域についてのデータのアドレスをスナップショット毎に含んだスナップショット管理情報が記憶される別の記憶部と
退避用の記憶資源と、
前記論理ボリュームを構成する複数の記憶領域のうちのいずれかを指定したライト要求を受け、前記ライト要求から特定されるライト先記憶領域に記憶されているデータ要素を前記退避用の記憶資源に退避し、前記ライト要求に従うデータ要素を、前記ライト先記憶領域に書込み、前記ライト先記憶領域に対応した、前記第一の差分情報における情報要素を、未更新を表す値から更新済みを表す値に更新し、前記論理ボリュームのライト先記憶領域についての、前記スナップショット管理情報に含まれるアドレスを、前記ライト先記憶領域に記憶されているデータの退避先の記憶領域を表すアドレスに更新するライト処理部と
を備え、
前記コピー用差分情報生成部は、前記指定されたスナップショットが前記第Ｎの時点のスナップショットでない場合、前記スナップショット管理情報を基に、前記コピー用差分情報を生成する、
請求項１０又は１１記載の記憶制御装置。
【請求項１２】
前記二以上の差分情報は、下記の二以上の差分情報であり、
（１）スナップショットが取得される時点毎にリセットされる情報であって、スナップショットが取得されてから次にスナップショットが取得されるまでの間の前記論理ボリュームの差分を表す第一の差分情報、
（２）各時点でのリセット直前の第一の差分情報の複製である各第二の差分情報、
前記Ｎ個のスナップショットのうち前記第一の時点のスナップショット以外の複数個のコピー対象のスナップショットの指定をユーザから受け付ける受付部と、
第二の差分ビットマップをマージする差分マージ部と
を備え、
前記スナップショット取得部は、スナップショットが取得される都度に、その時点での前記第一の差分ビットマップの複製として前記第二の差分ビットマップを前記記憶部に取得し、前記第一の差分ビットマップをリセットし、
前記差分マージ部が、指定された各コピー対象のスナップショットについて、コピー対象のスナップショットと直前の時点のスナップショットとの差分を表す第二の差分情報に、そのコピー対象のスナップショットと直前のコピー対象のスナップショット（直前のコピー対象のスナップショットが存在しない場合には前記第一の時点のスナップショット）との間に関わる一以上の第二の差分情報をマージし、前記一以上の第二の差分ビットマップを破棄する、
請求項１記載の記憶制御装置。
【請求項１３】
コピー済みである第一の時点のスナップショットから最新の時点となる第Ｎの時点のスナップショットまでのＮ個のスナップショットのうちの二つのスナップショット間の差分を表す差分情報を記憶部に取得し、
前記第一の時点のスナップショットと、前記Ｎ個のスナップショットのうちの前記第一の時点のスナップショット以外のいずれかのスナップショットとの間の差分を表す差分情報を含んだ、前記記憶部に記憶されている二以上の前記差分情報を基に、前記第一の時点のスナップショットと前記Ｎ個のスナップショットのうちの指定されたスナップショットとの間の差分を表す情報であって、前記指定されたスナップショットのコピーで使用されるコピー用差分情報を生成する、
記憶制御方法。
【請求項１４】
コピー済みである第一の時点のスナップショットから最新の時点となる第Ｎの時点のスナップショットまでのＮ個のスナップショットのうちの二つのスナップショット間の差分を表す差分情報を記憶部に取得し、
前記第一の時点のスナップショットと、前記Ｎ個のスナップショットのうちの前記第一の時点のスナップショット以外のいずれかのスナップショットとの間の差分を表す差分情報を含んだ、前記記憶部に記憶されている二以上の前記差分情報を基に、前記第一の時点のスナップショットと前記Ｎ個のスナップショットのうちの指定されたスナップショットとの間の差分を表す情報であって、前記指定されたスナップショットのコピーで使用される転送用差分管理データを生成する、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スナップショットの取得及びコピーに関する。
【背景技術】
【０００２】
データ保護機能として、例えば、スナップショット機能及びリモートコピー機能が知られている。
【０００３】
スナップショット機能は、或る時点の運用ボリューム（ストレージ装置の上位装置（例えばサーバ装置）からアクセスされ得る論理ボリューム）のイメージであるスナップショットを作成し維持する機能である。スナップショットの作成及び維持を実現する方法として、例えば、サーバ装置が有する論理ボリューム機能を利用する方法がある。論理ボリューム機能としては、例えば、Linuxカーネル（「Linux」は登録商標）のLogical Volume Manager（ＬＶＭ）が挙げられる（非特許文献１参照）。ＬＶＭが運用ボリュームのスナップショットを作成する場合、別の論理ボリュームが、差分格納用の論理ボリューム（以下、「差分格納ボリューム」）として用意される。ＬＶＭは、スナップショット作成時点の後に、運用ボリュームで更新（書き込み）が発生すると、運用ボリューム内の更新前のデータを差分格納ボリュームにコピーする。これは、Copy On Write（ＣＯＷ）と呼ばれる処理である。ＬＶＭは、運用ボリューム内のデータと差分格納ボリューム内のデータとで構成するスナップショットを管理する機能を有する。この機能は、スナップショットを構成する各データが運用ボリュームと差分格納ボリュームのどちらに存在するかを表すスナップショット管理情報を保持することで実現可能である。
【０００４】
一方、リモートコピー機能は、プライマリサイトのストレージ装置からセカンダリサイトのストレージ装置へのデータのコピーであるリモートコピーを実行する機能である。
【０００５】
リモートコピーを、スナップショット単位で行う方法が知られている（例えば特許文献１や特許文献２）。特許文献１や特許文献２では、リモートコピー済みのスナップショットと、リモートコピー対象のスナップショットとの差異を示した差分ビットマップが作成され、その差分ビットマップに基づいて、データが転送される。
【特許文献１】米国特許第７１２７５７８号明細書
【特許文献２】米国特許出願公開第２００３/０１５８８６９号明細書
【非特許文献１】AJ Lewis著「ＬＶＭ HOWTO」http://ibiblio.org/pub/Linux/docs/HOWTO/other-formats/pdf/ＬＶＭ-HOWTO.pdf
【発明の開示】
【発明が解決しようとする課題】
【０００６】
スナップショット間の差分ビットマップを構成する各ビットは、運用ボリュームの一又は複数のブロックに対応し、その一又は複数のブロックに差分があるか否かを表している。特許文献１及び２では、スナップショット間の差分ビットマップを基に転送用差分ビットマップが作成され、その転送用差分ビットマップを基に、リモートコピーが行われる。
【０００７】
特許文献１では、最新世代のスナップショットがセカンダリサイトにコピーされている最中に、運用ボリューム内のデータがセカンダリサイトにコピーされる場合には、スナップショット管理情報を用いて予め作成された第一の差分ビットマップと、最新のスナップショットが作成された後の、運用ボリュームにおける変更箇所を表した第二の差分ビットマップとがマージされることで、転送用差分ビットマップが作成される。
【０００８】
特許文献１によれば、第一の差分ビットマップは、スナップショット管理情報を用いて作成される。このため、第一の差分ビットマップが得られるまでに時間を要し、転送用差分ビットマップは、第一の差分ビットマップを基に作成されるので、転送用差分ビットマップの作成にも時間を要すると考えられる。特に、スナップショット管理情報が、ストレージ装置内の物理記憶デバイス（例えばハードディスクドライブ（ＨＤＤ）などのディスク型記憶デバイス）にある場合は、スナップショット管理情報の読出しにも時間を要するため、転送用差分ビットマップの作成に一層の時間を要することになると考えられる。
【０００９】
特許文献２では、基点のスナップショット（セカンダリサイトへコピー済みのスナップショット）と未コピーのスナップショットとの差分が、常に、ビットマップ（以下、「ＣＯＷビットマップ」と言う）で管理されており、そのビットマップの複製が転送用差分ビットマップとして使用される。このため、特許文献１と違って、転送用差分ビットマップの作成にスナップショット管理情報は不要である。
【００１０】
しかしながら、ＣＯＷビットマップは、スナップショットの作成の都度に初期化される情報である。そのため、最新世代のスナップショットが作成されると、最新世代のスナップショットと基点スナップショットとの間の世代のスナップショットのリモートコピーに使用する差分ビットマップを高速に作成することはできない。すなわち、そのような差分ビットマップを作成するためには、特許文献１のようにスナップショット管理情報を使用する必要がある。それ故、最新世代のスナップショットと基点スナップショットとの間の世代のスナップショットのリモートコピーに使用する転送用差分ビットマップを作成するのに時間がかかる。
【００１１】
以上の問題点は、例えば、ビットマップと異なる形式の情報を使用してリモートコピーが行われる場合にも、同様に有り得る。また、以上の問題点は、リモートコピーに限らず、一つの装置内でコピー（例えばバックアップ）が行われる場合にも、同様に有り得る。
【００１２】
従って、本発明の目的は、任意世代のコピー対象のスナップショットについてのコピー用差分情報を高速に作成することにある。
【課題を解決するための手段】
【００１３】
記憶制御装置が、コピー済みである第一の時点のスナップショットから最新の時点となる第Ｎの時点のスナップショットまでのＮ個のスナップショットのうちの二つのスナップショット間の差分を表す差分情報を記憶部に取得する。記憶部には、二以上の差分情報が記憶される。二以上の差分情報には、第一の時点のスナップショットと、Ｎ個のスナップショットのうちの第一の時点のスナップショット以外のいずれかのスナップショットとの間の差分を表す差分情報が含まれている。記憶制御装置は、それらの二以上の差分情報を基に、第一の時点のスナップショットとＮ個のスナップショットのうちの指定されたスナップショットとの間の差分を表す情報であって、上記指定されたスナップショットのコピーで使用されるコピー用差分情報を生成する。
【００１４】
具体的には、記憶制御装置は、論理ボリュームと、記憶部（例えば揮発性又は不揮発性のメモリ）と、前記論理ボリュームのスナップショットを取得するスナップショット取得部と、コピー済みである第一の時点のスナップショットから最新の時点となる第Ｎの時点のスナップショットまでのＮ個のスナップショットのうち前記第一の時点のスナップショット以外の指定されたスナップショットをコピーするコピー制御部と（Ｎは三以上の整数）、前記Ｎ個のスナップショットのうちの二つのスナップショット間の差分を表す差分情報を前記記憶部に取得する差分情報取得部と、前記記憶部に記憶されている二以上の前記差分情報を基に、前記第一の時点のスナップショットと前記指定されたスナップショットとの間の差分を表す情報であるコピー用差分情報を生成するコピー用差分情報生成部と、を備える。前記コピー制御部は、前記コピー用差分情報を用いて、前記指定されたスナップショットのコピーを行う。
【００１５】
より具体的には、例えば、前述した二以上の差分情報として、ＣＯＷビットマップと、ＣＯＷビットマップの複製である差分ビットマップを採用することができる。スナップショットを作成する度に、リセット前のＣＯＷビットマップの複製（つまり差分ビットマップ）を記憶部（例えばメモリ）に記憶させることで、複数個の差分ビットマップが記憶部に記憶される。各差分ビットマップは、スナップショットとその直前のスナップショット間の差分を表す。そして、コピー（例えばリモートコピー）の際には、第一の時点のスナップショットと指定されたスナップショットとの間に関わる二以上の差分ビットマップのビット論理和をとることで、転送用差分ビットマップが作成される。
【００１６】
好適な例としては、スナップショットの作成の度に、その時点のＣＯＷビットマップが一つの差分ビットマップにマージされる（すなわち、ビット論理和が算出される）。この場合、第Ｎの時点のスナップショットが指定されたスナップショットであれば、マージ後の一つの差分ビットマップを転送用差分ビットマップとして利用することができる。また、この例であれば、記憶部の消費を抑えることができる。
【００１７】
別の好適な例として、例えばセカンダリサイトにコピーする必要のないスナップショットに関連付けられた差分ビットマップ（言い換えれば、例えば、コピー対象のスナップショット間に関わる差分ビットマップ）がマージされ、マージの基になった差分ビットマップは破棄される。この例であっても、記憶部の消費を抑えることができる。
【００１８】
なお、前述したスナップショット取得部、コピー制御部、差分情報取得部及びコピー用差分情報生成部のうちの少なくとも一つは、ハードウェア、コンピュータプログラム又はそれらの組み合わせ（例えば一部をコンピュータプログラムにより実現し残りをハードウェアで実現すること）により構築することができる。コンピュータプログラムは、所定のプロセッサに読み込まれて実行される。また、コンピュータプログラムがプロセッサに読み込まれて行われる情報処理の際、適宜に、メモリ等のハードウェア資源上に存在する記憶域が使用されてもよい。また、コンピュータプログラムは、ＣＤ−ＲＯＭ等の記録媒体から計算機にインストールされてもよいし、通信ネットワークを介して計算機にダウンロードされてもよい。
【発明を実施するための最良の形態】
【００１９】
本発明の幾つかの実施形態を、図面を参照して詳細に説明する。
【実施例１】
【００２０】
図１は、本発明の第一の実施形態におけるストレージシステムの構成例を示す。
【００２１】
ストレージシステムは、プライマリサーバ装置１００と、プライマリストレージ装置１１０と、クライアント装置１１２と、セカンダリサーバ装置１２０と、セカンダリストレージ装置１３０とから構成される。
【００２２】
プライマリストレージ装置１１０は、ネットワーク１０９を介して、プライマリサーバ装置１００に接続されている。同様に、セカンダリストレージ装置１３０は、別のネットワーク１０９を介して、セカンダリサーバ装置１２０に接続されている。いずれのネットワーク１０９も、例えばＳＡＮ（Storage Area Network）である。
【００２３】
クライアント装置１１２は、ネットワーク１０８を介して、プライマリサーバ装置１００とセカンダリサーバ装置１２０に接続されている。ネットワーク１０８は、例えばＬＡＮ（Local Area Network）である。
【００２４】
プライマリサーバ装置１００は、ネットワーク１０８を介して、セカンダリサーバ装置１２０と接続されている。プライマリサーバ装置１００は、プライマリサーバ装置１００の有するデータをセカンダリサーバ装置１２０へリモートコピーする。以降では、プライマリサーバ装置１００とプライマリストレージ装置１１０を合わせて「プライマリサイト」と呼び、セカンダリサーバ装置１２０とセカンダリストレージ装置１３０をあわせて「セカンダリサイト」と呼ぶ場合がある。
【００２５】
次に、サーバ装置、ストレージ装置及びクライアント装置について、それぞれ説明する。
【００２６】
プライマリサーバ装置１００とセカンダリサーバ装置１２０は、ＣＰＵ（Central
Processing Unit）１０１、メモリ１０２、インタフェース１０６及びインタフェース１０７を備える。ＣＰＵ１０１は、処理を行う制御部としての機能をもつ。メモリ１０２は、サーバ装置１００又は１２０の処理に必要なデータ、及び、ＣＰＵ１０１が実行するソフトウェアを保持する。インタフェース１０６は、プライマリサーバ装置１００とセカンダリサーバ装置１２０とクライアント装置１１２とを接続してデータ転送を行うための接続装置である。インタフェース１０７は、プライマリサーバ装置１００とプライマリストレージ装置１１０（及び、セカンダリサーバ装置１２０とセカンダリストレージ装置１３０）を接続してデータ転送を行うための接続装置である。
【００２７】
通常、サーバ装置１００及び１２０上では、様々なプログラムが動作している。例えば、サーバ装置１００及び１２０はNetwork Attached Storage（ＮＡＳ）装置であり、その場合、サーバ装置１００及び１２０で動作するプログラムとして、NFS（Network File System）サーバプログラムやＤＢＭＳ（Database Management System）のような様々なプログラムが挙げられる。しかし、ここではリモートコピー機能とスナップショット機能を説明することに主眼を置くため、これらのプログラムは図示していない。
【００２８】
これらのプログラムに加えて、プライマリサーバ装置１００とセカンダリサーバ装置１２０で動作するソフトウェアとして、メモリ１０２上には、リモートコピープログラム２００とスナップショット管理プログラム３００とブロックＩ／Ｏ管理プログラム１０５がある。以下、コンピュータプログラムが主語になる場合は、実際にはそのコンピュータプログラムを実行するＣＰＵ１０１によって処理が行われるものとする。
【００２９】
本実施形態では、プライマリサーバ装置１００及びセカンダリサーバ装置１２０のうちプライマリサーバ装置１００の方により特徴があるため、以下の説明では、プライマリサーバ装置１００を主に説明する。具体的には、以下の説明におけるリモートコピープログラム２００、スナップショット管理プログラム３００及びブロックＩ／Ｏ管理プログラム１０５の説明は、特筆が無ければ、プライマリサーバ装置１００で動作するプログラムの説明である。
【００３０】
リモートコピープログラム２００は、プライマリサーバ装置１００で管理されている論理ボリューム内のデータを、セカンダリサーバ装置１２０で管理されている論理ボリュームにネットワーク１０８を介してコピーするプログラムである。
【００３１】
スナップショット管理プログラム３００は、例えば、LinuxカーネルではＬＶＭに相当する。スナップショット管理プログラム３００は、運用ボリューム、差分格納ボリューム及びスナップショットボリューム（以下、単に「スナップショット」とも表現する）等の論理ボリュームを管理し、クライアント装置１１２からのそれぞれの論理ボリュームへのアクセスを可能にする。さらに、スナップショット管理プログラム３００は、リモートコピープログラム２００で使用するための、スナップショット間の差分を管理する。
【００３２】
ブロックＩ／Ｏ管理プログラム１０５は、スナップショット管理プログラム３００からの論理ボリュームへのアクセス要求を、プライマリストレージ装置１１０に対するアクセスコマンドへと変換して、そのアクセスコマンドをプライマリストレージ装置１１０に送信する。例えば、ブロックＩ／Ｏ管理プログラム１０５は、LinuxカーネルではブロックデバイスドライバやSCSIドライバに相当する。
【００３３】
プライマリストレージ装置１１０とセカンダリストレージ装置１３０は、データ保持機能としての少なくとも１つのディスクドライブ１１１と、プライマリサーバ装置１００（又はセカンダリサーバ装置１２０）に接続してデータ転送を行うための接続装置であるインタフェース１０７とを備える。
【００３４】
ディスクドライブ１１１には、或る一定サイズのデータの管理単位であるブロック単位でアクセスすることが可能である。つまり、データの読み出しや書き込みといったデータアクセス時には、ブロック単位でアクセス先が指定される。ディスクドライブ１１１は、単体のディスクドライブ装置であってもよいし、ディスクドライブ装置が提供する記憶領域を構成する各サブ記憶領域（パーティションと呼ばれる領域）であってもよい。あるいは、ディスクドライブ１１１は、複数のディスクドライブ装置の集合であるＲＡＩＤ（Redundant Arrays of Inexpensive Disks）グループ又はそのＲＡＩＤグループが有する記憶空間を基に切り出された論理的な記憶デバイスであっても良い。本実施形態では、運用ボリューム及び差分格納ボリュームに、それぞれ１つずつディスクドライブ１１１が対応付けられているとする。なお、ディスクドライブ装置は、例えばハードディスクドライブ（ＨＤＤ）であるが、ＤＶＤ（Digital Versatile Disk）ドライブ或いはフラッシュメモリデバイスなど他種の物理記憶デバイスであっても良い。
【００３５】
クライアント装置１１２は、プライマリサーバ装置１００やセカンダリサーバ装置１２０と接続してデータ転送を行うための接続装置であるインタフェース１０７を備える。クライアント装置１１２は、ネットワーク１０８を介してプライマリサーバ装置１００やセカンダリサーバ装置１２０にアクセスし、サーバ装置が提供するNFSサーバプログラムなどを利用する。
【００３６】
図２は、リモートコピープログラム２００の構成例について示した図である。以下、リモートコピーされた一以上のスナップショットのうち現在時刻から最も近い時刻に作成されたスナップショットを「基点スナップショット」と言う。また、基点スナップショットよりも後の世代のスナップショットでありリモートコピーの対象とされるスナップショットを「対象スナップショット」と言う。また、基点スナップショットを構成する各ブロック（記憶領域）を「基点ブロック」と言い、対象スナップショットを構成する各ブロックを「対象ブロック」と言う。
【００３７】
リモートコピープログラム２００は、プライマリストレージ装置１１０に存在するスナップショットを、セカンダリサーバ装置１２０上のリモートコピープログラム２００を利用することにより、ネットワーク１０８経由で、セカンダリストレージ装置１３０にコピーする。リモートコピープログラム２００は、差分取得モジュール２０１と、データ転送モジュール２０２と、要求送信モジュール２０３と、要求受信モジュール２０４とを有し、転送用差分ビットマップ２０５を作成することができる。
【００３８】
差分取得モジュール２０１は、基点スナップショットと対象スナップショットとの差分の取得を行う。差分を取得する理由は、対象スナップショット全体ではなく基点スナップショットと対象スナップショットとの差分に相当するデータ（差分データ）のみをコピーすることで効率よくリモートコピーを行うためである。差分取得モジュール２０１は、スナップショット管理プログラム３００の差分ビットマップ作成モジュール３０５を実行し、転送用差分ビットマップ２０５を作成する。転送用差分ビットマップ２０５は、基点スナップショットと対象スナップショットとの差分を表す。転送用差分ビットマップ２０５を構成する各ビットは、運用ボリューム又はスナップショットを構成する各ブロック（記憶領域）に対応する。説明を分かり易くするため、ビットとブロックは、１対１で対応しているとするが、各ビットに複数のブロックが対応付けられていても良い。
【００３９】
データ転送モジュール２０２は、転送用差分ビットマップ２０５に基づいて、リモートコピー対象データの集合である要求データを作成する。具体的には、転送用差分ビットマップ２０５における或るビットがオフ（「０」）であれば、そのビットに対応する、基点ブロックと対象ブロックとに、差分が無いことがわかる。従って、その或るビット「０」に対応するデータは、コピー対象とされない。一方、転送用差分ビットマップ２０５における或るビットがオン（「１」）であれば、そのビットに対応する、基点ブロックと対象ブロックとに、差分があることがわかる。この場合、データ転送モジュール２０２は、後述のＣＯＷ管理テーブル４００を参照して、その或るビット「１」に対応する差分データの在り処を特定し、特定された在り処から差分データを読み出す。その読み出された差分データが、コピー対象のデータとされる。
【００４０】
要求送信モジュール２０３は、相手サイトのリモートコピープログラム２００に対する要求データを、インタフェース１０６を介して送信する。例えば、プライマリサイトにおける要求送信モジュール２０３は、データ転送モジュール２０２が作成した要求データをセカンダリサイトへ送信する。
【００４１】
要求受信モジュール２０４は、相手サイトのリモートコピープログラム２００から送信されてくる要求データを、インタフェース１０６を介して受信する。例えば、セカンダリサイトにおける要求受信モジュール２０４は、プライマリサイトから送信されてくる要求データを受信する。
【００４２】
図３は、スナップショット管理プログラム３００の構成例について示した図である。
【００４３】
スナップショット管理プログラム３００は、プライマリサーバ装置１００内の各種プログラムからの運用ボリューム及び差分格納ボリュームに対するアクセスを制御し、スナップショット機能を実現するプログラムである。スナップショット管理プログラム３００は、読み出し処理モジュール３０１と、書き込み処理モジュール３０２と、スナップショット作成モジュール３０３と、スナップショット削除モジュール３０４と、差分ビットマップ作成モジュール３０５とを有する。また、スナップショット管理プログラム３００は、ＣＯＷ管理テーブル４００、使用ブロックビットマップ５００、ＣＯＷビットマップ６００、差分ビットマップ管理テーブル７００及び最新スナップショットシーケンス番号３０６を管理する。
【００４４】
読み出し処理モジュール３０１は、ＣＯＷ管理テーブル４００とＣＯＷビットマップ６００を用いて運用ボリューム内のデータやスナップショット内のデータを参照するために実行される。読み出し処理モジュール３０１が行う処理の詳細については、図１１を用いて後述する。
【００４５】
書き込み処理モジュール３０２は、運用ボリュームへの書き込みを制御し、スナップショットを維持するために実行される。書き込み処理モジュール３０２は、運用ボリュームへの書き込みが発生する度に呼び出され、必要であれば、差分データを差分格納ボリュームへコピーし、ＣＯＷ管理テーブル４００とＣＯＷビットマップ６００を更新した上で、書込み対象データの運用ボリュームへの書き込み行う。書き込み処理モジュール３０２が行う処理の詳細については、図１２を用いて後述する。
【００４６】
スナップショット作成モジュール３０３は、運用ボリュームのスナップショットを作成するために実行される。スナップショット作成モジュール３０３が或る世代のスナップショットを作成した後、その或る世代のスナップショットへのアクセスが可能になる。スナップショット作成モジュール３０３は、ＣＯＷ管理テーブル４００、ＣＯＷビットマップ６００及び差分ビットマップ管理テーブル７００を更新する。スナップショット作成モジュール３０３が行う処理の詳細については、図９を用いて後述する。
【００４７】
スナップショット削除モジュール３０４は、作成したスナップショットを削除する際に実行される。スナップショット削除モジュール３０４は、ＣＯＷ管理テーブル４００、使用ブロックビットマップ５００及び差分ビットマップ管理テーブル７００を更新し、差分格納ボリュームを構成する複数のブロックのうちの、削除するスナップショットの構成要素のデータを記憶しているブロックを開放する処理を行う。スナップショット削除モジュール３０４が行う処理の詳細については、図１０を用いて後述する。
【００４８】
差分ビットマップ作成モジュール３０５は、リモートコピープログラム２００の差分取得モジュール２０１が転送用差分ビットマップを要求してきた際に実行される。差分ビットマップ作成モジュール３０５は、差分ビットマップ管理テーブル７００あるいはＣＯＷ管理テーブル４００を参照し、転送用差分ビットマップを作成する。差分ビットマップ作成モジュール３０５が行う処理の詳細については、図１３を用いて後述する。
【００４９】
図４は、ＣＯＷ管理テーブル４００の一例を示す。以下の説明では、運用ボリュームを構成する各ブロックを、「運用ブロック」と言い、差分格納ボリュームを構成する各ブロックを、「差分ブロック」と言う。
【００５０】
ＣＯＷ管理テーブル４００は、スナップショットを構成するデータの在り処を保存するテーブルである。このＣＯＷ管理テーブル４００は、前述したスナップショット管理情報に相当する。
【００５１】
ＣＯＷ管理テーブル４００は、スナップショット毎に、運用ブロックのアドレス（運用ボリュームブロックアドレス）４０１と、その運用ブロック内のデータのコピー先ブロックのアドレス４０２、４０３、…、４０ｎとを保持する。加えて、ＣＯＷ管理テーブル４００は、スナップショット毎に、スナップショットを一意に識別するためのシーケンス番号を保持する。本実施形態では、運用ブロック数がｐ個であり、スナップショットを最大ｎ個まで作成可能であるとする。そのため、運用ボリュームブロックアドレスは、０からｎ−１までｐ行あり、スナップショットは、１からｎまでｎ列ある。以下、ブロックアドレスｋのブロックを「ブロックｋ」と記載する（ｋは０からｎ−１までの整数である）。
【００５２】
例えば、行４１１と列４０２が交わる箇所に、コピー先ブロックアドレス「３２」が記録されている。すなわち、スナップショット１のブロック０を参照する際には、差分ブロック３２を参照すればよいことがわかる。また、行４１１と列４０３の交わる箇所に、コピー先ブロックアドレス「０」が記録されている。コピー先ブロックアドレス「０」は、対応する運用ブロックについてＣＯＷが発生していない（つまり差分が発生していない）ことを表す（本実施形態では、差分ブロック０はコピー先ブロックにはならない）。従って、スナップショット２のブロック０を参照する際には、運用ブロック０を参照すればよいことがわかる。また、スナップショットｎに対応した列４０ｎでは、全てのセルにおける値が、「-」（なし）になっている。これは、スナップショットｎが作成されていない状態を表す。
【００５３】
また、行４１０は各スナップショットのシーケンス番号を示している。例えば、スナップショット１のシーケンス番号は、行４１０と列４０２の交わる箇所によれば、「１」である。ＣＯＷ管理テーブル４００の各スナップショットの列には、スナップショットを一意に識別し管理するためにシーケンス番号が保持される。保持できるスナップショット数には制限があるため、古いスナップショットを削除して新しいスナップショットを作成した場合、スナップショットの世代を表す番号は再利用されるが、シーケンス番号は決して再利用されず、一意に管理される。したがって、シーケンス番号とスナップショットの世代を表す番号は、通常は異なるが、一時的に同じ場合もある。
【００５４】
なお、本実施形態では、このＣＯＷ管理テーブル４００は、メモリ１０２に保持されるが、それに代えて、ディスクドライブ１１１に保持されてもよい。
【００５５】
図５は、使用ブロックビットマップ５００の一例を示す。
【００５６】
使用ブロックビットマップ５００は、各差分ブロックの使用状況を管理するビットマップである。本実施形態では、差分ブロック数がq個であるとする。使用ブロックビットマップ５００は、それらのq個の差分ブロックのアドレスのそれぞれについて、使用しているか否かを表す使用状態フラグ（ビット）を保持する。使用状態フラグは、「１」の場合に、そのフラグに対応する差分ブロックが使用中であることを意味し、「０」の場合に、そのフラグに対応する差分ブロックが未使用であることを意味する。
【００５７】
図６は、ＣＯＷビットマップ６００の一例を示す。
【００５８】
ＣＯＷビットマップ６００は、運用ブロック内のデータを差分格納ボリュームにコピーする（退避する）必要があるか否かを管理するビットマップである。ＣＯＷビットマップ６００は、p個の運用ブロックのアドレスのそれぞれについて、その運用ブロックを差分格納ボリュームにコピーする必要があるか否かを表すＣＯＷ状態フラグ（ビット）を保持する。ＣＯＷ状態フラグは、「１」の場合に、そのフラグに対応する運用ブロックに更新が生じてもその運用ブロック内のデータを差分格納ボリュームにコピーすることが不要であることを意味し、「０」の場合に、そのフラグに対応する運用ブロックに更新が生じたならばその運用ブロック内のデータを差分格納ボリュームにコピーすることが必要であることを意味する。
【００５９】
なお、更新の発生した運用ブロック内のデータを差分格納ボリュームにコピーする必要があるか否かは、ＣＯＷ管理テーブル４００からも特定することができる。ＣＯＷ管理テーブル４００の最新世代のスナップショットの列において、コピー先ブロックアドレス「０」は、そのアドレスに対応した運用ブロックについてＣＯＷが未だ発生していないことを表している。すなわち、ＣＯＷビットマップ６００において、その運用ブロックに対応したＣＯＷ状態フラグは「０」となっている。ＣＯＷビットマップ６００を保持する理由は、ＣＯＷ管理テーブル４００からよりも、ＣＯＷビットマップ６００からの方が、所望の運用ブロックのＣＯＷ状態（コピー済みか否か）を高速に取得することができるからである。これは、ＣＯＷ管理テーブル４００がメモリ１０２ではなくディスクドライブ１１１に存在する場合に一層効果的である。
【００６０】
ＣＯＷビットマップ６００及びＣＯＷ管理テーブル４００のうち、対象スナップショット（リモートコピー対象のスナップショット）が、基点スナップショットと最新世代のスナップショットとの間の世代のスナップショットであれば、ＣＯＷ管理テーブル４００が、リモートコピーの際に適宜に参照される。一方、対象スナップショットが、最新世代のスナップショットであれば、ＣＯＷビットマップ６００及びＣＯＷ管理テーブル４００のうちの少なくともＣＯＷ管理テーブル４００が、リモートコピーの際に、適宜に参照される。
【００６１】
具体的には、対象スナップショットが、基点スナップショットと最新世代のスナップショットとの間の世代のスナップショットである場合、転送用ビットマップ２０５の或るビットが「１」であれば、ＣＯＷ管理テーブル４００内の、対象ビットマップに対応したカラムを参照することで、或るビット「１」に対応する差分データの在り処（運用ブロックまたは差分ブロックのブロックアドレス）が特定される。
【００６２】
一方、対象スナップショットが、最新世代のスナップショットである場合、転送用ビットマップ２０５の或るビットが「１」であれば、ＣＯＷビットマップ６００（及びＣＯＷ管理テーブル４００）を参照することで、或るビット「１」に対応する差分データの在り処が特定される。例えば、或るビット「１」に対応する、ＣＯＷビットマップ６００におけるビットが「０」であれば、或るビット「１」に対応する運用ブロック（運用ボリューム内のブロック）に記憶されているデータが、コピー対象のデータである。一方、或るビット「１」に対応する、ＣＯＷビットマップ６００におけるビットが「１」であれば、そのビット「１」に対応する差分ブロック（差分格納ボリューム内のブロック）に記憶されているデータが、コピー対象のデータである。
【００６３】
図７は、差分ビットマップ管理テーブル７００の一例を示す。
【００６４】
差分ビットマップ管理テーブル７００は、スナップショット毎に、そのスナップショットとそれの一世代前のスナップショットとの差分を表す差分ビットマップを保持するテーブルである。差分ビットマップを構成する各ビットは、各運用ブロックに対応している。
【００６５】
具体的には、差分ビットマップ管理テーブル７００は、運用ブロックのアドレス（運用ボリュームブロックアドレス）７０１と、その運用ブロックに対応したビット（差分ビットマップの構成要素）７０２、７０３、…、７０ｎとを保持する。加えて、差分ビットマップ管理テーブル７００は、ＣＯＷ管理テーブル４００と同様に、行７１０に、スナップショット毎に、スナップショットを一意に識別するためのシーケンス番号を保持する。
【００６６】
或る世代のスナップショットn-１を作成した時点からスナップショットnを作成する時点までに、更新のあった運用ブロックについては、「１」というビットが設定され、更新のなかった運用ブロックについては、「０」というビットが設定される。
【００６７】
例えば、スナップショット１とスナップショット２との差分を表す差分ビットマップは、スナップショット２の列７０３に保持されている。例えば、行７１１と列７０３が交わる箇所には、ビット「１」が設定されている。このため、スナップショット１の作成時点からスナップショット２の作成時点までの間に、運用ブロック０に更新があったことがわかる。また、例えば、行７１２と列７０３が交わる箇所には、ビット「０」が設定されている。このため、スナップショット１の作成時点からスナップショット２の作成時点までの間に、運用ブロック１に更新がなかったことがわかる。また、列７０５を構成する全てのセルに値「-（なし）」が設定されている。これは、スナップショットnが作成されておらず、差分が確定していない状態を表す。
【００６８】
なお、差分ビットマップ管理テーブル７００がどのようにして作成されるかは、図９を用いて後述する。
【００６９】
図３に示した最新スナップショットシーケンス番号３０６は、スナップショット管理プログラム３００が管理するスナップショットのうち、どのスナップショットが最新であるかを保持するための情報である。最新スナップショットシーケンス番号３０６は、例えば整数である。最新スナップショットシーケンス番号３０６は、スナップショットが作成される都度に１インクリメントされ、１インクリメントされた後の番号３０６が、その作成された最新世代のスナップショットのシーケンス番号とされる。
【００７０】
以上が、スナップショット管理プログラム３００の構成に関する説明である。
【００７１】
図８は、基点スナップショットと対象スナップショット間の差分ビットマップを作成する例を示す。この例では、基点スナップショットは「スナップショット１」であり、対象スナップショットは「スナップショット３」である。
【００７２】
列８０１は、運用ボリュームのブロックアドレスを表す。列８０２は、差分ビットマップ管理テーブル７００の列７０３に保持されている差分ビットマップ（スナップショット１とスナップショット２との間の差分を表すビットマップ）を表す。列８０３は、差分ビットマップ管理テーブル７００の列７０４に保持されている差分ビットマップ（スナップショット２とスナップショット３との間の差分を表すビットマップ）を表す。列８０４は、列８０２内の差分ビットマップと列８０３内の差分ビットマップとのビット論理和を表す。これが、スナップショット１とスナップショット３との間の差分を表すビットマップ、すなわち、スナップショット１の作成時点からスナップショット３の作成時点までにどの運用ブロックが更新されたかを示す差分ビットマップとなる。
【００７３】
例えば、運用ボリュームブロックアドレスが０である行８１１では、スナップショット１-２間の差分ビットマップ内のビットが「１」（差分あり）であり、スナップショット２-３間の差分ビットマップ内のビットが「０」（差分なし）である。すなわち、スナップショット１とスナップショット３との間で考えると、運用ブロック０には差分が存在するため、行８１１と列８０４が交わる箇所には、ビット「１」（差分あり）が設定される。また、運用ボリュームブロックアドレスが１である行８１２では、スナップショット１-２間の差分ビットマップ内のビットも、スナップショット２-３間の差分ビットマップ内のビットも、「０」（差分なし）である。すなわち、スナップショット１とスナップショット３との間でも、差分が存在しないため、行８１２と列８０４が交わる箇所には、ビット「０」（差分なし）が設定される。
【００７４】
後述するように、ビット論理和である差分ビットマップ（つまり列８０４に設定された差分ビットマップ）の複製が、リモートコピーの際に使用される転送用差分ビットマップ２０５である。
【００７５】
以下では、スナップショット管理プログラム３００を構成する各モジュールが行う処理のフローを、図９から図１３を用いて説明する。
【００７６】
図９は、スナップショット作成モジュール３０３の動作を表す処理フローの一例である。スナップショット作成モジュール３０３は、例えば、クライアント装置１１２（又はネットワーク１０８に接続されている図示しない管理装置）から、スナップショット作成指示（例えばスナップショット番号を含んだ作成指示）を受けた場合に実行される。作成するスナップショット番号は、他の方法でスナップショット作成モジュール３０３に指定されても良い。
【００７７】
まず、スナップショット作成モジュール３０３は、最新スナップショットシーケンス番号３０６を１インクリメントする（Ｓ９０１）。
【００７８】
次に、スナップショット作成モジュール３０３は、差分ビットマップ管理テーブル７００の、指定されたスナップショット番号に対応する列に、ＣＯＷビットマップ６００をコピーし、且つ、その列に、Ｓ９０１でインクリメントされた後の最新スナップショットシーケンス番号３０６を設定する（Ｓ９０２）。差分ビットマップ管理テーブル７００にコピーされたＣＯＷビットマップ６００では、ＣＯＷ済みの運用ブロック、すなわち、差分格納ボリュームにコピーされたデータを記憶していた運用ブロックについて、ビット「１」が設定されている。このＣＯＷ済みの運用ブロックは、直前世代のスナップショット作成後から現時点までに更新された運用ブロックと同義であるから、現時点のＣＯＷビットマップ６００は、直前世代のスナップショットと現在作成しようとしているスナップショットの間の差分ビットマップとして、特に変換処理などを行うことなく、そのまま差分ビットマップ管理テーブル７００にコピーされればよい。
【００７９】
次に、スナップショット作成モジュール３０３は、ＣＯＷビットマップ６００を構成する全てのビットを「０」に設定する（Ｓ９０３）。つまり、ＣＯＷビットマップ６００がリセットされる。これにより、すべての運用ブロックのＣＯＷ状態が、更新が生じたならば差分格納ボリュームにデータのコピーが必要な状態になる。
【００８０】
そして、スナップショット作成モジュール３０３は、ＣＯＷ管理テーブル４００の、実行時に指定されたスナップショット番号に対応する列において、すべての運用ボリュームブロックアドレスについて「０」を設定し、且つ、その列に、インクリメントされた後の最新スナップショットシーケンス番号３０６を設定する（Ｓ９０４）。
【００８１】
図１０は、スナップショット削除モジュール３０４の動作を表す処理フローの一例である。スナップショット削除モジュール３０４は、例えば、クライアント装置１１２（又はネットワーク１０８に接続されている図示しない管理装置）から、削除対象のスナップショットを指定したスナップショット削除指示（例えば、スナップショットのシーケンス番号を含んだ削除指示）を受けた場合に実行される。削除対象のスナップショットは、他の方法でスナップショット削除モジュール３０４に指定されても良い。
【００８２】
まず、スナップショット削除モジュール３０４は、ＣＯＷ管理テーブル４００の、削除対象のスナップショットに対応する列（指定されたスナップショットシーケンス番号を有する列）における全てのセルに、値「-（なし）」を設定する（Ｓ１００１）。
【００８３】
次に、スナップショット削除モジュール３０４は、使用ブロックビットマップ５００の状態フラグを更新する（Ｓ１００２）。具体的には、スナップショット削除モジュール３０４は、使用ブロックビットマップ５００における、削除対象のスナップショットを構成するデータを記憶している差分ブロックに対応した状態フラグ（ビット）を、未使用を意味する「０」に更新する。これにより、削除対象のスナップショットを構成するデータを記憶している差分ブロックが解放される。なお、削除対象のスナップショットを構成するデータを記憶している差分ブロックがどれであるかは、ＣＯＷ管理テーブル４００を参照することにより、特定することができる。その際、その特定された差分ブロックが、他のスナップショットを構成するデータが記憶されている差分ブロックである場合には、スナップショット削除モジュール３０４は、その特定された差分ブロックについては、解放しない（すなわち、その差分ブロックに対応した状態フラグを「１」から「０」には変更しない）。つまり、スナップショット削除モジュール３０４は、削除対象のスナップショットを構成するデータを記憶している差分ブロックを解放するか否かを、ＣＯＷ管理テーブル３０６を参照した上で、決定する。
【００８４】
そして、スナップショット削除モジュール３０４は、差分ビットマップ管理テーブル７００の、削除対象のスナップショットに対応する列の全てのセルに、「-（なし）」を設定する（Ｓ１００１）。
【００８５】
図１１は、読み出し処理モジュール３０１の動作を表す処理フローの一例である。読み出し処理は、運用ボリュームとスナップショットのいずれかに対して行われるとする。
【００８６】
まず、読み出し処理モジュール３０１は、読み出し要求を受け取り、その要求で指定されている論理ボリュームがスナップショットであるかを判定する（Ｓ１１０１）。読み出し要求は、例えば、上位のプログラム（例えばファイルシステム）から受ける。読み出し要求では、読み出し元の論理ボリューム及びその論理ボリューム内のブロックが指定されている。具体的には、例えば、読み出し要求には、論理ボリュームのＩＤと、ブロックのアドレスとが含まれている。
【００８７】
読み出し処理モジュール３０１は、読み出し要求でスナップショットが指定されていなければ（Ｓ１１０１：ＮＯ）、読み出し要求で指定されている運用ボリューム内の運用ブロックからデータを読み出して（Ｓ１１０３）、終了する。
【００８８】
一方、読み出し要求でスナップショットが指定されていれば（Ｓ１１０１：ＹＥＳ）、読み出し処理モジュール３０１は、そのスナップショットの、指定されているブロックに該当するＣＯＷ管理テーブル４００の行を参照して、参照先のコピー先ブロックアドレスの値が「０」かどうかを判定する（Ｓ１１０２）。参照先のコピー先ブロックアドレスの値が「０」であれば（Ｓ１１０２：ＹＥＳ）、読出し対象のデータは、差分格納ボリュームではなく運用ボリュームに存在するため、読み出し処理モジュール３０１は、運用ボリュームの、指定されたブロックから、データを読み出して（Ｓ１１０３）、終了する。参照先のコピー先ブロックアドレスの値が「０」でなければ（Ｓ１１０２：ＮＯ）、読出し対象のデータは差分格納ボリュームにコピーされているので、参照先のコピー先ブロックアドレスから表す差分ブロックから、データを読み出して（Ｓ１１０４）、終了する。
【００８９】
図１２は、書き込み処理モジュール３０２の動作を表す処理フローの一例である。書き込み処理では、運用ボリュームへのデータの書き込みが行われるが、必要に応じて、運用ボリュームへのデータの書き込みに先立って、書込み先の運用ブロックに記憶されているデータを差分格納ボリュームへコピーすることも行われる。
【００９０】
まず、書き込み要求を受け取ると、書き込み処理モジュール３０２は、ＣＯＷビットマップ６００を参照し、書き込む先の運用ブロックのＣＯＷ状態フラグが「０」であるかを判定する（Ｓ１２０１）。書き込み要求は、例えば、上位のプログラム（例えばファイルシステム）から受ける。書き込み要求では、書き込み先の運用ボリューム及び運用ブロックが指定されている。具体的には、例えば、書き込み要求には、運用ボリュームのＩＤと、運用ブロックのアドレスとが含まれている。
【００９１】
参照先のＣＯＷ状態フラグが「１」であれば（Ｓ１２０１：ＮＯ）、書き込み処理モジュール３０２は、書込み対象のデータの指定されている運用ブロックへの書き込みを実行し（Ｓ１２０７）、終了する。参照先のＣＯＷ状態フラグが「０」であれば（Ｓ１２０１：ＹＥＳ）、書き込み処理モジュール３０２は、スナップショットを維持するために運用ボリュームのデータのコピーが必要なため、続いて以下の処理を行う。
【００９２】
すなわち、書き込み処理モジュール３０２は、最新スナップショットシーケンス番号３０６を参照し、ＣＯＷ管理テーブル４００における、最新スナップショットの列（参照先の最新スナップショットシーケンス番号３０６を含んだ列）を選択する（Ｓ１２０２）。次に、書き込み処理モジュール３０２は、使用ブロックビットマップ５００を参照し、状態フラグが「０」（未使用）の差分ブロックを選択する（Ｓ１２０３）。次に、書き込み処理モジュール３０２は、書込み先の運用ブロック内のデータを、Ｓ１２０３で選択した差分ブロックへコピーし、その差分ブロックに対応した、使用ブロックビットマップ５００の状態フラグを、「１」（使用済み）に変更する（Ｓ１２０４）。次に、書き込み処理モジュール３０２は、すべてのスナップショットについての、書込み先の運用ブロックに対応したコピー先ブロックアドレス（ＣＯＷ管理テーブル４００におけるコピー先ブロックアドレス）のうち、コピー先ブロックアドレス「０」を、Ｓ１２０３で選択したブロック番号に変更する（Ｓ１２０５）。次に、書き込み処理モジュール３０２は、書込み先の運用ブロックに対応した、ＣＯＷビットマップ６００におけるＣＯＷ状態フラグを、「１」に変更する（Ｓ１２０６）。以上の処理を行った上で、書き込み処理モジュール３０２は、書込み先の運用ブロックへの書込み対象のデータの書き込みを実行し（Ｓ１２０７）、終了する。
【００９３】
図１３は、差分ビットマップ作成モジュール３０５の動作を表す処理フローの一例である。差分ビットマップ作成モジュール３０５では、リモートコピープログラム２００の差分取得モジュール２０１が転送用差分ビットマップを要求してきた際に、差分ビットマップ管理テーブル７００あるいはＣＯＷ管理テーブル４００を参照し、転送用差分ビットマップを作成する。差分ビットマップ作成モジュール３０５を実行する際は、差分を求めたい２つのスナップショットのシーケンス番号が、リモートコピープログラム２００の差分取得モジュール２０１から差分ビットマップ作成モジュール３０５に指定される。それら２つのスナップショットのうちの一方は、基点スナップショットであり、他方は、対象スナップショット（すなわち、リモートコピー対象のスナップショット）である。例えば、基点スナップショットのシーケンス番号（及び／又は、他のスナップショットのシーケンス番号）は、リモートコピープログラム２００で管理されていても良いし、リモートコピープログラム２００がスナップショット管理プログラム３００に問い合わせることで把握されても良い。
【００９４】
まず、差分ビットマップ作成モジュール３０５は、実行時に指定された２つのスナップショット間のすべてのスナップショットについて、差分ビットマップが存在しているかを判定する（Ｓ１３０１）。指定されたスナップショットのシーケンス番号が「１」と「３」であった場合の例について、図７を用いて説明する。シーケンス番号「１」のスナップショットとシーケンス番号「２」のスナップショットとの間の差分を表す差分ビットマップは、列７０３のシーケンス番号２のスナップショット２の列に保持されている。また、シーケンス番号「２」のスナップショットとシーケンス番号「３」のスナップショットとの間の差分を表す差分ビットマップは、列７０４のシーケンス番号「３」のスナップショット３の列に保持されている。よって、実行時に指定されたスナップショット（シーケンス番号「１」のスナップショットとシーケンス番号「３」のスナップショット）の間のすべてのスナップショットについて、差分ビットマップが存在している（Ｓ１３０１：ＹＥＳ）。
【００９５】
この場合（Ｓ１３０１：ＹＥＳ）、差分ビットマップ作成モジュール３０５は、スナップショット間のすべての差分ビットマップについて、ビット論理和を算出する（Ｓ１３０２）。ビット論理和を算出することで差分ビットマップを作成する方法については、図８を参照して前述したとおりである。
【００９６】
スナップショット間の差分ビットマップが存在しない場合（Ｓ１３０１：ＮＯ）、差分ビットマップ作成モジュール３０５は、ＣＯＷ管理テーブル４００における、それら２つのスナップショットの２つの列を比較し、各運用ブロックアドレスについて、コピー先ブロックアドレスが等しければ「０」を設定し、異なれば「１」を設定することで、差分ビットマップを作成する（Ｓ１３０４）。なお、Ｓ１３０１：ＮＯになるケースは、実行時に指定された２つのスナップショットの間に存在する複数のスナップショットのうちの少なくとも一つのスナップショットについて差分ビットマップが存在しない（例えば削除された）ケースである。
【００９７】
そして、差分ビットマップ作成モジュール３０５は、Ｓ１３０２またはＳ１３０４の処理によって作成した差分ビットマップを、転送用差分ビットマップ２０５が記憶される領域に、コピーする（Ｓ１３０３）。従って、その領域にコピーされた差分ビットマップが、リモートコピーの際に転送用差分ビットマップ２０５として使用される。
【００９８】
最後に、差分ビットマップ作成モジュール３０５は、差分ビットマップ管理テーブル７００における、不要となった差分ビットマップ（Ｓ１３０２又はＳ１３０４の処理によって作成された差分ビットマップの基になった複数の差分ビットマップ）に対応する列を構成する全てのセルに、「-（なし）」を設定する（Ｓ１３０５）。つまり、転送用差分ビットマップ２０５が作成されてリモートコピーが完了すれば、その転送用差分ビットマップ２０５の作成に使用された複数の差分ビットマップは使用されない。したがって、それらの差分ビットマップが記憶されている複数の列に、それぞれ、「-（なし）」が設定されることで、記憶容量（典型的にはメモリの記憶容量）の消費を節約することができる。先と同様に、図７の例では、シーケンス番号「２」のスナップショットとシーケンス番号「３」のスナップショットとの間の差分を表す差分ビットマップが記憶されている列７０４に、「-（なし）」が設定されればよい。なお、作成された転送用差分ビットマップ２０５を使用したリモートコピーに失敗した場合などに備えて、リモートコピープログラム２００の完了を待って、このような解放処理が行われてもよいし、スナップショット自体が削除されるまで、差分ビットマップが保持されていてもよい。
【００９９】
以上が、本実施形態の説明である。なお、本実施形態では、要求データを構成する各差分データが、セカンダリサイトに転送されるが、転送先は、例えば、プライマリサイトの運用ボリューム（プライマリボリューム）とボリュームペアを構成するセカンダリサイトの運用ボリューム（セカンダリボリューム）となる。セカンダリボリュームに差分データが書き込まれる場合、セカンダリボリューム内の書込み先のブロックに記憶されているデータが、セカンダリサイトにおける差分格納ボリュームに退避され（コピーされ）、その書込み先ブロックに、差分データが書き込まれる。
【０１００】
本実施形態によれば、スナップショットごとに、世代間（スナップショット間）の差分ビットマップが保持され、転送用差分ビットマップが、基点スナップショットと対象スナップショットとの間の一以上の差分ビットマップのビット演算で算出される。これにより、任意の世代の対象スナップショットについての転送用差分ビットマップを高速に作成することができる。言い換えれば、任意の世代の対象スナップショットについての転送用差分ビットマップを作成するのに、ＣＯＷ管理テーブル４００を参照する必要が無い。これは、ＣＯＷ管理テーブル４００がメモリ１０２ではなくディスクドライブ１１１に存在する場合には、より有効である。
【実施例２】
【０１０１】
次に、本発明の第二の実施形態について説明する。以下、第一の実施形態との相違点を主に説明し、第一の実施形態との共通点については、説明を省略または簡略する。
【０１０２】
図１４は、本実施形態におけるスナップショット管理プログラム１４００の構成の一例を示す。
【０１０３】
スナップショット管理プログラム１４００には、第一の実施形態のスナップショット作成モジュール３０３、スナップショット作成モジュール３０４及び差分ビットマップ作成モジュール３０５と機能が異なるスナップショット作成モジュール１４０１、スナップショット作成モジュール１４０２及び差分ビットマップ作成モジュール１４０３が備えられている。スナップショット管理プログラム１４００は、第一の実施形態で説明した差分ビットマップ管理テーブル７００を管理しない。スナップショット管理プログラム１４００は、マージ基点スナップショットシーケンス番号１４０４を管理し、適時に、マージ差分ビットマップ１５００を作成する。
【０１０４】
図１５は、マージ差分ビットマップ１５００の一例である。
【０１０５】
マージ差分ビットマップ１５００は、各運用ブロックについて、差分の有無を表す差分有無フラグ（ビット）を保持している。マージ差分ビットマップ１５００は、スナップショット作成の度に、その時点のＣＯＷビットマップ６００とのマージ（ビット論理和）となる。転送用差分ビットマップ２０５が生成された時点での最新スナップショットシーケンス番号３０６を保持したものが、マージ基点スナップショットシーケンス番号１４０４である。
【０１０６】
転送用差分ビットマップ２０５は、転送用差分ビットマップ２０５が記憶される領域にコピーされたマージ差分ビットマップ１５００である。従って、転送用差分ビットマップ２０５は、基点スナップショットと最新世代のスナップショットとの間の差分を表す差分ビットマップである。従って、本実施形態では、対象スナップショットが最新世代のスナップショットの場合に、対象スナップショットについての転送用差分ビットマップを高速に作成することができる。
【０１０７】
以下では、本実施形態における処理フローについて、図１６から図１８を用いて説明する。
【０１０８】
図１６は、スナップショット作成モジュール１４０１の動作を表す処理フローの一例である。
【０１０９】
Ｓ１６０１〜Ｓ１６０４のうち、Ｓ１６０１、Ｓ１６０３及びＳ１６０４が、図９に示したＳ９０１、Ｓ９０３及びＳ９０４と同じである。本実施形態では、図９に示したＳ９０２に代えて、図１６に示すＳ１６０２が行われる。
【０１１０】
すなわち、スナップショット作成モジュール１４０１は、Ｓ１６０２において、その時点のＣＯＷビットマップ６００とマージ差分ビットマップ１５００とのビット論理和を、新しいマージ差分ビットマップ１５００とする点である。これにより、基点スナップショットの作成時点から最新スナップショット作成時点までの、運用ボリュームに更新があったブロックを保持することができる。
【０１１１】
図１７は、スナップショット削除モジュール１４０２の動作を表す処理フローの一例である。
【０１１２】
Ｓ１７０１〜Ｓ１７０４のうち、Ｓ１７０１及びＳ１７０２が、図１０に示したＳ１００１及びＳ１００２と同じである。本実施形態では、図１０に示したＳ１００３に代えて、図１７に示すＳ１７０３及びＳ１７０４が行われる。
【０１１３】
すなわち、Ｓ１７０３では、スナップショット削除モジュール１４０２は、指定された削除対象のスナップショットのシーケンス番号がマージ基点スナップショットシーケンス番号１４０４未満かどうかを判定する。Ｓ１７０３の判定の結果が肯定的の場合（Ｓ１７０３：ＹＥＳ）、スナップショット削除モジュール１４０２は、そのまま削除処理を終了する。その時点まで保持してきたマージ差分ビットマップ１５００とは関係がないためである。
【０１１４】
一方、Ｓ１７０３の判定の結果が否定的の場合（Ｓ１７０３：ＮＯ）、スナップショット削除モジュール１４０２は、マージ基点スナップショットシーケンス番号１４０４とマージ差分ビットマップ１５００に「-（なし）」を設定する（Ｓ１７０４）。この結果、マージ差分ビットマップ１５００を構成する各ビットが、「-（なし）」に設定される。マージ差分ビットマップ１５００が実際の差分ビットマップと一致しなくなるためである。
【０１１５】
図１８は、差分ビットマップ作成モジュール１４０３の動作を表す処理フローの一例である。
【０１１６】
差分ビットマップ作成モジュール１４０３は、リモートコピープログラム２００の差分取得モジュール２０１が転送用差分ビットマップを要求してきた際に、マージ差分ビットマップ１５００あるいはＣＯＷ管理テーブル４００を参照し、転送用差分ビットマップを作成する。第一の実施形態と同様に、差分ビットマップ作成モジュール１４０３を実行する際は、差分を求めたい２つのスナップショット（基点スナップショットと対象スナップショット）のシーケンス番号が指定される。
【０１１７】
まず、差分ビットマップ作成モジュール１４０３は、実行時に指定された２つのスナップショットのシーケンス番号が、マージ基点スナップショットシーケンス番号１４０４及び最新スナップショットシーケンス番号３０６と一致するかどうかを判定する（Ｓ１８０１）。
【０１１８】
Ｓ１８０１の判定の結果が肯定的の場合（Ｓ１８０１：ＹＥＳ）、マージ差分ビットマップ１５００が所望の差分ビットマップと一致するため、差分ビットマップ作成モジュール１４０３は、リモートコピープログラム２００の転送用差分ビットマップ２０５の領域に、マージ差分ビットマップ１５００をコピーする（Ｓ１８０２）。そして、差分ビットマップ作成モジュール１４０３は、マージ基点スナップショットシーケンス番号１４０４を、最新スナップショットシーケンス番号３０６と同じ番号に変更し（Ｓ１８０５）、終了する。
【０１１９】
Ｓ１８０１の判定の結果が否定的の場合（Ｓ１８０１：ＮＯ）、マージ差分ビットマップ１５００が所望の差分ビットマップと一致しないため、差分ビットマップ作成モジュール１４０３は、ＣＯＷ管理テーブル４００を参照し、差分ビットマップを作成する（Ｓ１８０３）。すなわち、差分ビットマップ作成モジュール１４０３は、ＣＯＷ管理テーブル４００の、指定された２つのスナップショットに対応した２列を比較し、コピー先ブロック番号が等しければ「０」を、異なれば「１」を設定することで、差分ビットマップを作成する。そして、差分ビットマップ作成モジュール１４０３は、作成した差分ビットマップを、リモートコピープログラム２００の転送用差分ビットマップ２０５の領域にコピーする（Ｓ１８０４）。最後に、差分ビットマップ作成モジュール１４０３は、マージ基点スナップショットシーケンス番号１４０４を、最新スナップショットシーケンス番号３０６と同じ番号に変更し（Ｓ１８０５）、終了する。
【０１２０】
以上が、第二の実施形態についての説明である。
【０１２１】
本実施形態によれば、スナップショットの作成の都度に、作成された最新世代のスナップショットとの直前世代のスナップショットとの差分を表すＣＯＷビットマップ４００の内容が、マージ差分ビットマップ１５００にマージされる。対象スナップショットが最新世代のスナップショットである場合に、マージ差分ビットマップ１５００の複製が、転送用差分ビットマップ２０５とされる。これにより、第一の実施形態よりも記憶容量（メモリ容量）の消費を少なくしつつ、対象スナップショットについての転送用差分ビットマップを高速に作成することができる。
【実施例３】
【０１２２】
次に、本発明の第三の実施形態について説明する。以下、第一の実施形態との相違点を主に説明し、第一の実施形態との共通点については、説明を省略または簡略する。
【０１２３】
図１９は、本実施形態におけるスナップショット管理プログラム１９００の構成の一例を示す。
【０１２４】
スナップショット管理プログラム１９００には、第一の実施形態のスナップショット作成モジュール３０３、スナップショット作成モジュール３０４及び差分ビットマップ作成モジュール３０５と機能が異なるスナップショット作成モジュール１９０１、スナップショット作成モジュール１９０２及び差分ビットマップ作成モジュール１９０３が備えられている。また、スナップショット管理プログラム１９００には、差分ビットマップマージモジュール１９０４及び管理インタフェースモジュール１９０５が備えられている。スナップショット管理プログラム１９００は、第一の実施形態で説明した差分ビットマップ管理テーブル７００に代えて、マージ差分ビットマップ管理テーブル２０００を管理する。マージ差分ビットマップ管理テーブル２０００は、メモリ１０２で管理される。
【０１２５】
差分ビットマップマージモジュール１９０４は、後述する管理インタフェースモジュール１９０５などを使用して、システム管理者がリモートコピーの対象とするスナップショットを選択した際に実行される。差分ビットマップマージモジュール１９０４は、リモートコピーの対象でないスナップショットに対応する差分ビットマップを、リモートコピーの対象となっているスナップショットに対応する差分ビットマップにマージする。これにより、記憶容量の消費（メモリ容量の消費）を節約することが可能である。
【０１２６】
管理インタフェースモジュール１９０５は、プライマリサーバ装置１００やクライアント１１２に接続された表示装置などに、システム管理者が操作を行うための画面（典型的にはＧＵＩ（Graphical User Interface））を表示する。
【０１２７】
図２０と図２１は、マージ差分ビットマップ管理テーブル２０００の一例である。図２０は、差分ビットマップマージモジュール１９０４が実行される前のマージ差分ビットマップ管理テーブル２０００を示し、図２１は、差分ビットマップマージモジュール１９０４が実行された後のマージ差分ビットマップ管理テーブル２０００を示している。
【０１２８】
マージ差分ビットマップ管理テーブル２０００は、差分ビットマップ管理テーブル７００とほぼ同じ構成であるが、各スナップショットの列が２つのシーケンス番号を保持している点が異なる。右のシーケンス番号は、そのスナップショット自身のシーケンス番号を表し、左のシーケンス番号は、マージされたスナップショットのうち最も古い世代のスナップショットのシーケンス番号を表している。
【０１２９】
以下では、システム管理者がリモートコピーの対象とするスナップショットを選択する際に実行される処理フローについて、図２０から図２３を用いて説明する。
【０１３０】
まず、管理インタフェースモジュール１９０５が実行されると、対象スナップショットを選択する画面が表示される。図２２は、その一例である。図２２のコピー対象スナップショット選択画面２２００は、スナップショットを選択するためのチェックボックス２２０１と、セカンダリサイトへコピーされていないスナップショット名の一覧である未コピースナップショット２２０２と、それらのスナップショットの作成日時２２０３の列、および、選択を決定するための決定ボタン２２０４と選択をキャンセルするためのキャンセルボタン２２０５を備える。なお、図２２に表示される情報のうち、例えば、セカンダリサイトへコピーされていないスナップショット名の一覧である未コピースナップショット２２０２と、それらのスナップショットの作成日時２２０３は、ＣＯＷ管理テーブル４００で管理されている。すなわち、図示していないが、ＣＯＷ管理テーブル４００には、スナップショット毎に、リモートコピーされたか否かを表す情報や、スナップショットの名称や、スナップショットの作成日時が、記録される。なお、これらの情報は、スナップショットのシーケンス番号をＩＤとして、別のテーブルで管理されてもよい。
【０１３１】
システム管理者が、任意のスナップショットにチェックをつけ、決定ボタン２２０４を押下すると、管理インタフェースモジュール１９０５は、選択されたスナップショット（対象スナップショット）のシーケンス番号を差分ビットマップマージモジュール１９０４に指定し、そのモジュール１９０４を実行させる。例えば、シーケンス番号が「２６」と「２８」のスナップショットが選択されたとする。選択されたシーケンス番号「２６」と「２８」は、差分ビットマップマージモジュール１９０４に指定される。指定されたシーケンス番号「２６」と「２８」は、シーケンス番号リスト（図示せず）に保持される。
【０１３２】
図２３は、差分ビットマップマージモジュール１９０４の動作を表す処理フローの一例である。
【０１３３】
まず、差分ビットマップマージモジュール１９０４は、シーケンス番号リストに記録されている一以上のシーケンス番号のうち、最も小さいシーケンス番号のスナップショットを選択する（Ｓ２３０１）。この選択されたスナップショットの差分ビットマップが、マージ先の差分ビットマップとなる。先の例では、その差分ビットマップに、シーケンス番号「２６」のスナップショットに対応する差分スナップショットが該当する。
【０１３４】
次に、差分ビットマップマージモジュール１９０４は、マージ対象の全てのスナップショットについて差分ビットマップが存在しているかを判定する（Ｓ２３０２）。ここでは、Ｓ２３０１で選択したスナップショットの差分ビットマップにマージされる差分ビットマップがすべて存在しているかが判定される。最初にＳ２３０２を実行する際は、リモートサイトへコピーされていないスナップショットのうち、最も古い世代のスナップショットからＳ２３０１で選択したスナップショットまでの各スナップショットに対応した差分ビットマップの有無が判定される。先の例では、未コピーのスナップショットのうち最も古い世代のスナップショットのシーケンス番号は「２５」であり、Ｓ２３０１で選択されたシーケンス番号は「２６」である。これら２つのシーケンス番号に対応したスナップショット間の各スナップショットについて差分ビットマップの有無が判定される。
【０１３５】
Ｓ２３０２の判定の結果が肯定的の場合（Ｓ２３０２：ＹＥＳ）、差分ビットマップマージモジュール１９０４は、スナップショット間の一以上の差分ビットマップのビット論理和をとり（Ｓ２３０３）、シーケンス番号を更新する（Ｓ２３０４）。先の例では、図２０の列２００３の内容が、図２１の列２００３’の内容に変更される。シーケンス番号「２５」のスナップショットの差分ビットマップからシーケンス番号「２６」のスナップショットの差分ビットマップまでの差分ビットマップが、シーケンス番号「２６」のスナップショットの差分ビットマップにマージされる。その結果（つまり、マージ後の、シーケンス番号「２６」のスナップショットの差分ビットマップ）が、列２００３´に保持されている。
【０１３６】
そして、Ｓ２３０４が終了した場合、或いは、Ｓ２３０２の判定の結果が否定的の場合（Ｓ２３０２でＮＯ）、差分ビットマップマージモジュール１９０４は、シーケンス番号リストが空かどうかを判定する（Ｓ２３０５）。
【０１３７】
シーケンス番号リストが空であった場合（Ｓ２３０５：ＹＥＳ）、差分ビットマップマージモジュール１９０４は、そのまま終了する。シーケンス番号リストが空でなかった場合（Ｓ２３０５：ＮＯ）、差分ビットマップマージモジュール１９０４は、再び、シーケンス番号リストに記録されている一以上のシーケンス番号のうち最も小さいシーケンス番号に対応するスナップショットを選択する（Ｓ２３０１）。
【０１３８】
先の例では、実行時のシーケンス番号として、「２６」と「２８」が指定されているため、シーケンス番号「２６」の処理が終わった後、シーケンス番号「２８」についても処理が行われる。２回目以降、Ｓ２３０２を実行する場合は、前回マージ先とされた差分ビットマップに対応する世代のスナップショットの直後の世代のスナップショットから、処理対象のシーケンス番号のスナップショットまでの各スナップショットについて、差分ビットマップの有無が判定される。先の例で言えば、シーケンス番号「２７」のスナップショットからシーケンス番号「２８」のスナップショットまでの各スナップショットについて差分ビットマップが有るか否かが判定され、有るとの判定の結果になれば、シーケンス番号「２８」のスナップショットの差分ビットマップに、シーケンス番号「２７」のスナップショットの差分ビットマップがマージされる。
【０１３９】
以上が、システム管理者がリモートコピーの対象とするスナップショットを選択する際に実行される処理フローについての説明である。
【０１４０】
次に、第一の実施形態と本実施形態におけるスナップショット作成モジュール１９０１、スナップショット削除モジュール１９０２、差分ビットマップ作成モジュール１９０３の処理の違いについて説明する。
【０１４１】
スナップショット作成モジュール１９０１は、図９におけるＳ９０２において、差分ビットマップ管理テーブル７００ではなく、マージ差分ビットマップ管理テーブル２０００に最新スナップショットシーケンス番号３０６を設定する。なお、この時点で差分ビットマップはマージされていないので、左右２箇所のシーケンス番号とも、最新スナップショットシーケンス番号３０６となる。
【０１４２】
スナップショット削除モジュール１９０３は、図１０におけるＳ１００３において、差分ビットマップ管理テーブル７００ではなく、マージ差分ビットマップ管理テーブル２０００に「-（なし）」を設定する。
【０１４３】
差分ビットマップ作成モジュール１９０４は、図１３におけるＳ１３０１において、差分ビットマップが存在しているかを判定する。マージ差分ビットマップ管理テーブル２０００では、マージされた差分ビットマップを管理しているため、差分ビットマップ作成モジュール１９０４は、各スナップショットが保持する２つのシーケンス番号を参照し、判定を行う。例えば、リモートサイトにコピー済みのスナップショットのシーケンス番号が「２４」、コピー対象のスナップショットのシーケンス番号が「２６」であったとすると、実行時には、差分ビットマップ作成モジュール１９０４に、シーケンス番号「２４」と「２６」が指定される。シーケンス番号「２４」と「２５」の間の差分ビットマップ（図２０の列２００２）は、図２１の列２００２’において「-（なし）」となっているが、シーケンス番号「２６」のスナップショットの差分ビットマップにマージされているため、ＣＯＷ管理テーブル４００を参照することなく、転送用差分ビットマップ２０５を作成することができる。具体的には、シーケンス番号「２６」のスナップショットの差分ビットマップの複製を、転送用差分ビットマップ２０５とすることができる。しかし、実行時に指定されたシーケンス番号が「２５」と「２７」であった場合には、シーケンス番号「２６」と「２７」の間の差分ビットマップ（図２０の列２００４）が、シーケンス番号「２８」のスナップショットの差分ビットマップにマージされているため（つまり存在しないため）、シーケンス番号「２６」と「２７」の間の差分ビットマップを作成するために、ＣＯＷ管理テーブル４００を参照する必要がある。
【実施例４】
【０１４４】
次に、本発明の第四の実施形態について説明する。以下、第一の実施形態との相違点を主に説明し、第一の実施形態との共通点については、説明を省略または簡略する。
【０１４５】
本実施形態は、ストレージ装置のＣＰＵで、リモートコピープログラム、スナップショット管理プログラム、ブロックＩ／Ｏプログラムが実行される（例えば、ストレージ装置が、ＮＡＳとしての機能を備える）。
【０１４６】
図２４は、本発明の第四の実施形態におけるストレージシステムの構成例を示す図である。
【０１４７】
本実施形態におけるストレージシステムは、プライマリサーバ装置２４００、プライマリストレージ装置２４１０、クライアント装置１１２、セカンダリサーバ装置２４２０及びセカンダリストレージ装置２４３０を備える。プライマリストレージ装置２４１０とセカンダリストレージ装置２４３０が、１つのネットワーク１０９を介して、プライマリサーバ装置２４００とセカンダリサーバ装置２４２０と接続されている。また、プライマリストレージ装置２４１０とセカンダリストレージ装置２４３０では、メモリ９１０２に、リモートコピープログラム２００、スナップショット管理プログラム３００及びブロックＩ／Ｏ管理プログラム１０５が記憶されており、ＣＰＵ９１０１で、それらのプログラム２００、３００及び１０５が実行される。また、ライマリストレージ装置２４１０とセカンダリストレージ装置２４３０には、ＣＰＵ９１０１とディスクドライブ１１１との間にインタフェース２４１１が設けられている。
【０１４８】
本実施形態の構成では、ストレージ装置２４１０及び２４３０のＣＰＵ９１０１が、リモートコピープログラム２００やスナップショット管理プログラム３００を実行し、ネットワーク１０９を介して、プライマリサイトのスナップショットをセカンダリサイトへリモートコピーする。ストレージ装置２４１０及び２４３０間のリモートコピーでは、ネットワーク１０８とは別の高速なネットワーク１０９を用いることができるため、高速なデータ転送が可能である。ここで、例えば、ネットワーク１０８は、IP（Internet Protocol）ネットワークであり、ネットワーク１０９は、例えばＦＣ（Fibre Channel）ネットワークである。
【０１４９】
以上、本発明の幾つかの実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【図面の簡単な説明】
【０１５０】
【図１】本発明の第一の実施形態におけるストレージシステムの構成の一例を示す図である。
【図２】第一の実施形態におけるリモートコピープログラムの構成の一例を示す図である。
【図３】第一の実施形態におけるスナップショット管理プログラムの構成の一例を示す図である。
【図４】第一の実施形態におけるＣＯＷ管理テーブルの一例を示す図である。
【図５】第一の実施形態における使用ブロックビットマップの一例を示す図である。
【図６】第一の実施形態におけるＣＯＷビットマップの一例を示す図である。
【図７】第一の実施形態における差分ビットマップ管理テーブルの一例を示す図である。
【図８】第一の実施形態における任意世代のスナップショット間の差分ビットマップの作成例を示す図である。
【図９】第一の実施形態におけるスナップショット作成モジュールの動作の一例を示すフローチャートである。
【図１０】第一の実施形態におけるスナップショット削除モジュールの動作の一例を示すフローチャートである。
【図１１】第一の実施形態における読み出し処理モジュールの動作の一例を示すフローチャートである。
【図１２】第一の実施形態における書き込み処理モジュールの動作の一例を示すフローチャートである。
【図１３】第一の実施形態における差分ビットマップ作成モジュールの動作の一例を示すフローチャートである。
【図１４】第二の実施形態におけるスナップショット管理プログラムの構成の一例を示す図である。
【図１５】第二の実施形態におけるマージ差分ビットマップの一例を示す図である。
【図１６】第二の実施形態におけるスナップショット作成モジュールの動作の一例を示すフローチャートである。
【図１７】第二の実施形態におけるスナップショット削除モジュールの動作の一例を示すフローチャートである。
【図１８】第二の実施形態における差分ビットマップ作成モジュールの動作の一例を示すフローチャートである。
【図１９】第三の実施形態におけるスナップショット管理プログラムの構成の一例を示す図である。
【図２０】第三の実施形態におけるマージ前のマージ差分ビットマップ管理テーブルの一例を示す図である。
【図２１】第三の実施形態におけるマージ後のマージ差分ビットマップ管理テーブルの一例を示す図である。
【図２２】第三の実施形態におけるコピー対象スナップショット選択画面の一例を示す図である。
【図２３】第三の実施形態における差分ビットマップ作成モジュールの動作の一例を示すフローチャートである。
【図２４】第四の実施形態におけるストレージシステムの構成の一例を示す図である。
【符号の説明】
【０１５１】
１００…プライマリサーバ装置  １１０…プライマリストレージ装置  １１２…クライアント装置  １２０…セカンダリサーバ装置  １３０…セカンダリストレージ装置  ２００…リモートコピープログラム  ２０１…差分取得モジュール  ２０２…データ転送モジュール  ２０５…転送用差分ビットマップ  ３００…スナップショット管理プログラム  ３０１…読み出し処理モジュール  ３０２…書き込み処理モジュール  ３０３…スナップショット作成モジュール  ３０４…スナップショット削除モジュール  ３０５…差分ビットマップ作成モジュール  ４００…ＣＯＷ管理テーブル  ５００…使用ブロックビットマップ  ６００…ＣＯＷビットマップ  ７００…差分ビットマップ管理テーブル  １４０４…マージ基点スナップショットシーケンス番号  １５００…マージ差分ビットマップ  ２０００…マージ差分ビットマップ管理テーブル
【図１】
2010026939.tif 000003
【図２】
2010026939.tif 000004
【図３】
2010026939.tif 000005
【図４】
2010026939.tif 000006
【図５】
2010026939.tif 000007
【図６】
2010026939.tif 000008
【図７】
2010026939.tif 000009
【図８】
2010026939.tif 000010
【図９】
2010026939.tif 000011
【図１０】
2010026939.tif 000012
【図１１】
2010026939.tif 000013
【図１２】
2010026939.tif 000014
【図１３】
2010026939.tif 000015
【図１４】
2010026939.tif 000016
【図１５】
2010026939.tif 000017
【図１６】
2010026939.tif 000018
【図１７】
2010026939.tif 000019
【図１８】
2010026939.tif 000020
【図１９】
2010026939.tif 000021
【図２０】
2010026939.tif 000022
【図２１】
2010026939.tif 000023
【図２２】
2010026939.tif 000024
【図２３】
2010026939.tif 000025
【図２４】
2010026939.tif 000026