[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

JP5948340B2 - データストレージシステムにおける、ファイルのクローニング及びデクローニング - Google Patents

データストレージシステムにおける、ファイルのクローニング及びデクローニング Download PDF

Info

Publication number
JP5948340B2
JP5948340B2 JP2013540995A JP2013540995A JP5948340B2 JP 5948340 B2 JP5948340 B2 JP 5948340B2 JP 2013540995 A JP2013540995 A JP 2013540995A JP 2013540995 A JP2013540995 A JP 2013540995A JP 5948340 B2 JP5948340 B2 JP 5948340B2
Authority
JP
Japan
Prior art keywords
file
snapshot
clone
file system
checkpoint
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.)
Active
Application number
JP2013540995A
Other languages
English (en)
Other versions
JP2014506345A5 (ja
JP2014506345A (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 JP2014506345A publication Critical patent/JP2014506345A/ja
Publication of JP2014506345A5 publication Critical patent/JP2014506345A5/ja
Application granted granted Critical
Publication of JP5948340B2 publication Critical patent/JP5948340B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/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/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/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to 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/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • G06F16/162Delete operations
    • 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/23Updating
    • G06F16/2365Ensuring data consistency and integrity

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

関連出願の相互参照
本特許出願は、Daniel J.N.Picken及びNeil Berringtonの名前で、2010年11月22日に出願されたFILING CLONING IN A DATA STORAGE SYSTEMという名称の米国仮特許出願第61/415,928号(代理人整理番号第2337/126)の利益を主張し、その全体が参照により本明細書に組み込まれる。
本特許出願は、以下の特許出願に関連するものであり、そのそれぞれが、その全体において参照により本明細書に組み込まれる。
Christopher J.Aston,Simon L.Benham及びNeil Berringtonの名前で、2008年6月30日に出願されたMULTI−WAY CHECKPOINTS IN A DATA STORAGE SYSTEMという名称の米国特許出願第12/164,730号(代理人整理番号第2337/110)であり、本特許出願は、Christopher J.Astonの名前で、2008年1月16日に出願されたVALIDATING OBJECTS IN A DATA STORAGE SYSTEMという名称の米国特許出願第12/015,192号(代理人整理番号第2337/113)の一部継続出願であるため、その優先権を主張する。
本特許出願はまた、1つ以上の以下の特許出願に関連する可能性があり、そのそれぞれが、その全体において参照により本明細書に組み込まれる。
これと同一の日付に出願されたDYNAMIC WRITE BALANCING IN A DATA STORAGE SYSTEMという名称の米国特許出願(代理人整理番号第2337/111);
John C.Holtomの名前で、2008年10月9日に出願されたSYSTEM,DEVICE,AND METHOD FOR VALIDATING DATA STRUCTURES IN A STORAGE SYSTEMという名称の米国特許出願第12/248,300号(代理人整理番号第2337/117)であり、これは、2007年10月12日に出願されたSYSTEM,DEVICE,AND METHOD FOR VALIDATING DATA STRUCTURES IN A STORAGE SYSTEMという名称の米国仮特許出願第60/979,561号(代理人整理番号第2337/118)の利益を主張する;
2001年6月12日に出願されたAPPARATUS AND METHOD FOR HARDWARE IMPLEMENTATION OR ACCELERATION OF OPERATING SYSTEM FUNCTIONSという名称の米国特許出願第09/879,798号であり、現在は米国特許第6,826,615号(代理人整理番号第2337/103);
2004年7月12日に出願されたAPPARATUS AND METHOD FOR HARDWARE IMPLEMENTATION OR ACCELERATION OF OPERATING SYSTEM FUNCTIONSという名称の米国特許出願第10/889,158号(代理人整理番号第2337/108);
Geoffrey S.Barrall等の名前で2002年11月1日に出願されたAPPARATUS AND METHOD FOR HARDWARE−BASED FILE SYSTEMという名称の米国特許出願第10/286,015号(代理人整理番号第2337/104);及び
Geoffrey S.Barrall等の名前で2007年8月20日に出願されたAPPARATUS AND METHOD FOR HARDWARE−BASED FILE SYSTEMという名称の米国特許出願第11/841,353号(代理人整理番号第2337/117)。
本発明は、データストレージシステムに関し、より詳細にはデータストレージシステムにおいてファイルをクローニング及びデクローニングすることに関する。
背景
Geoffrey S.Barrall等の名前で2002年11月1日に出願されたApparatus and Method for Hardware−Based File Systemという名称の米国特許出願第10/286,015号(代理人整理番号第2337/104)、及びGeoffrey S.Barrall等の名前で2007年8月20日に出願されたApparatus and Method for Hardware−Based File Systemという名称の米国特許出願第11/841,353号(代理人整理番号第2337/117)は共に、その全体が参照により本明細書に組み込まれ、様々なファイルシステム構造を記載しており、その中でも特にファイルサーバがファイルシステムの2つのコピーを維持する、すなわちファイルシステムの現行バリエーションと、ファイルシステムの以前の「チェックポイント」バージョンとを可能にするファイルシステム構造を記載している。具体的にはファイルシステムは、ツリー構造を使用して維持され、このツリー構造には、左手側(LHS)と右手側(RHS)と呼ばれる実際には一組の構造である特定のルートノードが含まれる。実際には、一方の側を使用してファイルシステムの「チェックポイント」コピーを保持し、他方の側を使用して継続中のファイルシステムの管理(ファイルシステムオブジェクトの作成、削除及び変更を含む)を行なう。その時々で、2つの側の役割が逆になることで、継続中のファイルシステムの管理に使用されていた構造の側を使用して「チェックポイント」が取得され、継続中のファイルシステムの管理は、先の「チェックポイント」を保持する構造の側を使用して続けられる。2つのいわゆる動的スーパーブロックが維持されることで、ファイルシステムの現行バージョンとチェックポイントバージョンの形跡を保持する。
「チェックポイント」の1つの目的は、継続するファイルシステムを管理する際、万一エラーが起こった場合に備えてファイルシステムのコピーを記憶することである。特定の状況下では、ファイルシステムが、その「チェックポイント」型に戻される場合もある。このようなシステムにおける1つのリスクは、現行バージョンのファイルシステムと、「チェックポイント」バージョンのファイルシステムの両方が損なわれる可能性があることである。別のリスクは、情報の重要な部分が、排除あるいは変更され、現行バージョンのファイルシステムも、「チェックポイント」バージョンのファイルシステムも、情報の元の部分を含まなくなることである。
例示の実施形態の概要
本発明の特定の実施形態では、ファイルクローニング機構を利用することで、例えばユーザがファイルのコピーを作成する際、ファイルシステム内にファイルのコピー(クローン)を迅速に作成することを可能にする。例示の実施形態において、ソースオブジェクトのクローンは、少なくとも最初は、このソースオブジェクトの多様な要素(例えば間接オーノード、直接オーノード及びデータブロック)に対する参照を含む特定の構造によって表される。読取り専用クローンも可変クローンも共に作成することができる。ソースファイルと、そのクローンは、最初、このような要素を共有しており、ソースファイルまたは可変クローンが変更される際、変更されない要素を共有し続ける。ユーザデータブロックやメタデータブロックは、いずれも、クローンが作成される時にコピーされる必要があるソースファイルに関連するデータストリーム(すなわち、間接/直接オーノード)を表していない。このようなファイルクローニングの一部の特徴には、以下が含まれる。
−ファイルシステムオブジェクトのデータストリームを、ソースオブジェクトのデータストリームのサイズに関わらず比較的固定された時間量で、迅速に効果的にクローンすることができ、これは、このデータストリームを構成するいずれのユーザデータブロックもコピーする必要がないためである。また、データストリーム(すなわち間接/直接オーノード)を表すいずれのメタブロックもコピーする必要がない。極めて少ない一定の数のメタブロックが変化させられる。
−クローン後の/クローンオブジェクトにI/Oを対処させる複雑さは、通常のオブジェクトに匹敵する。
−特定のファイルやクローンをクローンすることができる回数は、ファイルシステム内のフリースペースの大きさによってのみ制限される。
−特定のファイルシステムが支持することができるクローンの数は、ファイルシステム内のフリースペースの大きさによってのみ制限される。
−このファイルクローニングは、固有のファイル重複排除特性を有しており、ソースファイルの完全なコピーを作成し、その後に重複排除を行なうのではなく、そのクローンは基本的に、ソースファイルと共にデータ及びメタデータブロックを共有する重複排除されたファイルとして作成される。
−共有されるブロックの破損は、複数のファイルに影響を与えることになるが、データの破損は、冗長記憶装置(すなわちRAID制御装置)及び他の機構によって軽減される。
本発明の一態様によれば、ファイルストレージシステムにおいてソースファイルシステムオブジェクトをクローニングするための方法が提供される。ソースファイルシステムオブジェクトは、少なくとも1つのデータブロックと、この少なくとも1つのデータブロックを直接または間接的に指すポインタのセットを含む。方法は、ファイルストレージシステム内に読取り専用データ・ストリーム・スナップショットオブジェクトを作成し、データ・ストリーム・スナップショットオブジェクト内にこのポインタセットのコピーを記憶すること、ファイルストレージシステム内に可変クローンオブジェクトを作成し、このポインタセットのコピーをクローンオブジェクトに記憶することとを含んでおり、データ・ストリーム・スナップショットオブジェクト及びクローンオブジェクトは、少なくとも1つのデータブロックをソースファイルシステムオブジェクトと共有しており、データ・ストリーム・スナップショットオブジェクトと、クローンオブジェクトに対して少なくとも1つのデータブロックの別々のコピーを形成することはなく、ソースファイルシステムオブジェクト及びクローンオブジェクトは事実上、可変バージョンのデータ・ストリーム・スナップショットオブジェクトになり、データ・ストリーム・スナップショットオブジェクトによって表されるオブジェクトの読取り専用コピーからの変化を事実上記憶する。
本発明の別の態様によれば、ソースファイルシステムオブジェクトを含むファイルシステムオブジェクトをファイルストレージシステムにおいてクローニングする装置が提供される。ソースファイルシステムオブジェクトは、少なくとも1つのデータブロックと、この少なくとも1つのデータブロックを直接または間接的に指すポインタのセットを含む。装置は、少なくとも1つの記憶デバイスと、この少なくとも1つの記憶デバイスと通信するストレージプロセッサとを含み、このストレージプロセッサは、ファイルストレージシステムにおいて読取り専用データ・ストリーム・スナップショットオブジェクトを作成し、データ・ストリーム・スナップショットオブジェクトにポインタセットのコピーを記憶し、ファイルストレージシステムにおいて可変クローンオブジェクトを作成し、クローンオブジェクト内にポインタセットのコピーを記憶するように構成されており、データ・ストリーム・スナップショットオブジェクト及びクローンオブジェクトは、少なくとも1つのデータブロックをソースファイルシステムオブジェクトと共有しており、スナップショットオブジェクトと、クローンオブジェクトに対して少なくとも1つのデータブロックの別々のコピーを形成することはなく、ソースファイルシステムオブジェクト及びクローンオブジェクトは事実上、可変バージョンのデータ・ストリーム・スナップショットオブジェクトになり、データ・ストリーム・スナップショットオブジェクトによって表されるオブジェクトの読取り専用コピーからの変化を事実上記憶する。
様々な代替の実施形態では、各々のオブジェクトが、ルートオーノードを含む場合もあり、ポインタセットを、このオブジェクトのルートオーノード内に記憶することができる。ポインタセットは、ソースファイルシステムからデータ・ストリーム・スナップショットオブジェクトにコピーされ、その後データ・ストリーム・スナップショットオブジェクトからクローンオブジェクトにコピーすることができる。
これらの実施形態はまた、データ・ストリーム・スナップショットオブジェクトに、ソースファイルシステムオブジェクトへの参照及びクローンオブジェクトへの参照を記憶することと、ファイルシステムオブジェクトに、データ・ストリーム・スナップショットオブジェクトへの参照を記憶することと、クローンオブジェクト内にデータ・ストリーム・スナップショットオブジェクトへの参照を記憶することとを含むことができる。
これらの実施形態にはまた、データ・ストリーム・スナップショットオブジェクトにおいて参照カウントを維持することが含まれる場合もあり、この参照カウントは、データ・ストリーム・スナップショットオブジェクトを参照するファイルシステム内のオブジェクトの数を示している。
これらの実施形態にはまた、クローンオブジェクトが作成されたソースファイルシステムオブジェクトのサイズがクローンオブジェクトに起因すると考えることが含まれる場合もある。
これらの実施形態にはまた、可変ソースファイルシステムオブジェクトまたは可変クローンオブジェクトを変更する際、少なくとも1つのデータブロックを割り当てることで、この変更を記憶し、少なくとも1つの割り当てられたデータブロックを変更後のオブジェクトに関連づけることが含まれる場合があり、変更後のオブジェクトは、変更後のポインタセットを含んでいる。変更後のオブジェクトは、例えばファイルストレージシステム内に第2読取り専用データ・ストリーム・スナップショットオブジェクトを作成し、この第2データ・ストリーム・スナップショットオブジェクト内に変更後のポインタセットのコピーを記憶し、ファイルストレージシステム内に第2可変クローンオブジェクトを作成し、変更後のポインタセットのコピーをこの第2クローンオブジェクト内に記憶することによって、クローン作成することができる。このクローニングはまた、第2データ・ストリーム・スナップショットオブジェクト内に変更後のオブジェクトに対する参照と、第2クローンオブジェクトに対する参照と、第1データ・ストリーム・スナップショットオブジェクトに対する参照を記憶することと、変更後のファイルシステムオブジェクト内に第2データ・ストリーム・スナップショットオブジェクトに対する参照を記憶することと、第2クローンオブジェクト内に、第2データ・ストリーム・スナップショットオブジェクトに対する参照を記憶することを含む場合もある。
これらの実施形態にはまた、データ・ストリーム・スナップショットオブジェクトを使用して、ソースオブジェクトの別のクローンを作成することが含まれる場合もある。
これらの実施形態にはまた、オブジェクトをデクローニングすることが含まれる場合もある。
本発明の上記の特徴は、添付の図面を参照して以下の詳細な記載を参照することによって、より容易に理解されるであろう。
本発明の例示の一実施形態によるファイルストレージシステムの概略ブロック図である。 本発明の例示の一実施形態による一般的な形式のファイルシステムを示す概略ブロック図である。 本発明の例示の一実施形態による一般的な形式のオブジェクトツリー構造を示す概略ブロック図である。 本発明の例示の一実施形態による、他のオーノードを持たないルートオーノードの利用を示すブロック図である。 本発明の例示の一実施形態による、直接オーノードを有するルートオーノードの利用を示すブロック図である。 本発明の例示の一実施形態による、直接オーノードだけでなく間接オーノードも有するルートオーノードの利用を示すブロック図である。 本発明の例示の一実施形態による、ルートオーノードと間接オーノードの間に配置された複数の層の間接オーノードの利用を示すブロック図である。 本発明の例示の一実施形態に関するオブジェクト番号の割当を表わす図である。 本発明の例示の一実施形態による一般的な形式の間接オブジェクトを示す概略ブロック図である。 本発明の例示の一実施形態による、DSBと、間接オブジェクトと、ルート直接オブジェクトと、ファイルオブジェクトの一般的な関係を例示する概略ブロック図である。 本発明の例示の一実施形態による、チェックポイント番号1における4つのデータブロックと、様々なオーノードを含む例示のオブジェクトの構造を示す概略図である。 本発明の一実施形態による、変更後のオブジェクトのために新しいルートノードが作成された後の、図11の例示のオブジェクトの構造を示す概略図である。 本発明の一実施形態による、変更後のデータブロックのコピーが作成された後の、図12の一例のオブジェクトの構造を示す概略図である。 本発明の一実施形態による、変更後のデータブロックのコピーを指すために新しい直接オーノードが形成された後の、図13の例示のオブジェクトの構造を示す概略図である。 本発明の一実施形態による、新しい直接オーノードを指すために新しい間接オーノードが形成された後の、図14の例示のオブジェクトの構造を示す概略図である。 本発明の一実施形態による、新しい間接オーノードを指すように新しいルートオーノードが更新された後の、図15の例示のオブジェクトの構造を示す概略図である。 チェックポイントを記録するためのDSBの循環リストを使用して、本発明の例示の実施形態によってチェックポイントを取得する前の、様々なファイルシステム構造を示す概略図である。 チェックポイントを記録するためのDSBの循環リストを使用して、本発明の例示の実施形態によってチェックポイントを取得した後の、図17の様々なファイルシステム構造を示す概略図である。 チェックポイントを記録するためのDSBの循環リストを使用して、本発明の例示の実施形態によって間接オブジェクトを変更した後の、図18の様々なファイルシステム構造を示す概略図である。 1つのDSBを再利用することで連続するチェックポイントを作成する本発明の例示の実施形態によって、チェックポイントを取得する前の様々なファイルシステム構造を示す概略図である。 1つのDSBを再利用することで連続するチェックポイントを形成する本発明の例示の実施形態によって、チェックポイントを取得した後の図20の様々なファイルシステム構造を示す概略図である。 1つのDSBを再利用することで連続するチェックポイントを形成する本発明の例示の実施形態によって、間接オブジェクトを変更した後の、図21の様々なファイルシステム構造を示す概略図である。 本発明の例示の一実施形態による、ソースオブジェクト(ファイルA)2802と、隠しデータ・ストリーム・スナップショットオブジェクト2803と、可変コピー2805の関係を概略的に示す図である。 本発明の例示の一実施形態による、概念上のチェックポイント番号4において図11に表されるファイルシステムオブジェクトをクローニングした後の、オブジェクト2802、2803及び2805を概略的に示す図である。 本発明の例示の一実施形態による、ソースオブジェクト(ファイルA)2802と、隠しデータ・ストリーム・スナップショットオブジェクト2803と、2つの可変コピー2805、2807の関係を概略的に示す図である。 本発明の例示の一実施形態による、概念上のチェックポイント番号6において第2の可変コピーをクローニングした後の、オブジェクト2802、2803、2805及び2807を概略的に示す図である。 変更後のソースオブジェクト2802’(このソースオブジェクトの変更後のタイプを表すアポストロフィが付いた)と、2つの元のソースオブジェクトクローン2805及び2807を有する第1データ・ストリーム・スナップショットオブジェクト2803と、第2データ・ストリーム・スナップショットオブジェクト2809と、第2データ・ストリーム・スナップショットオブジェクト2809の可変コピー2811との関係を概略的に示す図である。 本発明の例示の一実施形態による、概念上のチェックポイント番号8において変更後のソースオブジェクト2802’をクローニングした後の、オブジェクト2802’、2803、2809及び2811を概略的に示す図である。 本発明の例示の一実施形態による、特定のソースオブジェクトに関連付けられたDSSオブジェクトが、このソースオブジェクトと、全てのコピーが削除されるまでいかにしてファイルシステム内に残されるかを概略的に示す図である。 図30Aは、例示の一実施形態によるデクローニングを概略的に示す図である。図30Bは、例示の一実施形態によるデクローニングを概略的に示す図である。図30Cは、例示の一実施形態によるデクローニングを概略的に示す図である。
特定の実施形態の詳細な記載
図面中に描かれる前述の図及び要素は必ずしも一貫した縮尺または任意の縮尺どおりのものではないことに留意されたい。文脈がそれ以外の意味を示唆しない限り、類似の要素は類似の符号によって示される。
この記載及び添付のクレームにおいて使用されるように、以下の用語は、その文脈がそれ以外の意味を要求しない限り、指摘される意味を持つべきである。「記憶デバイス」とは、データを記憶するのに使用されるデバイスまたはシステムである。記憶デバイスは、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つ以上の値を含むことができる。
簡便にするために以下で見出しが使用されているが、これはいずれにしても本発明を限定するものとして解釈されるべきでない。
本発明の特定の実施形態において、ファイルクローニング機構を利用することで、例えばユーザがファイルのコピーを作成する際に、ファイルシステム内に迅速にファイルのコピー(クローン)を形成することを可能にする。例示の実施形態において、ソースオブジェクトのクローンは、少なくとも最初は、ソースオブジェクトの様々な要素(例えば間接オーノード、直接オーノード及びデータブロック)の参照を含む特定の構造によって表される。読取り専用クローンと可変クローンを共に作成することができる。ソースファイル及びそのクローンは最初はこのような要素を共有しており、ソースファイルや可変クローンが変更されると、変更されない要素を共有し続ける。ソースファイルに関連するデータストリーム(すなわち間接/直接オーノード)を表すユーザデータブロックやメタデータブロックを、クローンが作成されるときにコピーする必要がない。適宜クローンされたファイルは、「デクローン」することができる。
本発明の例示の実施形態は、例示のファイルシステムを参照して記載されているが、様々なクローニング及びデクローニングの概念が、他のタイプのファイルシステムに適用される場合もあることに留意されたい。
例示のファイルシステム
図1は、本発明の例示の一実施形態によるファイルストレージシステムの概略ブロック図である。とりわけ、ファイルストレージシステムは、いくつかのファイルサーバ(簡素化し、簡便にするために、1つのファイルサーバ9002が示されている)を含んでおり、このサーバは、インターネットプロトコルネットワーク(例えばインターネット)などの通信ネットワーク9004を介して様々なクライアントデバイス9006から9006と通信し、またファイバチャネルネットワークなどの記憶ネットワーク9010を介して様々なRAIDシステム9008から9008とも通信する。クライアントサーバ9006から9006と、ファイルサーバ9002は、1つ以上のネットワークファイルプロトコル、例えばCIFS及び/またはNFSなどを利用して通信する。ファイルサーバ9002とRAIDシステム9008から9008は、例えばSCSIなどの記憶プロトコルを利用して通信する。ファイルストレージシステムは、様々な構成で相互に接続された複数のファイルサーバと、複数のRAIDシステムを含む場合もあり、このような構成には、任意のファイルサーバが、冗長かつスイッチバージョンのファイバチャネルネットワークによって、任意のRAIDシステムと通信することができるフルメッシュ構造が含まれることに留意されたい。
ファイルサーバ9002は、1つ以上のファイルシステムを管理するためのストレージプロセッサを含む。ファイルサーバ9002は、クライアントが、ファイルシステムの一部、例えば指定された名の下にツリーまたはサブツリーにアクセスすることができるように構成することができる。CIFS用語では、このようなアクセスは、「シェア」と呼ばれることもあり、NFS用語では、このようなアクセスは、「エクスポート」と呼ばれる場合もある。内部では、ファイルサーバ9002は、例えば米国特許出願第09/879,798号及び10/889,158号に記載されるように(これらの特許出願は上記で参照により組み込まれている)、様々なハードウェアが実装された及び/またはハードウェアアクセレートされたサブシステムを含むことができ、例えば米国特許出願第10/286,015号及び11/841,353号に記載されるように(これらの特許出願は上記で参照により組み込まれている)複数の接続されたサブモジュールを含むハードウェアベースのファイルシステムを含む場合もある。
各々のRAIDシステム9008は典型的には、少なくとも1つのRAID制御装置(通常は重複させるために2つのRAID制御装置)、ならびにこのRAID制御装置によって管理されるいくつかの物理的記憶デバイス(例えばディスク)を含む。RAIDシステム9008は、その記憶リソースをいくつかのSDに集約する。例えば各々のRAIDシステム9008は、2から32個のSDによって構成されてよい。各々のSDは、所定の最大サイズ(例えば2TBから64TBまたはそれ以上)に制限されてよい。複数の記憶デバイスを1つのSDに合体させることにより、いくつかの利点を提供することが可能であり、これらの利点には、速度の上昇(個々の記憶デバイスは比較的速度が遅いが、データを複数の記憶デバイスにわたってストライプすることで、ボトルネックを広げることができる)、容量の増加(個々の記憶デバイスは比較的小さいが、複数の記憶デバイスを組み合わせることで、より広い利用可能なスペースを提供することができる)、抽象化(利用されるスペースの大きさは、単独の記憶デバイスのサイズより大きいか、あるいはそれより小さいかのいずれかであり得る)、及び復元力(パリティまたは冗長情報を、各々の記憶デバイスに記憶することができるため、SDは、記憶デバイスの損失にも耐えることができる)が含まれる。
ファイルサーバ9002は、1つ以上のSDを使用するように構成されており、これは、単独のRAIDシステムから、あるいは複数のRAIDシステムからであってよい。ファイルサーバ9002は通常、RAIDシステムに問い合わせをすることで、各々のSDが一次または二次であるかを突き止めることができる。どのSDがファイルサーバ9002によって使用されるかを管理する方法は、本明細書では「ライセンシング」と呼ばれる。したがって実際には、ファイルサーバ9002は典型的には、一部のSDのために認可され、他のSDには認可されないことになる。
内部ではファイルサーバ9002は、複数のSDを、本明細書では「スパン」と呼ばれるより大きな記憶プールに組み込むことが可能である。スパンは基本的に、RAID0配列の複数のSDである。複数のSDを1つのスパンに組み込むことで、複数の物理的ディスクを1つのSDに組み込むことによって得られるものと同様のいくつかの利点を実現することができ、この利点には、速度の上昇(複数のRAIDシステム上の複数のSD間のI/Oを広げることで、記憶ボトルネックをさらに広げることができる)、記憶容量の増加(スパンは、単独のSDより大きくなる可能性があり、これは2テラバイトまで制限され得る)、及び付加的な復元力(これにより適応可能な記憶スペースの割り当てが可能になる)が含まれる。
ファイルシステムツリー構造
ファイルサーバ9002は、ファイルシステム内に様々な種類のオブジェクトを記憶する。オブジェクトは一般に、システムオブジェクトとファイルオブジェクトとして分類することができる。ファイルオブジェクトは、ユーザデータ及び関連する属性、例えばワードプロセッサまたはスプレッドシートファイルなどを記憶するために作成される。システムオブジェクトは、ファイルストレージシステムによって情報を管理するために形成され、ルートディレクトリオブジェクト、フリースペース割り当てオブジェクト、変更後のチェックポイントオブジェクトリストオブジェクト、変更後に保持されるオブジェクトリストオブジェクト及びソフトウェアメタデータオブジェクトなどを含むが、ここに挙げたのはほんの数例である。より具体的には、ディレクトリオブジェクトは、ディレクトリ情報を記憶するために作成される。フリースペース割り当てオブジェクトは、フリースペース割り当て情報を記憶するために作成される。変更後のチェックポイントオブジェクトリストオブジェクト及び変更後に保持されるオブジェクトリストオブジェクトは(これらは共に以下でより詳細に記載される)、チェックポイント及び保持されるチェックポイントそれぞれに関連する情報を記憶するために作成される。ソフトウェアメタデータオブジェクト(これは以下に詳細に記載される)は、ファイルまたはディレクトリオブジェクトに関連する過剰なファイル属性(すなわち、以下に記載するようにファイルまたはディレクトリオブジェクトにおいて事前に指定された領域に適合することができないファイル属性、すなわちCIFSセキュリティ属性)を保持するための特殊なオブジェクトであり、ファイルまたはディレクトリオブジェクトの作成者によって作成され、これは、ファイルまたはディレクトリオブジェクトにおいてソフトウェアメタデータオブジェクトに対する参照を含む。
ファイルシステムのインスタンシエイションは、好ましくはストレージシステム内の固定位置に記憶されるルートノード(動的スーパーブロックまたはDSBと呼ばれる)を有するツリー構造を使用して管理される。とりわけ、DSBを固定位置に記憶することにより、ファイルサーバ9002がDSBを特定し易くする。ファイルサーバ9002は、複数のDSBを保持することで、種々のチェックポイントを表す種々の型(例えば現在「作業中の」型及び1つ以上の「チェックポイント」型)のファイルシステムを記憶することができる。例示の実施形態において、DSBは、間接オブジェクトに対するポインタを含んでおり(これは以下に詳細に記載される)、この間接オブジェクトは、他のオブジェクトに対するポインタを含んでいる。
図2は、本発明の例示の一実施形態による一般的な形式のファイルシステムのインスタンシエイションを示す概略ブロック図である。DSB202は、ファイルシステムツリー構造のルートを表す特定の構造である。とりわけDSB202は、間接オブジェクト204に対するポインタを含んでおり、この間接オブジェクトは、このファイルシステムシステムにおける他のオブジェクトに対するポインタを含んでおり、これにはオブジェクト206及びファイルオブジェクト208が含まれる。
本発明の実施形態において、N個の動的スーパーブロック(N>2)が、ファイルシステムに対して維持され、このうちの1つのみが任意の所与の時点で最新であるとみなされる。DSBの数は、固定式または設定可能であってよい。DSBは、固定位置に位置付けられ、これを使用して、チェックポイントの状態をディスク上に記録する。各々のDSBは、間接オブジェクトを指している。
とりわけ以下の情報が各々の動的スーパーブロックに記憶される。
・この動的スーパーブロックに関連するチェックポイント番号。
・このチェックポイントに関する変更後のチェックポイントオブジェクトリストオブジェクトのハンドル。
・最後に保持されたチェックポイントからの変更後のチェックポイントオブジェクトリストオブジェクトのオブジェクト番号。
・このチェックポイントの状態(すなわちチェックポイントが作成されたかどうか)。
・DSB及び他の構造(例えば間接オブジェクト)の有効性をチェックすることが可能なCRC及び様々な他の情報。
例示の一実施形態において、DSBは循環リストとして扱われ(すなわち第1動的スーパーブロックが、連続して最後の動的スーパーブロックにつづくとみなされる)、各々の連続するチェックポイントは、この循環リストにある次の連続する動的スーバーブロックを使用する。ファイルサーバ9002が、そのボリュームを開放する際、それは典型的に、全ての動的スーパーブロックを読み取り、これらのDSBに対して様々なチェックを行なう。そのチェックポイント状態が完了であることが示され、種々の他のサニティチェックに通った最新のチェックポイント番号を有するDSBが、このボリュームにおける最新の有効なチェックポイントを表すものとみなされる。ファイルサーバ9002は次のチェックポイント用の循環リストにおける次のDSBを使用し始める。
一般的な形式の間接オブジェクト204を以下で考察する。
オブジェクトツリー構造
一般的に言えば、ファイルシステム内の各々のオブジェクトは、間接オブジェクト204と、各々のシステムオブジェクト206と、各々のファイルオブジェクト208を含んでおり、別個のツリー構造を使用して実装され、このツリー構造は、別個のオブジェクトルートノードを含み、任意選択でいくつかの間接ノード、直接ノート及び記憶ブロックを含む。DSB202は、間接オブジェクト204のルートノードに対するポインタを含む。間接オブジェクト204は、他のオブジェクトのルートノードに対するポインタを含む。
図3は、本発明の例示の一実施形態による、一般的な形式のオブジェクトツリー構造を示す概略ブロック図である。ルート(「R」)ノード302は、様々な間接(「I」)ノード304を指すことができ、そのそれぞれが、いくつかの直接(「D」)ノード306を指すことができ、そのそれぞれが、いくつかの記憶ブロック(「B」)308を指すことができる。実際には、オブジェクトツリー構造は、例えばオブジェクトのサイズによって広範にわたって変化する可能性がある。また特定のオブジェクトのツリー構造は、オブジェクトに情報が加えられたり、オブジェクトから情報が削除されたりする際、経時的に変化する場合もある。例えばこのオブジェクトのためにより大きな記憶スペースが使用される際、ツリー構造にノードを動的に追加することができ、必要に応じて異なる間接レベルを利用することができる(例えば特定の間接ノードが、直接ノードまたは他の間接ノードを指すことができる)。
オブジェクトが作成される際、このオブジェクトのためにオブジェクトルートノードが作成される。最初このような「エンプティ」オブジェクトのルートノードは、いずれの間接ノード、直接ノードまたはデータブロックに対するポインタも持たない。
このオブジェクトにデータが追加される際、それは最初に、ルートノードが直接指すデータブロックに入れられる。これは図4の図面に示されており、この図は、他のノードを持たないルートノードの利用を示している。この図面及び以下の全ての図面において、簡素化するためにルートノード及び直接ノードは、2つのデータポインタのみを有するように示されており、間接ノードは、2つの間接または直接ノードポインタのみを有するように示されていることに留意されたい。
ひとたびルートノードにおける全ての直接ブロックポインタが塞がると、このときルートノードから直接ノードへのポインタを有する直接ノードAが形成される。図5は、この直接ノードAを有するルートノードの利用を示している。ルートノードは、複数のデータブロックポインタを有するが、直接または間接ノードのいずれかに対するポインタは1つにしか持たないことに留意されたい。
オブジェクト内のデータが増大して、直接ノードにおける全てのデータポインタが塞がった場合、このとき図6に示されるように間接ノードBが作成される。図6は、直接ノードだけでなく間接ノードも有するルートノードの利用を示している。直接ノードAを指していたルートノードにあるポインタは、間接ノードBに向けられるように変更され、間接ノードBにおける第1ポインタは、直接ノードAを指すように設定される。これと同時に新しい直接ノードCが作成され、この直接ノードは、間接ノードBから指される。より多くのデータが作成されるにつれ、より多くの直接ノードが作成され、これらの直接ノードは全て、間接ノードから指される。
間接ノードBにおける全ての直接ノードポインタが使用されると、別の間接ノードDが作成され、この間接ノードDは、ルートノードと第1間接ノードBの間に挿入される。また別の間接ノードE及び直接ノードFが形成されることで、より多くのデータブロックを参照することが可能になる。このような状況は、図7に示されており、この図は、ルートノードと直接ノードの間に配置された複数の層の間接ノードの利用を示している。
間接ノードを加えることによって、より多くの間接レベルを形成するこのような工程を繰り返すことで、いかにオブジェクトが含むデータが多くともそれらは収容される。
オブジェクトルートノードは、特定のチェックポイント番号を含むことで、このオブジェクトが最後に変更されたチェックポイントを特定する(チェックポイント番号は最初、オブジェクトが作成されたチェックポイントを特定し、その後チェックポイント番号は、オブジェクトが新しいチェックポイントにおいて変更される毎に変化する)。例示の一実施形態において、オブジェクトが作成されたチェックポイント番号もまた、オブジェクトルートノードに記憶される。またオブジェクトルートノードにおいて、オブジェクトルートノードがメタデータを提供するオブジェクトのタイプを識別するのは特定のパラメータである。例えばオブジェクトタイプは、フリースペース、ファイルまたはディレクトリのいずれかであってよい。オブジェクトのタイプに加えて、オブジェクトルートノードはまた、ブロック内のオブジェクトの長さに関する特定のパラメータを有する。
オブジェクトルートノードはまた、一連のポインタを持っている。これらの1つは、任意の直前のバージョンのオブジェクトルートノードに対するポインタである。保持されるチェックポイントが該当するチェックポイントとみなされたことが判明した場合、このとき恐らく問題となる直前のバージョンのオブジェクトルートノードが記憶されており、ポインタは、このような直前バージョンのオブジェクトルートノードのセクター番号を特定する。
オブジェクトルートノードが対応する実際のデータに関して、オブジェクトルートノードは、対応するオブジェクトに関連する各々のデータのブロックに対する別個のポインタを含む。18個までのデータブロックの配置が、オブジェクトルートノードに記憶される。データが18個のブロックを超えている場合、直接ノードを追加する必要があり、この場合オブジェクトルートノードは、この直接ノードに対するポインタも有しており、このポインタは、オブジェクトルートノードにおいて、このディスク上のセクター番号によって特定される。
直接ノードは、チェックポイント番号を含んでおり、そのオブジェクトに関係する特定の数のブロック(例えばおよそ60または61のブロック)の位置を記憶するように構成されている。
データブロックを特定するのに第1直接ノードが完全に利用されると、次いで1つ以上の間接ノードを使用して、第1直接ノード、ならびにこのオブジェクトに対応するデータのブロックを有する追加の直接ノードを特定する。このような場合オブジェクトルートノードは、この間接ノードに対するポインタを有し、間接ノードは、対応する直接ノードに対するポインタを有する。間接ノードが完全に利用されると、次いで必要に応じて追加の間に介在する間接ノードが利用される。このような構造によって、ファイルの断片化に関わらずファイルの一部を迅速に特定することが可能になる。
本発明の種々の実施形態は、大きなファイルを容易に作成するための機構を含むことができ、このファイルは典型的には、最初に作成される際、ゼロで満たされるスパースファイルである。
このような1つの機構によって、ゼロで満たされたデータブロックを、実際にゼロをデータブロックに書き込まずに割り当てることが可能になる。具体的にはオブジェクトルートノード及び直接ノードは、対応するブロックが論理的にゼロで満たされているかどうかを示す(このブロックは、実際にはゼロで満たされる必要はない)各々のブロックポインタのためのフラグを含む。したがって例えば、データブロックが割り当てられる際、データブロックをゼロで満たすのではなく、このデータブロックに関連するビットを、データブロックがゼロで満たされていることを示し、実際にデータブロックからデータを読み取らずに、そのデータブロックがゼロに戻るようなアクセスを読み取るように設定することができる。
同様の機構によって、実際にファイルに全てのデータブロック及びノードを割り当てずに、ファイルを作成することが可能になる。具体的にはブロック及び他のノードに対するポインタは、そのブロックまたは他のノードが実際に作成されているかどうかを示すビットを含むことができる。関連するブロック及びノードがまだ作成されていない場合、次いで必要に応じてブロックとノードが作成されることで書き込み要求に対応し、割り当てビットは、これに従ってトグルされる。ブロックの作成は、スペースの割り当て、ブロックへのデータの書き込み、及び関連するノードに関するビットフラグの設定を必要とすることに留意されたい。特定の例示の一実施形態において、この機構は単に、全てのデータブロックを割り当てずにファイルを作成するために使用され、他のファイルノードは、上記に記載されるように取引ログを割り当てられるだけでなく、オンザフライでメタデータキャッシュに維持されている。
ノード構造はまた、例示の一実施形態においてノード構造に関連するディスク書き込みをさらに減らすように確立させることもできる。最終的に、ノード構造は、ファイルの中身だけでなく、ファイル属性も記憶するように適合する必要がある。ファイル属性は、多様なパラメータを含んでおり、これにはとりわけ、ファイルサイズ、ファイル作成時間及び作成日、ファイル変更時間及び変更日時、読取り専用状況、及びアクセス許可が含まれる。このような関係性により、オブジェクトルートノードの中身の変更は、所与のチェックポイントにおいて頻繁に行なわれる可能性があるが、これはこのオブジェクトルートノードがまだディスクに書き込まれていないためである(すなわち上記で考察したように、オブジェクトルートノードのディスク書き込みが遅れているためである)。したがって例示の一実施形態において、オブジェクトルートノードの一部は、ファイル属性を記憶するために確保されている。
より一般的には、ファイル属性を記憶するための以下の構造が、例示の一実施形態において定義される。
イーノード(enode)(更新するのにオーバーヘッドが少ない、容量が限定されている)。この構造は、オブジェクトルートノードにおいて規定され、例示の一実施形態では128バイトである。
ソフトウェアメタデータオブジェクト(更新するのにオーバーヘッドが高い、ほぼ無限の容量である)。これはメタデータを記憶するための専用オブジェクトであり、よってディスク上にその独自の記憶位置を有し、このオブジェクトはイーノードにおいて特定される。
したがって例示の一実施形態において各々のオブジェクトルートノードは以下の種類の情報を記憶する。
・チェックポイント番号
・このバージョンのオブジェクトに関するデータ長
・このオブジェクトに関してランリストで使用される間接レベルの数
・オブジェクトの種類。これは、特定のリクエストがオブジェクトにアクセスするようになったとき、サニティチェックとして主に使用される。
・保持されるチェックポイント(1つの場合)に対して形成されたより古いルートノード型に対するポインタ。
・より新しいルートノード型(これが保持されるチェックポイントに対して形成されたルートノードのコピーである場合に専ら有効である)に対するポインタ。
・19個までのデータブロックディスクリプタ。各々のデータブロックディスクリプタは、特定のデータブロックに対するポインタ、チェックポイント番号及びブロックがゼロで満たされているかどうかを示すビットを含む。
・直接ノードまたは間接ノードのいずれかに対する1つのポインタ。
・このオブジェクトに対する128バイトのイーノードデータ。
・ルートノードの有効性をチェックすることができるCRC及び種々のサニティdwords。
以下で考察するように、オブジェクトは、保持されるチェックポイントが取得される毎に作成されるルートノードのコピーを含むことができる。より古いルートノードの型に対するポインタと、より新しいルートノードの型に対するポインタによって、ルートノードの二重リンク式のリストを作成することができ、これには現行のルートノード及び、保持されるチェックポイントに対して作成されるルートノードの任意のコピーが含まれる。この二重リンク式のリストによって、保持されるチェックポイントの作成や削除が容易になる。
上記で考察したように、間接ノードによって、ルートノードと直接ノードの間に特定の間接レベルが形成される。以下の情報は、例示の一実施形態において間接ノードに記憶される。
・チェックポイント番号。
・間接または直接ノードのいずれかに対するポインタ(例えば122までのこのようなポインタ)。
・間接ノードの有効性をチェックすることができるCRC及び種々のサニティdwords。
上記で考察したように、直接ノードによって、データブロックに対する直接ポインタがディスク上に提供される。以下の情報は、例示の一実施形態において直接ノードに記憶される。
・チェックポイント番号。
・いくつかのデータブロックディスクリプタ(例えば62までのこのようなディスクリプタ)。各々のデータブロックディスクリプタは、特定のデータブロックに対するポインタ、チェックポイント番号及びブロックがゼロで満たされているかどうかを示すビットを含む。
・間接ノードの有効性をチェックすることができるCRC及び種々のサニティディーワード(dwords)。
オブジェクトからデータが削除され、データブロックならびに直接及び間接ノードがもはや必要なくなったとき、それらはフリースペース割り当て制御装置に戻される。
一実施形態によると、間接レベルの数は、オブジェクトが小さくなるにつれて減少し、最終的にはオブジェクト内の全てのデータを、ルートノードにおける直接ブロックポインタを介して参照することが可能になり、その時点で、残りの直接及び間接ノードは全て解放され、間接レベルはゼロに設定される。
特定のファイルオブジェクトに対する書き込み作業は、このオブジェクトの現行の末端を超えるスタートオフセットを有する場合、あるいはオブジェクトの長さが、現行の長さより大きくなるように設定された場合、このときオブジェクトの規定されない部分(例えばオブジェクトの現行の末端と、新たに書き込まれたデータの冒頭の間)は典型的にはゼロで満たされる。典型的な実装形態では、これはオブジェクトのゼロで満たされた全ての部分に対してディスクブロックを割り当てることと、このようなディスクブロックをゼロで満たすこととを含む。1GBのファイルの場合、これは10秒程かかる可能性がある。1TBのファイルの場合、それは3時間程かかる可能性がある。
本発明の例示の一実施形態において、オブジェクトの規定されない部分に関連するデータブロックを実際にゼロで満たすのではなく、このようなデータブロックの中身は書き出さないまま、各々のデータブロックポインタ内のビットを使用して、このブロックがゼロで満たされていると思われることを示す。ファイルサーバ9002(及び具体的にはオブジェクト記憶サブモジュール)が、このビットセットを認めた場合、次いでそれは、このブロックが、たとえオンディスクではそれが何らかの完全に異なるものを含む場合があるとしても、ゼロで満たされるべきであることを知る。ブロックが読み取られた場合、次いでファイルサーバ9002は、実際にオンディスクのその中身を戻すのではなく、このブロックに対してゼロを戻す。書き込みがブロック全体を占めないようにブロックが書き込まれた場合、次いでファイルサーバ9002は、書き込まれていないブロックの部分にゼロを書き込み、その後このブロックに対して「ゼロで満たされた」ビットを再度設定する。
オブジェクト長さを何らかの極めて長い値に設定する作業に関連する別の問題は、データブロックを割り当て、必要な直接及び間接ノード構造を作成するのにかかる時間である。例えば4Kのディスクブロックサイズを使用する例示の一実施形態では、1TBのオブジェクトは、およそ4百万の直接ノードと、これより少ない数の間接ノードを必要とする。これは恐らくディスクに書き込むのに40秒程かかる。また必要とされる全てのデータブロックのフリースペース割り当て、及びこれに続くフリースペースビットマップに対する更新が、この時間に相当な時間を加えることになる。ファイルの作成が始まった直後にチェックポイントが取得されるとすると、システム全体は一般に、この時間全体にわたって(任意のボリュームに対する)リクエストの要求に応えるのを止めることになる。
本発明の代替の実施形態において、この問題は、上記で考察したように、ファイルのゼロで満たされた部分に実際にディスクブロックを割り当てないことによって対処することができる。これは、オブジェクト記憶装置が、ゼロで満たされたブロックへの書き込みを認めたとき、それはまずそのブロックに対してディスクスペースを割り当て、それに対するポインタを関連するノード構造に据える必要があることを意味する。
さらに別の代替の実施形態において、ファイルのゼロで満たされた部分に実際にはデータブロックを割り当てないことに加えて、この問題は、これに対応するノード構造を作成しないことによって対処される場合もある。この態様を履行するために、各々のノードポインタは、それが指しているノードが割り当てられているかどうかを示す特定のビットを含むことができる。ノードが割り当てられていない場合、特定の動作が出現し、そのノードが有効であることを要求したとき、このとき初めてそれに対してディスクスペースが割り当てられ、正しいポインタが挿入される。この方法では、ゼロで満たされた非常に大きなオブジェクトが、1つのルートノードのみを有することができ、このルートノードは極めて迅速に作成することが可能である。
オブジェクト番号及び間接オブジェクト
ファイルストレージシステムにおいて、各々のオブジェクトは、オブジェクト番号に関連付けられており、この番号はオブジェクトを参照するのに使用される。システムオブジェクトは典型的には、それらが概ねシステム内に常に存在するため、固定された所定のオブジェクト番号を有する。ファイルオブジェクトは典型的には、利用可能なオブジェクト番号のプールから動的にオブジェクト番号を割り当てられる。このようなファイルオブジェクト番号は、一部の状況(例えばファイルが削除され、そのオブジェクト番号がフリーになることで、その後のファイルオブジェクトによって再利用される場合)において再利用することができる。
図8は、本発明の例示の一実施形態に関するオブジェクト番号の割り当てを表す図である。具体的にはファイルシステムは、Zのオブジェクト番号を含むことができる(この場合は、Zは可変であり、オブジェクトの数が増加するにつれて経時的に増える可能性がある)。特定の範囲のオブジェクト番号が、システムオブジェクト206のために確保され(この例ではオブジェクト番号1−J)、残りのオブジェクト番号は(この例ではオブジェクト番号K−Z)、ファイルオブジェクト208に割り当てられる。典型的にはシステムオブジェクト206の数が固定されるのに対して、ファイルオブジェクト208の数は変わる場合がある。
例示の一実施形態において、間接オブジェクト204は、特定のテーブルとして論理的に組織されており、オブジェクト当たりの1つのテーブルエントリは、オブジェクト番号によって指し示される。図9に示されるように、このテーブルにおける各々のエントリ502は、オブジェクトタイプフィールドと、ポインタフィールドを含む。オブジェクトタイプフィールドに関していくつかの異なる値が規定されるが、考察するために、1セットの値が、「使用されている」オブジェクトに関して規定され、別のセットの値が、「フリーな」オブジェクトに関して規定される。したがって特定のテーブルエントリのオブジェクトタイプフィールドにおける値は、これに対応するオブジェクト番号が使用されているか、自由であるかを示すことになる。
各々の使用されるテーブルエントリのポインタフィールドは、このオブジェクトのルートノードに対するポインタを含む。オブジェクトが作成される際、オブジェクトルートノードが作成され(上記で考察したように)、このオブジェクトにオブジェクト番号が割り当てられる。オブジェクトルートノードに対するポインタが、間接オブジェクト204に記憶され、具体的には割り当てられたオブジェクト番号に関連するテーブルエントリに記憶される。したがってファイルサーバ9002は、任意のオブジェクトのオブジェクトルートノードを、そのオブジェクト番号に基づいて、具体的には間接オブジェクトテーブル構造内に指示し、そのポインタフィールドにアクセスすることによって容易に突き止めることができる。当初このような「エンプティ」オブジェクトのルートノードは、いずれの間接ノード、直接ノードまたはデータブロックに対するポインタも持たないが、データブロック、間接ノード及び直接ノードを経時的にオブジェクトツリー構造に加えることができる。
フリーのテーブルエントリのポインタフィールドを使用して、1つ以上のフリーのオブジェクト番号リスト(及び好ましくは個々にリンクした、非循環式のフリーのオブジェクト番号リストが維持されており、これは例えば、System,Device, and Method for Validating Data Structures in a Storage Systemという名称の米国仮特許出願第60/979,561号に記載されており、この特許出願は2007年10月12日に出願され、その全体が参照により本明細書に組み込まれている。
具体的には各々のフリーオブジェクト番号に関連するテーブルエントリは、特定のオブジェクトのルートノードに対するポインタではなく、そのフリーオブジェクト番号リストにある次のフリーオブジェクト番号に対する参照を含む。その理由は、フリーオブジェクト番号リストが、例示の一実施形態では個々にリンクした非循環式のリストであり、フリーオブジェクト番号リストにある最後のフリーオブジェクト番号に関連するテーブルエントリが、「ヌル」参照(例えばその値はゼロ)を含むためである。
理論上は、間接オブジェクトにおいて1つのフリーオブジェクト番号リストを維持することは可能である。このリストにあるフリーオブジェクト番号は再利用され、新しいオブジェクトが作成される際にはこのリストから外すことができ、オブジェクトがシステムから削除される際、フリーオブジェクト番号をこのリストに加えることができる。
しかしながら、本発明の例示の一実施形態では、2つの別々のフリーオブジェクト番号が、間接オブジェクトに維持されており、一方は再利用するのに直ぐに利用可能なフリーオブジェクト番号を列挙しており、他方は、再利用するのに直ぐには利用できない新たにフリーになったオブジェクト番号を列記している。この例示の一実施形態では、ファイルサーバは、その時々でファイルシステムの「チェックポイント」または「スナップショット」を取得することで(例えば以下で、あるいはGeoffrey S.Barrall等の名前でApparatus and Method for Hardware−Based File Systemという名称で2002年11月1日に出願された米国特許出願第10/286,015号またはGeoffrey S.Barrallの名前でApparatus and Method for Hardware−Based File Systemという名称で2007年8月20日に出願された米国特許出願第11/841,353号において(この2つの特許出願は共に、その全体が参照により本明細書に組み込まれる)考察されるように)、任意の所与のときに、ファイルサーバは、例えばオブジェクトが作成される、削除される及び変更される際に変化し得るファイルシステムの「ワーキングコピー」を有する。様々な理由により、この例示の実施形態の場合、再利用される特定のオブジェクト番号に割り当てられた異なるオブジェクトが経時的に、異なるオブジェクトハンドルを与えられることを確実にすることが重要である。したがってこの例示の一実施形態において、2つのフリーオブジェクト番号リストを利用することで、特定のオブジェクト番号がフリーになり、ファイルシステムの同一のワーキングコピーにおいて再利用することができないことを保証し(すなわち一方のリストにはフリーオブジェクト番号を加え、その一方で他方のリストからオブジェクト番号を割り当てることによって)、現行のチェックポイント番号のボトム32ビットが、オブジェクトが作成される際、このオブジェクトハンドルに含まれ、その結果異なるチェックポイントにおいて作成されたオブジェクトは、異なるハンドルを有することになる。よってファイルシステムの任意の特定のワーキングコピーにおいて、ファイルサーバは、一方のリストからフリーオブジェクト番号を再利用し、その一方で他方のリストに新たにフリーになったオブジェクト番号を加える。各々の「チェックポイント」において、2つのリストの役割が「交換される」ことで、先のチェックポイントにおいてフリーになったオブジェクト番号は再利用するのに利用可能であるが、その一方で現行のチェックポイントにおいてフリーになった新しいオブジェクト番号は、そのチェックポイントにおいて再利用するのに利用することはできない。新しいオブジェクトが作成される際、フリーオブジェクト番号が再利用されるリストが空である場合、このとき間接オブジェクトが拡張されて、追加のフリーオブジェクト番号を提供する(実際には他方のリストに若干のフリーオブジェクト番号がある可能性があったとしても)。しかしながら、実際には、両方のリストは一般に、各々のチェックポイントにおいて役割を交換することによって、経時的にいくつかのフリーオブジェクト番号を蓄積している、定常状態において、間接オブジェクトを度々拡張させる必要はない。
例示の一実施形態において、DSB202は、間接オブジェクト204に対する(より具体的には間接オブジェクト204のルートノードに対する)ポインタを含んでおり、また間接オブジェクト204におけるフリーオブジェクト番号リストそれぞれのための2つのポインタも含んでいる。各々のポインタは、その各々のフリーオブジェクト番号リストの冒頭において、そのテーブルエントリを指している。DSB202は、ストレージシステム内の固定位置に記憶され、間接オブジェクト204及び間接オブジェクト204内のフリーオブジェクト番号リストに対するポインタを含んでいるため、ファイルサーバ9002は、このDSB202を使用して間接オブジェクト204(及びこれにより任意の他のオブジェクトのルートノード)ならびにフリーオブジェクト番号リストを容易に突き止めることができる。
したがって図4に示される間接オブジェクト204のテーブル構造を再度参照すると、特定のテーブルエントリのオブジェクトタイプフィールドにおける値は、これに対応するオブジェクト番号が使用されているか、フリーかを示している。そのオブジェクト番号が使用されている場合、そのテーブルエントリのポインタフィールドは、対応するオブジェクトのルートノードに対するポインタを含むことになる。しかしながら、そのオブジェクト番号がフリーである場合、このときは、そのテーブルエントリのポインタフィールドは、そのフリーオブジェクト番号リストにある次のフリーオブジェクト番号に対する参照を含むことになる。
一般的に言えば、フリーオブジェクト番号は、フリーオブジェクト番号リストの先頭に加えられ、再利用されたオブジェクト番号もまた、フリーオブジェクト番号リストの先頭から取得される。
System,Device,and Method for Validating Data Structures in a Storage Systemという名称の米国仮特許出願第60/979,561号(これは上記で参照により組み込まれている)に考察されるように、その時々でフリーオブジェクト番号リストを含む間接オブジェクト204を検証することにより、全てのフリーオブジェクト番号がフリーオブジェクト番号リストに含まれ、「使用されている」オブジェクト番号は、フリーオブジェクト番号リストに含まれないことを確実にすることが必要である、あるいは望ましい。フリーオブジェクト番号リストを含む間接オブジェクト204を検証する1つの方法は、各々のフリーオブジェクト番号リストを冒頭から終わりまで詳しく点検することで、ループがないことを確実にし、リストの最後がヌル参照を有することを確実にすることである。しかしながら、作業中のデータストレージシステムにおいて、経時的に多数のオブジェクトが作成され削除されることはよくあることであるため、フリーオブジェクト番号リストは、かなり長いものになる可能性がある。さらにフリーオブジェクト番号リストは、順番通りではないが、その代わりに、オブジェクト番号が使用されたり、フリーになったりしたときに更新されるため、フリーオブジェクト番号リストの点検作業は一般に、個々にリンクしたリストの参照に従って、必然的に間接オブジェクト204をあちこち飛ぶことになる。このようなフリーオブジェクト番号リストの点検は一般に、ゆっくりであり、効率が悪い。
したがって、本発明の例示の一実施形態では、間接オブジェクトテーブル構造は、最上部から最下部まで順を追って点検され、「使用されている」及び「フリーの」オブジェクト番号は、ビットマップまたは他の適切なデータ構造を利用して追跡される。具体的には、特定のオブジェクト番号が使用されている場合、このときビットマップにおける対応するビットが選び出され、このビットが既に選び出されている場合、このとき間接オブジェクトは破損する(例えば「使用されている」オブジェクト番号が、先の「フリーな」エントリによって誤って参照されるため)。特定のオブジェクト番号がフリーな場合、このとき間接オブジェクトテーブル構造における対応するエントリが、フリーオブジェクト番号リストにおける次のフリーオブジェクト番号に対する参照を含むことで、このような次のオブジェクト番号に対応するビットが、ビットマップにおいて選び出され、万一そのビットが既に選び出されている場合、このとき間接オブジェクトは破損する(例えばフリーオブジェクト番号リストが、「使用されている」オブジェクト番号を含むため、あるいはフリーオブジェクト番号リストが、循環参照を含むため)。間接オブジェクトテーブル構造全体が点検された後、2つの開始テーブルエントリは(これはDSB202におけるポインタによって指されている)がチェックされるが、万一テーブルエントリ全体が「使用されている」場合、このとき間接オブジェクトは破損する。さらに間接オブジェクトテーブル構造の全体が点検された後、選び出されず残すべきビットのみが、2つのフリーオブジェクト番号リストに関する2つの開始テーブルエントリに関連するビットであり、これはDSB202におけるポインタによって指される。このようなビットのいずれかが選び出された場合、このとき間接オブジェクトは破損する。ビットマップにおける任意の他のビットが選び出されない場合、このとき対応するオブジェクト番号は、使用されないし、フリーオブジェクト番号リストにも含まれないが、この場合、間接オブジェクトは利用可能である(このような「リンクされない」フリーのエントリは、通常の過程では再利用されないため)。追加の処理を行なうことで、各々のフリーオブジェクト番号リストは、確実にヌル参照で終わることができる。
様々な代替の実施形態において、ビットマップは、全てゼロに初期化することができ、またビットマップにおける特定のビットは、このビットを設定する(すなわち1に)ことによって「選び出される」場合もあり、この点において、いわゆる「テストアンドセット」作業を利用することで、1回の作業でビットの値のテストと、ビットの設定の両方を行なうことができる。あるいはビットマップが、全て1に初期化される場合もあり、ビットマップにおける特定のビットは、このビットを消去する(すなわちゼロにする)ことによって「選び出される」場合もある。当然のことながら、他のタイプのデータ構造及び他のタイプのマーキングスキームが他の実施形態で使用される場合もある。本発明は、ビットマップの利用、任意の特定のタイプのデータ構造やマーキングスキームに限定されるものではない。
例示の一実施形態において、間接オブジェクトは、実際の記憶ブロックを持たない「擬似ファイル」として実装される場合もある。例示の一実施形態において、オブジェクトツリー構造(例えば図2に示されるように)内の実際のデータブロックに対するポインタを有する代わりに、間接オブジェクトツリー構造におけるこのようなポインタは、対応するオブジェクトのルートノードを指している。したがって例示の一実施形態において、間接オブジェクトは、対応するファイルシステムオブジェクトに関連するルートノードのセクターアドレスに各々のオブジェクト番号をマップする。間接オブジェクトツリー構造がこのとき、オブジェクト番号に基づいて点検されることで、対応するオブジェクトのルートノードに対するポインタを得ることができる。
例示の一実施形態において、間接オブジェクト「擬似ファイル」が構築されることで、共通のコードの一部を利用して、オブジェクト番号に基づいて間接オブジェクトツリー構造を点検することで、対応するオブジェクトのルートノードに対するポインタを獲得することができ、ファイルオフセットに基づいて他のオブジェクトツリー構造を点検することで、対応するデータブロックに対するポインタを獲得することができる。このような実施形態において、オブジェクト番号は基本的に、仮想ファイルオフセットに変換され、その後間接オブジェクトツリー構造は、他のオブジェクトツリー構造が実際のファイルオフセットを使用して点検されるのと同様の方法で点検される。間接オブジェクト「擬似ファイル」ツリー構造と、他のオブジェクトツリー構造の両方を点検するのに使用することができる共通コードを有することの1つの利点は、単一の論理ブロックを両方の機能に利用することができる点であり、これは特にハードウェアにおけるツリー点検機能に有利である。
例示のシステムオブジェクト
上記で考察したように、ファイルシステムは、様々なタイプのシステムオブジェクトを含む。一般的に言えば、システムオブジェクトは、固定式の事前に規定されたオブジェクト番号を有するが、特定のシステムオブジェクトは、可変のオブジェクト番号を有する場合もある。以下は、本発明の例示の一実施形態における一部のシステムオブジェクトの記載である。
ルートディレクトリオブジェクトは、その対応するオブジェクト番号にファイル名をマップするシステムオブジェクトである(すなわちそれはルートノードと、固定式の所定のオブジェクト番号を有する)。よってファイルが作成される際、ファイルストレージシステムは、このファイルに対してルートノードを割り当て、このファイルに対してオブジェクト番号を割り当て、ルートディレクトリオブジェクトにエントリを追加してオブジェクト番号にファイル名をマッピングし、間接オブジェクトにエントリを追加することで、このファイルのルートノードのディスクアドレスにオブジェクト番号をマッピングする。間接オブジェクトにおけるエントリは、ルートディレクトリオブジェクトのルートノードのディスクアドレスにルートディレクトリオブジェクト番号をマップする。
図10は、本発明の例示の一実施形態による、DSB202と、間接オブジェクト204と、ルートディレクトリオブジェクト606と、ファイルオブジェクト208の一般的な関係を証明する概略ブロック図である。上記に述べたように、間接オブジェクトにおけるエントリは、ルートディレクトリオブジェクトのルートノードのディスクアドレスにルートディレクトリオブジェクト番号をマップし、ルートディレクトリオブジェクトは、オブジェクト番号にファイル名をマップし、間接オブジェクトは、オブジェクトにオブジェクト番号をマップする。したがってファイルサーバ9002がオブジェクトファイル名に基づいて特定のオブジェクトを突き止める必要があるとき、ファイルサーバ9002は、間接オブジェクトを介してルートディレクトリオブジェクト606を突き止め(すなわちルートディレクトリオブジェクト606に関連するオブジェクト番号を使用して)、ルートディレクトリオブジェクト606を使用してその対応するオブジェクト番号にファイル名をマップし、その後オブジェクト番号を使用して間接オブジェクトを介してこのオブジェクトを突き止めることができる。
フリースペースビットマップオブジェクトは、ファイルストレージシステムにおけるフリーな記憶ブロックを示すシステムオブジェクトである(すなわちそれは、ルートノードと、固定式の所定のオブジェクト番号を有する)。間接オブジェクトにおけるエントリは、フリースペースビットマップオブジェクトのルートノードのディスクアドレスにフリースペースビットマップオブジェクト番号をマップする。
変更後のチェックポイントオブジェクトリストオブジェクトは、チェックポイントサイクルにおいて作成または変更されているオブジェクトを特定するシステムオブジェクトである(すなわちそれは、ルートノードと、固定式の所定のオブジェクト番号を有する)。各々のチェックポイントの開始点において、変更後のチェックポイントオブジェクトリストオブジェクトが作成される。異なるオブジェクトが、このチェックポイントの一部として形成または変更される度に、そのオブジェクト番号が、変更後のチェックポイントオブジェクトリストオブジェクトに書き込まれ、その結果チェックポイントが作成される際は、そのチェックポイントにおいて作成または変更された全てのオブジェクトを列挙する特定のオブジェクトが存在する。
フリーブロックオブジェクトは、特定のチェックポイントにおいてファイルシステムによって使用されなくなったデータブロックのトラックを維持するのに使用されるシステムオブジェクトである。フリーブロックオブジェクトは、フリーにするのに利用できるセクターアドレスを列挙している。特定のデータブロックがファイルシステムによって使用されなくなったことは、このデータブロックは、先のチェックポイント及び/または保持されるチェックポイントに関連する可能性があるため、必ずしもこのデータブロックを再利用するために空けることができることを意味するものではない。よって他の機構(例えばバックグラウンドクリーンアップタスク)を典型的に使用することで、フリーにするのにブロックがどのように利用可能で、いつ利用可能であるかを判断する。
考えられる一実施形態では、ファイルストレージシステムは、N個のチェックポイントのためにN個のフリーブロックオブジェクトを維持しており(この場合Nは典型的には3以上である)、間接オブジェクトは、固定式の所定のフリーブロックオブジェクト番号を使用してN個のフリーブロックオブジェクトに関する別個のエントリ(すなわち間接オブジェクトにおけるN個のエントリ)を含んでいる。このような実施形態では、特定のチェックポイント(例えばN+1番目のチェックポイント)が削除されると、ファイルストレージシステムが、そのチェックポイントに関連するフリーブロックオブジェクトを処理するため、その中に含まれる情報が失われることはない。
代替の考えられる一実施形態では、ファイルストレージシステムは、N個を超えるフリーブロックオブジェクトを維持する場合もあり(たとえチェックポイントがN個だけ維持されていても)、その結果フリーブロックオブジェクトを、ランタイムプロセスではなく、バックグラウンドクリーンアッププロセスを利用して処理することができる。このような実施形態では、システム内のフリーブロックオブジェクトの数が変わる可能性もあるため、間接オブジェクト内に固定された数のエントリを有することは実用的ではなく、よってフリーブロックオブジェクトのディレクトリ(例えばフリーブロックディレクトリオブジェクト)が代わりに使用される場合もある。ここで間接オブジェクトにおける1つのエントリがフリーブロックディレクトリオブジェクトのために使用される場合もあり、フリーブロックディレクトリオブジェクトは、個々のブリーブロックオブジェクトに対するポインタを維持することができる。
保持されるチェックポイント構成オブジェクトは、保持されるチェックポイントのリストを維持するのに使用されるシステムオブジェクトである。間接オブジェクトにおけるエントリは、保持されるチェックポイント構成オブジェクトのルートノードのディスクアドレスに保持されるチェックポイント構成オブジェクト番号をマップする。保持されるチェックポイント構成オブジェクトを以下でさらに詳細に考察する。
多重チェックポイント
特定の実施形態において、多様なチェックポイントを利用することで、多様なバージョンのファイルシステムを経時的に維持することができる。例えば多様な別々のルート構造(以後「動的スーパーブロック」または「DSB)と呼ばれる)を使用することで、ファイルシステムの多様なインスタンシエイションを管理する。DSBは好ましくは、アクセスし易いようにストレージシステムにおける固定位置に記憶されるが、DSBは代替として他の方法で記憶される場合もある。典型的には3つ以上のDSBが存在しており、いくつかのDSBは固定式または可変であってよい。DSBの数には論理的な制限はない(但し恐らく様々な実装形態に関して実際の制限はある)。この方法では、ファイルを前の「チェックポイント」に戻す必要がある、あるいは戻すことが望ましい場合、選択するのに多様な「チェックポイント」があるため、このファイルシステムを戻すことができる元のままのバージョンのファイルシステムが存在する、あるいは特定のバージョンのファイルシステムを含むチェックポイントが存在するといったより望ましい機会が提供される。
ファイルシステムリクエストの処理作業は、一連のチェックポイントによって線引きされており、これらのチェックポイントは、例えば10秒毎など一部のユーザが特定した間隔の頻度を下回らないで現れるように予定されている。チェックポイントは、例えば現行のチェックポイントに使用されている不揮発性RAMの半分以上が一杯になった場合、セクターキャッシュが一杯になった場合、ユーザが保持されるチェックポイントを要求した場合(以下で考察する)、あるいは他の適切な状況下などの、それ以外のときに取得される場合もある。
各々の連続するチェックポイントに関して、直前のチェックポイントから先に記憶されたファイル構造情報を受け継いだ現在のファイル構造情報が、オンディスクで記憶されている。チェックポイントは順番通りに番号が付けられ、ファイルリクエストの一時的なグループ処理に使用される。
上記に考察したように、本発明の例示の実施形態は、N個のDSBを保持する(この場合Nは、3より大きく、例えば16である)。これらのDSBを使用して、連続するチェックポイントを取得する。
したがって任意の所与の時に、現行(作業中の)のバージョンのファイルシステムと、ファイルシステムの1つ以上のチェックポイントバージョンが存在する。ストレージシステムは典型的にはかなり動的であるため、現行バージョンのファイルシステムは、チェックポイントを取得したほとんど直後に、ほぼ間違いなく変化し始める。例えばファイルシステムオブジェクトは、経時的に追加、削除または変更されることがある。しかしながら、チェックポイントを維持する目的で、記憶されたチェックポイントに関連するいずれの構造も、少なくとも特定のチェックポイントが削除されたり、あるいは上書きされるまでは変わることが認められていない。したがって現行バージョンのファイルシステムにおけるオブジェクトが追加、削除及び変更される際、必要に応じて新しいバージョンのオブジェクトツリー構造が作成され、種々のポインタがこれに従って更新される。
例えば図11は、チェックポイント番号1において形成された例示のオブジェクトに関するオブジェクト構造を概略的に示している。このオブジェクトは、4つのデータブロックを含んでおり、すなわちデータブロック0(2310)と、データブロック1(2312)と、データブロック2(2314)と、データブロック3(2316)を含む。直接ノード2306は、データブロック0(2310)に対するポインタと、データブロック1(2312)に対するポインタを含む。直接ノード2308は、データブロック2(2314)に対するポインタと、データブロック3(2316)に対するポインタを含む。間接ノード2304は、直接ノード2306に対するポインタと、直接ノード2308に対するポインタを含む。ルートノード2302は、間接ノード2304に対するポインタを含む。全てのノードと、全てのブロックは、チェックポイント番号1によってはっきりと表されている。
ここでデータブロック0(2310)が、チェックポイント番号3において変更されると仮定してみる。ルートノード2402は、先のチェックポイントの一部であるため、それを変更することはできない。代わりにファイルサーバ9002のオブジェクト記憶サブモジュールは、古いルートノード2302のコピーをディスク上のフリースペースに保存し、この新しいルートノードをチェックポイント番号3(すなわち、それが形成されたチェックポイント)によって表す。図12は、新しいルートノード2403を作成した後のオブジェクト構造を概略的に示している。この時点で、ルートノード2402と新しいルートノード2403は共に、間接ノード2304を指している。
オブジェクト記憶サブモジュールはその後、このルートノードから開始して、それがデータブロック0(2310)のディスクリプタに達するまでオブジェクト構造を点検する。データブロック0(2310)は、先のチェックポイントの一部であるため、それを変更することはできない。代わりにオブジェクト記憶サブモジュールは、変更後のデータブロック2310のコピーをディスク上のフリースペースに作成し、この新しいデータブロックをチェックポイント番号3(すなわち、それが形成されたチェックポイント)によって表す。図13は、新しいデータブロック2510を形成した後のオブジェクト構造を概略的に示している。
オブジェクト記憶サブモジュールは、今度は、直接ノードに新しいデータブロック2510に対するポインタを据える必要があるが、オブジェクト記憶サブモジュールは、直接ノード2306に新しいデータブロック2510に対するポインタを据えることは不可能であり、その理由は、直接ノード2306は、これ以前のチェックポイントの構成要素であるためである。したがってオブジェクト記憶サブモジュールは、新しいデータブロック0(2510)と、古いデータブロック1(2312)に対するポインタを含め、ディスク上のフリースペースに直接ノード2306の変更後のコピーを作成し、この直接ノードをチェックポイント番号3(すなわちそれが形成されたチェックポイント)によって表す。図14は、新しいデータブロック0(2510)と、古いデータブロック1(2312)に対するポインタを含め新しい直接ノード2606が形成された後の、オブジェクト構造を概略的に示している。
オブジェクト記憶サブモジュールは、このとき、間接ノードに新しい直接ノード2606に対するポインタを据える必要があるが、オブジェクト記憶サブモジュールが、間接ノード2304に新しい直接ノード2606に対するポインタを据えることは不可能であり、それは、間接ノード2304は先のチェックポイントの構成要素であるためである。よってオブジェクト記憶サブモジュールは、新しい直接ノード2606と、古い直接ノード2308に対するポインタを有する変更後の間接ノード2304のコピーを形成する。図15は、新しい直接ノード2606と、古い直接ノード2308に対するポインタを含む新しい直接ノードを形成した後のオブジェクト構造を概略的に示している。
最終的にオブジェクト記憶サブモジュールは、新たなルートノード2403に新しい間接ノード2704に対するポインタを書き込む。図16は、新たなルートノード2403に新しい間接ノード2704に対するポインタが、書き込まれた後のオブジェクト構造を概略的に示している。
データブロック0の変更が完了した後、ブロック2402、2304、2306及び2310は、チェックポイント1バージョンの構成要素であって、オブジェクトの現行のチェックポイント3バージョンの構成要素ではなく、ブロック2308、2312、2314及び2316は、チェックポイント1型と、オブジェクトの現行のチェックポイント3バージョンの両方の構成要素であり、ブロック2403、2704、2606及び2510は、オブジェクトの現行のチェックポイント3バージョンの構成要素であり、チェックポイント1バージョンの構成要素ではないことに留意されたい。
新しいノードは、必ずしも上記に記載した順番で形成される必要はないことに留意されたい。例えば新しいルートノードは、最初ではなく最後に形成される場合もある。
よってファイルシステムオブジェクトが変更される際、この変化がオブジェクトツリー構造全体まで広がるため、変更後のオブジェクトのために新しいルートノードが作成される。新たなルートノードは、所与のチェックポイントにおいて一度特定のオブジェクトのために作成される必要があり、この新たなルートノードは、1つのチェックポイントにおいて複数回修正される場合もある。
現行バージョンのファイルシステムに新たなバージョンのオブジェクトが含まれるように、現行の間接オブジェクトは、以前のバージョンのオブジェクトのルートノードではなく、変更後のオブジェクトのルートノードを指すように変更される。例えば再び図16を参照すると、現行の間接オブジェクトは、このオブジェクトに関連するオブジェクト番号に関して、ルートノード2402ではなくルートノード2403を指すように更新される。
同様に新しいオブジェクトが作成される、あるいは既存オブジェクトが現行バージョンのファイルシステム内で削除される場合、現行の間接オブジェクトは、これに従って更新される。例えば新しいオブジェクトが作成される場合、間接オブジェクトは、この新しいオブジェクトのルートノードに対するポインタを含むように変更される。既存のオブジェクトが削除される場合、間接オブジェクトは、対応するオブジェクト番号をフリーなものとして表すように変更される。
また間接オブジェクトは、特定のルートノードを有するツリー構造であるため、間接オブジェクトの変更もツリー構造全体にまで広がるため、変更後の間接オブジェクトのために新たなルートノードが作成されることになる。ここでも、新しいルートノードは単に、所与のチェックポイントにおいて一度間接オブジェクトのために作成される必要があり、この新しいルートノードは、1つのチェックポイントにおいて複数回修正される場合もある。
よって特定のチェックポイントにおいて新しいバージョンの間接オブジェクトが作成される際、このチェックポイントに関連するDSBは、変更後の間接オブジェクトに対する新たなルートノードを指すように更新される。よって各々の型(すなわち現行バージョンと、各々のチェックポイントの型)のファイルシステムは一般に、別々のバージョンの間接オブジェクトを含むことになり、それぞれが異なる間接オブジェクトルートノードを有する(但し、1つ以上の間接ノード、直接ノード及び/またはデータブロックを共有する場合もある)。
例示の一実施形態において、DSBは循環リストとしてみなされ、チェックポイントは、予定された間隔で取得され続けるため、定常状態において、各々の新しいチェックポイントが古いチェックポイントを「上書き」するため、この「上書きされた」チェックポイントによって表される古いバージョンのファイルシステムは失われる。
図17は、本発明の例示の一実施形態による、チェックポイントを取得する前の様々なファイルシステム構造を示す概略ブロック図である。具体的には202及び203と番号が付けられた2つのDSBが示されている。DSB202は、現行バージョンのファイルシステムに関連しており、現行バージョンの間接オブジェクト204のルートノードに対するポインタを含む。DSB203は、次に利用可能なDSBである。
現行バージョンのファイルシステムからチェックポイントを作成するために、特定の循環リストにおける次のDSB(すなわちこの例ではDSB203)が、新しいチェックポイントのために初期化される。とりわけこのような初期化には、次のチェックポイント番号をDSB203に書き込むことと、間接オブジェクト204のルートノードに対するポインタをDSB203に記憶することが含まれる。図18は、本発明の例示の一実施形態による、チェックポイントを取得した後の様々なファイルシステム構造を示す概略ブロック図である。この時点で、DSB202は、最近のチェックポイントバージョンのファイルシステムを表しており、DSB203は、現行の(作業中の)バージョンのファイルシステムを表している。
上記で考察したように、現行バージョンのファイルシステムは、オブジェクトが形成、変更及び削除される際に変わる場合がある。また上記で考察したように、現行バージョンのファイルシステムが変わる際、新しいバージョンの間接オブジェクト(新しいルートノードを有する)が作成される。その結果、現行バージョンの間接オブジェクトが、図18に描写されるようにチェックポイントが取得された後に変わることで、新たな間接オブジェクトルートノードが作成される際、現行バージョンのファイルシステムに対するDSB(すなわち図18におけるDSB203)が、以前の間接オブジェクトルートノードではなく、新たな間接オブジェクトルートノードを指すように更新される。図19は、本発明の例示の一実施形態による、間接オブジェクトを変更した後の様々なファイルシステム構造を示す概略ブロック図である。ここでDSB202は、チェックポイントバージョンのファイルシステムに関連しており、チェックポイントバージョンの間接オブジェクト204を指しており、その一方でDSB203は、現行バージョンのファイルシステムに関連しており、新たな間接オブジェクト205のルートノードを指している。
上記で考察したようにチェックポイントは一般に、規則的な間隔で取得されるため、複数のバージョンのファイルシステムが経時的に維持される。各々のチェックポイントにおいて、現行の(作業中の)バージョンのファイルシステムが、循環リストにおける次に連続するDSBに移動する。特定のチェックポイント型がシステムから削除されると(例えばそのDSBが再利用されたため)、例えばもはや使用されていない記憶装置を識別し、フリーにするバックグラウンドタスクを利用して、削除されたチェックポイントに関連する記憶装置をいずれ回復させることができる。
代替の一実施形態において、特定のDSBが、連続するチェックポイントに関する現行のDSBとして再利用される場合もあり、他のDSBは、チェックポイントバージョンのファイルシステムを保存するのに使用される。
図20は、本発明の例示の一実施形態による、チェックポイントを取得する前の様々なファイルシステム構造を示す概略ブロック図である。具体的には、202及び203と番号が付けられた2つのDSBが示されている。DSB202は、現行バージョンのファイルシステムに関連しており、現行バージョンの間接オブジェクト204のルートノードに対するポインタを含む。DSB203は、次に利用可能なDSBである。
現行バージョンのファイルシステムからチェックポイントを作成する目的で、次のDSB203が、新しいチェックポイントのために初期化される。とりわけこのような初期化には、次のチェックポイント番号をDSB203に書き込むことと、間接オブジェクト204のルートノードに対するポインタをDSB203に記憶することが含まれる。図18は、本発明の例示の一実施形態による、チェックポイントを取得した後の様々なファイルシステム構造を示す概略ブロック図である。この時点で、DSB203は、最近のチェックポイントバージョンのファイルシステムを表しており、DSB202は、現行の(作業中の)バージョンのファイルシステムを表している。
上記で考察したように、現行バージョンのファイルシステムは、オブジェクトが形成、変更及び削除される際に変わる場合がある。また上記で考察したように、現行バージョンのファイルシステムが変わる際、新しいバージョンの間接オブジェクト(新しいルートノードを有する)が作成される。その結果、現行バージョンの間接オブジェクトが、図21に描写されるようにチェックポイントが取得された後に変わることで、新たな間接オブジェクトルートノードが作成される際、現行のファイルシステムバージョンのためのDSB(すなわち図21におけるDSB202)が、以前の間接オブジェクトルートノードではなく、新たな間接オブジェクトルートノードを指すように更新される。図22は、本発明の例示の一実施形態による、間接オブジェクトを変更した後の様々なファイルシステム構造を示す概略ブロック図である。ここでDSB203は、チェックポイントバージョンのファイルシステムに関連しており、チェックポイントバージョンの間接オブジェクト204を指しており、その一方でDSB202は、現行バージョンのファイルシステムに関連しており、新たな間接オブジェクト205のルートノードを指している。
特定のボリュームがマウントされる際、システムは通常、最後の有効なチェックポイントに戻る必要がある。しかしながら、システムまたはユーザが、先の有効なチェックポイントに戻ることを選択するような場合もある。本発明の実施形態では、ファイルサーバ9002は、2つ以上のチェックポイントを維持することが可能であるため、このファイルシステムが戻ることができる複数のバージョンのファイルシステムが存在する可能性がある。オペレータが種々のチェックポイントバージョンの内容を調べることができることにより、ファイルシステムを戻すためのチェックポイントバージョンの選択が容易になるという効用が与えられる。
たとえN個のチェックポイントをシステム内に維持することができるにしても(この場合、Nは典型的には3つ以上であり、ユーザが構成可能なものであってよい)、ユーザ発動式の機構によって特定のチェックポイントの保持が可能であるため、ユーザがそれを削除することを選択するまで、それは有効かつアクセス可能(読取り専用)なままである。保持されるチェックポイントは基本的に、特定のチェックポイントにおける読取り専用バージョンのファイルシステム構造である。複数の保持チェックポイントを取得することが可能であり、機構は、選択された保持チェックポイントを削除する作業、あるいはファイルシステムを選択された保持チェックポイントに戻す(例えばファイルシステムをカタストフィの後の既知の状態に戻す)作業を含む。保持チェックポイントがアクティブな状態である限り、この保持チェックポイントを有するノード及びデータブロックを変更したり、フリースペースに戻したりすることはできない。ノードやデータブロックが、複数の保持チェックポイントの構成要素である可能性があり、特定のノードやデータブロックは、ノードやデータブロックが、少なくとも1つの保持チェックポイントの構成要素である限り、フリースペースに戻すことはできないことに留意されたい。
例示の一実施形態において、保持チェックポイントの取得作業はとりわけ、対応するDSBのコピーをオンディスクのフリースペースに保存することと、記憶したDSBのコピーに対する参照を保持チェックポイント構成オブジェクトに記憶することを含む。保持チェックポイントがファイルシステムに記憶される限り、保持チェックポイントに関連する構造は削除することができない。これは、保持チェックポイントが取得されるチェックポイントが上書きされている場合でも当てはまる。例示の一実施形態においてファイルサーバ9002は、保持チェックポイントに関連する構造が削除されるのを阻止する機構を含んでいる。
ファイルクローニング
本発明の特定の実施形態において、ファイルクローニング機構を利用することで、例えばユーザがファイルのコピーを作成する際に、ファイルシステム内にファイルのコピー(クローン)を迅速に形成することが可能になる。例示の実施形態において、ソースオブジェクトのクローンは、少なくとも最初はこのソースオブジェクトの様々な要素(例えば間接ノード、直接ノード及びデータブロック)に対する参照を含む特定の構造によって表される。読取り専用クローンと、可変クローンを共に形成することができる。ソースファイルとそのクローンは最初はこのような要素を共有し、ソースファイルまたは可変クローンが変更されたときは、変更されない要素を共有し続ける。ソースファイルに関連するデータストリーム(すなわち間接/直接オーノード)を表すユーザデータブロックやメタブロックをクローンが形成されるときにコピーする必要はない。このようなファイルクローニングの一部の特徴には、以下が含まれる。
−ファイルシステムオブジェクトのデータストリームを、ソースオブジェクトのデータストリームのサイズに関わらず比較的固定された時間量で効果的に迅速にクローンすることができ、これは、このデータストリームを構成するいずれのユーザデータブロックもコピーする必要がないためである。またデータストリーム(すなわち間接/直接オーノード)を表すいずれのメタブロックもコピーする必要がない。極めて少ない一定の数のメタブロックが可変である。
−クローン/コピーされたオブジェクトにI/Oの対応させる複雑さは、通常のオブジェクトに匹敵する。
−特定のファイルやクローンをクローンすることができる回数は、ファイルシステム内のフリースペースの大きさによってのみ制限される。
−特定のファイルシステムが支持することができるクローンの数は、ファイルシステム内のフリースペースの大きさによってのみ制限される。
−このファイルクローニングは、固有のファイルの重複排除特性を有しており、すなわちソースファイルの完全なコピーを作成し、その後重複排除を行なうのではなく、そのクローンは基本的に重複排除されたファイルとして作成され、このファイルは、データ及びメタデータブロックをソースファイルと共有する。
−共有されるブロックの破損は、複数のファイルに影響を与えることになるが、データの破損は、冗長記憶装置(すなわちRAID制御装置)及び他の機構によって軽減される。
例示の一実施形態において、ファイルシステムオブジェクトは、先ずソースオブジェクトの読取り専用クローン(スナップショット)を表す新たなオブジェクトを作成し、(このオブジェクトは以後、「データ・ストリーム・スナップショット」オブジェクトまたは「DSS」と呼ばれる)、その後、このオブジェクトの可変クローンを作成することによってクローンされる。クローンオブジェクトのルートオーノードにおけるブロックポインタと、オーノードブロックポインタは最初、ソースオブジェクトと同一のブロックを指すように設定される。ソースオブジェクトからの特定のメタデータ(例えばファイル時間、安全性など)、及び名前が付けられたデータストリームは、クローンオブジェクトにコピーされない。メタデータが、ソースオブジェクト及びクローンオブジェクトにおいて維持されることで、データ・ストリーム・スナップショットオブジェクトがソースオブジェクトと、可変クローンオブジェクトに結合され、またソースオブジェクトと、可変クローンオブジェクトが、データ・ストリーム・スナップショットオブジェクトに結合される。例示の一実施形態において、データ・ストリーム・スナップショットオブジェクトは、ファイルシステムのユーザには見ることができない「隠し」オブジェクトである。ソースオブジェクト及び可変クローンオブジェクトは共に、事実上書き込み可能なバージョンのDSSオブジェクトになり、事実上DSSオブジェクトとの相違点を記憶する。
データ・ストリーム・スナップショットオブジェクトを作成する前は、システムは好ましくは、ソースオブジェクトが休止していることを保証する。例示の一実施形態においてこれは以下のステップを含む。
ステップA1.ソースオブジェクトを変化に対してロックする。
ステップA2.ファイルシステムチェックポイントを実行するが、これは事実上所与のファイルシステムに対するクローン作成に通し番号を振る(但し作成速度は、ファイルシステムが以前のチェックポイントをディスクにコミットする速度によって制限されるため、記憶側が遅れることで作成時間がより長くなる)。
その後チェックポイントが完了した後、システムは、データ・ストリーム・スナップショットオブジェクトを作成するが、これは以下のステップを含む。
ステップA3.データ・ストリーム・スナップショットオブジェクトを作成する。
ステップA4.ソースオブジェクトのルートオーノードからデータ・ストリーム・スナップショットオブジェクトのルートオーノードにブロックポインタをコピーする。
ステップA5.現行のチェックポイント番号をソースオブジェクトルートオーノードに記録する。これはオブジェクトがクローン後に入るチェックポイント番号(「CCN」)であり、これは、オブジェクトデータストリームが、その関連するデータ・ストリーム・スナップショットオブジェクトのデータストリームから分岐することができる最も早いチェックポイントを規定する。
システムはまた、以下のメタデータを維持することで、このソースオブジェクトをデータ・ストリーム・スナップショットオブジェクトに関連付ける。
ステップA6.データ・ストリーム・スナップショットオブジェクトのハンドルが、ソースオブジェクトのメタデータに記録される。
ステップA7.データ・ストリーム・スナップショットオブジェクトを参照するオブジェクトの参照カウント及びリストが、データ・ストリーム・スナップショットオブジェクトのメタデータに記録される。
ソースオブジェクトが既にクローンである(すなわち特定のクローンがクローンされている)場合、このときステップ4と5の間に2つの追加ステップがある。
ステップA4a.新しいデータ・ストリーム・スナップショットオブジェクトをソースファイルの現行のデータ・ストリーム・スナップショットオブジェクトに関連付ける。
ステップA4b.ソースファイルの現行のクローン後に入るチェックポイント番号を新しいデータ・ストリーム・スナップショットオブジェクトのルートオーノードに記録する。
データ・ストリーム・スナップショットオブジェクトのデータストリームの可変クローンを有する別のオブジェクトを以下のように作成することができる。
ステップB1.新しいファイルシステムオブジェクトを作成する。
ステップB2.データ・ストリーム・スナップショットオブジェクトのルートオーノードから新しいオブジェクトのルートオーノードにブロックポインタをコピーする。
ステップB3.現行のチェックポイント番号を新しいオブジェクトのルートオーノードに記録する。
ステップB4.データ・ストリーム・スナップショットオブジェクトのハンドルを新しいオブジェクトのメタデータに記録する。
ステップB5.データ・ストリーム・スナップショットオブジェクトの参照カウントをインクリメントし、新しいオブジェクトのハンドルをデータ・ストリーム・スナップショットオブジェクトの参照リストに加える。
クローン後に入るチェックポイント番号(CCN)は、オブジェクトのチェックポイント番号(図11では「CN」と名前が付けられている)とは別個であり、これはオブジェクトの最後の変更のチェックポイントを記録することに留意されたい。これらは共に、オブジェクトルートオーノードに記憶される。
ユーザデータまたはメタデータブロックを変更する場合、ファイルシステムは、このブロックを新たなスペースに書き込む必要があるかどうかを判断する際、このブロックが既にクローンオブジェクトの関連するデータ・ストリーム・スナップショットオブジェクトと異なっているかどうかを考慮する。
・クローンのクローン後に入るチェックポイント番号より小さいチェックポイント番号を有するポインタを介するユーザ/メタデータブロック(異ならないブロック)に対する変更を新たなスペースに書き込む必要がある。
・クローンのクローン後に入るチェックポイント番号より大きい、あるいはこれと等しいチェックポイント番号を有するポインタを介するユーザ/メタデータブロック(異なったブロック)に対する変更は、ほぼ上記に記載したように「ライブ」ファイルシステムにおけるオブジェクトに対する通常のルールに従う。
上記に記載したファイルクローニング概念の一部は、以下の例によって実証することができ、これらは図11に表されるファイルシステムオブジェクトに基づいている。
図23は、本発明の例示の実施形態による、ソースオブジェクト(ファイルA)2802と、隠しデータ・ストリーム・スナップショットオブジェクト2803と、可変クローン2805の関係を概略的に示している。
図24は、本発明の例示の実施形態による、概念上のチェックポイント番号4において図11に表されるファイルシステムオブジェクトをクローニングした後のオブジェクト2802、2803及び2805を概略的に示している。
上記で考察したように、ソースオブジェクトがロックされ、チェックポイントが取得された後(ステップA1及びA2)、データ・ストリーム・スナップショットオブジェクト2803が作成され(ステップA3)、ソースオブジェクトのルートオーノード2302からのブロックポインタが、データ・ストリーム・スナップショットオブジェクト2803のルートオーノードにコピーされる(ステップA4)。現行のチェックポイント番号が、ソースオブジェクト2802のルートオーノードに記録される(ステップA5)。データ・ストリーム・スナップショットオブジェクト2803のハンドルが、ソースオブジェクト2802メタデータに記録される(ステップA6)。データ・ストリーム・スナップショットオブジェクト2803を参照する参照カウント及びリストが、データ・ストリーム・スナップショットオブジェクト2803のメタデータに記録される(ステップA7)。この時点で、ソースオブジェクト2802のみがデータ・ストリーム・スナップショットオブジェクト2803を参照しており、参照カウントは(一時的に)1に設定される。
また上記で考察したように、可変クローン2805が作成され(ステップB1)、データ・ストリーム・スナップショットオブジェクト2803のルートオーノードからのブロックポインタが、オブジェクト2805のルートオーノードにコピーされる(ステップB2)。現行のチェックポイント番号が、オブジェクト2805のルートオーノードにコピーされる(ステップB3)。データ・ストリーム・スナップショットオブジェクト2803のハンドルが、オブジェクト2805のメタデータに記録される(ステップB4)。データ・ストリーム・スナップショットオブジェクト2803における参照カウントがインクリメントされ、オブジェクト2805のハンドルが、データ・ストリーム・スナップショットオブジェクト2803の参照リストに記録される(ステップB5)。
2802と2803の間にある点線の両方向の矢印は、これら2つの構造の結合状態を表しており、同様に2803と2805の間にある点線の両方向の矢印は、これらの2つの構造の結合状態を表していることに留意されたい。
可変クローン2805が作成される際、ブロックポインタなどの情報が、DSSオブジェクト2803からではなく、ソースオブジェクト2802からコピーされる場合もあるが、DSSオブジェクト2803からコピーされるのが好ましく、これによりソースオブジェクト2803を休止状態からより早く解放することが可能になる(例えばDSSオブジェクト2803を作成した後であり、可変クローン2805が作成される前など)ことに留意されたい。
ソースオブジェクト2802が、変更される前に再度クローン形成される場合、第2の可変クローンが作成される。図25は、本発明の例示の一実施形態による、ソースオブジェクト(ファイルA)2802と、隠しデータ・ストリーム・スナップショットオブジェクト2803と、2つの可変クローン2805及び2807の関係を概略的に示している。
図26は、本発明の例示の一実施形態よる、概念上のチェックポイント番号6において第2の可変クローンが作成された後の、オブジェクト2802、2803、2805及び2807を概略的に示している。具体的には第2の可変クローン2807が作成され、データ・ストリーム・スナップショットオブジェクト2803のルートオーノードからのブロックポインタが、オブジェクト2807のルートオーノードにコピーされる。現行のチェックポイント番号が、オブジェクト2807のルートオーノードに記録される。データ・ストリーム・スナップショットオブジェクト2803のハンドルが、オブジェクト2807のメタデータに記録される。データ・ストリーム・スナップショットオブジェクト2803における参照カウントがインクリメントされ、オブジェクト2807のハンドルが、データ・ストリーム・スナップショットオブジェクト2803の参照リストに記録される。
ソースオブジェクト2802は事実上、データ・ストリーム・スナップショットオブジェクト2803の可変コピーであるため、ソースオブジェクト2802が経時的に変更される場合があり、これによりソースオブジェクト2802のデータストリームは、データ・ストリーム・スナップショットオブジェクト及び他のファイルクローンのデータストリームと異なるようになる。例えば図24及び図11から16に示されるオブジェクト構造を再度参照すると、例えばいわば概念上のチェックポイント5において2802でルートされたソースオブジェクトのデータブロック0(2310)の変更は、新しい間接オーノードを指すルートオーノード2802を有する分岐ツリー構造となり(図11に示されるオブジェクトが、図12から16に示されるように概念上のチェックポイント3において変更される際、ルートオーノード2403が最後には、間接オーノード2704を指すようになるとの同様に)、ルートオーノード2803と、2805は、間接オーノード2304を指し続ける。同様にデータ・ストリーム・スナップショットオブジェクトの可変クローンが経時的に変更される場合があり、これによりこの可変コピーのデータストリームは、データ・ストリーム・スナップショットオブジェクト及び他のクローンのデータストリームとは異なることになる。
ソースオブジェクトが変更された後、変更後のソースオブジェクトのコピーが作成される場合、このとき変更後のソースオブジェクトのために、追加ステップA4a及びA4bを含めた上記に記載した過程を使用して第2のデータ・ストリーム・スナップショットオブジェクトが作成され、その後この第2のデータ・ストリーム・スナップショットオブジェクトの可変クローンが作成される。
図27は、変更後のソースオブジェクト2802’と(アポストロフィは、変更後のソースオブジェクトの型を表している)、2つの元のソースオブジェクトクローン2805及び2807を有する第1のデータ・ストリーム・スナップショットオブジェクト2803と、第2のデータ・ストリーム・スナップショットオブジェクト2809と、第2のデータ・ストリーム・スナップショットオブジェクト2809の可変クローン2811の関係を概略的に示している。ここに見ることができるように、データ・ストリーム・スナップショットオブジェクト2803及び2809は、論理上に階層的に結合されている。
図28は、本発明の例示の実施形態による、概念上のチェックポイント番号8において変更後のソースオブジェクト2802’をクローニングした後の、オブジェクト2802’、2803、2809及び2811を概念的に示している。
上記で考察したように、データ・ストリーム・スナップショットオブジェクト2809が作成され(ステップA3)、ソースオブジェクト2802’のルートオーノードからのブロックポインタが、データ・ストリーム・スナップショットオブジェクト2809のルートオーノードにコピーされる(ステップA4)。データ・ストリーム・スナップショットオブジェクト2809は、ソースオブジェクトの現行のデータ・ストリーム・スナップショットオブジェクト2803に関連付けられ(ステップA4a)、これは具体的にはDSS2803のハンドルをDSS2809に記録し、DSS2809のハンドルをDSS2803のオブジェクトリストに記録し、DSS2803における参照カウントをインクリメントすることによって行なわれる。ソースファイル2802’の現行のクローン後に入るチェックポイント番号が、DSS2809のルートノードに記録される(ステップA4b)。現行のチェックポイント番号が、ソースオブジェクト2802’のルートオーノードに記録される(ステップA5)。データ・ストリーム・スナップショットオブジェクト2809のハンドルが、ソースオブジェクト2802’メタデータに記録される(ステップA6)。データ・ストリーム・スナップショットオブジェクト2809を参照する参照カウント及びオブジェクトリストが、データ・ストリーム・スナップショットオブジェクト2809のメタデータに記録される(ステップA7)。この時点で、ソースオブジェクト2802’のみが、データ・ストリーム・スナップショットオブジェクト2809を参照しており、その参照カウントは(一時的に)1に設定される。
また上記で考察したように、可変ファイルコピー2811が作成され(ステップB1)、データ・ストリーム・スナップショットオブジェクト2809のルートオーノードからのブロックポインタがオブジェクト2811のルートオーノードにコピーされる(ステップB2)。現行のチェックポイント番号が、オブジェクト2811のルートオーノードにコピーされる(ステップB3)。データ・ストリーム・スナップショットオブジェクト2809のハンドルが、オブジェクト2811のメタデータに記録される(ステップB4)。データ・ストリーム・スナップショットオブジェクト2809における参照カウントがインクリメントされ、オブジェクト2811のハンドルが、データ・ストリーム・スナップショットオブジェクト2809の参照リストに記録される(ステップB5)。
ソースオブジェクト2802’は経時的にさらに変更される場合もあり、将来バージョンのこのオブジェクトのクローンは、第1のDSS2803及び第2のDSS2809に階層的に結合された追加のデータ・ストリーム・スナップショットオブジェクトとなることに留意されたい。同様にクローン2805及び/またはクローン2807が経時的に変更される場合もあり、それらのクローン(未変更のものと変更後のものの両方)のコピーを、ほぼ上記に記載したようにその時々で作成することができ、必要に応じて追加のDSSオブジェクトが階層的に加えられる。未変更のオブジェクト2805のクローニングは実質的に、未変更のソースオブジェクト2802のクローニングと同様であり、これは、第1のDSSオブジェクト2803に結合された別の可変クローンとなり、これにより変更後のバージョンのオブジェクト2805のクローニングが、新しいDSSに結合された変更後のオブジェクトの可変コピーを作成することになり、この新しいDSSが今度は、第1のDSSオブジェクト2803に結合される。
例示の一実施形態において、特定のソースオブジェクトに関連するDSSオブジェクトは、このソースオブジェクト及び全てのクローンが削除されるまで、ファイルシステム内に残ったままである。よって例えば、図27に示されるクローン2805、2807及び2811がたとえ削除されたとしても、図29に概略的に表されるように、DSS2803、DSS2809及びオブジェクト2802’は残される。この例では、ファイルシステムは、現行バージョンのオブジェクトだけでなく、2つの前のスナップショット型も含んでいる。ソースオブジェクトがスナップショットバージョンのオブジェクトと相当異ならない限り、及びそうなるまでは、オブジェクトは、多くのデータ及びメタデータを共有すべきであり、よってスナップショットオブジェクトを維持するのに、多くの記憶スペースを消費すべきではない。必要であれば、あるいは望ましい場合は、スナップショットオブジェクトは、例えばデクローニング作業によって排除される場合もあり、この作業は、基本的にオブジェクト2802’が元の(すなわちクローンされていない)オブジェクトとして現れるように再構築し、DSSオブジェクトを排除し、オブジェクト2802’と共有されないDSSオブジェクトからのデータ及びメタデータブロックを解放する。このような機能の一部または全ては、「バックグラウンド」タスクとして行なうことができる。
ステップA4a及びA4bを含むステップA1からA7を参照して上記の論理の流れを利用して、本発明の例示の一実施形態において種々のオブジェクトがいかにして形成され、結合されるかを実証している。履行上は任意選択のステップA4a及びA4bは仮想ステップであってよく、すなわち共通の論理を使用して、最初のクローニングとクローンのクローニングの両方を行なうことができる。例えば、各々のルートオーノードは基本的に、階層的により高いルートオーノードを参照する「アップポインタ」を含む。当初はソースオブジェクトにおけるアップポインタはヌルであるが、その理由はソースオブジェクトが、階層的にこれより高いDSSオブジェクトを参照しないためである。ソースオブジェクトがクローンされる際、この共通の論理が、このアップポインタを、ソースオブジェクトのルートオーノードから新たに作成されたDSSオブジェクト(すなわち第1のDSSオブジェクト)にコピーすることができ、その後ソースオブジェクトのルートオーノードにおけるアップポインタをDSSオブジェクトを参照するように設定することができ、同様に現行のチェックポイント番号をソースオブジェクトから第1のDSSオブジェクトにコピーし、その後この現行のチェックポイント番号をソースオブジェクトに記録する。結果として生じるアップポインタが図24に描かれている。ソースオブジェクトはこの時変更される場合がある。変更後のソースオブジェクトがクローンされる際、共通の論理は、このアップポインタを、変更後のソースオブジェクト(これは第1のDSSオブジェクトを参照する)から新たに作成された第2DSSオブジェクトにコピーし、その後変更後のソースオブジェクトにおけるアップポインタを第2DSSオブジェクトを参照するように設定することができ、同様にこのチェックポイント番号を変更後のオブジェクトから第2DSSオブジェクトにコピーし、現行のチェックポイント番号の変更後のオブジェクトに記録することができる。結果として生じるアップポインタが図28に描かれている。したがってこのような共通のコードは事実上、クローンされていないファイルのクローニングと、クローン後のファイルのクローニングとを区別する必要がなく、このような共通のコードは、任意の数の階層的な結合レベルを形成する。このような共通のコードの特定の利点は、ハードウェアベースのファイルシステムにおけるインプリメンテーションが容易であることである。
上記に記載した例示の一実施形態において、DSSオブジェクトは、種々のオブジェクトに関連するファイルハンドルを利用して、ソースオブジェクト及び1つ以上のクローンオブジェクトに結合されており、その逆も同様である。とりわけこのような結合作業によって、ストレージシステム制御装置が、特定のファイルがクローン作成されているかを迅速に認識し、またクローン後のファイルに関連するオブジェクトを突き止めることが可能になる。本発明は、ルートオーノードを結合する目的でのファイルハンドルの利用に限定されるものではないことに留意されたい。むしろ、ファイルハンドルに加えて、あるいはその代わりに、例えばオブジェクト番号などの他の情報が使用される可能性がある。
例示の一実施形態では、クローン後のファイルに属するサイズは、このクローンが作成されたソースファイルのサイズであることに留意されたい。よって例えば1ギガバイトのファイルをクローニングすると、このクローン後のファイルに関連する割り当て量に1ギガバイトが課されることに留意されたい。割り当て量は、クローンファイル同士のいかなるブロック共有も考慮しない。
性能の点において、クローンオブジェクトに対する読み取り及び書き込み作業は、通常の非クローンファイルの読み取り及び書き込み作業と一致すべきである。非クローンファイルに関して、ハードウェアベースのファイルシステムは、クローン後のファイルに対して自動で問い合わせし、自動で応答するNFS/CIFS動作が可能である。クローン後のクライアント側の削除は(例えば「rm」コマンドを使用する)、即座に完了させることができ、実際のファイル及びDSSオブジェクトの排除は、バックグウンドにおいて行なわれる。
クローンオブジェクトは、異なるユーザ及び集団によって「所有される」場合があり、ソースオブジェクト及び他のクローンと異なるディレクトリツリーに位置付けられる場合もあることを留意されたい。
上記に記載したファイルクローニング構造は、ファイルをファイルシステム内で管理する目的で使用されており、ファイルシステムの外からこのファイルにアクセスする方法には影響しないことに留意されたい。非クローンファイルに関して、クローン後のファイル(例えばHSR/NDMP)の転送は、ファイルの中身全体を転送するため、移動先では「膨れた」ファイルになる。
上記に記載したクローニング論理は好ましくは、本発明の例示の一実施形態において、ハードウェアベースのファイルシステムの一部として大部分がハードウェアに実装されることに留意されたい。
クローン後のオブジェクトのデクローニング
上記で考察したように、例示の一実施形態において、特定のソースオブジェクトに関連するDSSオブジェクトは、このソースオブジェクト及び全てのクローンが削除されるまでファイルシステム内に残ったままである。ソースオブジェクトがスナップショットバージョンのオブジェクトと相当異ならない限り、あるいはそうなるまで、オブジェクトは、多くのデータ及びメタデータブロックを共有すべきであるため、スナップショットオブジェクトを維持するのに多くの記憶スペースを消費すべきではない。必要であれば、あるいは望ましい場合は、スナップショットオブジェクトは、例えばデクローニング作業によって排除される場合もあり、この作業は、基本的にオブジェクト2802’が元の(すなわちクローンされていない)オブジェクトとして現れるように再構築し、DSSオブジェクトを排除し、オブジェクトと共有されないDSSオブジェクトからのデータ及びメタデータブロックを解放する。このような機能の一部または全ては、「バックグラウンド」タスクとして行なうことができる。
例示の一実施形態において、このような「デクローニング」は、以下のように行なわれる。DSSオブジェクトの参照カウントが1になり(図29でのように)、残っている参照がクローンである(別のDSSオブジェクトではない)場合、このクローンは、DSSオブジェクトから「デクローン」することができ、DSSオブジェクトは削除することができる。
例示の一実施形態においてこのような「デクローニング」は、ユーザデータブロックの所有権をDSSからその最後に残ったライブファイル可変クローンに移すことによって行なわれる。この点に関して、オブジェクト(DSSまたは可変クローン)は、ブロックポインタのチェックポイント番号がこのオブジェクトがクローン後に入るチェックポイント番号より大きいか、あるいはそれと等しい場合、独自のブロックを所有すると考えられる(この場合の所有権は、解放するための任務を意味する)。共有されるユーザデータブロックの所有権は、以下によりライブ−ファイルに移すことができる。
1.ライブ−ファイルのブロックポインタのチェックポイント番号を作成する。
a.このライブ−ファイルがクローン後に入るチェックポイント番号より大きいか、またはこれと等しい。
b.ファイルシステムの現行のCP番号より小さい(例えば、ブロックが現行のチェックポイントにおいて実質的に変更された場合、ブロックのクラッシュに対する堅牢性を確実に保つため)。
2.DSSのブロックポインタを少なくする。
例示の一実施形態において、ステップ1での状況に合わせるために、ライブ−ファイルがクローン後に入るチェックポイント番号が使用される。チェックポイントが、いずれかのブロックポインタを変える前に発行されることデクローン後のファイルが入るチェックポイント番号が確実にファイルシステムの現行のCP番号より小さくなるようにする。
例示の一実施形態において、DSSに対する更新は、それが所有する(及びステップ1より前には、ライブ−ファイルと共有していた可能性がある)オーノードの一部を解放する可能性があるため、このような2つのステップの順番が重要である。
図30(サブパート30Aから30Cを有する)を使用して、本発明の例示の一実施形態によるファイルデクローニングの種々の態様を実証する。
図30Aは、各々のオブジェクトのルートオーノードにおける最初の3つのブロックポインタを描いている、特定の組織系統のオブジェクトを概略的に示している。
具体的には、第1のスナップショットオブジェクトは、クローン後に入るチェックポイント番号10を有する。そのブロックポインタは、ブロック1−3に記憶されたデータをそれぞれ指している。
第2のスナップショットオブジェクトは、クローン後に入るチェックポイント番号20を有する。それは(依然として)、その第1ブロックを第1のスナップショットオブジェクトと共有している。その第2及び第3ブロックは異なっており、そのため第2及び第3のブロックポインタは、ブロック4及び5に記憶されたデータをそれぞれ指している。
ライブ−ファイルオブジェクトは、クローン後に入るチェックポイント番号30を有する。それはその第1ブロックを、第1のスナップショット及び第2スナップショットオブジェクトと共有しており、その第2ブロックを第2スナップショットオブジェクトと共有している。その第3ブロックは異なっており、そのためその第3ブロックポインタは、ブロック6に記憶されたデータを指している。
第2スナップショットオブジェクト(すなわち親DSSオブジェクト)の参照カウントが1に下がった場合、このときそれが所有し、かつライブ−ファイルオブジェクトと共有するユーザデータブロックの所有権が、対応するブロックポインタを自動的に変えることによってライブ−ファイルオブジェクトに移すことができる。具体的には、DDSオブジェクトに所有され、ライブ−ファイルオブジェクトと共有される各々のデータブロックに関して、DDSオブジェクトにおける対応するブロックポインタが「少なく」され(これは以下でもっと十分に考察するように、ブロックポインタのチェックポイント番号を更新する)、ライブファイルオブジェクトにおける対応するブロックポインタに関連するチェックポイント番号が、ライブ−ファイルオブジェクトがクローン後に入るチェックポイント番号に更新される。図30Bは、第2スナップショットオブジェクト(すなわちDDSオブジェクト)からライブ−ファイルオブジェクトへのブロック4の所有権の移動を概略的に描いている。具体的には、ブロック4に対する第2スナップショットのポインタが「少なく」され、ブロック4に対するライブ−ファイルのポインタのチェックポイント番号が、ライブ−ファイルオブジェクトがクローン後に入るチェックポイント番号に更新される。
このような変換は、変更後のオーノードを保存するための以下の通常のルールに従って行なわれる。具体的にはブロックポインタが更新される毎に、そのブロックポインタに関連するチェックポイント番号が、現行のチェックポイント番号に更新される。ブロックポインタは変更されているため、中にあるオーノードは新たなスペースに書き込まれる。そのオーノードが直接または間接オーノードである場合、このとき親オーノードにおけるそのオーノードに対するブロックポインタも更新されることで、親オーノードが変更され、新たなスペースに書き込まれるなどされ、最終的にはルートオーノードが処理される。所有権移動プロセスの終わりには、ライブ−ファイルオブジェクトと、DSSオブジェクトはもはやいかなるオーノードも共有しない。
よって例示の一実施形態において、共有されるブロックの所有権をDSSオブジェクトからライブ−ファイルオブジェクトに移すために、ライブ−ファイルオブジェクトが詳しく点検され、各々の領域に関してDSSオブジェクトによって共有され所有されることが分かった領域に関して、ライブ−ファイルオブジェクトにおける関連するブロックポインタに「作用し」(これは影響を受けたブロックポインタのチェックポイントを更新するが、それは、対応するブロックが書き込まれるが、いかなるデータも実際には書き込まれていない場合にチェックポイント番号を更新するのと同様であり、その結果ライブファイルオブジェクトが今度はこれらのブロックを所有する)、DDSオブジェクトにおける関連するブロックポインタが少なくされ(これにより、影響を受けたブロックポインタが何も指さないようにし、またチェックポイント番号を更新し、事実上DSSオブジェクトに「ホール」を形成し、その結果DSSオブジェクトが最終的に削除されるときは、ライブ−ファイルオブジェクトに移されたユーザデータブロックをもはや指してはいない)。これ以前はDSSオブジェクトによって所有されていた全ての共有されるユーザデータブロックに関するブロックポインタが、このようにして変換されると、DSSオブジェクトを安全に削除することができる。
再び図30Bを参照すると、第2スナップショットオブジェクトの削除が始まる前に、ライブ−ファイルオブジェクトが第2スナップショットオブジェクトの参照リストから排除され、第1のスナップショットオブジェクトの参照リストに加えられ、これにより第1のスナップショットオブジェクトをライブ−ファイルの親DSSにする。第1のスナップショットオブジェクトに関する参照カウントが1に達した場合(すなわちライブ−ファイルオブジェクトが第1のスナップショットオブジェクトの唯一の子供である)、このとき第1のスナップショットオブジェクトを、上記で考察したようにデクローンすることができる。例えば図30Cに概略的に描かれるように、ブロック1の所有権が、第1のスナップショットオブジェクトからライブ−ファイルオブジェクトに移される。第1のスナップショットオブジェクトによって所有され、ライブ−ファイルオブジェクトと共有される全てのブロックの所有権が移された後、第1のスナップショットオブジェクトを排除することができる。
例示の一実施形態において、「デクローニング」プロセスは、限定された数のユーザデータブロックの所有権を、ライブ−ファイルをロックしたまま一度に移すことによって、同時発生的に変化するライブ−ファイルに対処する。またライブ−ファイルがこのプロセスにおいてクローンされる場合、このプロセスは中止される。この「デクローニング」プロセスは場合によって、多くの間接/直接オーノードを「汚す」ことがあるが、ユーザデータブロックを汚すことはない。けれども1つの有益な副産物は、それがライブ−ファイルのこれ以前に共有されていたオーノードを「正しい」オブジェクト番号を有するようにしたままにし、カウントを再利用することである。全てのライブ−ファイルの直前のDSSオブジェクトの全てを削除した後、ライブ−ファイルは、通常の(クローンされていない)ファイルに戻るように変換することができる。
その他
用語「サーバ」は、本発明の特定の実施形態で使用される可能性のあるデバイスを記述するのに本明細書で使用することができ、文脈がそれ以外を要求しない限り、本発明を任意の特定のデバイスのタイプに限定するものと解釈すべきではないことに留意されたい。したがってデバイスは、限定せずに、ブリッジ、ルータ、ブリッジ−ルータ(ブルータ)、スイッチ、ノード、サーバ、コンピュータ、付属機器または他のタイプのデバイスを含むことができる。このようなデバイスは典型的には、通信ネットワークによって通信する1つ以上のネットワークインターフェースと、デバイスの機能を果たすようにこれに従って構成されたプロセッサ(例えばメモリ及び他の周辺装置及び/または特定用途のハードウェアを備えたマイクロプロセッサ)を含む。通信ネットワークは一般に、パブリック及び/またはプライベートネットワークを含むことができ、ローカルエリア、ワイドエリア、首都圏エリア、ストレージ及び/または他のタイプのネットワークを含むことができ、限定するものではないが、アナログ技術、デジタル技術、光技術、無線技術(例えばブルートゥース)、ネットワーキング技術及びインターネットワーキング技術を含めた通信技術を利用することができる。
デバイスは、通信プロトコルと、(例えばこのデバイスによって作成された、伝送された、受信された、記憶された及び/または処理された)メッセージを使用する場合があり、このようなメッセージは、通信ネットワークや通信媒体によって伝えることができる。文脈がそうでないことを要求しない限り、本発明は、任意の特定の通信メッセージタイプ、通信メッセージフォーマットまたは通信プロトコルに限定されるものと解釈すべきではない。よって通信メッセージは一般に、限定ではなく、フレーム、パケット、データグラム、ユーザデータグラム、セルまたは他のタイプの通信メッセージを含むことができる。文脈がそうでないことを要求しない限り、特定の通信プロトコルに対する参照が代表的であり、代替の実施形態は適切であれば、いろいろな種類(例えば、その時々に形成され得るプロトコルの修正形態または拡張形態)のこのような通信プロトコル、あるいは将来知られる、または開発される他のプロトコルを利用することができることを理解されたい。
また論理の流れは、本発明の様々な態様を実証するために本明細書に記載されてよく、本発明は、任意の特定の論理の流れまたは論理の実施に限定されるものと解釈すべきではないことに留意されたい。記載される論理は、全体の結論を変えずに、あるいはそうでければ本発明の真の範囲から逸脱せずに、様々な論理ブロック(例えばプログラム、モジュール、ファンクションまたはサブルーティン)に分割することができる。多くの場合、論理要素は、様々な順番で追加される、変更される、省略される、実施される、あるいは種々の論理構造を使用して(例えば論理ゲート、ルーピングプリミティブ、条件付きロジック及び他の論理構造)実施することができる。
本発明は、多くの異なる形態で具現化することができ、これらの形態には、これに限定するものではないが、プロセッサ(例えばマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサまたは汎用コンピュータ)と共に使用するためのコンピュータプログラム論理、プログラマブルロジックデバイス(例えばフィールドプログラマブルゲートアレイ(FPGA)または他のPLD)と共に使用するためのプログラマブル論理、ディスクリート要素、集積回路(例えば特定用途向け集積回路(ASIC))、あるいはその何らかの組み合わせを含めた任意の他の手段が含まれる。記載される機能の一部または全てを履行するコンピュータプログラム論理は典型的には、コンピュータプログラム指示のセットとして履行され、この指示は、コンピュータ実行可能形態に変換され、コンピュータ読取り可能媒体にそのように記憶され、作動システムの制御の元にマイクロプロセッサによって実行される。記載される機能の一部または全てを履行するハードウェアベースの論理は、1つ以上の適切に構成されたFPGAを使用して履行される場合もある。
先に本明細書において記載された機能の一部または全てを履行するコンピュータプログラム論理は、種々の形態で具現化することができ、これらの形態には、これに限定するものではないがソースコード形態、コンピュータ実行可能形態及び種々の中間形態(例えばアセンブラ、コンパイラ、リンカーまたはロケータによって形成される形態)が含まれる。ソースコードは、種々の作動システムまたは作動環境で使用するための種々のプログラミング言語(例えばオブジェクトコード、アセンブリ言語またはフォートラン、C、C++、ジャバ、またはHTMLなどのハイレベル言語)のいずれかで履行される一連のコンピュータプログラム指示を含むことができる。ソースコードは、種々のデータ構造及び通信メッセージを定義し利用することができる。ソースコードは、コンピュータ実行可能形態(例えばインタープリタを介して)であってよい、あるいはソースコードは、(例えばトランスレータ、アセンブラまたはコンパイラを介して)コンピュータ実行可能形態に変換される場合もある。
先に本明細書に記載した機能の全てまたは一部を履行するコンピュータプログラム論理は、それぞれ異なるときに1つのプロセッサにおいて実行することができる(例えば同時発生的に)、あるいは同一のまたは異なるときに複数のプロセッサにおいて実行することができ、単独の作動システムプロセス/スレッドの下、あるいは異なる作動システムプロセス/スレッドの下に動作することができる。したがって用語「コンピュータプロセス」は一般に、コンピュータプログラム指示のセットを指しており、これは、異なるコンピュータプロセスが同一のプロセッサにおいて実行されているか、あるいは異なるプロセッサにおいて実行されているか、異なるコンピュータプロセスが、同一の作動システムプロセス/スレッドの下に動作するのか、あるいは異なる作動システムプロセス/スレッドの下に動作するのかには関係ない。
コンピュータプログラムは、任意の形態(例えばソースコード形態、コンピュータ実行可能形態または中間形態)で、実在する記憶媒体に永久的にあるいは一時的に固定することができ、この記憶媒体は例えば、半導体メモリデバイス(例えば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 (26)

  1. ファイルシステムオブジェクトをクローニングすることをコンピュータに実行させるためのコンピュータプログラムであって、
    前記ファイルシステムオブジェクトは、ルートノードと、間接ノードと、少なくとも1つのデータブロックと、前記ファイルシステムオブジェクトの前記ルートノードに記憶されるポインタセットであるポインタセットとを含んでおり、
    前記ファイルシステムオブジェクトの前記ルートノードの前記ポインタセットは、前記少なくとも1つのデータブロックを、前記ファイルシステムオブジェクトの前記ルートノードの前記ポインタセットにより参照された前記間接ノードを介して参照し、
    前記コンピュータプログラムは、
    第1のスナップショットオブジェクトをファイルストレージシステムに作成し、前記第1のスナップショットオブジェクトに前記ファイルシステムオブジェクトの前記ポインタセットのコピーを記憶することと、
    書込み可能なクローンオブジェクトを前記ファイルストレージシステムに作成し、前記クローンオブジェクトに前記ファイルシステムオブジェクトの前記ポインタセットのコピーを記憶すること
    とをコンピュータに実行させ、
    前記第1のスナップショットオブジェクトと前記クローンオブジェクトが、それぞれ、前記ポインタセットがコピーされるルートノードを含み、
    前記ファイルシステムオブジェクトの前記ルートノードの前記ポインタセット、前記第1のスナップショットオブジェクトの前記ルートノードの前記ポインタセット、及び、前記クローンオブジェクトの前記ルートノードの前記ポインタセットが、同じ間接ノードを参照することで、前記第1のスナップショットオブジェクト及び前記クローンオブジェクトが、前記参照された間接ノードと前記少なくとも1つの参照されたデータブロックを前記ファイルシステムオブジェクトと共有し、
    前記ファイルシステムオブジェクト及び前記クローンオブジェクトが、書込み可能な前記第1のスナップショットオブジェクトになり、前記第1のスナップショットオブジェクトによって表されるオブジェクトのコピーからの変化を記憶し、
    前記第1のスナップショットオブジェクトを管理するメタデータが、前記第1のスナップショットオブジェクトを参照するオブジェクトの数を示す参照カウントを記憶する、
    コンピュータプログラム。
  2. メタデータが前記ファイルシステムオブジェクトと前記クローンオブジェクトにおいて維持され、前記第1のスナップショットオブジェクトが前記ファイルシステムオブジェクト及び前記クローンオブジェクトに関連し、前記ファイルシステムオブジェクト及び前記クローンオブジェクトが前記第1のスナップショットオブジェクトに関連し、
    前記ファイルシステムオブジェクトにおいて維持されるメタデータと前記クローンオブジェクトにおいて維持されるメタデータが前記第1のスナップショットオブジェクトに対する参照を記憶する、
    請求項1に記載のコンピュータプログラム。
  3. 前記第1のスナップショットオブジェクトと前記クローンオブジェクトの作成に際し、前記ファイルシステムオブジェクトのデータストリームが、前記ファイルシステムオブジェクトの前記ルートノードと前記クローンオブジェクトの前記ルートノードとにおいて、その関連した第1のスナップショットオブジェクトのデータストリームから分岐できる最も早いチェックポイントを定義するチェックポイント番号である最古のチェックポイント番号として、前記ファイルシステムオブジェクトの前記ルートノードは、前記ファイルシステムオブジェクトの最終変更のチェックポイントを記録する現在のチェックポイント番号を記憶る、
    請求項1又は2に記載のコンピュータプログラム。
  4. 前記第1のスナップショットオブジェクト及び前記クローンオブジェクトの作成に際し、前記第1のスナップショットオブジェクトの前記ルートノードにおける前記最古のチェックポイント番号として、前記ファイルシステムオブジェクトがすでにクローンであった場合、前記ファイルシステムオブジェクトの前記ルートノードに記憶された前記現在のチェックポイント番号がさらに記憶される、
    請求項3に記載のコンピュータプログラム。
  5. 前記ファイルストレージシステムは前記第1のスナップショットオブジェクトに対応しライブファイルシステムにおけるオブジェクトであるライブファイルオブジェクトを含み、それぞれのオブジェクトはユーザデータブロックの番号と関連しており、
    前記コンピュータプログラムは、
    前記第1のスナップショットオブジェクトにより所有され、前記ライブファイルオブジェクトと共有される各々のユーザデータブロックに関して、前記ユーザデータブロックの所有権を前記ライブファイルオブジェクトに移すことと、
    このような転送に続いて、前記ファイルストレージシステムから前記第1のスナップショットオブジェクトを排除することを含む、ファイルのデクローニングと
    を更にコンピュータに実行させる請求項3又は4に記載のコンピュータプログラム。
  6. 各オブジェクトはいくつかのブロックポインタを含み、
    各ポインタはそれぞれのチェックポイント番号に関連しており、
    前記ユーザデータブロックの所有権を前記ライブファイルオブジェクトへ移すことは、
    前記第1のスナップショットオブジェクトにおいて前記ブロックポインタを少なくすることと、
    前記ライブファイルオブジェクトにおける前記対応するブロックポインタの前記チェックポイント番号を前記ライブファイルオブジェクトの前記クローン後に入るチェックポイント番号に設定することを含む、
    請求項5に記載のコンピュータプログラム。
  7. 前記第1のスナップショットオブジェクトが隠しファイルシステムオブジェクトである、
    請求項1乃至6のうちのいずれか1項に記載のコンピュータプログラム。
  8. 前記クローンオブジェクトが作成された前記ファイルシステムオブジェクトのサイズが前記クローンオブジェクトに起因すると判断すること
    を更にコンピュータに実行させる請求項1乃至7のうちのいずれか1項に記載のコンピュータプログラム。
  9. 前記書込み可能なファイルシステムオブジェクト又は前記書込み可能なクローンオブジェクトを変更する際、前記変更を記憶するために少なくとも1つのデータブロックを割り当て、前記少なくとも1つの割り当てられたデータブロックを前記変更後のオブジェクトに関連付けることを更にコンピュータに実行させ、
    前記変更後のオブジェクトが、変更後のポインタセットを含む、
    請求項1乃至8のうちのいずれか1項に記載のコンピュータプログラム。
  10. 前記ファイルストレージシステムにおいて、第2のスナップショットオブジェクトを作成し、前記第2のスナップショットオブジェクトに前記変更後のポインタセットのコピーを記憶することと、
    前記ファイルストレージシステムにおいて、書込み可能な第2のクローンオブジェクトを作成し、前記第2のクローンオブジェクトに前記変更後のポインタセットのコピーを記憶すること
    を更にコンピュータに実行させる請求項9に記載のコンピュータプログラム。
  11. 前記第2のスナップショットオブジェクトに、前記変更後のオブジェクトに対する参照、前記第2のクローンオブジェクトに対する参照、及び前記第1のスナップショットオブジェクトに対する参照を記憶することと、
    前記変更後のファイルシステムオブジェクトに、前記第2のスナップショットオブジェクトに対する参照を記憶することと、
    前記第2のクローンオブジェクトに、前記第2のスナップショットオブジェクトに対する参照を記憶すること
    を更にコンピュータに実行させる請求項10に記載のコンピュータプログラム。
  12. 前記第1のスナップショットオブジェクト使用して、前記ファイルシステムオブジェクトの別のクローンを作成すること
    を更にコンピュータに実行させる請求項1乃至11のうちのいずれか1項に記載のコンピュータプログラム。
  13. 前記第1のスナップショットオブジェクトが、読取り専用データストリームスナップショットオブジェクトである、
    請求項1乃至12のうちのいずれか1項に記載のコンピュータプログラム。
  14. ファイルシステムオブジェクトをクローニングするために構成されたファイルストレージシステムであって、
    前記ファイルシステムオブジェクトが、ルートノード、間接ノードと、少なくとも1つのデータブロックと、前記ファイルシステムオブジェクトの前記ルートノードに記憶されるポインタセットであるポインタセットとを含んでおり、
    前記ファイルシステムオブジェクトの前記ルートノードの前記ポインタセットは、前記少なくとも1つのデータブロックを、前記ファイルシステムオブジェクトの前記ルートノードの前記ポインタセットにより参照された前記間接ノードを介して参照し、
    前記ファイルストレージシステムは、
    少なくとも1つの記憶デバイスと、
    前記少なくとも1つの記憶デバイスと通信するプロセッサであって、前記ファイルストレージシステムに第1のスナップショットオブジェクトを作成し、前記第1のスナップショットオブジェクトに前記ファイルシステムオブジェクトの前記ポインタセットのコピーを格納することと、前記ファイルストレージシステムにおいて書込み可能なクローンオブジェクトを作成し、前記クローンオブジェクトに前記ファイルシステムオブジェクトの前記ポインタセットのコピーを格納することとを実行するプロセッサと
    を備え、
    前記第1のスナップショットオブジェクトと前記クローンオブジェクトが、それぞれ、前記ファイルシステムオブジェクトの前記ルートノードの前記ポインタセットがコピーされるルートノードを含み、
    前記ファイルシステムオブジェクトの前記ルートノードの前記ポインタセット、前記第1のスナップショットオブジェクトの前記ルートノードの前記ポインタセット、及び、前記クローンオブジェクトの前記ルートノードの前記ポインタセットが、同じ間接ノードを参照することで、前記第1のスナップショットオブジェクト及び前記クローンオブジェクトが、前記参照された間接ノードと前記少なくとも1つの参照されたデータブロックを前記ファイルシステムオブジェクトと共有し、
    前記ファイルシステムオブジェクト及び前記クローンオブジェクトが、書込み可能な前記第1のスナップショットオブジェクトになり、前記第1のスナップショットオブジェクトによって表されるオブジェクトのコピーからの変化を記憶し、
    前記第1のスナップショットオブジェクトを管理するメタデータが、前記第1のスナップショットオブジェクトを参照するオブジェクトの数を示す参照カウントを記憶する、
    ファイルストレージシステム。
  15. メタデータが前記ファイルシステムオブジェクトと前記クローンオブジェクトにおいて維持され、前記第1のスナップショットオブジェクトが前記ファイルシステムオブジェクト及び前記クローンオブジェクトに関連し、前記ファイルシステムオブジェクト及び前記クローンオブジェクトが前記第1のスナップショットオブジェクトに関連し、
    前記ファイルシステムオブジェクトにおいて維持されるメタデータと前記クローンオブジェクトにおいて維持されるメタデータの各々が前記第1のスナップショットオブジェクトの参照を記憶する、
    請求項14に記載のファイルストレージシステム。
  16. 前記第1のスナップショットオブジェクトと前記クローンオブジェクトの作成に際し、前記ファイルシステムオブジェクトのデータストリームが、前記ファイルシステムオブジェクトの前記ルートノードと前記クローンオブジェクトの前記ルートノードとにおいて、その関連した第1のスナップショットオブジェクトのデータストリームから分岐できる最も早いチェックポイントを定義するチェックポイント番号である最古のチェックポイント番号として、前記ファイルシステムオブジェクトの前記ルートノードは、前記ファイルシステムオブジェクトの最終変更のチェックポイントを記録する現在のチェックポイント番号を記憶る、
    請求項14又は15に記載のファイルストレージシステム。
  17. 前記第1のスナップショットオブジェクト及び前記クローンオブジェクトの作成に際し、前記第1のスナップショットオブジェクトの前記ルートノードにおける前記最古のチェックポイント番号として、前記ファイルシステムオブジェクトがすでにクローンであった場合、前記ファイルシステムオブジェクトの前記ルートノードに記憶された前記現在のチェックポイント番号がさらに記憶される、
    請求項16に記載のファイルストレージシステム。
  18. 前記ファイルストレージシステムは前記第1のスナップショットオブジェクトに対応しライブファイルシステムにおけるオブジェクトであるライブファイルオブジェクトを含み、それぞれのオブジェクトはユーザデータブロックの番号と関連しており、
    前記プロセッサは、
    前記第1のスナップショットオブジェクトにより所有され、前記ライブファイルオブジェクトと共有される各々のユーザデータブロックに関して、前記ユーザデータブロックの所有権を前記ライブファイルオブジェクトに移すことと、
    このような転送に続いて、前記ファイルストレージシステムから前記第1のスナップショットオブジェクトを排除することを含む、ファイルのデクローニングと
    を更に実行する請求項16又は17に記載のファイルストレージシステム。
  19. 各オブジェクトはいくつかのブロックポインタを含み、
    各ポインタはそれぞれのチェックポイント番号に関連しており、
    前記ユーザデータブロックの所有権を前記ライブファイルオブジェクトへ移すために、前記プロセッサは、
    前記第1のスナップショットオブジェクトにおいて前記ブロックポインタを少なくすることと、
    前記ライブファイルオブジェクトにおける前記対応するブロックポインタの前記チェックポイント番号を前記ライブファイルオブジェクトの前記クローン後に入るチェックポイント番号に設定すること
    とを実行する請求項18に記載のファイルストレージシステム。
  20. 前記第1のスナップショットオブジェクトが隠しファイルシステムオブジェクトである、
    請求項14乃至19のうちのいずれか1項に記載のファイルストレージシステム。
  21. 前記プロセッサが、前記クローンオブジェクトが作成された前記ファイルシステムオブジェクトのサイズは前記クローンオブジェクトに起因すると判断する
    請求項14乃至20のうちのいずれか1項に記載のファイルストレージシステム。
  22. 前記書込み可能なファイルシステムオブジェクト又は前記書込み可能なクローンオブジェクトを変更する際、前記プロセッサが、前記変更を格納するために少なくとも1つのデータブロックを割り当て、前記少なくとも1つの割り当てられたデータブロックを前記変更後のオブジェクトに関連付け、
    前記変更後のオブジェクトが、変更後のポインタセットを含む
    請求項14乃至21のうちのいずれか1項に記載のファイルストレージシステム。
  23. 前記プロセッサが、前記ファイルストレージシステムにおいて第2のスナップショットオブジェクトを作成し、前記第2のスナップショットオブジェクトに前記変更後のポインタセットのコピーを格納し、前記ファイルストレージシステムにおいて、書込み可能な第2のクローンオブジェクトを作成し、前記第2のクローンオブジェクトに前記変更後のポインタセットのコピーを格納する、
    請求項22に記載のファイルストレージシステム。
  24. 前記プロセッサが、前記第2のスナップショットオブジェクトに、前記変更後のオブジェクトに対する参照、前記第2のクローンオブジェクトに対する参照、及び前記第1のスナップショットオブジェクトに対する参照を格納し、前記変更後のファイルシステムオブジェクトに、前記第2のスナップショットオブジェクトに対する参照を格納し、前記第2のクローンオブジェクトに、前記第2のスナップショットオブジェクトに対する参照を格納する
    請求項23に記載のファイルストレージシステム。
  25. 前記プロセッサが、前記第1のスナップショットオブジェクトを使用して前記ソースオブジェクトの別のクローンを作成する、
    請求項14乃至24のうちのいずれか1項に記載のファイルストレージシステム。
  26. 前記第1のスナップショットオブジェクトが、読取り専用データストリームスナップショットオブジェクトである、
    請求項14乃至25のうちのいずれか1項に記載のファイルストレージシステム。
JP2013540995A 2010-11-22 2011-11-21 データストレージシステムにおける、ファイルのクローニング及びデクローニング Active JP5948340B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US41592810P 2010-11-22 2010-11-22
US61/415,928 2010-11-22
PCT/US2011/061671 WO2012071335A1 (en) 2010-11-22 2011-11-21 File cloning and de-cloning in a data storage system

Publications (3)

Publication Number Publication Date
JP2014506345A JP2014506345A (ja) 2014-03-13
JP2014506345A5 JP2014506345A5 (ja) 2015-01-15
JP5948340B2 true JP5948340B2 (ja) 2016-07-06

Family

ID=45420942

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013540995A Active JP5948340B2 (ja) 2010-11-22 2011-11-21 データストレージシステムにおける、ファイルのクローニング及びデクローニング

Country Status (5)

Country Link
US (4) US8738570B2 (ja)
EP (2) EP2787439B1 (ja)
JP (1) JP5948340B2 (ja)
CN (2) CN105843905B (ja)
WO (1) WO2012071335A1 (ja)

Families Citing this family (74)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8738570B2 (en) 2010-11-22 2014-05-27 Hitachi Data Systems Engineering UK Limited File cloning and de-cloning in a data storage system
US8688636B1 (en) * 2010-12-10 2014-04-01 Netapp, Inc. Rapid cloning of virtual machines
US8832035B2 (en) 2011-08-30 2014-09-09 Netapp, Inc. System and method for retaining deduplication in a storage object after a clone split operation
JP2013073403A (ja) * 2011-09-27 2013-04-22 Fujitsu Ltd 情報処理装置、情報処理方法、および情報処理プログラム
US9512096B2 (en) 2011-12-22 2016-12-06 Knopp Biosciences, LLP Synthesis of amine substituted 4,5,6,7-tetrahydrobenzothiazole compounds
US9141634B2 (en) * 2012-01-21 2015-09-22 Huawei Technologies Co., Ltd. Method for automatic data replication and terminal
US10176189B2 (en) * 2012-09-19 2019-01-08 Hitachi Data Systems Engineering UK Limited System and method for managing deduplication using checkpoints in a file storage system
US10055407B2 (en) * 2012-11-20 2018-08-21 International Business Machines Corporation Maintaining access control lists in non-identity-preserving replicated data repositories
US8924425B1 (en) * 2012-12-06 2014-12-30 Netapp, Inc. Migrating data from legacy storage systems to object storage systems
CN103034587B (zh) * 2012-12-19 2015-09-30 华为技术有限公司 一种复制文件的方法及装置
WO2014109053A1 (ja) * 2013-01-11 2014-07-17 株式会社日立製作所 ファイルサーバ、ストレージ装置及びデータ管理方法
EP2959373B1 (en) * 2013-02-21 2020-07-15 Hitachi Vantara LLC Object-level replication of cloned objects in a data storage system
US9823872B2 (en) 2013-03-15 2017-11-21 Skyera, Llc Apparatus and method for translation from multi-dimensional to linear address space in storage
US20150032982A1 (en) * 2013-07-26 2015-01-29 Fusion-Io, Inc. Systems and methods for storage consistency
US8937562B1 (en) * 2013-07-29 2015-01-20 Sap Se Shared data de-duplication method and system
US9591058B2 (en) * 2013-09-26 2017-03-07 Coriant Operations, Inc. Rapid recovery method for incomplete file transfer from sender to recipient
CN103559103B (zh) * 2013-11-06 2016-08-24 华为技术有限公司 数据复制方法和装置
US10691636B2 (en) * 2014-01-24 2020-06-23 Hitachi Vantara Llc 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
US9665633B2 (en) * 2014-02-19 2017-05-30 Snowflake Computing, Inc. Data management systems and methods
US10248682B2 (en) 2015-02-20 2019-04-02 Scality, S.A. Object storage system capable of performing snapshots, branches and locking
WO2015134680A1 (en) * 2014-03-05 2015-09-11 Scality, S.A. Snapshots and forks of storage systems using distributed consistent databases implemented within an object store
US9524302B2 (en) 2014-03-05 2016-12-20 Scality, S.A. Distributed consistent database implementation within an object store
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
WO2015135574A1 (en) 2014-03-11 2015-09-17 Hitachi Data Systems Engineering UK Limited Computer program product, method, apparatus and data storage system for controlling write operations in the data storage system
US10277678B2 (en) 2014-05-14 2019-04-30 Hitachi Data Systems Engineering UK Limited Method and an apparatus, and related computer-program products, for managing access request to one or more file systems
US9400741B1 (en) * 2014-06-30 2016-07-26 Emc Corporation Reclaiming space from file system hosting many primary storage objects and their snapshots
US9727575B2 (en) * 2014-08-29 2017-08-08 Microsoft Technology Licensing, Llc File system with data block sharing
US10417190B1 (en) * 2014-09-25 2019-09-17 Amazon Technologies, Inc. Log-structured file system for zone block devices with small zones
WO2016050315A1 (en) 2014-10-02 2016-04-07 Hitachi Data Systems Engineering UK Limited Method and an apparatus, and related computer-program products, for managing access request in multi-tenancy environments
US9563513B2 (en) 2014-10-09 2017-02-07 International Business Machines Corporation O(1) virtual machine (VM) snapshot management
CN107111627B (zh) * 2014-11-10 2021-04-09 慧与发展有限责任合伙企业 在线文件系统检查
US20160162510A1 (en) * 2014-12-03 2016-06-09 International Business Machines Corporation Clone data management
US10691637B2 (en) * 2015-02-05 2020-06-23 Hitachi Vantara Llc Management of cloned objects in file systems
US20160335198A1 (en) * 2015-05-12 2016-11-17 Apple Inc. Methods and system for maintaining an indirection system for a mass storage device
CN104933133B (zh) * 2015-06-12 2018-09-07 中国科学院计算技术研究所 分布式文件系统中的元数据快照存储和访问方法
US10515054B2 (en) 2015-06-19 2019-12-24 Hitachi Vantara Corporation Fast and efficient multi-threaded algorithm for deleting an arbitrarily wide and deep directory tree using limited system resources
US10942815B2 (en) 2015-07-09 2021-03-09 Hitachi, Ltd. Storage control system managing file-level and block-level storage services, and methods for controlling such storage control system
CN104980591B (zh) * 2015-07-10 2017-08-29 上海斐讯数据通信技术有限公司 一种用于移动终端的多系统切换方法
US10747753B2 (en) 2015-08-28 2020-08-18 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US9390154B1 (en) 2015-08-28 2016-07-12 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US10019193B2 (en) * 2015-11-04 2018-07-10 Hewlett Packard Enterprise Development Lp Checkpointing a journal by virtualization of non-volatile random access memory
EP3198493A4 (en) * 2015-12-03 2017-08-09 Huawei Technologies Co., Ltd. A method a source storage device to send a source file and a clone file of the source file to a backup storage device, a source storage device and a backup storage device
US9413826B1 (en) 2016-01-11 2016-08-09 International Business Machines Corporation Concurrent file and object protocol access using space-efficient cloning
US10719479B2 (en) * 2016-06-28 2020-07-21 Netapp, Inc. Data unit cloning in memory-based file systems
EP4027251A1 (en) 2016-11-10 2022-07-13 Swirlds, Inc. Methods and apparatus for a distributed database including anonymous entries
US11222006B2 (en) 2016-12-19 2022-01-11 Swirlds, Inc. Methods and apparatus for a distributed database that enables deletion of events
US11169889B1 (en) * 2017-05-05 2021-11-09 Open Invention Network Llc Systems, devices and methods for determining and reclaiming snapshot storage consumption in data storage systems
US11550665B2 (en) * 2017-06-02 2023-01-10 Apple Inc. Techniques for preserving clone relationships between files
US10416928B2 (en) 2017-06-15 2019-09-17 Hitachi, Ltd. Data storage system and process for data compression of distributed data in a scalable cluster system and computer program for such data storage system
CN107291883B (zh) * 2017-06-20 2020-09-18 苏州浪潮智能科技有限公司 一种分布式存储系统的快照方法及装置
KR102348418B1 (ko) 2017-07-11 2022-01-07 스월즈, 인크. 네트워크 내의 분산 데이터베이스를 효율적으로 구현하기 위한 방법들 및 장치
CA3076257A1 (en) * 2017-11-01 2019-05-09 Swirlds, Inc. Methods and apparatus for efficiently implementing a fast-copyable database
CN107908727B (zh) * 2017-11-14 2021-06-29 郑州云海信息技术有限公司 存储对象克隆方法、装置、设备及计算机可读存储介质
US10671411B2 (en) * 2018-05-29 2020-06-02 Sap Se Cloning for object-oriented environment
CN109445989A (zh) * 2018-10-22 2019-03-08 郑州云海信息技术有限公司 一种文件系统数据备份方法及装置
CN111382006B (zh) * 2018-12-27 2023-04-07 中国移动通信集团四川有限公司 操作系统的恢复方法、装置、设备及介质
CN110109588B (zh) * 2019-04-23 2022-03-11 深圳易帆互动科技有限公司 基于Unity的无限拖拉循环列表显示方法和系统
KR20220011161A (ko) 2019-05-22 2022-01-27 스월즈, 인크. 분산 데이터베이스에서 상태 증명들 및 원장 식별자들을 구현하기 위한 방법들 및 장치
CN110532136B (zh) * 2019-08-30 2023-05-02 四川效率源信息安全技术股份有限公司 一种基于元数据的raid数据恢复方法
CN111007990B (zh) * 2019-12-24 2023-09-19 曙光信息产业(北京)有限公司 一种对快照系统中数据块引用进行快速定位的定位方法
CN114175008B (zh) * 2020-02-07 2024-08-27 华为技术有限公司 一种快速文件快照和克隆的方法、系统及客户端节点
US11461281B2 (en) 2020-04-20 2022-10-04 Netapp Inc. Freeing pages within persistent memory
US11847028B2 (en) 2020-07-03 2023-12-19 Vmware, Inc. Efficient export of snapshot changes in a storage system
CN112256481B (zh) * 2020-10-26 2024-09-20 华泰证券股份有限公司 一种敏捷开发中数据恢复方法及系统
US11513899B2 (en) 2020-11-30 2022-11-29 International Business Machines Corporation Selectively capturing snapshots of volumes based on modified capacity
US11494334B2 (en) * 2020-12-11 2022-11-08 Vmware Inc. Embedded reference counts for file clones
US11537555B2 (en) * 2020-12-15 2022-12-27 EMC IP Holding Company LLC Managing network shares utilizing filesystem snapshots comprising metadata characterizing network shares
CN112667580A (zh) * 2021-01-04 2021-04-16 北京同有飞骥科技股份有限公司 一种在GPFS上的worm技术应用方法及系统
US12124417B2 (en) 2021-01-22 2024-10-22 Scality, S.A. Fast and efficient storage system implemented with multiple cloud services
US11748300B2 (en) * 2021-11-18 2023-09-05 Vmware, Inc. Reverse deletion of a chain of snapshots
WO2023241116A1 (zh) * 2022-06-16 2023-12-21 华为技术有限公司 数据处理方法及相关装置
US11995042B1 (en) * 2023-01-11 2024-05-28 Dell Products L.P. Fast recovery for replication corruptions
US12105670B1 (en) * 2023-06-29 2024-10-01 Microsoft Technology Licensing, Llc Performing snapshotting operations using data structures storing weak references
CN117707438B (zh) * 2024-02-06 2024-05-14 成都艾勃科技有限公司 一种分区增量克隆的方法

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5963962A (en) * 1995-05-31 1999-10-05 Network Appliance, Inc. Write anywhere file-system layout
ATE195825T1 (de) * 1993-06-03 2000-09-15 Network Appliance Inc Anordnung eines dateisystems zum beschreiben beliebiger bereiche
US6829617B2 (en) * 2002-02-15 2004-12-07 International Business Machines Corporation Providing a snapshot of a subset of a file system
US6993539B2 (en) * 2002-03-19 2006-01-31 Network Appliance, Inc. System and method for determining changes in two snapshots and for transmitting changes to destination snapshot
US6934822B2 (en) * 2002-08-06 2005-08-23 Emc Corporation Organization of multiple snapshot copies in a data storage system
US7457822B1 (en) * 2002-11-01 2008-11-25 Bluearc Uk Limited Apparatus and method for hardware-based file system
US6883074B2 (en) * 2002-12-13 2005-04-19 Sun Microsystems, Inc. System and method for efficient write operations for repeated snapshots by copying-on-write to most recent snapshot
US7035881B2 (en) * 2003-09-23 2006-04-25 Emc Corporation Organization of read-write snapshot copies in a data storage system
US7133985B1 (en) 2003-09-29 2006-11-07 Emc Corporation System and method for managing data associated with copying and replication procedures in a data storage environment
US7337198B1 (en) 2004-02-10 2008-02-26 Symantec Corporation In-place preservation of file system objects during a disk clone operation
US7334094B2 (en) * 2004-04-30 2008-02-19 Network Appliance, Inc. Online clone volume splitting technique
US7409511B2 (en) * 2004-04-30 2008-08-05 Network Appliance, Inc. Cloning technique for efficiently creating a copy of a volume in a storage system
US7334095B1 (en) * 2004-04-30 2008-02-19 Network Appliance, Inc. Writable clone of read-only volume
US7757056B1 (en) * 2005-03-16 2010-07-13 Netapp, Inc. System and method for efficiently calculating storage required to split a clone volume
US7546431B2 (en) * 2005-03-21 2009-06-09 Emc Corporation Distributed open writable snapshot copy facility using file migration policies
US7159072B2 (en) * 2005-03-24 2007-01-02 Hitachi, Ltd. Method and apparatus for monitoring the quantity of differential data in a storage system
US8549051B2 (en) * 2005-11-04 2013-10-01 Oracle America, Inc. Unlimited file system snapshots and clones
US8055864B2 (en) * 2007-08-06 2011-11-08 International Business Machines Corporation Efficient hierarchical storage management of a file system with snapshots
US8112465B2 (en) * 2007-10-12 2012-02-07 Bluearc Uk Limited System, device, and method for validating data structures in a storage system
US9767120B2 (en) * 2008-01-16 2017-09-19 Hitachi Data Systems Engineering UK Limited Multi-way checkpoints in a data storage system
CN100541441C (zh) * 2007-11-09 2009-09-16 中国科学院计算技术研究所 一种计算机文件系统的快照创建、删除及修改方法
US8548953B2 (en) * 2007-11-12 2013-10-01 F5 Networks, Inc. File deduplication using storage tiers
US20090204650A1 (en) 2007-11-15 2009-08-13 Attune Systems, Inc. File Deduplication using Copy-on-Write Storage Tiers
JP2009181206A (ja) * 2008-01-29 2009-08-13 Hitachi Ltd ストレージシステム及びスナップショット構成の移行方法
US10642794B2 (en) * 2008-09-11 2020-05-05 Vmware, Inc. Computer storage deduplication
US8099572B1 (en) * 2008-09-30 2012-01-17 Emc Corporation Efficient backup and restore of storage objects in a version set
US8738570B2 (en) 2010-11-22 2014-05-27 Hitachi Data Systems Engineering UK Limited File cloning and de-cloning in a data storage system
US8832035B2 (en) * 2011-08-30 2014-09-09 Netapp, Inc. System and method for retaining deduplication in a storage object after a clone split operation

Also Published As

Publication number Publication date
US9336229B2 (en) 2016-05-10
US20120130949A1 (en) 2012-05-24
EP2593868A1 (en) 2013-05-22
US20140229443A1 (en) 2014-08-14
EP2787439A1 (en) 2014-10-08
EP2787439B1 (en) 2016-04-27
CN105843905A (zh) 2016-08-10
CN105843905B (zh) 2019-06-11
US20160246814A1 (en) 2016-08-25
US9760579B2 (en) 2017-09-12
CN103221924A (zh) 2013-07-24
CN103221924B (zh) 2016-03-30
US20150112932A1 (en) 2015-04-23
US8738570B2 (en) 2014-05-27
WO2012071335A1 (en) 2012-05-31
JP2014506345A (ja) 2014-03-13
US9087072B2 (en) 2015-07-21
EP2593868B1 (en) 2015-02-18

Similar Documents

Publication Publication Date Title
JP5948340B2 (ja) データストレージシステムにおける、ファイルのクローニング及びデクローニング
US10496626B2 (en) Deduplication in a highly-distributed shared topology with direct-memory-access capable interconnect
US9311014B2 (en) Storage system and methods of mapping addresses of snapshot families
US7836266B2 (en) Managing snapshot history in a data storage system
JP4568115B2 (ja) ハードウェアベースのファイルシステムのための装置および方法
US7035881B2 (en) Organization of read-write snapshot copies in a data storage system
JP5925968B2 (ja) ファイルストレージシステムにおけるチェックポイントを用いて重複排除を管理するシステムおよび方法
US8280858B2 (en) Storage pool scrubbing with concurrent snapshots
US9767120B2 (en) Multi-way checkpoints in a data storage system
US8555023B2 (en) Method and system for managing large write-once tables in shadow page databases
CN103038767B (zh) 用于文件克隆的数据共享的方法和系统
US8250035B1 (en) Methods and apparatus for creating a branch file in a file system
US20170337212A1 (en) Computer program product, method, apparatus and data storage system for managing defragmentation in file systems
WO2016083938A1 (en) Snapshots and thin-provisioning in distributed storage over shared storage devices
JP2016512633A (ja) データストレージシステムにおけるクローンオブジェクトのオブジェクトレベルでの複製
WO2009049023A2 (en) Multi-way checkpoints in a data storage system

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141119

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141119

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150909

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151020

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160218

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: 20160517

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160606

R150 Certificate of patent or registration of utility model

Ref document number: 5948340

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

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

R370 Written measure of declining of transfer procedure

Free format text: JAPANESE INTERMEDIATE CODE: R370

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

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