(57)【要約】  データストレージシステムにおけるソースファイルシステムからターゲットファイルシステムへのクローンオブジェクトのオブジェクトレベルでの複製は、上記ターゲットファイルシステムにおけるストレージ要求が、上記ソースファイルシステムのストレージ要求と一致する様に、共有されたデータブロックを含む関連オブジェクト間の関係を維持する。特定の処理は、複製を要求するオブジェクトが、チェックポイント番号に基づいて増分ベースで特定可能な様に、他のファイルシステムオブジェクトを参照する間接オブジェクトをスキャンするために実行することができる。上記ターゲットファイルシステム内のチェックポイントは、複製されたクローンオブジェクトに対するチェックポイント番号の要件が、上記ターゲットファイルシステムにおいて満たされる様に、管理される。
2016512633.tif 000002
【特許請求の範囲】
【請求項１】
データストレージシステムにおいて、ソースファイルシステムからターゲットファイルシステムへクローンオブジェクトを複製する方法であって：
前記クローンオブジェクトが前記ソースファイルシステム内の変更オブジェクトである場合、前記ソースファイルシステムから前記ターゲットファイルシステムへ前記クローンオブジェクトを複製する処理を含み、
該複製する処理は：
前記クローンオブジェクトが新たに生成されたクローンオブジェクトである場合：
前記ソースファイルシステムから前記ターゲットファイルシステムへ予め複製されたクローンオブジェクトに関連する、（ａ）前記ソースファイルシステムからのメタデータ、及び（ｂ）親スナップショットファイルオブジェクトに基づいて、前記ターゲットファイルシステム内のクローンオブジェクトを生成し、
前記ターゲットファイルシステム内のクローンオブジェクトの生成処理は、前記ターゲットファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号が、前記親スナップショットファイルオブジェクトのブロックのチェックポイント番号よりも確実に大きくなる様にし；
前記ソースファイルシステム内のクローンオブジェクトに関連する分岐ブロックがある場合、前記クローンオブジェクトに関連する前記分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する方法。
【請求項２】
前記ターゲットファイルシステム内の前記クローンオブジェクトを生成する処理は：
前記クローンオブジェクトが最初に、前記親スナップショットファイルオブジェクトと共に、全てのブロックを共有する様に、前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトのクローンとして、前記クローンオブジェクトを生成する、請求項１に記載の方法。
【請求項３】
前記ターゲットファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号が、前記親スナップショットファイルオブジェクトのブロックのチェックポイント番号よりも確実に大きくなる様にする処理は：
前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号が、前記ターゲットファイルシステムの現在のチェックポイント番号と異なる場合、前記クローンオブジェクトのクローンチェックポイント番号を、前記現在のチェックポイント番号に設定し；
前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号が、前記ターゲットファイルシステムの現在のチェックポイント番号と等しい場合、前記ターゲットファイルシステムの現在のチェックポイント番号を前進させるために、前記ターゲットファイルシステム内のチェックポイントを発行すると共に、前記クローンオブジェクトの前記クローンチェックポイント番号を、前進されたチェックポイント番号に設定する、請求項１に記載の方法。
【請求項４】
前記クローンオブジェクトに関連する分岐ブロックを複製する処理は：
前記ソースファイルシステム内の前記クローンオブジェクトのクローニング以降に変更された、前記ソースファイルシステム内のクローンオブジェクトのブロックを検出し、該検出の処理は、複数のブロックの各々に関連するチェックポイント番号を、前記ソースファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号と比較する処理を含み；
前記クローンチェックポイント番号以上のチェックポイント番号を有するブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ、送信し；
前記ソースファイルシステムから受信されたブロックに基づき、前記ターゲットファイルシステム内の前記クローンオブジェクトを更新する、請求項１に記載の方法。
【請求項５】
前記ソースファイルシステムから前記ターゲットファイルシステムへ前記クローンオブジェクトを複製する処理は、更に：
前記クローンオブジェクトが、以前の複製処理以降にクローンのプロパティを取得した前記ターゲットファイルシステムへ以前に複製されたオブジェクトであり、かつ、前記親スナップショットファイルオブジェクトが新規オブジェクトではない場合：
前記クローンオブジェクトのために必要なメタデータ、及び該クローンオブジェクトの親スナップショットファイルオブジェクトを、前記ソースファイルシステムから前記ターゲットファイルシステムへ送信し；
前記ソースファイルシステムからの前記メタデータ、及び前記ターゲットファイルシステム上の以前に複製された親スナップショットファイルオブジェクトに基づき、前記親スナップショットファイルオブジェクトと共に、全てのブロックを最初に共有するクローンとして、前記ターゲットファイルシステムにおいて、前記クローンオブジェクトを再生成し；
前記ソースファイルシステム内の前記クローンオブジェクトに関連する分岐ブロックがある場合、前記クローンオブジェクトに関連する前記分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する、請求項１に記載の方法。
【請求項６】
前記クローンオブジェクトが、以前の複製処理以降にクローンのプロパティを取得した前記ターゲットファイルシステムへ以前に複製されたオブジェクトであるか否かを判定する処理は、前記ソースファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号に基づいて行われる、請求項５に記載の方法。
【請求項７】
前記ソースファイルシステムから前記ターゲットファイルシステムへ前記クローンオブジェクトを複製する処理は、更に：
前記クローンオブジェクトが、前記ソースファイルシステム内の新規の親スナップショットファイルオブジェクトを有する前記ターゲットファイルシステムへ以前に複製されたクローンオブジェクトである場合、前記新規の親スナップショットファイルオブジェクトに関連する、前記ソースファイルシステム内の前記クローンオブジェクトの分岐ブロックを複製する、請求項１に記載の方法。
【請求項８】
前記ソースファイルシステムから前記ターゲットファイルシステムへ前記クローンオブジェクトを複製する処理は、更に：
前記クローンオブジェクトが、前記ターゲットファイルシステムへ以前に複製されたクローンオブジェクトであったが、以前の複製処理以降にデクローンされた、通常のファイルオブジェクトである場合、該通常のファイルオブジェクトの全てのユーザ／メタデータのブロックを複製することにより、前記通常のファイルオブジェクトを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する、請求項１に記載の方法。
【請求項９】
前記クローンオブジェクトの複製に先立ち、前記親スナップショットファイルオブジェクトを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する処理を更に含み：
前記クローンオブジェクトを複製する処理は：
前記クローンオブジェクトの複製のための最初の作業項目を、チャンクキューに追加し；
前記最初の作業項目を実行する処理は、前記親スナップショットファイルオブジェクトが旧オブジェクトである場合には前記クローンオブジェクトを前記ターゲットファイルシステムへ複製する一方、前記親スナップショットファイルオブジェクトが新規オブジェクトである場合には前記クローンオブジェクトを前記ターゲットファイルシステムへ複製することなく前記最初の作業項目の実行を終了することを含み；
前記親スナップショットファイルオブジェクトを複製する処理は：
前記親スナップショットファイルオブジェクトの複製のためのクローンキューに第１作業項目を追加し；
前記クローンオブジェクトの後続する複製のための未処理マップに第２作業項目を追加し；
前記第１作業項目を実行して前記親スナップショットファイルオブジェクトを複製し；
前記親スナップショットファイルオブジェクトの前記複製の完了に伴い、前記第２作業項目を、前記未処理マップから前記クローンキューへ移動させる、請求項１に記載の方法。
【請求項１０】
前記最初の作業項目は「生成」作業項目であるか；
前記第１作業項目は「ＳＰＡＷＮ」作業項目であるか；
前記第２作業項目は「ＳＰＡＷＮ」作業項目であるか；
前記第１作業項目は「ＡＣＴＩＶＥ」作業項目であるか；
前記第２作業項目は「ＡＣＴＩＶＥ」作業項目であるか：の少なくとも１つである、請求項９に記載の方法。
【請求項１１】
ソースファイルシステムからターゲットファイルシステムへクローンオブジェクトを複製するデータストレージシステムであって：
ソースファイルシステム及びソースストレージプロセッサを有するソースと；
ターゲットファイルシステム及びターゲットストレージプロセッサを有するターゲットと、を有し：
前記ソースストレージプロセッサは：
前記クローンオブジェクトが前記ソースファイルシステム内の変更オブジェクトである場合、前記ソースファイルシステムから前記ターゲットファイルシステムへ前記クローンオブジェクトを複製する処理を実行し、該複製する処理は、前記クローンオブジェクトが新たに生成されたクローンオブジェクトである場合、前記クローンオブジェクトのためのユーザ／メタデータを、前記ターゲットストレージプロセッサへ送信する処理を含み；
前記ターゲットストレージプロセッサは：
前記ソースファイルシステムから前記ターゲットファイルシステムへ予め複製された前記クローンオブジェクトに関連する、（ａ）前記ソースストレージプロセッサからのメタデータ、及び（ｂ）親スナップショットファイルオブジェクトに基づいて、前記ターゲットファイルシステム内のクローンオブジェクトを生成する処理を実行し、前記ターゲットストレージプロセッサは、前記ターゲットファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号が、前記親スナップショットファイルオブジェクトのブロックのチェックポイント番号よりも確実に大きくなる様にし；
前記ソースファイルシステム内のクローンオブジェクトに関連する分岐ブロックがある場合、前記ソースストレージプロセッサ及び前記ターゲットストレージプロセッサは、前記クローンオブジェクトに関連する前記分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する処理を更に実行するシステム。
【請求項１２】
前記ターゲットストレージプロセッサは、前記クローンオブジェクトが、前記親スナップショットファイルオブジェクトと共に、少なくとも１つのブロックを共有する様に、前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトのクローンとして、前記クローンオブジェクトを生成する、請求項１１に記載のシステム。
【請求項１３】
前記ターゲットストレージプロセッサは、前記ターゲットファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号が、前記親スナップショットファイルオブジェクトのブロックのチェックポイント番号よりも確実に大きくなる様にし：
前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号が、前記ターゲットファイルシステムの現在のチェックポイント番号と異なる場合、前記クローンオブジェクトのクローンチェックポイント番号を、前記現在のチェックポイント番号に設定し；
前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号が、前記ターゲットファイルシステムの現在のチェックポイント番号と等しい場合、前記ターゲットファイルシステムの現在のチェックポイント番号を前進させるために、前記ターゲットファイルシステム内のチェックポイントを発行すると共に、前記クローンオブジェクトの前記クローンチェックポイント番号を、前進されたチェックポイント番号に設定する、請求項１１に記載のシステム。
【請求項１４】
前記クローンオブジェクトに関連する分岐ブロックを複製する処理は：
前記ソースストレージプロセッサにより、前記ソースファイルシステム内の前記クローンオブジェクトのクローニング以降に変更された、前記ソースファイルシステム内のクローンオブジェクトのブロックを検出し、該検出の処理は、複数のブロックの各々に関連するチェックポイント番号を、前記ソースファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号と比較する処理を含み；
前記ソースストレージプロセッサにより、前記クローンチェックポイント番号以上のチェックポイント番号を有するブロックを、前記ターゲットストレージプロセッサへ、送信し；
前記ターゲットストレージプロセッサにより、前記ソースストレージプロセッサから受信されたブロックに基づき、前記ターゲットファイルシステム内の前記クローンオブジェクトを更新する、請求項１１に記載のシステム。
【請求項１５】
前記ソースストレージプロセッサは更に、前記クローンオブジェクトが、以前の複製処理以降にクローンのプロパティを取得した前記ターゲットファイルシステムへ以前に複製されたオブジェクトであり、かつ、前記親スナップショットファイルオブジェクトが新規オブジェクトではない場合、前記クローンオブジェクトのために必要なメタデータ、及び該クローンオブジェクトの親スナップショットファイルオブジェクトを、前記ターゲットストレージプロセッサへ送信し；
前記ターゲットストレージプロセッサは更に、前記ソースファイルシステムからの前記メタデータ、及び前記ターゲットファイルシステム上の以前に複製された親スナップショットファイルオブジェクトに基づき、前記親スナップショットファイルオブジェクトと共に、全てのブロックを最初に共有するクローンとして、前記ターゲットファイルシステムにおいて、前記クローンオブジェクトを再生成し；
前記ソースファイルシステム内の前記クローンオブジェクトに関連する分岐ブロックがある場合、前記ソースストレージプロセッサ及び前記ターゲットストレージプロセッサは更に、前記クローンオブジェクトに関連する前記分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する、請求項１１に記載のシステム。
【請求項１６】
前記ソースストレージプロセッサは、前記ソースファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号に基づき、前記クローンオブジェクトが、以前の複製処理以降にクローンのプロパティを取得した前記ターゲットファイルシステムへ以前に複製されたオブジェクトであるか否かを判定する、請求項１５に記載のシステム。
【請求項１７】
前記ソースストレージプロセッサは更に、前記クローンオブジェクトが、前記ソースファイルシステム内の新規の親スナップショットファイルオブジェクトを有する前記ターゲットファイルシステムへ以前に複製されたクローンオブジェクトである場合、前記新規の親スナップショットファイルオブジェクトに関連する、前記ソースファイルシステム内の前記クローンオブジェクトの分岐ブロックを複製するための前記ターゲットストレージプロセッサへ、ユーザ／メタデータを送信し；
前記ターゲットストレージプロセッサは更に、前記ユーザ／メタデータに基づき、前記ターゲットファイルシステム内の前記クローンオブジェクトの分岐ブロックを複製する、請求項１１に記載のシステム。
【請求項１８】
前記ソースストレージプロセッサは更に、前記クローンオブジェクトが、前記ターゲットファイルシステムへ以前に複製されたクローンオブジェクトであったが、以前の複製処理以降にデクローンされた、通常のファイルオブジェクトである場合、前記ソースファイルシステムから前記ターゲットファイルシステムへ前記通常のファイルオブジェクトを複製するための前記ターゲットストレージプロセッサへ、全てのユーザ／メタデータのブロックを送信し；
前記ターゲットストレージプロセッサは更に、前記ソースファイルシステムからの前記ユーザ／メタデータに基づき、前記通常のファイルオブジェクトの全てのユーザ／メタデータのブロックを複製することにより、前記通常のファイルオブジェクトを複製する、請求項１１に記載のシステム。
【請求項１９】
前記ソースストレージプロセッサは更に、前記クローンオブジェクトの複製に先立ち、前記親スナップショットファイルオブジェクトを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製させ：
前記クローンオブジェクトを複製する処理は：
前記クローンオブジェクトの複製のための最初の作業項目を、チャンクキューに追加し；
前記最初の作業項目を実行する処理は、前記親スナップショットファイルオブジェクトが旧オブジェクトである場合には前記クローンオブジェクトを前記ターゲットファイルシステムへ複製する一方、前記親スナップショットファイルオブジェクトが新規オブジェクトである場合には前記クローンオブジェクトを前記ターゲットファイルシステムへ複製することなく前記最初の作業項目の実行を終了することを含み；
前記親スナップショットファイルオブジェクトを複製する処理は：
前記親スナップショットファイルオブジェクトの複製のためのクローンキューに第１作業項目を追加し；
前記クローンオブジェクトの後続する複製のための未処理マップに第２作業項目を追加し；
前記第１作業項目を実行して前記親スナップショットファイルオブジェクトを複製し；
前記親スナップショットファイルオブジェクトの前記複製の完了に伴い、前記第２作業項目を、前記未処理マップから前記クローンキューへ移動させる、請求項１１に記載のシステム。
【請求項２０】
前記最初の作業項目は「生成」作業項目であるか；
前記第１作業項目は「ＳＰＡＷＮ」作業項目であるか；
前記第２作業項目は「ＳＰＡＷＮ」作業項目であるか；
前記第１作業項目は「ＡＣＴＩＶＥ」作業項目であるか；
前記第２作業項目は「ＡＣＴＩＶＥ」作業項目であるか：の少なくとも１つである、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データストレージシステムにおけるファイル複製に関し、より具体的には、データストレージシステムにおいてクローンオブジェクトをオブジェクトベースで複製する技術に関する。
【発明の背景】
【０００２】
データストレージシステムでは、ソースファイルシステムの幾つかまたは全てのオブジェクトが、例えば、アーカイブ、バックアップ、メンテナンス、または障害復旧等のために、他のファイルシステム（以下、「ターゲットファイルシステム」と呼ぶ）に複製されることがある。ミラーリングと異なり、２つの異なる位置にデータが格納される複製は、一般的に、ターゲットファイルシステム内のソースオブジェクトのコピーの生成を含む。ターゲットオブジェクトは、ソースオブジェクトが格納される方法とは大きく異なる方法で、格納されることがある。例えば、ソースオブジェクトは、非近接ブロックに格納されることがあるが、ターゲットオブジェクトは、近接ブロックに格納される。なぜなら、ソースオブジェクトのブロックが、長時間に渡って割り当てられた結果、ストレージの異なる領域に割り当てられるのに対し、ターゲットオブジェクトでは、全てのブロックが１度に割り当てられることがあるからである。
【０００３】
一般的には、ファイルシステムにおける複製は、ファイルレベルまたはオブジェクト（サブファイル）レベルで実行可能である。ファイルレベル及びオブジェクトレベルでの複製は、日立データシステムから入手可能な日立ＮＡＳプラットフォームソフトウェア：ＢｌｕｅＡｒｃ（登録商標）  ＪｅｔＭｉｒｒｏｒデータシートにおいて、一般的に論じられている。
【０００４】
クローンファイルは、オブジェクトベースでの複製中、他の通常のファイルと同様に扱われることが多いため、ターゲットファイルシステム上では、ディープコピーとして複製される。その様なクローンファイルのディープコピーは、スナップショットファイルとの間で如何なるデータブロックをも共有しないクローンファイルを生成することとなる。このため、ターゲットファイルシステム上でのストレージコストが増大する。
【例示の実施形態の概要】
【０００５】
本発明の第１実施形態では、データストレージシステムにおいて、ソースファイルシステムからターゲットファイルシステムにクローンオブジェクトを複製する方法が提供される。上記方法は、上記クローンオブジェクトがソースファイルシステム内で変更されたオブジェクトである場合、ソースファイルシステムからターゲットファイルシステムにクローンオブジェクトを複製することを含む。該複製は、上記クローンオブジェクトが新規に生成されたクローンオブジェクトである場合、ターゲットファイルシステム内のクローンオブジェクトを生成することを含む。該生成は、（ａ）ソースファイルシステムからのメタデータ、及び（ｂ）ソースファイルシステムからターゲットファイルシステムに予め複製されたクローンオブジェクトに関連付けられた、親スナップショットのファイルオブジェクトに基づいて、行われる。ターゲットファイルシステム内での上記クローンオブジェクトの生成では、ターゲットファイルシステム内のクローンオブジェクトのクローンチェックポイント番号として、親スナップショットのファイルオブジェクトのブロックのチェックポイント番号よりも大きい値が確保される。上記複製は、ソースファイルシステム内のクローンオブジェクトに関連付けられた分岐ブロックが有る場合、上記クローンオブジェクトに関連付けられた分岐ブロックを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製することを含む。
【０００６】
クローンオブジェクトが、最初に、親スナップショットのファイルオブジェクトとの間で全てのブロックを共有する様に、上記ターゲットファイルシステム内でクローンオブジェクトを生成する処理は、上記ターゲットファイルシステムにおける親スナップショットのファイルオブジェクトのクローンとして、クローンオブジェクトを生成することを含むものとしてもよい。
【０００７】
ターゲットファイルシステム内のクローンオブジェクトのクローンチェックポイント番号として、親スナップショットのファイルオブジェクトのブロックのチェックポイント番号よりも大きい値を確保する処理は、上記ターゲットファイルシステム内のチェックポイントを発行して、該ターゲットファイルシステムの現在のチェックポイント番号を前進させること、及び、上記クローンオブジェクトのクローンチェックポイント番号を、上記前進されたチェックポイント番号に設定することを含むものとしてもよい。例えば、上記ターゲットファイルシステム内の親スナップショットのファイルオブジェクトの最後に変更されたチェックポイント番号が、上記クローンオブジェクトが生成されたターゲットファイルシステムの現在のチェックポイント番号と等しい場合に、チェックポイントが発行されるものとしてもよい。
【０００８】
上記クローンオブジェクトに関連付けられた分岐ブロックの複製処理は、ソースファイルシステム内のクローンオブジェクトのクローニング以後に変更された、上記ソースファイルシステム内のクローンオブジェクトのブロックを検出することを含むものとしてもよい。ここで、上記検出処理は、幾つかのブロックの各々に関連付けられたチェックポイント番号を、上記ソースファイルシステム内のクローンオブジェクトのクローンチェックポイント番号と比較することを含む。また、上記複製処理は、上記クローンチェックポイント番号以上のチェックポイント番号を有するブロックを、上記ソースファイルシステムから上記ターゲットファイルシステムへ送信することを含むものとしてもよい。また、上記複製処理は、上記ソースファイルシステムから受信されたブロックに基づき、上記ターゲットファイルシステム内のクローンオブジェクトを更新することを含むものとしてもよい。
【０００９】
上記ソースファイルシステムから上記ターゲットファイルシステムへのクローンオブジェクトの複製処理は、クローンオブジェクトが、予めの複製以後にクローンのプロパティを取得したターゲットファイルシステムに予め複製されたオブジェクトであり、かつ、上記親スナップショットのファイルオブジェクトが、新規のオブジェクトでない場合に、上記ソースファイルシステムから上記ターゲットファイルシステムにメタデータを送信することを更に含むものとしてもよい。上記複製処理は、（クローンが最初に生成される時に、親のルートノードに基づいてクローンのルートノードを形成した結果として、）上記ソースファイルシステムからのメタデータと、上記ターゲットファイルシステム上の予め複製されたスナップショットファイルオブジェクトとに基づき、親スナップショットのファイルオブジェクトとの間で全てのブロックを最初に共有するクローンとして、上記ターゲットファイルシステム内のクローンオブジェクトを再生成することを更に含むものとしてもよい。また、上記複製処理は、上記ソースファイルシステム内のクローンオブジェクトに関連付けられた分岐ブロックが有る場合、該クローンオブジェクトに関連付けられた分岐ブロックを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製することを更に含むものとしてもよい。上記クローンオブジェクトが、予めの複製以後にクローンのプロパティを取得したターゲットファイルシステムに予め複製されたオブジェクトであるか否かを決定する処理は、上記ソースファイルシステム内のクローンオブジェクトのクローンチェックポイント番号に基づいて実行されるものとしてもよい。
【００１０】
上記ソースファイルシステムから上記ターゲットファイルシステムへクローンオブジェクトを複製する処理は、該クローンオブジェクトが、上記ソースファイルシステム内の新しい親スナップショットのファイルオブジェクトを有するターゲットファイルシステムに予め複製されたクローンオブジェクトである場合に、上記新しい親スナップショットのファイルオブジェクトに関連する、上記ソースファイルシステム内のクローンオブジェクトの分岐ブロックを複製することを更に含むものとしてもよい。
【００１１】
上記ソースファイルシステムから上記ターゲットファイルシステムへクローンオブジェクトを複製する処理は、該クローンオブジェクトが、上記ターゲットファイルシステムに予め複製されたクローンオブジェクトであった通常のファイルオブジェクトであり、かつ、上記予めの複製以後にデクローンされている場合に、上記通常のファイルオブジェクトの全てのユーザ／メタデータのブロックを複製することにより、上記通常のファイルオブジェクトを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製することを更に含むものとしてもよい。
【００１２】
上記方法は、上記クローンオブジェクトの複製に先立ち、親スナップショットのファイルオブジェクトを、ソースファイルシステムからターゲットファイルシステムに複製することを更に含むものとしてもよい。
【００１３】
上記クローンオブジェクトの複製処理は、上記クローンオブジェクトのチャンクキューへの複製のために最初の作業項目を追加することを含むものとしてもよい。また、上記クローンオブジェクトの複製処理は、親スナップショットのファイルオブジェクトが旧オブジェクトである場合に上記クローンオブジェクトを上記ターゲットファイルシステムに複製すること、及び、親スナップショットのファイルオブジェクトが新しいオブジェクトである場合に上記クローンオブジェクトを上記ターゲットファイルシステムに複製することなく最初の作業項目の実行を終了させることを含む最初の作業項目を、実行することを含むものとしてもよい。
【００１４】
上記親スナップショットのファイルオブジェクトの複製処理は、親スナップショットのファイルオブジェクトの複製のために第１作業項目をクローンキューに追加すること、及び、上記クローンオブジェクトの次の複製のために第２作業項目を未処理マップに追加することを含むものとしてもよい。また、上記複製処理は、上記第１作業項目を実行して親スナップショットのファイルオブジェクトを複製すること、及び、親スナップショットのファイルオブジェクトのその様な複製の完了に伴って、上記第２作業項目を、上記未処理マップから上記クローンキューに移動させることを含むものとしてもよい。上記最初の作業項目は、「生成」作業項目であってもよい。上記第１作業項目は、「ＳＰＡＷＮ」作業項目または「ＡＣＴＩＶＥ」作業項目であってもよい。上記第２作業項目は、「ＳＰＡＷＮ」作業項目または「ＡＣＴＩＶＥ」作業項目であってもよい。
【００１５】
本発明の第２実施形態では、クローンオブジェクトをソースファイルシステムからターゲットファイルシステムへ複製するためのデータストレージシステムが提供される。該データストレージシステムは、ソースファイルシステム及びソースストレージプロセッサを有するソース、及び、ターゲットファイルシステム及びターゲットストレージプロセッサを有するターゲットを有する。上記ソースストレージプロセッサは、上記クローンオブジェクトが上記ソースファイルシステムにおいて変更されたオブジェクトである場合に、上記クローンオブジェクトをソースファイルシステムからターゲットファイルシステムに複製する様に構成される。該複製は、上記クローンオブジェクトが新規に生成されたクローンオブジェクトである場合に、上記クローンオブジェクト及びその親スナップショットのファイルオブジェクトのために必要なメタデータを、上記ターゲットストレージプロセッサへ送信することも含む。上記ターゲットストレージプロセッサは、（ａ）上記ソースストレージプロセッサからのメタデータ、及び（ｂ）ソースファイルシステムからターゲットファイルシステムへ予め複製されたクローンオブジェクトに関連付けられた、親スナップショットのファイルオブジェクトに基づき、ターゲットファイルシステム内でクローンオブジェクトを生成する様に構成される。また、上記ターゲットストレージプロセッサは、上記ターゲットファイルシステム内のクローンオブジェクトのクローンチェックポイント番号として、上記親スナップショットのファイルオブジェクトのブロックのチェックポイント番号よりも大きい値を確保する。更に、上記ソースストレージプロセッサ及び上記ターゲットストレージプロセッサは、上記ソースファイルシステム内のクローンオブジェクトに関連付けられた分岐ブロックが有る場合に、上記クローンオブジェクトに関連付けられた分岐ブロックを、上記ソースファイルシステムから上記ターゲットファイルシステムへ複製する様に構成される。
【００１６】
上記ターゲットストレージプロセッサは、クローンオブジェクトが、親スナップショットのファイルオブジェクトとの間で全てのブロックを最初に共有する様に、上記ターゲットファイルシステム内の親スナップショットのファイルオブジェクトのクローンとして、上記クローンオブジェクトを生成する様に構成されるものとしてもよい。
【００１７】
上記ターゲットストレージプロセッサは、上記ターゲットファイルシステム内のチェックポイントを発行して、該ターゲットファイルシステムの現在のチェックポイント番号を前進させると共に、上記クローンオブジェクトのクローンチェックポイント番号を、上記前進されたチェックポイント番号に設定し、これにより、上記ターゲットファイルシステム内のクローンオブジェクトのクローンチェックポイント番号として、上記親スナップショットのファイルオブジェクトのブロックのチェックポイント番号よりも大きい値を確保する様に構成されるものとしてもよい。例えば、上記ターゲットファイルシステム内の親スナップショットのファイルオブジェクトの最後に変更されたチェックポイント番号が、上記クローンオブジェクトが生成されたターゲットファイルシステムの現在のチェックポイント番号と等しい場合に、チェックポイントが発行されるものとしてもよい。
【００１８】
上記クローンオブジェクトに関連付けられた分岐ブロックの複製処理は、上記ソースストレージプロセッサにより、ソースファイルシステム内のクローンオブジェクトのクローニング以後に変更された、上記ソースファイルシステム内のクローンオブジェクトのブロックを検出することを含むものとしてもよい。ここで、上記検出処理は、幾つかのブロックの各々に関連付けられたチェックポイント番号を、上記ソースファイルシステム内のクローンオブジェクトのクローンチェックポイント番号と比較することを含む。また、上記複製処理は、上記ソースストレージプロセッサにより、上記クローンチェックポイント番号以上のチェックポイント番号を有するブロックを、上記ターゲットストレージプロセッサへ送信することを含むものとしてもよい。また、上記複製処理は、上記ターゲットストレージプロセッサにより、上記ソースストレージプロセッサから受信されたブロックに基づき、上記ターゲットファイルシステム内のクローンオブジェクトを更新することを含むものとしてもよい。
【００１９】
上記ソースストレージプロセッサは、更に、上記クローンオブジェクトが、予めの複製以後にクローンのプロパティを取得したターゲットファイルシステムに予め複製されたオブジェクトであるか否かを決定すると共に、上記クローンオブジェクトが、予めの複製以後にクローンのプロパティを取得したターゲットファイルシステムに予め複製されたオブジェクトであり、かつ、上記親スナップショットのファイルオブジェクトが、新規のオブジェクトでない場合に、上記クローンオブジェクト及びその親スナップショットのファイルオブジェクトのために必要なメタデータを、上記ターゲットストレージプロセッサへ送信する様に構成されるものとしてもよい。上記ターゲットストレージプロセッサは、更に、上記ソースファイルシステムからのメタデータと、上記ターゲットファイルシステム上の予め複製された、親スナップショットのファイルオブジェクトとに基づき、親スナップショットのファイルオブジェクトとの間で全てのブロックを最初に共有するクローンとして、上記ターゲットファイルシステム内のクローンオブジェクトを再生成する様に構成されるものとしてもよい。上記ソースストレージプロセッサ及び上記ターゲットストレージプロセッサは、更に、上記ソースファイルシステム内のクローンオブジェクトに関連付けられた分岐ブロックが有る場合に、該クローンオブジェクトに関連付けられた分岐ブロックを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製する様に構成されるものとしてもよい。上記ソースストレージプロセッサは、上記ソースファイルシステム内のクローンオブジェクトのクローンチェックポイント番号に基づいて、上記クローンオブジェクトが、予めの複製以後にクローンのプロパティを取得したターゲットファイルシステムに予め複製されたオブジェクトであるか否かを決定する様に構成されるものとしてもよい。
【００２０】
上記ソースストレージプロセッサは、更に、上記クローンオブジェクトが、上記ソースファイルシステム内に新しい親スナップショットのファイルオブジェクトを有するターゲットファイルシステムに予め複製されたクローンオブジェクトであるか否かを決定すると共に、上記クローンオブジェクトが、上記ソースファイルシステム内に新しい親スナップショットのファイルオブジェクトを有するターゲットファイルシステムに予め複製されたクローンオブジェクトである場合に、上記新しい親スナップショットのファイルオブジェクトに関連するソースファイルシステム内のクローンオブジェクトの分岐ブロックを複製するためのターゲットストレージプロセッサに対し、ユーザ／メタデータを送信する様に構成されるものとしてもよい。上記ターゲットストレージプロセッサは、更に、上記ユーザ／メタデータに基づき、上記ターゲットファイルシステム内のクローンオブジェクトの分岐ブロックを複製する様に構成されるものとしてもよい。
【００２１】
上記ソースストレージプロセッサは、更に、上記クローンオブジェクトが、上記ターゲットファイルシステムに予め複製されたクローンオブジェクトであった通常のファイルオブジェクトであり、かつ、上記予めの複製以後にデクローンされているか否かを判定し、上記クローンオブジェクトがその様な通常のファイルオブジェクトである場合に、上記通常のファイルオブジェクトを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製するための上記ターゲットストレージプロセッサに対し、上記通常のファイルオブジェクトの全てのユーザ／メタデータを送信する様に構成されるものとしてもよい。上記ターゲットストレージプロセッサは、更に、上記ソースファイルシステムからの上記ユーザ／メタデータに基づき、上記通常のファイルオブジェクトの全てのユーザ／メタデータのブロックを複製することにより、上記通常のファイルオブジェクトを複製する様に構成されるものとしてもよい。
【００２２】
上記ソースストレージプロセッサは、更に、上記クローンオブジェクトの複製に先立ち、上記親スナップショットのファイルオブジェクトを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製させる様に構成されるものとしてもよい。これに関連し、上記クローンオブジェクトの複製処理は、上記クローンオブジェクトのチャンクキューへの複製のために最初の作業項目を追加することを含むものとしてもよい。また、上記クローンオブジェクトの複製処理は、上記親スナップショットのファイルオブジェクトが旧オブジェクトである場合に上記クローンオブジェクトを上記ターゲットファイルシステムに複製すること、及び、上記親スナップショットのファイルオブジェクトが新しいオブジェクトである場合に上記クローンオブジェクトを上記ターゲットファイルシステムに複製することなく最初の作業項目の実行を終了させることを含む最初の作業項目を、実行することを含むものとしてもよい。上記親スナップショットのファイルオブジェクトの複製処理は、上記親スナップショットのファイルオブジェクトの複製のために第１作業項目をクローンキューに追加すること、及び、上記クローンオブジェクトの次の複製のために第２作業項目を未処理マップに追加することを含むものとしてもよい。また、上記複製処理は、上記第１作業項目を実行して上記親スナップショットのファイルオブジェクトを複製すること、及び、上記親スナップショットのファイルオブジェクトのその様な複製の完了に伴って、上記第２作業項目を、上記未処理マップから上記クローンキューに移動させることを含むものとしてもよい。上記最初の作業項目は、「生成」作業項目であってもよい。上記第１作業項目は、「ＳＰＡＷＮ」作業項目または「ＡＣＴＩＶＥ」作業項目であってもよい。上記第２作業項目は、「ＳＰＡＷＮ」作業項目または「ＡＣＴＩＶＥ」作業項目であってもよい。
【００２３】
また、これらの実施形態は、ソースストレージプロセッサ及びソースファイルシステムを有するソースを含み、上記ソースストレージプロセッサは、特許請求の範囲または本明細書内に記載されている様々なソースオペレーションの何れかを実行する様に構成されるものとしてもよい。
【００２４】
また、これらの実施形態は、ターゲットストレージプロセッサ及びターゲットファイルシステムを有するターゲットを含み、上記ターゲットストレージプロセッサは、特許請求の範囲またはその本明細書内に記載されている様々なターゲットオペレーションの何れかを実行する様に構成されるものとしてもよい。
【００２５】
また、これらの実施形態は、特許請求の範囲または本明細書内に記載されている様々なソースオペレーションまたはターゲットオペレーションの何れかを実行する様に構成された１以上のコンピュータプログラムを含むものとしてもよい。コンピュータプログラムは、例えば、有形かつ非一時的なコンピュータ読み取り可能な媒体の様な、コンピュータ読み取り可能な媒体に記録されるものとしてもよい。
【００２６】
更なる実施形態が追加されて開示及びクレームされるものとしてもよい。
【図面の簡単な説明】
【００２７】
本実施形態の上述した特徴は、添付の図面を参照しながら以下の詳細な説明を参照することにより、より容易に理解されるであろう。
【００２８】
【図１】図１は、本発明の例示的な一実施形態に係るファイルストレージシステムの概略ブロック図である。
【図２】図２は、本発明の例示的な一実施形態に係る一般的な形式のファイルシステムインスタンス化を示す概略ブロック図である。
【図３】図３は、本発明の例示的な一実施形態に係る一般的な形式のオブジェクトツリー構造を示す概略ブロック図である。
【図４】図４は、本発明の例示的な一実施形態に係る、ソースオブジェクト（ファイルＡ）、隠しデータストリームスナップショットオブジェクト及び可変クローン間の関係を概略的に示す図である。
【図５】図５は、例示的な一実施形態に係る、チャンクキュー用の作業項目を生成する際のロジックフローチャートである。
【図６】図６は、例示的な一実施形態に係る、ソースファイルシステム内のスナップショットファイルツリーの生成順序と比較した場合の、ターゲットファイルシステム内のスナップショットファイルツリーの生成順序を示す概略図である。
【図７】図７は、例示的な一実施形態に係る、図６のＳＦによりルートされたスナップショットファイルツリーをターゲットファイルシステムに複製する処理を概略的に示すロジックフローチャートである。
【図８】図８は、例示的な一実施形態に係る、ターゲットによる新規クローンオブジェクトの生成処理を概略的に示すロジックフローチャートである。
【図９】図９は、本発明の例示的な一実施形態に係るファイルサーバの関連構成要素を示す概略ブロック図である。
【図１０】図１０は、例示的なスナップショットファイルツリーを表す図である；
【図１１】図１１は、例示的な一実施形態に係る、ストレージプロセッサにより維持されるソースワークキュー及びファイバのタイプを表す概略図である。
【図１２】図１２は、例示的な一実施形態に係る「生成」作業項目を説明するための状態図である。
【図１３】図１３は、例示的な一実施形態に係る「ＳＰＡＷＮ」作業項目を説明するための状態図である。
【図１４】図１４は、例示的な一実施形態に係る「ＡＣＴＩＶＥ」作業項目を説明するための状態図である。
【図１５】図１５は、例示的な一実施形態に係る「変更」作業項目を説明するための状態図である。
【００２９】
描かれた上述の図面及び構成要素は、必ずしも一貫した縮尺または任意の縮尺通りのものではないことに留意されたい。特に記載のない限り、同一の構成要素には同一の参照番号が付されている。
【特定の実施形態の詳細な説明】
【００３０】
この記載及び添付のクレームにおいて使用される様に、以下の用語は、その文脈がそれ以外の意味を要求しない限り、以下に示す意味をもつものとする。「記憶デバイス」とは、データを記憶するのに使用されるデバイスまたはシステムである。記憶デバイスは、１以上の磁気または磁気−光または光ディスクドライブ、ソリッドステート記憶デバイスまたは磁気テープを含むことができる。簡便にするために、記憶デバイスが、「ディスク」または「ハードディスク」と呼ばれる場合もある。データストレージシステムは、同一または異なる記憶容量を有する、同一または異なるタイプの記憶デバイスを含むことができる。
【００３１】
「ＲＡＩＤ制御装置」は、複数の記憶デバイスの記憶容量を記憶スペースの仮想部分に合体させるデバイスまたはシステムであるが、代替的に、「システムドライブ」（「ＳＤ」）、「論理ユニット」（「ＬＵ」または「ＬＵＮ」）または「ボリューム」と呼ばれる場合もある。典型的には、ＳＤは、単一の記憶デバイスよりも大きく、複数の記憶デバイスからスペースを引き出し、冗長情報を含むことで、データを損失せずに、特定の数のディスクの破損に耐えることができる。例示の実施形態において、各々のＳＤは、独自の識別子に対応付けられており（以下、この識別子を、「論理ユニット識別子」または「ＬＵＩＤ」と呼ぶ）、各々のＳＤはもはや、例えば２ＴＢ〜６４ＴＢまたはそれ以上の所定の最大サイズよりも大きくならない。特定のＳＤにコマンドが送られると、ＲＡＩＤ制御装置は典型的には、このコマンドを同時にこのＳＤの全ての記憶デバイスに転送する。ＲＡＩＤ制御装置は、典型的な記憶デバイスの３つの主な制約、すなわち、記憶デバイスは典型的にはストレージシステムの最も遅い構成要素であること、それらが典型的には重大な障害を受ける可能性が最も高いこと、及びそれらが典型的には相対的に小さな記憶容量を有すること、といった制約を克服する助けをする。
【００３２】
「ＲＡＩＤシステム」は、１以上のＲＡＩＤ制御装置と幾つかの記憶デバイスとを含むデバイスまたはシステムである。典型的には、ＲＡＩＤシステムは、２つのＲＡＩＤ制御装置と（これにより一方は、他方が故障した場合に作動することが可能であり、また両方が正常なときは負荷を共有することができる）、数ダースの記憶デバイスとを含む。例示の実施形態において、ＲＡＩＤシステムは典型的には、２個から３２個のＳＤによって構成される。ファイルサーバが、データの記憶または取り出しを必要とする際、ＲＡＩＤシステムのＲＡＩＤ制御装置にコマンドを送り、ＲＡＩＤ制御装置が、個々の記憶デバイスに向けてコマンドをルーティングし、必要に応じて、データを記憶したり取り出したりする作業を担っている。一部のＲＡＩＤシステムの場合、ＳＤ間にミラー関係を確立することができるため、１つのＳＤ（「一次ＳＤ」と呼ばれる）に書き込まれたデータは、重複させる目的で、ＲＡＩＤシステムによって自動的に、別のＳＤ（「本明細書では二次ＳＤ」または「ミラーＳＤ」と呼ばれる）に書き込まれる。二次ＳＤは、同一のＲＡＩＤシステムによって一次ＳＤとして、あるいは、異なるローカルまたはリモートＲＡＩＤシステムによって管理される。ＳＤをミラーすることにより、ＳＤの全体にわたってＲＡＩＤ１＋０機能を効果的に与えることで、１つのＳＤ、あるいは、一部の状況では場合によって更に複数のＳＤの損失や破損を回復させることができる。
【００３３】
「ファイルシステム」は、ファイルストレージシステム内に記憶された特定の構造のファイル及びディレクトリ（フォルダ）である。ファイルストレージシステムにおいて、ファイルシステムは典型的には、幾つかの仮想記憶構造を使用して管理されており、例示の実施形態では、フィイルシステムは、レンジ、ストライプセット及びスパンと呼ばれる仮想記憶構造のヒエラエルキーを使用して管理されている。「レンジ」は、一次ＳＤそのもの、または一次／二次ＳＤの組の何れかから構成されており、この組は、同一のデータを含むため、単独のＳＤと同じ記憶容量を提供することが想定される。「ストライプセット」は、１以上のレンジにより構成される。「スパン」は、１以上のストライプセットにより構成される。よって、スパンは最終的には、１以上のＳＤ（典型的には４から５０のＳＤ）により構成される。スパンは、１以上のファイルシステムに分割することができ、各々のファイルシステムは、別々の名前と、識別子、及び場合によっては異なる特徴（例えば、あるファイルシステムは３２ＫＢのブロックよって初期化され、別のファイルシステムは４ＫＢのブロックによって初期化される、あるファイルシステムは、ワームであり、別のファイルシステムはそうでない場合等）を有する。スパン上の各々のファイルシステムは、別々に初期化され、マウントされ、アンマウントされる。ファイルシステムは、任意の順番で任意の時間に生成及び削除されるものとしてもよい。ファイルシステムは、典型的に、自動的に拡張する（代替的に、自動拡張を阻止または制限する）、あるいは、手動により拡張可能な様に構成することができる。
【００３４】
「ブロック」は、ユーザデータ及び／またはシステムデータが格納される物理ストレージの部分に対応する、ファイルシステム内のストレージの一単位である。（後述する）ファイルシステムオブジェクトは、一般的に、１以上のブロックを有する。「スナップショットファイル」または「ＳＦ」は、米国特許出願公開第２０１２／０１３０９４９号明細書（代理人整理番号２３３７／１３０）に記載されたオブジェクトクローニングプロセスの一部として生成されるファイルシステムオブジェクトである。ここで、上記米国特許出願公開第２０１２／０１３０９４９号明細書の全ての内容は、参照により本明細書に組み込まれており、本発明の特定の実施形態において使用される。スナップショットファイルは、共有されたユーザ／メタデータのブロックを所有すると共に、これらのユーザ／メタデータのブロックを共有するクローンにより参照されるクローニングプロセスの実行中に生成される、データストリームスナップショットオブジェクトである。
【００３５】
スナップショットファイルの「後継」または「子」は、通常のファイルクローン（「ライブファイル」とも呼ばれる）か、これを参照するスナップショットファイルかの何れかである。
【００３６】
クローンまたはスナップショットファイルの「親」は、クローンまたはスナップショットファイルが参照するスナップショットファイルである。
【００３７】
「ルートスナップショットファイル」は、親をもたないスナップショットファイルである。
【００３８】
「新スナップショット」は、ターゲットに複製されている、ソース上で用いられるスナップショットである。
【００３９】
「前スナップショット」は、ターゲットファイルシステムに複製された最新のスナップショットである。
【００４０】
「新規オブジェクト」は、前スナップショットのチェックポイント番号よりも大きい生成チェックポイント番号を有するオブジェクトである。
【００４１】
「旧オブジェクト」は、前スナップショットのチェックポイント番号以下の生成チェックポイント番号を有するオブジェクトである。
【００４２】
「変更オブジェクト」は、前スナップショットのチェックポイント番号よりも大きい、最後に変更されたチェックポイント番号（オブジェクトが生成または変更された最後のチェックポイントを表すチェックポイント番号）を有するオブジェクトである。
【００４３】
「削除オブジェクト」は、前スナップショットには存在していたが新スナップショットでは削除されたオブジェクトである。
【００４４】
本明細書の文脈では、「クローン」という用語は、親スナップショットのファイルを参照する通常タイプのファイルまたはスナップショットファイルのオブジェクトを指すものとする。
【００４５】
所与の複製サイクルに関し、「クローンオブジェクト」は、前複製サイクルのクローンオブジェクトとして存在したオブジェクト（但し、前複製サイクルの以後に、変更、削除、デクローン、または、新しい親スナップショットのファイルオブジェクトの獲得があってもよい）、あるいは、前複製サイクルの以後にクローンオブジェクトになったオブジェクト（例えば、新規に生成されたクローンオブジェクト、または、以前に複製され、クローンのプロパティを獲得したオブジェクト）である。
【００４６】
「セット」の値は、１以上の値を含むものとしてもよい。
【００４７】
以下の説明では、便宜上、見出しを使用するが、見出しは、何れにしても、本発明を限定するものとして解釈されない。
【００４８】
１．例示的なファイルストレージシステム
以下では、日立データシステムズ社が販売する様々なファイルサーバにおいて使用されるタイプの例示的なファイルシステムを参照しながら、本発明の例示としての実施形態について、説明する。
【００４９】
上記システムは、Ｂｌｕｅ  Ａｒｃ  ＴｉｔａｎTMやＭｅｒｃｕｒｙTMのファイルサーバとして、一般的に知られているが、本発明の様々な概念は、他の種類のファイルシステムに対しても適用可能である。
【００５０】
図１は、本発明の例示的な一実施形態に係るファイルストレージシステムの概略ブロック図である。とりわけ、ファイルストレージシステムは、通信ネットワーク１０４を介してターゲットファイルサーバ１０６（以下、簡単のため、「ターゲット」と呼ぶことがある）と通信するソースファイルサーバ１０２（以下、簡単のため、「ソース」と呼ぶことがある）を有する。ソースサーバ１０２はソースファイルシステム１０３を管理する一方、ターゲットサーバ１０６はターゲットファイルシステム１０７を管理する。各サーバは、典型的には、インターネットプロトコルネットワーク（例えば、インターネット）の様な通信ネットワークを介して様々なクライアント装置と通信を行うと共に、ファイバチャネルネットワークの様なストレージネットワークを介して様々なＲＡＩＤシステムとも通信を行う。上記クライアント装置及び上記ファイルサーバは、例えば、ＣＩＦＳ及び／またはＮＦＳの様な１以上のネットワークファイルプロトコルを用いて通信を行う。上記ファイルサーバ及び上記ＲＡＩＤシステムは、例えば、ＳＣＳＩの様なストレージプロトコルを用いて通信を行う。
【００５１】
各ファイルサーバは、各ファイルシステムを管理するためのストレージプロセッサを含む。ファイルサーバは、クライアントが、ファイルシステムの一部、例えば指定された名の下にツリーまたはサブツリーにアクセスすることができる様に、構成することができる。ＣＩＦＳ用語では、この様なアクセスは、「シェア」と呼ばれることがあり、ＮＦＳ用語では、この様なアクセスは、「エクスポート」と呼ばれることがある。内部では、各ファイルサーバは、例えば、米国特許第６８２６６１５号明細書（代理人整理番号２３３７／１０３）及び米国特許第８１８０８９７号明細書（代理人整理番号２３３７／１０８）に記載される様に（これらの明細書の全ての内容は、参照により本明細書に組み込まれている）、様々なハードウェアが実装された及び／またはハードウェアアクセレートされたサブシステムを含むことができ、例えば、米国特許第７４５７８２２号明細書（代理人整理番号２３３７／１０４）及び米国特許第８２２４８７７号明細書（代理人整理番号２３３７／１１７）に記載される様に（これらの明細書の全ての内容は、参照により本明細書に組み込まれている）、複数の接続されたサブモジュールを含むハードウェアベースのファイルシステムを含む場合もある。
【００５２】
各々のＲＡＩＤシステムは、典型的には、少なくとも１つのＲＡＩＤ制御装置（通常は重複させるために２つのＲＡＩＤ制御装置）、及び、該ＲＡＩＤ制御装置によって管理される幾つかの物理的記憶デバイス（例えばディスク）を含む。ＲＡＩＤシステムは、その記憶リソースを幾つかのＳＤに集約する。例えば、各々のＲＡＩＤシステムは、２個〜３２個のＳＤによって構成されるものとしてもよい。各々のＳＤは、所定の最大サイズ（例えば、２ＴＢ〜６４ＴＢまたはそれ以上）に制限されるものとしてもよい。複数の記憶デバイスを１つのＳＤに合体させることにより、幾つかの利点が得られる。これらの利点には、速度の上昇（個々の記憶デバイスは比較的速度が遅いが、データを複数の記憶デバイスに渡ってストライプすることで、ボトルネックを広げることができる）、容量の増加（個々の記憶デバイスは比較的小さいが、複数の記憶デバイスを組み合わせることで、より広い利用可能スペースを提供することができる）、抽象化（利用されるスペースの大きさは、単独の記憶デバイスのサイズよりも大きいか、あるいはそれより小さいかの何れかであり得る）、及び復元力（パリティまたは冗長情報を、各々の記憶デバイスに記憶することができるため、ＳＤは、記憶デバイスの損失にも耐えることができる）が含まれる。
【００５３】
各ファイルサーバは、各ＲＡＩＤシステムから、１以上のＳＤを使用する様に構成されている。ファイルサーバは通常、ＲＡＩＤシステムに問い合わせをすることで、各々のＳＤが一次または二次の何れであるかを検知することができる。何れのＳＤが上記ファイルサーバによって使用されるかを制御する方法は、本明細書では「ライセンシング」と呼ばれることがある。従って、実際には、ファイルサーバ１０２は典型的には、一部のＳＤのために認可され、他のＳＤのためには認可されないことになる。
【００５４】
内部では、各ファイルサーバは、複数のＳＤを、本明細書では「スパン」と呼ばれるより大きな記憶プールに組み込むことが可能である。スパンは基本的に、ＲＡＩＤ０配列の複数のＳＤである。複数のＳＤを１つのスパンに組み込むことで、複数の物理的ディスクを１つのＳＤに組み込むことによって得られる利点と同様の幾つかの利点を得ることができる。この利点には、速度の上昇（複数のＲＡＩＤシステム上の複数のＳＤ間のＩ／Ｏを広げることで、ストレージのボトルネックを更に広げることができる）、記憶容量の増加（スパンは、２テラバイトに制限され得る単独のＳＤよりも大きくなる可能性がある）、及び付加的な復元力（これにより、より柔軟性の高い記憶スペースの割り当てが可能になる）が含まれる。
【００５５】
各ファイルサーバは、上記ファイルシステム内に様々な種類のオブジェクトを記憶する。オブジェクトは、一般的に、システムオブジェクト及びファイルオブジェクトとして分類することができる。ファイルオブジェクトは、ユーザデータ及び関連する属性、例えばワードプロセッサまたはスプレッドシートファイル等を記憶するために生成される。システムオブジェクトは、ファイルストレージシステムによって情報を管理するために形成され、ルートディレクトリオブジェクト、フリースペース割り当てオブジェクト、変更後のチェックポイントオブジェクトリストオブジェクト、変更後に保持されるオブジェクトリストオブジェクト及びソフトウェアメタデータオブジェクト等を含むが、ここに挙げたのはほんの数例である。より具体的には、ディレクトリオブジェクトは、ディレクトリ情報を記憶するために生成される。フリースペース割り当てオブジェクトは、フリースペース割り当て情報を記憶するために生成される。変更後のチェックポイントオブジェクトリストオブジェクト及び変更後に保持されるオブジェクトリストオブジェクトは（これらは何れも、以下において更に詳述される）、チェックポイント及び保持されるチェックポイントのそれぞれに関連する情報を記憶するために生成される。ソフトウェアメタデータオブジェクト（これは、以下において更に詳述される）は、ファイルまたはディレクトリオブジェクトに関連する過剰なファイル属性（すなわち、以下に記載する様な、ファイルまたはディレクトリオブジェクト内で事前に指定された領域に適合不能なファイル属性、例えば、ＣＩＦＳセキュリティ属性）を保持するための特殊なオブジェクトであり、ファイルまたはディレクトリオブジェクトの生成者によって生成される。該生成は、ファイルまたはディレクトリオブジェクト内でのソフトウェアメタデータオブジェクトの参照を含む。
【００５６】
ある実施形態では、上記ファイルシステムのインスタンス化は、ルートノード（動的スーパーブロックまたはＤＳＢと呼ばれる）を有するツリー構造を使用して管理される。各ファイルサーバは、複数のＤＳＢを保持することで、種々のチェックポイントを表す種々の型（例えば、現在「作業中の」型及び１以上の「チェックポイント」型）のファイルシステムを記憶することができる。１つの例示的な実施形態では、上記ＤＳＢは、間接オブジェクトに対するポインタを含んでおり、この間接オブジェクトは、他のオブジェクトに対するポインタを含んでいる。該間接オブジェクトにより参照される各オブジェクトは、オブジェクト番号に関連付けられている。典型的には、システムオブジェクトは、通常は常にシステム内に存在するため、所定のオブジェクト番号を固定的に有する。典型的には、ファイルオブジェクトには、利用可能なオブジェクト番号のプールの中からオブジェクト番号が動的に割り当てられる。これらのファイルオブジェクト番号は、幾つかの状況（例えば、ファイルが削除された結果、そのファイルのオブジェクト番号が空き、次のファイルオブジェクトにより再使用可能となった場合）において、再使用されるものとしてもよい。上記間接オブジェクトには、対応するオブジェクトに対するポインタを得るために、オブジェクト番号によってインデックスを付与することができる。
【００５７】
図２は、本発明の例示的な一実施形態に係る一般的な形式のファイルシステムインスタンス化を示す概略ブロック図である。ＤＳＢ２０２は、ファイルシステムのツリー構造のルートを表す特別な構造である。とりわけ、ＤＳＢ２０２は、間接オブジェクト２０４に対するポインタを含んでおり、この間接オブジェクト２０４は、システムオブジェクト２０６及びファイルオブジェクト２０８を含むファイルシステム内の他のオブジェクトに対するポインタを含んでいる。
【００５８】
一般的に、間接オブジェクト２０４、システムオブジェクト２０６の各々、及び、ファイルオブジェクト２０８の各々を含む、上記ファイルシステム内の各オブジェクトは、別々のオブジェクトルートノード（これをルートオーノード（ｏｎｏｄｅ）と呼ぶことがある）を含む別々のツリー構造を用いて実行される。また、上記各オブジェクトは、選択的に、幾つかの間接ノード（これを間接オーノードと呼ぶことがある）、直接ノード（これを直接オーノードと呼ぶことがある）、及びストレージブロックを含むことがある。上記ＤＳＢ２０２は、間接オブジェクト２０４のルートノードに対するポインタを含む。間接オブジェクトは、他のオブジェクト２０６、２０８のルートノードに対するポインタを含む。
【００５９】
図３は、本発明の例示的な一実施形態に係る一般的な形式のオブジェクトツリー構造を示す概略ブロック図である。ルート（「Ｒ」）ノード３０２は、様々な間接（「Ｉ」）ノード３０４を指し示し、間接（「Ｉ」）ノード３０４の各々は、幾つかの直接（「Ｄ」）ノード３０６を指し示し、直接（「Ｄ」）ノード３０６の各々は、幾つかのストレージブロック（「Ｂ」）３０８を指し示すものとしてもよい。実際には、オブジェクトツリー構造は、例えば、オブジェクトのサイズ次第で、大きく変化し得る。また、特定のオブジェクトのツリー構造は、情報がオブジェクトに追加される時間やオブジェクトから削除される時間において変化し得る。例えば、より多くのストレージスペースがオブジェクトのために使用されている時は、ノードは、上記ツリー構造に動的に追加されるものとしてもよい。また、異なる間接レベルが、必要に応じて使用されるものとしてもよい（例えば、間接ノードは、直接ノードを指し示したり、他の間接ノードを指し示したりすることができる）。
【００６０】
オブジェクトが生成される際、このオブジェクトのために、オブジェクトルートノードが生成される。最初に、この様な「エンプティ」オブジェクトのルートノードは、何れの間接ノード、直接ノードまたはデータブロックに対するポインタも持たない。
【００６１】
上記オブジェクトにデータが追加される際、該データは、最初に、ルートノードが直接指し示すデータブロックに入れられる。一旦、ルートノードにおける全ての直接ブロックポインタが塞がると、その後、ルートノードから直接ノードへのポインタを有する直接ノードが生成される。オブジェクト内のデータが増大して、直接ノードにおける全てのデータポインタが塞がった場合、間接ノードが生成される。
【００６２】
従って、時間の経過に伴い、ルートノードは、様々な間接ノードを指し示し、間接ノードの各々は、幾つかの直接ノードを指し示し、直接ノードの各々は、幾つかのストレージブロックを指し示すことができる。実際には、オブジェクトツリー構造は、例えば、オブジェクトのサイズ次第で、大きく変化し得る。また、特定のオブジェクトのツリー構造は、情報がオブジェクトに追加される時間やオブジェクトから削除される時間において変化し得る。例えば、より多くのストレージスペースがオブジェクトのために使用されている時は、ノードは、上記ツリー構造に動的に追加されるものとしてもよい。また、異なる間接レベルが、必要に応じて使用されるものとしてもよい（例えば、間接ノードは、直接ノードを指し示したり、他の間接ノードを指し示したりすることができる）。
【００６３】
上記オブジェクトルートノードは、上記オブジェクトが最後に変更されたチェックポイントを特定するためのチェックポイント番号を有する（チェックポイント番号は最初、オブジェクトが生成されたチェックポイントを特定し、その後、チェックポイント番号は、新しいチェックポイントにおいてオブジェクトが変更される毎に変化する）。例示的な一実施形態において、オブジェクトが生成されたチェックポイント番号もまた、オブジェクトルートノード内に記憶される。
【００６４】
上記オブジェクトルートノードもまた、様々なタイプのオブジェクトメタデータが記憶される、「イーノード（ｅｎｏｄｅ）」と呼ばれるストレージ領域を有する。
【００６５】
オブジェクトルートノードが対応する実際のデータに関し、オブジェクトルートノードは、対応するオブジェクトに関連する各データブロックに対する別個のポインタを有する。一般的には、１６個までのデータブロックに対するポインタが、上記オブジェクトルートノード内に記憶される。データが１６個のブロックを超えている場合、様々なノードをリンクさせるために各ノード内に必要に応じて記憶される適切なポインタを有する１以上の直接ノード及び／または間接ノードが、オブジェクトツリーにおいて必要となる。この様なポインタは、対応するデータブロックまたはノードに関連する、ディスク上のブロックのセクタ番号を記憶する。
【００６６】
上記直接ノードは、チェックポイント番号を有すると共に、上記オブジェクトに関する幾つかのブロック（例えば、約６０個または６１個のブロック）の位置を記憶する様に構成される。
【００６７】
第１直接ノードが、データブロックを特定するのに十分に活用されると、１以上の間接ノードは、上記オブジェクトに対応するデータブロックを有する追加の直接ノードに加え、第１直接ノードを特定するためにも使用される。この様な場合、上記オブジェクトルートノードは、上記間接ノードに対するポインタを有し、該間接ノードは、対応する直接ノードに対するポインタを有する。間接ノードが十分に活用されると、その後、必要に応じて、介在する追加の間接ノードが使用される。かかる構造により、ファイルのフラグメンテーション（断片化）に拘らず、ファイルを構成する部分を迅速に特定することができる。
【００６８】
上述した様に、上記間接ノードによって、ルートノード及び直接ノードの間に間接レベルが形成される。例示的な一実施形態において、間接ノード内には、以下の情報が記憶される。
・チェックポイント番号。
・間接または直接ノードの何れかに対するポインタ（例えば、６０個までのこの様なポインタ）。
・間接ノードの有効性をチェックすることができるＣＲＣ及び種々のサニティディーワード（ｄｗｏｒｄｓ）。
【００６９】
上述した様に、直接ノードによって、ディスク上のデータブロックに対する直接ポインタが提供される。例示的な一実施形態において、直接ノード内には、以下の情報が記憶される。
・チェックポイント番号。
・幾つかのデータブロックディスクリプタ（例えば、６０個までのこの様なディスクリプタ）。ここで、各データブロックディスクリプタは、データブロックに対するポインタ、チェックポイント番号及びブロックがゼロで満たされているか否かを示すビットを含む。
・間接ノードの有効性をチェックすることができるＣＲＣ及び種々のサニティディーワード（ｄｗｏｒｄｓ）。
【００７０】
各ノード（すなわち、ルート、間接、直接）内において、ブロックまたは他のノードに対する各ポインタは、チェックポイント番号に関連付けられており、該チェックポイント番号は、ポインタにより参照されるブロック／ノードに関連するチェックポイントを指し示す。
【００７１】
例えば、上記参照により本明細書に組み込まれた米国特許第７４５７８２２号明細書（代理人整理番号２３３７／１０４）、及び全ての内容が参照により本明細書に組み込まれている米国特許第８０４１７３５号明細書（代理人整理番号２３３７／１０５）に記載される様に、チェックポイント機構は、様々なタイミングで、上記ファイルシステムの一時的なコピー及び選択的に保持されたコピーを作成する様に備えられている。具体的には、ファイルシステムリクエストの処理は、例えば１０秒毎といったユーザ指定の幾つかの間隔と同じくらい高頻度に発生する様にスケジューリングされる一連のチェックポイントにより、明確に表現される。連続するチェックポイントの各々に関し、直前のチェックポイントから予め記憶されたファイル構造情報を受け継いだ現在のファイル構造情報が、ディスク上に記憶されている。チェックポイントには、連続した番号が付与され、ファイルリクエストの一時的なグループ処理に使用される。ファイルシステムオブジェクトの各々は、これらが生成されるチェックポイントと関連付けられる。また、生成チェックポイント番号は、オブジェクトルートノード内に記憶される。
【００７２】
選択された時点におけるファイルシステム構造の知識を有することは、多様な目的のために有益であるかもしれない。この能力は、現在保持されているチェックポイント（以下、簡単のため、保持チェックポイントまたは保持スナップショットと呼ぶ）に関連するファイルシステム構造データのストレージを許可することにより提供される。この保持チェックポイントは基本的に、特定のチェックポイントにおける読み取り専用バージョンのファイルシステム構造である。複数の保持チェックポイントを取得することが可能であり、機構は、選択された保持チェックポイントを削除する作業、あるいはファイルシステムを選択された保持チェックポイントに戻す（例えば、ファイルシステムを、カタストフィの後の既知の状態に戻す）作業も行う。
【００７３】
本発明の特定の実施形態において、例えば、全ての内容が参照により本明細書に組み込まれている上記米国特許出願公開第２０１２／０１３０９４９号明細書（代理人整理番号２３３７／１３０）に記載されたファイルクローニング機構を利用することで、例えばユーザがファイルのコピーを作成する際に、ファイルのコピー（クローン）をファイルシステム内に迅速に生成することが可能になる。例示的な実施形態において、ソースオブジェクトのクローンは、少なくとも最初は、このソースオブジェクトの様々な要素（例えば、間接オーノード、直接オーノード及びデータブロック）に対する参照を含む構造によって表される。読み取り専用クローン及び可変クローンの双方を生成可能である。ソースデータストリーム及びそのクローンは、最初はこの様な要素を共有し、ソースデータストリームまたは可変クローンが変更された場合には、変更されない要素（不変要素）を共有し続ける。ソースデータストリームに関連するデータストリーム（すなわち、間接／直接オーノード）を表すユーザデータブロックやメタデータブロックは何れも、クローンが生成されるときにコピーされる必要はない。クローンされたファイルは、適宜、「デクローン」されるものとしてもよい。
【００７４】
例示的な一実施形態において、ファイルシステムオブジェクトは、まず、ソースオブジェクトの読み取り専用クローン（スナップショット）を表す新たなオブジェクト（以下、「データストリームスナップショット（ＤＳＳ）」または「スナップショットファイル（ＳＦ）」オブジェクトと呼ぶ）を生成し、その後、このオブジェクトの可変クローンを生成することにより、クローンされる。クローンオブジェクトのルートオーノードにおけるブロックポインタ及びオーノードブロックポインタは最初、ソースオブジェクトと同一のブロックを指し示す様に設定される。上記ソースオブジェクトからの特定のメタデータ（例えば、ファイル時間、安全性等）、及び名前が付けられたデータストリームは、上記クローンオブジェクトにコピーされない。メタデータが、ソースオブジェクト及びクローンオブジェクトにおいて維持されることで、データストリームスナップショットオブジェクトが、ソースオブジェクト及び可変クローンオブジェクトに結合され、また、ソースオブジェクト及び可変クローンオブジェクトが、データストリームスナップショットオブジェクトに結合される。例示的な一実施形態において、データストリームスナップショットオブジェクトは、ファイルシステムのユーザには見ることができない「隠し」オブジェクトである。ソースオブジェクト及び可変クローンオブジェクトは何れも、実際には書き込み可能なバージョンのＤＳＳオブジェクトになり、実際には、これらのオブジェクトとＤＳＳオブジェクトとの相違点を記憶する。
【００７５】
図４は、本発明の例示的な一実施形態に係る、ソースオブジェクト（ファイルＡ）２８０２、隠しデータストリームスナップショットオブジェクト２８０３及び可変クローン２８０５間の関係を概略的に示す図である。
【００７６】
２．オブジェクトレベルでの複製の概要
上述した様に、データストレージシステムでは、ソースファイルシステムの幾つかまたは全てのオブジェクトが、例えば、アーカイブ、バックアップ、メンテナンス、障害復旧等を可能にするために、ターゲットファイルシステムに複製されるものとしてもよい。該ターゲットファイルシステムは、上記ソースファイルシステムと同一のファイルサーバ内に存在してもよいし、図１に示す様に、上記ソースファイルシステムとは別のファイルサーバ内に存在するものとしてもよい。
【００７７】
一般的に、オブジェクトレベルでの複製処理は、ターゲットファイルシステムにおいて、ソースファイルシステム内のオブジェクト構造に対応するオブジェクト構造を生成することを含む。例えば、ターゲットファイルシステムにおいてソースオブジェクト全体を複製するために、一般的に、ターゲットは、オブジェクトデータ及びメタデータに対するストレージブロックの割り当て、及び、ルートオーノード及びその他のノード／ブロックを含む様々なオブジェクトオーノード構造の生成を含む、オブジェクトのツリー構造全体を、ソースにより提供されるソースオブジェクトに関する情報に基づいて、構築する。しかしながら、上記ターゲットファイルシステム内のオブジェクトの実際のレイアウトは、上記ソースファイルシステム内の対応するオブジェクトのレイアウトとは異なることがある（一般的には異なる）ことに留意されたい。なぜなら、とりわけ、上記複製処理は、一般的に、上記ソースファイルシステム内のチェックポイントとは無関係に、上記ターゲットファイルシステム内のチェックポイントを管理するターゲット（例えば、上記ソースファイルシステムではチェックポイント数が１００であるのに対し、上記ターゲットファイルシステムではチェックポイント数が２００である）、及び、上記ソースファイルシステムとは無関係に、オーノード及びデータに対してブロックを割り当てる処理（例えば、ソースオブジェクトのためのデータブロックは、異なる時間に割り当てられるため、不連続なストレージに割り当てられることがあるのに対し、ターゲットオブジェクトのためのデータブロックは、一般的にほぼ同時に割り当てられるため、上記ターゲットファイルシステム内にオブジェクトが最初に生成される場合には、連続したストレージに割り当てられることがある）を含む。従って、上記複製処理は、ソースファイルシステムからターゲットファイルシステムにデータブロックを単にコピーする処理（例えば、ミラーリング処理）とは全く異なる。
【００７８】
例示的な実施形態では、上記複製処理は一般的に、繰り返し実行される。複製の１周期には、新たなスナップショットを取得する処理、新たなスナップショット内の間接オブジェクトをスキャンして、最後の複製周期に関連する以前のスナップショットから変化したオブジェクトを特定する処理（ここで、変化したオブジェクトは、以前のスナップショット以降に生成された新たなオブジェクト、以前のスナップショットから変更された既存のオブジェクト、及び、以前のスナップショットから削除されたオブジェクトを含む）、及び、上記変化したオブジェクトをターゲットファイルシステムに複製する処理が含まれる。例示的な一実施形態では、新規のオブジェクト及び変更されたオブジェクトは、チェックポイント番号（具体的には、新規オブジェクトは、以前のスナップショットのチェックポイント番号よりも大きい生成チェックポイント番号を有するのに対し、変更されたオブジェクトは、以前のスナップショットのチェックポイント番号以下の生成チェックポイント番号、及び、以前のスナップショットのチェックポイント番号よりも大きい最後に変更されたチェックポイント番号を有する）に基づいて特定される。一方、削除されたオブジェクトは、オブジェクトタイプにより特定される（すなわち、削除されたオブジェクトは、固有のオブジェクトタイプ名を有する）。上記複製周期の後、新たなスナップショットは、次の複製周期のための前のスナップショットとなる。この様に、各複製周期は実際には、変更されたオブジェクトのみの増分複製を行う。一般的に複製は周期的に行われるが、例示的な実施形態は、例えば、上記ターゲットファイルシステムへの最初の複製処理として、ソースファイルシステム全体の完全複製処理も実行可能であることに留意されたい。本明細書に記載されているオブジェクト複製の機構は、代替的な実施形態において、ファイルシステム基準というよりもオブジェクト基準の完全複製または増分複製のために使用可能であることに留意されたい。例えば、選択されたオブジェクトは、複製されるべき残りのソースファイルシステムが無くても、ターゲットファイルシステムに複製されるものとしてもよい。
【００７９】
特定の例示的な実施形態では、間接オブジェクトは、後に詳述する幾つかの間接オブジェクトスキャナファイバ（以下、纏めて「間接オブジェクトスキャナ」と呼ぶことがある）によりチャンクされた状態でスキャンされる。但し、代替的な実施形態においては、間接オブジェクトは、１つのスキャナにより処理されるものとしてもよい。具体的には、幾つかの間接オブジェクトスキャナファイバが生成（スポーン）され、各間接オブジェクトスキャナファイバは、間接オブジェクトの指定された部分（例えば、指定されたオブジェクト番号の範囲）をスキャンして、各チャンク内の変更または削除されたオブジェクトを幾つか特定する。間接オブジェクトスキャナファイバは、各チャンク内の変更されたオブジェクトを特定する際、後に詳述する様な作業項目を、対応するチャンクキュー内に生成する（ここで、例示的な実施形態は、間接オブジェクトチャンク毎に１つのチャンクキューを保持する）。以下、説明の便宜上、新規オブジェクトのための作業項目を「生成」作業項目と呼び、変更されたオブジェクトのための作業項目を「変更」作業項目と呼び、削除されたオブジェクトのための作業項目を「削除」作業項目と呼ぶ。詳細については後述するが、幾つかのリーダファイバは、上記チャンクキューから作業項目を取得し、該作業項目を処理する。とりわけ、間接オブジェクトをスキャンして作業項目を処理するための複数のファイバを使用することにより、この様なスキャン及び処理の並列実行が可能となる。
【００８０】
図５は、例示的な一実施形態に係る、チャンクキュー用の作業項目を生成する際のロジックフローチャートである。ソースは、間接オブジェクト内の各オブジェクトを検査する。もし、オブジェクトの生成チェックポイント番号が、前のスナップショットのチェックポイント番号よりも大きい場合（ブロック１９０２；ＹＥＳ）には、オブジェクトが新たに生成され、上記ソースは、適切なチャンクキューに「生成」作業項目を追加する（ブロック１９０４）。そうでない場合（ブロック１９０２；ＮＯ）、もし、上記オブジェクトの最後に変更されたチェックポイント番号が、前のスナップショットのチェックポイント番号よりも大きいとき（ブロック１９０６；ＹＥＳ）には、上記オブジェクトは、上記ターゲットファイルシステムに複製されたが、その後変更された既存のオブジェクトであり、上記ソースは、適切なチャンクキューに「変更」作業項目を追加する（ブロック１９０８）。そうでない場合（ブロック１９０６；ＮＯ）、もし、上記オブジェクトが、上記前のスナップショット以降に削除されたとき（ブロック１９１０；ＹＥＳ）には、上記ソースは、適切なチャンクキューに「削除」作業項目を追加する（ブロック１９１２）。そうでない場合（ブロック１９１０；ＮＯ）、上記複製の周期における上記オブジェクトの複製は不要である（ブロック１９１４）。
【００８１】
３．オブジェクトレベルでのクローンオブジェクトの複製
クローンオブジェクトの複製は、しばしば、クローンオブジェクトの所謂「ディープ」コピーを生成することにより実行される。すなわち、上記ソースファイルシステム内のクローンオブジェクトはしばしば、様々なデータ及びメタデータのブロックを共有するが、上記ターゲットファイルシステムでは、クローンソースオブジェクトが必ずデクローンされる様に、クローンオブジェクトは、その様な共有されたデータ及びメタデータのブロック無しに、生成される。例えば、ソースファイルシステム内で特定のブロックを共有する２つのオブジェクトは、ターゲットファイルシステム内では該ブロックを共有しない。代わりに、別々のブロックが、各オブジェクト毎に割り当てられる。ディープコピーを用いてクローンオブジェクトを複製することの１つのデメリットとして、ターゲットファイルシステム上でのクローンの複製に必要となる空き領域が、ソースファイルシステム上でクローンが占める領域よりも大きくなることが挙げられる。この様なクローンオブジェクトの「ディープ」複製は、実装の観点からは比較的簡易である一方、ターゲットファイルシステムでは、その様な「ディープ」複製の実行により、クローンファイルをもつことの幾つかのメリット（例えば、必要な記憶領域の減少）が失われる。
【００８２】
しかしながら、本発明の例示的な実施形態では、データ及びメタデータのブロックが、ターゲットファイルシステム内で生成されたクローンオブジェクトのために共有され続ける様に、クローンオブジェクトが複製される。米国特許出願公開第２０１２／０１３０９４９号明細書に記載された特定の例示的な実施形態における、スナップショットファイルオブジェクト（ＳＦ）がクローニングプロセス中に使用される方法によれば、スナップショットファイルツリーに関連するオブジェクトは一般的に、特定の順番で複製されなければならない。具体的には、親スナップショットファイルオブジェクトは、該オブジェクトの何れの子が複製されるよりも前に複製されることが確保される。従って、スナップショットファイルツリーの全体が複製される時には、複製処理は一般的に、ルートスナップショットファイルから始まり、その後、スナップショットファイルツリーの残りの部分が再帰的に複製される。
【００８３】
３．１  クローン複製の特徴の概要
本明細書に記載されたオブジェクトレベルでのクローン複製のしくみは、以下の特徴の幾つかまたは全てを有する：
・クローンは、ライブファイルシステム上で使用されるクローニング機構をエミュレートすることにより、オブジェクトの複製中にもクローンのオブジェクトプロパティを維持して、ターゲットファイルシステム上にクローンオブジェクトを生成する。
・複製されたクローンは、上記ターゲット上の同じ量の領域を使用する。上記ソースファイルシステムにおいてクローン間で共有されたユーザ／メタデータのブロックは、ターゲットファイルシステム上でも共有される。
・クローンを複製する際にソース及びターゲット間で転送されるデータは、最小限に抑えられる。複数のクローン間で共有されるユーザ／メタデータのブロックは、転送され、一旦、ターゲットファイルシステムに書き込まれる。分岐データのみが、各クローンオブジェクト毎に転送及び書き込みされる。
【００８４】
クローンオブジェクト及び他のタイプのオブジェクトを複製するのに使用される処理リソースは、シームレスに共有される。
【００８５】
上述の方法により、他のタイプのオブジェクトを複製するためのオブジェクト複製に使用される既存の全ての機構を再利用することができる。
【００８６】
・クローンを含むファイルシステムは、単一パス複製（すなわち、全ての変更オブジェクト及びこれらの複製を検出するために１回の間接オブジェクトのスキャンで足りる複製）により複製される。
【００８７】
所与のスナップショットファイルツリーの変更されたブランチのみが処理及び複製される。変更されていないブランチは処理されない。
【００８８】
新規のクローンオブジェクト（すなわち、前のスナップショットのチェックポイント番号よりも大きい生成チェックポイント番号を有する変更オブジェクト）は、新しいツリーのルート、またはブランチを始端として複製される。
【００８９】
新しいツリーのルート、またはブランチは、変更オブジェクトを処理する際に、新規のスナップショットファイルの親の生成チェックポイントを調べることにより、容易に特定される。Ｎ個の新規スナップショットファイルオブジェクトを有する複製セッションに掛かるオーバヘッドは、イーノードのメタデータに対するＮ回のアクセス及びルートオーノードに対するＮ回のアクセスである。
・資源の有用性次第では、ツリーの並列化されたレベル順ウォークを、ツリーの深さ優先型ウォークと組み合わせて、新規クローンのツリーまたはブランチを複製することが可能である。
・複製中に処理されるクローンの数、クローンのツリーのサイズ、または、同一のスナップショットファイルを参照するクローンの数には制限がない。
・他のタイプのオブジェクトとは対照的に、ターゲット上の新規クローンの複製に掛かるオーバヘッドは、必要に応じてチェックポイントを生じさせる、スナップショットファイルのルートオーノードに対するリードアクセス、及び、クローンのルートオーノードに対するライトアクセスである。
・他のタイプのオブジェクトとは対照的に、ターゲット上の変更クローンの複製にはオーバヘッドは掛からない（ここで、変更オブジェクトとは、前のスナップショットのチェックポイント以下の数の生成チェックポイントを有する変化したオブジェクトである）。
・クローンがソースデータストリームであった場合、親スナップショットファイルが変化した場合、または、クローンがデクローンされた場合の様な特別なケースでは、ターゲットファイルシステム上で、幾つかの付加データの転送及び書き込みが為されることがある。その様なケースでは、追加の処理により効果が失われてしまうこともあるが、更なる最適化が可能である。
・他のタイプのオブジェクトとは対照的に、ターゲット上の削除クローンの複製にはオーバヘッドは掛からない（ここで、削除オブジェクトとは、現在のスナップショット内には存在しないが前のスナップショット内に存在する変化したオブジェクトである）。
・クローンオブジェクトの変化は、ソース及びターゲットの双方に存在する複数のファイバを用いて、並行して複製される。
【００９０】
変更クローン、新規のブランチ、同一スナップショットファイルの何れか、及び、新たな独立したツリーは、ソース及びターゲットの双方に存在する複数のファイバを用いて、並行して複製される。
・並行して処理されるクローンの数は、複製処理に割り当てられた全てのリソースによってのみ制限される。
【００９１】
３．２  クローンの複製
以下、例示的な実施形態に係るクローン複製の概念について、クローン複製の特別な態様も含めて説明する。
【００９２】
３．２．１  削除クローンオブジェクトの複製
ソースが、ソースファイルシステムからオブジェクトが削除されたことを検知すると、ソースは、ターゲットファイルシステムから、対応するオブジェクトを削除することをターゲットに指示し、ターゲットは、該オブジェクトを削除する。ある状況では、ターゲットファイルシステムからオブジェクトが削除されても、例えば、削除されたオブジェクトのクローンを削除または複製するために、削除されたオブジェクトの特定のブロックだけは保持されなければならない。例示的な実施形態では、削除オブジェクトのブロックは、複製処理中に使用されるスナップショット機構の一部分として自動的に保持される。従って、その様なブロックは、全てのオブジェクトにより使用されなくなるまで、使用可能な状態を維持する。
【００９３】
３．２．２  新たに生成されたクローンオブジェクトの複製
最初に、ソースファイルシステムでは、クローンの生成は、ソースデータストリームの読み出し専用スナップショットであるスナップショットファイルの生成を含む。該生成処理の間、上記ソースデータストリームは、上記スナップショットファイルのクローンになる。その後、上記スナップショットファイルの可変クローンが生成される。各クローンは、スナップショットファイルに関連付けられたチェックポイントの番号を参照するためのクローンチェックポイント番号を有する。クローンはまず、自クローンの全てのデータブロック、及び、データブロックを記述するオーノードツリーのメタデータブロックを、自クローンのスナップショットファイルとの間で共有する。クローンのユーザ／メタデータのブロックが初めて変更されると、該ブロックは、新たな領域に書き込まれ、分岐ブロックとなる。
【００９４】
複製処理の間、ソースは、クローンチェックポイント番号とブロックポインタチェックポイント番号とを比較して、複製中の変更ユーザブロックが親スナップショットファイルから分岐したか否かを判定する。もし、上記ブロックポインタチェックポイント番号が、上記クローンチェックポイント番号以上である場合、上記ユーザ／メタデータのブロックは、分岐され、ターゲットファイルシステム上の新たな領域に書き込まれなければならない。
【００９５】
この例示的な実施形態では、ターゲットファイルシステム上でクローンが複製（生成及び分岐ブロックの書き込み）される前に確実に、ターゲットファイルシステム上で、新たなスナップショットファイルオブジェクトが完全に複製（生成及び書き込み）されなければならない。この目的は、クローンのクローンチェックポイント番号、及び、ユーザ／メタデータのブロックのチェックポイント番号の間の関係を維持することにより、複製中におけるクローンの分岐を保持することにある。この方法は、通常のファイルクローンに限らず、スナップショットファイルクローンにも適用可能である。
【００９６】
例えば、クローンＣＬから分岐したクローンがＣＬ’であり、ＳＦ及びＳＦ’がそれぞれこれらのスナップショットファイルである場合、ＳＦ’は、親ＳＦを有するデータブロックの幾つかを共有する。このケースでは、スナップショットファイルツリー上の関連するブランチは、以下の様に表すことができる。
ＳＦ⇒ＣＬ⇒ＳＦ’⇒ＣＬ’
【００９７】
もし、分岐しないデータブロックを先行するＳＦとの間で共有するために、ＳＦ及びＳＦ’が切り捨てられる前にＳＦ’及びＣＬ’が複製された場合、これらの共有されたブロックは、クローンチェックポイント番号よりも大きいチェックポイント番号をもつであろう。従って、これらの共有されたブロックは、上記ケースでない間は、ＣＬ’のために分岐されたブロックとみなされるであろう。関連するスナップショットファイル間で共有されたデータブロックを２回に渡り複製することを避けると共に、スナップショットファイルツリー内の全ての要素のインテグリティを維持するために、如何なるレベルの如何なる後継スナップショットファイルがターゲットファイルシステム上で生成されるよりも前に、スナップショットファイルは、ターゲットファイルシステム上で複製される。
【００９８】
従って、図６に概念的に示す様に、ソースファイルシステム内のスナップショットファイルツリーはソースデータストリーム（ステップ１８０１のＳＤＳ）から始まり、その後、スナップショットファイルオブジェクトが生成される（ステップ１８０２において、このＳＦは、実際にはＳＦのクローンになる）。その後、可変クローン（ステップ１８０３のＣＬ）が生成される。ターゲットファイルシステム内のスナップショットファイルツリーの複製は、スナップショットファイルオブジェクト（ステップ１８１２のＳＦ’）の生成から始まり、その後、ソースデータストリーム（ステップ１８１２のＳＤＳ’）が生成され、可変クローン（ステップ１８１３のＣＬ’）が生成される。これらのクローンＳＤＳ’及びＣＬ’は、何れの順序で生成されてもよい。
【００９９】
ターゲットファイルシステム内で、ルートスナップショットファイルオブジェクト以外の新たなクローンオブジェクト（すなわち、少なくとも最初は、親スナップショットファイルとブロックを共有したクローンオブジェクト）が生成される場合、新たなクローンオブジェクトは、初めは、親スナップショットファイルオブジェクトのクローンになるために生成される。その後、この新たなクローンオブジェクトは、必要に応じて分岐される。具体的には、新たなクローンオブジェクトは、親スナップショットファイルオブジェクトともはや共有されない全てのブロックを分離し、この親スナップショットファイルオブジェクトから分岐した全ての新たなブロックを追加する。ここで、重要なことは、新たなクローンオブジェクトを生成する際、ターゲットは、新たなクローンオブジェクトのクローンチェックポイント番号を、上記親スナップショットファイルオブジェクト内の全てのブロックのチェックポイント番号よりも大きくする必要があることである。さもないと、クローン及びスナップショットファイルオブジェクトにより共有されたブロックは、実際には分岐されていないにも拘らず、分岐されている様に見えてしまうであろう。このため、例示的な一実施形態では、クローンオブジェクトを生成する際、ターゲットは、親スナップショットファイルオブジェクトの最後に変更されたチェックポイントの番号を、ターゲットファイルシステム内の現在のチェックポイント番号と比較する。比較の結果、これらのチェックポイント番号が等しい場合には、上記ターゲットは、ターゲットファイルシステムのチェックポイント番号を前進させるためにチェックポイントを発行し、クローンオブジェクトのクローンチェックポイント番号を、前進されたチェックポイント番号に設定する。これにより、上記ターゲットは、上記クローンオブジェクトのクローンチェックポイント番号が、確実に、親スナップショットファイルオブジェクト内の全てのブロックのチェックポイント番号よりも大きくなる様にする（あるいは、上記ターゲットは、チェックポイントを発行すること無く、単に、クローンチェックポイント番号を、現在のチェックポイント番号に設定するものとしてもよい）。
【０１００】
例えば、上述した実施例を用いて、ターゲットファイルシステム内のＳＦ’の子（例えば、ＳＤＳ’またはＣＬ’）を生成する場合、子オブジェクトは最初はＳＦ’のクローンになる、すなわち、子オブジェクトは最初はＳＦ’の全てのブロックを共有する。その後、子オブジェクトは、必要に応じて分岐される。具体的には、ＳＦ’ともはや共有されない全てのブロックを分離し、（ソースによりターゲットに送信された）ＳＦ’から分岐した全ての新たなブロックを追加することにより、分岐される。子オブジェクトを生成する際、ターゲットは、ＳＦ’の最後に変更されたチェックポイントの番号を、ターゲットファイルシステム内の現在のチェックポイント番号と比較する。比較の結果、これらのチェックポイント番号が等しい場合には、上記ターゲットは、ターゲットファイルシステムのチェックポイント番号を前進させるためにチェックポイントを発行する。上記子オブジェクトには、クローンチェックポイント番号として、前進されたチェックポイント番号が割り当てられる。これにより、上記子オブジェクトのクローンチェックポイント番号が、確実に、ＳＦ’内の全てのブロックのチェックポイント番号よりも大きくなる。
【０１０１】
従って、例示的な実施形態では、以下のステップは、ターゲットファイルシステム上の新たなクローンオブジェクトを複製するために使用される。
・ソースから送信されるイーノード情報を用いて新たなオブジェクトを生成するステップ。もし、オブジェクト番号がオブジェクトの複製中も維持される場合には、生成されたオブジェクトは、親スナップショットファイルを参照する。
・親スナップショットファイルのルートオーノードからルートオーノードを形成するステップ（当然の事ながら、親スナップショットファイルのルートオーノードは、現在の複製周期または前の複製周期の何れかにおいて、ターゲットファイルシステムに既に複製されたであろう。なぜなら、スナップショットファイルオブジェクトの子の全てがターゲットファイルシステム内で生成される前に、親スナップショットファイルオブジェクトがターゲットファイルシステム内で生成されるからである）。
・もし、親スナップショットファイルの最後に変更されたチェックポイントの番号が、ターゲットファイルシステムの現在のチェックポイント番号と等しい場合に、チェックポイント番号を前進させるためにチェックポイントを発行するステップ（クローンチェックポイント番号は、分岐されたユーザ／メタデータのブロック及び分岐されていないユーザ／メタデータのブロックを区別するために使用されるチェックポイント番号である。クローンチェックポイント番号以上のチェックポイント番号を有するユーザ／メタデータのブロックは、分岐されている）。
・ルートオーノード内のクローンチェックポイント番号を、現在の（前進された）チェックポイント番号に設定するステップ
・オブジェクトのルートオーノードをストレージに書き込むステップ。該オブジェクトは、現在、スナップショットファイルと同一のブロックポインタを指し示している。
・ソースから受信された分岐後のユーザ／メタデータのブロックを、新たな領域に書き込むステップ。ソースは、クローンの分岐されたユーザ／メタデータのブロック、すなわち、ソースファイルシステム内のオブジェクトのクローンチェックポイント番号以上のチェックポイント番号を有する全てのブロックを選択的に読み出し、転送する。
【０１０２】
クローンオブジェクトは、通常のファイルクローン（すなわち、変更可能なライブコピー）またはスナップショットファイルクローン（すなわち、分岐クローンのクローニング時に生成される読み出し専用スナップショット）の何れかで有り得る。例示的な実施形態では、クローンは、オブジェクトイーノード内のフラグを検査することにより特定可能である。
【０１０３】
ルートスナップショットファイルオブジェクト（すなわち、ソースデータストリーム、または、親スナップショットファイルをもたない非分岐クローンをクローニングする際に生成されるスナップショットファイル）の生成は、上述した様な特別な処理を必要としない。ルートスナップショットファイルオブジェクトは、ターゲットファイルシステム上でゼロから生成される。なぜなら、ルートスナップショットファイルオブジェクトの生成には、ソースデータストリームオブジェクトが何れのオブジェクトからのものであるかは、ターゲットファイルシステムにおいて、必ずしも知られる必要はないからである。また、もし知られたとしても、ソースデータストリームオブジェクトがクローンされた時には、状況が変わってしまっているかもしれない。
【０１０４】
図７は、例示的な一実施形態に係る、図６のＳＦによりルートされたスナップショットファイルツリーをターゲットファイルシステムに複製する処理を概略的に示すロジックフローチャートである。ブロック２００２では、スナップショットファイルオブジェクトは、上記ターゲットファイルシステムに複製される。上記スナップショットファイルオブジェクトの複製が完了すると（ブロック２００４；ＹＥＳ）、ブロック２００６では、該スナップショットファイルオブジェクトのクローンは、上記ターゲットファイルシステムに複製される。
【０１０５】
図８は、例示的な一実施形態に係る、ターゲットによる新規クローンオブジェクトの生成処理を概略的に示すロジックフローチャートである。ブロック２１０２では、ターゲットは、ターゲットファイルシステム内に、新たなクローンオブジェクトを生成する。ブロック２１０４では、上記ターゲットは、クローンオブジェクトの親スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号を、ターゲットファイルシステムの現在のチェックポイント番号と比較する。もし、チェックポイント番号が等しい場合（ブロック２１０６；ＹＥＳ）には、その後、上記ターゲットは、ターゲットファイルシステム内にチェックポイントを発行して、ターゲットファイルシステム内の現在のチェックポイント番号を前進させる（ブロック２１０８）。ブロック２１１０では、上記ターゲットは、上記クローンオブジェクトのクローンチェックポイント番号を、現在のチェックポイント番号に設定する。この現在のチェックポイント番号は、処理がブロック２１０６；ＮＯからブロック２１１０に移行した場合には、初めての現在のチェックポイント番号となり、処理がブロック２１０８からブロック２１１０に移行した場合には、前進されたチェックポイント番号となる。上記クローンオブジェクトは、親スナップショットファイルオブジェクトのクローンとして最初に生成され、全てのブロックを親と共有する。その後、上記クローンオブジェクトは、ソースの指示に従い、必要に応じて分岐される。
【０１０６】
３．２．３  以前のスナップショット以降、オブジェクトはクローンになる
ターゲットファイルシステムに複製された通常のオブジェクトは、以前のスナップショット以降、クローンのプロパティを取得するものとしてもよい。このことは、例えば、上記オブジェクトが、以前のスナップショット以降にクローンされる場合、または、上記オブジェクトが、（例示的な実施形態では、ソースファイルシステム内のクローンオブジェクトの生成中の）最後の複製周期の発生時にクローニングの進行中であった場合に起こり得る。上記オブジェクトは、原則として、通常のオブジェクトとして生成され、その後、親スナップショットファイルのユーザ／メタデータの全てのブロックを共有するクローンオブジェクトに変換される。このため、複製周期は、オブジェクトが生成された後、かつ、完全にクローンに変換される前に、開始可能である。従って、上記オブジェクトは、上記ターゲットファイルシステムに通常のオブジェクトとして複製され、その後、上記ターゲットファイルシステムに複製される必要がある変更オブジェクトとして、新たな複製周期において特定されるであろう。上記オブジェクトは、クローンのプロパティを取得した後、かつ、新たな複製周期の前に、親スナップショットファイルから分岐したものであってもよい。
【０１０７】
ソースは、（例えば、前のスナップショットのチェックポイント番号以上のオブジェクトのクローンチェックポイントに基づき、）前のスナップショット以降にクローンのプロパティを取得したオブジェクトを特定することができる。また、上記ソースは、上記オブジェクトが、最後の複製周期の発生時にクローニングの進行中であったこと（例えば、オブジェクトの親スナップショットファイルが、新たな複製周期内の新規オブジェクトでないか否か）を判定することができる。また、例示的な実施形態では、上記ソースは、オブジェクトを複製する。この複製処理は、（ターゲットファイルシステムに既に複製された）親スナップショットファイルオブジェクトと共にブロックを共有するクローンとして、ターゲットファイルシステム内のオブジェクトを、ターゲットに再生成してもらうこと、上記オブジェクトをスキャンして全ての分岐ブロック（すなわち、上記オブジェクトのクローンチェックポイント番号以上のチェックポイント番号を有するブロック）を特定すること、及び、上記ターゲットファイルシステム内の分岐ブロックの複製をさせることにより実行される。例示的な実施形態では、上記ターゲットファイルシステム内のオブジェクトの再生成処理は、上記ターゲットファイルシステムから既存のオブジェクトを削除して、オブジェクトを新たに生成する処理を含む。
【０１０８】
これに対して、もし、上記オブジェクトが、前のスナップショット以降にクローンのプロパティを取得したにも拘らず、親スナップショットファイルが新しい場合（上記オブジェクトが最後の複製周期以降にクローンされたことを示す場合）には、上記オブジェクトは、後に詳述する様に、親スナップショットファイルオブジェクトの複製中に複製されるであろう。
【０１０９】
３．２．４  スナップショットファイルツリーの簡易化
スナップショットファイルオブジェクトが有する子のクローンが１つだけの場合には、スナップショットファイルは削除され、上記クローンが変更されて、削除されたスナップショットファイルの親に従属するものとしてもよい。これにより、スナップショットファイルツリーが簡易化される。例えば、中間のスナップショットファイルオブジェクトＳＦ１が前のスナップショット以降に削除された例を以下に示す。
ＳＦ０＜ＳＦＫクローンは、ＳＦ０＜クローンに変化した。
【０１１０】
上記ソースは、上述の簡易化が、前のスナップショット以降に変化したクローンオブジェクトの親に基づいて、前のスナップショット以降に行われたものであることを確認することができる。例示的な実施形態では、上記ソースは、「削除」作業項目を処理する際、ＳＦ１を削除することをターゲットに指示すると共に、クローンの「変更」作業項目を処理する際、ＳＦ０に関連する上記クローンオブジェクトの分岐ブロックを複製することを上記ターゲットに指示する（現時点ではオブジェクトが新規の親オブジェクト番号を有しているため、該オブジェクトのメタデータは変更されている）。上記ターゲットが、複製処理の一部として、クローンオブジェクトのオーノード構造を精査できる様に、上述の様なクローンオブジェクトの複製処理は、ＳＦ１と共有された全てのブロックが利用可能であることを要求する。上述した様に、上記クローンオブジェクトが複製される前にＳＦ１が削除されたとしてもなお、共有されたブロックが利用可能となる様に、上記共有されたブロックは、スナップショット機構の一部として、上記ターゲットにより自動的に保持される。
【０１１１】
３．２．５  クローンオブジェクトはデクローンされる
クローンはデクローンされるものとしてもよい。該デクローンは、親スナップショットファイルオブジェクトからオブジェクトをデカップリングする処理、及び、親スナップショットファイルオブジェクトと以前に共有されたブロックに対応するオブジェクトにブロックを追加する処理を含む。上記ソースは、前のスナップショット内のクローンであったが新規のスナップショット内のクローンではないオブジェクトに基づいて、上述のデクローニングが、前のスナップショット以降に生じたことを、確認することができる。例示的な実施形態では、上記ソースは、ターゲットファイルシステムに上記オブジェクトを「ディープコピー」することにより、オブジェクトを複製する。
【０１１２】
３．３  作業項目及びリーダファイバ
上述した様に、特定の実施形態では、上記前のスナップショット以降に変化したオブジェクトを検出するために、間接オブジェクトは、オブジェクトベースの複製中に、チャンク単位でスキャンされる。一般的には、変更されたオブジェクトが検出されると、オブジェクト番号、チェックポイント番号、ボリューム番号、及びオブジェクトタイプを含む作業項目が、対応するチャンクキューにチャンク毎に追加される。具体的には、新規オブジェクトのために「生成」作業項目が追加され、変更オブジェクトのために「変更」作業項目が追加され、削除オブジェクトのために「削除」作業項目が追加される。詳細については後述するが、幾つかのリーダファイバは、上記チャンクキューから作業項目を取得し、該作業項目を処理する。
【０１１３】
特定の例示的な実施形態では、「生成」及び「変更」の作業項目の処理は、本明細書において「未処理マップ」及び「クローンキュー」と呼ばれる２つのキューを用いて管理される作業項目を追加的に生成するものとしてもよい。上記未処理マップ内に配置された作業項目は、原則として、実行のためにクローンキューに移動（昇格）されなければならないプレースホルダである。上記クローンキュー内に配置された作業項目は、プロセスファイバ（スレッド）のプールにより実行される。
【０１１４】
クローンキュー内に配置された作業項目は、順不同に実行可能である。従って、未処理マップは、実行されるクローンキューに作業項目が昇格する方法と時間を「計画する」ために用いられる。特定の作業項目が実行されると、ソースは、ターゲットと情報を交換し、ターゲットファイルシステム内の対応するファイルシステムオブジェクトを複製させる。詳細については後述するが、この処理は、とりわけ、ソースがオブジェクトデータ及び／またはメタデータをターゲットに渡す処理、及び、ターゲットがオブジェクトを生成または更新する処理を含む。特定の例示的な実施形態では、上記未処理マップ及びクローンキューは、１つの物理的な固定長キューの一部である論理キューである。
【０１１５】
図９は、本発明の例示的な一実施形態に係るファイルサーバ１０２の関連構成要素を示す概略ブロック図である。特に、ファイルサーバ１０２は、ストレージプロセッサ５０２、ファイルシステムストレージ５０４、及び生成されオンデマンドの状態に維持されるグローバル論理キュー５０６を有する。また、ファイルサーバ１０２は、上述した様に、間接オブジェクトスキャンに基づいてチャンクを実行するための、未処理マップ５０８、クローンキュー５１０、及び幾つかのチャンクキュー５１２（典型的には、間接オブジェクトチャンク毎に１つのキュー）を含む様々なサブキューを有する。説明の便宜上及び簡単のため、ストレージプロセッサ５０２については詳述しないが、ストレージプロセッサ５０２は、一般的に、ファイルシステムストレージ５０４内の１以上のファイルシステムを管理すると共に、一般的に、上述した様な十分なハードウェア及びソフトウェアのリソースを有する。
【０１１６】
例示的なクローン複製スキームの基本動作の幾つかは、図１０に例示するスナップショットファイルツリーの複製処理を通して明らかにすることができる。本実施例では、「ＳＰＡＷＮ」と呼ばれる作業項目が用いられる。この「ＳＰＡＷＮ」作業項目は、スナップショットファイルオブジェクト、及び、処理されるべきスナップショットファイルオブジェクトの次の子を表す（０からナンバリングされる）子番号（ここで、子番号“０”は１番目の子、子番号“１”は２番目の子等）を特定する。
【０１１７】
「ＳＰＡＷＮ」作業項目は、スナップショットファイルツリーまたはスナップショットファイルツリーの一部を「歩く」ために用いられる。これにより、スナップショットファイルオブジェクトの子がターゲットファイルシステム内で生成される前に、確実に、親スナップショットファイルオブジェクトが、ターゲットファイルシステム内で生成されることとなる。
【０１１８】
図１０を参照すると、ＳＦ０が、新規に生成されたスナップショットファイルツリーであると仮定した場合（詳細については後述する）、ＳＰＡＷＮ［ＳＦ０，０］作業項目は上記未処理マップ内に配置され、ＳＦ０オブジェクトは複製される。ここで、ＳＰＡＷＮ［ＳＦ０，０］作業項目は、ＳＦ０の複製が完了した後に、ＳＦ０の子が、子０（すなわち、ＳＦ１）を始めとして複製される必要があることを示す。
【０１１９】
ＳＦ０の複製完了が通知されると、ＳＰＡＷＮ［ＳＦ０，０］作業項目は、クローンキューに昇格される。ここで、この処理は、最終的にはファイバにより実行される。このファイバは、上記作業項目に示されるＳＦ０の子０（すなわち、ＳＦ１）の複製処理を実行するが、必要に応じて、追加の作業項目を生成（スポーン）し、ツリーの残り部分の複製も可能とする。
【０１２０】
ここで、上記ファイバは、ＳＦ０が追加の子を有すると認識しているため、ＳＰＡＷＮ［ＳＦ０，１］作業項目をクローンキューに追加して、子１から始まるＳＦ０の子（すなわち、ＳＦ２）がまだ複製される必要があることを示す。ＳＦ０は既に複製されているので、ＳＦ０の子の複製はいつでも起こり得る。このため、その様な子のための作業項目は、未処理マップではなくクローンキュー上に配置するものとしてもよい。
【０１２１】
上記ファイバは、ＳＦ１が複製の必要のある子を有することも認識しているが、ＳＦ１はまだ複製されていないため、上記ファイバは、ＳＰＡＷＮ［ＳＦ１，０］作業項目を、クローンキューではなく未処理マップ側に追加する。これにより、ＳＰＡＷＮ［ＳＦ１，０］作業項目は、ＳＦ１の複製が完了した後にのみ、ＳＦ１の子が、子０（すなわち、ＣＬ０）を始めとして複製される必要があることを示す。
【０１２２】
上述した様に、クローンキュー内の如何なる作業項目についてもいつでも実行可能である。このため、ＳＰＡＷＮ［ＳＦ０，１］作業項目は、ＳＦ０の子１（すなわち、ＳＦ２）を複製し、ＳＰＡＷＮ［ＳＦ０，２］作業項目を上記クローンキューに追加し、ＳＰＡＷＮ［ＳＦ２，０］作業項目を上記未処理マップに追加するために、ファイバにより実行されるものとしてもよい。後続するＳＰＡＷＮ［ＳＦ０，ｎ］作業項目の各々は、必要に応じて、追加の作業項目の生成だけでなく、ＳＦ０の特定の子の複製のために実行されるものとしてもよい。ＳＦ５を複製するためにＳＰＡＷＮ［ＳＦ０，４］を実行するファイバは、ＳＦ５がＳＦ０の最後の子であるので、ＳＰＡＷＮ［ＳＦ０，５］作業項目を生成しない。但し、ＳＦ５が幾つかの子を有する場合には、ファイバは、ＳＰＡＷＮ［ＳＦ５，０］作業項目を上記未処理マップ上に追加するものとしてもよい。
【０１２３】
再びＳＦ１の複製に関し、ＳＦ１の複製完了が通知されると、ＳＰＡＷＮ［ＳＦ１，０］作業項目は、未処理マップからクローンキューに昇格し、再帰処理は、該作業項目から継続して実行される。すなわち、ファイバは、ＳＰＡＷＮ［ＳＦ１，０］作業項目を取得し、ＳＰＡＷＮ［ＳＦ１，１］作業項目をクローンキューに追加し、ＳＦ１の子０（すなわち、ＣＬ０）の複製を開始する。また、別のファイバは、ＳＰＡＷＮ［ＳＦ１，１］作業項目を取得し、ＳＦ１の子１（すなわち、ＣＬ１）の複製を開始する。しかしながら、ＳＦ１には他の子が存在しないため、追加の作業項目は生成されない。
【０１２４】
上記と同様の処理は、ＳＰＡＷＮ［ＳＦ２，ｎ］、ＳＰＡＷＮ［ＳＦ３，ｎ］、ＳＰＡＷＮ［ＳＦ４，ｎ］、ＳＰＡＷＮ［ＳＦ５，ｎ］の何れかの作業項目、及び他の幾つかの作業項目（例えば、ＳＦ３、ＳＦ４、ＳＦ５の何れかが１以上の子スナップショットファイルオブジェクトをもつ場合等）上においても実行される。
【０１２５】
上述した様に、特定の例示的な実施形態では、未処理マップ及びクローンキューは、１つの物理的な固定長キューの一部である論理キューである。上述の実施例からもわかる様に、特定の作業項目がクローンキューから実行される場合には、０または１または２個の追加の作業項目は、上記特定の作業項目から生成されるものとしてもよい。複製処理の実行中、所与の作業項目が２つの作業項目に置き換えられない（完成した作業項目は、常に、１つの作業項目に置き換え可能である）様に、上記論理キューは、満たされる（フルになる）ことが可能である。
【０１２６】
従って、特定の例示的な実施形態では、ＡＣＴＩＶＥと呼ばれる第２のタイプの作業項目が、幾つかの状況において使用されるものとしてもよい。この「ＡＣＴＩＶＥ」作業項目は、原則として、２つの「ＳＰＡＷＮ」作業項目の代わりをすると共に、（１）如何なる動作が次に実行される必要があるか、及び、（２）動作完了後にどの処理に戻るかを効果的に示すことにより、スナップショットファイルツリーの更に配列性の高い処理を進行させる。
【０１２７】
図１０を参照して上述した実施例では、ＳＰＡＷＮ［ＳＦ０，０］作業項目が処理される時、上記キューはフルの状態にある。ＳＰＡＷＮ［ＳＦ０，１］作業項目をクローンキューに追加すること、及び、ＳＰＡＷＮ［ＳＦ１，０］作業項目を未処理マップに追加することは行われず、上記ファイバは、双方の作業項目を、ＳＦ１及びその子の複製をシステムに指示する未処理マップに追加されたＡＣＴＩＶＥ［ＳＦ０，０，ＳＦ１，０］作業項目に代えると共に、ＳＦ０の子１（すなわち、［ＳＦ０，（０＋１）］）に戻るものとしてもよい。
【０１２８】
キューエントリの開放が開始されると、上記システムは、並列的な複製処理を継続できる様に、ＡＣＴＩＶＥエントリの使用状態からＳＰＡＷＮエントリの使用状態に復帰することができる。
【０１２９】
以下の実施形態では、以下に示すＳＰＡＷＮ及びＡＣＴＩＶＥの双方の作業項目を用いて実行される、スナップショットファイルツリーＳＦ０の複製処理を例示する。
＋ＣＬ０１＋ＣＬ１１
ＳＦ０＜＋ＳＦＫ＋ＳＦ２＜＋ＣＬ２１
＋ＣＬ１３＋ＣＬ２２
【０１３０】
稼働ファイバは、生成（ＳＦ０）作業項目を、チャンクキューから取得する。上記稼働ファイバは、ＳＰＡＷＮ（ＳＦ０，０）作業項目を上記未処理マップに追加して、ＳＦ０を複製する。ターゲット上でＳＦ０の複製が完了すると、上記ＳＰＡＷＮ（ＳＦ０，０）作業項目は、クローンキューに昇格する。
【０１３１】
稼働ファイバは、上記ＳＰＡＷＮ（ＳＦ０，０）作業項目を上記クローンキューから取得し、ＳＰＡＷＮ（ＳＦ０，１）作業項目を上記クローンキューに追加し、ＣＬ０１（すなわち、ＳＦ０の子０）を複製する。
【０１３２】
稼働ファイバは、上記ＳＰＡＷＮ（ＳＦ０，１）作業項目を上記クローンキューから取得する。例示のために、上記キューがフルの状態にあると仮定すると、上記ファイバは、ＡＣＴＩＶＥ（ＳＦ０，１，ＳＦ１，０）作業項目を上記未処理マップに追加すると共に、ＳＦ１（すなわち、ＳＦ０の子１）を複製する。ターゲット上でＳＦ１の複製が完了すると、上記ＡＣＴＩＶＥ（ＳＦ０，１，ＳＦ１，０）作業項目は、上記クローンキューに昇格する。
【０１３３】
稼働ファイバは、上記ＡＣＴＩＶＥ（ＳＦ０，１，ＳＦ１，０）作業項目を上記クローンキューから取得し、ＡＣＴＩＶＥ（ＳＦ０，１，ＳＦ１，０）作業項目を上記クローンキューに追加し、ＣＬ１１（すなわち、ＳＦ１の子０）を複製する。
【０１３４】
稼働ファイバは、上記ＡＣＴＩＶＥ（ＳＦ０，１，ＳＦ１，１）作業項目を上記クローンキューから取得する。例示のために、上記キューが現時点で空きエントリをもつと仮定すると、上記ファイバは、ＳＰＡＷＮ（ＳＦ２，０）作業項目を上記未処理マップに追加し、ＡＣＴＩＶＥ（ＳＦ０，１，ＳＦ１，２）作業項目を上記クローンキューに追加すると共に、ＳＦ２（すなわち、ＳＦ１の子１）を複製する。
【０１３５】
稼働ファイバは、上記ＡＣＴＩＶＥ（ＳＦ０，１，ＳＦ１，２）作業項目を上記クローンキューから取得すると共に、ＣＬ１３（すなわち、ＳＦ１の子２）を複製する。
【０１３６】
ＳＦ２の複製が完了すると、上記ＳＰＡＷＮ（ＳＦ２，０）作業項目は、上記未処理マップから上記クローンキューに昇格する。稼働ファイバは、上記ＳＰＡＷＮ（ＳＦ２，０）作業項目を上記クローンキューから取得し、ＳＰＡＷＮ（ＳＦ２，１）作業項目を上記クローンキューに追加し、ＣＬ２１（すなわち、ＳＦ２の子０）を複製する。
【０１３７】
稼働ファイバは、上記ＳＰＡＷＮ（ＳＦ２，１）作業項目を上記クローンキューから取得すると共に、ＣＬ２２（すなわち、ＳＦ２の子１）を複製する。
【０１３８】
この時点で、クローンツリーの全体が複製された。
【０１３９】
上述した実施例は、スナップショットファイルツリーの全体が、ＳＦ０を始めとして複製される必要があるという仮定に基づいている。しかしながら、実際には、前のスナップショット以降に変化した、スナップショットファイルツリーの部分だけが複製される。
【０１４０】
例えば、図１０を再び参照すると、上記ターゲットファイルシステムにおいて、ＳＦ５及びその子だけが新たに生成または変更され、ツリーの残り部分が既に複製されている場合には、該ＳＦ５及びその子だけが、上記ターゲットファイルシステムに複製される必要があるであろう。
【０１４１】
同様に、クローンオブジェクトの最後の複製以降に、該クローンオブジェクトの一部分だけが変化した（例えば、クローンオブジェクトがその親から分岐した）場合には、その分岐された部分だけが、複製される必要があるであろう。
【０１４２】
図１１は、例示的な一実施形態に係る、ストレージプロセッサ５０２により維持されるソースワークキュー及びファイバのタイプを表す概略図である。
【０１４３】
各複製セッション毎に、チャンクキュー５１２及びクローンキュー５１０を含む一連のキュー７０４が維持される。グローバル間接オブジェクトキュー７０２は、間接オブジェクトスキャナ７０７により処理されるべき、各複製セッション内の間接オブジェクトチャンクを追跡するために使用される。本実施例では、複製セッション１内の間接オブジェクトチャンク４は依然、処理される必要があり、複製セッション２内の間接オブジェクトチャンク１、２は依然、処理される必要がある。間接オブジェクトスキャナファイバ７０８は、複製セッション１内の間接オブジェクトチャンク３を処理し、具体的には、チャンク３内のオブジェクトエントリ２１をスキャンする。間接オブジェクトスキャナファイバ７１０は、複製セッション１内の間接オブジェクトチャンク２を処理し、具体的には、チャンク２内のオブジェクトエントリ１８をスキャンする。
【０１４４】
稼働スレッドのプール７１１（本明細書では、「変更オブジェクトリーダ」と呼ぶことがある）は、作業項目を、（チャンク単位の）チャンクキュー５１２及びクローンキュー５１０から取得し、該作業項目を処理する。本実施例では、第１リーダファイバ７１２は、複製セッション１内の間接オブジェクトチャンク１内のオブジェクト３のための作業項目を処理し、第２リーダファイバ７１４は、複製セッション１内の間接オブジェクトチャンク２内のオブジェクト１４のための作業項目を処理し、第３リーダファイバ７１６は、複製セッション１内のオブジェクト２０（スナップショットファイル）のための作業項目を処理する。
【０１４５】
また、ストレージプロセッサ５０２は、未処理オブジェクトメッセージの所定最大数に対する、上記ターゲットファイルシステムに送信された未処理（未応答）オブジェクトメッセージの数７０６を監視すると共に、複製セッションを制御して、確実に、未処理オブジェクトメッセージの数が上記所定最大数を超えない様にする。
【０１４６】
間接オブジェクトの全てのチャンクの処理が完了して上記ターゲットにより応答された場合、上記ソースは、未処理マップが空になるまで待機し、クローンキュー５１０内の全ての作業項目に対する処理は、キュー７０４を使用不可として複製セッションを終了させる前に、完了する。
【０１４７】
全てのキュー間における稼働ファイバの共有を可能とするために、クローンキュー５１０は、典型的には、予約済チャンクＩＤを有するチャンクキューである。このキューは、如何なるチャンクからのクローン／スナップショットファイルオブジェクトのための作業項目も処理するため、通常のチャンクキュー５１２とは異なることに留意されたい。また、作業項目は、間接オブジェクトスキャナ７０７ではなく、稼働ファイバ７１１により上記キューに追加される。上記キューは、チャンクのサイズにより限定されず、複製の再開が可能な状態を維持する。
【０１４８】
上述した様に、特定の例示的な実施形態では、グローバルキューの収容量の全てが使用されると、スナップショットファイルの後継ファイルの複製処理が、「ＡＣＴＩＶＥ」作業項目を用いて実行される。該複製処理では、上記キューが満杯（フル）の間は、追加の作業項目は生成（スポーン）されない。これにより、各作業項目は、多くても１つの作業項目を生成するに留まるため、グローバルキューがその総収容量を超えて使用されることは、確実に防止される。
【０１４９】
上記グローバルキューが満杯（フル）の間、未処理キュー内にある既存の作業項目は、クローンキューに追加されるものとしてもよい。１つの例示的な実施形態では、クローンキュー内のエントリは、未処理マップ内にある作業項目のために保持されるため、上記グローバルキュー内の空きエントリの数の算出には、上記未処理マップ内の項目の数が考慮される。あるいは、新たなエントリが利用可能になった時に作業項目が上記クローンキューに復帰可能となるまで、別々のキューを使用して、その様な作業項目を管理するものとしてもよい。
【０１５０】
例示的な実施形態では、クローンは、オブジェクトのイーノード内のフラグをチェックすることにより特定可能である。
【０１５１】
３．３．１  「削除」作業項目
「削除」作業項目を処理する際、ソースは、ターゲットに問合せを送り、ターゲットファイルシステムからオブジェクトを削除する。
【０１５２】
３．３．２  「生成」作業項目
「生成」作業項目及びオブジェクトの処理がクローンまたはルートスナップショットファイルにより実行される場合、上記オブジェクトが、現在のファイバにより複製されるか、親スナップショットファイルツリーの一部として複製され現在のファイバによっては何もされないか、の決定が必要となる。かかる決定は、以下の様に為される：
ａ．もし、上記オブジェクトがクローンであり、かつ、該オブジェクトの親スナップショットファイルが新規オブジェクトである場合、該オブジェクトの複製処理は、現在のファイバにより省略される。
ｂ．もし、上記オブジェクトが、ルートスナップショットファイルまたは旧親オブジェクトをもつクローンである場合、オブジェクトは、現在のファイバにより複製される。もし、上記クローンがスナップショットファイルである場合、クローンを複製するための「ＳＰＡＷＮ」作業項目が、未処理マップに追加される。スナップショットファイルの複製が完了すると、ソースは、未処理「ＳＰＡＷＮ」作業項目を、処理するためのクローンキューに追加する。
【０１５３】
全てのオブジェクトが新規オブジェクトである完全複製の場合、上述の処理は以下の様に簡易化される：
オブジェクトがルートスナップショットファイルである場合、該オブジェクトは上記ｂの様に複製される。あるいは、該オブジェクトの複製処理は、現在のファイバにより省略される。
【０１５４】
図１２は、上述した様な、例示的な一実施形態に係る「生成」作業項目を説明するための状態図である。
【０１５５】
完全複製のケース（ブロック８０２；ＹＥＳ）において、オブジェクトがルートスナップショットファイルである場合（ブロック８０４；ＹＥＳ）、ＳＰＡＷＮ（オブジェクト，０）作業項目が未処理マップに追加され（ブロック８１６）、上記オブジェクトが複製される（ブロック８１８）。もし、オブジェクトがクローンである場合（ブロック８０４；ＮＯ、ブロック８０６；ＹＥＳ）、該オブジェクトの複製処理は、現在のファイバにより省略される（ブロック８０７）。もし、オブジェクトがクローンでもルートスナップショットファイルでもない場合（ブロック８０４；ＮＯ、ブロック８０６；ＮＯ）、該オブジェクトは複製される（ブロック８１８）。
【０１５６】
増分複製のケース（ブロック８０２；ＮＯ）において、オブジェクトがルートスナップショットファイルである場合（ブロック８０８；ＹＥＳ）、ＳＰＡＷＮ（オブジェクト，０）作業項目が未処理マップに追加され（ブロック８１６）、上記オブジェクトが複製される（ブロック８１８）。もし、オブジェクトがクローンであり（ブロック８０８；ＮＯ、ブロック８１０；ＹＥＳ）、かつ、該オブジェクトの親スナップショットファイルが新規オブジェクトである場合（ブロック８１２；ＹＥＳ）、該オブジェクトの複製処理は、現在のファイバにより省略される（ブロック８１３）。もし、オブジェクトがクローンであり（ブロック８０８；ＮＯ、ブロック８１０；ＹＥＳ）、かつ、該オブジェクトの親スナップショットファイルが旧オブジェクトである場合（ブロック８１２；ＮＯ）において、上記クローンがスナップショットファイルである場合（ブロック８１４；ＮＯ）には、ＳＰＡＷＮ（オブジェクト，０）作業項目が未処理マップに追加され（ブロック８１６）、上記オブジェクトが複製される（ブロック８１８）。これに対し、もし、上記クローンがスナップショットファイルでない場合（ブロック８１４；ＹＥＳ）には、上記オブジェクトが複製される（ブロック８１８）。
【０１５７】
３．３．３  「ＳＰＡＷＮ」作業項目
ファイバが、クローンキューから「ＳＰＡＷＮ」作業項目を取得して、スナップショットファイルの後継ファイルを複製する時、スナップショットファイルツリーの残りのブランチを生成（スポーン）するためのスペースがキュー内に有る場合には、上記ファイバは、上記残りのブランチの生成（スポーン）を試行するであろう。その後、上記ファイバは、更なる複製のための後継ファイルを複製するであろう。
【０１５８】
「ＳＰＡＷＮ」作業項目は、所与のスナップショットファイルのクローンを複製するのに必要な全ての情報を含む。該情報は、例えば、スナップショットファイルのオブジェクト番号、参照数（スナップショットファイルの参照数は、直近のクローンの数である）、参照リスト（スナップショットファイルの参照リストは、直近のクローンのリストである）、及び、参照オフセット（スナップショットファイルの参照オフセットは、上記参照リストにおいて次に複製する予定のクローンのインデックスである）等である。
【０１５９】
以下では、説明の便宜上、スナップショットファイル「ＳＦ」及び参照オフセット「refOffset」のための「ＳＰＡＷＮ」作業項目を、ＳＰＡＷＮ（ＳＦ，refOffset）と表現する。この作業項目は、スナップショットファイル「ＳＦ」の子番号として「refOffset」を複製する。ＳＰＡＷＮ（ＳＦ，refOffset）作業項目は、以下の様に処理される：
１．スナップショットファイルツリーの複製を終えるのに必要となる新たな全ての作業項目の生成処理（この処理は、他の利用可能なファイバが、スナップショットファイルツリーの他の部分を並列的に処理できる様に、最初に実行される）：
ａ．クローンが通常のファイルであり、かつ、最後のクローンでない場合、残りのクローンを複製するための新たなＳＰＡＷＮ（ＳＦ，refOffset＋１）作業項目が、クローンキューに追加される。
ｂ．クローンがスナップショットファイルであり、かつ、最後のクローンである場合、子０を始めとしてクローンの子を複製するために、ＳＰＡＷＮ（ｃｌｏｎｅ，０）作業項目が未処理マップに追加される。
ｃ．クローンがスナップショットファイルであり、かつ、最後のクローンでなく、かつ、全てのキューが満杯（フル）である場合、新たなＡＣＴＩＶＥ（ＳＦ，refOffset，ｃｌｏｎｅ，０）作業項目が未処理マップに追加される。
ｄ．クローンがスナップショットファイルであり、かつ、最後のクローンでなく、かつ、全てのキューが満杯（フル）でない場合、子０を始めとしてクローンの子を複製するために、ＳＰＡＷＮ（ｃｌｏｎｅ，０）作業項目が未処理マップに追加され、ＳＦの残りのクローンを複製するために、ＳＰＡＷＮ（ＳＦ，refOffset＋１）作業項目がキューに追加される。
【０１６０】
２．クローンの複製
例示的な一実施形態では、上記稼働ファイバは、参照オフセットを、親スナップショットファイルの参照数「refCount」と比較することにより、オブジェクトが最後の後継オブジェクトであるか否かを判定する。
【０１６１】
例示的な一実施形態では、スナップショットファイルの参照リストを何度も参照する必要が無い様に、該スナップショットファイルの参照数に加えて、該スナップショットファイルの参照リストも、キャッシュされる。
【０１６２】
図１３は、例示的な一実施形態に係る「ＳＰＡＷＮ」作業項目を説明するための状態図である。もし、クローンが通常ファイルであり（ブロック９０２；ＹＥＳ）、かつ、最後のクローンでない場合（ブロック９０４；ＮＯ）、残りのクローンを複製するための新たなＳＰＡＷＮ（ＳＦ，refOffset＋１）作業項目が、クローンキューに追加される（ブロック９１１）。そして、オブジェクトの複製が行われる（ブロック９１２）。
【０１６３】
もし、クローンが通常ファイルであり（ブロック９０２；ＹＥＳ）、かつ、最後のクローンである場合（ブロック９０４；ＹＥＳ）、クローンキューまたは未処理マップに如何なるエントリも追加されることなく、オブジェクトの複製が行われる（ブロック９１２）。
【０１６４】
もし、クローンがスナップショットファイルであり（ブロック９０２；ＮＯ）、かつ、最後のクローンである場合（ブロック９０６；ＹＥＳ）、ＳＰＡＷＮ（ｃｌｏｎｅ，０）作業項目が、未処理マップに追加される（ブロック９０７）。そして、オブジェクトの複製が行われる（ブロック９１２）。
【０１６５】
もし、クローンがスナップショットファイルであり（ブロック９０２；ＮＯ）、かつ、最後のクローンでなく（ブロック９０６；ＮＯ）、かつ、全てのキューが満杯（フル）である場合（ブロック９０８；ＹＥＳ）、新たなＡＣＴＩＶＥ（ＳＦ，refOffset，ｃｌｏｎｅ，０）作業項目が未処理マップに追加され（ブロック９０９）、クローンが複製される（ブロック９１２）。
【０１６６】
もし、クローンがスナップショットファイルであり（ブロック９０２；ＮＯ）、かつ、最後のクローンでなく（ブロック９０６；ＮＯ）、かつ、全てのキューが満杯（フル）でない場合（ブロック９０８；ＮＯ）、子０を始めとしてクローンの子を複製するために、ＳＰＡＷＮ（ｃｌｏｎｅ，０）作業項目が未処理マップに追加され（ブロック９１０）、ＳＦの残りのクローンを複製するために、ＳＰＡＷＮ（ＳＦ，refOffset＋１）作業項目がクローンキューに追加され（ブロック９１１）、クローンが複製される（ブロック９１２）。
【０１６７】
３．３．４．「ＡＣＴＩＶＥ」作業項目
ファイバは、クローンキューから「ＡＣＴＩＶＥ」作業項目を取得すると、リソースに余裕があってある程度の並列処理が可能な間、上記ファイバは、深さ優先型走査に続いて、ルートスナップショットファイルツリー内のオブジェクトの複製処理を継続するであろう。もし、複製対象のクローンがスナップショットファイルであり、かつ、キューが空きエントリを有する場合には、該スナップショットファイルは、そのツリーを複製するための作業項目を別途、未処理マップに追加する
【０１６８】
「ＡＣＴＩＶＥ」作業項目は、部分的に複製されたスナップショットファイルツリーを完全に複製するのに必要な情報を含む。該情報は、以下の情報を含む：
１．スナップショットファイルＳＦ［０］、その参照数、参照リスト、及び参照オフセットrefOffset［０］；
２．複製されているブランチのスナップショットファイルＳＦ［ｎ］、その参照数、参照リスト、及び参照オフセットrefOffset［ｎ］
ここで、上記作業項目により複製されるクローンは、スナップショットファイルＳＦ［ｎ］のクローン番号refOffset［ｎ］を有する。
【０１６９】
以下では、説明の便宜上、「ＡＣＴＩＶＥ」作業項目は、ＡＣＴＩＶＥ（ＳＦ［０］，refOffset［０］，ＳＦ［ｎ］，refOffset［ｎ］）と表すものとする。ＡＣＴＩＶＥ（ＳＦ［０］，refOffset［０］，ＳＦ［ｎ］，refOffset［ｎ］）作業項目は、以下の様に処理される：
１．クローンが通常のファイルであり、かつ、最後のクローンでない場合、ＡＣＴＩＶＥ（ＳＦ［０］，refOffset［０］，ＳＦ［ｎ］，refOffset［ｎ］＋１）作業項目をクローンキューに追加する。
２．クローンが通常のファイルであり、かつ、最後のクローンである場合、ＳＦ［ｎ］に介在する親に対して同様の処理を、下記ａまたはｂが満たされるまで、繰り返し実行する：
ａ．ＳＦ［０］への到達（このことは、ＳＦ［０］の全体が複製されたために、作業項目の生成が一切不要となったことを意味する）
ｂ．スナップショットファイルＳＦ［ｉ−１］の最後のクローンではないスナップショットファイルＳＦ［ｉ］の検知（ここで、０＜ｉ＜ｎ）
もし、ＳＦ［ｉ］がＳＦ［０］の直接クローンである場合、ＳＦ［ｉ］は、ＳＰＡＷＮ（ＳＦ［０］，refOffset［０］＋１）をキューに追加する。あるいは、ＳＦ［ｉ−１］が既に複製されていた時には、ＳＦ［ｉ］は、ＡＣＴＩＶＥ（ＳＦ［０］，refOffset［０］，ＳＦ［ｉ−１］，refOffset［ｉ−１］＋１）作業項目をキューに追加する。
３．クローンがスナップショットファイルであり、かつ、キューが満杯（フル）である場合、ＡＣＴＩＶＥ（ＳＦ［０］，refOffset［０］，ｃｌｏｎｅ，０）作業項目を未処理マップに追加する。
４．クローンがスナップショットファイルであり、かつ、キューが空きエントリを有する場合、ＳＰＡＷＮ（ｃｌｏｎｅ，０）を未処理マップに追加すると共に、ＳＦ［ｎ］に介在する親に対して同様の処理を、下記ａまたはｂが満たされるまで、繰り返し実行する：
ａ．ＳＦ［０］への到達（このことは、ＳＦ［０］の全体が複製されたために、作業項目の生成が一切不要となったことを意味する）
ｂ．スナップショットファイルＳＦ［ｉ−１］の最後のクローンではないスナップショットファイルＳＦ［ｉ］の検知（ここで、０＜ｉ＜ｎ）
もし、ＳＦ［ｉ］がＳＦ［０］の直接クローンである場合、ＳＦ［ｉ］は、ＳＰＡＷＮ（ＳＦ［０］，refOffset［０］＋１）をキューに追加する。あるいは、ＳＦ［ｉ−１］が既に複製されていた時には、ＳＦ［ｉ］は、ＡＣＴＩＶＥ（ＳＦ［０］，refOffset［０］，ＳＦ［ｉ−１］，refOffset［ｉ−１］＋１）作業項目をキューに追加する。
【０１７０】
５．クローンを複製する。
例示的な一実施形態では、後継オブジェクトまたはＳＦ［ｎ］が複製される度に、イーノード及びＳＦ［ｎ］の参照リストが読み出されることを避けるために、後継オブジェクト及びその参照数のリストがキャッシュされる。
【０１７１】
図１４は、例示的な一実施形態に係る「ＡＣＴＩＶＥ」作業項目を説明するための状態図である。
【０１７２】
もし、クローンが通常ファイルであり（ブロック１００２；ＹＥＳ）、かつ、最後のクローンでない場合（反復変数「ｉ」が初期化されるブロック１０１０経由のブロック１０１２；ＮＯ）、ＡＣＴＩＶＥ（ＳＦ［０］，refOffset［０］，ＳＦ［ｎ］，refOffset［ｎ］＋１）作業項目がクローンキューに追加される（ブロック１０２２）。そして、上記クローンは複製される（ブロック１０２４）。
【０１７３】
もし、クローンが通常ファイルであり（ブロック１００２；ＹＥＳ）、かつ、最後のクローンである場合（反復変数「ｉ」が初期化されるブロック１０１０経由のブロック１０１２；ＹＥＳ）、論理回路は、ＳＦ［０］の直接クローンＳＦ［１］へ到達する（ブロック１０１６；ＹＥＳ）、あるいは、スナップショットファイルＳＦ［ｉ−１］の最後のクローンではないスナップショットファイルＳＦ［ｉ］（ここで、１＜ｉ＜ｎ）が検知される（ブロック１０１２；ＮＯ）まで、ＳＦ［ｎ］に介在する親に対して同様の処理を、繰り返し実行する（ブロック１０１４、１０１６、１０１２）。もし、ＳＦ［０］の直接クローンＳＦ［１］へ到達した場合（ブロック１０１６；ＹＥＳ）において、ＳＦ［１］がＳＦ［０］の最後のクローンでない場合（ブロック１０１８；ＮＯ）には、ＳＰＡＷＮ（ＳＦ［０］，refOffset［０］＋１）作業項目がキューに追加される（ブロック１０２０）。そして、上記クローンは複製される（ブロック１０２４）；あるいは、ＳＦ［１］がＳＦ［０］の最後のクローンである場合（ブロック１０１８；ＹＥＳ）にも、上記クローンは複製される（ブロック１０２４）。代わりに、もし、スナップショットファイルＳＦ［ｉ−１］の最後のクローンではないスナップショットファイルＳＦ［ｉ］（ここで、１＜ｉ＜ｎ）が検知された場合（ブロック１０１２；ＮＯ）には、ＡＣＴＩＶＥ（ＳＦ［０］，refOffset［０］，ＳＦ［ｉ−１］，refOffset［ｉ−１］＋１）作業項目がキューに追加される（ブロック１０２２）。そして、上記クローンは複製される（ブロック１０２４）。
【０１７４】
もし、クローンがスナップショットファイルであり（ブロック１００２；ＮＯ）、かつ、キューが満杯（フル）である場合（ブロック１００４；ＹＥＳ）、ＡＣＴＩＶＥ（ＳＦ［０］，refOffset［０］，ｃｌｏｎｅ，０）作業項目が未処理マップに追加される（ブロック１００６）。そして、上記クローンは複製される（ブロック１０２４）。
【０１７５】
もし、クローンがスナップショットファイルであり（ブロック１００２；ＮＯ）、かつ、キューが空きエントリを有する場合（ブロック１００４；ＮＯ）、ＳＰＡＷＮ（ｃｌｏｎｅ，０）作業項目が未処理マップに追加される（ブロック１００８）。その後、（反復変数「ｉ」が初期化されるブロック１０１０を経由して）、上記論理回路は、ＳＦ［０］の直接クローンＳＦ［１］へ到達する（ブロック１０１６；ＹＥＳ）、あるいは、スナップショットファイルＳＦ［ｉ−１］の最後のクローンではないスナップショットファイルＳＦ［ｉ］（ここで、１＜ｉ＜ｎ）が検知される（ブロック１０１２；ＮＯ）まで、ＳＦ［ｎ］に介在する親に対して同様の処理を、繰り返し実行する（ブロック１０１４、１０１６、１０１２）。もし、ＳＦ［０］の直接クローンＳＦ［１］へ到達した場合（ブロック１０１６；ＹＥＳ）において、ＳＦ［１］がＳＦ［０］の最後のクローンでない場合（ブロック１０１８；ＮＯ）には、ＳＰＡＷＮ（ＳＦ［０］，refOffset［０］＋１）作業項目がキューに追加される（ブロック１０２０）。そして、上記クローンは複製される（ブロック１０２４）；あるいは、ＳＦ［１］がＳＦ［０］の最後のクローンである場合（ブロック１０１８；ＹＥＳ）にも、上記クローンは複製される（ブロック１０２４）。代わりに、もし、スナップショットファイルＳＦ［ｉ−１］の最後のクローンではないスナップショットファイルＳＦ［ｉ］（ここで、１＜ｉ＜ｎ）が検知された場合（ブロック１０１２；ＮＯ）には、ＡＣＴＩＶＥ（ＳＦ［０］，refOffset［０］，ＳＦ［ｉ−１］，refOffset［ｉ−１］＋１）作業項目がキューに追加される（ブロック１０２２）。そして、上記クローンは複製される（ブロック１０２４）。
【０１７６】
３．３．５．「変更」作業項目
「変更」作業項目は、ターゲットファイルシステムに既に複製されたが前のスナップショット以降に変化したオブジェクトに適用される。ライブファイルシステム上での通常のファイルクローンオブジェクトへの変更は、以下の事柄に起因して起こる：
１．全てのユーザ／メタデータのブロックが分岐される時におけるオブジェクトのデクローニング（このことは、オブジェクトが最後のクローンであった場合には、親スナップショットファイルの削除という結果をもたらし得る）；
２．親の変更：
ａ．スナップショットファイルツリーが簡易化された場合。その参照数が１まで減少すると、中間のスナップショットファイルが削除される。この場合のクローンチェックポイント番号は、前のスナップショットのチェックポイント番号未満である；あるいは、
ｂ．クローンがデクローンされた後に、再びクローン化された場合。この場合のクローンチェックポイント番号は、前のスナップショットのチェックポイント番号以上である；
３．通常のファイルオブジェクトであるソースデータストリームのクローニング。これにより、２つの新たなオブジェクト、すなわち、スナップショットファイル及び新規クローンが生成される。上記ソースデータストリームは、上記スナップショットファイルのクローンになり、前のスナップショットのチェックポイント番号以上であるクローンチェックポイント番号を有する；あるいは、
４．オブジェクトの追加のユーザ／メタデータのブロックの単純な分岐。この場合のクローンチェックポイント番号は、前のスナップショットのチェックポイント番号未満である。
【０１７７】
上記ターゲットファイルシステムに既に複製されたソースデータストリームがクローン化されると、以下に示す様に、スナップショットファイル及びクローンオブジェクトが生成される
ＳＦへのソース＜＋ソース
Ｉ
＋クローン
【０１７８】
この場合、間接オブジェクトをスキャンする時、間接オブジェクトスキャナファイバは、ソースを変更オブジェクトとみなし、該オブジェクトのための「変更」作業項目を追加すると共に、ＳＦを新規オブジェクトとみなし、クローンを新規オブジェクトとみなす。しかしながら、この場合、ソースは、ＳＦの複製処理の一部として複製されるべきであるため、ソースのための「変更」作業項目を実行しているリーダファイバは、以下に記載する様に、ソースの複製処理を開始しないであろう。上記リーダファイバは、ソースのクローンチェックポイント番号をチェックすることにより、ソースがソースデータストリームであると判定することができる。すなわち、上記クローンチェックポイント番号が、前のファイルシステムのスナップショットのチェックポイント番号よりも大きい場合、ソースはソースデータストリームである。
【０１７９】
チャンクキューからの「変更」作業項目を処理する際、状態遷移が検知され、具体的には以下の様な処理が実行される：
１．非クローンの通常ファイルオブジェクトが前のスナップショット内のクローンであった場合、オブジェクトはデクローンされる。その様なオブジェクトはディープコピーされる、すなわち、ユーザ／メタデータのブロックの全てが複製される。
２．オブジェクトのクローンチェックポイント番号が、前のスナップショットのチェックポイント番号よりも大きい場合：
・親スナップショットファイルが新規オブジェクトである場合、該オブジェクトは、上記ソースデータストリームであったクローン、または、デクローンされた後にクローン化されたクローンの何れかである。何れの場合も、上記オブジェクトは、親スナップショットファイルの複製処理の一部として、ゼロから複製されるであろう。この様なオブジェクトの複製処理は、加工ファイバにより省略される。
更に別の方法では、上記オブジェクトは、ターゲット上で再生成される。この処理は、クローンが部分的にクローン化された時に前のスナップショットが取得された場合、すなわち、スナップショットファイルが前のスナップショット内で生成されたが、クローンはその後にクローン化された場合に、実行可能である。
３．もし、上記オブジェクトが、前のスナップショットのチェックポイント番号未満のクローンチェックポイント番号を有し、前のスナップショットとは異なる親を有するクローンである場合、該クローンの親は変更されている。新たな親から分岐された全てのユーザ／メタデータのブロックが複製される。
４．あるいは、上記オブジェクトがクローンである場合、該オブジェクトは、更に分岐されたクローンであり、他のオブジェクトの様に複製される。この場合、変更され分岐されたユーザ／メタデータのブロックのみが複製される。
【０１８０】
上記ターゲットファイルシステムとは異なり、上記１〜３に示した特定のケースの幾つかは、ライブファイルシステム上のオブジェクト間における、ユーザ／メタデータのブロックのある程度の移動を含む。
【０１８１】
例えば、スナップショットファイルツリーが簡易化される場合、削除された中間の親が有していたユーザ／メタデータのブロックは、上記クローンに移動される。もし、その様なユーザ／メタデータのブロックが、前のスナップショットから変化していない場合には、該ブロックは、移動される代わりに再利用され、上記ターゲットファイルシステム上の新たな領域に書き込まれるものとしてもよい。
【０１８２】
また、上記オブジェクトがソースデータストリームである場合、そのユーザ／メタデータのブロックは、該オブジェクトがクローン化したスナップショットファイルに移動される。これらのユーザ／メタデータのブロックが、前のスナップショットから変化していない場合には、該ブロックは、移動される代わりに再利用され、上記ターゲットファイルシステム上の新たな領域に書き込まれるものとしてもよい。
【０１８３】
なお、上述した追加的な処理は、システムの状態の最適化し得るが、全体の効果を常に向上するとは限らない。
【０１８４】
図１５は、例示的な一実施形態に係る「変更」作業項目を説明するための状態図である。
【０１８５】
もし、クローンチェックポイント番号（ＣＣＰ）が、前のスナップショットのチェックポイント番号よりも大きく（ブロック１１０２；ＹＥＳ）、かつ、親スナップショットファイルが新規オブジェクトである場合（ブロック１１０４；ＹＥＳ）には、該オブジェクトは、親スナップショットファイルの複製処理の一部として、ゼロから複製されるであろう。このため、該オブジェクトの複製処理は、加工ファイバにより省略される（ブロック１１０６）。
【０１８６】
もし、クローンチェックポイント番号（ＣＣＰ）が、前のスナップショットのチェックポイント番号よりも大きく（ブロック１１０２；ＹＥＳ）、かつ、親スナップショットファイルが新規オブジェクトでない場合（ブロック１１０４；ＮＯ）には、該オブジェクトの全体が、上記ターゲットファイルシステム上で複製される。
【０１８７】
もし、クローンチェックポイント番号（ＣＣＰ）が、前のスナップショットのチェックポイント番号以下であり（ブロック１１０２；ＮＯ）、かつ、オブジェクトが通常のファイルでない場合（ブロック１１１０；ＮＯ）には、該オブジェクトは複製される（ブロック１１２２）。
【０１８８】
もし、クローンチェックポイント番号（ＣＣＰ）が、前のスナップショットのチェックポイント番号以下であり（ブロック１１０２；ＮＯ）、かつ、オブジェクトが通常のファイルのクローンでない場合（ブロック１１１０；ＹＥＳ、ブロック１１１２；ＮＯ）において、該オブジェクトが、前のスナップショット内のクローンであった場合（ブロック１１１８；ＹＥＳ）には、該オブジェクトはディープコピーされる（ブロック１１２０）。一方、そうでない場合（ブロック１１１８；ＮＯ）には、該オブジェクトは複製される（ブロック１１２２）。
【０１８９】
もし、クローンチェックポイント番号（ＣＣＰ）が、前のスナップショットのチェックポイント番号以下であり（ブロック１１０２；ＮＯ）、かつ、オブジェクトが通常のファイルのクローンである場合（ブロック１１１０；ＹＥＳ、ブロック１１１２；ＹＥＳ）において、該オブジェクトの親が変更された場合（ブロック１１１４；ＹＥＳ）には、分岐された全てのブロックが複製される（ブロック１１１６）。一方、そうでない場合（ブロック１１１４；ＮＯ）には、該オブジェクトが複製される（ブロック１１２２）。
【０１９０】
４．幾つかの可能な最適化
４．１．デクローンされたクローンの検出
「Ｗａｓ  Ａ  Ｃｌｏｎｅ」フラグは、（例えば、イーノード情報に追加されることにより）、通常のファイルタイプのオブジェクトが過去においてクローンであったか否かを示すために使用することができる。このフラグは、クローンが最初にデクローンされる時に設定される。特に、このフラグを用いることで、オブジェクトが、クローンではなかった通常のファイルオブジェクトのクローンであったか否かをチェックするための、前のスナップショット内のＳＭＯのイーノードの読み出しが回避される。
【０１９１】
４．２．クローンの親の変化の検出
クローンの親が最後に変化したチェックポイント番号は、上記クローンのＳＭＯのイーノード内に保持可能である。このチェックポイント番号が前のスナップショットのチェックポイント番号よりも大きい場合、このことは、前のスナップショット以降に親の変化が起きたことを意味する。特に、これにより、前のスナップショット以降に変化した親をもたなかったクローンのための、前のスナップショット内のＳＭＯのイーノードの読み出しが回避される。
【０１９２】
４．３．スナップショットファイルの複製の調整
可能な最適化の一つは、クローンキュー内の作業項目の優先順位を決めることであり得、（refCount−refOffset）の様なrefOffsetが最小となる位置において、後継オブジェクトの複製を含む作業項目から始めることにより実現される。ここで、refCountは、親スナップショットファイルの参照数である。
【０１９３】
可能な他の最適化は、（クローンキューを除く）チャンクキュー内のスナップショットファイルの複製を含まない作業項目を優先することであり得る。これらの作業項目は、オブジェクトタイプをチェックすることにより容易に特定可能である。この方法は、作業項目の数がある特定の限度（例えば、キューの総容量／動的複製の数／８，初期値５１２）に達した時に、未処理マップ内の作業項目の数を制御するために使用することができる。
【０１９４】
４．４．前のスナップショット内にソースデータストリームが存在する場合
複製処理中に、親をもたない新たなスナップショットを生成すると、オブジェクトは、より古いスナップショット内のソースデータストリームの存在下において、如何なる重複データも再利用することなく、その全体が複製される。このことは、上記ソースデータストリームを有する共有データの全てが、ソースからターゲットに送信されているため、双方のエンド間に不要なトラフィックが発生していることを意味する。
【０１９５】
最悪のケースは、上記古いスナップショット以降にソースデータストリームが変化しなかったが故に、スナップショットファイルから分岐しなかった場合である。この場合、スナップショットファイルを生成するために、上記ソースデータストリームの全てのデータが、ターゲットに再び書き込まれ、その後、上記ソースデータストリームから切り捨てられる。
【０１９６】
上記ケースは、上記古いスナップショット内のソースデータストリームを特定し、該ソースデータストリームをスナップショットファイルの生成に使用することで、最適化が可能である。
【０１９７】
各スナップショットファイルは、自ファイルを参照しているオブジェクトのリストを保持する。上記ソースデータストリームは、スナップショットファイルを参照するための第１のオブジェクトであるので、最初にリストに追加される。このことは、ターゲットファイルシステムの場合（すなわち、ターゲットファイルシステム）には必ずしも成立せず、上記ソースデータストリームは、スナップショットファイルの後に生成され得るため、参照リストの何処かに追加可能である。
【０１９８】
しかしながら、上記ケースは、最適化が適用される時とは関連付けられていないため、上記ソースデータストリームは、スナップショットファイルではなく、古いスナップショット内に存在する。これにより、上記スナップショットファイルが、上記ソースファイルシステム内で最初に生成されたことが確認される。
【０１９９】
従って、参照リスト内の最初のオブジェクトを取得して、生成チェックポイント番号を古いスナップショットのチェックポイント番号と比較することにより、該古いスナップショット内に上記最初のオブジェクトが既に存在することを確認するだけで十分である。
【０２００】
もし、上記ソースデータストリームが、現在のスナップショット内で削除されたか、スナップショットファイルから完全に分岐した場合には、たとえ上記古いスナップショット上に存在していたとしても、その位置を特定することはできないことに留意すべきである。
【０２０１】
もし、上記ソースデータストリームが特定され、上記古いスナップショット内に存在する場合には、以下の様にして、スナップショットファイルの生成を最適化することができる：
現在のスナップショット内のスナップショットファイル及び古いスナップショット内のソースデータストリーム間におけるデータブロックの変化（差異）を推定する。
上記ソースデータストリームが上記スナップショットファイルと一致する様に、ターゲット上の上記差異に対してソースデータストリームを適用する。これにより、ターゲット上のソースデータストリームは、クローン化された状態となる。
スナップショットファイルを生成し、上記ソースデータストリームを結合させる。
現在のスナップショット内のソースデータストリーム及びスナップショットファイル間におけるデータブロックの変化（差異）を推定し、ターゲット上のソースデータストリームに該変化を書き込む。これにより、上記ターゲット上のソースデータストリームの分岐されたデータブロックが生成される。
【０２０２】
もし、スナップショットファイルの参照リストの順序がソフトウェア内で変化した場合、リスト全体を検索する必要が生じることに留意されたい。さもないと、最適化は容易には適用されない。
【０２０３】
また、かかる最適化処理は、上記ターゲット上に上記ソースデータストリームが既に存在する場合にまで、該ソースデータストリームを生成しようとすることを回避する。しかしながら、かかる最適化処理は、ソースデータストリームがスナップショットファイルから大量に分岐した場合には、ソース及びターゲット間に不要なトラフィックを生じさせるため、非効率的である。最悪のケースとなるのは、古いスナップショットと、ソースデータストリームがクローン化された後、該古いスナップショット内のソースデータストリームの状態と一致させるために元に戻された時との間で、上記ソースデータストリームが大きく変化した場合である。この場合、上記スナップショットファイルを単純に書き込む代わりに、ソースデータストリームを変更し、スナップショットファイルと一致させて最初の状態に戻すこととなる。しかしながら、このケースはあまり一般的ではない。
【０２０４】
通常は、クローンがスナップショットファイルから大量に分岐することはないので、上記最適化処理を実行することは、依然として有益であり得る。また、ソースデータストリームがスナップショットファイルからどの程度分岐したかを把握することは、最適化を適用すべきか否かの判断にも役立つ。
【０２０５】
５．代替的なクローンの複製方法
５．１．クローン／スナップショットファイルオブジェクト及び親の複製
親を有するクローンまたはスナップショットファイルを複製する際、ソースは、該複製を行うケースにおいて、参照するスナップショットファイルが古いスナップショット内に既に存在するか否かを検査する。さもないと、上記ソースは、複製された親またはルートを有するオブジェクトを見付けるまで、親スナップショットファイルの複製処理を繰り返してしまうこととなる。その後、上記ソースは、最後に見付けられたオブジェクトを始点として、引き続き、スナップショットファイルの複製を開始する。上記クローンは、複製対象となる最後のオブジェクトである。
【０２０６】
要求された全てのスナップショットファイルの親を順次複製する間に、間接オブジェクトのスキャン処理が遮断されない様に、上記ソースは、クローン及びスナップショットファイルの各オブジェクトの生成に際して、各々独立したキューを保持する必要がある。
【０２０７】
スナップショットファイルが複数の後継オブジェクトをもつことができる様に、複製する必要のあるスナップショットファイルの親の記録をリスト内に保持することが必要となる。複製すべき親の数が多い場合には、該リストは、メモリリソースの相当量を使用することとなる。
【０２０８】
上記処理中に生成された全てのスナップショットファイルは、間接オブジェクト内のこれらのエントリがスキャンされる場合、後の複製処理中にも見付けられることとなる。この場合、少なくとも以下の２つの方法による対処が可能である：
１．現在の複製セッション中にスナップショットファイルが既に複製された場合には、上記ソースは、ターゲットに問合せを行うことができる。これにより、ソース及びターゲット間に追加のトラフィックが発生する。
２．上記ソースは、スナップショットファイルオブジェクトの複製を試行し、該オブジェクトを生成するための問合せを送信する。上記ターゲットは、該オブジェクトが既に生成されていることを検知し、エラーを返信する。これによっても、双方のエンド間にオーバヘッドトラフィックが発生する。
【０２０９】
５．２．マルチパス複製
この方法は、複数のパス内で複製を実行するものであり、各パスでの変化を見付けるために間接オブジェクトがスキャンされる。
【０２１０】
第１のパスでは、ソースは、上記複製を行うケースにおいて、クローンまたはスナップショットファイルの親が古いスナップショット内に既に存在するか否かをチェックする。あるいは、ソースは、上記親の複製処理を省略するものとしてもよい。
【０２１１】
第２のパスでは、古いスナップショット内に存在しない親を有するクローンまたはスナップショットファイルのオブジェクトだけが、考慮される。ソースは、複製された親またはルートを有するオブジェクトを見付けるまで、全ての親スナップショットファイルの複製処理を繰り返し実行する。現時点では、上記オブジェクトが第１のパスにおいて複製されているため、上記ソースは、精査されているブランチにおけるすぐ次の後継オブジェクトを複製する。
【０２１２】
上記複製処理は、残りの全てのクローン及びスナップショットファイルのオブジェクトを複製するために、複数のパスにおいて実行される。各パスＮでは、各スナップショットファイルブランチ内の深さＤ−Ｎ＋１のオブジェクトだけが生成される。ここで、Ｄは、上記精査されているブランチにおけるオブジェクトの位置である。
【０２１３】
各パスでは、複製セッションを完了するために複製すべき残りのパス及びオブジェクトの数を推計することが可能である。
【０２１４】
上述の方法では、間接オブジェクトをスキャンし、スナップショットファイルツリーのブランチを各パスにおいて精査するための、かなりの追加的な処理が要求される。
【０２１５】
パスＮでは、例えば、スナップショットファイルが複数のクローンをもつ場合、同じスナップショットファイルが、複数のブランチにおいて、位置Ｄ−Ｎ＋１をもつことが起こり得る。これにより、スナップショットファイルの複製処理が、複数回試行されることがある。このことは、現行のパスにおいて複製されているスナップショットファイルの記録を保持することにより、回避することができる。
【０２１６】
５．３．２段階複製
この場合、複製処理は、２つの部分に分けて実行される：
１．１つ目の部分は、変更された全てのスナップショットファイル及びクローンのオブジェクトが複製される部分である。ルートスナップショットファイルは、間接オブジェクトのスキャン中に特定される。スナップショットファイルツリーの各々は、ルートから始まる変化、及びこの順番でターゲットに複製された全ての変化を見付けるためにスキャンされる。
２．２つ目の部分は、クローン及びスナップショットファイルのオブジェクトを除いた通常の複製部分である。
【０２１７】
上記２つの複製部分は、単独のルートスナップショットファイルをスキャンするために使用される複数のファイバにより並列に実行可能である。上記ソースは、クローン及びスナップショットファイルの各オブジェクトの生成に際して、各々独立したキューを保持する必要がある。しかしながら、この方法では、間接オブジェクトを２度に渡りスキャンすることとなる。
【０２１８】
５．４．ターゲット内で実行される複製
様々な変形態様において、複製処理は、上述した多様な複製技術に従い、幾つかまたは全ての新規スナップショットをターゲットに送信するソース、及び、ソースとの間で更なる交信を実質的に行うことなく複製処理を実行するターゲットにより、実行されるものとしてもよい。
【０２１９】
６．その他について
なお、図中の矢印は、通信、移動、または、２つ以上のエンティティに関わる他の動作を表すために使用されることがある。幾つかの状況では、必ずしも双方向に動作が起きないこともあるが、両端矢印は、一般的に、動作が双方向（例えば、ある方向がコマンド／リクエストの場合における他の方向の返信応答、あるいは、何れか一方のエンティティによって開始されるピアツーピア通信）に起き得ることを示す。特定の状況では、単方向の動作が実際には双方向の動作（例えば、送信者から受信者へのメッセージ及び受信者から送信者への肯定応答、あるいは、転送前のコネクション確立及び転送後のコネクション終了）を含むこともあることに留意されたいが、一端矢印は、一般的に、全てまたは殆どの動作が単方向に起きることを示す。この様に、特定の動作を表すために特定の図面において使用される矢印の種類は、あくまで例示に過ぎず、これらに限定されるものではない。
【０２２０】
また、上記では、説明の便宜上、見出し（表題）を用いたが、これらの見出しにより、本願発明は決して限定的に解釈されないことに留意されたい。
【０２２１】
用語「サーバ」及び「プロセッサ」は、本発明の特定の実施形態で使用される可能性のあるデバイスを記述するのに本明細書で使用することができ、文脈がそれ以外の解釈を要求しない限り、本発明を、任意の特定のデバイスタイプに限定するものと解釈すべきではないことに留意されたい。従って、デバイスは、限定されずに、ブリッジ、ルータ、ブリッジ−ルータ（ブルータ）、スイッチ、ノード、サーバ、コンピュータ、付属機器、または他のタイプのデバイスを含むことができる。この様なデバイスは典型的には、通信ネットワークによって通信するための１以上のネットワークインタフェース、及び、デバイスの機能を果たす様にこれに従って構成されたプロセッサ（例えば、メモリ並びに他の周辺装置及び／または特定用途のハードウェアを備えたマイクロプロセッサ）を含む。通信ネットワークは一般的に、パブリック及び／またはプライベートネットワークを含むことができ；ローカルエリア、ワイドエリア、首都圏エリア、ストレージ及び／または他のタイプのネットワークを含むことができ；以下の技術に限定されるものではないが、アナログ技術、デジタル技術、光技術、無線技術（例えば、ブルートゥース）、ネットワーキング技術、及びインターネットワーキング技術を含めた通信技術を利用することができる。
【０２２２】
デバイスは、通信プロトコル、及び、（例えば、このデバイスによって生成された、送信された、受信された、記憶された及び／または処理された）メッセージを使用する場合があり、この様なメッセージは、通信ネットワークまたは通信媒体によって伝えることができることにも留意されたい。文脈がそうでないことを要求しない限り、本発明は、任意の特定の通信メッセージタイプ、通信メッセージフォーマットまたは通信プロトコルに限定されるものと解釈すべきではない。従って、通信メッセージは一般的に、限定されることなく、フレーム、パケット、データグラム、ユーザデータグラム、セルまたは他のタイプの通信メッセージを含むことができる。文脈がそうでないことを要求しない限り、特定の通信プロトコルの記載は例示的なものであり、代替的な実施形態は、必要に応じて、様々な種類（例えば、その時々に形成され得るプロトコルの修正形態または拡張形態）の上記通信プロトコル、あるいは、将来知られるまたは開発される他のプロトコルを利用することができる、ことを理解されたい。
【０２２３】
また、論理の流れは、本発明の様々な態様を実証するために本明細書に記載されてもよく、本発明は、任意の特定の論理の流れまたは論理の実施に限定されるものと解釈すべきではないことに留意されたい。記載された論理は、全体としての結果を変えることなく、あるいはそうでければ、本発明の真の範囲から逸脱することなく、様々な論理ブロック（例えば、プログラム、モジュール、ファンクションまたはサブルーチン）に分割することができる。多くの場合、論理要素は、全体としての結果を変えることなく、あるいはそうでければ、本発明の真の範囲から逸脱することなく、様々な順番で追加され、変更され、省略され、実行され、あるいは種々の論理構造（例えば、論理ゲート、ルーピングプリミティブ、条件付きロジック、及び他の論理構造）を使用して実施されることができる。
【０２２４】
本発明は、多くの異なる形態により具現化することができ、これらの形態には、以下の例示に限定されるものではないが、プロセッサ（例えば、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、または汎用コンピュータ）と共に使用するためのコンピュータプログラム論理、プログラマブル論理デバイス（例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）または他のＰＬＤ）と共に使用するためのプログラマブル論理、個別の要素、集積回路（例えば、特定用途向け集積回路（ＡＳＩＣ））、あるいは、これらの何れかの組合せを含む任意の他の手段が含まれる。記載された機能の一部または全部を実現するコンピュータプログラム論理は典型的には、コンピュータプログラムの指示のセットとして実行され、このセットは、コンピュータが実行可能な形態に変換され、コンピュータ読み取り可能な媒体にその形態で記憶され、ＯＳ（オペレーティングシステム）による制御の基にマイクロプロセッサによって実行される。記載された機能の一部または全部を実現するハードウェアベースの論理は、適切に構成された１以上のＦＰＧＡを用いて実行される場合もある。
【０２２５】
本明細書において上述された機能の一部または全部を実現するコンピュータプログラム論理は、種々の形態により具現化することができ、これらの形態には、以下の例示に限定されるものではないが、ソースコード形態、コンピュータの実行可能な形態、及び種々の中間形態（例えば、アセンブラ、コンパイラ、リンカー、またはロケータによって形成される形態）が含まれる。ソースコードは、種々のＯＳまたは動作環境にて使用するための様々なプログラミング言語（例えば、オブジェクトコード、アセンブリ言語、あるいは、フォートラン、Ｃ、Ｃ++、ＪＡＶＡ、またはＨＴＭＬ等のハイレベル言語）の何れかにより実行される一連のコンピュータプログラムの指示を含むものとしてもよい。上記ソースコードは、種々のデータ構造及び通信メッセージを定義して利用することができる。上記ソースコードは、（例えば、インタプリタを介して）コンピュータの実行可能な形態であってもよい、あるいは上記ソースコードは、コンピュータの実行可能な形態に（例えば、トランスレータ、アセンブラ、またはコンパイラを介して）変換されるものとしてもよい。
【０２２６】
本明細書において上述された機能の一部または全部を実現するコンピュータプログラム論理は、それぞれ異なる時に単独のプロセッサにおいて実行することができる（例えば、同時発生的に）、あるいは同一のまたは異なる時に複数のプロセッサにおいて実行することができる。また、上記コンピュータプログラム論理は、単独のＯＳのプロセス／スレッドの下において、または異なるＯＳのプロセス／スレッドの下において実行することができる。従って、用語「コンピュータプロセス」は一般的に、コンピュータプログラムの指示のセットの実行を表す。このことは、異なるコンピュータプロセスが、同一のプロセッサ上で実行されるか、または、異なるプロセッサ上で実行されるかとは関係が無く、また、異なるコンピュータプロセスが、同一のＯＳのプロセス／スレッドの下において実行されるか、または、異なるＯＳのプロセス／スレッドの下において実行されるかとは関係が無い。
【０２２７】
上記コンピュータプログラムは、任意の形態（例えば、ソースコード形態、コンピュータの実行可能な形態、または中間形態）で、実在する記憶媒体に永久的にまたは一時的に固定することができる。この記憶媒体は、例えば、半導体メモリデバイス（例えば、ＲＡＭ、ＲＯＭ、ＰＲＯＭ、ＥＥＰＲＯＭ、またはフラッシュプログラマブルＲＡＭ）、磁気メモリデバイス（例えば、ディスケットまたは固定ディスク）、光メモリデバイス（例えば、ＣＤ−ＲＯＭ）、ＰＣカード（例えば、ＰＣＭＣＩＡカード）、または、他のメモリデバイス等である。上記コンピュータプログラムは、任意の形態で、信号内に固定することができる。この信号は、種々の通信技術の何れかを使用してコンピュータに転送可能であり、この通信技術には、以下の例示に限定されるものではないが、アナログ技術、デジタル技術、光技術、無線技術（例えば、ブルートゥース）、ネットワーキング技術、及びインターネットワーキング技術が含まれる。上記コンピュータプログラムは、印刷または電子化された文書が添付された可搬性の記憶媒体（例えば、収縮包装されたソフトウェア）として、任意の形態で提供される、コンピュータシステムと共に予めロードされる（例えば、システムＲＯＭまたは固定ディスク上に）、あるいは、サーバまたは電子掲示板から通信システム（例えば、インターネットまたはワールドワイドウェブ）を介して提供されるものとしてもよい。
【０２２８】
本明細書において上述された機能の一部または全部を実現するハードウェア論理（プログラマブル論理デバイスと共に使用するためのプログラマブル論理を含む）は、従来の手動式の方法を用いて設計することができる。あるいは、上記ハードウェア論理は、種々のツールを用いて電子式に設計され、保存され、シミュレートされ、または文書化されてもよく、このツールには、例えば、コンピュータ支援設計（ＣＡＤ）、ハードウェア記述言語（例えば、ＶＨＤＬまたはＡＨＤＬ）、またはＰＬＤプログラミング言語（例えば、ＰＡＬＡＳＭ、ＡＢＥＬまたはＣＵＰＬ）等が含まれる。
【０２２９】
プログラマブル論理は、実在する記憶媒体に永久的にまたは一時的に固定することができる。この記憶媒体は、例えば、半導体メモリデバイス（例えば、ＲＡＭ、ＲＯＭ、ＰＲＯＭ、ＥＥＰＲＯＭ、またはフラッシュプログラマブルＲＡＭ）、磁気メモリデバイス（例えば、ディスケットまたは固定ディスク）、光メモリデバイス（例えば、ＣＤ−ＲＯＭ）、または、他のメモリデバイス等である。上記プログラマブル論理は、信号内に固定することができる。この信号は、種々の通信技術の何れかを使用してコンピュータに転送可能であり、この通信技術には、以下の例示に限定されるものではないが、アナログ技術、デジタル技術、光技術、無線技術（例えば、ブルートゥース）、ネットワーキング技術、及びインターネットワーキング技術が含まれる。上記プログラマブル論理は、印刷または電子化された文書が添付された可搬性の記憶媒体（例えば、収縮包装されたソフトウェア）として、任意の形態で提供される、コンピュータシステムと共に予めロードされる（例えば、システムＲＯＭまたは固定ディスク上に）、あるいは、サーバまたは電子掲示板から通信システム（例えば、インターネットまたはワールドワイドウェブ）を介して提供されるものとしてもよい。当然のことながら、本発明の実施形態の幾つかは、ソフトウェア（例えば、コンピュータプログラム製品）及びハードウェアの双方を組み合せたものとして、実施される場合もある。本発明の更に別の実施形態は、もっぱらハードウェアとして、または、もっぱらソフトウェアとして実施される。
【０２３０】
本発明は、本発明の真の範囲から逸脱することなく、他の特定の形態により具現化されることもある。本発明に多くの変形や改良が可能であることは、本明細書の記載から、当業者にとって明らかであろう。「本発明」に対する如何なる言及も、本発明の例示的な実施形態を指すことが意図されたものであり、文脈がそうでないことを要求しない限り、本発明の全ての実施形態を指すものと解釈されるべきではない。記載された実施形態は、全ての点において、限定ではなく例示としてのみ、みなされるべきである。
【図１】
2016512633.tif 000003
【図２】
2016512633.tif 000004
【図３】
2016512633.tif 000005
【図４】
2016512633.tif 000006
【図５】
2016512633.tif 000007
【図６】
2016512633.tif 000008
【図７】
2016512633.tif 000009
【図８】
2016512633.tif 000010
【図９】
2016512633.tif 000011
【図１０】
2016512633.tif 000012
【図１１】
2016512633.tif 000013
【図１２】
2016512633.tif 000014
【図１３】
2016512633.tif 000015
【図１４】
2016512633.tif 000016
【図１５】
2016512633.tif 000017
【手続補正書】
【提出日】平成27年9月24日(2015.9.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
読出し専用のスナップショットファイルオブジェクトと共に関連ブロックを共有するクローンオブジェクトが、ソースファイルシステム内で生成された場合、
前記ソースファイルシステムから前記ターゲットファイルシステムへ前記スナップショットファイルオブジェクトを複製し、その複製されたスナップショットファイルオブジェクトと共に関連ブロックを共有するクローンオブジェクトを前記ターゲットファイルシステムに生成し、
前記ソースファイルシステム内のクローンオブジェクトが変更され、かつ、そのクローンオブジェクトが、前記ソースファイルシステム内の前記スナップショットファイルオブジェクトと共に共有されるブロック以外の少なくとも１つの分岐ブロックに関連付けられている場合、そのクローンオブジェクトと関連付けられた少なくとも１つの分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する、
ことをコンピュータに実行させるコンピュータプログラム。
【請求項２】
前記クローンオブジェクトが、前記ソースファイルシステムにおいて、以前の複製周期以降に生成された場合、前記スナップショットファイルオブジェクトは、前記以前の複製周期または現在の複製周期において、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製される、
請求項１に記載のコンピュータプログラム。
【請求項３】
前記クローンオブジェクトと関連付けられた前記少なくとも１つの分岐ブロックは、前記現在の複製周期において、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製される、
請求項２に記載のコンピュータプログラム。
【請求項４】
前記スナップショットファイルオブジェクトを前記ソースファイルシステムから前記ターゲットファイルシステムへ複製し、かつ、前記ターゲットファイルシステムにクローンオブジェクトを生成した後に、クローンオブジェクトと関連付けられた前記少なくとも１つの分岐ブロックは、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製される、
請求項１乃至３のうちのいずれか１項に記載のコンピュータプログラム。
【請求項５】
前記複製されたスナップショットファイルオブジェクトと共に関連ブロックを共有するクローンオブジェクトを前記ターゲットファイルシステムに生成することを、前記ソースファイルシステムから得られたメタデータに基づいて実行する、
請求項１乃至４のうちのいずれか１項に記載のコンピュータプログラム。
【請求項６】
前記ターゲットファイルシステムに生成されたクローンオブジェクトのクローンチェックポイント番号として、そのクローンオブジェクトに関連するスナップショットファイルオブジェクトに関連付けられたブロックのチェックポイント番号よりも大きい番号を設定し、
前記ターゲットファイルシステム内に生成されたクローンオブジェクトの前記クローンチェックポイント番号は、その生成されたクローンオブジェクトが前記スナップショットファイルオブジェクトに関連付けられたときのチェックポイント番号に対応する、
請求項１乃至５のうちのいずれか１項に記載のコンピュータプログラム。
【請求項７】
前記大きい番号を設定する処理は、
前記ターゲットファイルシステム内の前記関連スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号が、前記ターゲットファイルシステムの現在のチェックポイント番号と異なる場合、前記ターゲットファイルシステムに生成された前記クローンオブジェクトの前記クローンチェックポイント番号として、前記ターゲットファイルシステムの前記現在のチェックポイント番号を設定する処理と、
前記ターゲットファイルシステム内の前記関連スナップショットファイルオブジェクトの前記最後に変更されたチェックポイント番号が、前記ターゲットファイルシステムの現在のチェックポイント番号と等しい場合、前記ターゲットファイルシステムの前記現在のチェックポイント番号を進めるために前記ターゲットファイルシステム内の新たなチェックポイントを発行し、かつ、前記ターゲットファイルシステムに生成されたクローンオブジェクトの前記クローンチェックポイント番号として、その進んだチェックポイント番号を設定する処理と
を含む、
請求項６に記載のコンピュータプログラム。
【請求項８】
前記クローンオブジェクトに関連する前記少なくとも１つの分岐ブロックを前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する処理は、
前記ソースファイルシステム内の前記クローンオブジェクトのブロックに関連付けられているチェックポイント番号を、前記ソースファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号と比較した結果に基づき、前記ソースファイルシステム内の前記クローンオブジェクトの生成以降に変更された、前記ソースファイルシステム内の前記クローンオブジェクトの少なくとも１つのブロックを検出する処理と、
前記ソースファイルシステム内の前記クローンオブジェクトの前記クローンチェックポイント番号以上のチェックポイント番号を有するブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ送信する処理と、
前記ソースファイルシステムから受信されたブロックに基づき、前記ターゲットファイルシステム内の前記クローンオブジェクトを更新する処理と
を含む、
請求項１乃至７のうちのいずれか１項に記載のコンピュータプログラム。
【請求項９】
クローンオブジェクトが、以前の複製周期において、前記ターゲットファイルシステムへ、通常のファイルシステムオブジェクトとして複製され、かつ、前記以前の複製周期以降に、クローンオブジェクトのプロパティを取得し、かつ、前記関連スナップショットファイルオブジェクトが以前に前記ターゲットファイルシステムへ複製された場合、
前記クローンオブジェクトのメタデータと前記関連スナップショットファイルオブジェクトとを、前記ソースファイルシステムから前記ターゲットファイルシステムへ送信し、
前記ソースファイルシステムからの前記メタデータと、前記ターゲットファイルシステム上の以前に複製されたスナップショットファイルオブジェクトとに基づき、前記関連スナップショットファイルオブジェクトと共に前記関連ブロックを共有するクローンオブジェクトとして、前記ターゲットファイルシステムにおいて、前記クローンオブジェクトを再生成し、
前記クローンオブジェクトが、前記ソースファイルシステム内で変更され、かつ、前記ソースファイルシステム内の前記スナップショットファイルオブジェクトと共に共有されるブロック以外の少なくとも１つの分岐ブロックに関連付けられている場合、前記クローンオブジェクトと関連付けられた前記少なくとも１つの分岐ブロックが、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製される、
請求項１乃至８のうちのいずか１項に記載のコンピュータプログラム。
【請求項１０】
前記ソースファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号に基づき、前記クローンオブジェクトが、前記以前の複製周期において、前記ターゲットファイルシステムへ、通常のファイルシステムオブジェクトとして複製され、かつ、前記以前の複製周期以降に、クローンオブジェクトのプロパティを取得したか否かを判定する、
請求項９に記載のコンピュータプログラム。
【請求項１１】
クローンオブジェクトが、前記ターゲットファイルシステムへ以前に複製され、かつ、最後の複製周期以降に、前記ソースファイルシステム内の他のスナップショットファイルオブジェクトに関連付けられた場合、前記ソースファイルシステム内の前記他のスナップショットファイルオブジェクトと共に共有される前記ブロック以外の少なくとも１つの分岐ブロックを複製する、
請求項１乃至１０のうちのいずれか１項に記載のコンピュータプログラム。
【請求項１２】
前記クローンオブジェクトが、前記ターゲットファイルシステムへ以前に複製されたクローンオブジェクトであったが、以前の複製周期以降にデクローンされた、通常のファイルシステムオブジェクトである場合、前記ソースファイルシステムから、前記通常のファイルシステムオブジェクトに関連付けられたブロックを複製する処理を含む前記ターゲットファイルシステムへ、前記通常のファイルシステムオブジェクトを複製する、
請求項１乃至１１のうちのいずれか１項に記載のコンピュータプログラム。
【請求項１３】
前記ソースファイルシステムから前記ターゲットファイルシステムへ前記スナップショットファイルオブジェクトを複製する処理は、
前記スナップショットファイルオブジェクトの複製のために、第１作業項目をクローンキューに追加する処理と、
関連クローンオブジェクトの後続する複製のために、第２作業項目を未処理マップに追加する処理と、
前記第１作業項目を実行して、前記スナップショットファイルオブジェクトを複製する処理と、
前記スナップショットファイルオブジェクトの前記複製の完了に伴い、前記第２作業項目を、前記未処理マップから前記クローンキューへ移動させる処理と
を含み、
前記関連クローンオブジェクトを複製する処理は、
前記関連クローンオブジェクトの複製のための最初の作業項目を、チャンクキューに追加する処理と、
前記スナップショットファイルオブジェクトが旧オブジェクトである場合、前記関連クローンオブジェクトを前記ターゲットファイルシステムへ複製する処理を含む前記最初の作業項目を実行する一方、前記スナップショットファイルオブジェクトが新規オブジェクトである場合、前記関連クローンオブジェクトを前記ターゲットファイルシステムへ複製することなく前記最初の作業項目の実行を終了する処理と
を含む、
請求項１〜１２のうちのいずれか１項に記載のコンピュータプログラム。
【請求項１４】
ソースファイルシステムからターゲットファイルシステムへファイルシステムオブジェクトを複製する方法であって、
読出し専用のスナップショットファイルオブジェクトと共に関連ブロックを共有するクローンオブジェクトが、前記ソースファイルシステム内で生成された場合、
前記ソースファイルシステムから前記ターゲットファイルシステムへ前記スナップショットファイルオブジェクトを複製し、その複製されたスナップショットファイルオブジェクトと共に関連ブロックを共有するクローンオブジェクトを前記ターゲットファイルシステムに生成し、
前記ソースファイルシステム内のクローンオブジェクトが変更され、かつ、そのクローンオブジェクトが、前記ソースファイルシステム内の前記スナップショットファイルオブジェクトと共に共有されるブロック以外の少なくとも１つの分岐ブロックに関連付けられている場合、前記クローンオブジェクトと関連付けられた前記少なくとも１つの分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する、
方法。
【請求項１５】
ソースファイルシステムからターゲットファイルシステムへファイルシステムオブジェクトを複製するデータストレージシステムであって、
１以上のファイルサーバを有し、
読出し専用のスナップショットファイルオブジェクトと共に関連ブロックを共有するクローンオブジェクトが、前記ソースファイルシステム内で生成された場合、前記１以上のファイルサーバのうちの少なくとも１つが、
前記ソースファイルシステムから前記ターゲットファイルシステムへ前記スナップショットファイルオブジェクトを複製し、その複製されたスナップショットファイルオブジェクトと共に関連ブロックを共有するクローンオブジェクトを前記ターゲットファイルシステムに生成し、
前記ソースファイルシステム内でクローンオブジェクトが変更され、かつ、そのクローンオブジェクトが、前記ソースファイルシステム内の前記スナップショットファイルオブジェクトと共に共有される前記ブロック以外の少なくとも１つの分岐ブロックに関連付けられている場合、前記クローンオブジェクトと関連付けられた前記少なくとも１つの分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する、
データストレージシステム。
【国際調査報告】
2016512633.tif 000018