(57)【特許請求の範囲】
【請求項１】
ストレージシステム間においてスナップショットを複製するためのシステムであって、
第１の時点におけるデータ・セットの状態を宛先システムで表すためにスナップショット・データを前記宛先システムに記憶するための要求を受け取り、第２の時点における前記データ・セットの前記状態をソース・システムで表す第２のソース・システム・スナップショット・データは、前記第１の時点における前記データ・セットの状態を前記ソース・システムで表す第１のソース・システム・スナップショット・データに依存し、前記第１の時点は前記第２の時点よりも前であり、
前記ソースシステムから宛先システムに送信されるべきデルタデータ・セットを決定するために、前記第１のソース・システム・スナップショット・データと、前記第２のソース・システム・スナップショット・データと、第３の時点における前記データ・セットの状態を前記宛先システムで表す宛先システム・スナップショット・データとの間の順序を決定するために使用可能な格納されている識別情報を使用し、
前記ソースシステムから前記宛先システムに対して前記デルタデータ・セットを送信し、
前記宛先システムに記憶されているスナップショット・データ・シーケンスに挿入されるべき、前記第１の時点における前記データ・セットの前記状態を前記宛先システムで表す新しい宛先システム・スナップショット・データを、前記デルタデータ・セットに少なくとも部分的に基づいて生成するように構成されているプロセッサと、前記新しい宛先システム・スナップショット・データを前記デルタデータ・セットに少なくとも部分的に基づいて生成することは、
前記デルタデータ・セットおよび前記第３の時点における前記データ・セットの前記状態を前記宛先システムで表す前記宛先システム・スナップショット・データの双方に含まれている冗長メタデータエントリを決定し、
前記第３の時点が前記第１の時点より前であるか後であるかを判定し、
前記第３の時点が前記第１の時点よりも前である場合には、前記デルタデータ・セットから前記冗長メタデータエントリを削除し、
前記第３の時点が前記第１の時点よりも後である場合には、前記第３の時点における前記データ・セットの前記状態を前記宛先システムで表す前記宛先システム・スナップショット・データから前記冗長メタデータエントリを削除することを含み、
前記プロセッサに接続され、前記要求を記憶するように構成されているメモリと
を備えるシステム。
【請求項２】
前記第１のソース・システム・スナップショット・データおよび前記第２のソース・システム・スナップショット・データの各々は、前記ソース・システムに記憶されているスナップショット・データ・シーケンスに含まれる、請求項１に記載のシステム。
【請求項３】
前記プロセッサは、新規の宛先システム・スナップショット・データを、前記宛先システムに記憶されている前記スナップショット・データ・シーケンスに挿入するように構成されている、請求項１に記載のシステム。
【請求項４】
前記ソースシステムから宛先システムに送信されるべき前記デルタデータ・セットを決定することは、前記第１のソース・システム・スナップショット・データおよび前記第２のソース・システム・スナップショット・データに少なくとも部分的に基づいてデルタを決定することを含む、請求項１に記載のシステム。
【請求項５】
前記第３の時点が前記第１の時点よりも前であり、前記デルタデータ・セットから前記冗長メタデータエントリを削除する場合、前記プロセッサはさらに、前記新しい宛先システム・スナップショット・データを前記第１の宛先システム・スナップショット・データに依存させるように構成されている、請求項１に記載のシステム。
【請求項６】
前記冗長メタデータエントリが前記デルタデータ・セットおよび第３の時点における前記データ・セットの前記状態を前記宛先システムで表す前記宛先システム・スナップショット・データの双方に含まれているとの決定に応答してさらに、前記デルタデータ・セットに関連する前記冗長メタデータエントリが前記ソース・システムから前記宛先システムに送信されないようにする、請求項１に記載のシステム。
【請求項７】
前記新しい宛先システム・スナップショット・データは、前記第１の時点および前記第３の時点に少なくとも部分的に基づいて、前記宛先システムに記憶されている前記スナップショット・データ・シーケンスに挿入される、請求項５に記載のシステム。
【請求項８】
前記デルタデータ・セットは第１のスナップショット・データを含み、前記宛先システム・スナップショット・データは第１の宛先システム・スナップショット・データを含み、前記プロセッサはさらに、所望の時点における前記データ・セットの状態を前記ソース・システムで表すための第２のスナップショット・データを決定するように構成され、前記第２のスナップショット・データは、前記所望の時点における前記データ・セットの前記状態を前記宛先システムで表す第２の宛先システム・スナップショット・データに少なくとも部分的に基づいて決定される、請求項１に記載のシステム。
【請求項９】
前記第２の時点は、前記第１の時点よりも前であり、前記第３の時点と同じである、請求項１に記載のシステム。
【請求項１０】
前記第２の時点は前記第１の時点よりも前であり、前記第３の時点は前記第１の時点よりも前であるが前記第２の時点よりも後である、請求項１に記載のシステム。
【請求項１１】
前記データ・セットは、第４の時点におけるソース・データ・セットの状態を前記ソース・システムで表す第３のソース・システム・スナップショット・データから生成されたクローン・データ・セットを含み、前記クローン・データ・セットに関連する前記第２のソース・システム・スナップショット・データは、前記ソース・データ・セットに関連する前記第３のソース・システム・スナップショット・データに依存する、請求項１に記載のシステム。
【請求項１２】
前記プロセッサは、
前記ソース・データ・セットに関連する第３のソース・システム・スナップショット・データに含まれる１つまたは複数のメタデータエントリを、前記クローン・データ・セットに関連する前記第２のソース・システム・スナップショット・データにマージすること、および、
前記ソース・データ・セットに関連する前記第３のソース・システム・スナップショット・データを削除するように構成されている、請求項１１に記載のシステム。
【請求項１３】
ストレージシステム間においてスナップショットを複製するための方法であって、
第１の時点におけるデータ・セットの状態を宛先システムで表すためのスナップショット・データを前記宛先システムに記憶する要求を受信し、第２の時点における前記データ・セットの前記状態をソース・システムで表す第２のソース・システム・スナップショット・データは、前記第１の時点における前記データ・セットの状態を前記ソース・システムで表す第１のソース・システム・スナップショット・データに依存し、前記第１の時点は前記第２の時点よりも前であり、
前記ソースシステムから宛先システムに送信されるべきデルタデータ・セットを決定するために、前記第１のソース・システム・スナップショット・データと、前記第２のソース・システム・スナップショット・データと、第３の時点における前記データ・セットの状態を前記宛先システムで表す宛先システム・スナップショット・データとの間の順序を決定するために使用可能な格納されている識別情報を使用し、
前記ソースシステムから前記宛先システムに対して前記デルタデータ・セットを送信し、
前記宛先システムに記憶されているスナップショット・データ・シーケンスに挿入されるべき、前記第１の時点における前記データ・セットの前記状態を前記宛先システムで表す新しい宛先システム・スナップショット・データを、前記デルタデータ・セットに少なくとも部分的に基づいて生成することを備え、前記新しい宛先システム・スナップショット・データを前記デルタデータ・セットに少なくとも部分的に基づいて生成することは、
前記デルタデータ・セットおよび前記第３の時点における前記データ・セットの前記状態を前記宛先システムで表す前記宛先システム・スナップショット・データの双方に含まれている冗長メタデータエントリを決定し、
前記第３の時点が前記第１の時点より前であるか後であるかを判定し、
前記第３の時点が前記第１の時点よりも前である場合には、前記デルタデータ・セットから前記冗長メタデータエントリを削除し、
前記第３の時点が前記第１の時点よりも後である場合には、前記第３の時点における前記データ・セットの前記状態を前記宛先システムで表す前記宛先システム・スナップショット・データから前記冗長メタデータエントリを削除することを含む、
方法。
【請求項１４】
新規の宛先システム・スナップショット・データを、前記宛先システムに記憶されている前記スナップショット・データ・シーケンスに挿入することをさらに備える、請求項１３に記載の方法。
【請求項１５】
各前記第１のソース・システム・スナップショット・データおよび前記第２のソース・システム・スナップショット・データは前記ソース・システムに関連するスナップショット・データ・シーケンスに含まれる、請求項１３に記載の方法。
【請求項１６】
前記デルタデータ・セットは、前記第１のソース・システム・スナップショット・データおよび前記第２のソース・システム・スナップショット・データに少なくとも部分的に基づいて決定される、請求項１３に記載の方法。
【請求項１７】
前記第３の時点が前記第１の時点よりも前であり、前記デルタデータ・セットから前記冗長メタデータエントリを削除する場合、前記新しい宛先システム・スナップショット・データを前記第１の宛先システム・スナップショット・データに依存させること
をさらに備える、請求項１３に記載の方法。
【請求項１８】
前記新しい宛先システム・スナップショット・データは、前記第１の時点および前記第３の時点に少なくとも部分的に基づいて、前記宛先システムに記憶された前記スナップショット・データ・シーケンスに挿入される、請求項１７に記載の方法。
【請求項１９】
前記デルタデータ・セットは第１のスナップショット・データを含み、前記宛先システム・スナップショット・データは第１の宛先システム・スナップショット・データを含み、前記方法はさらに、所望の時点における前記データ・セットの状態を前記ソース・システムで表すための第２のスナップショット・データを決定することを備え、前記第２のスナップショット・データは、前記所望の時点における前記データ・セットの前記状態を前記宛先システムで表す第２の宛先システム・スナップショット・データに少なくとも部分的に基づいて決定される、請求項１３に記載の方法。
【請求項２０】
前記データ・セットは、第４の時点におけるソース・データ・セットの状態を前記ソース・システムで表す第３のソース・システム・スナップショット・データから生成されたクローン・データ・セットを含み、前記クローン・データ・セットに関連する前記第２のソース・システム・スナップショット・データは、前記ソース・データ・セットに関連する前記第３のソース・システム・スナップショット・データに依存する、請求項１３に記載の方法。
【請求項２１】
非一時的なコンピュータ可読ストレージ媒体に組み込まれたストレージシステム間においてスナップショットを複製するためのコンピュータ・プログラム製品であって、
第１の時点におけるデータ・セットの状態を宛先システムで表すためのスナップショット・データを前記宛先システムに記憶する要求を受け取るためのコンピュータ命令と、第２の時点における前記データ・セットの前記状態をソース・システムで表す第２のソース・システム・スナップショット・データは、前記第１の時点における前記データ・セットの状態を前記ソース・システムで表す第１のソース・システム・スナップショット・データに依存し、前記第１の時点は前記第２の時点よりも前であり、
前記ソースシステムから宛先システムに送信されるべきデルタデータ・セットを決定するために、前記第１のソース・システム・スナップショット・データと、前記第２のソース・システム・スナップショット・データと、第３の時点における前記データ・セットの状態を前記宛先システムで表す宛先システム・スナップショット・データとの間の順序を決定するために使用可能な格納されている識別情報を使用するためのコンピュータ命令と、
前記ソースシステムから前記宛先システムに対して前記デルタデータ・セットを送信するためのコンピュータ命令と、
前記宛先システムに記憶されているスナップショット・データ・シーケンスに挿入されるべき、前記第１の時点における前記データ・セットの前記状態を前記宛先システムで表す新しい宛先システム・スナップショット・データを、前記デルタデータ・セットに少なくとも部分的に基づいて生成するためのコンピュータ命令とを備え、前記新しい宛先システム・スナップショット・データを前記デルタデータ・セットに少なくとも部分的に基づいて生成することは、
前記デルタデータ・セットおよび前記第３の時点における前記データ・セットの前記状態を前記宛先システムで表す前記宛先システム・スナップショット・データの双方に含まれている冗長メタデータエントリを決定し、
前記第３の時点が前記第１の時点より前であるか後であるかを判定し、
前記第３の時点が前記第１の時点よりも前である場合には、前記デルタデータ・セットから前記冗長メタデータエントリを削除し、
前記第３の時点が前記第１の時点よりも後である場合には、前記第３の時点における前記データ・セットの前記状態を前記宛先システムで表す前記宛先システム・スナップショット・データから前記冗長メタデータエントリを削除することを含む、
コンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
他の出願の相互参照
本出願は、あらゆる趣旨において参照により本明細書に組み込まれる、２０１３年９月３日に出願された発明の名称を「ＲＥＰＬＩＣＡＴＩＯＮ  ＯＦ  ＳＮＡＰＳＨＯＴＳ  ＡＮＤ  ＣＬＯＮＥＳ（スナップショットおよびクローンの複製）」とする米国仮特許出願第６１／８７３，２４１号に基づく優先権を主張する。
【背景技術】
【０００２】
いくつかのシステムでは、スナップショットを、所与の２つの時点の間にストレージ・システムに加えられた変更を追跡するスナップショット・インデックスとして表すことができる。ある時点（ポイント・イン・タイム）におけるデータの状態に関連するスナップショットを複製するとき、多くの従来アプローチは、スナップショットに対応する時点におけるデータの状態を「展開」する。データの展開状態は、その時点において存在するかまたはアクセスされ得る全てのデータ値を含み、通常、デルタ（差分）表現よりもはるかに長い（デルタ表現は、次に古いスナップショット以後に加えられた変更のみを含む）。データの展開状態を宛先システムに送信して宛先システムで記憶することは、非効率的である可能性がある。
【０００３】
本発明の様々な実施形態を、後続の詳細な記述および添付の図面に開示する。
【図面の簡単な説明】
【０００４】
【図１】仮想マシン・ストレージ抽象化を使用したＶＭの記憶のためのストレージ・システムの一実施形態を示す図である。
【０００５】
【図２】データおよびメタデータを含むストレージ・システムの一実施形態を例示するブロック図である。
【０００６】
【図３】データ・セットに関連するメタデータ・セットの例を示す図である。
【０００７】
【図４】ソース・データに関連するメタデータ・セット、およびクローンに関連するメタデータ・セットの例を示す図である。
【０００８】
【図５】ソース・システムおよび宛先システムに記憶できるスナップショットの例を示す図である。
【０００９】
【図６】ストレージ・システム間でスナップショットの複製を実施するためのシステムの一実施形態を示す図である。
【００１０】
【図７】同じ展開データ状態に関連するスナップショット・インデックスが、異なるストレージ・システムでどのように異なる場合があるかに関する例を示す図である。
【００１１】
【図８】ソース・システムから宛先システムへの選択されたスナップショットの複製を実施するプロセスの一実施形態を示す流れ図である。
【００１２】
【図９Ａ】時間ｔ２におけるスナップショットをソース・システムから宛先システムに複製する例を示す図である。
【図９Ｂ】時間ｔ２におけるスナップショットをソース・システムから宛先システムに複製する例を示す図である。
【００１３】
【図１０Ａ】時間ｔ３におけるスナップショットをソース・システムから宛先システムに複製する例を示す図である。
【図１０Ｂ】時間ｔ３におけるスナップショットをソース・システムから宛先システムに複製する例を示す図である。
【００１４】
【図１１Ａ】時間ｔ３におけるスナップショットをソース・システムから宛先システムに複製する別の例を示す図である。
【図１１Ｂ】時間ｔ３におけるスナップショットをソース・システムから宛先システムに複製する別の例を示す図である。
【００１５】
【図１２Ａ】時間ｔ４におけるスナップショットをソース・システムから宛先システムに複製する別の例を示す図である。
【図１２Ｂ】時間ｔ４におけるスナップショットをソース・システムから宛先システムに複製する別の例を示す図である。
【００１６】
【図１３】より新しいスナップショット・インデックスをより古いスナップショット・インデックスに対してリファクタリングするプロセスの例を示す流れ図である。
【００１７】
【図１４】クローンに関連する選択されたスナップショットの、ソース・システムから宛先システムへの複製を実施するプロセスの一実施形態を示す流れ図である。
【００１８】
【図１５Ａ】クローンに関連する時間ｔ４におけるスナップショット（Ｓ４）をソース・システムから宛先システムに複製する例を示す図である。
【図１５Ｂ】クローンに関連する時間ｔ４におけるスナップショット（Ｓ４）をソース・システムから宛先システムに複製する例を示す図である。
【図１５Ｃ】クローンに関連する時間ｔ４におけるスナップショット（Ｓ４）をソース・システムから宛先システムに複製する例を示す図である。
【発明を実施するための形態】
【００１９】
本発明は、プロセス、装置、システム、組成物、コンピュータ可読ストレージ媒体に組み入れられたコンピュータ・プログラム製品、ならびに／または、プロセッサ（プロセッサに結合されたメモリに記憶された命令および／もしくはそのようなメモリによって提供される命令を、実行するように構成されたプロセッサなど）として実現することを含めて、多くの方式で実現することができる。本明細書では、これらの実装形態、または本発明がとり得る他の任意の形を、技法と呼ぶ場合がある。一般に、開示されるプロセスのステップの順序は、本発明の範囲内で改変することができる。別途明記されない限り、タスクを実施するように構成されるものとして記述されるプロセッサやメモリなどのコンポーネントは、所与の時にタスクを実施するように一時的に構成される一般的なコンポーネントとして、またはタスクを実施するように製造された特定のコンポーネントとして、実装される場合がある。本明細書において、用語「プロセッサ」は、コンピュータ・プログラム命令などのデータを処理するように構成された１つまたは複数のデバイス、回路、および／または処理コアを指す。
【００２０】
本発明の１つまたは複数の実施形態に関する詳細な記述を、本発明の原理を例示する添付の図と共に、以下に提供する。本発明をこのような実施形態との関連で述べるが、本発明は、どんな実施形態にも限定されない。本発明の範囲は特許請求の範囲によってのみ限定され、本発明は、多くの代替、修正、および均等物を包含する。後続の記述では、本発明の完全な理解を提供するために、多くの具体的詳細を示す。これらの詳細は例の目的で提供するものであり、本発明は、これらの具体的詳細のいくらかまたは全てがなくても、特許請求の範囲に従って実践することができる。明確にするために、本発明に関係する技術分野で知られている技術要素については、本発明が不必要に曖昧にならないように、詳細には述べていない。
【００２１】
ストレージ・システム間でスナップショットおよびクローンの効率的かつフレキシブルな複製を実施する実施形態について、本明細書に述べる。スナップショットの複製が実施されるストレージ・システムは、相互に遠く離れて位置する場合がある。スナップショットおよびクローンは、データのポイント・イン・タイム・コピーの、空間効率のよい表現を可能にする。スナップショットは一般に、読取専用コピーであり、クローンは一般に、読取りまたは書込みができるコピーである。リモート・ストレージ・システムでスナップショットおよびクローンを通常に複製すると、しばしば、空間効率が失われる結果になるか、または、スナップショットおよびクローンを複製する際に用いなければならないサブセットもしくは順序に対して制限が課される。本明細書に記載の実施形態によれば、スナップショットおよびクローンの複製を、変更またはデルタ（差分）として表される最小限の量の情報を使用して実施することができ、また、複製するストレージ・システム間で伝送および記憶することができる。データおよびメタデータの最小限の表現をストレージ・システム上で保存しながら、スナップショットおよびクローンの任意のサブセットを任意の順序で任意のシステムに複製することができる。
【００２２】
「スナップショット」は、様々な実施形態で、データ・セットのポイント・イン・タイム状態を含み、後で生成されたスナップショットは、前のスナップショットの作成以後に修正されたデータへのマッピングを含む。データ・セットは、例えば、仮想マシン（「ＶＭ」と呼ばれることもある）、仮想ディスク（「Ｖディスク」と呼ばれることもある）、またはファイルに関連するものである場合がある。様々な実施形態で、データ・セット（例えば、ＶＭ、Ｖディスク、またはファイル）に関連するメタデータは、１つまたは複数のスナップショットを含む。様々な実施形態で、データ・セットのポイント・イン・タイム状態に関連するスナップショットは、ストレージ・システムでインデックスとして物理的に表される／記憶される。本明細書で使用される場合、「スナップショット」は、特定の時点におけるデータ・セットの状態を指すのに使用されることがあり、かつ／または、特定のストレージ・システムでのその特定の時点におけるデータ・セットのその状態を表す物理表現（例えばインデックス）を指すのに使用されることがある。「ユーザ」は、「論理オフセット」を使用してスナップショットに対して読取操作を実施し、「論理オフセット」は、データ・セットを構成するスナップショットに関連するインデックスを使用して「物理オフセット」にマッピングされる。次いで、物理オフセットを使用して、基礎をなす物理ストレージ・デバイスからのデータを読み書きすることができる。読取操作は、１つまたは複数のインデックス中で論理オフセットをルックアップして対応する物理オフセットを見つけ、書込操作は、インデックス中で新しいエントリを作成するかまたは既存のエントリを更新する。各スナップショット・インデックスは、直前に生成された（すなわちより古い）スナップショット・インデックス以後に修正されたデータへのマッピングを含むので、データ・セットに関連する各スナップショット・インデックス（最も古いスナップショット・インデックス以外の）は、少なくとも、次に古いスナップショット・インデックスに依存する（例えば、それをポイントする、それにリンクする、かつ／または他の方法でそれを参照する）ことができる。したがって、データ・セットの種々のポイント・イン・タイム状態に関連するスナップショットが、ストレージ・システムでスナップショット・インデックスのシーケンスとして表されるものとすることができる。後でさらに詳細に述べるように、シーケンス中のスナップショット・インデックス間の依存関係のせいで、同じデータ・セットに関連する同じポイント・イン・タイム・スナップショットを有する異なるストレージ・システムが、それぞれのスナップショット・シーケンスに対応するように、いくぶん異なる論理オフセットのセットをマッピングするインデックスを記憶している場合がある。
【００２３】
様々な実施形態で、「クローン」は、既存のデータ・セット（既存のデータ・セットを「ソース・データ」と呼ぶことがある）のコピーを指す。様々な実施形態で、クローンは、ソース・データのスナップショットから生成される。様々な実施形態で、クローンの作成元であるソース・データのスナップショットを「共有スナップショット」と呼ぶ。クローンを生成するには、新しいメタデータ・セットが作成され、クローンの新しいメタデータ・セットをソース・データのメタデータ・セットに関連付けるデータが記憶され、それにより、ソース・データに関連するスナップショット・インデックスの少なくともいくつかが、クローンに関連する新しいメタデータ・セットによって共有されることになり、ソース・データに関連するデータの少なくともいくらかが、クローンによって共有される。
【００２４】
図１は、仮想マシン・ストレージ抽象化を使用したＶＭの記憶のためのストレージ・システムの一実施形態を示す図である。図示の例では、システム１００は、サーバ１０６、ネットワーク１０４、およびストレージ・システム１０２を含む。様々な実施形態で、ネットワーク１０４は、様々な高速データ・ネットワークおよび／または遠隔通信ネットワークを含む。いくつかの実施形態では、ストレージ・システム１０２は、ネットワーク１０４を介してサーバ１０６と通信する。いくつかの実施形態では、仮想マシン・ストレージ抽象化を使用したＶＭの記憶のためのファイル・システムは、ネットワーク１０４を含まず、ストレージ・システム１０２はサーバ１０６のコンポーネントである。いくつかの実施形態では、サーバ１０６は、ストレージ・システム１０２以外のより多くのストレージ・システムとも通信するように構成される。
【００２５】
様々な実施形態で、サーバ１０６は、いくつかのＶＭを実行する。図示の例では、ＶＭ１０８、１１０、および１１２（ならびに他のＶＭ）が、サーバ１０６上で稼働している。ＶＭは、物理マシンのようにプログラムを実行する、物理マシンのソフトウェア実装形態である。例えば、物理マシン（例えばコンピュータ）が、２つ以上のＶＭを実行するようにプロビジョニングされる場合がある。各ＶＭは、異なるオペレーティング・システムを実行することができる。したがって、異なるオペレーティング・システムが、同時に稼働して、同じ物理マシンのリソースを共有することができる。様々な実施形態で、ＶＭは、２つ以上の物理マシンにまたがることがあり、かつ／または、ある物理マシンから別の物理マシンに移動（例えばマイグレート）されることがある。様々な実施形態で、ＶＭは、１つまたは複数の仮想ディスク（Ｖディスク）と、特定のＶＭに関係する他のデータ（例えば、ＶＭ管理インフラストラクチャによってサポートされるスナップショットなどの機能を実装するための、構成ファイルおよびユーティリティ・ファイル）とを含む。Ｖディスクは、ＶＭ上で稼働するゲスト・オペレーティング・システムにとっては、普通の物理ディスク・ドライブに見える。様々な実施形態で、１つまたは複数のファイルを使用してＶディスクの内容を記憶することができる。いくつかの実施形態では、ＶＭ管理インフラストラクチャ（例えばハイパーバイザ）がファイルを作成するが、これらのファイルは、Ｖディスクの内容（例えば、ゲスト・オペレーティング・システム、プログラム・ファイル、およびデータ・ファイル）と、特定のＶＭに関連する他のデータとを記憶する。例えば、ハイパーバイザは、特定のＶＭごとに、ファイルのセットをディレクトリ中に作成することができる。ハイパーバイザによって作成されるファイルの例は、１つまたは複数のＶディスクの内容、ＶＭのＢＩＯＳの状態、ハイパーバイザによって作成されたスナップショットに関する情報およびメタデータ、特定のＶＭの構成情報、などを記憶する。様々な実施形態で、特定のＶＭに関連するデータは、１つまたは複数のファイルとしてストレージ・システムに記憶される。様々な実施形態で、これらのファイルは、仮想マシン・ストレージ抽象化の例である。いくつかの実施形態では、サーバ１０６上で稼働するＶＭ１０８、１１０、および１１２（少なくとも）に関連するそれぞれのファイルは、ストレージ・システム１０２に記憶される。
【００２６】
様々な実施形態で、ストレージ・システム１０２は、どの記憶済みデータ・オブジェクト（ファイルや他の仮想マシン・ストレージ抽象化など）が、どのＶＭまたはＶディスクに関連するかを識別するメタ情報を記憶するように構成される。様々な実施形態で、ストレージ・システム１０２は、サーバ１０６上で稼働するＶＭのデータを記憶し、また、どのデータ・オブジェクトがどの特定のＶＭに関連するかに関するマッピングまたは他の識別を提供するメタデータも記憶する。様々な実施形態で、特定のＶＭのマッピングまたは識別は、特定の各ＶＭに関連するストレージ上のファイルへのマッピングを含む。様々な実施形態で、ストレージ・システム１０２はまた、特定のＶＭに関連するファイルへのマッピングに加えて、これらのファイルの少なくとも一部も記憶する。様々な実施形態で、ストレージ・システム１０２は、協働して記憶データ（ファイルや他の記憶されるデータ・オブジェクトなど）の記憶および管理を行うように構成された、１つまたは複数の物理システム、ならびに／または関連するハードウェアおよび／もしくはソフトウェア・コンポーネントを参照する。いくつかの実施形態では、ストレージ・システムを（少なくとも部分的に）実装するのに使用されるハードウェア・コンポーネントは、ディスクとフラッシュとのいずれか、またはディスクとフラッシュとの組合せからなる場合がある。
【００２７】
図２は、データおよびメタデータを含むストレージ・システムの一実施形態を例示するブロック図である。図示の例では、ストレージ・システム１０２は、ネットワーク接続２０２と、ネットワーク・インタフェース・カードや他のインタフェースなどの通信インタフェース２０４とを備え、これらにより、ストレージ・システムは、図１のネットワーク１０４などのネットワークに接続されそのようなネットワークを介して通信することができる。ストレージ・システム１０２はさらに、図１のサーバ１０６などのシステム上で稼働する仮想マシンからのＮＦＳ要求を扱うように構成されたネットワーク・ファイル・システム・フロント・エンド２０６を備える。様々な実施形態で、ネットワーク・ファイル・システム・フロント・エンドは、ストレージ・システム１０２または他の場所に記憶されたメタ情報を例えば使用して、受け取られ処理されるＮＦＳ要求をこの要求が関連する対応する仮想マシンおよび／またはＶディスクに関連付けるように構成される。ストレージ・システム１０２は、ＶＭデータを記憶するように構成および最適化されたファイル・システム２０８を備える。図示の例では、メタデータ２１０は、様々なデータ・セットとそれらに関連するスナップショットおよびクローンとに関連するメタデータ・セットを記憶するように構成される。例えば、メタデータ・セットは、ＶＭ、Ｖディスク、またはファイルに関連するものである場合がある。ストレージ２１２は、少なくとも１段のストレージを含むことができる。いくつかの実施形態では、ストレージ２１２は少なくとも２段のストレージを含むことができ、１段目のストレージは、フラッシュまたは他の固体ディスク（ＳＳＤ）を含み、２段目のストレージは、ハード・ディスク・ドライブ（ＨＤＤ）または他のディスク・ストレージを含む。
【００２８】
様々な実施形態で、メタデータ２１０に記憶されたメタデータ・セットは、メタデータ・セットに関連するデータ・セット（例えば、ＶＭ、Ｖディスク、またはファイル）が記憶されているストレージ２１２中の場所へのマッピングを含む少なくとも１つのインデックスを含む。いくつかの実施形態では、メタデータ２１０に記憶されたメタデータ・セットは、ストレージ２１２に記憶されたデータ・セットに関連するスナップショットであるインデックスを少なくとも含む。様々な実施形態で、メタデータ２１０に記憶されたメタデータ・セットは、ストレージ２１２に記憶されたデータ・セットに関連する１つまたは複数のスナップショット・インデックスのシーケンスを含み、各スナップショット・インデックスは、より古い（すなわちより前に生成された）スナップショット・インデックスがもし存在すれば、少なくともそれに依存する（物理的に）。
【００２９】
クローンは、ストレージ２１２に記憶された既存の（すなわちソース）データ・セットに基づいて生成することができる。様々な実施形態で、クローンは、メタデータ２１０に記憶されているソース・データのメタデータ・セット中の、ソース・データ・セットのスナップショットを使用して生成することができる。様々な実施形態で、クローンの生成元であるソース・データのスナップショットを、「共有スナップショット」と呼ぶ。新しいメタデータ・セットがクローンについて作成され、クローン（および／またはクローンのメタデータ・セット）をソース・データに関連するメタデータ・セット（例えば、ソース・データの共有スナップショット）に関連付けられるデータが、メタデータ２１０に記憶される。ソース・データに関連するメタデータの少なくともいくらかは、クローンと共有される。様々な実施形態で、受け取られた要求が、データ・セット（例えば、ＶＭ、Ｖディスク、またはファイル）からのデータ（例えば、データの現在状態または過去状態）にアクセスする操作（例えば、読取りまたは書込み）を含むとき、このデータに関連するメタデータ・セットが取り出される。要求に関連するデータがクローンを含む場合は、いくつかの例では、ソース・データに関連するメタデータ・セットの少なくとも一部にもアクセスすることができる。
【００３０】
図３は、データ・セットに関連するメタデータ・セットの例を示す図である。メタデータ・セットは、データ・セット（例えば、ＶＭ、Ｖディスク、またはファイル）に関連するものとすることができる。図３の例では、メタデータ・セットがファイルに関連すると仮定する。この例では、メタデータ・セットは、現在スナップショット・インデックス、時間ｔ２におけるスナップショット、および時間ｔ１におけるスナップショットを含む。現在スナップショット・インデックスは、時間ｔ２におけるスナップショットに依存し（例えばリンクされ）、時間ｔ２におけるスナップショットは、時間ｔ１におけるスナップショットに依存する（例えばリンクされる）。この例では、ファイルに関連するデータが、オフセット１、２、３、および４に記憶されているものとすることができる。
【００３１】
メタデータは、ユーザが書き込んだものとすることのできるデータについて、論理的場所（例えば論理オフセット）を、基礎をなすデータ・ストレージの物理的場所（例えば物理オフセット）に変換するために使用されるマッピングと考えることができる。様々な実施形態で、メタデータは、ハッシュ・テーブルやＢ木など、効率的なインデックス・データ構造として編成することができる。例えば、データの論理オフセットと、インデックスと、データの物理オフセットとの間の関係は、論理オフセット→インデックス→物理オフセットとして記述することができる。
【００３２】
様々な実施形態で、各メタデータ・セットは、少なくとも１つのアクティブ・インデックス、すなわち「現在スナップショット・インデックス」を含む。現在スナップショット・インデックスは、それを修正できるという意味でアクティブである。いくつかの実施形態では、現在スナップショット・インデックスは、前のスナップショットが作成された後にマッピングされた、ファイル中の全てのオフセットを記憶する。スナップショットは通常は読取専用ファイルだが、現在スナップショット・インデックスは、次の所定のスナップショット作成イベントが発生するまでは修正可能である。例えば、所定のスナップショット作成イベントは、ユーザによって構成されてよく、時間間隔の経過、特定のイベントの検出、または新しいスナップショットを作成するユーザ選択の受領、などを含む場合がある。次の所定のスナップショット作成イベントに達すると、現在スナップショット・インデックスの状態が保存されて新しいスナップショットが作成され、新しい空の現在スナップショット・インデックスが作成される。いくつかの実施形態では、データ・セットへの書込操作の結果、現在スナップショット・インデックスが更新される。いくつかの実施形態では、データ・セットの読取操作の結果、現在スナップショット・インデックス内が検索され、その後、所望のデータが現在スナップショット・インデックス内で見つからなかった場合は、スナップショットのシーケンスの中が検索される。様々な実施形態で、各インデックス内が所定方式で検索される。
【００３３】
いくつかの実施形態では、ファイルのスナップショットは、スナップショットが作成されたときのファイルのポイント・イン・タイム状態である。ＶＭのスナップショットは、ＶＭを構成するファイルの、ファイルレベルのスナップショットの集積である。いくつかの実施形態では、ストレージ・システムにおいて、スナップショットは、前のスナップショットが作成された後で修正されたデータへのマッピングを記憶するインデックスとして表される。言い換えれば、いくつかの実施形態では、各スナップショットは、所与の時間期間にわたる（前のスナップショットの作成以後の）、ファイルの更新（すなわちデルタ）のみを含む。結果として、スナップショットは、空間効率のよいコンパクトな構造によって表すことができる。
【００３４】
スナップショットが作成されるとき、現在スナップショット・インデックスはこのスナップショットのインデックスになり、次のスナップショットに備えて、新しい空の現在スナップショット・インデックスが作成される。各スナップショットは、次に新しいスナップショットおよび次に古いスナップショットにリンクされる（または他の方法で物理的に依存する）。いくつかの実施形態では、時間を遡るリンク（すなわち、次に古いスナップショットへのリンク）が、スナップショットおよびクローンの読取操作中にトラバースされる。
【００３５】
図３の例に戻ると、現在スナップショット・インデックスは、時間ｔ２におけるスナップショットにリンクされ（例えば、それをポイントし）、時間ｔ２におけるスナップショットは、時間ｔ１におけるスナップショットにリンクされる。図３の例に示すように、時間ｔ２におけるスナップショットおよび時間ｔ１におけるスナップショットの各々は、対応するインデックスによって表される。時間ｔ１は時間ｔ２よりも前なので、時間ｔ１におけるスナップショットは、時間ｔ２におけるスナップショットよりも「古い」と言うことができ、時間ｔ２におけるスナップショットは、時間ｔ１におけるスナップショットよりも「新しい」と言うことができる。時間ｔ２におけるスナップショットは時間ｔ１におけるスナップショットにリンクされているので、時間ｔ２におけるスナップショットおよび時間ｔ１におけるスナップショットは、ファイルに関連するスナップショットのチェーンまたはシーケンスと呼ぶことができる。いくつかの実施形態では、ファイルに関連するメタデータ・セットの各スナップショット・インデックスは、スナップショットのシーケンスがファイルに属することを識別する記憶済みの「ファイル・グローバルＩＤ」に関連する。ファイルの現在状態に対する読取操作は、現在スナップショット・インデックス、ならびに／または時間ｔ２におけるスナップショットおよび時間ｔ１におけるスナップショットから処理されるものとすることができ、ファイルに対する書込操作は、現在スナップショット・インデックスを更新する。図３の例では、時間ｔ１の前にデータＡがオフセット１に書き込まれ、次いで、時間ｔ１におけるスナップショットが作成される。時間ｔ１の後、時間ｔ２の前に、データＢがオフセット２に書き込まれ、次いで、時間ｔ２におけるスナップショットが作成される。時間ｔ２の後、時間ｔ３で、データ値Ｃがオフセット３に書き込まれ、現在スナップショット・インデックス中で追跡される。例えば、新しいデータ値Ｄ（図示せず）が、オフセット３に現在あるデータ、すなわちデータ値Ｃを、時間ｔ４で上書きする場合は、現在スナップショット・インデックスのオフセット３は、データ値Ｄにマッピングするように更新されることになる。
【００３６】
様々な実施形態で、論理ブロック・オフセットについての指定されたスナップショットに対する読取操作は、次のようにして進行することができる。まず、読取操作の論理ブロック・オフセットについて、指定されたスナップショット・インデックスのルックアップが実施される。マッピングが存在する場合は、対応する物理アドレスにおけるデータが物理デバイス（基礎をなすストレージ）から読み取られて返される。そうではなく、指定されたスナップショット・インデックス内にマッピングが存在しない場合は、次に古いスナップショットへのリンクがトラバースされ、このより古いスナップショットのインデックス内の検索が実施される。論理ブロック・オフセットについてのマッピングがスナップショット・インデックス中で見つかるまで、またはチェーン中の最後のスナップショットが調べられるまで、このプロセスが継続する。例えば、データ・セットに対する読取操作が、オフセット１に関連する現在データを要求すると仮定する。まず、データ・セットの現在スナップショット・インデックス内で、オフセット１に関連するデータへのマッピングが検索される。現在スナップショット・インデックス中でマッピングが見つからず、したがって、現在スナップショット・インデックスから時間ｔ２におけるスナップショットへのリンク（例えば、記憶済みの関連付けデータ）がトラバースされ、時間ｔ２におけるスナップショット内の検索が実施される。時間ｔ２におけるスナップショット中でマッピングが見つからず、したがって、時間ｔ２におけるスナップショットから、次に古いスナップショット、すなわち時間ｔ１におけるスナップショットへのリンクがトラバースされ、時間ｔ１におけるスナップショット内の検索が実施される。時間ｔ１におけるスナップショット中で、オフセット１に関連するマッピングが見つかり、検索は終了し、時間ｔ１におけるスナップショットを使用して要求が処理される。
【００３７】
図４は、ソース・データに関連するメタデータ・セット、およびクローンに関連するメタデータ・セットの例を示す図である。いくつかの実施形態では、クローンは、データ・セットの既存のスナップショットから作成することができる。この例では、最初にソース・データのスナップショットが作成され、次いでこのスナップショットからクローンが作成された。前述のように、メタデータおよびデータの空間消費を削減するために、スナップショットは、前のスナップショットの作成以後に関連データ・セットに加えられた変更のみを記憶するコンパクトなフォーマットで表される。ソース・データに関連するメタデータ・セット（ソース・メタデータ）は、時間ｔ３におけるスナップショット、時間ｔ２におけるスナップショット、および時間ｔ１におけるスナップショットを含む。図４の例に示すように、時間ｔ３におけるスナップショット、時間ｔ２におけるスナップショット、および時間ｔ１におけるスナップショットの各々は、対応するインデックスによって表される。この例では、クローンは、ソース・メタデータの時間ｔ２におけるスナップショットから作成される。したがって、時間ｔ２におけるスナップショットは今やソース・データとそのクローンとの間で共有されているので、時間ｔ２におけるスナップショットは今や、共有スナップショットとも呼ばれる。この例には示されていないが、図示のクローンの他に１つまたは複数の他のクローンが、ソース・メタデータの時間ｔ２におけるスナップショットから作成されてもよい。いくつかの実施形態では、各スナップショットには、そのスナップショットから作成されたクローンの総数を追跡する参照カウントが関連する。クローン作成操作が完了した後は、共有スナップショットの参照カウントが、スナップショットから作成された新しいクローンの数だけインクリメントされる。クローンが削除されたときは、クローンの作成元であった共有スナップショットに関連する参照カウントが１つデクリメントされる。いくつかの実施形態では、共有スナップショットが削除されるべきかどうかが決定されるとき、共有スナップショットの参照カウントが考慮される。例えば、スナップショットの参照カウントが０でない場合は、このスナップショットを削除することはできず、よって、クローンによって共有されるデータは保存される。
【００３８】
様々な実施形態で、クローン（例えば、ＶＭのスナップショットの）の作成は、メタデータおよび／またはデータをコピーすることを必要としない。その代わり、新しいメタデータ・セットが、新しいクローンについて作成される。いくつかの実施形態では、新しいクローンについて作成された新しいメタデータ・セットは、次のうちの少なくとも１つまたは複数を含むことができる。すなわち、新しいファイル・グローバルＩＤ、現在スナップショット・インデックス（図示せず）、クローンの生成元であった共有スナップショットに関連する識別子、および、ソース・メタデータのセット（例えば、スナップショットのソース・シーケンス）に関連する識別子である。さらに、各クローンをソース・データの共有スナップショットに関連付ける情報が記憶される。例えば、各クローンをソース・データの共有スナップショットに関連付ける情報は、ソース・データに関連するスナップショットのシーケンスからの共有スナップショットである特定のスナップショットを識別する識別子（後でさらに詳細に述べる「スナップショット・グローバルＩＤ」）を含むことができる。スナップショット自体は、複数のファイル中のデータのスナップショットからなる場合がある。スナップショット・メタデータは、ファイル・グローバルＩＤの識別子を使用してファイルを識別し、ローカル・スナップショットＩＤを使用してファイルの当該スナップショットを識別する。クローンを共有スナップショットに関連付ける情報は、クローン・メタデータと共に、ソース・メタデータと共に、および／または他の場所に、記憶されてよい。例えば、関連付けデータは、クローンの作成元であった共有スナップショットのインデックスをポイントするのにクローンが使用することのできるポインタまたは別のタイプの参照である。共有スナップショットへのこのリンクを、クローンの読取中にトラバースすることができる。
【００３９】
スナップショットは、スナップショットが非クローンについて生成される方式と同じようにして、クローンについても生成することができる。図４の例では、クローンが作成された後、対応するインデックスによって表される時間ｔ４におけるスナップショットが生成された（例えば、クローンに関連する現在スナップショット・インデックスを使用して）。クローンは、共有スナップショット（図４の例では時間ｔ２におけるスナップショット）と、より古いスナップショットがあればそれら（図４の例では時間ｔ１におけるスナップショット）とを含めた、ソース・データの各スナップショットを共有するので、時間ｔ４におけるクローンのスナップショットは、共有スナップショットが作成された後に修正されたデータ（論理オフセット４におけるＤ）を含む。クローンは今や、ソースからクローニングしたデータ値Ｂおよびデータ値Ａを含み（ソース・データの共有スナップショットに戻るポインタを介して）、また、クローン作成後にクローンに書き込まれてクローンのスナップショット中で取り込まれたデータ値Ｄも含む。ソース・データは、データＤがクローンに書き込まれたこと、および／またはクローンのスナップショット中で取り込まれたことを意識していないことに留意されたい。
【００４０】
クローンのスナップショットの読取りを実施するには、まず、スナップショットのインデックスがアクセスされる。所望のデータがクローンのスナップショット・インデックス中にない場合は、クローンのスナップショットが時間を遡ってトラバース（検証）される。クローンのスナップショット・インデックスのうちの１つが、要求されたデータの論理ブロック・オフセットについてのマッピングを含む場合は、対応する物理アドレスからデータが読み取られて返される。しかし、クローンのスナップショット・インデックスのいずれにも所望のデータがない場合は、ソースのスナップショットが、クローンの基礎であった共有スナップショットから、時間を遡ってトラバースされる（すなわち、要求されたデータへのマッピングがソース・メタデータの共有スナップショット中で見つからない場合は、次に古いスナップショットへのリンクがトラバースされて検索され、以下同様となる）。第１の例では、クローンに対する読取操作が、オフセット４に関連する現在データを要求すると仮定する。まず、クローンの唯一のスナップショット、すなわち時間ｔ４におけるスナップショット内で、オフセット４に関連するデータへのマッピングが検索される。時間ｔ４におけるクローンのスナップショット中で、オフセット４に関連するマッピングが見つかり、検索は終了し、クローンのスナップショット・インデックスからのデータを使用して要求が処理される。第２の例では、クローンに対する読取操作が、オフセット１に関連するデータを要求すると仮定する。まず、クローンの唯一のスナップショット、すなわち時間ｔ４におけるスナップショット内で、オフセット１に関連するデータへのマッピングが検索される。クローンの唯一のスナップショット、すなわち時間ｔ４におけるスナップショット中でマッピングが見つからず、したがって、時間ｔ４におけるクローンのスナップショットから共有スナップショットへのリンク（例えば、記憶済みの関連付けデータ）がトラバースされ、共有スナップショット、すなわち時間ｔ２におけるスナップショット内の検索が実施される。共有スナップショット中でマッピングが見つからず、したがって、共有スナップショットから、次に古いスナップショット、すなわち時間ｔ１におけるスナップショットへのリンクがトラバースされ、時間ｔ１におけるスナップショット内の検索が実施される。ソース・データの時間ｔ１におけるスナップショット中で、オフセット１に関連するマッピングが見つかり、検索は終了し、時間ｔ１におけるスナップショットを使用して要求が処理される。したがって、ソース・データの時間ｔ１におけるスナップショット中で見つかったマッピングを使用して、クローンに対する読取操作が処理される。第２の例に示すように、メタデータ（例えばスナップショット）が非クローンとそのクローンとの間で共有されてよく、したがって、いくつかの例では、ソース・データに関連するメタデータによって、クローンに対する読取操作を処理することができる。
【００４１】
図５は、ソース・システムおよび宛先システムに記憶できるスナップショットの例を示す図である。この例に示すように、他のスナップショット（例えばそのインデックス）に対する様々な異なる依存関係（例えば、それらにリンクする、それらをポイントする、または他の方法でそれらを参照する）を有するスナップショット（例えばそのインデックス）を、ソース・システムおよび宛先システムに記憶することができる。ソース・システムにも示されている次のスナップショット・シーケンスを考えてみる。
【００４２】
ｔ３→ｔ２→ｔ１
【００４３】
ここで、時間ｔ３におけるスナップショットは、その次に古い時間ｔ２におけるスナップショットにリンクされ、時間ｔ２におけるスナップショットは、その次に古い時間ｔ１におけるスナップショットにリンクされる。
【００４４】
時間ｔ１におけるスナップショットは、時間の始めから時間ｔ１まで（時間ｔ１を含む）にストレージ・システムに加えられた全ての変更を含む。
【００４５】
時間ｔ２におけるスナップショットは、時間ｔ２まで（時間ｔ２を含む）に、ただし時間ｔ１の後に加えられた変更を含む。
【００４６】
時間ｔ３におけるスナップショットは、時間ｔ３まで（時間ｔ３を含む）に、ただし時間ｔ２の後に加えられた変更があればそれらを含む。
【００４７】
この変更のセットが与えられれば、時間ｔ１、ｔ２、またはｔ３におけるデータの状態を、それらに対応するスナップショットを用いて再現することができる。
【００４８】
スナップショットを複製するとき、多くの従来アプローチは、各時点におけるデータの状態を「展開」する。いくつかの実施形態では、ある時点におけるデータの展開状態は、その時点において存在するかまたはアクセスされうる全てのデータ値を含み、通常、同じ時点におけるデルタ表現よりもはるかに長い（デルタ表現は、次に古いスナップショットが生成された後に加えられた変更のみを含む）。したがって、これらの従来アプローチは、デルタのみを送信するのではなく、時間ｔ１におけるデータの完全な展開状態を送信し、次いで時間ｔ２におけるデータの展開状態を送信し、以下同様にする。データの展開状態を送信する結果、デルタのみが送られる場合よりもはるかに多くの状態情報が送信され記憶される。他の従来システムは、状態間のデルタのみを送るが、デルタが時間順に、この例では最初にｔ１、次いでｔ２、次いでｔ３の順に、送られることを必要とする。さらに他の従来システムは、スナップショットおよびクローンを複製する際に用いることのできる順序とサブセットとのいずれかにおいて、他の重大な制約を課す場合がある。
【００４９】
特に、従来システムの順序付け制約のせいで、ｔ１をスキップすること、もしくはｔ１をｔ２の後で送ることは不可能である場合があり、または、ｔ１がｔ２の後で送られる場合は、デルタとしてではなく展開後にしか送ることができず、ｔ２がｔ１の前に送られる場合は、デルタとしてではなく展開後にしか送ることができない場合がある。同様に、いくつかの従来システムでは、宛先上でｔ２を削除し、次いでｔ３をデルタとしてソースから送ることは不可能である場合がある。いくつかの従来システムは、ｔ２が再び送られるまで、より新しいスナップショットを複製することができない場合がある。
【００５０】
いくつかの従来システム上では、ソースと宛先との間で複製するためのデルタを生成するのに使用できる共通のスナップショットがない限り、複製を継続することが全く不可能である場合がある。上の例で、ソースがｔ３およびｔ２のみを有し、宛先がｔ１のみを有する（ｔ２は宛先から削除される）と仮定すると、ｔ３をその最小限の形で複製するのは不可能な場合がある。共通のスナップショットを再確立するには通常、前に宛先上で削除されたスナップショットを、場合によっては完全に展開された形で、再送する必要がある。この場合、ｔ２を宛先に再送する必要があるであろう。
【００５１】
さらに他の従来システム上では、データ・ポイントを失わずに複製を継続するのは不可能である場合がある。ソース・システムが時間ｔ３におけるスナップショットを有し、宛先が時間ｔ１におけるスナップショットを有するシステムを考えてみる。共通のスナップショットも、ソース・システムが送ることのできるインクリメンタルなデルタもないので、ｔ３とｔ１とのいずれかを削除することなく複製を継続するのは不可能である場合がある。
【００５２】
前述のように、クローンは、「共有スナップショット」インデックスに依存する（例えば、それにリンクする、それをポイントする、または他の方法でそれを参照する）インデックスとして、表すことができる。図５に示す例では、時間ｔ２におけるスナップショットから、クローンｃ１が作成される。
【００５３】
スナップショットは、任意の数のクローンによって共有されてよく、クローン自体がスナップショットを有することができ、これらのスナップショットは他のクローンによって共有されてよい。図５に示す例では、時間ｔ１におけるスナップショットからクローンｃ１１が作成され、ｃ１１から他のクローンｃ１０およびｃ３が作成されてよい。
【００５４】
スナップショットと同様、ほとんどの従来型のアプローチは、クローンを展開状態として複製するか、または、クローン複製の際に用いることのできるサブセットまたは順序に対して制限を課す。特に、クローンが複製されると、これらのクローンはもはや共有スナップショットからのデルタとしては表されず、したがって、複製宛先において、データおよびメタデータのためにはるかに多くの空間を使用する。
【００５５】
スナップショットとクローニングと複製とを含む使用事例および操作の、完全なセットを考えることは、複雑である。例えば、スナップショットおよびクローンのセットを複製し、複製されたコピーからクローニングし、新しいクローンからスナップショットおよびクローンを作成し、次いで、これらの新しいスナップショットおよびクローンを複製して元のストレージ・システムに戻すことができる。特に、このようなスナップショットに源を発するかまたはこのようなスナップショットから後で導出されたスナップショットを複製して元のシステムに戻すことには、制約がある場合がある。他の際には、元のまたは導出されたスナップショットを複製して元のシステムに戻す結果として、最小限の表現が失われる場合がある。
【００５６】
従来システムが次の２つの特徴をサポートする場合、追加の複雑さが生じる。
【００５７】
スナップショットおよびクローンを、それらが作成された厳密な順序ではなく任意のサブセットまたは順序で複製すること。
【００５８】
スナップショットおよびクローンを、それらの複製ステータスにかかわらず任意の順序で削除すること。
【００５９】
このような条件下で、スナップショットおよびクローンを複製および記憶するための最小限の表現を保存することは、極めて困難である。
【００６０】
本明細書に記載の実施形態によれば、スナップショットおよびクローンの複製を、変更またはデルタとして表される最小限の量の情報を使用して実施することができ、また、複製するストレージ・システム間で伝送および記憶することができる。以下では、一般性を失うことなく、用語「スナップショット」は、非クローン・スナップショットおよびクローン・スナップショットをまとめて指す。しかし、用語「クローン」は、非クローン・スナップショットではなくクローン・スナップショットを特に指す。
【００６１】
図６は、ストレージ・システム間でスナップショットの複製を実施するためのシステムの一実施形態を示す図である。この例に示すように、システム６００は、第１のストレージ・システム６０２、ネットワーク６０４、第２のストレージ・システム６０６、およびスナップショット複製システム６０８を含む。ネットワーク６０４は、高速データ・ネットワークおよび／または遠隔通信ネットワークを含む。いくつかの実施形態では、第１のストレージ・システム６０２および第２のストレージ・システム６０６の各々は、図１のシステム１００のストレージ・システム１０２を用いて実装される。第１のストレージ・システム６０２および第２のストレージ・システム６０６は、ネットワーク６０４を介して、相互におよびスナップショット複製システム６０８に通信することができる。
【００６２】
第１のストレージ・システム６０２および第２のストレージ・システム６０６は、同じデータ・セットに関連する対応するスナップショット・シーケンスをそれぞれ記憶することができる。例えば、データ・セットは、ＶＭ、Ｖディスク、またはファイルに関連するものである場合がある。ある例示的なシナリオでは、第１のストレージ・システム６０２と第２のストレージ・システム６０６の両方が、同じデータ・セットに関連するスナップショットを維持することになるが、このシナリオでは、第１のストレージ・システム６０２は生産システムに関連し、構成された間隔ごとにデータ・セットのスナップショットを生成するように構成される。第１のストレージ・システム６０２は、新たに作成された各スナップショットのコピーを記憶し、バックアップ・システムである第２のストレージ・システム６０６にスナップショットのコピーを送ることになる。
【００６３】
しかし、第１のストレージ・システム６０２と第２のストレージ・システム６０６とは両方とも、同じデータ・セットに関連する対応するスナップショット・インデックス・シーケンスをそれぞれ記憶することができるが、第１のストレージ・システム６０２と第２のストレージ・システム６０６との各々は、同じデータ・セットについて、必ずしも同じポイント・イン・タイム・データ状態を表すスナップショット・インデックスを記憶するとは限らない。例えば、上記と同じシナリオで、生産システムである第１のストレージ・システム６０２は、その記憶済みスナップショットの少なくともいくつかについては、第２のストレージ・システム６０６よりも短い保持ポリシを有する場合がある（例えば、生産システムではストレージ空間がより乏しいので）。したがって、生産システムである第１のストレージ・システム６０２は、その記憶済みスナップショット・シーケンス中で、削除予定のスナップショットのインデックスを隣接スナップショットのインデックスにマージし、次いで、削除予定のスナップショットのインデックスを削除することがある。スナップショット・インデックスのシーケンスからスナップショット・インデックスを削除した後、第１のストレージ・システム６０２において、このスナップショット・インデックスの除去に適応するように、削除されたスナップショット・インデックスに前に隣接していたスナップショット・インデックスに関連する記憶済みの物理的依存関係を変更することができる。生産システムである第１のストレージ・システム６０２は、そのシーケンスからスナップショット・インデックスを削除した（例えば、このスナップショットに関連する保持ポリシを施行するために）かもしれないが、バックアップ・システムである第２のストレージ・システム６０６は、このスナップショットのコピーをまだ維持することができる。生産システムである第１のストレージ・システム６０２がそのスナップショット・シーケンスからスナップショットを削除した後しばらくして、削除されたスナップショットを第１のストレージ・システム６０２で複製して戻すことが望まれることがある。例えば、災害復旧の場合、または、スナップショットに関連する、より前のポイント・イン・タイム・データ状態への逆戻りが望まれる場合に、ストレージ・システムでスナップショットが複製されることが望まれることがある。したがって、所望のスナップショットに関連するポイント・イン・タイム・データ状態を第１のストレージ・システム６０２で表すのに使用できるスナップショット・データのセット（例えばインデックス）を、バックアップ・システムである第２のストレージ・システム６０６から、生産システムである第１のストレージ・システム６０２に送ることができる。いくつかの実施形態では、スナップショット・データのセットは、ソース・システム（この例では第２のストレージ・システム６０６）に記憶された２つのスナップショット・インデックス間のデルタを含む。後でさらに詳細に述べるように、第２のストレージ・システム６０６によって送られたスナップショット・データのセットを使用して、所望のスナップショットに関連するポイント・イン・タイム・データ状態を表すためのスナップショット・インデックスを生成することができ、次いで、このスナップショット・インデックスを、第１のストレージ・システム６０２に記憶されたスナップショット・インデックスのシーケンスに挿入することができる。同様に、所望のスナップショットを、第１のストレージ・システム６０２から複製し、第２のストレージ・システム６０６に記憶されたスナップショットのシーケンスに挿入することもできる。
【００６４】
あるシステムから別のシステムにスナップショットを複製するとき、順序付け、すなわち、異なるシステムによって維持されるスナップショット間の新旧関係を、各スナップショットに関連する識別情報を使用して推定することができる。各スナップショットに関連する識別情報の例には、次のものが含まれる。
【００６５】
各スナップショットに関連する「スナップショット・グローバルＩＤ」は、次の２つの識別子の組合せ（例えば連結）を含む。すなわち、１）「作成側ファイル・システムＩＤ」、および、２）「作成側スナップショットＩＤ」である。「作成側ファイル・システムＩＤ」は、スナップショットを作成したストレージ・システムの、（例えば６４ビットの）グローバルな一意の識別子を含む。いくつかの実施形態では、いくつかの異なるストレージ・システムが、データ・セットに関連するスナップショットを記憶することができるが、このデータ・セットからクローンを作成したストレージ・システムのみが、このクローンについての新しいスナップショットを生成することができる。しかし、他のストレージ・システムは、前述のクローンのスナップショットに基づいて新しいクローンを作成し、この新しいクローンについての新しいスナップショットを作成することができる。図６において、いくつかの実施形態では、第１のストレージ・システム６０２と第２のストレージ・システム６０６とは両方とも、同じデータ・セットに関連する対応するスナップショット・シーケンスをそれぞれ記憶することができるが、この例では、第１のストレージ・システム６０２のみが、このデータ・セットについての新しいスナップショットを生成することができると仮定する。「作成側スナップショットＩＤ」は、新しいスナップショットがストレージ・システム上で作成されるたびにインクリメントされるカウンタを記憶することによって決定される、（例えば６４ビットの）識別子を含む。したがって、より新しいスナップショットはまた、同じストレージ・システムによって作成されたより古いスナップショットよりも高い作成側スナップショットＩＤを有することになる。スナップショットの「スナップショット・グローバルＩＤ」は、スナップショットに関連する時点におけるデータ・セットの「展開」状態を一意に識別する。すなわち、同じスナップショット・グローバルＩＤを有する、２つの異なるストレージ・システム上のスナップショットの２つの「コピー」は、同じ展開状態に対応する。しかし、同じスナップショット・グローバルＩＤに関連するスナップショットは、異なるストレージ・システムでは、これらのストレージ・システムに記憶された同じシーケンスの他のスナップショットに応じて、異なる物理表現（例えばインデックス）を使用して表されることがある。例えば、作成側ファイル・システムＩＤ「ＰＲＯＤＵＣＴＩＯＮ１」を有するストレージ・システムが、それぞれの作成側スナップショットＩＤ「Ｓ１、「Ｓ２」、および「Ｓ３」を有するスナップショットのシーケンスを作成した場合は、スナップショットのシーケンスのスナップショット・グローバルＩＤは「ＰＲＯＤＵＣＴＩＯＮ１−Ｓ１」、「ＰＲＯＤＵＣＴＩＯＮ１−Ｓ２」、および「ＰＲＯＤＵＣＴＩＯＮ１−Ｓ３」になると仮定する。これらのスナップショットのうちの１つまたは複数が削除されたとしても、スナップショット・グローバルＩＤの使用により、任意のストレージ・システムまたはスナップショット複製システム６０８が、３つのスナップショットの順序付け関係を決定することができる。スナップショット・グローバルＩＤを管理することで、各ストレージ・システムは、「次に新しい」関係のグラフを構築することができ、このグラフは、スナップショットを展開状態ではなくデルタとして効率的に複製および記憶するのに使用することができる。
【００６６】
各スナップショットに関連する「スナップショット・ファイル・グローバルＩＤ」は、次の３つの識別子の組合せ（例えば連結）を含む。すなわち、１）「作成側ファイル・システムＩＤ」、２）「作成側スナップショットＩＤ」、および、３）「ファイル・グローバルＩＤ」である。「スナップショット・ファイル・グローバルＩＤ」の「作成側ファイル・システムＩＤ」および「作成側スナップショットＩＤ」は、前述の「スナップショット・グローバルＩＤ」の場合と同じである。「ファイル・グローバルＩＤ」は、スナップショットが関連するデータ・セットの識別子を含む。例えば、ファイル・グローバルＩＤは、スナップショットが関連する前述のデータ・セットのいずれかの、特定のファイルまたはＶディスクまたはクローニングされたファイルを識別することができる。ファイル・グローバルＩＤを使用して、どのスナップショットがどのスナップショット・シーケンスおよび／またはメタデータ・セットに属するかを決定することができる。例えば、同じ作成側ファイル・システムＩＤに関連するが、異なる作成側スナップショットＩＤに関連する２つのスナップショットのファイル・グローバルＩＤは、２つのスナップショットが２つの異なるスナップショット・シーケンスに属し、一方は特定のＶＭに属し他方はこのＶＭのクローンに属する、と決定する助けとなることができる。
【００６７】
第１のストレージ・システム６０２および第２のストレージ・システム６０６の各々に記憶された各スナップショットに関連する前述の識別情報は、第１のストレージ・システム６０２、第２のストレージ・システム６０６、およびスナップショット複製システム６０８のうちの１つまたは複数によって記憶されてよい。識別情報を、第１のストレージ・システム６０２、第２のストレージ・システム６０６、およびスナップショット複製システム６０８のうちの少なくとも１つによって使用して、どのスナップショットがどのシステムに記憶されているかを決定することができ、また、スナップショットの順序付けを推定することもできる。したがって、どのストレージ・システムがスナップショットを作成したか、および／またはスナップショットが複製される順序にかかわらず、このような識別情報を使用して、第１のストレージ・システム６０２から第２のストレージ・システム６０６への、およびその逆の、スナップショットの複製を実施することができる。このような識別情報を使用してまた、スナップショットをシステムに記憶されたシーケンス中に複製するときに、このシステムにおけるシーケンス中のスナップショット間の新旧関係を保存することができる。スナップショット複製システム６０８は、必ずしもスナップショットを記憶しなくてもよいが、所望のスナップショットを宛先システムで複製するためにソース・システムから宛先システムに送られるべきスナップショット・データのセットを決定するように構成されてよい。
【００６８】
スナップショットが常に最も効率的な方式で複製されることを保証するために、スナップショットが全てのシステムから削除されたときにのみ、識別情報を刈り込むことができる。しかし、いくつかの実施形態では、いくらかの情報は、その情報を保持する利益が低いと見なされるときには刈り込むことができる。
【００６９】
以下の様々な例では、例示の目的で、全てのスナップショットが同じ作成側ファイル・システムＩＤおよびファイル・グローバルＩＤに関連すると仮定し（別途明記されない限り）、したがって、スナップショットからアクセス可能な展開状態（すなわちポイント・イン・タイム・データ状態）は、作成側スナップショットＩＤによって一意に示され、作成側スナップショットＩＤは、「時間ｔにおけるスナップショット＜作成側スナップショットＩＤ＞」または「ｔにおけるスナップショット＜作成側スナップショットＩＤ＞」のフォーマットで書かれたものとすることができる。
【００７０】
図７は、同じ展開データ状態に関連するスナップショット・インデックスが、異なるストレージ・システムでどのように異なる場合があるかに関する例を示す図である。この例では、第１のシステムは、特定のデータ・セット（例えば、ＶＭ、Ｖディスク、またはファイル）に関連する３つのスナップショットのシーケンスを記憶し、第２のシステムは、同じデータ・セットに関連する２つのスナップショットのシーケンスを記憶する。各スナップショットは、論理オフセット（例えば１、２、３、または４）を、対応する物理オフセットに記憶されたデータ値にマッピングするインデックスとして表される。
【００７１】
第１のシステムからアクセスできるデータ・セットの展開状態（すなわちポイント・イン・タイム状態）は、時間ｔ１におけるスナップショット、時間ｔ２におけるスナップショット、および時間ｔ３におけるスナップショットを含む。図７の例に示すように、第１のシステムにおける、時間ｔ１におけるスナップショット、時間ｔ２におけるスナップショット、および時間ｔ３におけるスナップショットに関連するそれぞれのインデックスの各々は、次に古いスナップショットにリンクし返す（例えば、物理的に依存する）（例えば、時間ｔ３におけるスナップショットは時間ｔ２におけるスナップショットにリンクし、時間ｔ２におけるスナップショットは時間ｔ１におけるスナップショットにリンクする）。
【００７２】
第２のシステムからアクセスできるデータ・セットの展開状態（すなわちポイント・イン・タイム状態）は、時間ｔ１におけるスナップショット、および時間ｔ３におけるスナップショットを含む。例えば、第２のシステムは、時間ｔ２におけるスナップショットのコピーを前に記憶したが、次いで、時間ｔ２におけるスナップショットを削除することを決定した場合がある。第２のシステムは、時間ｔ２におけるスナップショットのそのコピーを削除する前に、時間ｔ２におけるスナップショットに関連するインデックスからのデータを、時間ｔ３におけるそのスナップショットに関連するインデックス７０４にマージした。したがって、第２のシステムに記憶された時間ｔ３におけるスナップショットに関連するインデックス７０４は、時間ｔ２におけるスナップショットからのデータ（例えば、データ値Ｂへのオフセット２のマッピング）を含み、また、第２のシステムにおける、時間ｔ１におけるスナップショットに関連するインデックスにリンクするように修正される。
【００７３】
第１と第２のシステムは両方とも、時間ｔ３におけるスナップショットからアクセス可能なデータ・セットの展開状態を記憶しているが、各システムに異なるスナップショットが存在するので、２つのシステムの各々で時間ｔ３におけるスナップショットを表すのに使用されるそれぞれのスナップショット・インデックスは異なることに留意されたい。第１のシステムに記憶された時間ｔ３におけるスナップショットは、インデックス７０２によって表され、第２のシステムに記憶された時間ｔ３におけるスナップショットは、インデックス７０４によって表される。第１のシステムにおける、時間ｔ３におけるスナップショットのインデックス７０２は、データ値Ｃへのオフセット３のマッピングのみを含むが、このインデックス７０２は、第２のシステムにおける、時間ｔ３におけるスナップショットのインデックス７０４とは異なり、インデックス７０４は、データ値Ｂへのオフセット２のマッピング、およびデータ値Ｃへのオフセット３のマッピングを含む。というのは、時間ｔ３におけるスナップショットのインデックス７０２は、時間ｔ２におけるスナップショットに関連するインデックスにリンクし、一方、時間ｔ３におけるスナップショットのインデックス７０４は、時間ｔ１におけるスナップショットに関連するインデックスにリンクするからである。このように、異なるシステムに、同じデータ・セットに関連する異なるスナップショット（例えば、したがって、スナップショット間における異なる依存関係）が存在するせいで、同じ展開状態に関連するスナップショットが、異なるシステムで異なるインデックスを使用して表される場合がある。
【００７４】
以下の様々な例で述べるように、スナップショットが宛先システムで複製され、宛先システムにおける既存のスナップショット・シーケンスに挿入された後、ソース・システムと宛先システムは両方とも、このスナップショットのコピーを記憶していることになるが、各システムは、システムが記憶している他のスナップショットに応じて、このスナップショットを表すための異なる物理表現（例えばインデックス）を記憶する場合がある。
【００７５】
図８は、ソース・システムから宛先システムに対する選択されたスナップショットの複製を実施するプロセスの一実施形態を示す流れ図である。いくつかの実施形態では、プロセス８００のソース・システムおよび宛先システムは、それぞれ図６のシステム６００の第１のストレージ・システム６０２および第２のストレージ・システム６０６、またはそれぞれ第２のストレージ・システム６０６および第１のストレージ・システム６０２を使用して、実装されてよい。いくつかの実施形態では、プロセス８００は、図６のシステム６００の第１のストレージ・システム６０２、第２のストレージ・システム６０６、またはスナップショット複製システム６０８で実装される。
【００７６】
８０２において、第１の時点におけるデータ・セットの状態を宛先システムで表すためのスナップショット・データを宛先システムに記憶する要求が受信される。第１の時点におけるデータ・セットの状態をソース・システムで表す第１のソース・システム・スナップショット・データは、第２の時点におけるデータ・セットの状態をソース・システムで表す第２のソース・システム・スナップショット・データに依存する。
【００７７】
例えば、対応する時点（すなわち展開状態）によって識別される、ソース・システムに記憶されたスナップショット（例えば、スナップショット・グローバルＩＤやスナップショット・ファイル・グローバルＩＤなどの識別情報に関連する）が、宛先システムで複製されるように選択される（例えば、システム管理者および／またはコンピュータ・プログラムによって）。ソース・システムにおける選択されたスナップショットのスナップショット・データ（例えば、インデックスまたは他のタイプの物理表現）は、ソース・システムに記憶されているスナップショット・データ（例えばインデックス）のシーケンス中の、次に古いスナップショットのスナップショット・データ（例えば、インデックスまたは他のタイプの物理表現）に依存する。選択されたスナップショットのスナップショット・インデックスが、次に古いスナップショットのスナップショット・インデックスに依存することは、選択されたスナップショットのスナップショット・インデックスに記憶されたデータが、次に古いスナップショットのスナップショット・インデックスの生成時に対して、新しい／修正されたデータを含むことを示す。いくつかの実施形態では、選択されたスナップショットは、特定の時間順で複製される必要はない。言い換えれば、選択されたスナップショットが複製されるのは、次に古いスナップショットが複製された後でなければならない必要はない。
【００７８】
８０４において、第１の時点におけるデータ・セットの状態を宛先システムで表すためのスナップショット・データが決定される。このスナップショット・データは、第１のソース・システム・スナップショット・データと、第３の時点におけるデータ・セットの状態を宛先システムで表す宛先システム・スナップショット・データとを含むデータに、少なくとも部分的に基づいて決定される。
【００７９】
宛先システムにおける既存のスナップショットの時点（すなわち展開状態）を識別して（例えば、記憶済みの識別情報を使用して）、ソース・システムにおける選択されたスナップショットと、宛先システムにおける既存のスナップショットとの間の、新旧関係、および／または時点差関係を決定する助けとすることができる。このような順序付け関係を使用して、どのように（例えば効率的に）データをソース・システムから送って選択されたスナップショットを宛先システムで複製することができるかを決定することができる。ソース・システムから宛先システムに送られると決定されたスナップショット・データ（例えばインデックス）は、メタデータ（例えば、基礎をなすデータへの論理マッピング）と、基礎をなすデータとを含むことができる。様々な実施形態で、ソース・システムから宛先システムに送られると決定されたスナップショット・データは、選択されたスナップショットのスナップショット・インデックスと、ソース・システムに記憶された別のスナップショットのスナップショット・インデックスと、に少なくとも部分的に基づいて決定されたデルタを含む。例えば、この別のスナップショットは、選択されたスナップショットが依存する（例えばリンクする）スナップショットであってよい。従来行われているように、スナップショット・データ（例えばインデックス）間のデルタを送ることは、スナップショットの展開状態を送るよりもはるかに効率的である。いくつかの場合では、より古いスナップショットではなくより新しいスナップショットと比較することによって、より小さいデルタを生み出すことができる。いくつかの実施形態では、スナップショット・データを宛先システムにおける既存のスナップショット・シーケンスに挿入することは、スナップショット・データに対して既存のスナップショットのスナップショット・インデックスからエントリを除去すること（リファクタリング、これについては後でさらに詳細に述べる）、新しいスナップショット・データ（例えばインデックス）を宛先システムにおけるスナップショット・データ・シーケンスに追加して、選択されたスナップショットに関連するポイント・イン・タイム・データ状態を宛先システムで表すこと、および／または、新しいスナップショット・インデックスの追加に適応するように、宛先システムにおけるスナップショット・データ・シーケンスにおいてスナップショット・インデックスの依存関係を変更すること、を含む。
【００８０】
図９Ａおよび９Ｂは、時間ｔ２におけるスナップショットをソース・システムから宛先システムに複製する例を示す図である。図９Ａに示すように、ソース・システムにおけるスナップショット・シーケンスは、時間ｔ１におけるスナップショットにリンクする、時間ｔ２におけるスナップショットを含む。時間ｔ２におけるスナップショットは、ソース・システムでインデックス９０４によって表されることに留意されたい。また、図９Ａに示すように、時間ｔ２におけるスナップショットが複製される前、宛先システムにおけるスナップショット・シーケンスは、時間ｔ１におけるスナップショットにリンクする、時間ｔ３におけるスナップショットを含む。時間ｔ２におけるスナップショットが複製される前、時間ｔ３におけるスナップショットは、宛先システムでインデックス９０２によって表されることに留意されたい。時間ｔ２におけるスナップショットの複製前、時間ｔ３におけるスナップショットのインデックス９０２は、時間ｔ３まで（時間ｔ３を含む）かつｔ１後の全ての変更を含み、これは、データ値Ａ（時間ｔ３で記憶された）へのオフセット１のマッピング、およびデータ値Ｃ（時間ｔ２で記憶された）へのオフセット３のマッピングを含む。時間ｔ３におけるスナップショットの複製を実施する際、宛先システムで、時間ｔ２におけるスナップショットに関連するインデックスが、時間ｔ３におけるスナップショットと時間ｔ１におけるスナップショットとの間で「スプライス（ｓｐｌｉｃｅ）」されることが必要になる。様々な実施形態で、「スプライシング（ｓｐｌｉｃｉｎｇ）」は、スナップショットがスナップショット・シーケンスに挿入されるためのプロセスである。スナップショットは、シーケンスの２つの既存スナップショット間の中間スナップショットとして、またはシーケンス中の最も新しいスナップショットとして、またはシーケンス中の最も古いスナップショットとして、スプライスされる可能性がある。スプライシングは、スプライスされるスナップショットにシーケンス中で隣接することになるより新しい既存スナップショットを、スプライスされるスナップショットに依存させる（例えば、それにリンクさせる、それをポイントさせる、かつ／または他の方法でそれを参照させる）ように、スナップショット間の物理的依存関係を変更することを含む。スプライシングはまた、スプライスされるスナップショットを、スプライスされるスナップショットにシーケンス中で隣接することになるより古い既存のスナップショットに依存させることを含む。
【００８１】
ソース・システムと宛先システムとのいずれかもしくは両方、および／または第３のシステム（例えばスナップショット複製システム）によって記憶された識別情報から、どの時点（例えば展開状態）に関連するスナップショットがすでに宛先システムに記憶されているか、およびそれらが選択されたスナップショットに対してシーケンス中でどの順序になるかを決定することができる。宛先システムが時間ｔ１におけるスナップショットをすでに記憶していることを考えれば、ソース・システムから宛先システムに送信するデータの量を最小限に抑えるために、ソースは、ソース・システムにおける時間ｔ２におけるスナップショットと、ソース・システムにおける時間ｔ１におけるスナップショットとの間のデルタを送ることができる。ソース・システムにおける時間ｔ２におけるスナップショットと時間ｔ１におけるスナップショットとの間のこのデルタは、図９Ｂのインデックス９０４によって表すことができる。（ソース・システムにおける時間ｔ２におけるスナップショットに関連するインデックス９０４が、時間ｔ１におけるスナップショットの生成以後の変更のみをすでに含むことを考えれば、したがって、ソース・システムにおける時間ｔ２におけるスナップショットと、ソース・システムにおける時間ｔ１におけるスナップショットとの間のデルタは、ソース・システムにおける時間ｔ２におけるスナップショットを表すために使用されるインデックスと同じである。）
【００８２】
インデックス９０４によって表される、ソース・システムにおける時間ｔ２におけるスナップショットと時間ｔ１におけるスナップショットとの間のデルタは、ソース・システムから宛先システムに送られ、宛先システムで、既存のスナップショット・シーケンス中の時間ｔ３におけるスナップショットと時間ｔ１におけるスナップショットとの間にスプライスされて、時間ｔ２におけるスナップショットが表される。宛先システムにおける、時間ｔ３におけるスナップショットのインデックス９０２は、時間ｔ３まで（時間ｔ３を含む）かつｔ１後の全ての変更を含んでいたので、宛先システムでインデックス９０４が挿入された後、宛先システムで、時間ｔ３におけるスナップショットを表すインデックス９０２と時間ｔ２におけるスナップショットを表すインデックス９０４との間の冗長エントリを、インデックス９０２から除去する必要がある。したがって、本明細書に記載の複製は、宛先で複製スナップショット・データを「リファクタリング」することによって、宛先システム上にすでに存在するスナップショットを利用することができる。様々な実施形態で、「リファクタリング」は、宛先システムの複製スナップショットと既存の隣接スナップショットとの間で、より新しいスナップショットとより古いスナップショットとのいずれかから冗長メタデータ・エントリが除去されるためのプロセスである。冗長エントリはしばしば、異なるシステムでスナップショットが複製されて既存のスナップショット・シーケンスにスプライスされるときに、生み出される。複製スナップショット、および隣接する既存のより新しいまたはより古いスナップショットは、複製スナップショットと同じエントリをいくつか含むことになる場合があり、それにより、複製スナップショットまたはそれに隣接する既存スナップショットの、インデックス中の共有エントリが冗長になる。図９Ｂに示すように、宛先で時間ｔ２におけるスナップショットが複製された後、データ値Ｃへのオフセット３のマッピングに関連するエントリは、宛先システムにおける時間ｔ３におけるスナップショットを表すインデックス９０２から除去される。というのは、同じエントリが、宛先システムにおけるより古い既存スナップショット、すなわち時間ｔ２におけるスナップショットを表すインデックス９０４中にすでに存在するからである。
【００８３】
複製後、宛先システムでは、スナップショット・シーケンスは、時間ｔ３におけるスナップショット（時間ｔ２におけるスナップショットにリンクするように修正された）と、時間ｔ２におけるスナップショット（時間ｔ１におけるスナップショットにリンクするように修正された）と、時間ｔ１におけるスナップショットとを含む。このように、宛先システムへのスナップショットの複製は、宛先システムにおけるシーケンスのスナップショット間の物理的依存関係を修正することができる。
【００８４】
図１０Ａおよび１０Ｂは、時間ｔ３におけるスナップショットをソース・システムから宛先システムに複製する例を示す図である。図１０Ａに示すように、ソース・システムにおけるスナップショット・シーケンスは、時間ｔ１におけるスナップショットにリンクする、時間ｔ３におけるスナップショットを含む。また、図１０Ａに示すように、時間ｔ３におけるスナップショットが複製される前、宛先システムにおけるスナップショット・シーケンスは、時間ｔ１におけるスナップショットにリンクする、時間ｔ２におけるスナップショットを含む。時間ｔ３におけるスナップショットは、ソース・システムでインデックス１００２によって表されることに留意されたい。時間ｔ３におけるスナップショットの複製前、時間ｔ３におけるスナップショットのインデックス１００２は、時間ｔ３まで（時間ｔ３を含む）かつｔ１後の全ての変更を含み、これは、データ値Ａ（時間ｔ３で記憶された）へのオフセット１のマッピング、およびデータ値Ｃ（時間ｔ２で記憶された）へのオフセット３のマッピングを含む。時間ｔ３におけるスナップショットの複製を実施する際、宛先システムで、時間ｔ３におけるスナップショットに関連するインデックスが、時間ｔ２におけるスナップショットにリンクするように「スプライス」されることが必要になる。
【００８５】
ソース・システムと宛先システムとのいずれかもしくは両方、および／または第３のシステム（例えばスナップショット複製システム）によって記憶された識別情報から、どの時点（例えば展開状態）に関連するスナップショットがすでに宛先システムに記憶されているか、およびそれらが選択されたスナップショットに対してシーケンス中でどの順序になるかを決定することができる。理想的には、ソース・システムは、時間ｔ３におけるスナップショットと時間ｔ２におけるスナップショットとの間のデルタを生成することになるが、ソースは、時間ｔ２におけるスナップショットを有さない。この場合、ソースは、時間ｔ１におけるスナップショット、すなわち、ソース・システムと宛先システムの両方に記憶されている、時間ｔ３におけるスナップショットよりも古い一番最近のスナップショットに対して、デルタを生成することができる。時間ｔ３におけるスナップショットと時間ｔ１におけるスナップショットとの間のこのデルタは、図１０Ｂのインデックス１００２によって表すことができる。（ソース・システムにおける時間ｔ３におけるスナップショットに関連するインデックス１００２が、時間ｔ１におけるスナップショットの生成以後の変更のみをすでに含むことを考えれば、したがって、ソース・システムにおける時間ｔ３におけるスナップショットと、ソース・システムにおける時間ｔ１におけるスナップショットとの間のデルタは、ソース・システムにおける時間ｔ３におけるスナップショットを表すのに使用されるインデックスと同じである。）
【００８６】
デルタが宛先で受け取られると、デルタは、宛先システムにおける時間ｔ２におけるスナップショットをポイントするようにスプライスされる。次いで、宛先システムにおける時間ｔ３におけるスナップショットを表すようにリファクタリングされてインデックス１００４が生み出されるが、これは、宛先システムにおける既存のより古いスナップショット（インデックス１００６によって表される、時間ｔ２におけるスナップショット）と共通のエントリを、インデックス１００２を構成するデルタから除去することによって、行われる。図１０Ｂに示すように、宛先で時間ｔ３におけるスナップショットが複製された後、データ値Ｃへのオフセット３のマッピングに関連するエントリが、インデックス１００２を構成するデルタから除去されて、時間ｔ３におけるスナップショットを表すようにインデックス１００４が生み出される。というのは、同じエントリが、時間ｔ２におけるスナップショットを表すインデックス１００６中にすでに存在するからである。
【００８７】
いくつかの実施形態では、宛先システムにおける時間ｔ３における複製スナップショット（すなわち、インデックス１００２を構成するデルタ）を、時間ｔ２におけるスナップショットに対してリファクタリングすることはまた、デルタが宛先で受け取られるのに伴って行われてもよい。言い換えれば、リファクタリングは、スナップショット・データの完全なセット（デルタ）（論理から物理へのオフセット・マッピングと、それらがマッピングする基礎をなすデータとを含む）がソースから宛先に完全に送られる前に実施されてもよい。例えば、図１０Ｂを参照すると、宛先システムにおける時間ｔ２におけるスナップショットを表すインデックス１００６と共通の、デルタ・スナップショット・インデックス１００２の各オフセットにつき、オフセットがポイントする基礎をなすデータをソース・システムから送る前に、デルタ・スナップショット・インデックス１００２中のオフセットによってポイントされる基礎をなすデータに関連するフィンガプリントが、インデックス１００６中の同じオフセットによってポイントされる基礎をなすデータに関連するフィンガプリントと一致するかどうかを決定することができる。２つのフィンガプリントが一致する場合は、２つのオフセット・エントリは冗長であると決定され、したがって、このエントリは、宛先システムで時間ｔ３におけるスナップショットを表すのに使用されるインデックス１００４から除外され、また、冗長オフセットによってポイントされる基礎をなすデータは、ソース・システムから送られない。言い換えれば、複製は、リファクタリングが実施される前に完了する必要はない。
【００８８】
別の実施形態では、宛先システムは、時間ｔ２におけるスナップショットの一時的なコピーをソース・システムに送ることもでき（例えば、時間ｔ２におけるスナップショットと時間ｔ１におけるスナップショットとの間のデルタとして）、ソース・システムは、この一時的なコピーを使用して、時間ｔ３におけるスナップショットと時間ｔ２におけるスナップショットとの間のデルタを生成することができる。次いで、時間ｔ３におけるスナップショットと時間ｔ２におけるスナップショットとの間のデルタが、ソース・システムから送られて、宛先システムで時間ｔ２におけるスナップショットをポイントするようにスプライスされてよい。
【００８９】
図１１Ａおよび１１Ｂは、時間ｔ３におけるスナップショットをソース・システムから宛先システムに複製する別の例を示す図である。この例では、時間ｔ１、ｔ２、およびｔ３におけるスナップショットが、同じスナップショット・シーケンスの一部として逐次的に作成された。いくつかの実施形態では、「共通スナップショット」は、ソース・システムでそれに対してデルタが生成され宛先システムでそれに対してデルタがスプライスされるスナップショットとしての、ポイント・イン・タイム・スナップショットを指す。図１１Ａに示すように、時間ｔ３におけるスナップショットが複製される前、ソースは、時間ｔ３におけるスナップショットおよび時間ｔ１におけるスナップショットのみを有し、宛先は、時間ｔ２におけるスナップショットのみを有する。言い換えれば、時間ｔ３におけるスナップショットが複製される前、ソース・システムと宛先システムとは、時間ｔ２におけるスナップショットの共通スナップショットを有さない。時間ｔ３におけるスナップショットは、ソース・システムでインデックス１１０２として表されることに留意されたい。時間ｔ３におけるスナップショットの複製前、ソース・システムにおける時間ｔ３におけるスナップショットのインデックス１１０２は、時間ｔ３まで（時間ｔ３を含む）かつｔ１後の全ての変更を含み、これは、データ値Ｂ（時間ｔ３において記憶された）へのオフセット２のマッピング、およびデータ値Ｄ（時間ｔ２において記憶された）へのオフセット４のマッピングを含む。時間ｔ３におけるスナップショットの複製を実施する際、宛先システムで、時間ｔ３におけるスナップショットに関連するインデックスが、時間ｔ２におけるスナップショットにリンクするように「スプライス」されることが必要になる。この例では、ソース・システムにおける時間ｔ３におけるスナップショットのインデックス１１０２は、ソース・システムにおける時間ｔ１におけるスナップショットのインデックスに対してリファクタリングされていない。というのは、これらのインデックスは両方とも、データ値Ｂへのオフセット２のマッピングを含むからである。しかし、後でさらに述べるように、時間ｔ２におけるスナップショットの共通スナップショットがソース・システム上と宛先システム上とにないということから、ソース・システムにおける隣接スナップショット・インデックスにある、同じオフセットに関連する同じデータ値を保存し、これらを、ソース・システムでデルタを生成する際に使用することができる。
【００９０】
ソース・システムと宛先システムとのいずれかもしくは両方、および／または第３のシステム（例えばスナップショット複製システム）によって記憶された識別情報から、どの時点（例えば展開状態）に関連するスナップショットがすでに宛先システムに記憶されているか、およびそれらが選択されたスナップショットに対してシーケンス中でどの順序になるかを決定することができる。この場合、ソースは、時間ｔ１におけるスナップショットに対する、時間ｔ３におけるスナップショットのデルタを生成する。時間ｔ３におけるスナップショットと時間ｔ１におけるスナップショットとの間のこのデルタは、図１０Ｂのインデックス１１０２によって表すことができる。（ソース・システムにおける時間ｔ３におけるスナップショットに関連するインデックス１１０２が、時間ｔ１におけるスナップショットの生成以後の変更のみをすでに含むことを考えれば、したがって、ソース・システムにおける時間ｔ３におけるスナップショットと、ソース・システムにおける時間ｔ１におけるスナップショットとの間のデルタは、ソース・システムにおける時間ｔ３におけるスナップショットを表すのに使用されるインデックスと同じである。）ソース・システムと宛先システムとが時間ｔ２におけるスナップショットの共通スナップショットを有さないこの場合では、デルタは、データ値が同じであっても、時間ｔ３とｔ１におけるスナップショット間で修正された全ての「オフセット」を含まなければならないことに留意されたい。特に、同じオフセットが時間ｔ１、ｔ２、およびｔ３におけるスナップショットにおいて修正され、したがって、時間ｔ１とｔ３におけるスナップショット中のデータ値は同じだが、時間ｔ２におけるスナップショット中では異なる、ということがあり得る。このような場合、時間ｔ３とｔ１におけるスナップショット間のデータ値を比較しても変化が検出されないことになるが、時間ｔ３におけるスナップショットを作成するためには、このデータ値がｔ２におけるスナップショットに適用されなければならない。時間ｔ３とｔ１におけるスナップショット間で修正された全てのオフセットを含めることによって、時間ｔ２とｔ１におけるスナップショット間で修正されたどんなオフセットもまた含められるのを確実にすることに留意されたい。
【００９１】
図１１Ａに示すように、ソース・システムでは、時間ｔ１および時間ｔ３におけるスナップショットがオフセット２について同じデータ値Ｂを記憶しているにもかかわらず、時間ｔ１におけるスナップショットが生成されたときと、時間ｔ３におけるスナップショットが生成されたときとの間に、オフセット２が修正された。ソース・システムと宛先システムとが時間ｔ２におけるスナップショットの共通スナップショットを有さないということから、オフセット２におけるデータ値が時間ｔ１とｔ３における両方のスナップショット中で同じであるにもかかわらず、ソース・システムにおける時間ｔ３におけるスナップショットと、ソース・システムにおける時間ｔ１におけるスナップショットとの間のデルタに関連するインデックス１１０２は、オフセット２を含む。
【００９２】
対照的に、共通スナップショットがあるときは、前の例で述べたように、２つのスナップショット間で同じであるデータ値については、対応するオフセットがより新しいスナップショット中で修正されたとしても、デルタはこのデータ値を除外することができる。
【００９３】
デルタが宛先で受け取られると、デルタは、宛先システムにおける時間ｔ２におけるスナップショットをポイントするようにスプライスされる。次いで、宛先システムにおける時間ｔ３におけるスナップショットを表すようにリファクタリングされるが、これは、宛先システムでインデックス１１０４によって表される時間ｔ２におけるスナップショットと共通のエントリを、インデックス１１０２を構成するデルタから除去することによって、行われる。図１１Ｂに示すように、宛先で時間ｔ３におけるスナップショットが複製された後、データ値Ｄへのオフセット４のマッピングに関連するエントリが、時間ｔ３におけるスナップショットを表すインデックス１１０２から除去される。というのは、同じエントリが、宛先システムで時間ｔ２におけるスナップショットを表すインデックス１１０４中にすでに存在するからである。いくつかの実施形態では、リファクタリングは、宛先システムで時間ｔ３におけるスナップショットの複製が完了する前に実施されてもよい。
【００９４】
図１２Ａおよび１２Ｂは、時間ｔ４におけるスナップショットをソース・システムから宛先システムに複製する別の例を示す図である。この例では、時間ｔ１、ｔ２、ｔ３、およびｔ４におけるスナップショットが、同じスナップショット・シーケンスの一部として逐次的に作成された。しかし、図１２Ａに示すように、時間ｔ４におけるスナップショットが複製される前、ソースは、時間ｔ４、ｔ３、ｔ２、およびｔ１におけるスナップショットを有し、宛先は、時間ｔ２におけるスナップショットおよび時間ｔ１におけるスナップショットのみを有する。
【００９５】
ソース・システムと宛先システムとのいずれかもしくは両方、および／または第３のシステム（例えばスナップショット複製システム）によって記憶された識別情報から、どの時点（例えば展開状態）に関連するスナップショットがすでに宛先システムに記憶されているか、およびそれらが選択されたスナップショットに対してシーケンス中でどの順序にあるかを決定することができる。宛先システムが時間ｔ２におけるスナップショットをすでに記憶しているということから、ソース・システムから宛先システムに送信するデータの量を最小限に抑えるために、一例では、ソースは、ソース・システムにおける時間ｔ４におけるスナップショットと、ソース・システムにおける時間ｔ２におけるスナップショットとの間のデルタを送ることができる。時間ｔ２におけるスナップショットに対する、時間ｔ４におけるスナップショットのデルタを生成する前に、まず、時間ｔ３におけるスナップショットのエントリが、時間ｔ４におけるスナップショットにマージされる。例えば、時間ｔ２におけるスナップショットに対して相対的な、時間ｔ４におけるスナップショットのデルタを生成する際、まず、時間ｔ３におけるスナップショットのエントリが、時間ｔ４におけるスナップショットに論理的にマージされ（時間ｔ３におけるスナップショットのインデックスをソース・システムから実際に削除することはしない）、次いで、時間ｔ３におけるスナップショットのオフセットとマージされた時間ｔ４におけるスナップショットのインデックスと、時間ｔ２におけるスナップショットとの間のデルタが生成される。この、時間ｔ４におけるスナップショット（時間ｔ３におけるスナップショットのマージ済みエントリを含む）と時間ｔ２におけるスナップショットとの間のデルタは、図１２Ｂのインデックス１２０２によって表すことができる。デルタが宛先で受け取られると、デルタは、宛先システムで時間ｔ２におけるスナップショットをポイントするようにスプライスされる。この例では、ソース上と宛先上の同じスナップショット（この例では時間ｔ２におけるスナップショット）に対してデルタが生成されスプライスされているので、この場合、宛先システムでリファクタリングの機会はない。したがって、宛先システムで、デルタを表すインデックス１２０２をｔ４におけるスナップショットにおいて直接に使用することができる。
【００９６】
別の例（図１２Ｂには示さず）では、宛先システムにおける時間ｔ２におけるスナップショットに対する、宛先システムにおける時間ｔ４におけるスナップショットのデルタをソースが送る代わりに、ソースは、時間ｔ４におけるスナップショットにおけるデータの展開状態を生成する。時間ｔ４におけるスナップショットにおけるデータの展開状態を表すインデックスは、データ値Ａへのオフセット１、データ値Ｅへのオフセット２、データ値Ｃへのオフセット３、およびデータ値Ｄへのオフセット４のマッピングを含むことになる。時間ｔ４におけるスナップショットにおけるデータの展開状態を表すインデックスは、宛先に送られることになる。宛先で、時間ｔ４におけるスナップショットにおけるデータの展開状態を表すインデックスは、リファクタリングされて、宛先システムにおける時間ｔ２におけるスナップショットおよび宛先システムにおける時間ｔ１におけるスナップショットからの冗長エントリが除去されることになる。宛先システムで時間ｔ４におけるスナップショットを表すのに使用すべき、結果的に得られるインデックスは、やはり図１２Ｂのインデックス１２０２になるはずである。
【００９７】
図１３は、より新しいスナップショット・インデックスをより古いスナップショット・インデックスに対してリファクタリングするプロセスの例を示す流れ図である。いくつかの実施形態では、プロセス１３００は、図６のシステム６００の第１のストレージ・システム６０２、第２のストレージ・システム６０６、またはスナップショット複製システム６０８で実装される。いくつかの実施形態では、プロセス１３００は、選択されたスナップショットが宛先システムで完全に複製された後で実装される。いくつかの実施形態では、プロセス１３００は、選択されたスナップショットが宛先システムで完全に複製される前に実装される（例えば、プロセス１３００は、少なくとも部分的には、宛先システムでのスナップショット・データの複製と同時に実装されてもよい）。
【００９８】
上の様々な例で述べたように、宛先システムでスナップショットが複製されて宛先システムにおける既存のスナップショット・シーケンスにスプライスされるとき、いくつかの実施形態では、複製スナップショットと、宛先システムにおける既存の隣接スナップショットとの間の、新しい方のスナップショット・インデックスは、リファクタリングされてエントリが除去される。いくつかの実施形態では、複製スナップショットは、ソース・システムから送られることになるデルタ・データ、またはソース・システムから送られたデルタ・データを参照する。以下のプロセス１３００で述べる「より新しいスナップショット・インデックス」は、複製スナップショット・インデックスと、宛先システムにおける隣接する既存スナップショット・インデックスとの間の、相対的により新しいスナップショット・インデックスを指し、以下のプロセス１３００で述べる「より古いスナップショット・インデックス」は、複製スナップショット・インデックスと、宛先システムにおける隣接する既存スナップショット・インデックスとの間の、相対的により古いスナップショット・インデックスを指す。図９Ｂの例を再び参照すると、宛先における時間ｔ３における既存のスナップショット・インデックスは、時間ｔ２における複製スナップショット・インデックスに対してリファクタリングされた、より新しいスナップショット・インデックスであった。図１０Ｂの例を再び参照すると、時間ｔ３における複製スナップショット・インデックスは、宛先における時間ｔ２における既存スナップショット・インデックスに対してリファクタリングされた、より新しいスナップショット・インデックスであった。
【００９９】
いくつかの実施形態では、複製スナップショットは、宛先における隣接する既存のより古いスナップショットと、隣接する既存のより新しいスナップショットとの両方に対してリファクタリングされてよい。したがって、例えば、スナップショットを宛先で既存のスナップショット・シーケンスにスプライスする際、プロセス１３００を２回にわたり適用することができる。すなわち、複製スナップショットがプロセス１３００の「より新しいスナップショット・インデックス」を構成し、宛先における隣接する既存のより古いスナップショットがプロセス１３００の「より古いスナップショット・インデックス」を構成する場合のプロセス１３００を、１回目に適用することができ、複製スナップショットがプロセス１３００の「より古いスナップショット・インデックス」を構成し、宛先における隣接する既存のより新しいスナップショットがプロセス１３００の「新しいスナップショット・インデックス」を構成する場合のプロセス１３００を、２回目に適用することができる。
【０１００】
図１３に戻ると、１３０２で、より新しいスナップショット・インデックスに関連するオフセットに対応する第１のフィンガプリントが決定される。フィンガプリントは、より新しいスナップショット・インデックスに含まれる論理オフセットによってマッピングされるデータ値に基づいて決定される。いくつかの実施形態では、オフセットに対応するデータ値が、より新しいスナップショット・インデックスから読み取られ、データ値のフィンガプリントが、（例えばＳＨＡ１）ハッシュ技法に基づいて決定されてよい。
【０１０１】
１３０４で、より古いスナップショット・インデックスに関連するオフセットに対応する第２のフィンガプリントが決定される。フィンガプリントは、より古いスナップショット・インデックスに含まれる同じ論理オフセットによってマッピングされるデータ値に基づいて決定される。いくつかの実施形態では、オフセットに対応するデータ値が、より古いスナップショット・インデックスから読み取られる。データ値のこのフィンガプリントは、ステップ１３０２でフィンガプリントを得るのに使用されたのと同じ技法に基づいて決定されてよい。
【０１０２】
１３０６で、第１のフィンガプリントと第２のフィンガプリントが一致するかどうかが決定される。第１のフィンガプリントと第２のフィンガプリントが一致する場合は、２つのスナップショット・インデックス中の同じオフセットによってポイントされるデータ値は同じ（冗長）であり、制御は１３０８に移される。そうではなく、第１のフィンガプリントと第２のフィンガプリントが一致しない場合は、２つのスナップショット・インデックス中の同じオフセットによってポイントされるデータ値は同じではなく、制御は１３１０に移される。
【０１０３】
１３０８で、より新しいスナップショット・インデックスからオフセットが除去される。より新しいスナップショット・インデックスから冗長オフセットが除去され、基礎をなすデータは、宛先システムから削除され、かつ／または、ソース・システムから宛先システムに転送されないようにされる。
【０１０４】
１３１０で、より新しいスナップショット・インデックスとより古いスナップショット・インデックスとに共通するオフセットが他にもあるかどうかが決定される。共通オフセットが他にもある場合は、制御は１３１２に移される。そうではなく、共通オフセットがこれ以上ない場合は、プロセス１３００は終了する。１３１２で、より新しいスナップショット・インデックスとより古いスナップショット・インデックスとに共通する次のオフセットが選択される。
【０１０５】
様々な実施形態で、非クローン・スナップショットを複製できる方式と同様にして、クローンに関連するスナップショットをソース・システムから宛先システムに複製することができる。前述のように、クローンに関連するスナップショットのシーケンスは、ソース・システムにやはり記憶されたソース・データ・セットのスナップショットから生成される。ソース・スナップショットを「共有スナップショット」と呼ぶ。クローンはソース・データの共有スナップショットから生成される（したがってそれに依存する）ので、様々な実施形態で、クローン・スナップショットは、展開状態としてではなく、共有スナップショットのデルタとして複製される。後でさらに詳細に述べるように、クローン・スナップショットをソース・システムから宛先システムに複製する場合は、ソース・データの共有スナップショットが宛先システムにすでに存在するか否かを考慮に入れる。
【０１０６】
図１４は、クローンに関連する選択されたスナップショットの、ソース・システムから宛先システムへの複製を実施するプロセスの一実施形態を示す流れ図である。いくつかの実施形態では、プロセス１４００のソース・システムおよび宛先システムは、それぞれ図６のシステム６００の第１のストレージ・システム６０２および第２のストレージ・システム６０６、またはそれぞれ第２のストレージ・システム６０６および第１のストレージ・システム６０２を使用して、実装されてよい。いくつかの実施形態では、プロセス１４００は、図６のシステム６００の第１のストレージ・システム６０２、第２のストレージ・システム６０６、またはスナップショット複製システム６０８で実装される。
【０１０７】
１４０２において、選択されたスナップショットを宛先システムで複製する要求が受信される。選択されたスナップショットはクローン・データ・セットに関連し、このクローン・データ・セットは、ソース・データ・セットの共有スナップショットに関連する。クローンに関連するスナップショットが宛先システムで複製されるよう要求される。クローンについて記憶されたメタデータ・セットを使用して、どの特定のソース・データのどの特定の共有スナップショットが、クローンの生成元であった共有スナップショットであるかを識別することができる。例えば、共有スナップショットおよびそれに関連するソース・データをスナップショット・グローバルＩＤによって識別することができ、スナップショット・グローバルＩＤは、スナップショットを作成したシステムや、スナップショットに関連する展開状態を示し、また、スナップショットが関連するデータ・セット（例えば、Ｖディスクまたはファイル）も示す。
【０１０８】
１４０４において、ソース・データ・セットの共有スナップショットが宛先システムにすでに存在するか否かが決定される。クローンの生成元であった共有スナップショットが、宛先システムにすでに存在するかどうかが決定される。例えば、ソース・データの共有スナップショットが宛先システムにすでに存在するか否かは、前述のような記憶済みの識別情報から決定することができる。例えば、記憶済みの識別情報から、宛先システムが共有スナップショットのスナップショット・グローバルＩＤに関連するスナップショットを現在記憶しているか否かを決定することができる。共有スナップショットが宛先システムにまだ存在しない場合は、制御は１４０６に移される。そうではなく、共有スナップショットが宛先システムにすでに存在する場合は、制御は１４０８に移される。
【０１０９】
１４０６において、ソース・データ・セットの共有スナップショットが、宛先システムで複製される。ソース・データの共有スナップショットが宛先システムにまだ存在しない場合は、まず共有スナップショットが宛先システムで複製される。いくつかの実施形態では、図８のプロセス８００などのプロセスを使用して、共有スナップショットがソース・システムから宛先システムに複製される。例えば、共有スナップショットは、既存のスナップショット（ソース・システムと宛先システムとのいずれかにおける）のデルタとして複製することができる。共有スナップショットはまた、共有スナップショットにリンクする他の複製クローンのために後で再使用されてもよい。
【０１１０】
いくつかの場合では、空間を節約するために、単一のクローンのみによって使用される共有スナップショットは、自動的に削除されて、次に新しいクローン・スナップショットとマージされてもよい。しかし、クローンの削除された基礎に関する情報は、クローンによって保持される。
【０１１１】
１４０８において、クローン・データ・セットに関連するメタデータ・セットが宛先システムにすでに存在するか否かが決定される。クローン・データ・セットに関連するメタデータ・セットが宛先システムにまだ存在しない場合は、制御は１４１０に移される。そうではなく、共有スナップショットが宛先システムにすでに存在する場合は、制御は１４１２に移される。
【０１１２】
１４１０において、クローン・データ・セットに関連するメタデータ・セットが宛先システムで生成されるようにする。クローンが宛先にまだ存在しない場合は、クローンに関連するメタデータ・セットを少なくとも生成することによって、クローンが宛先で生成される。例えば、クローンに関連するメタデータ・セットは、クローンに関連するファイル・グローバルＩＤのセット、クローンを宛先システムにおける共有スナップショットにリンクするデータ、および／または、クローンに関連する後続のスナップショットを作成するのに使用するための、クローンに関連する現在スナップショット・インデックス、を含むことができる。特に、クローンに関連するファイル・グローバルＩＤを使用して、どのスナップショットがクローンに属しどのスナップショットが属さないか（例えば、クローンの生成元であったソース・データに属するスナップショット）を識別することができる。
【０１１３】
１４１２において、選択されたスナップショットが、宛先システムにおける共有スナップショットに少なくとも部分的に基づいて複製される。共有スナップショットおよびクローン・メタデータが宛先システムに存在すると決定されると、選択されたクローン・スナップショットを宛先システムに複製することができる。いくつかの実施形態では、図８のプロセス８００などのプロセスを使用して、選択されたクローン・スナップショットがソース・システムから宛先システムに複製される。例えば、選択されたクローン・スナップショットは、別のスナップショット（例えば共有スナップショット）のデルタとして複製することができる。
【０１１４】
図１５Ａ、１５Ｂ、および１５Ｃは、クローンに関連する時間ｔ４におけるスナップショット（Ｓ４）をソース・システムから宛先システムに複製する例を示す図である。図１５Ａに示すように、ソース・システムは、２つのスナップショット・シーケンスを含む。ソース・システムにおける第１のスナップショット・シーケンスは、ファイル・グローバルＩＤ「ＶＭ１」を有するソース・データ・セットに関連し、時間ｔ３におけるスナップショット（Ｓ３）、時間ｔ２におけるスナップショット（Ｓ２）、および時間ｔ１におけるスナップショット（Ｓ１）を含む。ソース・システムにおける第２のスナップショット・シーケンスは、ファイル・グローバルＩＤ「Ｃｌｏｎｅ＿ＶＭ１」を有するクローンに関連し、時間ｔ５におけるスナップショット（Ｓ５）、および時間ｔ４におけるスナップショット（Ｓ４）を含む。「Ｃｌｏｎｅ＿ＶＭ１」は、「ＶＭ１」の、時間ｔ２におけるスナップショット（Ｓ２）から生成された（したがってＳ２に依存する）。したがって、時間ｔ２におけるスナップショット（Ｓ２）は、スナップショット・シーケンス「Ｃｌｏｎｅ＿ＶＭ１」に関連する共有スナップショットである。また、図１５Ａに示すように、宛先システムにおけるスナップショット・シーケンスは、時間ｔ４におけるスナップショット（Ｓ４）が複製される前、ファイル・グローバルＩＤ「ＶＭ１」に関連する時間ｔ１におけるスナップショット（Ｓ１）を含む。共有スナップショット、すなわち時間ｔ２におけるスナップショット（Ｓ２）が宛先システムに存在しないので、まず、時間ｔ２におけるスナップショット（Ｓ２）が宛先システムで複製されることになる。
【０１１５】
共有スナップショット、すなわち時間ｔ２におけるスナップショット（Ｓ２）を宛先システムで複製することができ、これは例えば、時間ｔ１におけるスナップショット（Ｓ１）に対する、時間ｔ２におけるスナップショット（Ｓ２）のデルタを、宛先システムに送ることによって行うことができる。図１５Ｂに、時間ｔ２におけるスナップショット（Ｓ２）を宛先システムで複製した結果を示すが、この複製は、時間ｔ２におけるスナップショット（Ｓ２）を、「ＶＭ１」に関連するスナップショット・シーケンス中の時間ｔ１におけるスナップショット（Ｓ１）をポイントするようにスプライスすることを含む。
【０１１６】
共有スナップショット、すなわち時間ｔ２におけるスナップショット（Ｓ２）が宛先システムで複製された後、クローン「Ｃｌｏｎｅ＿ＶＭ１」のメタデータが宛先システムで生成される。図１５Ｂに、クローン「Ｃｌｏｎｅ＿ＶＭ１」に関連するメタデータを宛先システムで生成した結果を、「Ｃｌｏｎｅ＿ＶＭ１」のラベルが付いた点線のボックスとして示すが、このボックスは、「ＶＭ１」に関連するスナップショット・シーケンスの、時間ｔ２におけるスナップショット（Ｓ２）にリンクする。
【０１１７】
クローン「Ｃｌｏｎｅ＿ＶＭ１」のメタデータが宛先システムで生成された後、「Ｃｌｏｎｅ＿ＶＭ１」に関連する時間ｔ４におけるスナップショットが、宛先システムで複製される。時間ｔ４におけるスナップショット（Ｓ４）は、非クローン・スナップショットを複製する方式と同様にして、宛先システムで複製することができる。例えば、時間ｔ４におけるスナップショット（Ｓ４）は、共有スナップショット、すなわち時間ｔ２におけるスナップショット（Ｓ２）に対する、時間ｔ４におけるスナップショット（Ｓ４）のデルタを宛先システムに送ることによって、宛先システムで複製することができる。図１５Ｃに、時間ｔ４におけるスナップショット（Ｓ４）を宛先システムで複製した結果を示すが、この複製は、時間ｔ４におけるスナップショット（Ｓ４）をファイル・グローバルＩＤ「Ｃｌｏｎｅ＿ＶＭ１」に関連付けること、および、時間ｔ４におけるスナップショット（Ｓ４）を、「ＶＭ１」に関連するスナップショット・シーケンス中の時間ｔ２におけるスナップショット（Ｓ２）をポイントするようにスプライスすることを含む。
【０１１８】
理解を明確にするために前述の実施形態をいくぶん詳細に述べたが、本発明は、提供した詳細に限定されない。本発明を実現するための多くの代替方式がある。開示する実施形態は、例示的なものであり、制限的なものではない。
適用例１：第１の時点におけるデータ・セットの状態を宛先システムで表すためにスナップショット・データを前記宛先システムに記憶するための要求を受け取り、前記第１の時点における前記データ・セットの前記状態をソース・システムで表す第１のソース・システム・スナップショット・データは、第２の時点における前記データ・セットの状態を前記ソース・システムで表す第２のソース・システム・スナップショット・データに依存し、
前記第１のソース・システム・スナップショット・データと、第３の時点における前記データ・セットの状態を前記宛先システムで表す宛先システム・スナップショット・データとを含むデータに少なくとも部分的に基づいて、前記第１の時点における前記データ・セットの前記状態を前記宛先システムで表すための前記スナップショット・データを決定するように構成されているプロセッサと、
前記プロセッサに接続され、前記要求を記憶するように構成されているメモリと
を備えるシステム。
適用例２：前記第１のソース・システム・スナップショット・データおよび前記第２のソース・システム・スナップショット・データの各々は、前記ソース・システムに記憶されているスナップショット・データ・シーケンスに含まれる、適用例１に記載のシステム。
適用例３：前記プロセッサは、前記スナップショット・データを、前記宛先システムに記憶されているスナップショット・データ・シーケンスに挿入するように構成されている、適用例１に記載のシステム。
適用例４：前記プロセッサはさらに、前記第１のソース・システム・スナップショット・データと、前記第２のソース・システム・スナップショット・データと、前記宛先システム・スナップショット・データとの間の順序を決定するために使用可能な識別情報を記憶するように構成されている、適用例１に記載のシステム。
適用例５：前記スナップショット・データを決定することは、前記第１のソース・システム・スナップショット・データおよび前記第２のソース・システム・スナップショット・データに少なくとも部分的に基づいてデルタを決定することを含む、適用例１に記載のシステム。
適用例６：前記宛先システム・スナップショット・データは第１の宛先システム・スナップショット・データを含み、前記プロセッサはさらに、
前記宛先システムに記憶されているスナップショット・データ・シーケンスに挿入されるべき、前記第１の時点における前記データ・セットの前記状態を前記宛先システムで表す新しい宛先システム・スナップショット・データを、前記スナップショット・データに少なくとも部分的に基づいて生成し、
前記新しい宛先システム・スナップショット・データを前記第１の宛先システム・スナップショット・データに依存させるように構成されている、適用例１に記載のシステム。
適用例７：前記宛先システムに記憶されている前記スナップショット・データ・シーケンスは、第４の時点における前記データ・セットの状態を前記宛先システムで表す第２の宛先システム・スナップショット・データを含み、前記第１の時点は前記第４の時点よりも前であり、前記新しい宛先システム・スナップショット・データを生成することは、
前記スナップショット・データと前記第２の宛先システム・スナップショット・データとに共通のオフセットを決定し、
前記スナップショット・データに関連する前記オフセットに関連する第１のデータ値が、前記第２の宛先システム・スナップショット・データに関連する前記オフセットに関連する第２のデータ値と一致すると決定し、
前記第１のデータ値が前記第２のデータ値と一致するとの決定に応答して前記第２の宛先システム・スナップショット・データから前記オフセットを除去すること
を含む、適用例６に記載のシステム。
適用例８：前記第１のデータ値が前記第２のデータ値と一致するとの決定に応答してさらに、前記スナップショット・データに関連する前記オフセットに関連する前記第１のデータ値が前記ソース・システムから前記宛先システムに送信されないようにする、適用例７に記載のシステム。
適用例９：前記第３の時点は前記第１の時点よりも前であり、前記新しい宛先システム・スナップショット・データを生成することは、
前記スナップショット・データと前記第１の宛先システム・スナップショット・データとに共通のオフセットを決定し、
前記スナップショット・データに関連する前記オフセットに関連する第１のデータ値は、前記第１の宛先システム・スナップショット・データに関連する前記オフセットに関連する第２のデータ値と一致すると決定し、
前記第１のデータ値が前記第２のデータ値と一致するとの決定に応答して前記スナップショット・データから前記オフセットを除去すること
を含む、適用例６に記載のシステム。
適用例１０：前記第１のデータ値が前記第２のデータ値と一致するとの決定に応答してさらに、前記スナップショット・データに関連する前記オフセットに関連する前記第１のデータ値が前記ソース・システムから前記宛先システムに送信されないようにする、適用例９に記載のシステム。
適用例１１：前記新しい宛先システム・スナップショット・データは、前記第１の時点および前記第３の時点に少なくとも部分的に基づいて、前記宛先システムに記憶されている前記スナップショット・データ・シーケンスに挿入される、適用例６に記載のシステム。
適用例１２：前記スナップショット・データは第１のスナップショット・データを含み、前記宛先システム・スナップショット・データは第１の宛先システム・スナップショット・データを含み、前記プロセッサはさらに、所望の時点における前記データ・セットの状態を前記ソース・システムで表すための第２のスナップショット・データを決定するように構成され、前記第２のスナップショット・データは、前記所望の時点における前記データ・セットの前記状態を前記宛先システムで表す第２の宛先システム・スナップショット・データに少なくとも部分的に基づいて決定される、適用例１に記載のシステム。
適用例１３：前記第２の時点は、前記第１の時点よりも前であり、前記第３の時点と同じである、適用例１に記載のシステム。
適用例１４：前記第２の時点は前記第１の時点よりも前であり、前記第３の時点は前記第１の時点よりも前であるが前記第２の時点よりも後である、適用例１に記載のシステム。
適用例１５：前記データ・セットは、第４の時点におけるソース・データ・セットの状態を前記ソース・システムで表す第３のソース・システム・スナップショット・データから生成されたクローン・データ・セットを含み、前記クローン・データ・セットに関連する前記第２のソース・システム・スナップショット・データは、前記ソース・データ・セットに関連する前記第３のソース・システム・スナップショット・データに依存する、適用例１に記載のシステム。
適用例１６：前記プロセッサは、
前記ソース・データ・セットに関連する第３のソース・システム・スナップショット・データに含まれる１つまたは複数のエントリを、前記クローン・データ・セットに関連する前記第２のソース・システム・スナップショット・データにマージすること、および、
前記ソース・データ・セットに関連する前記第３のソース・システム・スナップショット・データを削除するように構成されている、適用例１６に記載のシステム。
適用例１７：第１の時点におけるデータ・セットの状態を宛先システムで表すためのスナップショット・データを前記宛先システムに記憶する要求を受信し、前記第１の時点における前記データ・セットの前記状態をソース・システムで表す第１のソース・システム・スナップショット・データは、第２の時点における前記データ・セットの状態を前記ソース・システムで表す第２のソース・システム・スナップショット・データに依存し、
前記第１のソース・システム・スナップショット・データと、第３の時点における前記データ・セットの状態を前記宛先システムで表す宛先システム・スナップショット・データとを含むデータに少なくとも部分的に基づいて、前記第１の時点における前記データ・セットの前記状態を前記宛先システムで表すための前記スナップショット・データを決定すること、
を備える方法。
適用例１８：前記スナップショット・データを、前記宛先システムに記憶されているスナップショット・データ・シーケンスに挿入することをさらに備える、適用例１７に記載の方法。
適用例１９：前記スナップショット・データを決定することは、前記第１のソース・システム・スナップショット・データおよび前記第２のソース・システム・スナップショット・データに少なくとも部分的に基づいてデルタを決定することを含む、適用例１７に記載の方法。
適用例２０：前記スナップショット・データを決定することは、前記第１のソース・システム・スナップショット・データおよび前記第２のソース・システム・スナップショット・データに少なくとも部分的に基づいてデルタを決定することを含む、適用例１７に記載の方法。
適用例２１：前記宛先システム・スナップショット・データは第１の宛先システム・スナップショット・データを含み、
前記宛先システムに記憶されているスナップショット・データ・シーケンスに挿入されるべき、前記第１の時点における前記データ・セットの前記状態を前記宛先システムで表す新しい宛先システム・スナップショット・データを、前記スナップショット・データに少なくとも部分的に基づいて生成し、
前記新しい宛先システム・スナップショット・データを前記第１の宛先システム・スナップショット・データに依存させること
をさらに備える、適用例１７に記載の方法。
適用例２２：前記新しい宛先システム・スナップショット・データは、前記第１の時点および前記第３の時点に少なくとも部分的に基づいて、前記宛先システムに記憶された前記スナップショット・データ・シーケンスに挿入される、適用例２１に記載の方法。
適用例２３：前記スナップショット・データは第１のスナップショット・データを含み、前記宛先システム・スナップショット・データは第１の宛先システム・スナップショット・データを含み、前記プロセッサはさらに、所望の時点における前記データ・セットの状態を前記ソース・システムで表すための第２のスナップショット・データを決定するように構成され、前記第２のスナップショット・データは、前記所望の時点における前記データ・セットの前記状態を前記宛先システムで表す第２の宛先システム・スナップショット・データに少なくとも部分的に基づいて決定される、適用例１７に記載の方法。
適用例２４：前記データ・セットは、第４の時点におけるソース・データ・セットの状態を前記ソース・システムで表す第３のソース・システム・スナップショット・データから生成されたクローン・データ・セットを含み、前記クローン・データ・セットに関連する前記第２のソース・システム・スナップショット・データは、前記ソース・データ・セットに関連する前記第３のソース・システム・スナップショット・データに依存する、適用例１７に記載の方法。
適用例２５：非一時的なコンピュータ可読ストレージ媒体に組み込まれたコンピュータ・プログラム製品であって、
第１の時点におけるデータ・セットの状態を宛先システムで表すためのスナップショット・データを前記宛先システムに記憶する要求を受け取るためのコンピュータ命令と、前記第１の時点における前記データ・セットの前記状態をソース・システムで表す第１のソース・システム・スナップショット・データは、第２の時点における前記データ・セットの状態を前記ソース・システムで表す第２のソース・システム・スナップショット・データに依存し、
前記第１のソース・システム・スナップショット・データと、第３の時点における前記データ・セットの状態を前記宛先システムで表す宛先システム・スナップショット・データとを含むデータに少なくとも部分的に基づいて、前記第１の時点における前記データ・セットの前記状態を前記宛先システムで表すための前記スナップショット・データを決定するためのコンピュータ命令と、を備えるコンピュータ・プログラム製品。
【図１】
0006309103.tif 000002
【図２】
0006309103.tif 000003
【図３】
0006309103.tif 000004
【図４】
0006309103.tif 000005
【図５】
0006309103.tif 000006
【図６】
0006309103.tif 000007
【図７】
0006309103.tif 000008
【図８】
0006309103.tif 000009
【図９Ａ】
0006309103.tif 000010
【図９Ｂ】
0006309103.tif 000011
【図１０Ａ】
0006309103.tif 000012
【図１０Ｂ】
0006309103.tif 000013
【図１１Ａ】
0006309103.tif 000014
【図１１Ｂ】
0006309103.tif 000015
【図１２Ａ】
0006309103.tif 000016
【図１２Ｂ】
0006309103.tif 000017
【図１３】
0006309103.tif 000018
【図１４】
0006309103.tif 000019
【図１５Ａ】
0006309103.tif 000020
【図１５Ｂ】
0006309103.tif 000021
【図１５Ｃ】
0006309103.tif 000022