JP2016512633A - データストレージシステムにおけるクローンオブジェクトのオブジェクトレベルでの複製 - Google Patents

データストレージシステムにおけるクローンオブジェクトのオブジェクトレベルでの複製 Download PDF

Info

Publication number
JP2016512633A
JP2016512633A JP2015559218A JP2015559218A JP2016512633A JP 2016512633 A JP2016512633 A JP 2016512633A JP 2015559218 A JP2015559218 A JP 2015559218A JP 2015559218 A JP2015559218 A JP 2015559218A JP 2016512633 A JP2016512633 A JP 2016512633A
Authority
JP
Japan
Prior art keywords
clone
file system
target
source
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2015559218A
Other languages
English (en)
Other versions
JP6109967B2 (ja
Inventor
タバーロット,ザーラ
ギブス,ジェームズ
ピッケン,ダニエル
テー,ジョナサン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Data Systems Engineering UK Ltd
Original Assignee
Hitachi Data Systems Engineering UK Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Data Systems Engineering UK Ltd filed Critical Hitachi Data Systems Engineering UK Ltd
Publication of JP2016512633A publication Critical patent/JP2016512633A/ja
Application granted granted Critical
Publication of JP6109967B2 publication Critical patent/JP6109967B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/128Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/289Object oriented databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/184Distributed file systems implemented as replicated file system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2094Redundant storage or storage space

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

データストレージシステムにおけるソースファイルシステムからターゲットファイルシステムへのクローンオブジェクトのオブジェクトレベルでの複製は、上記ターゲットファイルシステムにおけるストレージ要求が、上記ソースファイルシステムのストレージ要求と一致する様に、共有されたデータブロックを含む関連オブジェクト間の関係を維持する。特定の処理は、複製を要求するオブジェクトが、チェックポイント番号に基づいて増分ベースで特定可能な様に、他のファイルシステムオブジェクトを参照する間接オブジェクトをスキャンするために実行することができる。上記ターゲットファイルシステム内のチェックポイントは、複製されたクローンオブジェクトに対するチェックポイント番号の要件が、上記ターゲットファイルシステムにおいて満たされる様に、管理される。

Description

本発明は、概して、データストレージシステムにおけるファイル複製に関し、より具体的には、データストレージシステムにおいてクローンオブジェクトをオブジェクトベースで複製する技術に関する。
発明の背景
データストレージシステムでは、ソースファイルシステムの幾つかまたは全てのオブジェクトが、例えば、アーカイブ、バックアップ、メンテナンス、または障害復旧等のために、他のファイルシステム(以下、「ターゲットファイルシステム」と呼ぶ)に複製されることがある。ミラーリングと異なり、2つの異なる位置にデータが格納される複製は、一般的に、ターゲットファイルシステム内のソースオブジェクトのコピーの生成を含む。ターゲットオブジェクトは、ソースオブジェクトが格納される方法とは大きく異なる方法で、格納されることがある。例えば、ソースオブジェクトは、非近接ブロックに格納されることがあるが、ターゲットオブジェクトは、近接ブロックに格納される。なぜなら、ソースオブジェクトのブロックが、長時間に渡って割り当てられた結果、ストレージの異なる領域に割り当てられるのに対し、ターゲットオブジェクトでは、全てのブロックが1度に割り当てられることがあるからである。
一般的には、ファイルシステムにおける複製は、ファイルレベルまたはオブジェクト(サブファイル)レベルで実行可能である。ファイルレベル及びオブジェクトレベルでの複製は、日立データシステムから入手可能な日立NASプラットフォームソフトウェア:BlueArc(登録商標) JetMirrorデータシートにおいて、一般的に論じられている。
クローンファイルは、オブジェクトベースでの複製中、他の通常のファイルと同様に扱われることが多いため、ターゲットファイルシステム上では、ディープコピーとして複製される。その様なクローンファイルのディープコピーは、スナップショットファイルとの間で如何なるデータブロックをも共有しないクローンファイルを生成することとなる。このため、ターゲットファイルシステム上でのストレージコストが増大する。
例示の実施形態の概要
本発明の第1実施形態では、データストレージシステムにおいて、ソースファイルシステムからターゲットファイルシステムにクローンオブジェクトを複製する方法が提供される。上記方法は、上記クローンオブジェクトがソースファイルシステム内で変更されたオブジェクトである場合、ソースファイルシステムからターゲットファイルシステムにクローンオブジェクトを複製することを含む。該複製は、上記クローンオブジェクトが新規に生成されたクローンオブジェクトである場合、ターゲットファイルシステム内のクローンオブジェクトを生成することを含む。該生成は、(a)ソースファイルシステムからのメタデータ、及び(b)ソースファイルシステムからターゲットファイルシステムに予め複製されたクローンオブジェクトに関連付けられた、親スナップショットのファイルオブジェクトに基づいて、行われる。ターゲットファイルシステム内での上記クローンオブジェクトの生成では、ターゲットファイルシステム内のクローンオブジェクトのクローンチェックポイント番号として、親スナップショットのファイルオブジェクトのブロックのチェックポイント番号よりも大きい値が確保される。上記複製は、ソースファイルシステム内のクローンオブジェクトに関連付けられた分岐ブロックが有る場合、上記クローンオブジェクトに関連付けられた分岐ブロックを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製することを含む。
クローンオブジェクトが、最初に、親スナップショットのファイルオブジェクトとの間で全てのブロックを共有する様に、上記ターゲットファイルシステム内でクローンオブジェクトを生成する処理は、上記ターゲットファイルシステムにおける親スナップショットのファイルオブジェクトのクローンとして、クローンオブジェクトを生成することを含むものとしてもよい。
ターゲットファイルシステム内のクローンオブジェクトのクローンチェックポイント番号として、親スナップショットのファイルオブジェクトのブロックのチェックポイント番号よりも大きい値を確保する処理は、上記ターゲットファイルシステム内のチェックポイントを発行して、該ターゲットファイルシステムの現在のチェックポイント番号を前進させること、及び、上記クローンオブジェクトのクローンチェックポイント番号を、上記前進されたチェックポイント番号に設定することを含むものとしてもよい。例えば、上記ターゲットファイルシステム内の親スナップショットのファイルオブジェクトの最後に変更されたチェックポイント番号が、上記クローンオブジェクトが生成されたターゲットファイルシステムの現在のチェックポイント番号と等しい場合に、チェックポイントが発行されるものとしてもよい。
上記クローンオブジェクトに関連付けられた分岐ブロックの複製処理は、ソースファイルシステム内のクローンオブジェクトのクローニング以後に変更された、上記ソースファイルシステム内のクローンオブジェクトのブロックを検出することを含むものとしてもよい。ここで、上記検出処理は、幾つかのブロックの各々に関連付けられたチェックポイント番号を、上記ソースファイルシステム内のクローンオブジェクトのクローンチェックポイント番号と比較することを含む。また、上記複製処理は、上記クローンチェックポイント番号以上のチェックポイント番号を有するブロックを、上記ソースファイルシステムから上記ターゲットファイルシステムへ送信することを含むものとしてもよい。また、上記複製処理は、上記ソースファイルシステムから受信されたブロックに基づき、上記ターゲットファイルシステム内のクローンオブジェクトを更新することを含むものとしてもよい。
上記ソースファイルシステムから上記ターゲットファイルシステムへのクローンオブジェクトの複製処理は、クローンオブジェクトが、予めの複製以後にクローンのプロパティを取得したターゲットファイルシステムに予め複製されたオブジェクトであり、かつ、上記親スナップショットのファイルオブジェクトが、新規のオブジェクトでない場合に、上記ソースファイルシステムから上記ターゲットファイルシステムにメタデータを送信することを更に含むものとしてもよい。上記複製処理は、(クローンが最初に生成される時に、親のルートノードに基づいてクローンのルートノードを形成した結果として、)上記ソースファイルシステムからのメタデータと、上記ターゲットファイルシステム上の予め複製されたスナップショットファイルオブジェクトとに基づき、親スナップショットのファイルオブジェクトとの間で全てのブロックを最初に共有するクローンとして、上記ターゲットファイルシステム内のクローンオブジェクトを再生成することを更に含むものとしてもよい。また、上記複製処理は、上記ソースファイルシステム内のクローンオブジェクトに関連付けられた分岐ブロックが有る場合、該クローンオブジェクトに関連付けられた分岐ブロックを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製することを更に含むものとしてもよい。上記クローンオブジェクトが、予めの複製以後にクローンのプロパティを取得したターゲットファイルシステムに予め複製されたオブジェクトであるか否かを決定する処理は、上記ソースファイルシステム内のクローンオブジェクトのクローンチェックポイント番号に基づいて実行されるものとしてもよい。
上記ソースファイルシステムから上記ターゲットファイルシステムへクローンオブジェクトを複製する処理は、該クローンオブジェクトが、上記ソースファイルシステム内の新しい親スナップショットのファイルオブジェクトを有するターゲットファイルシステムに予め複製されたクローンオブジェクトである場合に、上記新しい親スナップショットのファイルオブジェクトに関連する、上記ソースファイルシステム内のクローンオブジェクトの分岐ブロックを複製することを更に含むものとしてもよい。
上記ソースファイルシステムから上記ターゲットファイルシステムへクローンオブジェクトを複製する処理は、該クローンオブジェクトが、上記ターゲットファイルシステムに予め複製されたクローンオブジェクトであった通常のファイルオブジェクトであり、かつ、上記予めの複製以後にデクローンされている場合に、上記通常のファイルオブジェクトの全てのユーザ/メタデータのブロックを複製することにより、上記通常のファイルオブジェクトを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製することを更に含むものとしてもよい。
上記方法は、上記クローンオブジェクトの複製に先立ち、親スナップショットのファイルオブジェクトを、ソースファイルシステムからターゲットファイルシステムに複製することを更に含むものとしてもよい。
上記クローンオブジェクトの複製処理は、上記クローンオブジェクトのチャンクキューへの複製のために最初の作業項目を追加することを含むものとしてもよい。また、上記クローンオブジェクトの複製処理は、親スナップショットのファイルオブジェクトが旧オブジェクトである場合に上記クローンオブジェクトを上記ターゲットファイルシステムに複製すること、及び、親スナップショットのファイルオブジェクトが新しいオブジェクトである場合に上記クローンオブジェクトを上記ターゲットファイルシステムに複製することなく最初の作業項目の実行を終了させることを含む最初の作業項目を、実行することを含むものとしてもよい。
上記親スナップショットのファイルオブジェクトの複製処理は、親スナップショットのファイルオブジェクトの複製のために第1作業項目をクローンキューに追加すること、及び、上記クローンオブジェクトの次の複製のために第2作業項目を未処理マップに追加することを含むものとしてもよい。また、上記複製処理は、上記第1作業項目を実行して親スナップショットのファイルオブジェクトを複製すること、及び、親スナップショットのファイルオブジェクトのその様な複製の完了に伴って、上記第2作業項目を、上記未処理マップから上記クローンキューに移動させることを含むものとしてもよい。上記最初の作業項目は、「生成」作業項目であってもよい。上記第1作業項目は、「SPAWN」作業項目または「ACTIVE」作業項目であってもよい。上記第2作業項目は、「SPAWN」作業項目または「ACTIVE」作業項目であってもよい。
本発明の第2実施形態では、クローンオブジェクトをソースファイルシステムからターゲットファイルシステムへ複製するためのデータストレージシステムが提供される。該データストレージシステムは、ソースファイルシステム及びソースストレージプロセッサを有するソース、及び、ターゲットファイルシステム及びターゲットストレージプロセッサを有するターゲットを有する。上記ソースストレージプロセッサは、上記クローンオブジェクトが上記ソースファイルシステムにおいて変更されたオブジェクトである場合に、上記クローンオブジェクトをソースファイルシステムからターゲットファイルシステムに複製する様に構成される。該複製は、上記クローンオブジェクトが新規に生成されたクローンオブジェクトである場合に、上記クローンオブジェクト及びその親スナップショットのファイルオブジェクトのために必要なメタデータを、上記ターゲットストレージプロセッサへ送信することも含む。上記ターゲットストレージプロセッサは、(a)上記ソースストレージプロセッサからのメタデータ、及び(b)ソースファイルシステムからターゲットファイルシステムへ予め複製されたクローンオブジェクトに関連付けられた、親スナップショットのファイルオブジェクトに基づき、ターゲットファイルシステム内でクローンオブジェクトを生成する様に構成される。また、上記ターゲットストレージプロセッサは、上記ターゲットファイルシステム内のクローンオブジェクトのクローンチェックポイント番号として、上記親スナップショットのファイルオブジェクトのブロックのチェックポイント番号よりも大きい値を確保する。更に、上記ソースストレージプロセッサ及び上記ターゲットストレージプロセッサは、上記ソースファイルシステム内のクローンオブジェクトに関連付けられた分岐ブロックが有る場合に、上記クローンオブジェクトに関連付けられた分岐ブロックを、上記ソースファイルシステムから上記ターゲットファイルシステムへ複製する様に構成される。
上記ターゲットストレージプロセッサは、クローンオブジェクトが、親スナップショットのファイルオブジェクトとの間で全てのブロックを最初に共有する様に、上記ターゲットファイルシステム内の親スナップショットのファイルオブジェクトのクローンとして、上記クローンオブジェクトを生成する様に構成されるものとしてもよい。
上記ターゲットストレージプロセッサは、上記ターゲットファイルシステム内のチェックポイントを発行して、該ターゲットファイルシステムの現在のチェックポイント番号を前進させると共に、上記クローンオブジェクトのクローンチェックポイント番号を、上記前進されたチェックポイント番号に設定し、これにより、上記ターゲットファイルシステム内のクローンオブジェクトのクローンチェックポイント番号として、上記親スナップショットのファイルオブジェクトのブロックのチェックポイント番号よりも大きい値を確保する様に構成されるものとしてもよい。例えば、上記ターゲットファイルシステム内の親スナップショットのファイルオブジェクトの最後に変更されたチェックポイント番号が、上記クローンオブジェクトが生成されたターゲットファイルシステムの現在のチェックポイント番号と等しい場合に、チェックポイントが発行されるものとしてもよい。
上記クローンオブジェクトに関連付けられた分岐ブロックの複製処理は、上記ソースストレージプロセッサにより、ソースファイルシステム内のクローンオブジェクトのクローニング以後に変更された、上記ソースファイルシステム内のクローンオブジェクトのブロックを検出することを含むものとしてもよい。ここで、上記検出処理は、幾つかのブロックの各々に関連付けられたチェックポイント番号を、上記ソースファイルシステム内のクローンオブジェクトのクローンチェックポイント番号と比較することを含む。また、上記複製処理は、上記ソースストレージプロセッサにより、上記クローンチェックポイント番号以上のチェックポイント番号を有するブロックを、上記ターゲットストレージプロセッサへ送信することを含むものとしてもよい。また、上記複製処理は、上記ターゲットストレージプロセッサにより、上記ソースストレージプロセッサから受信されたブロックに基づき、上記ターゲットファイルシステム内のクローンオブジェクトを更新することを含むものとしてもよい。
上記ソースストレージプロセッサは、更に、上記クローンオブジェクトが、予めの複製以後にクローンのプロパティを取得したターゲットファイルシステムに予め複製されたオブジェクトであるか否かを決定すると共に、上記クローンオブジェクトが、予めの複製以後にクローンのプロパティを取得したターゲットファイルシステムに予め複製されたオブジェクトであり、かつ、上記親スナップショットのファイルオブジェクトが、新規のオブジェクトでない場合に、上記クローンオブジェクト及びその親スナップショットのファイルオブジェクトのために必要なメタデータを、上記ターゲットストレージプロセッサへ送信する様に構成されるものとしてもよい。上記ターゲットストレージプロセッサは、更に、上記ソースファイルシステムからのメタデータと、上記ターゲットファイルシステム上の予め複製された、親スナップショットのファイルオブジェクトとに基づき、親スナップショットのファイルオブジェクトとの間で全てのブロックを最初に共有するクローンとして、上記ターゲットファイルシステム内のクローンオブジェクトを再生成する様に構成されるものとしてもよい。上記ソースストレージプロセッサ及び上記ターゲットストレージプロセッサは、更に、上記ソースファイルシステム内のクローンオブジェクトに関連付けられた分岐ブロックが有る場合に、該クローンオブジェクトに関連付けられた分岐ブロックを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製する様に構成されるものとしてもよい。上記ソースストレージプロセッサは、上記ソースファイルシステム内のクローンオブジェクトのクローンチェックポイント番号に基づいて、上記クローンオブジェクトが、予めの複製以後にクローンのプロパティを取得したターゲットファイルシステムに予め複製されたオブジェクトであるか否かを決定する様に構成されるものとしてもよい。
上記ソースストレージプロセッサは、更に、上記クローンオブジェクトが、上記ソースファイルシステム内に新しい親スナップショットのファイルオブジェクトを有するターゲットファイルシステムに予め複製されたクローンオブジェクトであるか否かを決定すると共に、上記クローンオブジェクトが、上記ソースファイルシステム内に新しい親スナップショットのファイルオブジェクトを有するターゲットファイルシステムに予め複製されたクローンオブジェクトである場合に、上記新しい親スナップショットのファイルオブジェクトに関連するソースファイルシステム内のクローンオブジェクトの分岐ブロックを複製するためのターゲットストレージプロセッサに対し、ユーザ/メタデータを送信する様に構成されるものとしてもよい。上記ターゲットストレージプロセッサは、更に、上記ユーザ/メタデータに基づき、上記ターゲットファイルシステム内のクローンオブジェクトの分岐ブロックを複製する様に構成されるものとしてもよい。
上記ソースストレージプロセッサは、更に、上記クローンオブジェクトが、上記ターゲットファイルシステムに予め複製されたクローンオブジェクトであった通常のファイルオブジェクトであり、かつ、上記予めの複製以後にデクローンされているか否かを判定し、上記クローンオブジェクトがその様な通常のファイルオブジェクトである場合に、上記通常のファイルオブジェクトを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製するための上記ターゲットストレージプロセッサに対し、上記通常のファイルオブジェクトの全てのユーザ/メタデータを送信する様に構成されるものとしてもよい。上記ターゲットストレージプロセッサは、更に、上記ソースファイルシステムからの上記ユーザ/メタデータに基づき、上記通常のファイルオブジェクトの全てのユーザ/メタデータのブロックを複製することにより、上記通常のファイルオブジェクトを複製する様に構成されるものとしてもよい。
上記ソースストレージプロセッサは、更に、上記クローンオブジェクトの複製に先立ち、上記親スナップショットのファイルオブジェクトを、上記ソースファイルシステムから上記ターゲットファイルシステムに複製させる様に構成されるものとしてもよい。これに関連し、上記クローンオブジェクトの複製処理は、上記クローンオブジェクトのチャンクキューへの複製のために最初の作業項目を追加することを含むものとしてもよい。また、上記クローンオブジェクトの複製処理は、上記親スナップショットのファイルオブジェクトが旧オブジェクトである場合に上記クローンオブジェクトを上記ターゲットファイルシステムに複製すること、及び、上記親スナップショットのファイルオブジェクトが新しいオブジェクトである場合に上記クローンオブジェクトを上記ターゲットファイルシステムに複製することなく最初の作業項目の実行を終了させることを含む最初の作業項目を、実行することを含むものとしてもよい。上記親スナップショットのファイルオブジェクトの複製処理は、上記親スナップショットのファイルオブジェクトの複製のために第1作業項目をクローンキューに追加すること、及び、上記クローンオブジェクトの次の複製のために第2作業項目を未処理マップに追加することを含むものとしてもよい。また、上記複製処理は、上記第1作業項目を実行して上記親スナップショットのファイルオブジェクトを複製すること、及び、上記親スナップショットのファイルオブジェクトのその様な複製の完了に伴って、上記第2作業項目を、上記未処理マップから上記クローンキューに移動させることを含むものとしてもよい。上記最初の作業項目は、「生成」作業項目であってもよい。上記第1作業項目は、「SPAWN」作業項目または「ACTIVE」作業項目であってもよい。上記第2作業項目は、「SPAWN」作業項目または「ACTIVE」作業項目であってもよい。
また、これらの実施形態は、ソースストレージプロセッサ及びソースファイルシステムを有するソースを含み、上記ソースストレージプロセッサは、特許請求の範囲または本明細書内に記載されている様々なソースオペレーションの何れかを実行する様に構成されるものとしてもよい。
また、これらの実施形態は、ターゲットストレージプロセッサ及びターゲットファイルシステムを有するターゲットを含み、上記ターゲットストレージプロセッサは、特許請求の範囲またはその本明細書内に記載されている様々なターゲットオペレーションの何れかを実行する様に構成されるものとしてもよい。
また、これらの実施形態は、特許請求の範囲または本明細書内に記載されている様々なソースオペレーションまたはターゲットオペレーションの何れかを実行する様に構成された1以上のコンピュータプログラムを含むものとしてもよい。コンピュータプログラムは、例えば、有形かつ非一時的なコンピュータ読み取り可能な媒体の様な、コンピュータ読み取り可能な媒体に記録されるものとしてもよい。
更なる実施形態が追加されて開示及びクレームされるものとしてもよい。
本実施形態の上述した特徴は、添付の図面を参照しながら以下の詳細な説明を参照することにより、より容易に理解されるであろう。
図1は、本発明の例示的な一実施形態に係るファイルストレージシステムの概略ブロック図である。 図2は、本発明の例示的な一実施形態に係る一般的な形式のファイルシステムインスタンス化を示す概略ブロック図である。 図3は、本発明の例示的な一実施形態に係る一般的な形式のオブジェクトツリー構造を示す概略ブロック図である。 図4は、本発明の例示的な一実施形態に係る、ソースオブジェクト(ファイルA)、隠しデータストリームスナップショットオブジェクト及び可変クローン間の関係を概略的に示す図である。 図5は、例示的な一実施形態に係る、チャンクキュー用の作業項目を生成する際のロジックフローチャートである。 図6は、例示的な一実施形態に係る、ソースファイルシステム内のスナップショットファイルツリーの生成順序と比較した場合の、ターゲットファイルシステム内のスナップショットファイルツリーの生成順序を示す概略図である。 図7は、例示的な一実施形態に係る、図6のSFによりルートされたスナップショットファイルツリーをターゲットファイルシステムに複製する処理を概略的に示すロジックフローチャートである。 図8は、例示的な一実施形態に係る、ターゲットによる新規クローンオブジェクトの生成処理を概略的に示すロジックフローチャートである。 図9は、本発明の例示的な一実施形態に係るファイルサーバの関連構成要素を示す概略ブロック図である。 図10は、例示的なスナップショットファイルツリーを表す図である; 図11は、例示的な一実施形態に係る、ストレージプロセッサにより維持されるソースワークキュー及びファイバのタイプを表す概略図である。 図12は、例示的な一実施形態に係る「生成」作業項目を説明するための状態図である。 図13は、例示的な一実施形態に係る「SPAWN」作業項目を説明するための状態図である。 図14は、例示的な一実施形態に係る「ACTIVE」作業項目を説明するための状態図である。 図15は、例示的な一実施形態に係る「変更」作業項目を説明するための状態図である。
描かれた上述の図面及び構成要素は、必ずしも一貫した縮尺または任意の縮尺通りのものではないことに留意されたい。特に記載のない限り、同一の構成要素には同一の参照番号が付されている。
特定の実施形態の詳細な説明
この記載及び添付のクレームにおいて使用される様に、以下の用語は、その文脈がそれ以外の意味を要求しない限り、以下に示す意味をもつものとする。「記憶デバイス」とは、データを記憶するのに使用されるデバイスまたはシステムである。記憶デバイスは、1以上の磁気または磁気−光または光ディスクドライブ、ソリッドステート記憶デバイスまたは磁気テープを含むことができる。簡便にするために、記憶デバイスが、「ディスク」または「ハードディスク」と呼ばれる場合もある。データストレージシステムは、同一または異なる記憶容量を有する、同一または異なるタイプの記憶デバイスを含むことができる。
「RAID制御装置」は、複数の記憶デバイスの記憶容量を記憶スペースの仮想部分に合体させるデバイスまたはシステムであるが、代替的に、「システムドライブ」(「SD」)、「論理ユニット」(「LU」または「LUN」)または「ボリューム」と呼ばれる場合もある。典型的には、SDは、単一の記憶デバイスよりも大きく、複数の記憶デバイスからスペースを引き出し、冗長情報を含むことで、データを損失せずに、特定の数のディスクの破損に耐えることができる。例示の実施形態において、各々のSDは、独自の識別子に対応付けられており(以下、この識別子を、「論理ユニット識別子」または「LUID」と呼ぶ)、各々のSDはもはや、例えば2TB〜64TBまたはそれ以上の所定の最大サイズよりも大きくならない。特定のSDにコマンドが送られると、RAID制御装置は典型的には、このコマンドを同時にこのSDの全ての記憶デバイスに転送する。RAID制御装置は、典型的な記憶デバイスの3つの主な制約、すなわち、記憶デバイスは典型的にはストレージシステムの最も遅い構成要素であること、それらが典型的には重大な障害を受ける可能性が最も高いこと、及びそれらが典型的には相対的に小さな記憶容量を有すること、といった制約を克服する助けをする。
「RAIDシステム」は、1以上のRAID制御装置と幾つかの記憶デバイスとを含むデバイスまたはシステムである。典型的には、RAIDシステムは、2つのRAID制御装置と(これにより一方は、他方が故障した場合に作動することが可能であり、また両方が正常なときは負荷を共有することができる)、数ダースの記憶デバイスとを含む。例示の実施形態において、RAIDシステムは典型的には、2個から32個のSDによって構成される。ファイルサーバが、データの記憶または取り出しを必要とする際、RAIDシステムのRAID制御装置にコマンドを送り、RAID制御装置が、個々の記憶デバイスに向けてコマンドをルーティングし、必要に応じて、データを記憶したり取り出したりする作業を担っている。一部のRAIDシステムの場合、SD間にミラー関係を確立することができるため、1つのSD(「一次SD」と呼ばれる)に書き込まれたデータは、重複させる目的で、RAIDシステムによって自動的に、別のSD(「本明細書では二次SD」または「ミラーSD」と呼ばれる)に書き込まれる。二次SDは、同一のRAIDシステムによって一次SDとして、あるいは、異なるローカルまたはリモートRAIDシステムによって管理される。SDをミラーすることにより、SDの全体にわたってRAID1+0機能を効果的に与えることで、1つのSD、あるいは、一部の状況では場合によって更に複数のSDの損失や破損を回復させることができる。
「ファイルシステム」は、ファイルストレージシステム内に記憶された特定の構造のファイル及びディレクトリ(フォルダ)である。ファイルストレージシステムにおいて、ファイルシステムは典型的には、幾つかの仮想記憶構造を使用して管理されており、例示の実施形態では、フィイルシステムは、レンジ、ストライプセット及びスパンと呼ばれる仮想記憶構造のヒエラエルキーを使用して管理されている。「レンジ」は、一次SDそのもの、または一次/二次SDの組の何れかから構成されており、この組は、同一のデータを含むため、単独のSDと同じ記憶容量を提供することが想定される。「ストライプセット」は、1以上のレンジにより構成される。「スパン」は、1以上のストライプセットにより構成される。よって、スパンは最終的には、1以上のSD(典型的には4から50のSD)により構成される。スパンは、1以上のファイルシステムに分割することができ、各々のファイルシステムは、別々の名前と、識別子、及び場合によっては異なる特徴(例えば、あるファイルシステムは32KBのブロックよって初期化され、別のファイルシステムは4KBのブロックによって初期化される、あるファイルシステムは、ワームであり、別のファイルシステムはそうでない場合等)を有する。スパン上の各々のファイルシステムは、別々に初期化され、マウントされ、アンマウントされる。ファイルシステムは、任意の順番で任意の時間に生成及び削除されるものとしてもよい。ファイルシステムは、典型的に、自動的に拡張する(代替的に、自動拡張を阻止または制限する)、あるいは、手動により拡張可能な様に構成することができる。
「ブロック」は、ユーザデータ及び/またはシステムデータが格納される物理ストレージの部分に対応する、ファイルシステム内のストレージの一単位である。(後述する)ファイルシステムオブジェクトは、一般的に、1以上のブロックを有する。「スナップショットファイル」または「SF」は、米国特許出願公開第2012/0130949号明細書(代理人整理番号2337/130)に記載されたオブジェクトクローニングプロセスの一部として生成されるファイルシステムオブジェクトである。ここで、上記米国特許出願公開第2012/0130949号明細書の全ての内容は、参照により本明細書に組み込まれており、本発明の特定の実施形態において使用される。スナップショットファイルは、共有されたユーザ/メタデータのブロックを所有すると共に、これらのユーザ/メタデータのブロックを共有するクローンにより参照されるクローニングプロセスの実行中に生成される、データストリームスナップショットオブジェクトである。
スナップショットファイルの「後継」または「子」は、通常のファイルクローン(「ライブファイル」とも呼ばれる)か、これを参照するスナップショットファイルかの何れかである。
クローンまたはスナップショットファイルの「親」は、クローンまたはスナップショットファイルが参照するスナップショットファイルである。
「ルートスナップショットファイル」は、親をもたないスナップショットファイルである。
「新スナップショット」は、ターゲットに複製されている、ソース上で用いられるスナップショットである。
「前スナップショット」は、ターゲットファイルシステムに複製された最新のスナップショットである。
「新規オブジェクト」は、前スナップショットのチェックポイント番号よりも大きい生成チェックポイント番号を有するオブジェクトである。
「旧オブジェクト」は、前スナップショットのチェックポイント番号以下の生成チェックポイント番号を有するオブジェクトである。
「変更オブジェクト」は、前スナップショットのチェックポイント番号よりも大きい、最後に変更されたチェックポイント番号(オブジェクトが生成または変更された最後のチェックポイントを表すチェックポイント番号)を有するオブジェクトである。
「削除オブジェクト」は、前スナップショットには存在していたが新スナップショットでは削除されたオブジェクトである。
本明細書の文脈では、「クローン」という用語は、親スナップショットのファイルを参照する通常タイプのファイルまたはスナップショットファイルのオブジェクトを指すものとする。
所与の複製サイクルに関し、「クローンオブジェクト」は、前複製サイクルのクローンオブジェクトとして存在したオブジェクト(但し、前複製サイクルの以後に、変更、削除、デクローン、または、新しい親スナップショットのファイルオブジェクトの獲得があってもよい)、あるいは、前複製サイクルの以後にクローンオブジェクトになったオブジェクト(例えば、新規に生成されたクローンオブジェクト、または、以前に複製され、クローンのプロパティを獲得したオブジェクト)である。
「セット」の値は、1以上の値を含むものとしてもよい。
以下の説明では、便宜上、見出しを使用するが、見出しは、何れにしても、本発明を限定するものとして解釈されない。
1.例示的なファイルストレージシステム
以下では、日立データシステムズ社が販売する様々なファイルサーバにおいて使用されるタイプの例示的なファイルシステムを参照しながら、本発明の例示としての実施形態について、説明する。
上記システムは、Blue Arc TitanTMやMercuryTMのファイルサーバとして、一般的に知られているが、本発明の様々な概念は、他の種類のファイルシステムに対しても適用可能である。
図1は、本発明の例示的な一実施形態に係るファイルストレージシステムの概略ブロック図である。とりわけ、ファイルストレージシステムは、通信ネットワーク104を介してターゲットファイルサーバ106(以下、簡単のため、「ターゲット」と呼ぶことがある)と通信するソースファイルサーバ102(以下、簡単のため、「ソース」と呼ぶことがある)を有する。ソースサーバ102はソースファイルシステム103を管理する一方、ターゲットサーバ106はターゲットファイルシステム107を管理する。各サーバは、典型的には、インターネットプロトコルネットワーク(例えば、インターネット)の様な通信ネットワークを介して様々なクライアント装置と通信を行うと共に、ファイバチャネルネットワークの様なストレージネットワークを介して様々なRAIDシステムとも通信を行う。上記クライアント装置及び上記ファイルサーバは、例えば、CIFS及び/またはNFSの様な1以上のネットワークファイルプロトコルを用いて通信を行う。上記ファイルサーバ及び上記RAIDシステムは、例えば、SCSIの様なストレージプロトコルを用いて通信を行う。
各ファイルサーバは、各ファイルシステムを管理するためのストレージプロセッサを含む。ファイルサーバは、クライアントが、ファイルシステムの一部、例えば指定された名の下にツリーまたはサブツリーにアクセスすることができる様に、構成することができる。CIFS用語では、この様なアクセスは、「シェア」と呼ばれることがあり、NFS用語では、この様なアクセスは、「エクスポート」と呼ばれることがある。内部では、各ファイルサーバは、例えば、米国特許第6826615号明細書(代理人整理番号2337/103)及び米国特許第8180897号明細書(代理人整理番号2337/108)に記載される様に(これらの明細書の全ての内容は、参照により本明細書に組み込まれている)、様々なハードウェアが実装された及び/またはハードウェアアクセレートされたサブシステムを含むことができ、例えば、米国特許第7457822号明細書(代理人整理番号2337/104)及び米国特許第8224877号明細書(代理人整理番号2337/117)に記載される様に(これらの明細書の全ての内容は、参照により本明細書に組み込まれている)、複数の接続されたサブモジュールを含むハードウェアベースのファイルシステムを含む場合もある。
各々のRAIDシステムは、典型的には、少なくとも1つのRAID制御装置(通常は重複させるために2つのRAID制御装置)、及び、該RAID制御装置によって管理される幾つかの物理的記憶デバイス(例えばディスク)を含む。RAIDシステムは、その記憶リソースを幾つかのSDに集約する。例えば、各々のRAIDシステムは、2個〜32個のSDによって構成されるものとしてもよい。各々のSDは、所定の最大サイズ(例えば、2TB〜64TBまたはそれ以上)に制限されるものとしてもよい。複数の記憶デバイスを1つのSDに合体させることにより、幾つかの利点が得られる。これらの利点には、速度の上昇(個々の記憶デバイスは比較的速度が遅いが、データを複数の記憶デバイスに渡ってストライプすることで、ボトルネックを広げることができる)、容量の増加(個々の記憶デバイスは比較的小さいが、複数の記憶デバイスを組み合わせることで、より広い利用可能スペースを提供することができる)、抽象化(利用されるスペースの大きさは、単独の記憶デバイスのサイズよりも大きいか、あるいはそれより小さいかの何れかであり得る)、及び復元力(パリティまたは冗長情報を、各々の記憶デバイスに記憶することができるため、SDは、記憶デバイスの損失にも耐えることができる)が含まれる。
各ファイルサーバは、各RAIDシステムから、1以上のSDを使用する様に構成されている。ファイルサーバは通常、RAIDシステムに問い合わせをすることで、各々のSDが一次または二次の何れであるかを検知することができる。何れのSDが上記ファイルサーバによって使用されるかを制御する方法は、本明細書では「ライセンシング」と呼ばれることがある。従って、実際には、ファイルサーバ102は典型的には、一部のSDのために認可され、他のSDのためには認可されないことになる。
内部では、各ファイルサーバは、複数のSDを、本明細書では「スパン」と呼ばれるより大きな記憶プールに組み込むことが可能である。スパンは基本的に、RAID0配列の複数のSDである。複数のSDを1つのスパンに組み込むことで、複数の物理的ディスクを1つのSDに組み込むことによって得られる利点と同様の幾つかの利点を得ることができる。この利点には、速度の上昇(複数のRAIDシステム上の複数のSD間のI/Oを広げることで、ストレージのボトルネックを更に広げることができる)、記憶容量の増加(スパンは、2テラバイトに制限され得る単独のSDよりも大きくなる可能性がある)、及び付加的な復元力(これにより、より柔軟性の高い記憶スペースの割り当てが可能になる)が含まれる。
各ファイルサーバは、上記ファイルシステム内に様々な種類のオブジェクトを記憶する。オブジェクトは、一般的に、システムオブジェクト及びファイルオブジェクトとして分類することができる。ファイルオブジェクトは、ユーザデータ及び関連する属性、例えばワードプロセッサまたはスプレッドシートファイル等を記憶するために生成される。システムオブジェクトは、ファイルストレージシステムによって情報を管理するために形成され、ルートディレクトリオブジェクト、フリースペース割り当てオブジェクト、変更後のチェックポイントオブジェクトリストオブジェクト、変更後に保持されるオブジェクトリストオブジェクト及びソフトウェアメタデータオブジェクト等を含むが、ここに挙げたのはほんの数例である。より具体的には、ディレクトリオブジェクトは、ディレクトリ情報を記憶するために生成される。フリースペース割り当てオブジェクトは、フリースペース割り当て情報を記憶するために生成される。変更後のチェックポイントオブジェクトリストオブジェクト及び変更後に保持されるオブジェクトリストオブジェクトは(これらは何れも、以下において更に詳述される)、チェックポイント及び保持されるチェックポイントのそれぞれに関連する情報を記憶するために生成される。ソフトウェアメタデータオブジェクト(これは、以下において更に詳述される)は、ファイルまたはディレクトリオブジェクトに関連する過剰なファイル属性(すなわち、以下に記載する様な、ファイルまたはディレクトリオブジェクト内で事前に指定された領域に適合不能なファイル属性、例えば、CIFSセキュリティ属性)を保持するための特殊なオブジェクトであり、ファイルまたはディレクトリオブジェクトの生成者によって生成される。該生成は、ファイルまたはディレクトリオブジェクト内でのソフトウェアメタデータオブジェクトの参照を含む。
ある実施形態では、上記ファイルシステムのインスタンス化は、ルートノード(動的スーパーブロックまたはDSBと呼ばれる)を有するツリー構造を使用して管理される。各ファイルサーバは、複数のDSBを保持することで、種々のチェックポイントを表す種々の型(例えば、現在「作業中の」型及び1以上の「チェックポイント」型)のファイルシステムを記憶することができる。1つの例示的な実施形態では、上記DSBは、間接オブジェクトに対するポインタを含んでおり、この間接オブジェクトは、他のオブジェクトに対するポインタを含んでいる。該間接オブジェクトにより参照される各オブジェクトは、オブジェクト番号に関連付けられている。典型的には、システムオブジェクトは、通常は常にシステム内に存在するため、所定のオブジェクト番号を固定的に有する。典型的には、ファイルオブジェクトには、利用可能なオブジェクト番号のプールの中からオブジェクト番号が動的に割り当てられる。これらのファイルオブジェクト番号は、幾つかの状況(例えば、ファイルが削除された結果、そのファイルのオブジェクト番号が空き、次のファイルオブジェクトにより再使用可能となった場合)において、再使用されるものとしてもよい。上記間接オブジェクトには、対応するオブジェクトに対するポインタを得るために、オブジェクト番号によってインデックスを付与することができる。
図2は、本発明の例示的な一実施形態に係る一般的な形式のファイルシステムインスタンス化を示す概略ブロック図である。DSB202は、ファイルシステムのツリー構造のルートを表す特別な構造である。とりわけ、DSB202は、間接オブジェクト204に対するポインタを含んでおり、この間接オブジェクト204は、システムオブジェクト206及びファイルオブジェクト208を含むファイルシステム内の他のオブジェクトに対するポインタを含んでいる。
一般的に、間接オブジェクト204、システムオブジェクト206の各々、及び、ファイルオブジェクト208の各々を含む、上記ファイルシステム内の各オブジェクトは、別々のオブジェクトルートノード(これをルートオーノード(onode)と呼ぶことがある)を含む別々のツリー構造を用いて実行される。また、上記各オブジェクトは、選択的に、幾つかの間接ノード(これを間接オーノードと呼ぶことがある)、直接ノード(これを直接オーノードと呼ぶことがある)、及びストレージブロックを含むことがある。上記DSB202は、間接オブジェクト204のルートノードに対するポインタを含む。間接オブジェクトは、他のオブジェクト206、208のルートノードに対するポインタを含む。
図3は、本発明の例示的な一実施形態に係る一般的な形式のオブジェクトツリー構造を示す概略ブロック図である。ルート(「R」)ノード302は、様々な間接(「I」)ノード304を指し示し、間接(「I」)ノード304の各々は、幾つかの直接(「D」)ノード306を指し示し、直接(「D」)ノード306の各々は、幾つかのストレージブロック(「B」)308を指し示すものとしてもよい。実際には、オブジェクトツリー構造は、例えば、オブジェクトのサイズ次第で、大きく変化し得る。また、特定のオブジェクトのツリー構造は、情報がオブジェクトに追加される時間やオブジェクトから削除される時間において変化し得る。例えば、より多くのストレージスペースがオブジェクトのために使用されている時は、ノードは、上記ツリー構造に動的に追加されるものとしてもよい。また、異なる間接レベルが、必要に応じて使用されるものとしてもよい(例えば、間接ノードは、直接ノードを指し示したり、他の間接ノードを指し示したりすることができる)。
オブジェクトが生成される際、このオブジェクトのために、オブジェクトルートノードが生成される。最初に、この様な「エンプティ」オブジェクトのルートノードは、何れの間接ノード、直接ノードまたはデータブロックに対するポインタも持たない。
上記オブジェクトにデータが追加される際、該データは、最初に、ルートノードが直接指し示すデータブロックに入れられる。一旦、ルートノードにおける全ての直接ブロックポインタが塞がると、その後、ルートノードから直接ノードへのポインタを有する直接ノードが生成される。オブジェクト内のデータが増大して、直接ノードにおける全てのデータポインタが塞がった場合、間接ノードが生成される。
従って、時間の経過に伴い、ルートノードは、様々な間接ノードを指し示し、間接ノードの各々は、幾つかの直接ノードを指し示し、直接ノードの各々は、幾つかのストレージブロックを指し示すことができる。実際には、オブジェクトツリー構造は、例えば、オブジェクトのサイズ次第で、大きく変化し得る。また、特定のオブジェクトのツリー構造は、情報がオブジェクトに追加される時間やオブジェクトから削除される時間において変化し得る。例えば、より多くのストレージスペースがオブジェクトのために使用されている時は、ノードは、上記ツリー構造に動的に追加されるものとしてもよい。また、異なる間接レベルが、必要に応じて使用されるものとしてもよい(例えば、間接ノードは、直接ノードを指し示したり、他の間接ノードを指し示したりすることができる)。
上記オブジェクトルートノードは、上記オブジェクトが最後に変更されたチェックポイントを特定するためのチェックポイント番号を有する(チェックポイント番号は最初、オブジェクトが生成されたチェックポイントを特定し、その後、チェックポイント番号は、新しいチェックポイントにおいてオブジェクトが変更される毎に変化する)。例示的な一実施形態において、オブジェクトが生成されたチェックポイント番号もまた、オブジェクトルートノード内に記憶される。
上記オブジェクトルートノードもまた、様々なタイプのオブジェクトメタデータが記憶される、「イーノード(enode)」と呼ばれるストレージ領域を有する。
オブジェクトルートノードが対応する実際のデータに関し、オブジェクトルートノードは、対応するオブジェクトに関連する各データブロックに対する別個のポインタを有する。一般的には、16個までのデータブロックに対するポインタが、上記オブジェクトルートノード内に記憶される。データが16個のブロックを超えている場合、様々なノードをリンクさせるために各ノード内に必要に応じて記憶される適切なポインタを有する1以上の直接ノード及び/または間接ノードが、オブジェクトツリーにおいて必要となる。この様なポインタは、対応するデータブロックまたはノードに関連する、ディスク上のブロックのセクタ番号を記憶する。
上記直接ノードは、チェックポイント番号を有すると共に、上記オブジェクトに関する幾つかのブロック(例えば、約60個または61個のブロック)の位置を記憶する様に構成される。
第1直接ノードが、データブロックを特定するのに十分に活用されると、1以上の間接ノードは、上記オブジェクトに対応するデータブロックを有する追加の直接ノードに加え、第1直接ノードを特定するためにも使用される。この様な場合、上記オブジェクトルートノードは、上記間接ノードに対するポインタを有し、該間接ノードは、対応する直接ノードに対するポインタを有する。間接ノードが十分に活用されると、その後、必要に応じて、介在する追加の間接ノードが使用される。かかる構造により、ファイルのフラグメンテーション(断片化)に拘らず、ファイルを構成する部分を迅速に特定することができる。
上述した様に、上記間接ノードによって、ルートノード及び直接ノードの間に間接レベルが形成される。例示的な一実施形態において、間接ノード内には、以下の情報が記憶される。
・チェックポイント番号。
・間接または直接ノードの何れかに対するポインタ(例えば、60個までのこの様なポインタ)。
・間接ノードの有効性をチェックすることができるCRC及び種々のサニティディーワード(dwords)。
上述した様に、直接ノードによって、ディスク上のデータブロックに対する直接ポインタが提供される。例示的な一実施形態において、直接ノード内には、以下の情報が記憶される。
・チェックポイント番号。
・幾つかのデータブロックディスクリプタ(例えば、60個までのこの様なディスクリプタ)。ここで、各データブロックディスクリプタは、データブロックに対するポインタ、チェックポイント番号及びブロックがゼロで満たされているか否かを示すビットを含む。
・間接ノードの有効性をチェックすることができるCRC及び種々のサニティディーワード(dwords)。
各ノード(すなわち、ルート、間接、直接)内において、ブロックまたは他のノードに対する各ポインタは、チェックポイント番号に関連付けられており、該チェックポイント番号は、ポインタにより参照されるブロック/ノードに関連するチェックポイントを指し示す。
例えば、上記参照により本明細書に組み込まれた米国特許第7457822号明細書(代理人整理番号2337/104)、及び全ての内容が参照により本明細書に組み込まれている米国特許第8041735号明細書(代理人整理番号2337/105)に記載される様に、チェックポイント機構は、様々なタイミングで、上記ファイルシステムの一時的なコピー及び選択的に保持されたコピーを作成する様に備えられている。具体的には、ファイルシステムリクエストの処理は、例えば10秒毎といったユーザ指定の幾つかの間隔と同じくらい高頻度に発生する様にスケジューリングされる一連のチェックポイントにより、明確に表現される。連続するチェックポイントの各々に関し、直前のチェックポイントから予め記憶されたファイル構造情報を受け継いだ現在のファイル構造情報が、ディスク上に記憶されている。チェックポイントには、連続した番号が付与され、ファイルリクエストの一時的なグループ処理に使用される。ファイルシステムオブジェクトの各々は、これらが生成されるチェックポイントと関連付けられる。また、生成チェックポイント番号は、オブジェクトルートノード内に記憶される。
選択された時点におけるファイルシステム構造の知識を有することは、多様な目的のために有益であるかもしれない。この能力は、現在保持されているチェックポイント(以下、簡単のため、保持チェックポイントまたは保持スナップショットと呼ぶ)に関連するファイルシステム構造データのストレージを許可することにより提供される。この保持チェックポイントは基本的に、特定のチェックポイントにおける読み取り専用バージョンのファイルシステム構造である。複数の保持チェックポイントを取得することが可能であり、機構は、選択された保持チェックポイントを削除する作業、あるいはファイルシステムを選択された保持チェックポイントに戻す(例えば、ファイルシステムを、カタストフィの後の既知の状態に戻す)作業も行う。
本発明の特定の実施形態において、例えば、全ての内容が参照により本明細書に組み込まれている上記米国特許出願公開第2012/0130949号明細書(代理人整理番号2337/130)に記載されたファイルクローニング機構を利用することで、例えばユーザがファイルのコピーを作成する際に、ファイルのコピー(クローン)をファイルシステム内に迅速に生成することが可能になる。例示的な実施形態において、ソースオブジェクトのクローンは、少なくとも最初は、このソースオブジェクトの様々な要素(例えば、間接オーノード、直接オーノード及びデータブロック)に対する参照を含む構造によって表される。読み取り専用クローン及び可変クローンの双方を生成可能である。ソースデータストリーム及びそのクローンは、最初はこの様な要素を共有し、ソースデータストリームまたは可変クローンが変更された場合には、変更されない要素(不変要素)を共有し続ける。ソースデータストリームに関連するデータストリーム(すなわち、間接/直接オーノード)を表すユーザデータブロックやメタデータブロックは何れも、クローンが生成されるときにコピーされる必要はない。クローンされたファイルは、適宜、「デクローン」されるものとしてもよい。
例示的な一実施形態において、ファイルシステムオブジェクトは、まず、ソースオブジェクトの読み取り専用クローン(スナップショット)を表す新たなオブジェクト(以下、「データストリームスナップショット(DSS)」または「スナップショットファイル(SF)」オブジェクトと呼ぶ)を生成し、その後、このオブジェクトの可変クローンを生成することにより、クローンされる。クローンオブジェクトのルートオーノードにおけるブロックポインタ及びオーノードブロックポインタは最初、ソースオブジェクトと同一のブロックを指し示す様に設定される。上記ソースオブジェクトからの特定のメタデータ(例えば、ファイル時間、安全性等)、及び名前が付けられたデータストリームは、上記クローンオブジェクトにコピーされない。メタデータが、ソースオブジェクト及びクローンオブジェクトにおいて維持されることで、データストリームスナップショットオブジェクトが、ソースオブジェクト及び可変クローンオブジェクトに結合され、また、ソースオブジェクト及び可変クローンオブジェクトが、データストリームスナップショットオブジェクトに結合される。例示的な一実施形態において、データストリームスナップショットオブジェクトは、ファイルシステムのユーザには見ることができない「隠し」オブジェクトである。ソースオブジェクト及び可変クローンオブジェクトは何れも、実際には書き込み可能なバージョンのDSSオブジェクトになり、実際には、これらのオブジェクトとDSSオブジェクトとの相違点を記憶する。
図4は、本発明の例示的な一実施形態に係る、ソースオブジェクト(ファイルA)2802、隠しデータストリームスナップショットオブジェクト2803及び可変クローン2805間の関係を概略的に示す図である。
2.オブジェクトレベルでの複製の概要
上述した様に、データストレージシステムでは、ソースファイルシステムの幾つかまたは全てのオブジェクトが、例えば、アーカイブ、バックアップ、メンテナンス、障害復旧等を可能にするために、ターゲットファイルシステムに複製されるものとしてもよい。該ターゲットファイルシステムは、上記ソースファイルシステムと同一のファイルサーバ内に存在してもよいし、図1に示す様に、上記ソースファイルシステムとは別のファイルサーバ内に存在するものとしてもよい。
一般的に、オブジェクトレベルでの複製処理は、ターゲットファイルシステムにおいて、ソースファイルシステム内のオブジェクト構造に対応するオブジェクト構造を生成することを含む。例えば、ターゲットファイルシステムにおいてソースオブジェクト全体を複製するために、一般的に、ターゲットは、オブジェクトデータ及びメタデータに対するストレージブロックの割り当て、及び、ルートオーノード及びその他のノード/ブロックを含む様々なオブジェクトオーノード構造の生成を含む、オブジェクトのツリー構造全体を、ソースにより提供されるソースオブジェクトに関する情報に基づいて、構築する。しかしながら、上記ターゲットファイルシステム内のオブジェクトの実際のレイアウトは、上記ソースファイルシステム内の対応するオブジェクトのレイアウトとは異なることがある(一般的には異なる)ことに留意されたい。なぜなら、とりわけ、上記複製処理は、一般的に、上記ソースファイルシステム内のチェックポイントとは無関係に、上記ターゲットファイルシステム内のチェックポイントを管理するターゲット(例えば、上記ソースファイルシステムではチェックポイント数が100であるのに対し、上記ターゲットファイルシステムではチェックポイント数が200である)、及び、上記ソースファイルシステムとは無関係に、オーノード及びデータに対してブロックを割り当てる処理(例えば、ソースオブジェクトのためのデータブロックは、異なる時間に割り当てられるため、不連続なストレージに割り当てられることがあるのに対し、ターゲットオブジェクトのためのデータブロックは、一般的にほぼ同時に割り当てられるため、上記ターゲットファイルシステム内にオブジェクトが最初に生成される場合には、連続したストレージに割り当てられることがある)を含む。従って、上記複製処理は、ソースファイルシステムからターゲットファイルシステムにデータブロックを単にコピーする処理(例えば、ミラーリング処理)とは全く異なる。
例示的な実施形態では、上記複製処理は一般的に、繰り返し実行される。複製の1周期には、新たなスナップショットを取得する処理、新たなスナップショット内の間接オブジェクトをスキャンして、最後の複製周期に関連する以前のスナップショットから変化したオブジェクトを特定する処理(ここで、変化したオブジェクトは、以前のスナップショット以降に生成された新たなオブジェクト、以前のスナップショットから変更された既存のオブジェクト、及び、以前のスナップショットから削除されたオブジェクトを含む)、及び、上記変化したオブジェクトをターゲットファイルシステムに複製する処理が含まれる。例示的な一実施形態では、新規のオブジェクト及び変更されたオブジェクトは、チェックポイント番号(具体的には、新規オブジェクトは、以前のスナップショットのチェックポイント番号よりも大きい生成チェックポイント番号を有するのに対し、変更されたオブジェクトは、以前のスナップショットのチェックポイント番号以下の生成チェックポイント番号、及び、以前のスナップショットのチェックポイント番号よりも大きい最後に変更されたチェックポイント番号を有する)に基づいて特定される。一方、削除されたオブジェクトは、オブジェクトタイプにより特定される(すなわち、削除されたオブジェクトは、固有のオブジェクトタイプ名を有する)。上記複製周期の後、新たなスナップショットは、次の複製周期のための前のスナップショットとなる。この様に、各複製周期は実際には、変更されたオブジェクトのみの増分複製を行う。一般的に複製は周期的に行われるが、例示的な実施形態は、例えば、上記ターゲットファイルシステムへの最初の複製処理として、ソースファイルシステム全体の完全複製処理も実行可能であることに留意されたい。本明細書に記載されているオブジェクト複製の機構は、代替的な実施形態において、ファイルシステム基準というよりもオブジェクト基準の完全複製または増分複製のために使用可能であることに留意されたい。例えば、選択されたオブジェクトは、複製されるべき残りのソースファイルシステムが無くても、ターゲットファイルシステムに複製されるものとしてもよい。
特定の例示的な実施形態では、間接オブジェクトは、後に詳述する幾つかの間接オブジェクトスキャナファイバ(以下、纏めて「間接オブジェクトスキャナ」と呼ぶことがある)によりチャンクされた状態でスキャンされる。但し、代替的な実施形態においては、間接オブジェクトは、1つのスキャナにより処理されるものとしてもよい。具体的には、幾つかの間接オブジェクトスキャナファイバが生成(スポーン)され、各間接オブジェクトスキャナファイバは、間接オブジェクトの指定された部分(例えば、指定されたオブジェクト番号の範囲)をスキャンして、各チャンク内の変更または削除されたオブジェクトを幾つか特定する。間接オブジェクトスキャナファイバは、各チャンク内の変更されたオブジェクトを特定する際、後に詳述する様な作業項目を、対応するチャンクキュー内に生成する(ここで、例示的な実施形態は、間接オブジェクトチャンク毎に1つのチャンクキューを保持する)。以下、説明の便宜上、新規オブジェクトのための作業項目を「生成」作業項目と呼び、変更されたオブジェクトのための作業項目を「変更」作業項目と呼び、削除されたオブジェクトのための作業項目を「削除」作業項目と呼ぶ。詳細については後述するが、幾つかのリーダファイバは、上記チャンクキューから作業項目を取得し、該作業項目を処理する。とりわけ、間接オブジェクトをスキャンして作業項目を処理するための複数のファイバを使用することにより、この様なスキャン及び処理の並列実行が可能となる。
図5は、例示的な一実施形態に係る、チャンクキュー用の作業項目を生成する際のロジックフローチャートである。ソースは、間接オブジェクト内の各オブジェクトを検査する。もし、オブジェクトの生成チェックポイント番号が、前のスナップショットのチェックポイント番号よりも大きい場合(ブロック1902;YES)には、オブジェクトが新たに生成され、上記ソースは、適切なチャンクキューに「生成」作業項目を追加する(ブロック1904)。そうでない場合(ブロック1902;NO)、もし、上記オブジェクトの最後に変更されたチェックポイント番号が、前のスナップショットのチェックポイント番号よりも大きいとき(ブロック1906;YES)には、上記オブジェクトは、上記ターゲットファイルシステムに複製されたが、その後変更された既存のオブジェクトであり、上記ソースは、適切なチャンクキューに「変更」作業項目を追加する(ブロック1908)。そうでない場合(ブロック1906;NO)、もし、上記オブジェクトが、上記前のスナップショット以降に削除されたとき(ブロック1910;YES)には、上記ソースは、適切なチャンクキューに「削除」作業項目を追加する(ブロック1912)。そうでない場合(ブロック1910;NO)、上記複製の周期における上記オブジェクトの複製は不要である(ブロック1914)。
3.オブジェクトレベルでのクローンオブジェクトの複製
クローンオブジェクトの複製は、しばしば、クローンオブジェクトの所謂「ディープ」コピーを生成することにより実行される。すなわち、上記ソースファイルシステム内のクローンオブジェクトはしばしば、様々なデータ及びメタデータのブロックを共有するが、上記ターゲットファイルシステムでは、クローンソースオブジェクトが必ずデクローンされる様に、クローンオブジェクトは、その様な共有されたデータ及びメタデータのブロック無しに、生成される。例えば、ソースファイルシステム内で特定のブロックを共有する2つのオブジェクトは、ターゲットファイルシステム内では該ブロックを共有しない。代わりに、別々のブロックが、各オブジェクト毎に割り当てられる。ディープコピーを用いてクローンオブジェクトを複製することの1つのデメリットとして、ターゲットファイルシステム上でのクローンの複製に必要となる空き領域が、ソースファイルシステム上でクローンが占める領域よりも大きくなることが挙げられる。この様なクローンオブジェクトの「ディープ」複製は、実装の観点からは比較的簡易である一方、ターゲットファイルシステムでは、その様な「ディープ」複製の実行により、クローンファイルをもつことの幾つかのメリット(例えば、必要な記憶領域の減少)が失われる。
しかしながら、本発明の例示的な実施形態では、データ及びメタデータのブロックが、ターゲットファイルシステム内で生成されたクローンオブジェクトのために共有され続ける様に、クローンオブジェクトが複製される。米国特許出願公開第2012/0130949号明細書に記載された特定の例示的な実施形態における、スナップショットファイルオブジェクト(SF)がクローニングプロセス中に使用される方法によれば、スナップショットファイルツリーに関連するオブジェクトは一般的に、特定の順番で複製されなければならない。具体的には、親スナップショットファイルオブジェクトは、該オブジェクトの何れの子が複製されるよりも前に複製されることが確保される。従って、スナップショットファイルツリーの全体が複製される時には、複製処理は一般的に、ルートスナップショットファイルから始まり、その後、スナップショットファイルツリーの残りの部分が再帰的に複製される。
3.1 クローン複製の特徴の概要
本明細書に記載されたオブジェクトレベルでのクローン複製のしくみは、以下の特徴の幾つかまたは全てを有する:
・クローンは、ライブファイルシステム上で使用されるクローニング機構をエミュレートすることにより、オブジェクトの複製中にもクローンのオブジェクトプロパティを維持して、ターゲットファイルシステム上にクローンオブジェクトを生成する。
・複製されたクローンは、上記ターゲット上の同じ量の領域を使用する。上記ソースファイルシステムにおいてクローン間で共有されたユーザ/メタデータのブロックは、ターゲットファイルシステム上でも共有される。
・クローンを複製する際にソース及びターゲット間で転送されるデータは、最小限に抑えられる。複数のクローン間で共有されるユーザ/メタデータのブロックは、転送され、一旦、ターゲットファイルシステムに書き込まれる。分岐データのみが、各クローンオブジェクト毎に転送及び書き込みされる。
クローンオブジェクト及び他のタイプのオブジェクトを複製するのに使用される処理リソースは、シームレスに共有される。
上述の方法により、他のタイプのオブジェクトを複製するためのオブジェクト複製に使用される既存の全ての機構を再利用することができる。
・クローンを含むファイルシステムは、単一パス複製(すなわち、全ての変更オブジェクト及びこれらの複製を検出するために1回の間接オブジェクトのスキャンで足りる複製)により複製される。
所与のスナップショットファイルツリーの変更されたブランチのみが処理及び複製される。変更されていないブランチは処理されない。
新規のクローンオブジェクト(すなわち、前のスナップショットのチェックポイント番号よりも大きい生成チェックポイント番号を有する変更オブジェクト)は、新しいツリーのルート、またはブランチを始端として複製される。
新しいツリーのルート、またはブランチは、変更オブジェクトを処理する際に、新規のスナップショットファイルの親の生成チェックポイントを調べることにより、容易に特定される。N個の新規スナップショットファイルオブジェクトを有する複製セッションに掛かるオーバヘッドは、イーノードのメタデータに対するN回のアクセス及びルートオーノードに対するN回のアクセスである。
・資源の有用性次第では、ツリーの並列化されたレベル順ウォークを、ツリーの深さ優先型ウォークと組み合わせて、新規クローンのツリーまたはブランチを複製することが可能である。
・複製中に処理されるクローンの数、クローンのツリーのサイズ、または、同一のスナップショットファイルを参照するクローンの数には制限がない。
・他のタイプのオブジェクトとは対照的に、ターゲット上の新規クローンの複製に掛かるオーバヘッドは、必要に応じてチェックポイントを生じさせる、スナップショットファイルのルートオーノードに対するリードアクセス、及び、クローンのルートオーノードに対するライトアクセスである。
・他のタイプのオブジェクトとは対照的に、ターゲット上の変更クローンの複製にはオーバヘッドは掛からない(ここで、変更オブジェクトとは、前のスナップショットのチェックポイント以下の数の生成チェックポイントを有する変化したオブジェクトである)。
・クローンがソースデータストリームであった場合、親スナップショットファイルが変化した場合、または、クローンがデクローンされた場合の様な特別なケースでは、ターゲットファイルシステム上で、幾つかの付加データの転送及び書き込みが為されることがある。その様なケースでは、追加の処理により効果が失われてしまうこともあるが、更なる最適化が可能である。
・他のタイプのオブジェクトとは対照的に、ターゲット上の削除クローンの複製にはオーバヘッドは掛からない(ここで、削除オブジェクトとは、現在のスナップショット内には存在しないが前のスナップショット内に存在する変化したオブジェクトである)。
・クローンオブジェクトの変化は、ソース及びターゲットの双方に存在する複数のファイバを用いて、並行して複製される。
変更クローン、新規のブランチ、同一スナップショットファイルの何れか、及び、新たな独立したツリーは、ソース及びターゲットの双方に存在する複数のファイバを用いて、並行して複製される。
・並行して処理されるクローンの数は、複製処理に割り当てられた全てのリソースによってのみ制限される。
3.2 クローンの複製
以下、例示的な実施形態に係るクローン複製の概念について、クローン複製の特別な態様も含めて説明する。
3.2.1 削除クローンオブジェクトの複製
ソースが、ソースファイルシステムからオブジェクトが削除されたことを検知すると、ソースは、ターゲットファイルシステムから、対応するオブジェクトを削除することをターゲットに指示し、ターゲットは、該オブジェクトを削除する。ある状況では、ターゲットファイルシステムからオブジェクトが削除されても、例えば、削除されたオブジェクトのクローンを削除または複製するために、削除されたオブジェクトの特定のブロックだけは保持されなければならない。例示的な実施形態では、削除オブジェクトのブロックは、複製処理中に使用されるスナップショット機構の一部分として自動的に保持される。従って、その様なブロックは、全てのオブジェクトにより使用されなくなるまで、使用可能な状態を維持する。
3.2.2 新たに生成されたクローンオブジェクトの複製
最初に、ソースファイルシステムでは、クローンの生成は、ソースデータストリームの読み出し専用スナップショットであるスナップショットファイルの生成を含む。該生成処理の間、上記ソースデータストリームは、上記スナップショットファイルのクローンになる。その後、上記スナップショットファイルの可変クローンが生成される。各クローンは、スナップショットファイルに関連付けられたチェックポイントの番号を参照するためのクローンチェックポイント番号を有する。クローンはまず、自クローンの全てのデータブロック、及び、データブロックを記述するオーノードツリーのメタデータブロックを、自クローンのスナップショットファイルとの間で共有する。クローンのユーザ/メタデータのブロックが初めて変更されると、該ブロックは、新たな領域に書き込まれ、分岐ブロックとなる。
複製処理の間、ソースは、クローンチェックポイント番号とブロックポインタチェックポイント番号とを比較して、複製中の変更ユーザブロックが親スナップショットファイルから分岐したか否かを判定する。もし、上記ブロックポインタチェックポイント番号が、上記クローンチェックポイント番号以上である場合、上記ユーザ/メタデータのブロックは、分岐され、ターゲットファイルシステム上の新たな領域に書き込まれなければならない。
この例示的な実施形態では、ターゲットファイルシステム上でクローンが複製(生成及び分岐ブロックの書き込み)される前に確実に、ターゲットファイルシステム上で、新たなスナップショットファイルオブジェクトが完全に複製(生成及び書き込み)されなければならない。この目的は、クローンのクローンチェックポイント番号、及び、ユーザ/メタデータのブロックのチェックポイント番号の間の関係を維持することにより、複製中におけるクローンの分岐を保持することにある。この方法は、通常のファイルクローンに限らず、スナップショットファイルクローンにも適用可能である。
例えば、クローンCLから分岐したクローンがCL’であり、SF及びSF’がそれぞれこれらのスナップショットファイルである場合、SF’は、親SFを有するデータブロックの幾つかを共有する。このケースでは、スナップショットファイルツリー上の関連するブランチは、以下の様に表すことができる。
SF⇒CL⇒SF’⇒CL’
もし、分岐しないデータブロックを先行するSFとの間で共有するために、SF及びSF’が切り捨てられる前にSF’及びCL’が複製された場合、これらの共有されたブロックは、クローンチェックポイント番号よりも大きいチェックポイント番号をもつであろう。従って、これらの共有されたブロックは、上記ケースでない間は、CL’のために分岐されたブロックとみなされるであろう。関連するスナップショットファイル間で共有されたデータブロックを2回に渡り複製することを避けると共に、スナップショットファイルツリー内の全ての要素のインテグリティを維持するために、如何なるレベルの如何なる後継スナップショットファイルがターゲットファイルシステム上で生成されるよりも前に、スナップショットファイルは、ターゲットファイルシステム上で複製される。
従って、図6に概念的に示す様に、ソースファイルシステム内のスナップショットファイルツリーはソースデータストリーム(ステップ1801のSDS)から始まり、その後、スナップショットファイルオブジェクトが生成される(ステップ1802において、このSFは、実際にはSFのクローンになる)。その後、可変クローン(ステップ1803のCL)が生成される。ターゲットファイルシステム内のスナップショットファイルツリーの複製は、スナップショットファイルオブジェクト(ステップ1812のSF’)の生成から始まり、その後、ソースデータストリーム(ステップ1812のSDS’)が生成され、可変クローン(ステップ1813のCL’)が生成される。これらのクローンSDS’及びCL’は、何れの順序で生成されてもよい。
ターゲットファイルシステム内で、ルートスナップショットファイルオブジェクト以外の新たなクローンオブジェクト(すなわち、少なくとも最初は、親スナップショットファイルとブロックを共有したクローンオブジェクト)が生成される場合、新たなクローンオブジェクトは、初めは、親スナップショットファイルオブジェクトのクローンになるために生成される。その後、この新たなクローンオブジェクトは、必要に応じて分岐される。具体的には、新たなクローンオブジェクトは、親スナップショットファイルオブジェクトともはや共有されない全てのブロックを分離し、この親スナップショットファイルオブジェクトから分岐した全ての新たなブロックを追加する。ここで、重要なことは、新たなクローンオブジェクトを生成する際、ターゲットは、新たなクローンオブジェクトのクローンチェックポイント番号を、上記親スナップショットファイルオブジェクト内の全てのブロックのチェックポイント番号よりも大きくする必要があることである。さもないと、クローン及びスナップショットファイルオブジェクトにより共有されたブロックは、実際には分岐されていないにも拘らず、分岐されている様に見えてしまうであろう。このため、例示的な一実施形態では、クローンオブジェクトを生成する際、ターゲットは、親スナップショットファイルオブジェクトの最後に変更されたチェックポイントの番号を、ターゲットファイルシステム内の現在のチェックポイント番号と比較する。比較の結果、これらのチェックポイント番号が等しい場合には、上記ターゲットは、ターゲットファイルシステムのチェックポイント番号を前進させるためにチェックポイントを発行し、クローンオブジェクトのクローンチェックポイント番号を、前進されたチェックポイント番号に設定する。これにより、上記ターゲットは、上記クローンオブジェクトのクローンチェックポイント番号が、確実に、親スナップショットファイルオブジェクト内の全てのブロックのチェックポイント番号よりも大きくなる様にする(あるいは、上記ターゲットは、チェックポイントを発行すること無く、単に、クローンチェックポイント番号を、現在のチェックポイント番号に設定するものとしてもよい)。
例えば、上述した実施例を用いて、ターゲットファイルシステム内のSF’の子(例えば、SDS’またはCL’)を生成する場合、子オブジェクトは最初はSF’のクローンになる、すなわち、子オブジェクトは最初はSF’の全てのブロックを共有する。その後、子オブジェクトは、必要に応じて分岐される。具体的には、SF’ともはや共有されない全てのブロックを分離し、(ソースによりターゲットに送信された)SF’から分岐した全ての新たなブロックを追加することにより、分岐される。子オブジェクトを生成する際、ターゲットは、SF’の最後に変更されたチェックポイントの番号を、ターゲットファイルシステム内の現在のチェックポイント番号と比較する。比較の結果、これらのチェックポイント番号が等しい場合には、上記ターゲットは、ターゲットファイルシステムのチェックポイント番号を前進させるためにチェックポイントを発行する。上記子オブジェクトには、クローンチェックポイント番号として、前進されたチェックポイント番号が割り当てられる。これにより、上記子オブジェクトのクローンチェックポイント番号が、確実に、SF’内の全てのブロックのチェックポイント番号よりも大きくなる。
従って、例示的な実施形態では、以下のステップは、ターゲットファイルシステム上の新たなクローンオブジェクトを複製するために使用される。
・ソースから送信されるイーノード情報を用いて新たなオブジェクトを生成するステップ。もし、オブジェクト番号がオブジェクトの複製中も維持される場合には、生成されたオブジェクトは、親スナップショットファイルを参照する。
・親スナップショットファイルのルートオーノードからルートオーノードを形成するステップ(当然の事ながら、親スナップショットファイルのルートオーノードは、現在の複製周期または前の複製周期の何れかにおいて、ターゲットファイルシステムに既に複製されたであろう。なぜなら、スナップショットファイルオブジェクトの子の全てがターゲットファイルシステム内で生成される前に、親スナップショットファイルオブジェクトがターゲットファイルシステム内で生成されるからである)。
・もし、親スナップショットファイルの最後に変更されたチェックポイントの番号が、ターゲットファイルシステムの現在のチェックポイント番号と等しい場合に、チェックポイント番号を前進させるためにチェックポイントを発行するステップ(クローンチェックポイント番号は、分岐されたユーザ/メタデータのブロック及び分岐されていないユーザ/メタデータのブロックを区別するために使用されるチェックポイント番号である。クローンチェックポイント番号以上のチェックポイント番号を有するユーザ/メタデータのブロックは、分岐されている)。
・ルートオーノード内のクローンチェックポイント番号を、現在の(前進された)チェックポイント番号に設定するステップ
・オブジェクトのルートオーノードをストレージに書き込むステップ。該オブジェクトは、現在、スナップショットファイルと同一のブロックポインタを指し示している。
・ソースから受信された分岐後のユーザ/メタデータのブロックを、新たな領域に書き込むステップ。ソースは、クローンの分岐されたユーザ/メタデータのブロック、すなわち、ソースファイルシステム内のオブジェクトのクローンチェックポイント番号以上のチェックポイント番号を有する全てのブロックを選択的に読み出し、転送する。
クローンオブジェクトは、通常のファイルクローン(すなわち、変更可能なライブコピー)またはスナップショットファイルクローン(すなわち、分岐クローンのクローニング時に生成される読み出し専用スナップショット)の何れかで有り得る。例示的な実施形態では、クローンは、オブジェクトイーノード内のフラグを検査することにより特定可能である。
ルートスナップショットファイルオブジェクト(すなわち、ソースデータストリーム、または、親スナップショットファイルをもたない非分岐クローンをクローニングする際に生成されるスナップショットファイル)の生成は、上述した様な特別な処理を必要としない。ルートスナップショットファイルオブジェクトは、ターゲットファイルシステム上でゼロから生成される。なぜなら、ルートスナップショットファイルオブジェクトの生成には、ソースデータストリームオブジェクトが何れのオブジェクトからのものであるかは、ターゲットファイルシステムにおいて、必ずしも知られる必要はないからである。また、もし知られたとしても、ソースデータストリームオブジェクトがクローンされた時には、状況が変わってしまっているかもしれない。
図7は、例示的な一実施形態に係る、図6のSFによりルートされたスナップショットファイルツリーをターゲットファイルシステムに複製する処理を概略的に示すロジックフローチャートである。ブロック2002では、スナップショットファイルオブジェクトは、上記ターゲットファイルシステムに複製される。上記スナップショットファイルオブジェクトの複製が完了すると(ブロック2004;YES)、ブロック2006では、該スナップショットファイルオブジェクトのクローンは、上記ターゲットファイルシステムに複製される。
図8は、例示的な一実施形態に係る、ターゲットによる新規クローンオブジェクトの生成処理を概略的に示すロジックフローチャートである。ブロック2102では、ターゲットは、ターゲットファイルシステム内に、新たなクローンオブジェクトを生成する。ブロック2104では、上記ターゲットは、クローンオブジェクトの親スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号を、ターゲットファイルシステムの現在のチェックポイント番号と比較する。もし、チェックポイント番号が等しい場合(ブロック2106;YES)には、その後、上記ターゲットは、ターゲットファイルシステム内にチェックポイントを発行して、ターゲットファイルシステム内の現在のチェックポイント番号を前進させる(ブロック2108)。ブロック2110では、上記ターゲットは、上記クローンオブジェクトのクローンチェックポイント番号を、現在のチェックポイント番号に設定する。この現在のチェックポイント番号は、処理がブロック2106;NOからブロック2110に移行した場合には、初めての現在のチェックポイント番号となり、処理がブロック2108からブロック2110に移行した場合には、前進されたチェックポイント番号となる。上記クローンオブジェクトは、親スナップショットファイルオブジェクトのクローンとして最初に生成され、全てのブロックを親と共有する。その後、上記クローンオブジェクトは、ソースの指示に従い、必要に応じて分岐される。
3.2.3 以前のスナップショット以降、オブジェクトはクローンになる
ターゲットファイルシステムに複製された通常のオブジェクトは、以前のスナップショット以降、クローンのプロパティを取得するものとしてもよい。このことは、例えば、上記オブジェクトが、以前のスナップショット以降にクローンされる場合、または、上記オブジェクトが、(例示的な実施形態では、ソースファイルシステム内のクローンオブジェクトの生成中の)最後の複製周期の発生時にクローニングの進行中であった場合に起こり得る。上記オブジェクトは、原則として、通常のオブジェクトとして生成され、その後、親スナップショットファイルのユーザ/メタデータの全てのブロックを共有するクローンオブジェクトに変換される。このため、複製周期は、オブジェクトが生成された後、かつ、完全にクローンに変換される前に、開始可能である。従って、上記オブジェクトは、上記ターゲットファイルシステムに通常のオブジェクトとして複製され、その後、上記ターゲットファイルシステムに複製される必要がある変更オブジェクトとして、新たな複製周期において特定されるであろう。上記オブジェクトは、クローンのプロパティを取得した後、かつ、新たな複製周期の前に、親スナップショットファイルから分岐したものであってもよい。
ソースは、(例えば、前のスナップショットのチェックポイント番号以上のオブジェクトのクローンチェックポイントに基づき、)前のスナップショット以降にクローンのプロパティを取得したオブジェクトを特定することができる。また、上記ソースは、上記オブジェクトが、最後の複製周期の発生時にクローニングの進行中であったこと(例えば、オブジェクトの親スナップショットファイルが、新たな複製周期内の新規オブジェクトでないか否か)を判定することができる。また、例示的な実施形態では、上記ソースは、オブジェクトを複製する。この複製処理は、(ターゲットファイルシステムに既に複製された)親スナップショットファイルオブジェクトと共にブロックを共有するクローンとして、ターゲットファイルシステム内のオブジェクトを、ターゲットに再生成してもらうこと、上記オブジェクトをスキャンして全ての分岐ブロック(すなわち、上記オブジェクトのクローンチェックポイント番号以上のチェックポイント番号を有するブロック)を特定すること、及び、上記ターゲットファイルシステム内の分岐ブロックの複製をさせることにより実行される。例示的な実施形態では、上記ターゲットファイルシステム内のオブジェクトの再生成処理は、上記ターゲットファイルシステムから既存のオブジェクトを削除して、オブジェクトを新たに生成する処理を含む。
これに対して、もし、上記オブジェクトが、前のスナップショット以降にクローンのプロパティを取得したにも拘らず、親スナップショットファイルが新しい場合(上記オブジェクトが最後の複製周期以降にクローンされたことを示す場合)には、上記オブジェクトは、後に詳述する様に、親スナップショットファイルオブジェクトの複製中に複製されるであろう。
3.2.4 スナップショットファイルツリーの簡易化
スナップショットファイルオブジェクトが有する子のクローンが1つだけの場合には、スナップショットファイルは削除され、上記クローンが変更されて、削除されたスナップショットファイルの親に従属するものとしてもよい。これにより、スナップショットファイルツリーが簡易化される。例えば、中間のスナップショットファイルオブジェクトSF1が前のスナップショット以降に削除された例を以下に示す。
SF0<SFKクローンは、SF0<クローンに変化した。
上記ソースは、上述の簡易化が、前のスナップショット以降に変化したクローンオブジェクトの親に基づいて、前のスナップショット以降に行われたものであることを確認することができる。例示的な実施形態では、上記ソースは、「削除」作業項目を処理する際、SF1を削除することをターゲットに指示すると共に、クローンの「変更」作業項目を処理する際、SF0に関連する上記クローンオブジェクトの分岐ブロックを複製することを上記ターゲットに指示する(現時点ではオブジェクトが新規の親オブジェクト番号を有しているため、該オブジェクトのメタデータは変更されている)。上記ターゲットが、複製処理の一部として、クローンオブジェクトのオーノード構造を精査できる様に、上述の様なクローンオブジェクトの複製処理は、SF1と共有された全てのブロックが利用可能であることを要求する。上述した様に、上記クローンオブジェクトが複製される前にSF1が削除されたとしてもなお、共有されたブロックが利用可能となる様に、上記共有されたブロックは、スナップショット機構の一部として、上記ターゲットにより自動的に保持される。
3.2.5 クローンオブジェクトはデクローンされる
クローンはデクローンされるものとしてもよい。該デクローンは、親スナップショットファイルオブジェクトからオブジェクトをデカップリングする処理、及び、親スナップショットファイルオブジェクトと以前に共有されたブロックに対応するオブジェクトにブロックを追加する処理を含む。上記ソースは、前のスナップショット内のクローンであったが新規のスナップショット内のクローンではないオブジェクトに基づいて、上述のデクローニングが、前のスナップショット以降に生じたことを、確認することができる。例示的な実施形態では、上記ソースは、ターゲットファイルシステムに上記オブジェクトを「ディープコピー」することにより、オブジェクトを複製する。
3.3 作業項目及びリーダファイバ
上述した様に、特定の実施形態では、上記前のスナップショット以降に変化したオブジェクトを検出するために、間接オブジェクトは、オブジェクトベースの複製中に、チャンク単位でスキャンされる。一般的には、変更されたオブジェクトが検出されると、オブジェクト番号、チェックポイント番号、ボリューム番号、及びオブジェクトタイプを含む作業項目が、対応するチャンクキューにチャンク毎に追加される。具体的には、新規オブジェクトのために「生成」作業項目が追加され、変更オブジェクトのために「変更」作業項目が追加され、削除オブジェクトのために「削除」作業項目が追加される。詳細については後述するが、幾つかのリーダファイバは、上記チャンクキューから作業項目を取得し、該作業項目を処理する。
特定の例示的な実施形態では、「生成」及び「変更」の作業項目の処理は、本明細書において「未処理マップ」及び「クローンキュー」と呼ばれる2つのキューを用いて管理される作業項目を追加的に生成するものとしてもよい。上記未処理マップ内に配置された作業項目は、原則として、実行のためにクローンキューに移動(昇格)されなければならないプレースホルダである。上記クローンキュー内に配置された作業項目は、プロセスファイバ(スレッド)のプールにより実行される。
クローンキュー内に配置された作業項目は、順不同に実行可能である。従って、未処理マップは、実行されるクローンキューに作業項目が昇格する方法と時間を「計画する」ために用いられる。特定の作業項目が実行されると、ソースは、ターゲットと情報を交換し、ターゲットファイルシステム内の対応するファイルシステムオブジェクトを複製させる。詳細については後述するが、この処理は、とりわけ、ソースがオブジェクトデータ及び/またはメタデータをターゲットに渡す処理、及び、ターゲットがオブジェクトを生成または更新する処理を含む。特定の例示的な実施形態では、上記未処理マップ及びクローンキューは、1つの物理的な固定長キューの一部である論理キューである。
図9は、本発明の例示的な一実施形態に係るファイルサーバ102の関連構成要素を示す概略ブロック図である。特に、ファイルサーバ102は、ストレージプロセッサ502、ファイルシステムストレージ504、及び生成されオンデマンドの状態に維持されるグローバル論理キュー506を有する。また、ファイルサーバ102は、上述した様に、間接オブジェクトスキャンに基づいてチャンクを実行するための、未処理マップ508、クローンキュー510、及び幾つかのチャンクキュー512(典型的には、間接オブジェクトチャンク毎に1つのキュー)を含む様々なサブキューを有する。説明の便宜上及び簡単のため、ストレージプロセッサ502については詳述しないが、ストレージプロセッサ502は、一般的に、ファイルシステムストレージ504内の1以上のファイルシステムを管理すると共に、一般的に、上述した様な十分なハードウェア及びソフトウェアのリソースを有する。
例示的なクローン複製スキームの基本動作の幾つかは、図10に例示するスナップショットファイルツリーの複製処理を通して明らかにすることができる。本実施例では、「SPAWN」と呼ばれる作業項目が用いられる。この「SPAWN」作業項目は、スナップショットファイルオブジェクト、及び、処理されるべきスナップショットファイルオブジェクトの次の子を表す(0からナンバリングされる)子番号(ここで、子番号“0”は1番目の子、子番号“1”は2番目の子等)を特定する。
「SPAWN」作業項目は、スナップショットファイルツリーまたはスナップショットファイルツリーの一部を「歩く」ために用いられる。これにより、スナップショットファイルオブジェクトの子がターゲットファイルシステム内で生成される前に、確実に、親スナップショットファイルオブジェクトが、ターゲットファイルシステム内で生成されることとなる。
図10を参照すると、SF0が、新規に生成されたスナップショットファイルツリーであると仮定した場合(詳細については後述する)、SPAWN[SF0,0]作業項目は上記未処理マップ内に配置され、SF0オブジェクトは複製される。ここで、SPAWN[SF0,0]作業項目は、SF0の複製が完了した後に、SF0の子が、子0(すなわち、SF1)を始めとして複製される必要があることを示す。
SF0の複製完了が通知されると、SPAWN[SF0,0]作業項目は、クローンキューに昇格される。ここで、この処理は、最終的にはファイバにより実行される。このファイバは、上記作業項目に示されるSF0の子0(すなわち、SF1)の複製処理を実行するが、必要に応じて、追加の作業項目を生成(スポーン)し、ツリーの残り部分の複製も可能とする。
ここで、上記ファイバは、SF0が追加の子を有すると認識しているため、SPAWN[SF0,1]作業項目をクローンキューに追加して、子1から始まるSF0の子(すなわち、SF2)がまだ複製される必要があることを示す。SF0は既に複製されているので、SF0の子の複製はいつでも起こり得る。このため、その様な子のための作業項目は、未処理マップではなくクローンキュー上に配置するものとしてもよい。
上記ファイバは、SF1が複製の必要のある子を有することも認識しているが、SF1はまだ複製されていないため、上記ファイバは、SPAWN[SF1,0]作業項目を、クローンキューではなく未処理マップ側に追加する。これにより、SPAWN[SF1,0]作業項目は、SF1の複製が完了した後にのみ、SF1の子が、子0(すなわち、CL0)を始めとして複製される必要があることを示す。
上述した様に、クローンキュー内の如何なる作業項目についてもいつでも実行可能である。このため、SPAWN[SF0,1]作業項目は、SF0の子1(すなわち、SF2)を複製し、SPAWN[SF0,2]作業項目を上記クローンキューに追加し、SPAWN[SF2,0]作業項目を上記未処理マップに追加するために、ファイバにより実行されるものとしてもよい。後続するSPAWN[SF0,n]作業項目の各々は、必要に応じて、追加の作業項目の生成だけでなく、SF0の特定の子の複製のために実行されるものとしてもよい。SF5を複製するためにSPAWN[SF0,4]を実行するファイバは、SF5がSF0の最後の子であるので、SPAWN[SF0,5]作業項目を生成しない。但し、SF5が幾つかの子を有する場合には、ファイバは、SPAWN[SF5,0]作業項目を上記未処理マップ上に追加するものとしてもよい。
再びSF1の複製に関し、SF1の複製完了が通知されると、SPAWN[SF1,0]作業項目は、未処理マップからクローンキューに昇格し、再帰処理は、該作業項目から継続して実行される。すなわち、ファイバは、SPAWN[SF1,0]作業項目を取得し、SPAWN[SF1,1]作業項目をクローンキューに追加し、SF1の子0(すなわち、CL0)の複製を開始する。また、別のファイバは、SPAWN[SF1,1]作業項目を取得し、SF1の子1(すなわち、CL1)の複製を開始する。しかしながら、SF1には他の子が存在しないため、追加の作業項目は生成されない。
上記と同様の処理は、SPAWN[SF2,n]、SPAWN[SF3,n]、SPAWN[SF4,n]、SPAWN[SF5,n]の何れかの作業項目、及び他の幾つかの作業項目(例えば、SF3、SF4、SF5の何れかが1以上の子スナップショットファイルオブジェクトをもつ場合等)上においても実行される。
上述した様に、特定の例示的な実施形態では、未処理マップ及びクローンキューは、1つの物理的な固定長キューの一部である論理キューである。上述の実施例からもわかる様に、特定の作業項目がクローンキューから実行される場合には、0または1または2個の追加の作業項目は、上記特定の作業項目から生成されるものとしてもよい。複製処理の実行中、所与の作業項目が2つの作業項目に置き換えられない(完成した作業項目は、常に、1つの作業項目に置き換え可能である)様に、上記論理キューは、満たされる(フルになる)ことが可能である。
従って、特定の例示的な実施形態では、ACTIVEと呼ばれる第2のタイプの作業項目が、幾つかの状況において使用されるものとしてもよい。この「ACTIVE」作業項目は、原則として、2つの「SPAWN」作業項目の代わりをすると共に、(1)如何なる動作が次に実行される必要があるか、及び、(2)動作完了後にどの処理に戻るかを効果的に示すことにより、スナップショットファイルツリーの更に配列性の高い処理を進行させる。
図10を参照して上述した実施例では、SPAWN[SF0,0]作業項目が処理される時、上記キューはフルの状態にある。SPAWN[SF0,1]作業項目をクローンキューに追加すること、及び、SPAWN[SF1,0]作業項目を未処理マップに追加することは行われず、上記ファイバは、双方の作業項目を、SF1及びその子の複製をシステムに指示する未処理マップに追加されたACTIVE[SF0,0,SF1,0]作業項目に代えると共に、SF0の子1(すなわち、[SF0,(0+1)])に戻るものとしてもよい。
キューエントリの開放が開始されると、上記システムは、並列的な複製処理を継続できる様に、ACTIVEエントリの使用状態からSPAWNエントリの使用状態に復帰することができる。
以下の実施形態では、以下に示すSPAWN及びACTIVEの双方の作業項目を用いて実行される、スナップショットファイルツリーSF0の複製処理を例示する。
+CL01+CL11
SF0<+SFK+SF2<+CL21
+CL13+CL22
稼働ファイバは、生成(SF0)作業項目を、チャンクキューから取得する。上記稼働ファイバは、SPAWN(SF0,0)作業項目を上記未処理マップに追加して、SF0を複製する。ターゲット上でSF0の複製が完了すると、上記SPAWN(SF0,0)作業項目は、クローンキューに昇格する。
稼働ファイバは、上記SPAWN(SF0,0)作業項目を上記クローンキューから取得し、SPAWN(SF0,1)作業項目を上記クローンキューに追加し、CL01(すなわち、SF0の子0)を複製する。
稼働ファイバは、上記SPAWN(SF0,1)作業項目を上記クローンキューから取得する。例示のために、上記キューがフルの状態にあると仮定すると、上記ファイバは、ACTIVE(SF0,1,SF1,0)作業項目を上記未処理マップに追加すると共に、SF1(すなわち、SF0の子1)を複製する。ターゲット上でSF1の複製が完了すると、上記ACTIVE(SF0,1,SF1,0)作業項目は、上記クローンキューに昇格する。
稼働ファイバは、上記ACTIVE(SF0,1,SF1,0)作業項目を上記クローンキューから取得し、ACTIVE(SF0,1,SF1,0)作業項目を上記クローンキューに追加し、CL11(すなわち、SF1の子0)を複製する。
稼働ファイバは、上記ACTIVE(SF0,1,SF1,1)作業項目を上記クローンキューから取得する。例示のために、上記キューが現時点で空きエントリをもつと仮定すると、上記ファイバは、SPAWN(SF2,0)作業項目を上記未処理マップに追加し、ACTIVE(SF0,1,SF1,2)作業項目を上記クローンキューに追加すると共に、SF2(すなわち、SF1の子1)を複製する。
稼働ファイバは、上記ACTIVE(SF0,1,SF1,2)作業項目を上記クローンキューから取得すると共に、CL13(すなわち、SF1の子2)を複製する。
SF2の複製が完了すると、上記SPAWN(SF2,0)作業項目は、上記未処理マップから上記クローンキューに昇格する。稼働ファイバは、上記SPAWN(SF2,0)作業項目を上記クローンキューから取得し、SPAWN(SF2,1)作業項目を上記クローンキューに追加し、CL21(すなわち、SF2の子0)を複製する。
稼働ファイバは、上記SPAWN(SF2,1)作業項目を上記クローンキューから取得すると共に、CL22(すなわち、SF2の子1)を複製する。
この時点で、クローンツリーの全体が複製された。
上述した実施例は、スナップショットファイルツリーの全体が、SF0を始めとして複製される必要があるという仮定に基づいている。しかしながら、実際には、前のスナップショット以降に変化した、スナップショットファイルツリーの部分だけが複製される。
例えば、図10を再び参照すると、上記ターゲットファイルシステムにおいて、SF5及びその子だけが新たに生成または変更され、ツリーの残り部分が既に複製されている場合には、該SF5及びその子だけが、上記ターゲットファイルシステムに複製される必要があるであろう。
同様に、クローンオブジェクトの最後の複製以降に、該クローンオブジェクトの一部分だけが変化した(例えば、クローンオブジェクトがその親から分岐した)場合には、その分岐された部分だけが、複製される必要があるであろう。
図11は、例示的な一実施形態に係る、ストレージプロセッサ502により維持されるソースワークキュー及びファイバのタイプを表す概略図である。
各複製セッション毎に、チャンクキュー512及びクローンキュー510を含む一連のキュー704が維持される。グローバル間接オブジェクトキュー702は、間接オブジェクトスキャナ707により処理されるべき、各複製セッション内の間接オブジェクトチャンクを追跡するために使用される。本実施例では、複製セッション1内の間接オブジェクトチャンク4は依然、処理される必要があり、複製セッション2内の間接オブジェクトチャンク1、2は依然、処理される必要がある。間接オブジェクトスキャナファイバ708は、複製セッション1内の間接オブジェクトチャンク3を処理し、具体的には、チャンク3内のオブジェクトエントリ21をスキャンする。間接オブジェクトスキャナファイバ710は、複製セッション1内の間接オブジェクトチャンク2を処理し、具体的には、チャンク2内のオブジェクトエントリ18をスキャンする。
稼働スレッドのプール711(本明細書では、「変更オブジェクトリーダ」と呼ぶことがある)は、作業項目を、(チャンク単位の)チャンクキュー512及びクローンキュー510から取得し、該作業項目を処理する。本実施例では、第1リーダファイバ712は、複製セッション1内の間接オブジェクトチャンク1内のオブジェクト3のための作業項目を処理し、第2リーダファイバ714は、複製セッション1内の間接オブジェクトチャンク2内のオブジェクト14のための作業項目を処理し、第3リーダファイバ716は、複製セッション1内のオブジェクト20(スナップショットファイル)のための作業項目を処理する。
また、ストレージプロセッサ502は、未処理オブジェクトメッセージの所定最大数に対する、上記ターゲットファイルシステムに送信された未処理(未応答)オブジェクトメッセージの数706を監視すると共に、複製セッションを制御して、確実に、未処理オブジェクトメッセージの数が上記所定最大数を超えない様にする。
間接オブジェクトの全てのチャンクの処理が完了して上記ターゲットにより応答された場合、上記ソースは、未処理マップが空になるまで待機し、クローンキュー510内の全ての作業項目に対する処理は、キュー704を使用不可として複製セッションを終了させる前に、完了する。
全てのキュー間における稼働ファイバの共有を可能とするために、クローンキュー510は、典型的には、予約済チャンクIDを有するチャンクキューである。このキューは、如何なるチャンクからのクローン/スナップショットファイルオブジェクトのための作業項目も処理するため、通常のチャンクキュー512とは異なることに留意されたい。また、作業項目は、間接オブジェクトスキャナ707ではなく、稼働ファイバ711により上記キューに追加される。上記キューは、チャンクのサイズにより限定されず、複製の再開が可能な状態を維持する。
上述した様に、特定の例示的な実施形態では、グローバルキューの収容量の全てが使用されると、スナップショットファイルの後継ファイルの複製処理が、「ACTIVE」作業項目を用いて実行される。該複製処理では、上記キューが満杯(フル)の間は、追加の作業項目は生成(スポーン)されない。これにより、各作業項目は、多くても1つの作業項目を生成するに留まるため、グローバルキューがその総収容量を超えて使用されることは、確実に防止される。
上記グローバルキューが満杯(フル)の間、未処理キュー内にある既存の作業項目は、クローンキューに追加されるものとしてもよい。1つの例示的な実施形態では、クローンキュー内のエントリは、未処理マップ内にある作業項目のために保持されるため、上記グローバルキュー内の空きエントリの数の算出には、上記未処理マップ内の項目の数が考慮される。あるいは、新たなエントリが利用可能になった時に作業項目が上記クローンキューに復帰可能となるまで、別々のキューを使用して、その様な作業項目を管理するものとしてもよい。
例示的な実施形態では、クローンは、オブジェクトのイーノード内のフラグをチェックすることにより特定可能である。
3.3.1 「削除」作業項目
「削除」作業項目を処理する際、ソースは、ターゲットに問合せを送り、ターゲットファイルシステムからオブジェクトを削除する。
3.3.2 「生成」作業項目
「生成」作業項目及びオブジェクトの処理がクローンまたはルートスナップショットファイルにより実行される場合、上記オブジェクトが、現在のファイバにより複製されるか、親スナップショットファイルツリーの一部として複製され現在のファイバによっては何もされないか、の決定が必要となる。かかる決定は、以下の様に為される:
a.もし、上記オブジェクトがクローンであり、かつ、該オブジェクトの親スナップショットファイルが新規オブジェクトである場合、該オブジェクトの複製処理は、現在のファイバにより省略される。
b.もし、上記オブジェクトが、ルートスナップショットファイルまたは旧親オブジェクトをもつクローンである場合、オブジェクトは、現在のファイバにより複製される。もし、上記クローンがスナップショットファイルである場合、クローンを複製するための「SPAWN」作業項目が、未処理マップに追加される。スナップショットファイルの複製が完了すると、ソースは、未処理「SPAWN」作業項目を、処理するためのクローンキューに追加する。
全てのオブジェクトが新規オブジェクトである完全複製の場合、上述の処理は以下の様に簡易化される:
オブジェクトがルートスナップショットファイルである場合、該オブジェクトは上記bの様に複製される。あるいは、該オブジェクトの複製処理は、現在のファイバにより省略される。
図12は、上述した様な、例示的な一実施形態に係る「生成」作業項目を説明するための状態図である。
完全複製のケース(ブロック802;YES)において、オブジェクトがルートスナップショットファイルである場合(ブロック804;YES)、SPAWN(オブジェクト,0)作業項目が未処理マップに追加され(ブロック816)、上記オブジェクトが複製される(ブロック818)。もし、オブジェクトがクローンである場合(ブロック804;NO、ブロック806;YES)、該オブジェクトの複製処理は、現在のファイバにより省略される(ブロック807)。もし、オブジェクトがクローンでもルートスナップショットファイルでもない場合(ブロック804;NO、ブロック806;NO)、該オブジェクトは複製される(ブロック818)。
増分複製のケース(ブロック802;NO)において、オブジェクトがルートスナップショットファイルである場合(ブロック808;YES)、SPAWN(オブジェクト,0)作業項目が未処理マップに追加され(ブロック816)、上記オブジェクトが複製される(ブロック818)。もし、オブジェクトがクローンであり(ブロック808;NO、ブロック810;YES)、かつ、該オブジェクトの親スナップショットファイルが新規オブジェクトである場合(ブロック812;YES)、該オブジェクトの複製処理は、現在のファイバにより省略される(ブロック813)。もし、オブジェクトがクローンであり(ブロック808;NO、ブロック810;YES)、かつ、該オブジェクトの親スナップショットファイルが旧オブジェクトである場合(ブロック812;NO)において、上記クローンがスナップショットファイルである場合(ブロック814;NO)には、SPAWN(オブジェクト,0)作業項目が未処理マップに追加され(ブロック816)、上記オブジェクトが複製される(ブロック818)。これに対し、もし、上記クローンがスナップショットファイルでない場合(ブロック814;YES)には、上記オブジェクトが複製される(ブロック818)。
3.3.3 「SPAWN」作業項目
ファイバが、クローンキューから「SPAWN」作業項目を取得して、スナップショットファイルの後継ファイルを複製する時、スナップショットファイルツリーの残りのブランチを生成(スポーン)するためのスペースがキュー内に有る場合には、上記ファイバは、上記残りのブランチの生成(スポーン)を試行するであろう。その後、上記ファイバは、更なる複製のための後継ファイルを複製するであろう。
「SPAWN」作業項目は、所与のスナップショットファイルのクローンを複製するのに必要な全ての情報を含む。該情報は、例えば、スナップショットファイルのオブジェクト番号、参照数(スナップショットファイルの参照数は、直近のクローンの数である)、参照リスト(スナップショットファイルの参照リストは、直近のクローンのリストである)、及び、参照オフセット(スナップショットファイルの参照オフセットは、上記参照リストにおいて次に複製する予定のクローンのインデックスである)等である。
以下では、説明の便宜上、スナップショットファイル「SF」及び参照オフセット「refOffset」のための「SPAWN」作業項目を、SPAWN(SF,refOffset)と表現する。この作業項目は、スナップショットファイル「SF」の子番号として「refOffset」を複製する。SPAWN(SF,refOffset)作業項目は、以下の様に処理される:
1.スナップショットファイルツリーの複製を終えるのに必要となる新たな全ての作業項目の生成処理(この処理は、他の利用可能なファイバが、スナップショットファイルツリーの他の部分を並列的に処理できる様に、最初に実行される):
a.クローンが通常のファイルであり、かつ、最後のクローンでない場合、残りのクローンを複製するための新たなSPAWN(SF,refOffset+1)作業項目が、クローンキューに追加される。
b.クローンがスナップショットファイルであり、かつ、最後のクローンである場合、子0を始めとしてクローンの子を複製するために、SPAWN(clone,0)作業項目が未処理マップに追加される。
c.クローンがスナップショットファイルであり、かつ、最後のクローンでなく、かつ、全てのキューが満杯(フル)である場合、新たなACTIVE(SF,refOffset,clone,0)作業項目が未処理マップに追加される。
d.クローンがスナップショットファイルであり、かつ、最後のクローンでなく、かつ、全てのキューが満杯(フル)でない場合、子0を始めとしてクローンの子を複製するために、SPAWN(clone,0)作業項目が未処理マップに追加され、SFの残りのクローンを複製するために、SPAWN(SF,refOffset+1)作業項目がキューに追加される。
2.クローンの複製
例示的な一実施形態では、上記稼働ファイバは、参照オフセットを、親スナップショットファイルの参照数「refCount」と比較することにより、オブジェクトが最後の後継オブジェクトであるか否かを判定する。
例示的な一実施形態では、スナップショットファイルの参照リストを何度も参照する必要が無い様に、該スナップショットファイルの参照数に加えて、該スナップショットファイルの参照リストも、キャッシュされる。
図13は、例示的な一実施形態に係る「SPAWN」作業項目を説明するための状態図である。もし、クローンが通常ファイルであり(ブロック902;YES)、かつ、最後のクローンでない場合(ブロック904;NO)、残りのクローンを複製するための新たなSPAWN(SF,refOffset+1)作業項目が、クローンキューに追加される(ブロック911)。そして、オブジェクトの複製が行われる(ブロック912)。
もし、クローンが通常ファイルであり(ブロック902;YES)、かつ、最後のクローンである場合(ブロック904;YES)、クローンキューまたは未処理マップに如何なるエントリも追加されることなく、オブジェクトの複製が行われる(ブロック912)。
もし、クローンがスナップショットファイルであり(ブロック902;NO)、かつ、最後のクローンである場合(ブロック906;YES)、SPAWN(clone,0)作業項目が、未処理マップに追加される(ブロック907)。そして、オブジェクトの複製が行われる(ブロック912)。
もし、クローンがスナップショットファイルであり(ブロック902;NO)、かつ、最後のクローンでなく(ブロック906;NO)、かつ、全てのキューが満杯(フル)である場合(ブロック908;YES)、新たなACTIVE(SF,refOffset,clone,0)作業項目が未処理マップに追加され(ブロック909)、クローンが複製される(ブロック912)。
もし、クローンがスナップショットファイルであり(ブロック902;NO)、かつ、最後のクローンでなく(ブロック906;NO)、かつ、全てのキューが満杯(フル)でない場合(ブロック908;NO)、子0を始めとしてクローンの子を複製するために、SPAWN(clone,0)作業項目が未処理マップに追加され(ブロック910)、SFの残りのクローンを複製するために、SPAWN(SF,refOffset+1)作業項目がクローンキューに追加され(ブロック911)、クローンが複製される(ブロック912)。
3.3.4.「ACTIVE」作業項目
ファイバは、クローンキューから「ACTIVE」作業項目を取得すると、リソースに余裕があってある程度の並列処理が可能な間、上記ファイバは、深さ優先型走査に続いて、ルートスナップショットファイルツリー内のオブジェクトの複製処理を継続するであろう。もし、複製対象のクローンがスナップショットファイルであり、かつ、キューが空きエントリを有する場合には、該スナップショットファイルは、そのツリーを複製するための作業項目を別途、未処理マップに追加する
「ACTIVE」作業項目は、部分的に複製されたスナップショットファイルツリーを完全に複製するのに必要な情報を含む。該情報は、以下の情報を含む:
1.スナップショットファイルSF[0]、その参照数、参照リスト、及び参照オフセットrefOffset[0];
2.複製されているブランチのスナップショットファイルSF[n]、その参照数、参照リスト、及び参照オフセットrefOffset[n]
ここで、上記作業項目により複製されるクローンは、スナップショットファイルSF[n]のクローン番号refOffset[n]を有する。
以下では、説明の便宜上、「ACTIVE」作業項目は、ACTIVE(SF[0],refOffset[0],SF[n],refOffset[n])と表すものとする。ACTIVE(SF[0],refOffset[0],SF[n],refOffset[n])作業項目は、以下の様に処理される:
1.クローンが通常のファイルであり、かつ、最後のクローンでない場合、ACTIVE(SF[0],refOffset[0],SF[n],refOffset[n]+1)作業項目をクローンキューに追加する。
2.クローンが通常のファイルであり、かつ、最後のクローンである場合、SF[n]に介在する親に対して同様の処理を、下記aまたはbが満たされるまで、繰り返し実行する:
a.SF[0]への到達(このことは、SF[0]の全体が複製されたために、作業項目の生成が一切不要となったことを意味する)
b.スナップショットファイルSF[i−1]の最後のクローンではないスナップショットファイルSF[i]の検知(ここで、0<i<n)
もし、SF[i]がSF[0]の直接クローンである場合、SF[i]は、SPAWN(SF[0],refOffset[0]+1)をキューに追加する。あるいは、SF[i−1]が既に複製されていた時には、SF[i]は、ACTIVE(SF[0],refOffset[0],SF[i−1],refOffset[i−1]+1)作業項目をキューに追加する。
3.クローンがスナップショットファイルであり、かつ、キューが満杯(フル)である場合、ACTIVE(SF[0],refOffset[0],clone,0)作業項目を未処理マップに追加する。
4.クローンがスナップショットファイルであり、かつ、キューが空きエントリを有する場合、SPAWN(clone,0)を未処理マップに追加すると共に、SF[n]に介在する親に対して同様の処理を、下記aまたはbが満たされるまで、繰り返し実行する:
a.SF[0]への到達(このことは、SF[0]の全体が複製されたために、作業項目の生成が一切不要となったことを意味する)
b.スナップショットファイルSF[i−1]の最後のクローンではないスナップショットファイルSF[i]の検知(ここで、0<i<n)
もし、SF[i]がSF[0]の直接クローンである場合、SF[i]は、SPAWN(SF[0],refOffset[0]+1)をキューに追加する。あるいは、SF[i−1]が既に複製されていた時には、SF[i]は、ACTIVE(SF[0],refOffset[0],SF[i−1],refOffset[i−1]+1)作業項目をキューに追加する。
5.クローンを複製する。
例示的な一実施形態では、後継オブジェクトまたはSF[n]が複製される度に、イーノード及びSF[n]の参照リストが読み出されることを避けるために、後継オブジェクト及びその参照数のリストがキャッシュされる。
図14は、例示的な一実施形態に係る「ACTIVE」作業項目を説明するための状態図である。
もし、クローンが通常ファイルであり(ブロック1002;YES)、かつ、最後のクローンでない場合(反復変数「i」が初期化されるブロック1010経由のブロック1012;NO)、ACTIVE(SF[0],refOffset[0],SF[n],refOffset[n]+1)作業項目がクローンキューに追加される(ブロック1022)。そして、上記クローンは複製される(ブロック1024)。
もし、クローンが通常ファイルであり(ブロック1002;YES)、かつ、最後のクローンである場合(反復変数「i」が初期化されるブロック1010経由のブロック1012;YES)、論理回路は、SF[0]の直接クローンSF[1]へ到達する(ブロック1016;YES)、あるいは、スナップショットファイルSF[i−1]の最後のクローンではないスナップショットファイルSF[i](ここで、1<i<n)が検知される(ブロック1012;NO)まで、SF[n]に介在する親に対して同様の処理を、繰り返し実行する(ブロック1014、1016、1012)。もし、SF[0]の直接クローンSF[1]へ到達した場合(ブロック1016;YES)において、SF[1]がSF[0]の最後のクローンでない場合(ブロック1018;NO)には、SPAWN(SF[0],refOffset[0]+1)作業項目がキューに追加される(ブロック1020)。そして、上記クローンは複製される(ブロック1024);あるいは、SF[1]がSF[0]の最後のクローンである場合(ブロック1018;YES)にも、上記クローンは複製される(ブロック1024)。代わりに、もし、スナップショットファイルSF[i−1]の最後のクローンではないスナップショットファイルSF[i](ここで、1<i<n)が検知された場合(ブロック1012;NO)には、ACTIVE(SF[0],refOffset[0],SF[i−1],refOffset[i−1]+1)作業項目がキューに追加される(ブロック1022)。そして、上記クローンは複製される(ブロック1024)。
もし、クローンがスナップショットファイルであり(ブロック1002;NO)、かつ、キューが満杯(フル)である場合(ブロック1004;YES)、ACTIVE(SF[0],refOffset[0],clone,0)作業項目が未処理マップに追加される(ブロック1006)。そして、上記クローンは複製される(ブロック1024)。
もし、クローンがスナップショットファイルであり(ブロック1002;NO)、かつ、キューが空きエントリを有する場合(ブロック1004;NO)、SPAWN(clone,0)作業項目が未処理マップに追加される(ブロック1008)。その後、(反復変数「i」が初期化されるブロック1010を経由して)、上記論理回路は、SF[0]の直接クローンSF[1]へ到達する(ブロック1016;YES)、あるいは、スナップショットファイルSF[i−1]の最後のクローンではないスナップショットファイルSF[i](ここで、1<i<n)が検知される(ブロック1012;NO)まで、SF[n]に介在する親に対して同様の処理を、繰り返し実行する(ブロック1014、1016、1012)。もし、SF[0]の直接クローンSF[1]へ到達した場合(ブロック1016;YES)において、SF[1]がSF[0]の最後のクローンでない場合(ブロック1018;NO)には、SPAWN(SF[0],refOffset[0]+1)作業項目がキューに追加される(ブロック1020)。そして、上記クローンは複製される(ブロック1024);あるいは、SF[1]がSF[0]の最後のクローンである場合(ブロック1018;YES)にも、上記クローンは複製される(ブロック1024)。代わりに、もし、スナップショットファイルSF[i−1]の最後のクローンではないスナップショットファイルSF[i](ここで、1<i<n)が検知された場合(ブロック1012;NO)には、ACTIVE(SF[0],refOffset[0],SF[i−1],refOffset[i−1]+1)作業項目がキューに追加される(ブロック1022)。そして、上記クローンは複製される(ブロック1024)。
3.3.5.「変更」作業項目
「変更」作業項目は、ターゲットファイルシステムに既に複製されたが前のスナップショット以降に変化したオブジェクトに適用される。ライブファイルシステム上での通常のファイルクローンオブジェクトへの変更は、以下の事柄に起因して起こる:
1.全てのユーザ/メタデータのブロックが分岐される時におけるオブジェクトのデクローニング(このことは、オブジェクトが最後のクローンであった場合には、親スナップショットファイルの削除という結果をもたらし得る);
2.親の変更:
a.スナップショットファイルツリーが簡易化された場合。その参照数が1まで減少すると、中間のスナップショットファイルが削除される。この場合のクローンチェックポイント番号は、前のスナップショットのチェックポイント番号未満である;あるいは、
b.クローンがデクローンされた後に、再びクローン化された場合。この場合のクローンチェックポイント番号は、前のスナップショットのチェックポイント番号以上である;
3.通常のファイルオブジェクトであるソースデータストリームのクローニング。これにより、2つの新たなオブジェクト、すなわち、スナップショットファイル及び新規クローンが生成される。上記ソースデータストリームは、上記スナップショットファイルのクローンになり、前のスナップショットのチェックポイント番号以上であるクローンチェックポイント番号を有する;あるいは、
4.オブジェクトの追加のユーザ/メタデータのブロックの単純な分岐。この場合のクローンチェックポイント番号は、前のスナップショットのチェックポイント番号未満である。
上記ターゲットファイルシステムに既に複製されたソースデータストリームがクローン化されると、以下に示す様に、スナップショットファイル及びクローンオブジェクトが生成される
SFへのソース<+ソース

+クローン
この場合、間接オブジェクトをスキャンする時、間接オブジェクトスキャナファイバは、ソースを変更オブジェクトとみなし、該オブジェクトのための「変更」作業項目を追加すると共に、SFを新規オブジェクトとみなし、クローンを新規オブジェクトとみなす。しかしながら、この場合、ソースは、SFの複製処理の一部として複製されるべきであるため、ソースのための「変更」作業項目を実行しているリーダファイバは、以下に記載する様に、ソースの複製処理を開始しないであろう。上記リーダファイバは、ソースのクローンチェックポイント番号をチェックすることにより、ソースがソースデータストリームであると判定することができる。すなわち、上記クローンチェックポイント番号が、前のファイルシステムのスナップショットのチェックポイント番号よりも大きい場合、ソースはソースデータストリームである。
チャンクキューからの「変更」作業項目を処理する際、状態遷移が検知され、具体的には以下の様な処理が実行される:
1.非クローンの通常ファイルオブジェクトが前のスナップショット内のクローンであった場合、オブジェクトはデクローンされる。その様なオブジェクトはディープコピーされる、すなわち、ユーザ/メタデータのブロックの全てが複製される。
2.オブジェクトのクローンチェックポイント番号が、前のスナップショットのチェックポイント番号よりも大きい場合:
・親スナップショットファイルが新規オブジェクトである場合、該オブジェクトは、上記ソースデータストリームであったクローン、または、デクローンされた後にクローン化されたクローンの何れかである。何れの場合も、上記オブジェクトは、親スナップショットファイルの複製処理の一部として、ゼロから複製されるであろう。この様なオブジェクトの複製処理は、加工ファイバにより省略される。
更に別の方法では、上記オブジェクトは、ターゲット上で再生成される。この処理は、クローンが部分的にクローン化された時に前のスナップショットが取得された場合、すなわち、スナップショットファイルが前のスナップショット内で生成されたが、クローンはその後にクローン化された場合に、実行可能である。
3.もし、上記オブジェクトが、前のスナップショットのチェックポイント番号未満のクローンチェックポイント番号を有し、前のスナップショットとは異なる親を有するクローンである場合、該クローンの親は変更されている。新たな親から分岐された全てのユーザ/メタデータのブロックが複製される。
4.あるいは、上記オブジェクトがクローンである場合、該オブジェクトは、更に分岐されたクローンであり、他のオブジェクトの様に複製される。この場合、変更され分岐されたユーザ/メタデータのブロックのみが複製される。
上記ターゲットファイルシステムとは異なり、上記1〜3に示した特定のケースの幾つかは、ライブファイルシステム上のオブジェクト間における、ユーザ/メタデータのブロックのある程度の移動を含む。
例えば、スナップショットファイルツリーが簡易化される場合、削除された中間の親が有していたユーザ/メタデータのブロックは、上記クローンに移動される。もし、その様なユーザ/メタデータのブロックが、前のスナップショットから変化していない場合には、該ブロックは、移動される代わりに再利用され、上記ターゲットファイルシステム上の新たな領域に書き込まれるものとしてもよい。
また、上記オブジェクトがソースデータストリームである場合、そのユーザ/メタデータのブロックは、該オブジェクトがクローン化したスナップショットファイルに移動される。これらのユーザ/メタデータのブロックが、前のスナップショットから変化していない場合には、該ブロックは、移動される代わりに再利用され、上記ターゲットファイルシステム上の新たな領域に書き込まれるものとしてもよい。
なお、上述した追加的な処理は、システムの状態の最適化し得るが、全体の効果を常に向上するとは限らない。
図15は、例示的な一実施形態に係る「変更」作業項目を説明するための状態図である。
もし、クローンチェックポイント番号(CCP)が、前のスナップショットのチェックポイント番号よりも大きく(ブロック1102;YES)、かつ、親スナップショットファイルが新規オブジェクトである場合(ブロック1104;YES)には、該オブジェクトは、親スナップショットファイルの複製処理の一部として、ゼロから複製されるであろう。このため、該オブジェクトの複製処理は、加工ファイバにより省略される(ブロック1106)。
もし、クローンチェックポイント番号(CCP)が、前のスナップショットのチェックポイント番号よりも大きく(ブロック1102;YES)、かつ、親スナップショットファイルが新規オブジェクトでない場合(ブロック1104;NO)には、該オブジェクトの全体が、上記ターゲットファイルシステム上で複製される。
もし、クローンチェックポイント番号(CCP)が、前のスナップショットのチェックポイント番号以下であり(ブロック1102;NO)、かつ、オブジェクトが通常のファイルでない場合(ブロック1110;NO)には、該オブジェクトは複製される(ブロック1122)。
もし、クローンチェックポイント番号(CCP)が、前のスナップショットのチェックポイント番号以下であり(ブロック1102;NO)、かつ、オブジェクトが通常のファイルのクローンでない場合(ブロック1110;YES、ブロック1112;NO)において、該オブジェクトが、前のスナップショット内のクローンであった場合(ブロック1118;YES)には、該オブジェクトはディープコピーされる(ブロック1120)。一方、そうでない場合(ブロック1118;NO)には、該オブジェクトは複製される(ブロック1122)。
もし、クローンチェックポイント番号(CCP)が、前のスナップショットのチェックポイント番号以下であり(ブロック1102;NO)、かつ、オブジェクトが通常のファイルのクローンである場合(ブロック1110;YES、ブロック1112;YES)において、該オブジェクトの親が変更された場合(ブロック1114;YES)には、分岐された全てのブロックが複製される(ブロック1116)。一方、そうでない場合(ブロック1114;NO)には、該オブジェクトが複製される(ブロック1122)。
4.幾つかの可能な最適化
4.1.デクローンされたクローンの検出
「Was A Clone」フラグは、(例えば、イーノード情報に追加されることにより)、通常のファイルタイプのオブジェクトが過去においてクローンであったか否かを示すために使用することができる。このフラグは、クローンが最初にデクローンされる時に設定される。特に、このフラグを用いることで、オブジェクトが、クローンではなかった通常のファイルオブジェクトのクローンであったか否かをチェックするための、前のスナップショット内のSMOのイーノードの読み出しが回避される。
4.2.クローンの親の変化の検出
クローンの親が最後に変化したチェックポイント番号は、上記クローンのSMOのイーノード内に保持可能である。このチェックポイント番号が前のスナップショットのチェックポイント番号よりも大きい場合、このことは、前のスナップショット以降に親の変化が起きたことを意味する。特に、これにより、前のスナップショット以降に変化した親をもたなかったクローンのための、前のスナップショット内のSMOのイーノードの読み出しが回避される。
4.3.スナップショットファイルの複製の調整
可能な最適化の一つは、クローンキュー内の作業項目の優先順位を決めることであり得、(refCount−refOffset)の様なrefOffsetが最小となる位置において、後継オブジェクトの複製を含む作業項目から始めることにより実現される。ここで、refCountは、親スナップショットファイルの参照数である。
可能な他の最適化は、(クローンキューを除く)チャンクキュー内のスナップショットファイルの複製を含まない作業項目を優先することであり得る。これらの作業項目は、オブジェクトタイプをチェックすることにより容易に特定可能である。この方法は、作業項目の数がある特定の限度(例えば、キューの総容量/動的複製の数/8,初期値512)に達した時に、未処理マップ内の作業項目の数を制御するために使用することができる。
4.4.前のスナップショット内にソースデータストリームが存在する場合
複製処理中に、親をもたない新たなスナップショットを生成すると、オブジェクトは、より古いスナップショット内のソースデータストリームの存在下において、如何なる重複データも再利用することなく、その全体が複製される。このことは、上記ソースデータストリームを有する共有データの全てが、ソースからターゲットに送信されているため、双方のエンド間に不要なトラフィックが発生していることを意味する。
最悪のケースは、上記古いスナップショット以降にソースデータストリームが変化しなかったが故に、スナップショットファイルから分岐しなかった場合である。この場合、スナップショットファイルを生成するために、上記ソースデータストリームの全てのデータが、ターゲットに再び書き込まれ、その後、上記ソースデータストリームから切り捨てられる。
上記ケースは、上記古いスナップショット内のソースデータストリームを特定し、該ソースデータストリームをスナップショットファイルの生成に使用することで、最適化が可能である。
各スナップショットファイルは、自ファイルを参照しているオブジェクトのリストを保持する。上記ソースデータストリームは、スナップショットファイルを参照するための第1のオブジェクトであるので、最初にリストに追加される。このことは、ターゲットファイルシステムの場合(すなわち、ターゲットファイルシステム)には必ずしも成立せず、上記ソースデータストリームは、スナップショットファイルの後に生成され得るため、参照リストの何処かに追加可能である。
しかしながら、上記ケースは、最適化が適用される時とは関連付けられていないため、上記ソースデータストリームは、スナップショットファイルではなく、古いスナップショット内に存在する。これにより、上記スナップショットファイルが、上記ソースファイルシステム内で最初に生成されたことが確認される。
従って、参照リスト内の最初のオブジェクトを取得して、生成チェックポイント番号を古いスナップショットのチェックポイント番号と比較することにより、該古いスナップショット内に上記最初のオブジェクトが既に存在することを確認するだけで十分である。
もし、上記ソースデータストリームが、現在のスナップショット内で削除されたか、スナップショットファイルから完全に分岐した場合には、たとえ上記古いスナップショット上に存在していたとしても、その位置を特定することはできないことに留意すべきである。
もし、上記ソースデータストリームが特定され、上記古いスナップショット内に存在する場合には、以下の様にして、スナップショットファイルの生成を最適化することができる:
現在のスナップショット内のスナップショットファイル及び古いスナップショット内のソースデータストリーム間におけるデータブロックの変化(差異)を推定する。
上記ソースデータストリームが上記スナップショットファイルと一致する様に、ターゲット上の上記差異に対してソースデータストリームを適用する。これにより、ターゲット上のソースデータストリームは、クローン化された状態となる。
スナップショットファイルを生成し、上記ソースデータストリームを結合させる。
現在のスナップショット内のソースデータストリーム及びスナップショットファイル間におけるデータブロックの変化(差異)を推定し、ターゲット上のソースデータストリームに該変化を書き込む。これにより、上記ターゲット上のソースデータストリームの分岐されたデータブロックが生成される。
もし、スナップショットファイルの参照リストの順序がソフトウェア内で変化した場合、リスト全体を検索する必要が生じることに留意されたい。さもないと、最適化は容易には適用されない。
また、かかる最適化処理は、上記ターゲット上に上記ソースデータストリームが既に存在する場合にまで、該ソースデータストリームを生成しようとすることを回避する。しかしながら、かかる最適化処理は、ソースデータストリームがスナップショットファイルから大量に分岐した場合には、ソース及びターゲット間に不要なトラフィックを生じさせるため、非効率的である。最悪のケースとなるのは、古いスナップショットと、ソースデータストリームがクローン化された後、該古いスナップショット内のソースデータストリームの状態と一致させるために元に戻された時との間で、上記ソースデータストリームが大きく変化した場合である。この場合、上記スナップショットファイルを単純に書き込む代わりに、ソースデータストリームを変更し、スナップショットファイルと一致させて最初の状態に戻すこととなる。しかしながら、このケースはあまり一般的ではない。
通常は、クローンがスナップショットファイルから大量に分岐することはないので、上記最適化処理を実行することは、依然として有益であり得る。また、ソースデータストリームがスナップショットファイルからどの程度分岐したかを把握することは、最適化を適用すべきか否かの判断にも役立つ。
5.代替的なクローンの複製方法
5.1.クローン/スナップショットファイルオブジェクト及び親の複製
親を有するクローンまたはスナップショットファイルを複製する際、ソースは、該複製を行うケースにおいて、参照するスナップショットファイルが古いスナップショット内に既に存在するか否かを検査する。さもないと、上記ソースは、複製された親またはルートを有するオブジェクトを見付けるまで、親スナップショットファイルの複製処理を繰り返してしまうこととなる。その後、上記ソースは、最後に見付けられたオブジェクトを始点として、引き続き、スナップショットファイルの複製を開始する。上記クローンは、複製対象となる最後のオブジェクトである。
要求された全てのスナップショットファイルの親を順次複製する間に、間接オブジェクトのスキャン処理が遮断されない様に、上記ソースは、クローン及びスナップショットファイルの各オブジェクトの生成に際して、各々独立したキューを保持する必要がある。
スナップショットファイルが複数の後継オブジェクトをもつことができる様に、複製する必要のあるスナップショットファイルの親の記録をリスト内に保持することが必要となる。複製すべき親の数が多い場合には、該リストは、メモリリソースの相当量を使用することとなる。
上記処理中に生成された全てのスナップショットファイルは、間接オブジェクト内のこれらのエントリがスキャンされる場合、後の複製処理中にも見付けられることとなる。この場合、少なくとも以下の2つの方法による対処が可能である:
1.現在の複製セッション中にスナップショットファイルが既に複製された場合には、上記ソースは、ターゲットに問合せを行うことができる。これにより、ソース及びターゲット間に追加のトラフィックが発生する。
2.上記ソースは、スナップショットファイルオブジェクトの複製を試行し、該オブジェクトを生成するための問合せを送信する。上記ターゲットは、該オブジェクトが既に生成されていることを検知し、エラーを返信する。これによっても、双方のエンド間にオーバヘッドトラフィックが発生する。
5.2.マルチパス複製
この方法は、複数のパス内で複製を実行するものであり、各パスでの変化を見付けるために間接オブジェクトがスキャンされる。
第1のパスでは、ソースは、上記複製を行うケースにおいて、クローンまたはスナップショットファイルの親が古いスナップショット内に既に存在するか否かをチェックする。あるいは、ソースは、上記親の複製処理を省略するものとしてもよい。
第2のパスでは、古いスナップショット内に存在しない親を有するクローンまたはスナップショットファイルのオブジェクトだけが、考慮される。ソースは、複製された親またはルートを有するオブジェクトを見付けるまで、全ての親スナップショットファイルの複製処理を繰り返し実行する。現時点では、上記オブジェクトが第1のパスにおいて複製されているため、上記ソースは、精査されているブランチにおけるすぐ次の後継オブジェクトを複製する。
上記複製処理は、残りの全てのクローン及びスナップショットファイルのオブジェクトを複製するために、複数のパスにおいて実行される。各パスNでは、各スナップショットファイルブランチ内の深さD−N+1のオブジェクトだけが生成される。ここで、Dは、上記精査されているブランチにおけるオブジェクトの位置である。
各パスでは、複製セッションを完了するために複製すべき残りのパス及びオブジェクトの数を推計することが可能である。
上述の方法では、間接オブジェクトをスキャンし、スナップショットファイルツリーのブランチを各パスにおいて精査するための、かなりの追加的な処理が要求される。
パスNでは、例えば、スナップショットファイルが複数のクローンをもつ場合、同じスナップショットファイルが、複数のブランチにおいて、位置D−N+1をもつことが起こり得る。これにより、スナップショットファイルの複製処理が、複数回試行されることがある。このことは、現行のパスにおいて複製されているスナップショットファイルの記録を保持することにより、回避することができる。
5.3.2段階複製
この場合、複製処理は、2つの部分に分けて実行される:
1.1つ目の部分は、変更された全てのスナップショットファイル及びクローンのオブジェクトが複製される部分である。ルートスナップショットファイルは、間接オブジェクトのスキャン中に特定される。スナップショットファイルツリーの各々は、ルートから始まる変化、及びこの順番でターゲットに複製された全ての変化を見付けるためにスキャンされる。
2.2つ目の部分は、クローン及びスナップショットファイルのオブジェクトを除いた通常の複製部分である。
上記2つの複製部分は、単独のルートスナップショットファイルをスキャンするために使用される複数のファイバにより並列に実行可能である。上記ソースは、クローン及びスナップショットファイルの各オブジェクトの生成に際して、各々独立したキューを保持する必要がある。しかしながら、この方法では、間接オブジェクトを2度に渡りスキャンすることとなる。
5.4.ターゲット内で実行される複製
様々な変形態様において、複製処理は、上述した多様な複製技術に従い、幾つかまたは全ての新規スナップショットをターゲットに送信するソース、及び、ソースとの間で更なる交信を実質的に行うことなく複製処理を実行するターゲットにより、実行されるものとしてもよい。
6.その他について
なお、図中の矢印は、通信、移動、または、2つ以上のエンティティに関わる他の動作を表すために使用されることがある。幾つかの状況では、必ずしも双方向に動作が起きないこともあるが、両端矢印は、一般的に、動作が双方向(例えば、ある方向がコマンド/リクエストの場合における他の方向の返信応答、あるいは、何れか一方のエンティティによって開始されるピアツーピア通信)に起き得ることを示す。特定の状況では、単方向の動作が実際には双方向の動作(例えば、送信者から受信者へのメッセージ及び受信者から送信者への肯定応答、あるいは、転送前のコネクション確立及び転送後のコネクション終了)を含むこともあることに留意されたいが、一端矢印は、一般的に、全てまたは殆どの動作が単方向に起きることを示す。この様に、特定の動作を表すために特定の図面において使用される矢印の種類は、あくまで例示に過ぎず、これらに限定されるものではない。
また、上記では、説明の便宜上、見出し(表題)を用いたが、これらの見出しにより、本願発明は決して限定的に解釈されないことに留意されたい。
用語「サーバ」及び「プロセッサ」は、本発明の特定の実施形態で使用される可能性のあるデバイスを記述するのに本明細書で使用することができ、文脈がそれ以外の解釈を要求しない限り、本発明を、任意の特定のデバイスタイプに限定するものと解釈すべきではないことに留意されたい。従って、デバイスは、限定されずに、ブリッジ、ルータ、ブリッジ−ルータ(ブルータ)、スイッチ、ノード、サーバ、コンピュータ、付属機器、または他のタイプのデバイスを含むことができる。この様なデバイスは典型的には、通信ネットワークによって通信するための1以上のネットワークインタフェース、及び、デバイスの機能を果たす様にこれに従って構成されたプロセッサ(例えば、メモリ並びに他の周辺装置及び/または特定用途のハードウェアを備えたマイクロプロセッサ)を含む。通信ネットワークは一般的に、パブリック及び/またはプライベートネットワークを含むことができ;ローカルエリア、ワイドエリア、首都圏エリア、ストレージ及び/または他のタイプのネットワークを含むことができ;以下の技術に限定されるものではないが、アナログ技術、デジタル技術、光技術、無線技術(例えば、ブルートゥース)、ネットワーキング技術、及びインターネットワーキング技術を含めた通信技術を利用することができる。
デバイスは、通信プロトコル、及び、(例えば、このデバイスによって生成された、送信された、受信された、記憶された及び/または処理された)メッセージを使用する場合があり、この様なメッセージは、通信ネットワークまたは通信媒体によって伝えることができることにも留意されたい。文脈がそうでないことを要求しない限り、本発明は、任意の特定の通信メッセージタイプ、通信メッセージフォーマットまたは通信プロトコルに限定されるものと解釈すべきではない。従って、通信メッセージは一般的に、限定されることなく、フレーム、パケット、データグラム、ユーザデータグラム、セルまたは他のタイプの通信メッセージを含むことができる。文脈がそうでないことを要求しない限り、特定の通信プロトコルの記載は例示的なものであり、代替的な実施形態は、必要に応じて、様々な種類(例えば、その時々に形成され得るプロトコルの修正形態または拡張形態)の上記通信プロトコル、あるいは、将来知られるまたは開発される他のプロトコルを利用することができる、ことを理解されたい。
また、論理の流れは、本発明の様々な態様を実証するために本明細書に記載されてもよく、本発明は、任意の特定の論理の流れまたは論理の実施に限定されるものと解釈すべきではないことに留意されたい。記載された論理は、全体としての結果を変えることなく、あるいはそうでければ、本発明の真の範囲から逸脱することなく、様々な論理ブロック(例えば、プログラム、モジュール、ファンクションまたはサブルーチン)に分割することができる。多くの場合、論理要素は、全体としての結果を変えることなく、あるいはそうでければ、本発明の真の範囲から逸脱することなく、様々な順番で追加され、変更され、省略され、実行され、あるいは種々の論理構造(例えば、論理ゲート、ルーピングプリミティブ、条件付きロジック、及び他の論理構造)を使用して実施されることができる。
本発明は、多くの異なる形態により具現化することができ、これらの形態には、以下の例示に限定されるものではないが、プロセッサ(例えば、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、または汎用コンピュータ)と共に使用するためのコンピュータプログラム論理、プログラマブル論理デバイス(例えば、フィールドプログラマブルゲートアレイ(FPGA)または他のPLD)と共に使用するためのプログラマブル論理、個別の要素、集積回路(例えば、特定用途向け集積回路(ASIC))、あるいは、これらの何れかの組合せを含む任意の他の手段が含まれる。記載された機能の一部または全部を実現するコンピュータプログラム論理は典型的には、コンピュータプログラムの指示のセットとして実行され、このセットは、コンピュータが実行可能な形態に変換され、コンピュータ読み取り可能な媒体にその形態で記憶され、OS(オペレーティングシステム)による制御の基にマイクロプロセッサによって実行される。記載された機能の一部または全部を実現するハードウェアベースの論理は、適切に構成された1以上のFPGAを用いて実行される場合もある。
本明細書において上述された機能の一部または全部を実現するコンピュータプログラム論理は、種々の形態により具現化することができ、これらの形態には、以下の例示に限定されるものではないが、ソースコード形態、コンピュータの実行可能な形態、及び種々の中間形態(例えば、アセンブラ、コンパイラ、リンカー、またはロケータによって形成される形態)が含まれる。ソースコードは、種々のOSまたは動作環境にて使用するための様々なプログラミング言語(例えば、オブジェクトコード、アセンブリ言語、あるいは、フォートラン、C、C++、JAVA、またはHTML等のハイレベル言語)の何れかにより実行される一連のコンピュータプログラムの指示を含むものとしてもよい。上記ソースコードは、種々のデータ構造及び通信メッセージを定義して利用することができる。上記ソースコードは、(例えば、インタプリタを介して)コンピュータの実行可能な形態であってもよい、あるいは上記ソースコードは、コンピュータの実行可能な形態に(例えば、トランスレータ、アセンブラ、またはコンパイラを介して)変換されるものとしてもよい。
本明細書において上述された機能の一部または全部を実現するコンピュータプログラム論理は、それぞれ異なる時に単独のプロセッサにおいて実行することができる(例えば、同時発生的に)、あるいは同一のまたは異なる時に複数のプロセッサにおいて実行することができる。また、上記コンピュータプログラム論理は、単独のOSのプロセス/スレッドの下において、または異なるOSのプロセス/スレッドの下において実行することができる。従って、用語「コンピュータプロセス」は一般的に、コンピュータプログラムの指示のセットの実行を表す。このことは、異なるコンピュータプロセスが、同一のプロセッサ上で実行されるか、または、異なるプロセッサ上で実行されるかとは関係が無く、また、異なるコンピュータプロセスが、同一のOSのプロセス/スレッドの下において実行されるか、または、異なるOSのプロセス/スレッドの下において実行されるかとは関係が無い。
上記コンピュータプログラムは、任意の形態(例えば、ソースコード形態、コンピュータの実行可能な形態、または中間形態)で、実在する記憶媒体に永久的にまたは一時的に固定することができる。この記憶媒体は、例えば、半導体メモリデバイス(例えば、RAM、ROM、PROM、EEPROM、またはフラッシュプログラマブルRAM)、磁気メモリデバイス(例えば、ディスケットまたは固定ディスク)、光メモリデバイス(例えば、CD−ROM)、PCカード(例えば、PCMCIAカード)、または、他のメモリデバイス等である。上記コンピュータプログラムは、任意の形態で、信号内に固定することができる。この信号は、種々の通信技術の何れかを使用してコンピュータに転送可能であり、この通信技術には、以下の例示に限定されるものではないが、アナログ技術、デジタル技術、光技術、無線技術(例えば、ブルートゥース)、ネットワーキング技術、及びインターネットワーキング技術が含まれる。上記コンピュータプログラムは、印刷または電子化された文書が添付された可搬性の記憶媒体(例えば、収縮包装されたソフトウェア)として、任意の形態で提供される、コンピュータシステムと共に予めロードされる(例えば、システムROMまたは固定ディスク上に)、あるいは、サーバまたは電子掲示板から通信システム(例えば、インターネットまたはワールドワイドウェブ)を介して提供されるものとしてもよい。
本明細書において上述された機能の一部または全部を実現するハードウェア論理(プログラマブル論理デバイスと共に使用するためのプログラマブル論理を含む)は、従来の手動式の方法を用いて設計することができる。あるいは、上記ハードウェア論理は、種々のツールを用いて電子式に設計され、保存され、シミュレートされ、または文書化されてもよく、このツールには、例えば、コンピュータ支援設計(CAD)、ハードウェア記述言語(例えば、VHDLまたはAHDL)、またはPLDプログラミング言語(例えば、PALASM、ABELまたはCUPL)等が含まれる。
プログラマブル論理は、実在する記憶媒体に永久的にまたは一時的に固定することができる。この記憶媒体は、例えば、半導体メモリデバイス(例えば、RAM、ROM、PROM、EEPROM、またはフラッシュプログラマブルRAM)、磁気メモリデバイス(例えば、ディスケットまたは固定ディスク)、光メモリデバイス(例えば、CD−ROM)、または、他のメモリデバイス等である。上記プログラマブル論理は、信号内に固定することができる。この信号は、種々の通信技術の何れかを使用してコンピュータに転送可能であり、この通信技術には、以下の例示に限定されるものではないが、アナログ技術、デジタル技術、光技術、無線技術(例えば、ブルートゥース)、ネットワーキング技術、及びインターネットワーキング技術が含まれる。上記プログラマブル論理は、印刷または電子化された文書が添付された可搬性の記憶媒体(例えば、収縮包装されたソフトウェア)として、任意の形態で提供される、コンピュータシステムと共に予めロードされる(例えば、システムROMまたは固定ディスク上に)、あるいは、サーバまたは電子掲示板から通信システム(例えば、インターネットまたはワールドワイドウェブ)を介して提供されるものとしてもよい。当然のことながら、本発明の実施形態の幾つかは、ソフトウェア(例えば、コンピュータプログラム製品)及びハードウェアの双方を組み合せたものとして、実施される場合もある。本発明の更に別の実施形態は、もっぱらハードウェアとして、または、もっぱらソフトウェアとして実施される。
本発明は、本発明の真の範囲から逸脱することなく、他の特定の形態により具現化されることもある。本発明に多くの変形や改良が可能であることは、本明細書の記載から、当業者にとって明らかであろう。「本発明」に対する如何なる言及も、本発明の例示的な実施形態を指すことが意図されたものであり、文脈がそうでないことを要求しない限り、本発明の全ての実施形態を指すものと解釈されるべきではない。記載された実施形態は、全ての点において、限定ではなく例示としてのみ、みなされるべきである。

Claims (20)

  1. データストレージシステムにおいて、ソースファイルシステムからターゲットファイルシステムへクローンオブジェクトを複製する方法であって:
    前記クローンオブジェクトが前記ソースファイルシステム内の変更オブジェクトである場合、前記ソースファイルシステムから前記ターゲットファイルシステムへ前記クローンオブジェクトを複製する処理を含み、
    該複製する処理は:
    前記クローンオブジェクトが新たに生成されたクローンオブジェクトである場合:
    前記ソースファイルシステムから前記ターゲットファイルシステムへ予め複製されたクローンオブジェクトに関連する、(a)前記ソースファイルシステムからのメタデータ、及び(b)親スナップショットファイルオブジェクトに基づいて、前記ターゲットファイルシステム内のクローンオブジェクトを生成し、
    前記ターゲットファイルシステム内のクローンオブジェクトの生成処理は、前記ターゲットファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号が、前記親スナップショットファイルオブジェクトのブロックのチェックポイント番号よりも確実に大きくなる様にし;
    前記ソースファイルシステム内のクローンオブジェクトに関連する分岐ブロックがある場合、前記クローンオブジェクトに関連する前記分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する方法。
  2. 前記ターゲットファイルシステム内の前記クローンオブジェクトを生成する処理は:
    前記クローンオブジェクトが最初に、前記親スナップショットファイルオブジェクトと共に、全てのブロックを共有する様に、前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトのクローンとして、前記クローンオブジェクトを生成する、請求項1に記載の方法。
  3. 前記ターゲットファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号が、前記親スナップショットファイルオブジェクトのブロックのチェックポイント番号よりも確実に大きくなる様にする処理は:
    前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号が、前記ターゲットファイルシステムの現在のチェックポイント番号と異なる場合、前記クローンオブジェクトのクローンチェックポイント番号を、前記現在のチェックポイント番号に設定し;
    前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号が、前記ターゲットファイルシステムの現在のチェックポイント番号と等しい場合、前記ターゲットファイルシステムの現在のチェックポイント番号を前進させるために、前記ターゲットファイルシステム内のチェックポイントを発行すると共に、前記クローンオブジェクトの前記クローンチェックポイント番号を、前進されたチェックポイント番号に設定する、請求項1に記載の方法。
  4. 前記クローンオブジェクトに関連する分岐ブロックを複製する処理は:
    前記ソースファイルシステム内の前記クローンオブジェクトのクローニング以降に変更された、前記ソースファイルシステム内のクローンオブジェクトのブロックを検出し、該検出の処理は、複数のブロックの各々に関連するチェックポイント番号を、前記ソースファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号と比較する処理を含み;
    前記クローンチェックポイント番号以上のチェックポイント番号を有するブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ、送信し;
    前記ソースファイルシステムから受信されたブロックに基づき、前記ターゲットファイルシステム内の前記クローンオブジェクトを更新する、請求項1に記載の方法。
  5. 前記ソースファイルシステムから前記ターゲットファイルシステムへ前記クローンオブジェクトを複製する処理は、更に:
    前記クローンオブジェクトが、以前の複製処理以降にクローンのプロパティを取得した前記ターゲットファイルシステムへ以前に複製されたオブジェクトであり、かつ、前記親スナップショットファイルオブジェクトが新規オブジェクトではない場合:
    前記クローンオブジェクトのために必要なメタデータ、及び該クローンオブジェクトの親スナップショットファイルオブジェクトを、前記ソースファイルシステムから前記ターゲットファイルシステムへ送信し;
    前記ソースファイルシステムからの前記メタデータ、及び前記ターゲットファイルシステム上の以前に複製された親スナップショットファイルオブジェクトに基づき、前記親スナップショットファイルオブジェクトと共に、全てのブロックを最初に共有するクローンとして、前記ターゲットファイルシステムにおいて、前記クローンオブジェクトを再生成し;
    前記ソースファイルシステム内の前記クローンオブジェクトに関連する分岐ブロックがある場合、前記クローンオブジェクトに関連する前記分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する、請求項1に記載の方法。
  6. 前記クローンオブジェクトが、以前の複製処理以降にクローンのプロパティを取得した前記ターゲットファイルシステムへ以前に複製されたオブジェクトであるか否かを判定する処理は、前記ソースファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号に基づいて行われる、請求項5に記載の方法。
  7. 前記ソースファイルシステムから前記ターゲットファイルシステムへ前記クローンオブジェクトを複製する処理は、更に:
    前記クローンオブジェクトが、前記ソースファイルシステム内の新規の親スナップショットファイルオブジェクトを有する前記ターゲットファイルシステムへ以前に複製されたクローンオブジェクトである場合、前記新規の親スナップショットファイルオブジェクトに関連する、前記ソースファイルシステム内の前記クローンオブジェクトの分岐ブロックを複製する、請求項1に記載の方法。
  8. 前記ソースファイルシステムから前記ターゲットファイルシステムへ前記クローンオブジェクトを複製する処理は、更に:
    前記クローンオブジェクトが、前記ターゲットファイルシステムへ以前に複製されたクローンオブジェクトであったが、以前の複製処理以降にデクローンされた、通常のファイルオブジェクトである場合、該通常のファイルオブジェクトの全てのユーザ/メタデータのブロックを複製することにより、前記通常のファイルオブジェクトを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する、請求項1に記載の方法。
  9. 前記クローンオブジェクトの複製に先立ち、前記親スナップショットファイルオブジェクトを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する処理を更に含み:
    前記クローンオブジェクトを複製する処理は:
    前記クローンオブジェクトの複製のための最初の作業項目を、チャンクキューに追加し;
    前記最初の作業項目を実行する処理は、前記親スナップショットファイルオブジェクトが旧オブジェクトである場合には前記クローンオブジェクトを前記ターゲットファイルシステムへ複製する一方、前記親スナップショットファイルオブジェクトが新規オブジェクトである場合には前記クローンオブジェクトを前記ターゲットファイルシステムへ複製することなく前記最初の作業項目の実行を終了することを含み;
    前記親スナップショットファイルオブジェクトを複製する処理は:
    前記親スナップショットファイルオブジェクトの複製のためのクローンキューに第1作業項目を追加し;
    前記クローンオブジェクトの後続する複製のための未処理マップに第2作業項目を追加し;
    前記第1作業項目を実行して前記親スナップショットファイルオブジェクトを複製し;
    前記親スナップショットファイルオブジェクトの前記複製の完了に伴い、前記第2作業項目を、前記未処理マップから前記クローンキューへ移動させる、請求項1に記載の方法。
  10. 前記最初の作業項目は「生成」作業項目であるか;
    前記第1作業項目は「SPAWN」作業項目であるか;
    前記第2作業項目は「SPAWN」作業項目であるか;
    前記第1作業項目は「ACTIVE」作業項目であるか;
    前記第2作業項目は「ACTIVE」作業項目であるか:の少なくとも1つである、請求項9に記載の方法。
  11. ソースファイルシステムからターゲットファイルシステムへクローンオブジェクトを複製するデータストレージシステムであって:
    ソースファイルシステム及びソースストレージプロセッサを有するソースと;
    ターゲットファイルシステム及びターゲットストレージプロセッサを有するターゲットと、を有し:
    前記ソースストレージプロセッサは:
    前記クローンオブジェクトが前記ソースファイルシステム内の変更オブジェクトである場合、前記ソースファイルシステムから前記ターゲットファイルシステムへ前記クローンオブジェクトを複製する処理を実行し、該複製する処理は、前記クローンオブジェクトが新たに生成されたクローンオブジェクトである場合、前記クローンオブジェクトのためのユーザ/メタデータを、前記ターゲットストレージプロセッサへ送信する処理を含み;
    前記ターゲットストレージプロセッサは:
    前記ソースファイルシステムから前記ターゲットファイルシステムへ予め複製された前記クローンオブジェクトに関連する、(a)前記ソースストレージプロセッサからのメタデータ、及び(b)親スナップショットファイルオブジェクトに基づいて、前記ターゲットファイルシステム内のクローンオブジェクトを生成する処理を実行し、前記ターゲットストレージプロセッサは、前記ターゲットファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号が、前記親スナップショットファイルオブジェクトのブロックのチェックポイント番号よりも確実に大きくなる様にし;
    前記ソースファイルシステム内のクローンオブジェクトに関連する分岐ブロックがある場合、前記ソースストレージプロセッサ及び前記ターゲットストレージプロセッサは、前記クローンオブジェクトに関連する前記分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する処理を更に実行するシステム。
  12. 前記ターゲットストレージプロセッサは、前記クローンオブジェクトが、前記親スナップショットファイルオブジェクトと共に、少なくとも1つのブロックを共有する様に、前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトのクローンとして、前記クローンオブジェクトを生成する、請求項11に記載のシステム。
  13. 前記ターゲットストレージプロセッサは、前記ターゲットファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号が、前記親スナップショットファイルオブジェクトのブロックのチェックポイント番号よりも確実に大きくなる様にし:
    前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号が、前記ターゲットファイルシステムの現在のチェックポイント番号と異なる場合、前記クローンオブジェクトのクローンチェックポイント番号を、前記現在のチェックポイント番号に設定し;
    前記ターゲットファイルシステム内の前記親スナップショットファイルオブジェクトの最後に変更されたチェックポイント番号が、前記ターゲットファイルシステムの現在のチェックポイント番号と等しい場合、前記ターゲットファイルシステムの現在のチェックポイント番号を前進させるために、前記ターゲットファイルシステム内のチェックポイントを発行すると共に、前記クローンオブジェクトの前記クローンチェックポイント番号を、前進されたチェックポイント番号に設定する、請求項11に記載のシステム。
  14. 前記クローンオブジェクトに関連する分岐ブロックを複製する処理は:
    前記ソースストレージプロセッサにより、前記ソースファイルシステム内の前記クローンオブジェクトのクローニング以降に変更された、前記ソースファイルシステム内のクローンオブジェクトのブロックを検出し、該検出の処理は、複数のブロックの各々に関連するチェックポイント番号を、前記ソースファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号と比較する処理を含み;
    前記ソースストレージプロセッサにより、前記クローンチェックポイント番号以上のチェックポイント番号を有するブロックを、前記ターゲットストレージプロセッサへ、送信し;
    前記ターゲットストレージプロセッサにより、前記ソースストレージプロセッサから受信されたブロックに基づき、前記ターゲットファイルシステム内の前記クローンオブジェクトを更新する、請求項11に記載のシステム。
  15. 前記ソースストレージプロセッサは更に、前記クローンオブジェクトが、以前の複製処理以降にクローンのプロパティを取得した前記ターゲットファイルシステムへ以前に複製されたオブジェクトであり、かつ、前記親スナップショットファイルオブジェクトが新規オブジェクトではない場合、前記クローンオブジェクトのために必要なメタデータ、及び該クローンオブジェクトの親スナップショットファイルオブジェクトを、前記ターゲットストレージプロセッサへ送信し;
    前記ターゲットストレージプロセッサは更に、前記ソースファイルシステムからの前記メタデータ、及び前記ターゲットファイルシステム上の以前に複製された親スナップショットファイルオブジェクトに基づき、前記親スナップショットファイルオブジェクトと共に、全てのブロックを最初に共有するクローンとして、前記ターゲットファイルシステムにおいて、前記クローンオブジェクトを再生成し;
    前記ソースファイルシステム内の前記クローンオブジェクトに関連する分岐ブロックがある場合、前記ソースストレージプロセッサ及び前記ターゲットストレージプロセッサは更に、前記クローンオブジェクトに関連する前記分岐ブロックを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製する、請求項11に記載のシステム。
  16. 前記ソースストレージプロセッサは、前記ソースファイルシステム内の前記クローンオブジェクトのクローンチェックポイント番号に基づき、前記クローンオブジェクトが、以前の複製処理以降にクローンのプロパティを取得した前記ターゲットファイルシステムへ以前に複製されたオブジェクトであるか否かを判定する、請求項15に記載のシステム。
  17. 前記ソースストレージプロセッサは更に、前記クローンオブジェクトが、前記ソースファイルシステム内の新規の親スナップショットファイルオブジェクトを有する前記ターゲットファイルシステムへ以前に複製されたクローンオブジェクトである場合、前記新規の親スナップショットファイルオブジェクトに関連する、前記ソースファイルシステム内の前記クローンオブジェクトの分岐ブロックを複製するための前記ターゲットストレージプロセッサへ、ユーザ/メタデータを送信し;
    前記ターゲットストレージプロセッサは更に、前記ユーザ/メタデータに基づき、前記ターゲットファイルシステム内の前記クローンオブジェクトの分岐ブロックを複製する、請求項11に記載のシステム。
  18. 前記ソースストレージプロセッサは更に、前記クローンオブジェクトが、前記ターゲットファイルシステムへ以前に複製されたクローンオブジェクトであったが、以前の複製処理以降にデクローンされた、通常のファイルオブジェクトである場合、前記ソースファイルシステムから前記ターゲットファイルシステムへ前記通常のファイルオブジェクトを複製するための前記ターゲットストレージプロセッサへ、全てのユーザ/メタデータのブロックを送信し;
    前記ターゲットストレージプロセッサは更に、前記ソースファイルシステムからの前記ユーザ/メタデータに基づき、前記通常のファイルオブジェクトの全てのユーザ/メタデータのブロックを複製することにより、前記通常のファイルオブジェクトを複製する、請求項11に記載のシステム。
  19. 前記ソースストレージプロセッサは更に、前記クローンオブジェクトの複製に先立ち、前記親スナップショットファイルオブジェクトを、前記ソースファイルシステムから前記ターゲットファイルシステムへ複製させ:
    前記クローンオブジェクトを複製する処理は:
    前記クローンオブジェクトの複製のための最初の作業項目を、チャンクキューに追加し;
    前記最初の作業項目を実行する処理は、前記親スナップショットファイルオブジェクトが旧オブジェクトである場合には前記クローンオブジェクトを前記ターゲットファイルシステムへ複製する一方、前記親スナップショットファイルオブジェクトが新規オブジェクトである場合には前記クローンオブジェクトを前記ターゲットファイルシステムへ複製することなく前記最初の作業項目の実行を終了することを含み;
    前記親スナップショットファイルオブジェクトを複製する処理は:
    前記親スナップショットファイルオブジェクトの複製のためのクローンキューに第1作業項目を追加し;
    前記クローンオブジェクトの後続する複製のための未処理マップに第2作業項目を追加し;
    前記第1作業項目を実行して前記親スナップショットファイルオブジェクトを複製し;
    前記親スナップショットファイルオブジェクトの前記複製の完了に伴い、前記第2作業項目を、前記未処理マップから前記クローンキューへ移動させる、請求項11に記載のシステム。
  20. 前記最初の作業項目は「生成」作業項目であるか;
    前記第1作業項目は「SPAWN」作業項目であるか;
    前記第2作業項目は「SPAWN」作業項目であるか;
    前記第1作業項目は「ACTIVE」作業項目であるか;
    前記第2作業項目は「ACTIVE」作業項目であるか:の少なくとも1つである、請求項19に記載のシステム。
JP2015559218A 2013-02-21 2013-02-21 データストレージシステムにおけるクローンオブジェクトのオブジェクトレベルでの複製 Active JP6109967B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2013/027113 WO2014130035A1 (en) 2013-02-21 2013-02-21 Object-level replication of cloned objects in a data storage system

Publications (2)

Publication Number Publication Date
JP2016512633A true JP2016512633A (ja) 2016-04-28
JP6109967B2 JP6109967B2 (ja) 2017-04-05

Family

ID=51391667

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015559218A Active JP6109967B2 (ja) 2013-02-21 2013-02-21 データストレージシステムにおけるクローンオブジェクトのオブジェクトレベルでの複製

Country Status (4)

Country Link
US (1) US10311151B2 (ja)
EP (1) EP2959373B1 (ja)
JP (1) JP6109967B2 (ja)
WO (1) WO2014130035A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11327851B2 (en) 2019-10-07 2022-05-10 Fujitsu Limited Information processing system, information processing method, and non-transitory computer-readable storage medium for storing information processing program

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10664356B1 (en) * 2013-05-30 2020-05-26 EMC IP Holding Company LLC Method and system for enabling separation of database administrator and backup administrator roles
US10860529B2 (en) * 2014-08-11 2020-12-08 Netapp Inc. System and method for planning and configuring a file system migration
US20160041996A1 (en) 2014-08-11 2016-02-11 Netapp, Inc. System and method for developing and implementing a migration plan for migrating a file system
US9449117B2 (en) * 2014-01-29 2016-09-20 Sap Se Metadata search based on semantics
US10261960B2 (en) * 2014-09-12 2019-04-16 Scality, S.A. Snapshots and forks of storage systems using distributed consistent databases implemented within an object store
US10366070B2 (en) 2015-02-20 2019-07-30 Scality S.A. Locking and I/O improvements of systems built with distributed consistent database implementations within an object store
US10248682B2 (en) 2015-02-20 2019-04-02 Scality, S.A. Object storage system capable of performing snapshots, branches and locking
EP3213504B1 (en) * 2014-10-28 2022-04-13 Hewlett-Packard Development Company, L.P. Image data segmentation
US10528602B1 (en) * 2014-12-26 2020-01-07 Veritas Technologies Llc Systems and methods for facilitating analytics on remotely stored data sets
WO2016118361A1 (en) 2015-01-23 2016-07-28 Servicenow, Inc. Distributed computing system with resource managed database cloning
US9880755B2 (en) 2015-02-25 2018-01-30 Western Digital Technologies, Inc. System and method for copy on write on an SSD
US10049121B2 (en) 2015-03-30 2018-08-14 International Business Machines Corporation Clone file backup and restore
US10055299B2 (en) 2015-03-30 2018-08-21 International Business Machines Corporation Clone file backup and restore
US9996424B2 (en) 2015-06-30 2018-06-12 International Business Machines Corporation Splitting a clone having snapshots from a parent
CN106657169B (zh) * 2015-10-28 2021-01-26 北京京东尚科信息技术有限公司 一种Redis中主从节点数据同步方法
CN106649412B (zh) * 2015-11-04 2021-05-04 阿里巴巴集团控股有限公司 一种数据处理方法和设备
CN107046811A (zh) * 2015-12-03 2017-08-15 华为技术有限公司 一种源存储设备发送源文件和源文件的克隆文件至备份存储设备的方法、源存储设备以及备份存储设备
US10296594B1 (en) 2015-12-28 2019-05-21 EMC IP Holding Company LLC Cloud-aware snapshot difference determination
US11023433B1 (en) * 2015-12-31 2021-06-01 Emc Corporation Systems and methods for bi-directional replication of cloud tiered data across incompatible clusters
US9413826B1 (en) 2016-01-11 2016-08-09 International Business Machines Corporation Concurrent file and object protocol access using space-efficient cloning
US10133743B2 (en) * 2016-02-10 2018-11-20 Dell Products L.P. Systems and methods for data migration using multi-path input/output and snapshot-based replication
US11630735B2 (en) 2016-08-26 2023-04-18 International Business Machines Corporation Advanced object replication using reduced metadata in object storage environments
US11176097B2 (en) 2016-08-26 2021-11-16 International Business Machines Corporation Accelerated deduplication block replication
US10802922B2 (en) 2016-08-26 2020-10-13 International Business Machines Corporation Accelerated deduplication block replication
US10353640B2 (en) * 2016-12-06 2019-07-16 Dell Products L.P. Seamless data migration in a clustered environment
GB201704973D0 (en) * 2017-03-28 2017-05-10 Gb Gas Holdings Ltd Data replication system
US10789205B1 (en) * 2017-04-30 2020-09-29 EMC IP Holding Company LLC Cloud data archiving using promoted objects list
CN107038260B (zh) * 2017-05-27 2020-03-10 国家计算机网络与信息安全管理中心 一种可保持titan实时数据一致性的高效并行加载方法
CN108595588B (zh) * 2018-04-19 2022-08-23 中国科学院电子学研究所苏州研究院 一种科学数据存储关联方法
US10671411B2 (en) * 2018-05-29 2020-06-02 Sap Se Cloning for object-oriented environment
JP6878369B2 (ja) * 2018-09-03 2021-05-26 株式会社日立製作所 ボリューム配置管理装置、ボリューム配置管理方法、及びボリューム配置管理プログラム
US11055010B2 (en) * 2019-09-05 2021-07-06 Microsoft Technology Licensing, Llc Data partition migration via metadata transfer and access attribute change
US11474861B1 (en) * 2019-11-27 2022-10-18 Meta Platforms Technologies, Llc Methods and systems for managing asynchronous function calls
US12111794B2 (en) * 2019-12-03 2024-10-08 Western Digital Technologies, Inc. Replication barriers for dependent data transfers between data stores
US11567899B2 (en) 2019-12-03 2023-01-31 Western Digital Technologies, Inc. Managing dependent delete operations among data stores
US11409711B2 (en) 2019-12-03 2022-08-09 Western Digital Technologies, Inc. Barriers for dependent operations among sharded data stores
US11086726B2 (en) * 2019-12-11 2021-08-10 EMC IP Holding Company LLC User-based recovery point objectives for disaster recovery
CN111752927B (zh) * 2020-06-30 2024-05-17 深圳前海微众银行股份有限公司 基于克隆的数据形态生成方法、装置、终端设备及介质
US11513899B2 (en) 2020-11-30 2022-11-29 International Business Machines Corporation Selectively capturing snapshots of volumes based on modified capacity

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6874035B1 (en) * 2000-02-02 2005-03-29 Storage Technology Corporation System and methods for transforming data from a source to target platform using snapshot
US20050240584A1 (en) * 2004-04-21 2005-10-27 Hewlett-Packard Development Company, L.P. Data protection using data distributed into snapshots
US20060020762A1 (en) * 2004-07-23 2006-01-26 Emc Corporation Storing data replicas remotely
US20060236047A1 (en) * 2005-04-18 2006-10-19 Hidehisa Shitomi Method for replicating snapshot volumes between storage systems
US20070013948A1 (en) * 2005-07-18 2007-01-18 Wayne Bevan Dynamic and distributed queueing and processing system
US7334095B1 (en) * 2004-04-30 2008-02-19 Network Appliance, Inc. Writable clone of read-only volume
JP2008040762A (ja) * 2006-08-04 2008-02-21 Hitachi Ltd 計算機システム及びそのスナップショット作成方法
US20120016840A1 (en) * 2010-07-15 2012-01-19 Symantec Corporation Virtual machine aware replication method and system
US20120130949A1 (en) * 2010-11-22 2012-05-24 Bluearc Uk Limited File Cloning and De-Cloning in a Data Storage System
JP2012216025A (ja) * 2011-03-31 2012-11-08 Nec Corp データ複製装置、データ複製制御方法、及びデータ複製制御プログラム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6868417B2 (en) * 2000-12-18 2005-03-15 Spinnaker Networks, Inc. Mechanism for handling file level and block level remote file accesses using the same server
US7334094B2 (en) * 2004-04-30 2008-02-19 Network Appliance, Inc. Online clone volume splitting technique
US8655848B1 (en) * 2009-04-30 2014-02-18 Netapp, Inc. Unordered idempotent logical replication operations
US8473777B1 (en) * 2010-02-25 2013-06-25 Netapp, Inc. Method and system for performing recovery in a storage system

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6874035B1 (en) * 2000-02-02 2005-03-29 Storage Technology Corporation System and methods for transforming data from a source to target platform using snapshot
US20050240584A1 (en) * 2004-04-21 2005-10-27 Hewlett-Packard Development Company, L.P. Data protection using data distributed into snapshots
US7334095B1 (en) * 2004-04-30 2008-02-19 Network Appliance, Inc. Writable clone of read-only volume
US20060020762A1 (en) * 2004-07-23 2006-01-26 Emc Corporation Storing data replicas remotely
US20060236047A1 (en) * 2005-04-18 2006-10-19 Hidehisa Shitomi Method for replicating snapshot volumes between storage systems
US20070013948A1 (en) * 2005-07-18 2007-01-18 Wayne Bevan Dynamic and distributed queueing and processing system
JP2008040762A (ja) * 2006-08-04 2008-02-21 Hitachi Ltd 計算機システム及びそのスナップショット作成方法
US20120016840A1 (en) * 2010-07-15 2012-01-19 Symantec Corporation Virtual machine aware replication method and system
US20120130949A1 (en) * 2010-11-22 2012-05-24 Bluearc Uk Limited File Cloning and De-Cloning in a Data Storage System
JP2012216025A (ja) * 2011-03-31 2012-11-08 Nec Corp データ複製装置、データ複製制御方法、及びデータ複製制御プログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11327851B2 (en) 2019-10-07 2022-05-10 Fujitsu Limited Information processing system, information processing method, and non-transitory computer-readable storage medium for storing information processing program

Also Published As

Publication number Publication date
EP2959373B1 (en) 2020-07-15
EP2959373A1 (en) 2015-12-30
WO2014130035A1 (en) 2014-08-28
US20160004720A1 (en) 2016-01-07
EP2959373A4 (en) 2016-10-05
US10311151B2 (en) 2019-06-04
JP6109967B2 (ja) 2017-04-05

Similar Documents

Publication Publication Date Title
JP6109967B2 (ja) データストレージシステムにおけるクローンオブジェクトのオブジェクトレベルでの複製
US11461202B2 (en) Remote data replication method and system
US9928250B2 (en) System and method for managing deduplication using checkpoints in a file storage system
JP5948340B2 (ja) データストレージシステムにおける、ファイルのクローニング及びデクローニング
US10691637B2 (en) Management of cloned objects in file systems
US10691636B2 (en) Method, system and computer program product for replicating file system objects from a source file system to a target file system and for de-cloning snapshot-files in a file system
JP4568115B2 (ja) ハードウェアベースのファイルシステムのための装置および方法
JP6309103B2 (ja) スナップショットおよびクローンの複製
CN110096891B (zh) 对象库中的对象签名
JP6129416B2 (ja) ファイル・システムの仮想化のための方法および装置、ファイル・システムの仮想化のためのデータ・ストレージ・システム、ならびにデータ・ストレージ・システム内で使用するためのファイル・サーバ
JP6275816B2 (ja) 分散型データベースシステム用高速クラッシュ回復
US10198193B2 (en) Computer program product, method, apparatus and data storage system for controlling write operations in the data storage system
JP6264666B2 (ja) データ格納方法、データストレージ装置、及びストレージデバイス
US10311152B2 (en) System for queue based object cloning
JP2016511499A (ja) 分散型データベースシステムのシステム全体のチェックポイント回避
EP3005123A1 (en) Restoring a file system object
US11442894B2 (en) Methods for scalable file backup catalogs and devices thereof
CN106873902B (zh) 一种文件存储系统、数据调度方法及数据节点
JP6376626B2 (ja) データ格納方法、データストレージ装置、及びストレージデバイス

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161115

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170214

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170307

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170308

R150 Certificate of patent or registration of utility model

Ref document number: 6109967

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R370 Written measure of declining of transfer procedure

Free format text: JAPANESE INTERMEDIATE CODE: R370

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250