(57)【特許請求の範囲】
【請求項１】
マスタデータを格納するマスタ記憶手段と、
前記マスタデータとの差分データの最新のものを格納するクローン記憶手段と、
前記クローン記憶手段のバックアップ取得時のデータであるスナップショットデータを格納するスナップショット記憶手段と、
バックアップ取得後に前記クローン記憶手段の更新要求を受けると、前記クローン記憶手段に差分データが有るか否かを判定し、ａ）有れば当該差分データを前記スナップショット記憶手段に保存し、ｂ）無ければ前記スナップショット記憶手段にスナップショットデータ取得を行わない制御手段と、を備えるバックアップ制御装置。
【請求項２】
前記制御手段は、前記クローン記憶手段の１世代前の世代のデータの読み込み要求を受けると、当該１世代前の世代のスナップショットデータが、ａ）前記スナップショット記憶手段に保存されていれば当該スナップショットデータを、ｂ）前記スナップショット記憶手段に保存されていなければ前記マスタデータを、読み込む請求項１のバックアップ制御装置。
【請求項３】
前記制御手段は、前記クローン記憶手段の１世代前の世代のデータの復元要求を受けると、当該１世代前の世代のスナップショットデータが、ａ）前記スナップショット記憶手段に保存されていれば当該スナップショットデータを読み込んで前記クローン記憶手段に復元し、ｂ）保存されていなければ前記クローン記憶手段を差分データが無い状態に復元する、請求項１乃至２の何れか１項のバックアップ制御装置。
【請求項４】
複数世代の各々について前記スナップショット記憶手段を備え、
前記制御手段は、指定された世代の前記スナップショット記憶手段の削除要求を受けて、当該指定された世代の１世代前の世代のスナップショットデータが、ａ）前記指定された世代に対応する前記スナップショット記憶手段に保存されていれば、当該指定された世代のスナップショットデータを当該指定された世代の１世代前の世代に対応する前記スナップショット記憶手段に書き込み、ｂ）保存されていなければ、前記指定された世代の１世代前の世代に対応する前記スナップショット記憶手段にスナップショットデータが保存されていないことを記録する、請求項１乃至３の何れか１項のバックアップ制御装置。
【請求項５】
プール記憶手段を備え、
前記クローン記憶手段、及び、前記スナップショット記憶手段は、格納されているデータの容量分の記憶域が前記プール記憶手段上から確保される仮想記憶装置である、請求項１乃至４の何れか１項のバックアップ制御装置。
【請求項６】
マスタデータを記憶し、
前記マスタデータとの差分データの最新のものを格納するクローン記憶手段のバックアップ取得後に、前記クローン記憶手段の更新要求を受けると、前記クローン記憶手段に差分データが有るか否かを判定し、ａ）有れば当該差分データをバックアップ取得時のデータであるスナップショットデータとしてスナップショット記憶手段に保存し、ｂ）無ければ前記スナップショット記憶手段にスナップショットデータ取得を行わない、バックアップ制御方法。
【請求項７】
前記クローン記憶手段の１世代前の世代のデータの読み込み要求を受けると、当該１世代前の世代のスナップショットデータが、ａ）前記スナップショット記憶手段に保存されていれば当該スナップショットデータを、ｂ）前記スナップショット記憶手段に保存されていなければ前記マスタデータを、読み込む請求項６のバックアップ制御方法。
【請求項８】
前記クローン記憶手段の１世代前の世代のデータの復元要求を受けると、当該１世代前の世代のスナップショットデータが、ａ）前記スナップショット記憶手段に保存されていれば当該スナップショットデータを読み込んで前記クローン記憶手段に復元し、ｂ）保存されていなければ前記クローン記憶手段を差分データが無い状態に復元する、請求項６乃至７の何れか１項のバックアップ制御方法。
【請求項９】
前記スナップショット記憶手段を複数世代の各々について用意し、
指定された世代の前記スナップショット記憶手段の削除要求を受けて、当該指定された世代の１世代前の世代のスナップショットデータが、ａ）前記指定された世代に対応する前記スナップショット記憶手段に保存されていれば、当該指定された世代のスナップショットデータを前記指定された世代の１世代前の世代に対応する前記スナップショット記憶手段に書き込み、ｂ）保存されていなければ、前記指定された世代の１世代前の世代に対応する前記スナップショット記憶手段にスナップショットデータが保存されていないことを記録する、請求項６乃至８の何れか１項のバックアップ制御方法。
【請求項１０】
コンピュータに、請求項６乃至９の何れか１項のバックアップ制御方法を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バックアップ制御装置、バックアップ制御方法、及び、プログラム、特に、マスタボリュームに対する差分データを格納した差分ボリュームのバックアップを対象とした制御に関する。
【背景技術】
【０００２】
運用ボリュームに対する複数世代のバックアップを実現する手法として、コピー・オン・ライト方式によるスナップショット取得技術が存在する（特許文献１）。この技術を用いたシステムは、バックアップを取得した時点ではデータのコピーを実施しないで、運用ボリュームへの書き込みが有った時点で当該書き込み箇所を差分データとしてバックアップする。すなわち、バックアップされるデータは、運用ボリュームとの差分が発生した時点でスナップショットファイルに取得される。
【０００３】
このシステムは、バックアップした旧世代を読み込むときは、運用ボリューム、もしくは最後に当該読み込み箇所に対する書き込みがあった世代のバックアップデータを参照する。
【０００４】
これにより、この技術は、バックアップ用の記憶領域を削減できる。この技術を用いたシステムは、一般に、各世代における差分の有無を判定するための差分管理テーブルを持つ。
【０００５】
また、複数のボリューム間で共通するデータをマスタボリューム上に持ち、マスタボリュームに対する各ボリュームの差分データのみを各ボリューム対応に持つシステムが存在する（特許文献２）。差分データを格納したボリュームは、クローンボリュームと呼ばれる。このシステムは、差分管理テーブルを用いて、マスタボリュームとクローンボリュームとの差分の有無を判定する。このシステムは、マスタボリュームのイメージを維持するためにマスタボリュームへの書き込みは行わず、書き込みデータはクローンボリュームに保持する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−１９２１３３号公報
【特許文献２】特表２０１４−５１７３６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述のクローンボリュームに対するバックアップの為に、スナップショットを取得する要求がある。この要求にこたえるためには、特許文献１の技術と特許文献２の技術の組み合わせが必要になる。ただし、単純な組み合わせでは、クローンボリュームに差分データが存在しない場合、システムは、差分クローンボリュームの前世代のデータを保持するために、マスタボリュームからデータを読み込んでスナップショットとして保存することになる。マスタボリュームのデータが変わらないことを考慮すると、この処理は無駄である。
【０００８】
本発明は、上述の無駄を無くすための、バックアップ制御装置、バックアップ制御方法、及び、プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の実施の形態のバックアップ制御装置は、マスタデータを格納するマスタ記憶手段と、前記マスタデータとの差分データの最新のものを格納するクローン記憶手段と、前記クローン記憶手段のバックアップ取得時のデータであるスナップショットデータを格納するスナップショット記憶手段と、バックアップ取得後に前記クローン記憶手段の更新要求を受けると、前記クローン記憶手段に差分データが有るか否かを判定し、ａ）有れば当該差分データを前記スナップショット記憶手段に保存し、ｂ）無ければ前記スナップショット記憶手段にスナップショットデータ取得を行わない制御手段と、を備える。
【００１０】
本発明の実施の形態のバックアップ制御方法は、マスタデータを記憶し、前記マスタデータとの差分データの最新のものを格納するクローン記憶手段のバックアップ取得後に、前記クローン記憶手段の更新要求を受けると、前記クローン記憶手段に差分データが有るか否かを判定し、ａ）有れば当該差分データをバックアップ取得時のデータであるスナップショットデータとしてスナップショット記憶手段に保存し、ｂ）無ければ前記スナップショット記憶手段にスナップショットデータ取得を行わない。
【発明の効果】
【００１１】
本発明にかかるバックアップ制御装置は、クローンボリュームのバックアップの為に、効率よくスナップショットを取得できる。
【図面の簡単な説明】
【００１２】
【図１】図１は、第１の実施の形態にかかるバックアップ制御装置１０の構成を示す図である。
【図２】図２は、クローン差分表１７の構成例を示す。
【図３】図３は、スナップショット取得先表１８の構成例を示す。
【図４】図４は、スナップショット差分表１９の構成例を示す。
【図５】図５は、クローン制御部１５によるクローン取得コマンドの処理フローチャートである。
【図６】図６は、クローン制御部１５による書き込みコマンド処理のフローチャートである。
【図７】図７は、クローン制御部１５による読み込みコマンド処理のフローチャートである。
【図８】図８は、クローン制御部１５によるクローン削除コマンド処理のフローチャートである。
【図９】図９は、スナップショット制御部１６によるスナップショット取得コマンド処理のフローチャートである。
【図１０】図１０は、スナップショット制御部１６によるスナップショット読み込みコマンド処理のフローチャートである。
【図１１Ａ】図１１Ａは、スナップショット制御部１６によるスナップショット復元コマンド処理のフローチャート（その１）である。
【図１１Ｂ】図１１Ｂは、スナップショット制御部１６によるスナップショット復元コマンド処理のフローチャート（その２）である。
【図１２】図１２は、スナップショット制御部１６によるスナップショット削除コマンド処理のフローチャート（その１）である。
【図１３】図１３は、スナップショット制御部１６によるスナップショット削除コマンド処理のフローチャート（その２）である。
【図１４】図１４は、第２の実施の形態にかかるバックアップ制御装置１０の構成を示す図である。
【図１５】図１５は、第３の実施の形態にかかるバックアップ制御装置１０の構成を示す図である。
【発明を実施するための形態】
【００１３】
＜第１の実施の形態＞
＜構成＞
図１は、本発明の第１の実施の形態にかかるバックアップ制御装置１０の構成を示す図である。バックアップ制御装置１０は、ホストコンピュータ２０とインタフェース３０を介して接続されている。バックアップ制御装置１０は、ホストコンピュータ２０からは、例えば、ディスクアレイ装置に見える。
【００１４】
また、バックアップ制御装置１０は、転送制御部１１と、マスタ記憶部１２と、クローン記憶部１３と、スナップショット記憶部１４と、クローン制御部１５と、スナップショット制御部１６とを備えている。クローン制御部１５、及び、スナップショット制御部１６は、分離されず、まとめて制御部１Ａとして実装されていても良い。
【００１５】
さらに、バックアップ制御装置１０は、その図示されないメモリに、クローン差分表１７と、スナップショット取得先表１８と、スナップショット差分表１９と、を記憶している。
【００１６】
インタフェース３０は、転送制御部１１に接続されており、転送制御部１１と、クローン制御部１５と、スナップショット制御部１６は互いに接続されている。さらに、クローン制御部１５と、スナップショット制御部１６と、マスタ記憶部１２と、クローン記憶部１３と、スナップショット記憶部１４は互いに接続されている。
【００１７】
マスタ記憶部１２、クローン記憶部１３、及び、スナップショット記憶部１４は、固定長のセクタ単位でバイトデータ列を記録する記憶装置である。これらの記憶装置は、例えば、ディスク装置、半導体記憶装置である。なお、マスタ記憶部１２、クローン記憶部１３、及び、スナップショット記憶部１４は、それぞれ、単に、マスタ、クローン、スナップショットと呼ばれることが有る。
【００１８】
マスタ記憶部１２は、バックアップ制御装置１０の運転中、書き込みが禁止されている。マスタ記憶部１２に格納されているデータ（以降、マスタデータ）に変更要求が有るとき、クローン制御部１５は、変更内容をクローン記憶部１３に書き込む。書き込まれたデータは、差分データと呼ばれる。最新のデータの読み込み要求を受けた時、クローン制御部１５は、読み込み対象セクタに差分データが存在すればそのデータを、存在しなければマスタデータを読み込む。
【００１９】
スナップショット制御部１６は、例えば一定期間ごとに、クローン記憶部１３に格納された差分データのバックアップを取得する。スナップショット制御部１６は、コピー・オン・ライト方式でバックアップを取得する。すなわち、スナップショット制御部１６は、バックアップを取得した時点ではデータコピーを実施せず、クローン記憶部１３への書き込みが有った時点で書き込み箇所の更新前データ（以降、スナップショットデータ）をスナップショット記憶部１４に保存する。バックアップしたクローン記憶部１３のデータ復旧を要求されたとき、スナップショット制御部１６は、スナップショットデータを用いて復旧を行う。本実施の形態のバックアップ制御装置１０は、この復旧に、マスタデータを用いることが有る。
【００２０】
スナップショット記憶部１４は、クローン記憶部１３のバックアップの世代対応に存在する。図１において、スナップショット記憶部１４は、Ｘ個（Ｘは、自然数）存在する。すなわち、図１は、クローン記憶部１３のバックアップがＸ世代存在している例を示す。
【００２１】
転送制御部１１は、ホストコンピュータ２０から、一群のコマンドを受信して、コマンドをクローン制御部１５に送信し、完了を待つ。当該コマンド群は、例えば、クローン取得コマンド、書き込みコマンド、読み込みコマンド、及び、クローン削除コマンドを含む。また、転送制御部１１は、送信したコマンドの完了後、コマンドの実行結果とバイトデータ列をクローン制御部１５から受信し、ホストコンピュータ２０に転送する。
【００２２】
また、転送制御部１１は、ホストコンピュータ２０から、別の一群のコマンドを受信して、コマンドをスナップショット制御部１６に送信し、完了を待つ。当該コマンド群は、例えば、スナップショット取得コマンド、スナップショット読み込みコマンド、スナップショット復元コマンド、及び、スナップショット削除コマンドを含む。また、転送制御部１１は、送信したコマンドの完了後、コマンドの実行結果とバイトデータ列をスナップショット制御部１６から受信し、ホストコンピュータ２０に転送する。
【００２３】
書き込みコマンドは、セクタ番号とバイトデータ列を含み、読み込みコマンドは、セクタ番号を含む。スナップショット読み込みコマンドは、世代番号とセクタ番号を含む。スナップショット復元コマンドとスナップショット削除コマンドは、いずれも世代番号を含む。ここで、世代番号は、最初の世代を１として、世代が新しくなるにつれて、１ずつ増加する番号である。
【００２４】
書き込みコマンドを受信すると、クローン記憶部１３は、指定されたセクタ番号のセクタに対して指定されたバイトデータ列を記憶し、実行結果をコマンド送信元に送信する。読み込みコマンドを受信したとき、クローン記憶部１３は、指定されたセクタ番号のセクタに記憶しているバイトデータ列をコマンド送信元に送信する。
【００２５】
ここで、転送制御部１１、クローン制御部１５、及び、スナップショット制御部１６は、論理回路で構成される。転送制御部１１、クローン制御部１５、及び、スナップショット制御部１６は、コンピュータでもあるバックアップ制御装置１０の図示されないプロセッサによって実行されるプログラムによって実現されても良い。
【００２６】
クローン制御部１５、及び、スナップショット制御部１６が、まとめて、制御部１Ａとして実装されているとき、制御部１Ａは論理回路で構成される。あるいは、制御部１Ａは、バックアップ制御装置１０の図示されないプロセッサによって実行されるプログラムによって実現されても良い。
【００２７】
図２は、クローン差分表１７の構成例を示す。クローン差分表１７は、クローン上の全てのセクタに関して、クローン取得以降に発生したクローンに対する書き込みにより、クローンにおいてマスタに対する差分が発生したか否かを１ビットで表す。クローン差分表１７の各ビットは、例えば、差分がある場合には１を、差分がない（差分が消滅した）場合には０を格納する。
【００２８】
図３は、スナップショット取得先表１８の構成例を示す。スナップショット取得先表１８は、スナップショットの世代ごとにエントリ（図３の点線で囲まれた部分）を持つ。スナップショット取得先表１８の各エントリは、対応する世代の全てのセクタに関して、スナップショットデータとマスタデータとの一致状況を１ビットで表す。スナップショット取得先表１８の各ビットは、例えば、一致していない場合には１を、一致している場合には０を格納する。
【００２９】
なお、一致している場合、スナップショット制御部１６は、マスタデータを、スナップショットデータとして使用することが出来る。すなわち、一致していない場合、スナップショット制御部１６は、スナップショットデータをスナップショット記憶部１４から取得するが、一致している場合、スナップショットデータをマスタ記憶部１２から取得することが出来る。
【００３０】
スナップショット取得先表１８のビット状態０は、以下の何れの状態も表現している。
ａ）スナップショットデータとマスタデータは一致している。
ｂ）スナップショットデータはマスタから取得可能である。
ｃ）スナップショットデータは、スナップショット記憶部１４に保存されていない。
【００３１】
図４は、スナップショット差分表１９の構成例を示す。スナップショット差分表１９は、スナップショットの世代ごとにエントリ（図４の点線で囲まれた部分）を持つ。各エントリは、対応する世代の全セクタに関して、当該世代のバックアップ取得以降のクローンへの書き込みにより、当該世代において、バックアップ取得時点のデータとクローンの最新データとの間に差分が発生したか否かを１ビットで表す。すなわち、各ビットは、その世代のスナップショットデータとクローンの最新データとの間に差分が発生したか否かを表す。スナップショット差分表１９の各ビットは、例えば、差分がある場合には１を、差分がない場合には０を格納する。
【００３２】
＜動作＞
図５乃至図８は、クローン制御部１５の動作フローチャートである。図９乃至図１３は、スナップショット制御部１６の動作フローチャートである。
【００３３】
図５は、クローン制御部１５によるクローン取得コマンドの処理フローチャートである。クローン制御部１５は、クローン記憶部１３を追加し（Ｓ１１）、クローン差分表１７の全てのビットを０とすることにより、クローンにおいて全てのセクタの差分が無いことを記録する（Ｓ１２）。最後に、クローン制御部１５は、実行結果をコマンド送信元に送信する（Ｓ１３）。
【００３４】
図６は、クローン制御部１５による書き込みコマンド処理のフローチャートである。クローン制御部１５は、書き込みコマンドに含まれるセクタ番号のセクタに関して、以下の処理を実行する。
【００３５】
まず、クローン制御部１５は、スナップショットが取得済みか否かを判定する（Ｓ２１）。取得済みであれば（Ｓ２１のＹ）、クローン制御部１５は、スナップショット差分表１９の中で、最新世代のスナップショットに対応するエントリのビットにより、最新世代のスナップショットにおける差分の有無を判定する（Ｓ２２）。
【００３６】
差分が存在しなければ（Ｓ２２でＮ）、クローン制御部１５は、スナップショット取得先表１８の中で、最新世代のスナップショットに対応するエントリのビットにより、最新世代のスナップショットにおけるマスタとのデータ一致状況を判定する（Ｓ２３）。
【００３７】
一致していなければ（Ｓ２３でＮ）、クローン制御部１５は、クローン差分表１７のビットにより、クローンにおける差分の有無を判定する（Ｓ２４）。
【００３８】
クローンに差分が存在しなければ（Ｓ２４でＮ）、クローン制御部１５は、スナップショット取得先表１８の中で、最新世代のスナップショットに対応するエントリのビットを０とする。すなわち、クローン制御部１５は、最新世代のスナップショットデータはマスタと一致することを記録する（Ｓ２５）。
【００３９】
一方、クローンに差分が存在すれば（Ｓ２４でＹ）、クローン制御部１５は、クローン記憶部１３からバイトデータ列を読み込んで（Ｓ２６）、それを最新世代のスナップショットに対応するスナップショット記憶部１４に書き込む（Ｓ２７）。
【００４０】
最新世代のスナップショットにおける差分が存在する場合（Ｓ２２でＹ）、Ｓ２５の処理後、または、Ｓ２７の処理後、クローン制御部１５は、スナップショット差分表１９の中で、最新世代のスナップショットに対応するエントリのビットを１とする。すなわち、クローン制御部１５は、最新世代のスナップショットにおいて差分が発生したことを記録する（Ｓ２８）。
【００４１】
また、スナップショットの取得が無い場合（Ｓ２１でＮ）、または、Ｓ２８の処理後、クローン制御部１５は、クローン記憶部１３にバイトデータ列を書き込み（Ｓ２９）、クローン差分表１７のビットを１とする（Ｓ２１０）。これにより、クローン制御部１５は、クローンにおいて差分が発生したことをクローン差分表１７に記録する。最後に、クローン制御部１５は、実行結果をコマンド送信元に送信する（Ｓ２１１）。
【００４２】
図７は、クローン制御部１５による読み込みコマンド処理のフローチャートである。クローン制御部１５は、読み込みコマンドに含まれるセクタ番号のセクタに関して、以下の処理を実行する。
【００４３】
まず、クローン制御部１５は、クローン差分表１７のビットにより、クローンにおける差分の有無を判定する（Ｓ３１）。クローンに差分が存在しなければ（Ｓ３１でＮ）、クローン制御部１５は、マスタ記憶部１２からバイトデータ列を読み込む（Ｓ３２）。
【００４４】
一方、クローンに差分が存在すれば（Ｓ３１でＹ）、クローン制御部１５は、クローン記憶部１３からバイトデータ列を読み込む（Ｓ３３）。
【００４５】
Ｓ３２またはＳ３３の後、クローン制御部１５は、実行結果と読み込んだバイトデータ列をコマンド送信元に送信する（Ｓ３４）。
【００４６】
図８は、クローン制御部１５によるクローン削除コマンド処理のフローチャートである。クローン制御部１５は、クローン記憶部１３を削除し（Ｓ４１）、実行結果をコマンド送信元に送信する（Ｓ４２）。
【００４７】
図９は、スナップショット制御部１６によるスナップショット取得コマンド処理のフローチャートである。
【００４８】
スナップショット制御部１６は、まず、これから取得する世代のスナップショットに対応するスナップショット記憶部１４を追加する（Ｓ５１）。次に、スナップショット制御部１６は、スナップショット取得先表１８に、これから取得する世代のスナップショットに対応するエントリを追加する（Ｓ５２）。そして、スナップショット制御部１６は、クローン差分表１７の全てのビットをスナップショット取得先表１８に追加したエントリの対応するビットに書き写す（Ｓ５３）。
【００４９】
さらに、スナップショット制御部１６は、スナップショット差分表１９に対してこれから取得する世代のスナップショットに対応するエントリを追加し（Ｓ５４）、スナップショット差分表１９に追加したエントリの全てのビットを０（差分なし）とする（Ｓ５５）。最後に、スナップショット制御部１６は、実行結果をコマンド送信元に送信する（Ｓ５６）。
【００５０】
図１０は、スナップショット制御部１６によるスナップショット読み込みコマンド処理のフローチャートである。スナップショット制御部１６は、スナップショット読み込みコマンドに含まれるセクタ番号のセクタに関して、以下の処理を実行する。
【００５１】
スナップショット制御部１６は、スナップショット差分表１９の中で、対象世代のスナップショットと、それより新しい世代のスナップショットに対応するエントリのビットにより、差分がある世代を、対象世代を含めて古い順に検索する（Ｓ６１乃至Ｓ６４）。ここで、対象世代は、スナップショット読み込みコマンドに含まれる世代番号の世代のことである。
【００５２】
検索した世代のスナップショットに差分が存在しなければ（Ｓ６３でＹ）、スナップショット制御部１６は、クローン制御部１５に依頼してクローンからバイトデータ列を読み込む（Ｓ６５）。
【００５３】
検索の結果、少なくとも一つ世代のスナップショットに差分が存在すれば（Ｓ６２でＹ）、スナップショット制御部１６は、差分が存在する世代におけるスナップショットデータとマスタとのデータ一致状況を判定する（Ｓ６６）。この判定は、スナップショット取得先表１８の中で、差分が存在する世代のスナップショットに対応するエントリのビットを検査して行われる。
【００５４】
一致していれば（Ｓ６６でＹ）、スナップショット制御部１６は、マスタ記憶部１２からバイトデータ列を読み込む（Ｓ６７）。一致していなければ（Ｓ６６でＮ）、スナップショット制御部１６は、差分が存在する世代のスナップショット記憶部１４からバイトデータ列を読み込む（Ｓ６８）。
【００５５】
Ｓ６５、Ｓ６７、または、Ｓ６８の処理後、スナップショット制御部１６は、実行結果と読み込んだバイトデータ列をコマンド送信元に送信する（Ｓ６９）。
【００５６】
図１１Ａ及び図１１Ｂは、スナップショット制御部１６によるスナップショット復元コマンド処理のフローチャートである。スナップショット制御部１６は、対象世代のスナップショットに含まれる全てのセクタに関して以下の処理を実行し、実行完了後、実行結果をコマンド送信元に送信する。ここで、対象世代は、スナップショット復元コマンドに含まれる世代番号の世代のことである。
【００５７】
スナップショット制御部１６は、スナップショット差分表１９の中で、対象世代のスナップショットと、それより新しい世代のスナップショットに対応するエントリのビットにより、差分がある世代を、対象世代を含めて古い順に検索する（Ｓ７１乃至Ｓ７４）。
【００５８】
検索の結果、少なくとも一つの世代のスナップショットに差分が存在すれば（Ｓ７２でＹ）、スナップショット制御部１６は、差分が存在する世代におけるスナップショットデータとマスタの一致状況を判定する（Ｓ７５）。この判定は、スナップショット取得先表１８の中で、差分が存在する世代のスナップショットに対応するエントリのビットを検査して行われる。
【００５９】
一致すれば（Ｓ７５でＹ）、スナップショット制御部１６は、スナップショット差分表１９の中で、最新世代のスナップショットに対応するエントリのビットにより、最新世代のスナップショットにおける差分の有無を判定する（Ｓ７６）。
【００６０】
差分が存在しなければ（Ｓ７６でＮ）、スナップショット制御部１６は、スナップショット取得先表１８内の、最新世代のスナップショットに対応するエントリのビットにより、最新世代におけるスナップショットデータとマスタとの一致状況を判定する（Ｓ７７）。
【００６１】
一致していなければ（Ｓ７７でＮ）、スナップショット制御部１６は、クローン差分表１７のビットにより、クローンにおける差分の有無を判定する（Ｓ７８）。
【００６２】
クローンに差分が存在しなければ（Ｓ７８でＮ）、スナップショット制御部１６は、スナップショット取得先表１８内の、最新世代のスナップショットに対応するエントリのビットを０とする（Ｓ７９）。これにより、スナップショット制御部１６は、最新世代におけるスナップショットデータはマスタと一致することをスナップショット取得先表１８に記録する。
【００６３】
一方、クローンに差分が存在すれば（Ｓ７８でＹ）、スナップショット制御部１６は、クローン制御部１５に依頼してクローンからバイトデータ列を読み込む（Ｓ７１０）。その後、スナップショット制御部１６は、読み込んだバイトデータ列を、最新世代のスナップショット記憶部１４に書き込む（Ｓ７１１）。
【００６４】
最新世代のスナップショットデータとマスタとが一致する場合（Ｓ７７でＹ）、スナップショット制御部１６は、スナップショット差分表１９内の、最新世代のスナップショットに対応するエントリのビットを１とする（Ｓ７１２）。これにより、スナップショット制御部１６は、最新世代のスナップショットにおいて差分が発生したことをスナップショット差分表１９記録する。スナップショット制御部１６は、Ｓ７９の処理後、または、Ｓ７１１の処理後も、同じ処理を行う。
【００６５】
また、最新世代のスナップショットにおける差分が有る場合（Ｓ７６でＹ）、または、Ｓ７１２の処理後、スナップショット制御部１６は、クローン差分表１７のビットを０とすることにより、クローンの差分が消滅したことを記録する（Ｓ７１３）。すなわちこの場合、対象セクタは、クローン記憶部１３に差分データが無い状態に復元される。
【００６６】
一方、差分が存在する世代のスナップショットデータとマスタが一致していなければ（Ｓ７５でＮ）、スナップショット制御部１６は、差分が存在する世代のスナップショット記憶部１４からバイトデータ列を読み込む（Ｓ７１４）。スナップショット制御部１６は、その読み込んだバイトデータ列を、クローン制御部１５に依頼してクローンに書き込む（Ｓ７１５）。すなわちこの場合、対象セクタは、スナップショット記憶部１４に格納されていたスナップショットデータで復元される。
【００６７】
さらに、スナップショット制御部１６は、差分のある世代が存在しない場合（Ｓ７３でＹ）、Ｓ７１３の処理後、または、Ｓ７１５の処理後、処理を次のセクタに進める（Ｓ７１６）。
【００６８】
図１２及び図１３は、スナップショット制御部１６によるスナップショット削除コマンド処理のフローチャートである。
【００６９】
本コマンド処理において、スナップショット制御部１６は、まず、対象世代のスナップショットよりも一世代前の世代のスナップショットの有無を判定する。ここで、対象世代は、スナップショット削除コマンドに含まれる世代番号の世代のことである。
【００７０】
一世代前の世代のスナップショットが存在しなければ、スナップショット制御部１６は、図１２の処理を以下のとおり実行する。
【００７１】
スナップショット制御部１６は、対象世代のスナップショット記憶部１４を削除する（Ｓ８１）。次いで、スナップショット制御部１６は、スナップショット取得先表１８から対象世代のスナップショットに対応するエントリを削除し（Ｓ８２）、スナップショット差分表１９からも対象世代のスナップショットに対応するエントリを削除する（Ｓ８３）。最後に、スナップショット制御部１６は、実行結果をコマンド送信元に送信する（Ｓ８４）。
【００７２】
一方、一世代前の世代のスナップショットが存在すれば、スナップショット制御部１６は、対象世代のスナップショットに含まれる全てのセクタに関して、図１３の処理を実行し、実行完了後に図１２の処理を実行する。
【００７３】
図１３の処理は、以下のとおりである。
【００７４】
まず、スナップショット制御部１６は、スナップショット差分表１９の中で、対象世代の一世代前の世代のスナップショットに対応するエントリのビットにより、一世代前の世代のスナップショットにおける差分の有無を判定する（Ｓ８５）。
【００７５】
一世代前の世代のスナップショットに差分が存在しなければ（Ｓ８５でＮ）、スナップショット制御部１６は、対象世代のスナップショットにおける差分の有無を判定する（Ｓ８６）。この判定は、スナップショット差分表１９の中で、対象世代のスナップショットに対応するエントリのビットを検査することで行われる。
【００７６】
対象世代のスナップショットに差分が存在すれば（Ｓ８６でＹ）、スナップショット制御部１６は、一世代前の世代のスナップショットデータとマスタとの一致状況を判定する（Ｓ８７）。この判定は、スナップショット取得先表１８内の、一世代前の世代のスナップショットに対応するエントリのビットを検査することで行われる。
【００７７】
一世代前のスナップショットデータとマスタが一致していなければ（Ｓ８７でＮ）、スナップショット制御部１６は、対象世代におけるスナップショットデータとマスタとの一致状況を判定する（Ｓ８８）。この判定は、スナップショット取得先表１８内の、対象世代のスナップショットに対応するエントリのビットを検査することにより行われる。
【００７８】
対象世代におけるスナップショットデータとマスタとが一致していれば（Ｓ８８でＹ）、スナップショット制御部１６は、スナップショット取得先表１８の中で、一世代前の世代のスナップショットに対応するエントリのビットを０とする。このことにより、スナップショット制御部１６は、一世代前の世代のスナップショットデータはマスタと一致することを記録する（Ｓ８９）。
【００７９】
一方、対象世代におけるスナップショットデータとマスタとが一致していなければ（Ｓ８８でＮ）、スナップショット制御部１６は、対象世代のスナップショット記憶部１４からバイトデータ列を読み込む（Ｓ８１０）。そして、スナップショット制御部１６は読み込んだバイトデータ列を、一世代前の世代のスナップショット記憶部１４に書き込む（Ｓ８１１）。
【００８０】
一世代前の世代のスナップショットデータとマスタとが一致している場合（Ｓ８７でＹ）、Ｓ８９の処理後、または、Ｓ８１１の処理後、スナップショット制御部１６は、以下の処理を行う。すなわち、スナップショット制御部１６は、スナップショット差分表１９の中で、一世代前の世代のスナップショットに対応するエントリのビットを１とすることにより、一世代前の世代のスナップショットにおいて差分が発生したことを記録する（Ｓ８１２）。
【００８１】
また、一世代前の世代のスナップショットに差分が存在する場合（Ｓ８５でＹ）、対象世代のスナップショットに差分が存在しない場合（Ｓ８６でＹ）、または、Ｓ８１２の処理後、スナップショット制御部１６は、処理を次のセクタに進める（Ｓ８１３）。
【００８２】
＜変形例＞
なお、本実施の形態では、バックアップ制御装置１０とホストコンピュータ２０が送受信するコマンドは、たとえば、ＳＣＳＩ（Small Computer System Interface）規格のコマンドである。但し、上述した情報の送受信が可能であれば、使用する入出力インタフェース規格はこれに限定されない。
【００８３】
また、マスタ記憶部１２、クローン記憶部１３、及びスナップショット記憶部１４は、セクタもしくはそれに類する固定長のデータ記憶単位での読み込み及び書き込みの指示可能な記憶装置であればよい。具体的な構成は問わない。
【００８４】
本実施の形態において、クローン記憶部１３、及び、スナップショット記憶部１４は、ディスクアレイに対して任意に追加及び削除が可能である。但し、クローン記憶部１３、または、スナップショット記憶部１４は、取得時にそれらの全てのセクタを記憶可能な十分な容量を持つ記憶部を、十分な数だけ使用可能であれば、追加削除が可能でなくても良い。クローン記憶部１３、及び、スナップショット記憶部１４は、たとえば、事前に全ての記憶容量を持つ記憶装置で構成されても良い。
【００８５】
＜効果＞
本実施の形態にかかるバックアップ制御装置１０は、クローン記憶部１３のバックアップの為に、効率よくスナップショットデータを取得できる。その理由は、クローン制御部１５とスナップショット制御部１６（または、制御部１Ａ）は、スナップショットデータとマスタ記憶部１２のマスタデータが一致するとき、改めて、スナップショットデータをスナップショット記憶部１４に取得しないからである。この場合、スナップショット制御部１６（または、制御部１Ａ）は、スナップショットデータが必要なときは、マスタ記憶部１２のマスタデータを読み込む。
【００８６】
＜第２の実施形態＞
図１４は、本発明の第２の実施の形態にかかるバックアップ制御装置１０の構成を示す図である。
【００８７】
実施の形態にかかるバックアップ制御装置１０は、プール記憶部１Ｂを備える。本実施の形態では、クローン記憶部１３、及び、スナップショット記憶部１４は、実体を持たないセクタである仮想セクタで構成される仮想記憶装置である。この仮想記憶装置は、データを、実体を持つ実体セクタで構成されるプール記憶部１Ｂ上に記憶する。
【００８８】
すなわち、本実施の形態におけるクローン記憶部１３は、クローン制御部１５から入出力コマンドを受信して、自装置の仮想セクタをプール記憶部１Ｂの実体セクタにマッピングして入出力する入出力制御部である。同様に、スナップショット記憶部１４は、スナップショット制御部１６から入出力コマンドを受信して、自装置の仮想セクタをプール記憶部１Ｂの実体セクタにマッピングして入出力する入出力制御部である。
【００８９】
仮想記憶装置は、実際に書き込みコマンドを実行するまで記憶領域を消費しないため、記憶領域を削減できる。
【００９０】
本実施の形態における仮想記憶装置は、書き込みコマンド、読み込みコマンド、及び、解放コマンドを含むコマンドを処理する。
【００９１】
書き込みコマンドを受信すると、仮想記憶装置は、指定されたセクタ番号の仮想セクタに対して新規に実体セクタを割り当て、指定されたバイトデータ列を割り当てた実体セクタ上に記憶し、実行結果をコマンド送信元に送信する。割り当てた実体セクタは、これ以降、解放されるまで他の仮想セクタに対する割り当てが不可能となる。
【００９２】
読み込みコマンドを受信すると、仮想記憶装置は、指定されたセクタ番号の仮想セクタに割り当てている実体セクタ上に記憶しているバイトデータ列を読み込んで、コマンド送信元に送信する。
【００９３】
解放コマンドを受信すると、仮想記憶装置は、指定されたセクタ番号の仮想セクタから、仮想セクタに割り当てている実体セクタを解放する。解放した実体セクタは、これ以降他の仮想セクタに対する割り当てが可能となる。
【００９４】
上記の仮想記憶装置は、クローン記憶部１３上のセクタの差分が消滅した際に当該仮想セクタに割り当てられていた実体セクタを解放する。同様に、仮想記憶装置は、スナップショット記憶部１４のセクタのデータがマスタと一致する内容に変化した際に当該仮想セクタに割り当てられていた実体セクタを解放する。
【００９５】
実施の形態にかかるバックアップ制御装置１０は、記憶領域のさらなる削減を可能とする。その理由は、クローン記憶部１３、及び、スナップショット記憶部１４は、実体を持たないセクタである仮想セクタで構成される仮想記憶装置であるからである。仮想記憶装置は、重複する内容のデータを複数箇所に記憶することを回避できる。
【００９６】
＜第３の実施の形態＞
図１５は、本発明の第３の実施の形態にかかるバックアップ制御装置１０の構成を示す図である。本実施の形態のバックアップ制御装置１０は、マスタ記憶部１２と、クローン記憶部１３と、スナップショット記憶部１４と、制御部１Ａと、を備える。
【００９７】
マスタ記憶部１２は、マスタデータを格納する。クローン記憶部１３は、マスタデータとの差分データの最新のものを格納する。スナップショット記憶部１４は、クローン記憶部１３のバックアップ取得時のデータであるスナップショットデータを格納する。
【００９８】
制御部１Ａは、バックアップ取得後にクローン記憶部１３の更新要求を受けると、クローン記憶部１３に差分データが有るか否かを判定する。制御部１Ａは、差分データが、ａ）有れば当該差分データをスナップショット記憶部１４に保存し、ｂ）無ければスナップショット記憶部１４にスナップショットデータ取得を行わない。
【００９９】
本実施の形態にかかるバックアップ制御装置１０は、クローン記憶部１３のバックアップの為に、効率よくスナップショットデータを取得できる。その理由は、制御部１Ａは、スナップショットデータとマスタ記憶部１２のマスタデータが一致するとき、改めて、スナップショットデータをスナップショット記憶部１４に取得しないからである。この場合、制御部１Ａは、スナップショットデータが必要なときは、マスタ記憶部１２のマスタデータを読み込む。
【０１００】
なお、制御部１Ａは、第１の実施形態同様に、例えば、クローン制御部１５とスナップショット制御部１６に分離して実装されても良い。
【０１０１】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１０２】
１０    バックアップ制御装置
１１    転送制御部
１２    マスタ記憶部
１３    クローン記憶部
１４    スナップショット記憶部
１５    クローン制御部
１６    スナップショット制御部
１７    クローン差分表
１８    スナップショット取得先表
１９    スナップショット差分表
１Ａ    制御部
１Ｂ    プール記憶部
２０    ホストコンピュータ
３０    インタフェース
【図１】
0006281511.tif 000002
【図２】
0006281511.tif 000003
【図３】
0006281511.tif 000004
【図４】
0006281511.tif 000005
【図５】
0006281511.tif 000006
【図６】
0006281511.tif 000007
【図７】
0006281511.tif 000008
【図８】
0006281511.tif 000009
【図９】
0006281511.tif 000010
【図１０】
0006281511.tif 000011
【図１１Ａ】
0006281511.tif 000012
【図１１Ｂ】
0006281511.tif 000013
【図１２】
0006281511.tif 000014
【図１３】
0006281511.tif 000015
【図１４】
0006281511.tif 000016
【図１５】
0006281511.tif 000017