少なくとも一部がコンピューターによって実施される方法であって、第1の1組の更新が第1のチェックポイントに関連付けられることを示すステップと、前記第1のチェックポイントに関するチェックポイントデータを、ファイルシステムのデータを更新するためにコピーオンライトを使用する前記ファイルシステムの記憶域に書き込むことを決定するステップと、前記第1の1組の更新の後に行われる更新が後続のチェックポイントに関連付けられることを示すステップと、前記第1の1組の更新のための書込み計画を生成するステップであって、それぞれの書込み計画が、前記第1の1組の更新の少なくとも1つを表すデータについて記憶域上の少なくとも1つの計画された位置を示す、ステップと、前記ファイルシステムの割当てデータ、ならびに前記書込み計画によって修正されたファイルシステムオブジェクトの記憶位置を示すようにメタデータを更新するステップと、前記メタデータの論理的なコピーを作成するステップとを含む方法。前記第1のチェックポイントデータを書き込むための書込み計画を作成し、前記書込み計画の作成と平行して前記後続の更新のための書込み計画の生成を可能にするステップと、少なくとも1つの検証コードを記憶域に書き込むステップであって、前記チェックポイントデータの前記少なくとも1つの検証コード部分、前記少なくとも1つの検証コードが、前記第1の1組の更新が記憶域に正確に書き込まれたかどうか決定するために使用可能である、ステップとをさらに含む請求項1に記載の方法。前記少なくとも1つの検証コードを記憶域に書き込むステップより前に、前記第1の1組の更新を表すデータが記憶域に書き込まれるのを待つステップをさらに含む請求項2に記載の方法。少なくとも1つの検証コードを記憶域に書き込むステップが、前記メタデータの前記論理的なコピーを表す少なくとも1つのツリーデータ構造のルートノードを参照する他のデータと共にブロックで記憶域に単一の検証コードを書き込むステップを含み、前記ブロックを検証するために前記単一の検証コードを計算するステップをさらに含む請求項2に記載の方法。前記少なくとも1つの検証コードを読み出すステップと、記憶域内のデータから少なくとも1つの他の検証コードを計算するステップと、前記少なくとも1つの検証コードを前記少なくとも1つの他の検証コードと比較するステップと、それに基づいて、前記第1の1組の更新を表す、すべてのデータが記憶域にうまく書き込まれたかどうか決定するステップをさらに含む請求項2に記載の方法。第1の1組の更新が第1のチェックポイントに関連付けられることを示すステップが、データ構造が別のチェックポイントを示すように更新される前に行われる更新に前記第1のチェックポイントが使用されることを示す前記データ構造を更新するステップを含む請求項1に記載の方法。前記メタデータの論理的なコピーを作成するステップが、前記第1の1組の更新のうちの前記少なくとも1つの更新を表す前記データを前記記憶域に書き込むのと平行して前記論理的なコピーを作成するステップを含む請求項1に記載の方法。コンピューティング環境内におけるシステムであって、ファイルシステムのファイルシステムオブジェクトを更新するよう求める要求を受信するよう動作可能なインターフェースと、前記要求に応じるためストアに送る1つまたは複数のI/O要求を決定するように動作可能なI/Oマネージャーと、アクションを実施するように動作可能なチェックポイントマネージャーであって、前記アクションが、ファイルシステムオブジェクトを更新するよう求める要求に関連する第1のチェックポイントを決定することであって、前記チェックポイントマネージャーが要求をそれぞれ異なるチェックポイントに割り当てることができる、決定することと、前記チェックポイントに関連するチェックポイントデータを前記ファイルシステムの記憶域に書き込むことを決定することと、ファイルシステムオブジェクトを更新するよう求める後続の要求の第2のチェックポイントを決定することと、前記後続の要求のためのデータの書込みの準備を可能にしながら、前記ファイルシステムの整合性状態を待つことと、前記ファイルシステムのメタデータの論理的なコピーを作成することと、前記論理的コピーを前記記憶域に書き込むことと、少なくとも1つの検証コードを前記記憶域に書き込むことであって、前記少なくとも1つの検証コードが、前記チェックポイントより前の前記更新が記憶域に書き込まれたかどうか決定するのに使用可能である、書き込むこととを含む、チェックポイントマネージャーとを備えるシステム。前記チェックポイントマネージャーが、ファイルシステムオブジェクトを更新するよう求める要求に関連するチェックポイントを決定するように動作可能であり、前記チェックポイントマネージャーが、前記チェックポイントに関連するチェックポイントデータを前記ファイルシステムの記憶域に書き込むことを決定する前に行われる更新に前記第1のチェックポイントが使用されること、およびその後に行われる更新に前記第2のチェックポイントが使用されることを示すデータ構造を更新するように動作可能である請求項8に記載のシステム。前記チェックポイントマネージャーが、前記チェックポイントに関連するチェックポイントデータを前記ファイルシステムの記憶域に書き込むことを決定するように動作可能であることが、前記チェックポイントマネージャーが、チェックポイント時間が終了したと決定するように動作可能であることを含み、前記チェックポイント時間がリカバリーウィンドウに基づく請求項8に記載のシステム。前記ファイルシステムの整合性状態を維持するために前記ファイルシステムオブジェクトと共に更新されるすべてのファイルシステムオブジェクトの記憶域上の位置を示す書込み計画を生成するように動作可能な書込み計画マネージャーをさらに備える請求項8に記載のシステム。前記チェックポイントマネージャーが前記ファイルシステムの整合性状態を待つように動作可能であることが、前記チェックポイントマネージャーが、前記第1のチェックポイントファイルシステムオブジェクトに関連するすべての更新が前記ファイルシステムの記憶域内に表されるまで待つように動作可能であることを含む請求項8に記載のシステム。前記チェックポイントマネージャーが後続の要求のためのデータ書込みの準備を可能にすることが、前記チェックポイントマネージャーが、前記後続の要求のために書込み計画が生成され、記憶域に書き込まれることを可能にするが、前記メタデータの前記論理的なコピーの作成後まで、前記メタデータの更新を可能にしないように動作可能であることを含む請求項8に記載のシステム。実行されたときにアクションを実施するコンピューター実行可能命令を有するコンピューター記憶媒体であって、前記アクションが、ファイルシステムのリカバリー要求を受信することと、前記ファイルシステムの記憶域内でチェックポイントのチェックポイントデータを突き止めることであって、前記チェックポイントデータが、アクションによって以前に生成されている、突き止めることとを含み、該アクションが、前記チェックポイントに関連する更新の後に行われる更新が後続のチェックポイントに割り当てられることを示すこと、前記チェックポイントに関連する前記更新の書込み計画を生成することであって、それぞれの書込み計画が、前記更新のうちの少なくとも1つを表すための記憶域内の少なくとも1つの計画された位置を示す、生成すること、前記書込み計画によって修正されたオブジェクトの記憶位置を示すようにメタデータを更新すること、前記メタデータの論理的なコピーを作成すること、及び前記チェックポイントに関して記憶域に少なくとも1つの検証コードを書き込むこととを含み、前記検証コードを使用して前記チェックポイントデータを検証することを含むコンピューター記憶媒体。前記検証コードを使用して前記チェックポイントデータを検証することが、前記チェックポイントデータのチェックサムを計算することと、前記チェックポイントデータの前記チェックサムを前記検証コードと比較することとを含む請求項14に記載のコンピューター記憶媒体。本発明はこのようなことに関するものである。0002本明細書において特許請求される主題は、いずれかの不利益な点を解決し、または上述されたものなどの環境内だけで動作する実施形態に限定されない。そうではなく、この背景は、本明細書に述べられたいくつかの実施形態が実施されてよい1つの例示的な技術領域を示すために提供されるものにすぎない。0003簡潔に述べると、本明細書に述べられた主題の態様は、ファイルシステムのチェックポイントに関する。態様では、ファイルシステムに対する更新は、チェックポイントバケットに編成される。チェックポイントが望まれる場合、後の更新は、別のチェックポイントバケットに向けられる。現在のチェックポイントバケット内の更新のためにグローバルテーブルが更新された後、グローバルテーブルの論理的なコピーが作成される。この論理的なコピーは、チェックポイントデータの一部として格納される。リカバリーの助けとするために、チェックポイントマネージャーは、最後のチェックポイントデータを記憶域に書き込む前に、現在のチェックポイントバケットのすべての更新が記憶域に書き込まれるまで待つことができる。この最後のチェックポイントデータは、グローバルテーブルの論理的なコピーを参照し、チェックポイントデータが正確であることを検証するための検証コードを含んでよい。0004この要約は、詳細な説明において下記にさらに述べられる主題のいくつかの態様を簡潔に識別するために提供されている。この要約は、特許請求された主題の主な特徴または本質的な特徴を識別することを意図しておらず、また特許請求された主題の範囲を限定するために使用することも意図していない。0005語句本明細書に述べられた主題は、文脈によって他に明らかにされていない限り、詳細な説明に述べられた主題を指す。態様という語は、少なくとも1つの態様と解釈されるべきである。詳細な説明に述べられた主題の態様を識別することは、特許請求された主題の主なまたは本質的な特徴を識別するためのものではない。0006上記の態様、および本明細書に述べられた主題の他の態様は、例示するために示されており、添付の図に限定されるものではない。図では、同じ参照符号は、類似の要素を示す。定義0013本明細書では、含むおよびその変形体は、含むが、それだけに限らないを意味する非限定的な用語と解釈されるべきである。またはという語は、文脈によって他に明らかに示されていない限り、および/またはと解釈されるべきである。に基づくという語は、に少なくとも一部基づくと解釈されるべきである。一実施形態oneembodiment、anembodimentという語は、少なくとも1つの実施形態と解釈されるべきである。別の実施形態という語は、少なくとも1つの他の実施形態と解釈されるべきである。明示的および暗黙的な他の定義は、下記に含まれ得る。例示的な動作環境0014図1は、本明細書に述べられた主題の態様が実施されてよい適切なコンピューティングシステム環境100の一例を示している。コンピューティングシステム環境100は、適切なコンピューティング環境の一例にすぎず、本明細書に述べられた主題の態様の使用または機能性の範囲に関する限定を示唆するものではない。コンピューティングシステム環境100は、例示的な動作環境100に示されたコンポーネントのいずれか1つまたはその組合せに関する依存性または要件を有するものと解釈されるべきでない。0015本明細書に述べられた主題の態様は、他の複数の汎用または特別目的コンピューティングシステム環境または構成で動作可能である。本明細書に述べられた主題の態様で使用するのに適し得るよく知られているコンピューティングシステム、環境または構成の例は、パーソナルコンコンピューター、サーバーコンピューター、ハンドヘルドまたはラップトップデバイス、マルチプロセッサーシステム、マイクロコントローラーベースのシステム、セットトップボックス、プログラマブル家電、ネットワークPC、ミニコンピューター、メインフレームコンピューター、携帯情報端末PDA:personaldigitalassistant、ゲーミングデバイス、プリンター、セットトップ、メディアセンターまたは他の器具を含めた器具、自動車に組み込まれた、または取り付けられたコンピューティングデバイス、他のモバイルデバイス、上記システムまたはデバイスのいずれかを含む分散コンピューティング環境などを備える。0016本明細書に述べられた主題の態様は、コンピューターによって実行されるプログラムモジュールなどのコンピューター実行可能命令の一般的な文脈で述べることができる。一般に、プログラムモジュールは、特定のタスクを実施し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本明細書に述べられた主題の態様は、通信網によってリンクされたリモート処理デバイスによってタスクが実施される分散コンピューティング環境内でも実施されてよい。分散コンピューティング環境では、プログラムモジュールは、メモリー記憶デバイスを含めて、ローカルとリモートの両方のコンピューター記憶媒体に置かれてよい。0017図1を参照すると、本明細書に述べられた主題の態様を実施するための例示的なシステムが、コンピューター110の形の汎用コンピューティング装置を含んでいる。コンピューターは、命令を実行できる任意の電子デバイスを含んでよい。コンピューター110のコンポーネントは、処理装置120と、システムメモリー130と、システムメモリーを含めた様々なシステムコンポーネントを処理装置120に結合するシステムバス121とを含んでよい。システムバス121は、メモリーバスまたはメモリーコントローラー、周辺バス、および様々なバスアーキテクチャーのいずれかを使用したローカルバスを含めて、複数のタイプのバス構造のいずれかであってよい。限定するためではなく、例を挙げると、こうしたアーキテクチャーは、業界標準アーキテクチャーISA:IndustryStandardArchitectureバス、マイクロチャネルアーキテクチャーMCA:MicroChannelArchitectureバス、拡張ISAEISA:EnhancedISAバス、ビデオ電子規格協会VESA:VideoElectronicsStandardsAssociationローカルバス、メザニンバスとしても知られている周辺コンポーネント相互接続PCI:PeripheralComponentInterconnectバス、周辺コンポーネント相互接続拡張PCI-X:PeripheralComponentInterconnectExtendedバス、アドバンストグラフィックスポートAGP:AdvancedGraphicsPort、およびPCIエクスプレスPCIe:PCIexpressを含む。0018コンピューター110は典型的に、様々なコンピューター読取り可能媒体を含む。コンピューター読取り可能媒体は、コンピューター110によってアクセスできる任意の使用可能な媒体を含むことができ、揮発性と不揮発性の両方の媒体、および取外し可能と取外し不可能の媒体を含む。限定するためではなく、例を挙げると、コンピューター読取り可能媒体は、コンピューター記憶媒体および通信媒体を備えてよい。0019コンピューター記憶媒体は、コンピューター読取り可能命令、データ構造、プログラムモジュールまたは他のデータなどの情報を格納するための任意の方法または技術で実装された揮発性と不揮発性、取外し可能と取外し不可能の両方の媒体を含む。コンピューター記憶媒体には、RAM、ROM、EEPROM、フラッシュメモリーまたは他のメモリー技術、CD-ROM、デジタル多用途ディスクDVD:digitalversatilediskまたは他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイス、あるいは所望の情報を格納するために使用されてよく、またコンピューター110によってアクセスできる他の任意の媒体が含まれる。0020通信媒体は典型的に、コンピューター読取り可能命令、データ構造、プログラムモジュール、または他のデータを搬送波や他の移送機構などの変調データ信号として具現化し、また任意の情報送達媒体を含む。変調データ信号という語は、信号内の情報を符号化するようにその特性の1つまたは複数が設定または変更された信号を意味する。限定のためではなく、例を挙げると、通信媒体は、有線ネットワークや直接有線接続などの有線媒体、ならびに音響、RF、赤外線などの無線媒体、および他の無線媒体を含む。上記内容のいずれかの組合せもまた、コンピューター読取り可能媒体の範囲内に含まれるべきである。0021システムメモリー130は、読取り専用メモリーROM131およびランダムアクセスメモリーRAM132など、揮発性および/または不揮発性メモリーの形のコンピューター記憶媒体を含む。起動時などにコンピューター110内の要素間で情報を転送するのに役立つ基本ルーチンを含む基本入出力システムBIOS133は典型的に、ROM131に格納される。RAM132は典型的に、処理装置120によって即時にアクセス可能であり、かつ/またはそれによる操作を現在受けているデータおよび/またはプログラムモジュールを含む。限定するためではなく、例示するために、図1は、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136およびプログラムデータ137を示している。0022コンピューター110は、他の取外し可能/取外し不可能、揮発性/不揮発性のコンピューター記憶媒体を含むこともできる。例示するためだけに、図1は、取外し不可能な不揮発性の磁気媒体から読み出しまたはそこに書き込むハードディスクドライブ141、取外し可能な不揮発性の磁気ディスク152から読み出しまたはそこに書き込む磁気ディスクドライブ151、およびCD-ROMや他の光媒体などの取外し可能な不揮発性の光ディスク156から読み出しまたはそこに書き込む光ディスクドライブ155を示している。例示的な動作環境で使用されてよい他の取外し可能/取外し不可能、揮発性/不揮発性コンピューター記憶媒体は、磁気テープカセット、フラッシュメモリーカード、デジタル多用途ディスク、他の光ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROMなどを含む。ハードディスクドライブ141は典型的に、インターフェース140などの取外し不可能メモリーインターフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は典型的に、インターフェース150などの取外し可能メモリーインターフェースによってシステムバス121に接続される。0023上記に論じられ、図1に示されたドライブおよびその関連するコンピューター記憶媒体は、コンピューター読取り可能命令、データ構造、プログラムモジュールおよびコンピューター110のための他のデータの記憶域を提供する。図1では、たとえば、ハードディスクドライブ141は、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146およびプログラムデータ147を格納するように示されている。これらコンポーネントは、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136およびプログラムデータ137と同じであっても良いし、異なってもよいことに留意されたい。オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146およびプログラムデータ147は、本明細書で示されている最小限の数とは異なる任意の数であり、様々なコピーがある。0024ユーザーは、キーボード162、およびマウス、トラックボールまたはタッチパッドと一般に呼ばれるポインティング装置161などの入力デバイスを介して、コンピューター110にコマンドおよび情報を入力してよい。他の入力装置図示せずは、マイクロホン、ジョイスティック、ゲームパッド、衛星放送アンテナ、スキャナー、タッチセンサー式の画面、ライティングタブレットなどを含んでよい。これらおよび他の入力装置はしばしば、システムバスに結合されたユーザー入力インターフェース160を介して処理装置120に接続されるが、パラレルポート、ゲームポートまたはユニバーサルシリアルバスUSB:universalserialbusなどの他のインターフェースおよびバス構造によって接続されてもよい。0025モニター191または他のタイプの表示装置もまた、ビデオインターフェース190などのインターフェースを介してシステムバス121に接続される。モニターに加えて、コンピューターは、出力周辺インターフェース195によって接続されてよいスピーカー197およびプリンター196などの他の周辺出力デバイスを含むこともできる。0026コンピューター110は、リモートコンピューター180など、1つまたは複数のリモートコンピューターへの論理接続を使用して、ネットワーク化された環境内で動作することができる。リモートコンピューター180は、パーソナルコンピューター、サーバー、ルーター、ネットワークPC、ピアデバイス、または他の一般的なネットワークノードであってよく、また図1にはメモリー記憶デバイス181だけが示されているが、典型的には、コンピューター110に関して上記で述べられた要素の多くまたはすべてを含む。図1に示された論理接続は、ローカルエリアネットワークLAN:localareanetwork171と広域ネットワークWAN:wideareanetwork173とを含むが、他のネットワークを含むこともできる。こうしたネットワーキング環境は、オフィス、企業規模のコンピューターネットワーク、イントラネットおよびインターネットでは一般的である。0027LANネットワーキング環境で使用される場合は、コンピューター110は、ネットワークインターフェースまたはアダプター170を介してLAN171に接続される。広域ネットワーキング環境で使用される場合は、コンピューター110は、モデム172、またはインターネットなどのWAN173を介して通信を確立する他の手段を含んでよい。内部にあっても、外部にあってもよい172は、ユーザー入力インターフェース160または他の適切な機構を介してシステムバス121に接続されてよい。ネットワーク化された環境では、コンピューター110に関して示されたプログラムモジュール、またはその一部は、リモートメモリー記憶デバイス内に格納されてよい。限定のためではなく、例示するために、図1は、メモリーデバイス181内に常駐するリモートアプリケーションプログラム185を示している。示されたネットワーク接続は例示的なものであり、コンピューター間の通信リンクを確立する他の手段が使用されてもよいことが理解されよう。チェックポインティング0028上記に言及されたように、記憶デバイスにデータを書き込んでいる間に、停電およびシステム障害が発生することがある。これによって、記憶デバイスに格納されたデータが不整合な状態に置かれることがある。この問題および他の問題に対処するために、チェックポイントが、記憶デバイスに書き込まれてよい。0029図2は、本明細書に述べられた主題の態様が動作してよいシステムのコンポーネントの例示的な構成を表すブロック図である。図2に示されたコンポーネントは例示的であり、必要とされ、または含まれ得るコンポーネントすべてを含むものとは限らない。他の実施形態では、図2に関連して述べられたコンポーネントおよび/または機能は、本明細書に述べられた主題の態様の精神または範囲から逸脱せずに、図示された、または図示されない他のコンポーネントに含まれていてもよいし、サブコンポーネントに置かれてもよい。一部の実施形態では、図2に関連して述べられたコンポーネントおよび/または機能は、複数のデバイスに渡って分散されてよい。0030図2に移ると、システム205は、1つまたは複数のアプリケーション210と、API215と、ファイルシステムコンポーネント220と、ストア250と、通信機構255と、他のコンポーネント図示せずとを含んでよい。システム205は、1つまたは複数のコンピューティングデバイスを備えてよい。こうしたデバイスは、たとえば、パーソナルコンピューター、サーバーコンピューター、ハンドヘルドまたはラップトップのデバイス、マルチプロセッサーシステム、マイクロコントローラーベースのシステム、セットトップボックス、プログラマブル家電、ネットワークPC、ミニコンピューター、メインフレームコンピューター、携帯電話、携帯情報端末PDA、ゲーミングデバイス、プリンター、セットトップ、メディアセンターまたは他の器具を含めた器具、自動車に組み込まれた、または取り付けられたデバイス、他のモバイルデバイス、上記システムまたはデバイスのいずれかを含む分散コンピューティング環境などを含んでよい。0031システム205が単一のデバイスを備える場合、システム205として働くように構成され得る例示的なデバイスは、図1のコンピューター110を備える。システム205が複数のデバイスを備える場合、複数のデバイスはそれぞれ、同様に、または異なるように図1のコンピューター110を備えてよい。0032ファイルシステムコンポーネント220は、リカバリーマネージャー225と、チェックポイントマネージャー230と、I/Oマネージャー235と、書込み計画マネージャー237と、他のコンポーネント図示せずとを含んでよい。本明細書では、コンポーネントという語は、デバイスのすべてまたは一部、1つまたは複数のソフトウェアモジュールの集合またはその一部、1つまたは複数のソフトウェアモジュールの何らかの組合せまたはその一部、および1つまたは複数のデバイスまたはその一部などを含むものと解釈されるべきである。0033通信機構255は、システム205が他のエンティティと通信することを可能にする。たとえば、通信機構255は、システム205がリモートホスト上のアプリケーションと通信することを可能にすることができる。通信機構255は、ネットワークインターフェースまたはアダプター170、モデム172、または図1に関連して述べられた通信を確立するための他の任意の機構であってよい。0034ストア250は、データへのアクセスを提供できる任意の記憶媒体である。ストアは、揮発性メモリーたとえばキャッシュ、および不揮発性メモリーたとえば永続記憶装置を含んでよい。データという語は、1つまたは複数のコンピューター記憶要素によって表され得るどんなものをも含むと解釈されるべきである。論理上、データは、揮発性または不揮発性メモリー内で一連の1および0として表されてよい。非バイナリ記憶媒体を有するコンピューターでは、データは、記憶媒体の能力に従って表されてよい。データは、番号、文字などの単純なデータタイプ、階層型の、リンクされた、または他の関連データタイプを含めた様々なタイプのデータ構造、複数の他のデータ構造または単純なデータタイプを含むデータ構造などに編成されてよい。データの一部の例は、情報、プログラムコード、プログラム状態、プログラムデータ、他のデータなどを含む。0035ストア250は、ハードディスク記憶装置、他の不揮発性記憶装置、RAMなどの揮発性メモリー、他の記憶装置、上記の何らかの組合せなどを備えてよく、複数のデバイスに渡って分散されてよい。ストア250は、外部にあることも、内部にあることも、システム205の内部と外部の両方のコンポーネントを含むこともある。0036ストア250は、記憶域コントローラー240を介してアクセスされてよい。本明細書では、アクセスは、データの読出し、データの書込み、データの削除、データの更新、上記の2つ以上を含む組合せなどを含んでよい。記憶域コントローラー240は、ストア250へのアクセスを求める要求を受信してよく、こうした要求を適宜遂行することができる。記憶域コントローラー240は、データが受信された順序でストア250に書き込まれることを保証しないように構成されてよい。さらに、記憶域コントローラー240は、記憶域コントローラー240がストア250の不揮発性メモリーにデータを実際に書き込む前に、要求されたデータを記憶域コントローラー240が書き込んでいることを示すことができる。00371つまたは複数のアプリケーション210は、データの作成、削除または更新に関与してよい任意のプロセスを含む。こうしたプロセスは、ユーザーモードで実行することも、カーネルモードで実行することもできる。プロセスという語およびその変形体は本明細書では、従来のプロセス、スレッド、コンポーネント、ライブラリ、タスクを実施するオブジェクトなどを含んでよい。プロセスは、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組合せで実装されてよい。一実施形態では、プロセスは、任意の機構であるが、呼び出され、アクションを実施することができ、またはその際に使用される。プロセスは、複数のデバイスに渡って分散されることも、単一のデバイスにあることもある。1つまたは複数のアプリケーション210は、API215を介してI/Oマネージャー235に、たとえば関数/メソッド呼出しによってファイルシステム要求を行うことができる。0038I/Oマネージャー235は、記憶域コントローラー240または他の何らかの中間コンポーネントに1つまたは複数のどんなI/O要求を発行するか決定してよい。I/Oマネージャー235は、ファイルシステム要求に関連する操作が進行し、完了し、または失敗するにつれて、1つまたは複数のアプリケーション210にデータを返すこともできる。ファイルシステム要求がトランザクションを伴う場合、I/Oマネージャー235は、トランザクションマネージャーがトランザクションを適切に管理できるように、トランザクションマネージャー図示せずに通知してよい。一部の実施形態では、トランザクションマネージャーの機能は、I/Oマネージャー235に含まれてよい。0039ファイルシステムコンポーネント220は、ファイルシステムオブジェクト、またはファイルシステムオブジェクトに関するメタデータをストア250に書き込む際にコピーオンライト、ライトインプレイスwriteinplace、上記の組合せを使用することができる。ファイルという語は、ディレクトリー、子をもたないファイルシステムオブジェクトたとえば、ファイルであると時々考えられるもの、他のファイルシステムオブジェクトなどを含んでよい。0040コピーオンライトでは、ファイルのデータが修正される前に、修正されるべきデータのコピーが、別の位置にコピーされる。ライトインプレイスでは、元のデータを別の位置にコピーせずに、ファイルのデータが適所で修正されてよい。コピーオンライトとライトインプレイスのハイブリッドは、ファイルに関するメタデータについてはコピーオンライトを実施し、そのファイル内に含まれたデータについてはライトインプレイスを実施することを含んでよい。0041ファイルシステムのオブジェクトは、トランザクションのコンテキストで更新されてよい。トランザクションは、たとえばアトミック、整合性、分離および耐久性を含めて、様々なプロパティによって表され得る一群の操作である。本明細書では、トランザクションは、少なくとも整合性プロパティによって定義されてよく、上記の他のプロパティの1つまたは複数によっても定義され得る。0042整合性プロパティは、1つまたは複数のファイルに関して、データの許可された状態を指す。ファイルシステムのファイルは、トランザクションの間は無許可の状態を通過することがあるがトランザクションの開始前、およびトランザクションの完了後は、許可された状態にある。たとえば、銀行振替は、2つの操作:1つの口座からの引落しと、別の口座への入金のセットとして実施されてよい。この例では整合性は、銀行と口座名義人の総勘定残高が一定になるものたとえばT=AB、ただし、Tは定数、A=銀行残高、B=口座名義人残高と定義されてよい。この例では整合性を実施するために、借方操作と貸方操作は単純に、同じ金額に対するものであり、両方が完了され、または各口座でどちらも完了されないことを必要とする。0043ファイルシステムの整合性状態を示すために、チェックポイントが書き込まれてよい。チェックポイントは、チェックポイントおよび/またはチェックポイントに関連するデータがディスクに正確に書き込まれたかどうか決定するために使用されてもよい1つまたは複数の検証コードたとえば1つまたは複数のチェックサム、ハッシュ、または他のデータを含んでよい。リカバリーすると、最後に書き込まれたチェックポイントが、突き止められてよい。次いで、チェックポイントの検証コード複数可は、チェックポイントおよび/またはチェックポイントに関連するデータがディスクに正確に書き込まれたかどうか決定するために使用されてもよい。そうでない場合は、有効なチェックポイントが見つかるまで、前のチェックポイントが突き止められ、有効であるかチェックされてよい。最も最近の有効なチェックポイントが見つかると、ファイルシステムの最後の整合性状態が分かる。このポイントの後に行われるファイルシステム操作は、廃棄されてもよいし、要望に応じて追加のリカバリーアクションが実施されてもよい。0044一実施形態では、ファイルシステム上のオブジェクトがDnで示されてよく、ただし、nは、システムに対してオブジェクトを識別する。ファイルシステム内のオブジェクトは、直列化可能でありすなわち、ストア250内のデータとして表すことが可能であり、また非直列化可能である。オブジェクトテーブルは、各オブジェクト識別子を、ストア250内のその位置に関連付ける。0045Dnは、修正トランザクションで最初に更新されるとき、nを使用して、オブジェクトテーブル内でその位置を調べることにより突き止められる。一例において使用するために、ストア250内のDnの記憶位置は、L1と呼ばれる。0046次いで、L1の内容がストア250から読み出され、オブジェクトは、非直列化されてよくたとえば、直列化されたフォーマットからオブジェクトの構造に変換されてよく、修正されるオブジェクトの一部が、メインシステムメモリーにコピーされる。更新は、メモリー内の一部またはそのコピーに対して実施される。修正されるメモリー内の一部に関連して、ストア25内の1つまたは複数の新しい位置これをL2と呼ぶが、修正された一部のために指定される。0047メインシステムメモリー内のこれらのコピーは本明細書では、オブジェクトの論理的なコピーと呼ばれることがある。オブジェクトの論理的なコピーは、オブジェクトを表すために使用されてよい1つまたは複数のデータ構造を含む。論理的には、論理的なコピーは、オブジェクトの複製である。物理的には、論理的なコピーは、他のデータへのポインターを含めてオブジェクトの複製を作成するために使用されてよいデータを含んでよい。たとえば、一実装形態では、論理的なコピーは、オブジェクトの実際のコピーたとえばビットごとのコピーであってもよいし、オブジェクトを作成するために使用されてよいデータを含むデータ構造であってもよい。0048別の実装形態では、修正されない論理的なコピーは、元のオブジェクトを指す1つまたは複数のポインターを含んでよい。論理的なコピーが修正されるとき、論理的なコピー内のポインターは、たとえば論理的なコピーの変更された部分について新しいメモリー位置を指してもよく、他のポインターは、たとえば論理的なコピーの変更されていない部分について元のオブジェクトの一部を指してよい。ポインターを使用して、修正されたコピーは、元のオブジェクトの修正されていないデータと共に修正されたデータを使用して作成されてよい。論理的なコピーの作成は、たとえば、オブジェクトの複製を作成するのに必要な記憶域を減少させるために実施されてよい。0049さらに、本明細書では直列化および非直列化について言及されることがあるが、本明細書に述べられた主題の態様を、直列化および非直列化と通常考えられるものに限定する意図はない。一実施形態では、直列化バージョンは、ビット対ビットで非直列化バージョンと同一であってよい。別の実施形態では、直列化バージョンのビットは、非直列化バージョンのものとは異なる形式および順序でパッケージ化されてもよい。確かに、一実施形態では、直列化および非直列化は、ストアからのオブジェクトを表すデータを格納し取出すための任意の機構を意味するものと理解されるべきである。他の機構はたとえば、テキストフォーマットのオブジェクトのプロパティをストアに書み込むこと、ストア内でオブジェクトのプロパティをマークアップ言語で符号化すること、オブジェクトのプロパティおよび他の特徴をストアに格納する他の方法などを含んでよい。0050システムの決定でたとえばトランザクションのコミット後、または他の何らかのときに、システムは、修正された論理的なコピーを直列化して、安定した媒体に戻すことができるが、位置L2でそれを行う。修正された論理的なコピーを新しい位置に書き込み戻す意図は、書込み計画と呼ばれる。書込み計画は、1つまたは複数のオブジェクトに対する任意の数の更新を識別してよい。書込み計画は、2つ以上のトランザクションで生じる変更を参照してよい。複数の書込み計画が、単一の書込み計画に組み合わされてよい。0051書込み計画マネージャー237は、様々な更新のための書込み計画の作成に関与してよい。書込み計画がたとえばトランザクションのコンテキストで複数ファイルシステムオブジェクトを伴う場合、書込み計画マネージャー237は、ファイルシステムの整合性状態を維持するために、トランザクションに関与するすべてのファイルシステムオブジェクトの記憶域上の位置を示す書込み計画を生成するように動作可能であってよい。0052チェックポイントの直後に修正が行われる場合、複数の位置で複製されてよいリカバリーブロックと呼ばれるブロックが、修正された論理的なコピーの開始すなわちL2を指すように修正されてよい。L2のオブジェクト内のフィールドは、次に書き込まれる位置を指す。このフィールドは、チェックポイント間で生じる書込み計画のチェーン内のリンクを表す。0053論理的なコピーを書き込むよう求める要求の送信と共に、オブジェクトテーブルに対して修正が行われてよい。特に、オブジェクトの識別子によってインデックス付けされた位置の値は、修正された論理的なコピーが格納される位置すなわちL2の値に設定されてよい。これは、オブジェクトDnの位置の後続のルックアップが位置L2、オブジェクトの新しいバージョンに向けられるように行われる。0054トランザクションが2つ以上のオブジェクト、たとえばDiおよびDjを修正する場合、オブジェクトは、互いに原子的にバインドされると見なされ、1つの書込み計画で書き込まれる。書込み計画は、たとえば、関与するオブジェクトへのリンクでこの関係を指定してよい。0055任意の数のオブジェクトが、このようにして続けられてよい。周期的にオブジェクトテーブルもまた、他のいずれかのオブジェクトと同じようにしてストア250に書き込まれてよい。0056オブジェクトテーブルをストア250に書き込むよう求める要求の送信と共に、フラッシュコマンドも、記憶域コントローラー240に送られてよい。フラッシュコマンドは、記憶域コントローラー240に、ストア250の不揮発性メモリーにまだ書き込まれていないその揮発性メモリーからのすべてのデータを書き込むように指示する。0057より詳細に下記に述べられるように、チェックポイントは周期的に、記憶域に書き込まれてよい。チェックポイントは、ストア250によって格納されるチェックポイントレコードによって示されてよい。チェックポイントは、任意のときに書き込まれてよく、フラッシュの後に安定性/耐久性を有し得る。安定性/耐久性は、チェックポイントがストアの不揮発性メモリーに格納されることを指す。0058チェックポイントが安定性/耐久性を有した後、オブジェクトのいずれかの古い未使用のコピーまたはその一部に使用された空間が再使用されてよい。フラッシュが完了した後、次いで、リカバリーブロックは、次の書込み計画のチェーンの開始に向けられる。一実施形態では、リカバリーブロックは、書込み計画のチェーンの開始をオブジェクトテーブルの新しい位置に向けてよい。0059図3に関連してより具体的な例が述べられており、この図3は、本明細書に述べられた主題の態様を示すブロック図である。示されたように、図3は、メインメモリー305およびストア250を示している。線307は、メインメモリー305とストア250の間の分割を表している。線310より上のオブジェクトはメインメモリー内にあり、線310より下のオブジェクトは、ストア250の揮発性メモリーまたは不揮発性メモリー内にある。0060オブジェクト314~316は、メインメモリー305内に示されている。実装において、オブジェクト314~316は、それぞれオブジェクト319~321の非直列化された論理的なコピーであってよい。オブジェクト319は、ストア250上の位置1550に置かれ、オブジェクト320は、ストア250上の位置200に置かれ、オブジェクト321は、ストア250上の位置800に置かれる。0061オブジェクトテーブル310は、ストア250上のオブジェクト314~316の位置を示すキー値対を含む。キー値対は、オブジェクト314~316の識別子nを使用してインデックス付けされる。0062トランザクションがオブジェクト316をたとえばその名前をfoo.txtに変更することによってを修正する場合、整合性コンポーネントたとえば図2の整合性コンポーネント220は、更新されたオブジェクトの新しい記憶位置たとえば位置801を決定してよい。オブジェクトがファイルである場合、トランザクションのコンテキストでオブジェクトの名前を更新することによって、ファイルを含むディレクトリーもまた、やはりトランザクションに関与することになり得る。たとえば、ファイル名が変更される場合、ファイルを表すオブジェクトと、ファイルを含むディレクトリーを表すオブジェクトの両方が、トランザクションに関与する必要があり得る。この場合、オブジェクトを含むディレクトリーは、オブジェクト314として表され、更新されたディレクトリーの論理的なコピーたとえばオブジェクト318は、ストア250内のオブジェクト323として表される。また、テーブル310は、修正されたオブジェクトすなわちオブジェクト317および318の新しい記憶位置すなわち801および1000を示すように、テーブル311に対して論理的に更新されている。0063トランザクションのコンテキスト内のオブジェクトの修正が別のオブジェクトにも影響を及ぼすことは、たとえば、I/Oマネージャー235または図2の他の何らかのコンポーネントによって明示的に示され、または決定されてよい。00642つ以上のオブジェクトがトランザクションの更新に関与する場合、オブジェクトは、上記に言及されたように原子的にバインドされると見なされる。リカバリー操作では、トランザクションのコンテキストで変更されたすべてのオブジェクトについてストア250内に変更が見られない限り、見つかった変更はすべて廃棄される。換言すると、オブジェクトのうちの1つについて変更が見つかるが、オブジェクトのうちの別のオブジェクトについて変更が見つからない場合は、そのオブジェクトのうちの1つについての変更は廃棄される。0065一実施形態では、2つ以上のオブジェクトを原子的にバインドするために、ポインターが、ストア250内に格納されてもよいし、別の方法で各オブジェクトに関連付けられてよい。ポインターは、トランザクションに関与する別のオブジェクトまたはその一部の記憶位置を示すことができる。トランザクションに関与する追加のオブジェクトがない場合、ポインターは、デッドブロックを指してもよいし、別の書込み計画のヘッドオブジェクトの記憶位置を示してもよい。このヘッドオブジェクトは、書込み計画、書込み計画の修正されたオブジェクトまたはその一部などを備えてよい。0066指されたオブジェクトの正確な内容を示すために、次の記憶位置へのポインターに加えて、データもまた、ストア250内に格納されてよい。たとえば、指されたオブジェクトの正確な内容を示すハッシュ値が格納されてよい。0067図3に示された例では、オブジェクト322に関連するポインターは、オブジェクト323に関連する記憶位置を指してよい。ポインターは、2つのオブジェクトを共にバインドする。リカバリーの間、オブジェクトのどちらもが見つからず、またはそれらは正確な内容をもたない場合、見つかったオブジェクトによって表された変更は、廃棄されてよい。0068ストア250の性質のために、最初にどのオブジェクトがストア250の不揮発性メモリーに書き込まれるかに関する保証がないことがある。オブジェクト322が最初に書き込まれ、オブジェクト323が書き込まれない場合、オブジェクト322からのポインターは、偽のデータを有し得る記憶位置を指す。しかし、記憶位置のデータのハッシュを計算し、このハッシュをオブジェクト322と共に格納されたハッシュと比較することによって、位置1000のデータは無効なデータを有するものとして検出され得る。この場合、リカバリーの間、リカバリーマネージャーたとえば図2のリカバリーマネージャー225は、オブジェクト322および323によって表された変更を廃棄してよい。0069リカバリーブロック330は、チェックポイントの後にデータが格納されると思われた第1の記憶位置この場合は位置801を指す。またリカバリーブロック330は、第1の記憶位置に格納されたオブジェクトの正確な内容を使用して計算されるハッシュを含んでいてもよいし、それに関連付けられてもよい。0070図4は、本明細書に述べられた主題の態様による、ファイルシステム内で行われる更新の全体を表す図である。グローバルテーブル405は、ストア内のオブジェクトの位置を識別するオブジェクトテーブルと、割り当てられたストア250内の空間に関する割当てデータとを含む。進行中の更新410も示されている。更新は、時間軸415に接触するとき、完了し、もはやグローバルテーブル405のいずれをも修正する必要はない。更新410の更新の線はそれぞれ、複数の更新を表してよい。整合性を維持するために複数の更新が共に行われる必要がある場合、更新は、トランザクションのコンテキストで行われてよい。0071チェックポイントが有効となるには、チェックポイントは、整合性状態で書き込まれる必要がある。書込みファイルシステム内のコピーを用いて、オブジェクトが更新されるとき、修正されたオブジェクトの論理的なコピーが、ファイルシステムの新しい位置に格納される。この新しい位置は、オブジェクトテーブルへの更新と共に、オブジェクトテーブル内に反映される。整合性については、システム障害の前に更新がディスクに完全には書き込まれないことがあるので、ディスクにまだ書き込まれていない更新をオブジェクトテーブルが反映することは不正確である。同様に、更新が完了され、ディスクに書き込まれ、他のトランザクション関連の更新が完了されるが、オブジェクトテーブルが更新を示さないことも不正確である。0072整合性を保証するために、チェックポイントは、更新用のメタデータがグローバルテーブルに反映されるときに選択される必要がある。更新410を表す線がそれぞれ、更新のためにグローバルテーブル405が更新されてよい期間を示す場合、520でチェックポイントを実施することによって不整合性状態がもたらされることがあるが、時間525でチェックポイントを実施することによって整合性状態がもたらされる。0073図5は、本明細書に述べられた主題の態様による、例示的なチェックポイントバケットを示すブロック図である。上記に言及された問題および他の問題に対処するために、それぞれの更新は、チェックポイントバケットたとえばバケット515のうちの1つに関連付けられてよい。チェックポイントバケットは、チェックポイントのチェックポイントデータがディスクに書き込まれる前に、チェックポイントバケットに関連する更新の少なくとも書込み計画を明らかにするようにグローバルテーブルが更新される必要があることを示す論理的な概念である。換言すると、グローバルテーブルは、更新がそれらの位置に現在書き込まれていても、いなくても、バケットの更新の位置および割当て情報を明らかにするように更新される必要がある。0074周期的にたとえばリカバリーウィンドウに基づくチェックポイントタイマーの終了時、ある数の書込みが行われた後、何らかの閾値を超えた後など、チェックポイントを生成するための決定が行われてよい。これが起こるとき、チェックポイントマネージャーは、後続の更新に関連するチェックポイントバケットを示すデータたとえばデータ構造510を更新してよい。たとえば、チェックポイントマネージャーは、現在のチェックポイントバケットを示すデータたとえばデータ構造510の排他ロックたとえばロック505を得てもよい。チェックポイントマネージャーは、データの排他ロックを得た後、後続の更新用の新しいチェックポイントバケットを示すようにデータを更新してよい。すべての後続の更新は、データが後続の更新用の別のチェックポイントバケットを示すように変更されるまで、新しいチェックポイントバケットに関連付けられる。0075チェックポイントバケットは、論理的な概念と考えられてよく、様々な方法で実装されてよい。たとえば、一実装形態では、チェックポイントバケットは、チェックポイントバケットに関連するそれぞれの更新へのポインターを有するリストなど、データ構造として実装されてよい。別の例として、チェックポイントバケットは、更新ごとに維持されるデータとして実装されてよく、このデータは、更新に関連するチェックポイントを示す。別の例として、チェックポイントバケットは、カウントセマフォとして実装されてよい。この例では、どの更新を依然としてディスクに書き込む必要があるかは知られていないことがあるが、ディスクに依然として書き込む必要がある更新の回数は知られている。この例では、読書きロックが使用されてよい。0076上記の例は、チェックポイントバケットを実装する方法をすべて含むものでも、それを網羅するものでもない。確かに、本発明の教示に基づいて、当業者は、チェックポイントバケットの実装するための他の多くの機構を認識することができる。0077たとえばデータ構造510の変更によって後続の更新用のチェックポイントバケットを示した後、チェックポイントマネージャーは、現在のチェックポイントバケット内のすべての更新の書込み計画が生成されるのを待ってよい。現在のチェックポイントバケット内のすべての更新の書込み計画が生成された後しかし、恐らく記憶域に書き込まれていないが、チェックポイントマネージャーは、図4のグローバルテーブル405のスナップショットをとり、グローバルテーブル405のスナップショットをストアに書き込むための書込み計画を作成してよい。スナップショットは、コピーオンライトまたは他の機構によって、グローバルテーブル405の論理的なコピーとして作成されてよい。0078図4に戻って述べると、チェックポイントマネージャーが、現在のチェックポイントバケット内の更新が生成されるのを待っている間、またチェックポイントマネージャーがチェックポイントの書込みのための書込み計画を生成する間、チェックポイントの後に続く更新のための書込み計画が生成され、ディスクに書き込まれてよい。しかし、チェックポイントマネージャーは、グローバルテーブルのスナップショットを得ようとするとき、スナップショットを作成する前にグローバルテーブル405の排他ロックを得てよい。チェックポイントマネージャーが排他ロックを有している間、他の更新のために書込み計画が依然として生成されてよく、これらの書込み計画は、ストア内にさらに格納されてよいが、グローバルテーブルたとえばオブジェクトテーブルは、チェックポイントマネージャーがその排他ロックを解除するまで、これらの書込み計画を指すように更新されないことがある。ロックの解除と共に、チェックポイントマネージャーは、後のチェックポイントがイネーブルされており、後の更新がグローバルテーブルを更新してよいことを示す信号を送ってよいたとえばイベントを引き起こしてよい。0079リカバリーの助けとなるように、チェックポイントは、下記の規則に従ってチェックポイントを検証するために検証コードと共にディスクに書き込まれてよい。00801.書込み計画によって示されたデータがディスクに書き込まれるのを待つたとえば、チェックポイントに関連するすべての更新がディスクに書き込まれるのを待つ。00812.チェックポイントに関連するデータのすべてがディスクに書き込まれることを要求するたとえば、メタデータの論理的なコピーがディスクに書き込まれることを要求する。00823.フラッシュを発しまたはフラッシュを待ち、およびフラッシュがうまく完了したことの肯定応答を待つ。00834.ディスクに書き込まれたチェックポイントデータのための検証コードを生成する。一実施形態では、検証コードは、ディスクに書き込まれたデータのサブセットについてものものであってよい。たとえば、ファイル用データがツリーに格納され、このツリーの各ノードが、その子の検証コードを含む場合、検証ノードは、ツリーのルートノードについてのものであってよい。この実施形態では、検証コードは、ルートノードと共に書き込まれ、検証コードが正確であることを検証するためにも使用されてよい。00845.検証コードおよびルートノードなどの関連する任意のデータがディスクに書き込まれることを要求する。検証コードは、システム障害の前に、実際にはディスクに到達しないことがあることに留意されたい。そうでない場合は、チェックポイントは、有効なチェックポイントでない。0085これらの規則により、チェックポイントが記憶域上で見つかり、チェックポイントの内部検証コードが有効な場合、チェックポイントに関連するその他のデータも記憶域上に格納されており、また有効であると期待される。検証コードがルートノードに含まれている場合、ルートノードのその他のデータたとえばツリーの他のノードへのポインターが、チェックポイントに対応するデータの残りを見つけるために使用されてよい。0086代替案として、チェックポイントに関連する各更新の検証コードが、記憶域に書き込まれてよい。たとえば、チェックポイントは、チェックポイントより前、および前のチェックポイントの後に行われると思われたすべての更新のブロックを示してよい。示された各ブロックについて、チェックポイントは、ブロックの正確な内容を示す検証コードを格納してよい。この代替案ではリカバリー間、チェックポイントを検証するために、それぞれのブロックが、チェックポイントのその関連する検証コードに対して検証されてよい。0087図2に戻って述べると、一実施形態では、チェックポイントマネージャー230は、下記を含むアクションを実施するように動作可能であってよい。00881.ファイルシステムオブジェクトの更新の要求に関連する第1のチェックポイントを決定する。上記に言及されたように、チェックポイントマネージャー230は、新しいチェックポイントバケットを指すようにデータ構造たとえば図5のデータ構造510を更新することによってこれを行うことができる。次いで、それぞれの後続の更新要求が受信されると、要求は、新しいチェックポイントバケットに割り当てられてよい。0089本明細書では、第1のという語は、まさに最初のチェックポイントを意味するのではなく、それは第2のチェックポイントと区別するために使用されていることに留意されたい。換言すると、N個のチェックポイントがある場合、第1のチェックポイントは、1≦X≦Nとして任意のXであってよく、第2のチェックポイントは、1≦Y≦N、かつX<>Yとして、任意のYであってよい。00902.チェックポイントに関連するチェックポイントデータをファイルシステムの記憶域にいつ書き込むか決定する。たとえば、チェックポイントタイマーが終了し得るとき、更新回数が超過し得るとき、または他の何らかの閾値が、チェックポイントデータを書き込むときであることを決定するために使用されてよい。00913.ファイルシステムオブジェクトの更新を求める後続の要求の第2のチェックポイントを決定する。上記に言及されたように、チェックポイントマネージャー230は、データ構造の排他ロックたとえばロック505を得た後、データ構造たとえば図5のデータ構造510を更新することによってこれを行うことができる。00924.後続の要求のためのデータ書込みの準備を可能にしながら、ファイルシステムの整合性状態を待つ。整合性状態は、現在のチェックポイントバケットに関連する更新のすべてが記憶域上に表されるたとえばうまく書き込まれたときに生じる。後続の要求のためのデータ書込みの準備を可能にすることは、後続の要求のために書込み計画が生成され、記憶域に書き込まれることを可能にするが、メタデータの論理的なコピーの作成後まで、メタデータたとえばグローバルテーブルの更新を可能にしないことを含む。00935.ファイルシステムのメタデータの論理的なコピーを作成する。これは、上記に言及されたように、グローバルテーブルのスナップショットをとることによって行われてよい。00946.メタデータの論理的なコピーを記憶域に書き込む。一実施形態では、これは、論理的なコピーを記憶域に書き込むことを要求すること、および論理的なコピーが記憶域に書き込まれたことの確認を待つことを含んでよい。別の実施形態では、これは、更新の許可の前に、メタデータの後続の更新によってコピーオンライトが引き起こされるように、記憶域内のコピーをクリーンとマーキングすることを含んでよい。00957.少なくとも1つの検証コードを記憶域に書き込む。上記に言及されたように、検証コードは、チェックポイントより前の更新が記憶域に書き込まれたかどうか、ならびにチェックポイントレコード自体が有効かどうか決定するのに使用可能であってよい。0096API215は、トランザクションに関与するオブジェクトを修正するよう求める要求を受信してよい。これに応答して、I/Oマネージャー235は、ストアの記憶位置たとえばL1にオブジェクトを突き止め、オブジェクトの論理的なコピーを作成し、トランザクションのコンテキストでオブジェクトに変更を加え、変更された論理的なコピーを格納するための第2の記憶位置たとえばL2を決定し、変更された論理的なコピーを書き込むよう求める要求を記憶域コントローラー240に送り、論理的なコピーが第2の記憶位置に格納されることを示すように揮発性データ構造たとえばオブジェクトテーブル310を更新してよい。0097API215がトランザクションに関与する別のオブジェクトを修正するよう求める要求を受信する場合、I/Oマネージャー235は、他のオブジェクトと第1のオブジェクトを共にバインドする関連付けたとえば書込み計画を作成することを含めて、追加のアクションを実施してよい。次いで、オブジェクトの修正を書き込むよう求める要求を記憶域に送ると共に、I/Oマネージャー235は、関連付けを書き込む要求を記憶域コントローラー240に送ることもできる。0098図6~図8は、本明細書に述べられた主題の態様に従って行われてよい例示的なアクションの全体を表すフローチャートである。説明を簡単にするために、図6~図8に関連して述べられた方法論は、一連の行為として示され述べられている。本明細書に述べられた主題の態様は、示された行為および/または行為の順序によって制限されるものでないことを理解されたい。一実施形態では、行為は、下記に述べられる順序で行われる。しかし、他の実施形態では、行為は、平行して、別の順序で、かつ/または本明細書に提示も説明もされていない他の行為と共に行われよい。さらに、示されたすべての行為が、本明細書に述べられた主題の態様に従って方法論を実施する必要があるとは限らないことがある。さらに、方法論は別法として、状態図によって一連の相互関連する状態として表されてもよいし、イベントとして表されてもよいことが当業者には理解されよう。0099図6に移ると、ブロック605で、アクションが開始している。ブロック610で、第1の1組の更新が第1のチェックポイントに関連付けられることを示す表示が行われる。これは、後続の更新が第1のチェックポイントに関連付けられることを示すようにデータ構造を修正することによって行われてよい。上記で言及されたように、これは、たとえば、ロックを取得し解除し、ポインターまたは他のデータ構造をチェックポイントバケットを参照するように更新することを伴い得る。この場合も第1のは、ファイルシステムのいずれかのチェックポイントを意味し、このチェックポイントを後続のチェックポイントと区別するために使用されることに留意されたい。たとえば、図2および図5を参照すると、チェックポイントマネージャー230は、データ構造510のロック505を取得し、チェックポイントバケット515のうちの1つを指すようにポインターを更新してよい。00100ブロック615で、更新が受信され、第1のチェックポイントに関連付けられる。たとえば、図2を参照すると、I/Oマネージャー235は、API215を介してアプリケーション210複数可から更新要求を受信してよい。更新は、受信されるとき、チェックポイントに関連付けられてよい。00101ブロック620で、第1のチェックポイントのチェックポイントデータをファイルシステムの記憶域に書き込むことの決定が行われる。たとえば、図2を参照すると、チェックポイントマネージャー230は、チェックポイントタイマーが終了していると決定することができ、またそれに基づいて、チェックポイントがストア250に書き込まれると決定してよい。00102ブロック625で、後続の更新のチェックポイントを示すためのデータ構造に対してロックが取得される。たとえば、図2および図5を参照すると、チェックポイントマネージャー230は、データ構造510のロック505を取得してよい。00103ブロック630で、データ構造は、別のチェックポイントを参照するように更新される。このデータ構造を修正することによって、第1の1組の更新の後に続いて行われるどんな更新もが後続のチェックポイントに関連付けられることを示す。たとえば、図2および図5を参照すると、チェックポイントマネージャー230は、チェックポイントバケット515のうちの別のものを参照するようにデータ構造510を更新してよい。00104ブロック635で、ロックが解除される。たとえば、図2および図5を参照すると、チェックポイントマネージャー230は、ロック505を解除してよい。00105ブロック640で、更新のための書込み計画が生成される。それぞれの書込み計画は、第1の1組の更新のうちの少なくとも1つを表すデータについて記憶域上の少なくとも1つの計画された位置を示す。たとえば、図2を参照すると、書込み計画マネージャー237は、チェックポイントに関連する更新の書込み計画の作成に関与してよい。00106ブロック645で、メタデータが、書込み計画のために更新される。このメタデータは、書込み計画が記憶域に書き込まれていることも、まだ書き込まれていないこともあるが書込み計画の記憶位置を示す。たとえば、図2を参照すると、書込み計画マネージャー237は、書込み計画によって修正された記憶位置オブジェクトを示すようにグローバルテーブルを更新してよい。00107ブロック645の後、図7のブロック705で、アクションは継続する。図7に移ると、ブロック705で、メタデータのためにロックが得られる。たとえば、図2および図4を参照して、チェックポイントマネージャー230は、グローバルテーブル405のロックを取得してよい。チェックポイントマネージャー230は、これらの更新のすべてがこれらの記憶位置に書き込まれていても、書き込まれていなくてもメタデータが第1の1組の更新のすべての更新の記憶位置を反映するまで待ってよい。00108ブロック710で、メタデータの論理的なコピーが作成される。上記に言及されたように、これは、メタデータの新しいコピーを作成すること、メタデータへの後続の更新によってコピーオンライト、または他の何らかの論理的なコピー機構が引き起こされるようにメタデータをクリーンとマーキングすることを含んでよい。たとえば、図2および図4を参照すると、チェックポイントマネージャー230は、グローバルテーブル405の論理的なコピーを作成してよい。00109ブロック715で、ロックが解除される。たとえば、図2および図4を参照すると、チェックポイントマネージャー230は、グローバルテーブル405のロックを解除してよい。00110ブロック720で、第1のチェックポイントデータを書き込むための書込み計画が作成される。この書込み計画の作成は、チェックポイントの後に続く更新のために生成されるまたディスクに書き込まれる書込み計画と平行して行われてよく、また現在の書込み計画に対応するデータがディスクに書き込まれる。たとえば、図2を参照すると、チェックポイントマネージャー230は、第1のチェックポイントのチェックポイントデータの書込み計画を作成するために書込み計画マネージャー237を使用してよい。このデータは、上記に言及されたグローバルテーブルの論理的なコピーを含んでよい。00111一実施形態では、ブロック725で、チェックポイントマネージャーは、第1の1組の更新のすべての更新が記憶域にうまく書き込まれるまで待ってよい。結局、すべての更新が記憶域にうまく書き込まれた後、次いで、更新マネージャーは、検証コードを含む最後のチェックポイントレコードを書き込んでよい。上記に言及されたように、これによって、リカバリーが単純に検証コードをチェックして、チェックポイントに対応するすべての更新が記憶域に書き込まれたと期待されるかどうか決定することを可能にする。00112別の実施形態では、チェックポイントマネージャーは、チェックポイントレコードにいくつかの検証コードを書き込んでよい。これらの検証コードは、第1の1組の更新の記憶位置に関連付けられてよい。この実施形態では、チェックポイントマネージャーは、これらの更新が記憶域に書き込まれるのを待ってもよいし、待たずにチェックポイントレコードを書き込んでもよい。後者のオプションが選ばれる場合、リカバリーの間に適切なチェックポイントを見つけることは、ディスク上に有効なチェックポイントレコードがあることを検証することより深い関わり合いをもつ。00113ブロック730で、チェックポイントデータが、記憶域に書き込まれてよい。これは、たとえば、チェックポイントデータに関連する書込み計画を記憶域に書き込むことを伴い得る。別の例として、これは、グローバルテーブルの論理的なコピーを参照する記憶域にチェックポイントレコードを書き込むことを伴い得る。たとえば、図2を参照すると、チェックポイントマネージャー230は、チェックポイントデータに対応する書込み計画が記憶域に書き込まれることを要求してよい。00114ブロック735で、少なくとも1つの検証コードが、記憶域に書き込まれる。記憶域に少なくとも1つの検証コードを書き込むことは、グローバルテーブルの論理的なコピーを参照する記憶域にチェックポイントレコードを書き込むことと組み合わされてよい。たとえば、図2を参照すると、チェックポイントマネージャー230は、グローバルテーブルの論理的なコピーを参照し、またチェックポイントレコードの内容を検証するための検証コードを含む記憶域にチェックポイントレコードを書き込んでよい。00115ブロック740で、他のアクションがあれば、実施されてよい。00116図8に移ると、ブロック805で、アクションが開始している。ブロック810で、リカバリー要求が受信される。たとえば、図2を参照すると、リカバリーマネージャー225は、ストア250に格納されたデータのリカバリーを実施するよう求めるリカバリー要求を受信してよい。00117ブロック815で、チェックポイントデータが突き止められる。たとえば、図2を参照して述べると、リカバリーマネージャー225は、ストア250また他の何らかのストアに格納された最新のチェックポイントデータを突き止めてよい。00118ブロック820で、チェックポイントデータが、検証コードを使用して検証される。たとえば、図2を参照して述べると、リカバリーマネージャー225は、チェックポイントデータのチェックサムを計算し、このチェックサムを、チェックポイントデータと共に格納されたチェックサムと比較してよい。チェックサムが一致する場合は、チェックポイントは有効であると見なされてよい。追加の検証が望まれる場合は、リカバリーマネージャーは、チェックポイントデータによって参照されたグローバルテーブルによって示された1つまたは複数のオブジェクトの検証を試みてよい。00119ブロック825で、他のアクションがあれば、実施されてよい。00120上記の詳細な説明から分かるように、ファイルシステムのチェックポイントに関連して態様が述べられている。本明細書に述べられた主題の態様は様々な修正および代替の構成が可能であるが、その特定の示された実施形態が、図面に示されており、上記に詳細に述べられている。しかし、特許請求された主題の態様を開示された特定の形に限定する意図はないが、その逆に、本明細書に述べられた主題の様々な態様の精神および範囲に含まれるすべての修正物、代替構成および均等物を網羅するものであることを理解されたい。