"リダイレクトオンライトファイルシステム内の複数のデータオブジェクトの現在の一貫性スナップショットを不揮発性機械可読媒体に記憶するためのコミットを開始することであって、前記複数のデータオブジェクトの各々は、コミット中のコンテキストを有する、前記複数のデータオブジェクトのデータの第1のコピーを有する、前記開始することと、他の一貫性スナップショットの世代値に対して一意的である世代値を、前記現在の一貫性スナップショットに付与することと、前記現在の一貫性スナップショットを記憶するために前記コミットしている最中に、前記複数のデータオブジェクトのうちのデータオブジェクトに対する更新を受信することと、前記データオブジェクトに対する前記更新を受信することに応答して、前記データオブジェクトのための世代値をインクリメントすることと、前記データオブジェクトの前記世代値から導き出される世代値を前記更新に関連付けることと、前記データオブジェクトの前記データの前記第1のコピーからコピーされる、前記データオブジェクトのデータの第2のコピーを作成することであって、前記データオブジェクトの前記データの前記第2のコピーは更新中のコンテキストを有する、作成することと、前記データオブジェクトの前記データの前記第1のコピーを更新することとは独立に、前記更新に基づき前記データオブジェクトの前記データの前記第2のコピーを更新することと、を含む方法。前記方法は、前記データオブジェクトに対する前記更新を受信することに応答して、揮発性機械可読媒体内に、前記データオブジェクトに関連付けられるバッファヘッダを作成することをさらに含み、前記バッファヘッダは、前記データオブジェクトの前記データの前記第1のコピーを指し示す第1のデータポインタおよび前記データオブジェクトの前記データの前記第2のコピーを指し示す第2のデータポインタを含む、請求項1に記載の方法。前記現在の一貫性スナップショットは、前の一貫性スナップショットより後の、前記複数のデータオブジェクトに対する更新を含む、請求項1に記載の方法。前記現在の一貫性スナップショットを記憶するためのコミットを前記開始することは、一貫性スナップショットを作成する定期的作業に応答するものである、請求項1に記載の方法。前記データオブジェクトの前記世代値から導き出される前記世代値を前記更新に関連付けることが、前記データオブジェクトの前記世代値に等しい前記世代値を前記更新に関連付けることを含む、請求項1に記載の方法。リダイレクトオンライトファイルシステム内の複数のデータオブジェクトの現在の一貫性スナップショットを永続的に記憶するためのコミットを開始することであって、前記複数のデータオブジェクトの各々は、異なるコンテキストを有する、前記複数のデータオブジェクトのデータの複数のコピーを有するように構成可能であり、前記複数のデータオブジェクトの各々は、少なくとも2つのコンテキストのうちの第1のコンテキストを有する、前記データの少なくとも2つのコピーのうちの第1のコピーを有する、前記開始することと、前記現在の一貫性スナップショットを記憶するためにコミットしている最中に、前記複数のデータオブジェクトのうちのデータオブジェクトに対する更新を受信することと、前記データオブジェクトに対する前記更新の受信に応答して、前記第1のコピーから前記データオブジェクトのデータの第2のコピーを作成することであって、前記データの前記第2のコピーは前記少なくとも2つのコンテキストのうちの第2のコンテキストを有する、前記作成すること、および前記更新に基づき前記データオブジェクトの前記データの前記第2のコピーを更新することと、を含む方法。他の一貫性スナップショットの世代値に対して一意的である世代値を、前記現在の一貫性スナップショットに付与することをさらに含む、請求項6に記載の方法。前記データオブジェクトに対する前記更新の受信に応答して、前記データオブジェクトのための世代値をインクリメントすること、および前記データオブジェクトの前記世代値から導き出される世代値を前記更新に関連付けること、をさらに含む、請求項7に記載の方法。前記現在の一貫性スナップショットは、前の一貫性スナップショットより後の、前記複数のデータオブジェクトに対する更新を含む、請求項6に記載の方法。前記現在の一貫性スナップショットを永続的に記憶するためのコミットを前記開始することは、一貫性スナップショットを作成する定期的作業に応答するものである、請求項6に記載の方法。不揮発性機械可読媒体と、揮発性機械可読媒体と、プロセッサと、前記プロセッサ上で実行するように作動可能なファイルセットマネージャと、を含む装置であって、前記ファイルセットマネージャは、リダイレクトオンライトファイルシステム内の複数のデータオブジェクトの現在の一貫性スナップショットを前記不揮発性機械可読媒体内に記憶するためのコミットを開始することであって、前記複数のデータオブジェクトの各々は、異なるコンテキストを有する、前記複数のデータオブジェクトのデータの複数のコピーを有するように構成可能であり、前記複数のデータオブジェクトの各々は、前記異なるコンテキストのうちの第1のコンテキストを有する、前記データの前記複数のコピーのうちの第1のコピーを有し、前記複数のコピーのうちの前記第1のコピーは前記揮発性機械可読媒体内に記憶されるように構成される、前記開始すること、前記現在の一貫性スナップショットを記憶するためにコミットしている最中に、前記複数のデータオブジェクトのうちのデータオブジェクトに対する更新を受信すること、ならびに前記データオブジェクトに対する前記更新の受信に応答して、前記第1のコピーから前記揮発性機械可読媒体内に前記データオブジェクトのデータの第2のコピーを作成することであって、前記データの前記第2のコピーは前記異なるコンテキストのうちの第2のコンテキストを有する、前記作成すること、および前記更新に基づき前記データオブジェクトの前記データの前記第2のコピーを更新すること、を実行するように構成される、装置。前記ファイルセットマネージャは、他の一貫性スナップショットの世代値に対して一意的である世代値を、前記現在の一貫性スナップショットに付与するように構成される、請求項11に記載の装置。前記ファイルセットマネージャは、前記データオブジェクトに対する前記更新の受信に応答して、前記データオブジェクトのための世代値をインクリメントすること、および前記データオブジェクトの前記世代値から導き出される世代値を前記更新に関連付けること、をするように構成される、請求項12に記載の装置。前記現在の一貫性スナップショットは、前の一貫性スナップショットより後の、前記複数のデータオブジェクトに対する更新を含む、請求項11に記載の装置。前記現在の一貫性スナップショットを記憶するための前記コミットの前記開始は、一貫性スナップショットを作成する定期的作業に応答するものである、請求項11に記載の装置。複数のデータオブジェクトのうちのデータオブジェクトのための複数のコンテキストを提供するコンピュータプログラムであって、コンピュータに、リダイレクトオンライトファイルシステム内の前記複数のデータオブジェクトの現在の一貫性スナップショットを不揮発性機械可読媒体内に記憶するためのコミットを開始することであって、前記複数のデータオブジェクトの各々は、コミット中のコンテキストを有する、前記複数のデータオブジェクトのデータの第1のコピーを有する、前記開始すること、他の一貫性スナップショットの世代値に対して一意的である世代値を、前記現在の一貫性スナップショットに付与すること、前記現在の一貫性スナップショットを記憶するために前記コミットしている最中に、前記複数のデータオブジェクトのうちの前記データオブジェクトに対する更新を受信すること、前記データオブジェクトに対する前記更新を受信することに応答して、前記データオブジェクトのための世代値をインクリメントすること、前記データオブジェクトの前記世代値から導き出される世代値を前記更新に関連付けること、前記データオブジェクトの前記データの前記第1のコピーからコピーされる、前記データオブジェクトのデータの第2のコピーを作成することであって、前記データオブジェクトの前記データの前記第2のコピーは更新中のコンテキストを有する、前記作成すること、および前記データオブジェクトの前記データの前記第1のコピーを更新することとは独立に、前記更新に基づき前記データオブジェクトの前記データの前記第2のコピーを更新すること、を実行させる、コンピュータプログラム。前記データオブジェクトに対する前記更新の受信に応答して、揮発性機械可読媒体内に、前記データオブジェクトに関連付けられるバッファヘッダを作成することであって、前記バッファヘッダは、前記データオブジェクトの前記データの前記第1のコピーを指し示す第1のデータポインタおよび前記データオブジェクトの前記データの前記第2のコピーを指し示す第2のデータポインタを含む、前記作成することを前記コンピュータに実行させる、請求項16に記載のコンピュータプログラム。揮発性機械可読媒体内に前記データオブジェクトの前記データの前記第1のコピーおよび前記データオブジェクトの前記データの前記第2のコピーを作成することを前記コンピュータに実行させる、請求項16に記載のコンピュータプログラム。一貫性スナップショットが書き込まれている間に、ユーザがファイルシステムを新しく改変しようとする可能性があろう。一貫性スナップショットが不揮発性機械可読媒体例えば、ハードディスク上での記憶のためにコミットされるまで、このような改変をブロックすることは容易であろう。しかし、このアプローチは受け入れられるものではない。なぜなら、このようなアプローチは、一貫性スナップショットがユーザに対して非透過的となってしまうだろうからである。特に、このアプローチは、一貫性スナップショットが記憶のためにコミットされている間、全ファイルシステムを数秒ごとにフリーズさせてしまう可能性がある。本発明による実施形態には、リダイレクトオンライトファイルシステム内の複数のデータオブジェクトの現在の一貫性スナップショットを不揮発性機械可読媒体に記憶するためのコミットを開始することであって、複数のデータオブジェクトの各々は、コミット中のコンテキストを有する、複数のデータオブジェクトのデータの第1のコピーを有する、開始することを含む方法が含まれる。方法は、他の一貫性スナップショットの世代値に対して一意的である世代値を、現在の一貫性スナップショットに付与することも含む。方法は、現在の一貫性スナップショットを記憶するためにコミットしている最中に、複数のデータオブジェクトのうちのデータオブジェクトに対する更新を受信することを含む。方法は、データオブジェクトに対する更新を受信することに応答して、データオブジェクトのための世代値をインクリメントすることも含む。方法は、データオブジェクトに対する更新を受信することに応答して、データオブジェクトの世代値から導き出される世代値を更新に関連付けることを含む。同様に、データオブジェクトに対する更新を受信することに応答して、方法は、データオブジェクトのデータの第1のコピーからコピーされる、データオブジェクトのデータの第2のコピーを作成することを含む。データオブジェクトのデータの第2のコピーは更新中のコンテキストを有する。同様に、データオブジェクトに対する更新を受信することに応答して、方法は、データオブジェクトのデータの第1のコピーを更新することとは独立に、更新に基づきデータオブジェクトのデータの第2のコピーを更新することを含む。本発明による実施形態には、リダイレクトオンライトファイルシステム内の複数のデータオブジェクトの現在の一貫性スナップショットを永続的に記憶するためのコミットを開始することであって、複数のデータオブジェクトの各々は、異なるコンテキストを有する、複数のデータオブジェクトのデータの複数のコピーを有するように構成可能である、開始することを含む方法が含まれる。複数のデータオブジェクトの各々は、少なくとも2つのコンテキストのうちの第1のコンテキストを有する、データの少なくとも2つのコピーのうちの第1のコピーを有する。方法は、現在の一貫性スナップショットを記憶するためにコミットしている最中に、複数のデータオブジェクトのうちのデータオブジェクトに対する更新を受信することを含む。データオブジェクトに対する更新の受信に応答して、方法は、第1のコピーからデータオブジェクトのデータの第2のコピーを作成することを含む。データの第2のコピーは少なくとも2つのコンテキストのうちの第2のコンテキストを有する。データオブジェクトに対する更新の受信に応答して、方法は、更新に基づきデータオブジェクトのデータの第2のコピーを更新することも含む。添付の図面を参照することによって、本実施形態はより良く理解され、数多くの対象、特徴および利点が当業者に明らかになればよい。以下に続く記載は、本発明の主題の技法を具体化するシステム、方法、技法、命令シーケンスおよびコンピュータプログラムの例を含む。しかし、記載されている実施形態は、これらの具体的詳細を備えずに実施されてもよいことは理解されよう。例えば、例が、ファイルシステムの一部であるデータのためのデュアルコンテキストに言及していても、いくつかの他の実施形態例はデータのためのコンテキストをいくつでも例えば、3つ、4つ、5つ等構成することができる。同様に、ファイルシステムのための一貫性スナップショットが作成されるように記載される一方で、いくつかの他の実施形態例では、他のレベルにおける一貫性スナップショットが作成されることができる。例えば、ユーザは、ファイルのサブセット、特定のファイル等を、ファイルシステムのための定期スナップショットよりも頻繁に一貫性スナップショット内にバックアップされるように構成することができる。それ故、いくつかの実施形態例はこれらの他のレベルの一貫性スナップショットに適用できる。他の例では、記載を分かりにくくしないようにするために、周知の命令インスタンス、プロトコル、構造および技法は詳細に示されていない。多重コンピュータシステムまたはノード、ならびに永続性記憶資源を含む資源からクラスタが形成される。クラスタの記憶資源にわたってクラスタ化ファイルシステムが実装される。クラスタ記憶資源は、クラスタのノードによる直接アクセスを許すように結合される。記憶資源はノードに直接ケーブルでつながれるか、もしくはネットワーク例えば、ストレージエリアネットワークを介してアクセス可能とされるか、またはその両方の方法が用いられることができる。クラスタが確立されると、管理者が、クラスタのノードのうちの1つをクラスタリーダとして動作するように構成する。実施形態は、リーダを自動的に選ぶようにクラスタをプログラムすることもできる。クラスタリーダは、ノードがクライアントなのかサーバなのか、それともクライアントとサーバの両方なのかを示すクラスタ役割データを保持する。サーバがクラスタ化ファイルシステム内のファイルセットを管理する。クラスタリーダは、どのノードがクラスタ化ファイルシステムマネージャとして動作するかの指示も保持する。クラスタ化ファイルシステムマネージャはクラスタ化ファイルシステムのためのメタデータを管理する。実施形態によっては、クラスタ化ファイルシステムマネージャはクラスタのための唯一のサーバである-フェイルオーバーサーバの責任は負っていない。実施形態によっては、クラスタ化ファイルシステムマネージャはクラスタ化ファイルシステム内のファイルセットの管理を、サーバである他のノードに任せる。本願明細書において、用語ファイルセットはファイルもしくはディレクトリのセットまたはその両方のセットに言及するために用いられる。どのノードがクラスタ内のサーバであるかの指示とともに、クラスタリーダは、サーバまたはファイルセットマネージャによって管理されるファイルセットの指示を保持することができる。クラスタ内のノードがクラスタリーダおよびクラスタ化ファイルシステムマネージャとして動作するように構成されることができる。ノードがクラスタリーダとして動作するのか、サーバとして動作するのか、クライアントとして動作するのか、その他のものとして動作するのかは、クラスタのユーザに透過的であることができる。ノードがクライアントおよびサーバの両方として動作しても、あるいはクライアントが遠隔ノード上にあっても、ユーザは同じ動作を知覚することになる。クラスタ化ファイルシステムマネージャは、クラスタ化ファイルシステムのファイルのためのiノードの階層としてメタデータを保持することができる。クラスタ化ファイルシステムメタデータは、クラスタ化された記憶資源の記憶の論理ユニットに関する情報を示す。情報はクラスタ記憶ユニットの位置例えば、オフセットまたはブロック番号ならびにエクステントの長さを含むことができる。本記載において、用語ブロックは、クラスタ記憶の単位に言及するために用いられる例えば、4KBブロック。本記載は、隣接ブロックのセットに言及するために用語エクステントも用いる。エクステントの長さに言及するとき、該長さは、エクステントを形成する多数の隣接ブロックに言及している。これらの用語を用いると、4KBブロックを仮定すれば、クラスタ化ファイルシステムは、総計10GBの記憶資源のプールを0ないし2,621,439ブロックと見なす。クラスタクライアントがクラスタ記憶の論理ユニットに書き込みをするとき、書き込みを果たすために論理ユニット例えば、ブロック番号は記憶仮想化層によって物理的位置例えば、シークおよびオフセットに変換される。実施形態はブロックおよびエクステントに限定されるものではないが、クラスタ記憶の単位例えば、可変長ブロック、ビット長等についてあり得るあらゆる実装を考慮すれば、記載を分かりにくくしてしまうことになろう。実施形態によっては、クラスタ化ファイルシステムマネージャはクラスタ化ファイルシステムメタデータメタデータをiノードの階層データ構造内に保持する。クラスタ化ファイルシステムマネージャはメタデータのためのルートをクラスタ記憶資源クラスタ記憶内の既知の位置すなわち、所定位置に保持する。一貫性スナップショットを支援するクラスタ内では、一貫性スナップショットのルートを、対応する一貫性スナップショットのルートメタデータとともに記憶するために、クラスタ記憶内の複数の位置が確保または定義される。ルートメタデータは、一貫性スナップショットを識別すること、および一貫性スナップショットの保全性を確実にすることを助ける。実施形態は、一貫性スナップショットの進行を追跡する、一貫性スナップショットの時間ベースの識別子例えば、世代値、およびデータの保全性を検査するためのルートチェックサムを用いることができる。実施形態は、ノードがルートを書き込み始める際、第1のルートチェックサムヘッダチェックサムを書き込み、ルートが永続性クラスタ記憶にうまく書き込まれた後、第2のルートチェックサムトレーラチェックサムを書き込むことができる。実施形態はヘッダチェックサムおよびトレーラチェックサムを用いて、一貫性スナップショットのルートの書き込みが妨げられなかったことを確実にすることができる。障害から回復するためには、位置の各々が調べられ、最新の世代値を持つ位置が選択され、選択された位置によって参照されるその一貫性スナップショットから回復が始まることを可能にする。実施形態は、一貫性スナップショットをいくつでも保存するようにクラスタを構成することができる。いくつかの実施形態例は所与のファイルシステム内のデータの一貫性スナップショットを提供するが、このようなスナップショットは、一貫性スナップショットが記憶のためにコミットされている間、入ってくるファイルシステムトランザクションをブロックしたりまたは遅らせたりしない。それ故、ファイルシステム内に記憶されているデータに対する更新が、同じファイルシステムの一貫性スナップショットの記憶と同時に行われることができる。以下においてさらに記載されるように、この同時実行が可能とされるために、同じデータオブジェクトのための少なくとも2つのコンテキストが保持される。ファイルシステムの一貫性スナップショットは、一意の世代値に関連付けられる。例えば、世代値は整数値とすることができる。それ故、一貫性スナップショットを記憶するためのコミットすなわち、該一貫性スナップショットの同期が始められると、ファイルシステムのための世代はインクリメントされることができる。実施形態例によっては、ファイルシステム内のオブジェクト例えば、データ、ファイル等に対するあらゆる変更がトランザクションに関連付けられる。トランザクションはファイルシステムの世代に関連付けられ、かくして一貫性スナップショットに関連付けられる。デュアルコンテキスト構成の実施形態例によっては、ファイルシステム内のオブジェクトが、常に、オブジェクトの最大で2つのコピーとともにキャッシュされる。1つのコピーは、更新中のコンテキストのためのものである。特に、オブジェクトのための更新中のコンテキストは、オブジェクトが更新されている最中であった例えば、ユーザがオブジェクトを更新した後、オブジェクトを有するファイルシステムの一貫性スナップショットが記憶のためにコミットされている間に作成される。オブジェクトの第2のコピーは、コミット中のコンテキストのためのものである。オブジェクトのこのコピーは、一貫性スナップショットの一部として記憶のためにコミットされている最中の/コミットされることになるオブジェクトのコピーである。実施形態例によっては、2つのオブジェクトは、サイズ2の配列として一緒にキャッシュされることができる。同様に、オブジェクトは、配列内の各オブジェクトに関連付けられる世代を記憶する、2つの要素の配列を有する。実施形態例によっては、オブジェクトのどのコンテキストを用いるべきかを決定するために、トランザクションに関連付けられる世代値または世代番号が、キャッシュされているオブジェクトの世代番号と比較される。正しいオブジェクト配列要素が選択され、オブジェクトの正しいコンテキスト例えば、更新中のコンテキストまたはコミット中のコンテキストを変更する。以下においてさらに記載されるように、一貫性スナップショットは定期的に例えば、5秒ごとに作成される。これらの一貫性スナップショットは、以前のバージョンのオブジェクトを回復しようと試みるために作成される。例えば、これらの一貫性スナップショットは、システムクラッシュの後に、ファイルシステム内に記憶されているオブジェクトを回復するために用いられることができる。実施形態例によっては、以前の一貫性スナップショットがその同期記憶のためのコミットを終える前に、一貫性スナップショットの間隔が到達されると、新しい一貫性スナップショットはスキップされる。特に、そのときは、キャッシュされているオブジェクトの第3のコピーが必要となろうから、一貫性スナップショットは取られないであろう。図1は、いくつかの実施形態例による、リダイレクトオンライトファイルシステム内のデータオブジェクトのための複数のコンテキストを提供するクラスタ化ファイルシステム構成の概念図を示す。図示のクラスタはノード103、105、107、109を含む。クラスタは、直接アクセス可能記憶デバイスのプール101、ネットワークアクセス可能記憶デバイス113、115、およびネットワークインフラストラクチャ111も含む。ノード103、105、107、109はネットワークインフラストラクチャ111を介して通信する。ノード103、105、107、109はケーブルを介して記憶デバイスプール101にアクセスし、ネットワークインフラストラクチャ111を介してネットワークアクセス可能記憶デバイス113、115にアクセスする。図示のクラスタにおいて、ノード103、105、107、109のうちのいずれでもクラスタのためのクラスタ化ファイルシステムマネージャとして構成されることができる。クラスタ化ファイルシステムマネージャはその内部のクラスタ化ファイルシステムのファイルの記憶の様々な側面を管理することができる。例えば、クラスタ化ファイルシステムマネージャは、クラスタ化ファイルシステムのファイルのためのiノードの階層としてメタデータを保持することができる。実施形態例によっては、クラスタ化ファイルシステムマネージャの作業のうちの一部またはすべては、異なるノード103、105、107、109に振り分けられることができる。これらの作業のうちのいくつかは、以下でさらに記載されるようにクラスタ化ファイルシステム内のデータオブジェクトのための複数のコンテキストを提供することに関連する作業を含む。以下においては、データオブジェクトのための複数のコンテキストを提供するこれらの作業は異なるノード103、105、107、109にわたって振り分けられるように記載されているが、一方、いくつかの他の実施形態例では、このような作業はクラスタ化ファイルシステムマネージャによって遂行されることができる。図2は、いくつかの実施形態例による、リダイレクトオンライトファイルシステム内のデータオブジェクトのための複数のコンテキストを提供するクラスタ化ファイルシステム構成のより詳細な概念図を示す。図2は、図1のノード103、105、107、109を代表することができるノードA202、ノードB204およびノードN206を含むシステム200を示す。図2はノードA202内の多数の構成要素を示す。図示されていないが、ノードB204およびノードN206はそれらの内部に同様の構成要素を含むことができる。実施形態例によっては、システム200は、データが変更される際、リダイレクトオンライトredirect-on-write、ROWを用いるファイルシステムのデータオブジェクトを記憶するように構成される。特に、リダイレクトオンライトを用いると、変更データのために新しいブロックが割り付けられる。ファイルシステムは1つ以上のファイルセットを含むことができる。実施形態例によっては、ファイルシステム内の各ファイルはiノードを含むことができる。iノードは、ファイル内に記憶されるデータに関する情報またはメタデータを記憶する別個のファイルまたはデータ構造であることができる。例えば、ファイルの部分例えば、ブロックごとに、iノードは、このデータが記憶されるファイルセットのアドレス、ファイルセット識別情報および世代を記憶することができる。特に、ファイルのデータが記憶されるブロックは、異なるファイルセット、およびファイルセットの世代にわたって振り分けられることができる。異なるファイルセット、およびファイルセットの世代は複数の記憶デバイスにわたって振り分けられることができる。図2を参照すると、これらのファイルセットはノードA202、ノードB204およびノードN206のうちのいずれかにおける機械可読媒体内に記憶されることができる。システム200は多数のクライアントデバイスクライアントデバイス208およびクライアントデバイス210として図示を含む。システム200はネットワーク212を含み、ノードA202、ノードB204、ノードN206、クライアントデバイス208およびクライアントデバイス210はネットワーク212を通じて通信可能に共に結合される。ノードA202は、通信可能に共に結合された、ファイルセットマネージャ214、不揮発性機械可読媒体216、およびメモリ例えば、揮発性機械可読媒体218を含む。ファイルセットマネージャ214はソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせであることができる。例えば、ファイルセットマネージャ214は、ノードA202内のプロセッサ不図示上で実行するオペレーティングシステムの一部であることができる。不揮発性機械可読媒体216は、すでに作成された多数の一貫性スナップショット一貫性スナップショットA224および一貫性スナップショットN226として図示を記憶する。不揮発性機械可読媒体216は、その内部に記憶するためにコミットされている途中である現在の一貫性スナップショット228も記憶している最中である。実施形態例によっては、一貫性スナップショットは定期的に例えば5秒ごとに作成される。一貫性スナップショットは、所与の時点におけるファイルシステム内のデータオブジェクトのスナップショットを含む。実施形態例によっては、一貫性スナップショットは、最後の一貫性スナップショットが記憶のためにコミットされてより後、不揮発性機械可読媒体216に記憶にするためにまだコミットされていない、メモリ218内にあるデータオブジェクトに対するあらゆる変更例えば、改変、追加、削除等を記憶する。これらの一貫性スナップショットは、ファイルシステム内に記憶されている、以前のバージョンのオブジェクトを回復しようと試みるために作成される。例えば、これらの一貫性スナップショットは、システムクラッシュの後に、ファイルシステム内に記憶されているオブジェクトを回復するために用いられることができる。メモリ218は多数のバッファヘッダバッファヘッダA220、バッファヘッダN222等を記憶する。以下においてさらに記載されるように図3の記載を参照、バッファヘッダは、ファイルシステム内に記憶されるデータオブジェクトに関する様々なメタデータを記憶する。データオブジェクトがアクセスされている、変更されている等の最中であれば、ファイルセットマネージャ214はメモリ218内のデータオブジェクトのためのバッファヘッダを作成するその中にまだ作成されていなければ。例えば、ファイルセットマネージャ214は、現在の一貫性スナップショット228を作成するためにデータオブジェクトがアクセスされている最中、何らかのクライアントデバイス要求に基づきデータオブジェクトが変更されている最中などに、バッファヘッダを作成することができる。メモリ218のサイズおよびアクセスされているデータオブジェクトの数に基づき、ファイルセットマネージャ214は、関連データオブジェクトがアクセスされている最中でないバッファヘッダのうちのいくつかをフラッシュするよう求められてよい。それに応じて、ファイルセットマネージャ214は、データオブジェクトのアクセスが生じると、メモリ218内のデータオブジェクトのためのバッファヘッダを再作成するよう求められてよい。以下においてさらに記載されるように、バッファヘッダ内のメタデータは、所与のデータオブジェクトのために作成されるデータの異なるコピーのためのデータポインタを記憶する。本例では、バッファヘッダA220は、データの第1のコピー250を指し示す第1のデータポインタ、およびデータの第2のコピー252を指し示す第2のデータポインタを有する。メモリ218内に記憶される異なるバッファヘッダのために同様のデータポインタが作成されることができる。実施形態例によっては、ファイルシステム内の同じデータオブジェクトのためのデータの複数のコピーが作成される。データの複数のコピーの各々は、異なるコンテキストに関連付けられることができる。実施形態例によっては、データオブジェクトが、デュアルコンテキスト構成のためにそのデータのコピーを2つ有することができる。例として、メモリ218は同じデータオブジェクトのためのデータの2つのコピーデータの第1のコピー250およびデータの第2のコピー252を記憶する。ファイルシステム内に記憶されるいずれかまたはすべてのデータオブジェクトはこのマルチコピー、マルチコンテキスト構成を含むことができる。図示のように、データの第1のコピー250はコミット中のコンテキスト254を有し、データの第2のコピー252は更新中のコンテキスト256を有する。同じデータオブジェクトのための2つのコンテキストはファイルシステム内のデータの一貫性スナップショットを提供するが、このようなスナップショットは、一貫性スナップショットが記憶のためにコミットされている間、入ってくるファイルシステムトランザクションをブロックしたりまたは遅らせたりしない。それ故、ファイルシステム内に記憶されているデータに対する更新が、同じファイルシステムの一貫性スナップショットの記憶と同時に行われることができる。具体的には、コミット中のコンテキスト254は、現在の一貫性スナップショット228内にこの特定のデータオブジェクトを作成するために用いられるデータのコピーに関連付けられる。更新中のコンテキスト256は、現在の一貫性スナップショット228が、不揮発性機械可読媒体216内に作成される記憶のためにコミットされている間、データオブジェクトに対する更新例えば、ユーザがデータに変更を行っているを受け付けるために用いられるデータのコピーに関連付けられる。図2は多数の作業作業230、作業232および作業234も示す。本例では、ファイルセットマネージャ214は作業230を遂行し、該作業230において、ファイルセットマネージャ214は現在の一貫性スナップショットを記憶するためのコミットを開始する。特に、ファイルセットマネージャ214は現在の一貫性スナップショット228の作成を開始する。作業の一部として、ファイルセットマネージャ214は、以前の一貫性スナップショットが記憶のためにコミットされて以来、どのようなデータオブジェクトが変更されたのかを判定することができる。次に、ファイルセットマネージャ214は、変更されたデータオブジェクトを不揮発性機械可読媒体216内の新しい位置にボトムアップ順で書き込むことができる。実施形態例によっては、現在の一貫性スナップショット228内に記憶されている最中のデータオブジェクトごとに、ファイルセットマネージャ214はメモリ218内の関連バッファヘッダを作成もしくは更新するまたはその両方を行うことができる作業234として図示。メモリ218内にデータオブジェクトのための関連バッファヘッダがない場合、ファイルセットマネージャ214は、このようなデータが、現在の一貫性スナップショット228内に記憶するためにアクセスされている最中に、バッファヘッダを作成する。以下において図4~6を参照してさらに記載されるように、各データオブジェクトのためのバッファヘッダは様々なメタデータ例えば、世代、コンテキスト、位置、データポインタを含む。ファイルセットマネージャ214は、メモリ218内にバッファヘッダを作成することの一部としてこのメタデータを更新する。代替的に、バッファヘッダが所与のデータオブジェクトのためにメモリ218内にすでにインスタンス化されている場合には、ファイルセットマネージャ214はその中のメタデータを更新することができる。例えば、ファイルセットマネージャ214は、データポインタによって参照されている複数のデータのための世代およびコンテキストを定義する様々なフィールドを更新することができる以下においてさらに記載されるように。同様に、現在の一貫性スナップショット228を記憶するためのコミットの完了より前に、現在の一貫性スナップショット228内に含まれるべきデータオブジェクトが変更される。本例では、クライアントデバイス210が、現在の一貫性スナップショット228の一部であるデータオブジェクトのための更新要求を、ネットワーク212を通じて送信し、該更新要求はファイルセットマネージャ214によって受信される作業232として図示。この状況において、ファイルセットマネージャ214は、データの第1のコピーからコピーされる、データオブジェクト内のデータの第2のコピーを作成する例えばデータの第1のコピー250およびデータの第2のコピー252を参照。同様に、データの第2のコピーは、データの第1のコピーのために定義されるコンテキストとは別個且つ異なるコンテキストを有する。実施形態例によっては、データの第2のコピーは、デュアルコンテキストを提供するために第2のコピーが必要になるまでは作成されない。例えば、同じデータオブジェクトを記憶する一貫性スナップショットが作成されている途中である間は、ファイルセットマネージャ214は、データオブジェクトに対する更新が要求されるまで第2のコピーを作成しない。同様に、ファイルセットマネージャ214はメモリ218内のこのデータオブジェクトのためのバッファヘッダを作成もしくは更新するまたはその両方を行う。例えば、ファイルセットマネージャ214は、データの第2のコピーを指し示すためにバッファヘッダ内の第2のデータポインタを更新することができる。同様に、ファイルセットマネージャ214は、データの2つの異なるコピーが2つの異なるコンテキストを有するように、コンテキストを更新する。ファイルセットマネージャ214の、データオブジェクトのための複数のコンテキストを提供する作業のより詳細な記載が、以下において図5~6のフローチャートを参照して説明される。図3は、いくつかの実施形態による、クラスタ化ファイルシステム内に記憶されるデータオブジェクトのためのバッファヘッダの例を示す。バッファヘッダ300は、クラスタ化ファイルシステム内に記憶されるデータオブジェクトに関連する多数のフィールドを含む。上述されたように、データオブジェクトのためのバッファヘッダが、まだそれがメモリ内にない場合に且つ、データオブジェクトへのアクセスに応答して、メモリ内に作成される。例えば、ファイルセットマネージャ214は、一貫性スナップショット内のデータオブジェクトを記憶するためにデータオブジェクトにアクセスすることができる。別の例では、ファイルセットマネージャ214は、データオブジェクトを更新する何らかのアプリケーション例えば、クライアントデバイス208、210に応答してデータオブジェクトにアクセスすることができる。バッファヘッダを作成することに加えて、ファイルセットマネージャ214はその内部のフィールド302~316にデータを格納することもできる。フィールド302~304はこのデータオブジェクトのための2つの異なる世代値を定義する。最後にコミットされた世代LastCommittedGeneration、LCGフィールド302は、このデータオブジェクトが一貫性スナップショット内の記憶のためにコミットされた最後の時のこのデータオブジェクトのための世代値を定義する。最後に更新された世代LastUpdatedGeneration、LUGフィールド304は、このデータオブジェクトが更新されていた最後の時のこのデータオブジェクトのための世代値を定義する。データオブジェクトの世代値は、データオブジェクトが最初に更新される度に、ただし、データオブジェクトが一貫性スナップショットの一部として永続的記憶のためにコミットされるより前に、インクリメントされる。例えば、データオブジェクトの現在の世代値が15であるとする。データオブジェクトが一貫性スナップショットの一部として永続的記憶のためにコミットされた後に何らかのアプリケーションがデータオブジェクトを更新しようとすると、世代値は16にインクリメントされる。このデータオブジェクトのこの世代値は、データオブジェクトが一貫性スナップショットの一部として永続的記憶のためにコミットされるまで、16にとどまる。フィールド306~308はこのデータオブジェクトのための2つの異なるコンテキスト値を定義する。これらのコンテキスト値は0または1のいずれかに設定される。特に、データオブジェクトのためのコンテキストは2つの値の間で反転するデュアルコンテキストの一部であるため。最後にコミットされたコンテキストLastCommittedContext、LCXフィールド306は、このデータオブジェクトが一貫性スナップショット内の記憶のためにコミットされた最後の時のこのデータオブジェクトのためのコンテキストを定義する。最後に更新されたコンテキストLastUpdatedContext、LUXフィールド308は、このデータオブジェクトが更新されていた最後の時のこのデータオブジェクトのためのコンテキストを定義する。例えば、データオブジェクトが一貫性スナップショットの一部として永続的記憶のためにコミットされた後であるが、データオブジェクトに対する更新よりも前において、LCXフィールド306およびLUX308は両方とも同じ値例えば1に設定される。その後、何らかのアプリケーションがデータオブジェクトを更新しようとすると、LUXフィールド308は0の値に反転される。その後、このデータオブジェクトが再び一貫性スナップショットの一部として永続的記憶のためにコミットされる際、LCXフィールド306は0の値に反転される。フィールド302~308の使用は、以下において図5~6のフローチャートを参照してさらに記載される。物理的位置フィールド310はファイルシステム内のデータオブジェクトの物理的位置例えばブロック番号を定義する。論理的位置フィールド312は、データオブジェクトが記憶される論理的位置を、このデータオブジェクトのための関連iノードの位置に基づき定義する。例えば、論理的位置は、このデータオブジェクトが記憶される、iノードに加えていくらかのオフセットの物理的位置を含むことができる。データポインタ0フィールド314は、メモリ218内のデータオブジェクトのデータの第1のコピーを指し示している第1のデータポインタデータポインタ0を記憶する。データポインタ1フィールド316は、メモリ218内のデータオブジェクトのデータの第2のコピーを指し示している第2のデータポインタデータポインタ1を記憶する。上述されたように、データオブジェクトのデータの第2のコピーは、データオブジェクトのための第2のコンテキストが必要となるまで作成されない。例えば、データオブジェクトが一貫性スナップショットの一部として永続的記憶のためにコミットされた後であるが、データオブジェクトに対するいかなるその後の更新よりも前においては、データオブジェクトのデータのコピーは1つだけ提供されることができる。この状況において、データポインタ0フィールド314データの第1のコピーを指し示すはデータの第1のコピーを指し示し、データポインタ1フィールド316データの第2のコピーを指し示すは位置を指し示さない例えばヌルNULL。データの第2のコピーは、データオブジェクトのために第2のコンテキストが必要になった後、データの第1のコピーのコピーから作成される。例えば、データオブジェクトが一貫性スナップショット内に記憶されている最中であり、同時に、クライアントデバイスがデータオブジェクトに対する更新を要求しているとする。この状況において、データオブジェクトの第2のコピーが作成される。同様に、データポインタ0フィールド314データの第1のコピーを指し示すはなおデータの第1のコピーを指し示し、データポインタ1フィールド316データの第2のコピーを指し示すは、今度は、データオブジェクトのデータの第2のコピーを指し示すように変更される。フィールド314~316の使用は以下において図5~6のフローチャートを参照してさらに記載される。図4は、いくつかの実施形態による、データオブジェクトの複数の世代に対して一貫性スナップショットをコミットするタイムラインの例を示す。タイムライン400は左から右へ時間が増大する。時点402は、データオブジェクトのための世代Nが終了した時刻である。時点404は、同じデータオブジェクトのためのより後の世代世代N1が終了した、より後の時刻である。時点406は、同じデータオブジェクトのためのより後の世代世代N2が終了した、より後の時刻である。期間408は、データオブジェクトを含む一貫性スナップショットが永続的記憶のためにコミットされている期間である。期間408は、世代Nが終了した後の時点402において開始される。コミットの一部として上述されたように、ファイルセットマネージャ214はデータオブジェクトの階層をボトムアップ順で横断し、子データオブジェクトのブロック番号およびチェックサムを収集する。図示のように、期間408内には2つのサブ期間-期間410および期間412-がある。期間410は、データオブジェクトの1つのコピーまたはバージョンがメモリ内に存在する期間を含む。例えば、この期間は、データオブジェクトが永続的記憶のためにコミットされている最中の時間であって、データオブジェクトはまだ変更されていない例えば、クライアントデバイス上で実行するアプリケーションによって、時間を含むことができる。期間412は、データオブジェクトの2つのコピーまたはバージョンがメモリ内に存在する期間を含む。期間412は、世代Nのための一貫性スナップショットのコミットが依然、行われている間にデータオブジェクトが変更されるのに応答して開始される。例えば、この期間は、データオブジェクトが永続的記憶のためにコミットされている最中且つ、データオブジェクトが変更されている例えば、クライアントデバイス上で実行するアプリケーションによって最中の時間を含むことができる。換言すると、データオブジェクトの第1のバージョンは、発行されている最中の世代Nの一貫性スナップショットの一部として存在する。データオブジェクトの第2のバージョンは、世代Nの一貫性スナップショットの発行の完了より前に現在の世代N1内でデータオブジェクトへの書き込みが行われる場合に備えてもしくはそれが行われる結果、またはその両方の故に存在する。図5~6は、いくつかの実施形態例による、リダイレクトオンライトファイルシステム内のデータオブジェクトのための複数のコンテキストを提供する作業のフローチャートを示す。図5はフローチャート500を示し、図6はフローチャート600を示す。フローチャート600はフローチャート500の続きであり、ポイントAにおいて移行する。フローチャート500~600は、分散型構成で行われるものとして記載されており、そこでは、ファイルセットマネージャ214がその内部の作業を遂行する。他の実施形態例によっては、フローチャート500~600の作業は集中型構成で行われ、そこでは、ファイルシステムマネージャがこのような作業を遂行することができる。フローチャート500~600は、データオブジェクトのためのデュアルコンテキストが必要とされる状況の例を示す。特に、この状況例では、特定のデータオブジェクトデータオブジェクトAと呼ばれるを含む一貫性スナップショットが不揮発性機械可読媒体内の記憶のためにコミットされている最中となっている。なぜなら、データオブジェクトAは、前の一貫性スナップショットが記憶のためにコミットされてより後に、変更されているからである。この一貫性スナップショットが記憶のためにコミットされるのと同時に、データオブジェクトAをさらに変更する作業がある。例えば、クライアントデバイス上で実行するアプリケーションがデータオブジェクトAを変更することができる。図1~3を参照してフローチャート500~600の作業が記載される。フローチャート500がまず記載され、その後にフローチャート600の記載が続く。ファイルセットマネージャ214が、ファイルシステム内の多数のデータオブジェクトを含む現在の一貫性スナップショットを不揮発性機械可読媒体に記憶するためのコミットを開始する502。実施形態例によっては、ファイルセットマネージャ214は現在の一貫性スナップショットを記憶するために定期的にコミットする例えば、3秒、5秒、10秒等。それ故、この作業は一貫性スナップショットを作成する定期的作業のうちの1つであることができる。図2を参照すると、ファイルセットマネージャ214は現在の一貫性スナップショット228を記憶するためのコミットを開始する。実施形態例によっては、現在の一貫性スナップショット228は、前の一貫性スナップショットより後に変更されたデータオブジェクトを含むことになる。データオブジェクトに対するそれらの改変はメモリ218内に常駐することができ、そのため、改変は不揮発性機械可読媒体216内の記憶のためにまだコミットされていない。フローチャート500の作業は504において続く。ファイルセットマネージャ214は、現在の一貫性スナップショット内に記憶されるべきデータオブジェクトのためのバッファヘッダがメモリ内にあるかどうかを判定する504。図2を参照すると、ファイルセットマネージャ214は、現在の一貫性スナップショット228内に記憶されるべきデータオブジェクトのためのバッファヘッダがメモリ218内にあるかどうかを判定する。特に、実施形態例によっては、データオブジェクトがアクセスされる読み出される、書き込まれる等度に、メモリ218内に関連バッファヘッダが作成される。現在の一貫性スナップショット228内に記憶されるべきデータオブジェクトごとのバッファヘッダがメモリ内にすでにある場合は、フローチャート500の作業は508において続く。さもなければ、フローチャート500の作業は506において続く。ファイルセットマネージャ214は、メモリ内にバッファヘッダをまだ有していないデータオブジェクトのためにメモリ内にバッファヘッダを作成し更新する506。図2を参照すると、ファイルセットマネージャ214は、メモリ内にバッファヘッダを有していないこれらのデータオブジェクトのためにメモリ218内にバッファヘッダを作成する。ファイルセットマネージャ214はバッファヘッダのフィールドを更新することもできる。図3を参照すると、ファイルセットマネージャ214はこれらのデータオブジェクトごとのバッファヘッダのためのこれらのフィールドの値を設定する。ファイルセットマネージャ214はLCGフィールド302およびLUGフィールド304の両方をデータオブジェクトのための現在の世代値に設定する。例えば、もし最後にコミットされた一貫性スナップショットが5の値を有していれば、ファイルセットマネージャ214はLCGフィールド302およびLUGフィールド304を5に設定することになろう。コンテキストフィールド306、308は、2つのコンテキストコミット中のコンテキストおよび更新中のコンテキストを区別するために0または1のいずれかに設定される。従って、第2のコンテキストが必要とされる場合は、これらの2つのコンテキストフィールド306、308は逆の値を有することになろう。1つのコンテキストだけが必要とされる場合は、これらの2つのコンテキストフィールド306、308は同じ値を有することになろう。この状況においては、データオブジェクトのための1つのコンテキストだけが必要である。従って、ファイルセットマネージャ214はLCXフィールド306およびLUXフィールド308を同じ値例えば1に設定する。ファイルセットマネージャ214は、ファイルシステム内のデータオブジェクトの位置例えばブロック番号に基づき物理的位置フィールド310を設定する。ファイルセットマネージャ214は、このデータオブジェクトのための関連iノードの位置に基づき論理的位置フィールド312を設定する。例えば、論理的位置は、このデータオブジェクトが記憶される、iノードに加えていくらかのオフセットの物理的位置を含むことができる。ファイルセットマネージャ214は、データの第1のコピーが配置されるメモリ218内の位置を指し示すためにバッファヘッダ300内のデータポインタ0フィールド314を更新する。この状況は複数のコンテキストを要求していないので、第2のデータオブジェクトは必要ない。それ故、ファイルセットマネージャ214はデータポインタ1フィールド316を、ヌルを指し示すように更新する。フローチャート500の作業は508において続く。ファイルセットマネージャ214は、ファイルシステム内のデータオブジェクトA現在の一貫性スナップショットの一部となるべきデータオブジェクトの一部であるを更新するトランザクションを受信する現在の一貫性スナップショットを記憶するためのコミットがまだ行われている間に508。図2を参照すると、ファイルセットマネージャ214は、クライアントデバイス208、210のうちの1つから、データオブジェクトAを更新するトランザクションを受信する。例えば、クライアントデバイス208、210のうちの1つの上で実行するアプリケーションがデータオブジェクトAを更新することができる。フローチャート500の作業は510において続く。ファイルセットマネージャ214は、メモリ内にデータオブジェクトAのためのバッファヘッダがあるかどうかを判定する510。図2を参照すると、ファイルセットマネージャ214は、メモリ218内にデータオブジェクトAのためのバッファヘッダがあるかどうかを判定する。特に、実施形態例によっては、データオブジェクトがアクセスされる読み出される、書き込まれる等度に、メモリ218内に関連バッファヘッダが作成される。メモリ218内にデータオブジェクトAのためのバッファヘッダがすでにある場合は、フローチャート500の作業は継続点Aにおいて続く518。さもなければ、フローチャート500の作業は512において続く。ファイルセットマネージャ214はデータオブジェクトAのためにメモリ内にバッファヘッダを作成する512。図2を参照すると、ファイルセットマネージャ214はデータオブジェクトAのためにメモリ218内にバッファヘッダを作成する。なぜなら、メモリ218内にはデータオブジェクトAのための関連バッファヘッダがないからである。ファイルセットマネージャ214はバッファヘッダのフィールドにデータを格納することもできる以下の作業によってさらに記載されるように。フローチャート500の作業は514において続く。ファイルセットマネージャ214はデータオブジェクトAのためのバッファヘッダ内のデータポインタ0フィールドを更新する514。図2~3を参照すると、ファイルセットマネージャ214は、データの第1のコピーが配置されるメモリ218内の位置を指し示すために、バッファヘッダ300内のデータポインタ0フィールド314を更新する。フローチャート500の作業は516において続く。ファイルセットマネージャ214はデータオブジェクトAのためのバッファヘッダ内の物理的位置、論理的位置、LCGフィールドおよびLCXフィールドも更新する。図2~3を参照すると、ファイルセットマネージャ214はバッファヘッダ300のための物理的位置フィールド310、論理的位置フィールド312、LCGフィールド302、LCXフィールド306を更新する。ファイルセットマネージャ214は、ファイルシステム内のデータオブジェクトの位置例えばブロック番号に基づき物理的位置フィールド310を設定する。ファイルセットマネージャ214は、このデータオブジェクトのための関連iノードの位置に基づき論理的位置フィールド312を設定する。例えば、論理的位置は、このデータオブジェクトが記憶される、iノードに加えていくらかのオフセットの物理的位置を含むことができる。ファイルセットマネージャ214はLCGフィールド302をデータオブジェクトAのための現在の世代値に設定する。例えば、もし最後にコミットされた一貫性スナップショットが5の値を有していれば、ファイルセットマネージャ214はLCGフィールド302を5に設定することになろう。コンテキストフィールド306、308は、2つのコンテキストコミット中のコンテキストおよび更新中のコンテキストを区別するために0または1のいずれかに設定される。従って、第2のコンテキストが必要とされる場合は、これらの2つのコンテキストフィールド306、308は逆の値を有することになろう。1つのコンテキストだけが必要とされる場合は、これらの2つのコンテキストフィールド306、308は同じ値を有することになろう。ファイルセットマネージャ214はLCXフィールド306を1に設定すると仮定する。LUXフィールド308の設定は以下において記載される。フローチャート500の作業は継続点A518において続く。継続点A518はフローチャート600の継続点A602において続く。継続点A602より、作業は603において続く。ファイルセットマネージャ214は、データオブジェクトAのためのバッファヘッダ内のLCGフィールドまたはLUGフィールドの値がトランザクションの世代値と一致するかどうかを判定する603。図2~3を参照すると、ファイルセットマネージャ214は、バッファヘッダ300内のLCGフィールド302の値またはLUGフィールド304の値がトランザクションの世代値と一致するかどうかを判定する。トランザクションの世代値は、トランザクションがいつ作成されたかに基づき一貫性世代に設定される。従って、ファイルセットマネージャ214は、トランザクションに関連付けられるこの世代が、最後にコミットされた世代または最後に更新された世代に等しいかどうかを判定する。一致がなければ、作業は604において続く。さもなければ、作業は616において続く以下においてさらに記載される。ファイルセットマネージャ214はデータオブジェクトAの第1のコピーからデータオブジェクトAの第2のコピーを作成する604。図2を参照し、データの第1のコピー250はデータオブジェクトAの第1のコピーであるとすると、ファイルセットマネージャ214はデータの第1のコピー250をメモリ218内の異なる位置-データの第2のコピー252-にコピーする。フローチャート600の作業は606において続く。ファイルセットマネージャ214は、データオブジェクトAの第2のコピーを指し示すようにバッファヘッダ内の第2のデータポインタを更新する606。図2~3を参照すると、ファイルセットマネージャ214は、メモリ218内のデータオブジェクトAの第2のコピーを指し示すようにデータポインタ1フィールド316を更新する。フローチャート600の作業は608において続く。ファイルセットマネージャ214はバッファヘッダ内のLUXフィールドを、LCXフィールドの値とは逆の値を有するように更新する608。図2~3を参照すると、ファイルセットマネージャ214はLUXフィールド308を、バッファヘッダ300内のLCXフィールド306の値とは逆である値を有するように更新する。上述されたように、LCXフィールド306およびLUXフィールド308の値は2つの値のうちの1つであることができる。デュアルコンテキスト状況が生じるとこの場合のように、LCXフィールド306およびLUXフィールド308の値は互いの逆になる。フローチャート600の作業は610において続く。ファイルセットマネージャ214は、トランザクションのための世代値に基づきバッファヘッダ内のLUGフィールドのための世代値を設定する610。図2~3を参照すると、ファイルセットマネージャ214は、トランザクションのための世代値に基づきLUGフィールド304のための世代値を更新する上記の603の記載におけるトランザクションのための世代値の記載を参照。フローチャート600の作業は614において続く。ファイルセットマネージャ214は、このトランザクションに基づきデータオブジェクトAの第2のコピーを更新する614。図2~3を参照し、データの第2のコピー252はデータオブジェクトAの第2のコピーであるとすると、ファイルセットマネージャ214は、データポインタ1フィールド316内のポインタ値に基づきデータの第2のコピー252を更新する。フローチャート600の作業は、フローチャート600のこの経路に沿い完結している。603に戻り、一致があるとするとはいの判定、ファイルセットマネージャ214は、データオブジェクトAのためのバッファヘッダ内のLUXフィールドに関連付けられる第1のデータポインタを用いてデータオブジェクトAのコピーを更新する616。この状況においては、トランザクションのための世代がLUGフィールド304と一致するであろうから、603において一致があった。図2~3を参照し、第1のデータポインタがデータの第1のコピー250を指し示すとすると、ファイルセットマネージャ214は、データポインタ0フィールド314内のポインタ値に基づきデータの第1のコピー250を更新する。フローチャート600の作業は、フローチャート600のこの経路に沿い完結している。ファイルシステム内の同じまたは異なるデータオブジェクトに対する追加の更新が引き続き行われることができる。同様に、一貫性スナップショットのコミットの完了後、ファイルセットマネージャ214は、一貫性スナップショットを永続的に記憶するためにコミットするための定期的な間隔に基づき追加の一貫性スナップショットをコミットすることができる。当業者によって理解されるように、本発明の主題の態様はシステム、方法またはコンピュータプログラムとして具体化されればよい。それ故、本発明の主題の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態ファームウェア、常駐ソフトウェア、マイクロコード等を含むあるいはソフトウェアおよびハードウェアの態様を組み合わせた実施形態という形をとってよく、本願明細書においてそれらはすべて広く回路、モジュールまたはシステムと呼ばれればよい。さらに、本発明の主題の態様は、1つ以上のコンピュータ可読媒体単数または複数であって、その上に具体化されるコンピュータ可読プログラムコードを有する、コンピュータ可読媒体内に具体化されるコンピュータプログラムという形をとってもよい。1つ以上のコンピュータ可読媒体単数または複数の任意の組み合わせが利用されてよい。コンピュータ可読媒体はコンピュータ可読信号媒体またはコンピュータ可読記憶媒体であればよい。コンピュータ可読記憶媒体は、例えば、電子的、磁気的、光学的、電磁的、赤外線または半導体システム、装置またはデバイス、あるいは上述のものの任意の適当な組み合わせであればよい。ただし、それらに限定されるものではない。コンピュータ可読記憶媒体のより具体的な例限定的なリストとしては以下のもの:1本以上のワイヤを有する電気接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリrandomaccessmemory、RAM、リードオンリーメモリread-onlymemory、ROM、消去可能プログラマブルリードオンリーメモリerasableprogrammableread-onlymemory、EPROMまたはフラッシュメモリ、光ファイバ、ポータブルコンパクトディスクリードオンリーメモリcompactdiscread-onlymemory、CD-ROM、光学式記憶デバイス、磁気記憶デバイス、あるいは上述のものの任意の適当な組み合わせ、が挙げられよう。本文書の文脈において、コンピュータ可読記憶媒体とは、命令実行システム、装置またはデバイスによって用いられるまたはそれらと連係して用いられるプログラムを包含または記憶することができる任意の有形媒体であればよい。コンピュータ可読信号媒体とは、例えば、基底帯域内にまたは搬送波の一部として、内部にコンピュータ可読プログラムコードが具体化される伝搬データ信号を含むものであればよい。このような伝搬信号は、電磁気的、光学的、またはそれらの任意の適当な組み合わせを含む、ただしそれらに限定されるものではない、様々な形態のいずれを取ってもよい。コンピュータ可読信号媒体とは、コンピュータ可読記憶媒体ではない、命令実行システム、装置またはデバイスによって用いられるまたはそれらと連係して用いられるプログラムを伝達、伝搬または輸送することができる任意のコンピュータ可読媒体であればよい。コンピュータ可読媒体上に具体化されるプログラムコードは、無線、有線、光ファイバケーブル、RF等、または上述のものの任意の適当な組み合わせを含む、ただしそれらに限定されるものではない、任意の適切な媒体を用いて送信されればよい。本発明の主題の態様のための作業を行うためのコンピュータプログラムコードは、JavaR、SmalltalkR、Cまたは同様のもの等のオブジェクト指向プログラミング言語、ならびにCプログラミング言語または同様のプログラミング言語等の従来の手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで書き込まれればよい。プログラムコードは、スタンドアロンソフトウェアパッケージとして完全にまたは一部分はユーザのコンピュータ上で実行するか、一部分はユーザのコンピュータ上で且つ一部分はリモートコンピュータ上で実行するか、または完全にリモートコンピュータもしくはサーバ上で実行すればよい。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワークlocalareanetwork、LANまたはワイドエリアネットワークwideareanetwork、WANを含む、任意の種類のネットワークを通じてユーザのコンピュータに接続されてもよいし、あるいは接続は、例えば、インターネットサービスプロバイダを利用しインターネットを通じて外部のコンピュータになされてもよい。本発明の主題の実施形態による方法、装置システムおよびコンピュータプログラムのフローチャート図もしくはブロック図またはその両方を参照しながら本発明の主題の態様が記載されている。フローチャート図もしくはブロック図またはその両方の各ブロック、ならびにフローチャート図もしくはブロック図またはその両方におけるブロックの組み合わせは、コンピュータプログラム命令によって実装されることができることは理解されよう。これらのコンピュータプログラム命令は、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されて機械を作り出せばよく、それにより、命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行し、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群において特定される機能群/動作群を実装する手段を生み出す。これらのコンピュータプログラム命令は、コンピュータ、他のプログラム可能なデータ処理装置または他のデバイスを特定の様式で機能するように仕向けることができるコンピュータ可読媒体内に記憶されてもよく、それにより、コンピュータ可読媒体内に記憶された命令は、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群において特定される機能/動作を実装する命令を含む製造品を作り出す。コンピュータプログラム命令は、コンピュータ、他のプログラム可能なデータ処理装置または他のデバイス上にロードされ、一連の作業ステップをコンピュータ、他のプログラム可能な装置または他のデバイス上で遂行させ、コンピュータ実装プロセスを作り出してもよく、それにより、コンピュータまたは他のプログラム可能な装置上で実行する命令は、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群において特定される機能群/動作群を実装するためのプロセス群を提供する。図7はコンピュータシステムの例を示す。コンピュータシステムはプロセッサユニット701場合により、複数のプロセッサ、複数のコア、複数のノードを含む、もしくはマルチスレッド等を実装する、またはその両方の態様を有するを含む。コンピュータシステムはメモリ707を含む。メモリ707はシステムメモリ例えば、キャッシュ、SRAM、DRAM、ゼロキャパシタRAM、ツイントランジスタRAM、eDRAM、EDORAM、DDRRAM、EEPROM、NRAM、RRAM、SONOS、PRAM等のうちの1つ以上であってもよいし、または先にすでに記載された、機械可読媒体の実現可能なもののうちのいずれか1つ以上であってもよい。コンピュータシステムは、バス703例えば、PCI、ISA、PCI-Express、HyperTransportR、InfiniBandR、NuBus等、ネットワークインターフェース705例えば、ATMインターフェース、イーサネットRインターフェース、フレームリレーインターフェース、SONETインターフェース、無線インターフェース等、および記憶デバイス単数または複数709例えば、光学的記憶、磁気的記憶等も含む。コンピュータシステムは、リダイレクトオンライトファイルシステム内のデータオブジェクトのための複数のコンテキストを提供するファイルセットマネージャ725も含む。これらの機能性のうちのいずれか1つは一部または完全に、ハードウェアの形で、もしくはプロセッサユニット701上で、またはその両方の態様で実装されてよい。例えば、該機能性は、特定用途向け集積回路を用いて、プロセッサユニット701内に実装される論理で、周辺デバイスまたはカード上のコプロセッサ内に、等の態様で実装されればよい。さらに、現実のものは、含まれる構成要素がもっと少なくてもよいし、または図7には示されていない追加の構成要素例えば、ビデオカード、オーディオカード、追加のネットワークインターフェース、周辺デバイス、等を含んでもよい。プロセッサユニット701、記憶デバイス単数または複数709およびネットワークインターフェース705はバス703に結合される。バス703に結合されるように示されているが、メモリ707はプロセッサユニット701に結合されてもよい。実施形態は、様々な実装および利用を参照しながら記載されているが、これらの実施形態は例示的なものであること、および本発明の主題の範囲はそれらに限定されないことは理解されよう。多くの変形、変更、追加および改良が可能である。本願明細書では単一の例として記載されている構成要素、作業または構造に複数の例が提供されてもよい。最後に、様々な構成要素同士、作業同士およびデータ格納同士の間の境界は、いくぶんは自由に決めてよいものであり、特定の作業は特定の例示的構成を背景として示されている。機能性の他の割り振りが想定され、本発明の主題の範囲に含まれてもよい。一般に、構成例において別個の構成要素として提示されている構造および機能性は、組み合わせられた構造または構成要素として実装されてもよい。同様に、単一の構成要素として提示されている構造および機能性は、別個の構成要素として実装されてもよい。これらおよび他の変形、変更、追加および改良は本発明の主題の範囲に含まれてよい。"