(57)【要約】  本明細書に述べられた主題の態様は、ファイルシステム用のチェックポイントに関する。態様では、ファイルシステムの更新は、チェックポイント・バケットに編成される。チェックポイントが望まれる場合、後続の更新は、別のチェックポイント・バケットに向けられる。現在のチェックポイント・バケット内の更新のためにグローバルテーブルが更新された後、グローバルテーブルの論理的なコピーが作成される。この論理的なコピーは、チェックポイント・データの一部として格納される。リカバリーの助けとするために、チェックポイント・マネージャーは、最後のチェックポイント・データを記憶域に書き込む前に現在のチェックポイント・バケットのすべての更新が記憶域に書き込まれるまで待つことができる。この最後のチェックポイント・データは、グローバルテーブルの論理的なコピーを参照し、チェックポイント・データが正確であることを検証するための検証コードを含んでよい。
2013528883.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも一部がコンピューターによって実施される方法であって、
第１の１組の更新が第１のチェックポイントに関連付けられることを示すステップと、
前記第１のチェックポイントに関するチェックポイント・データを、ファイルシステムのデータを更新するためにコピーオンライトを使用する前記ファイルシステムの記憶域に書き込むことを決定するステップと、
前記第１の１組の更新の後に行われる更新が後続のチェックポイントに関連付けられることを示すステップと、
前記第１の１組の更新のための書込み計画を生成するステップであって、それぞれの書込み計画が、前記第１の１組の更新の少なくとも１つを表すデータについて記憶域上の少なくとも１つの計画された位置を示す、ステップと、
前記ファイルシステムの割当てデータ、ならびに前記書込み計画によって修正されたファイルシステムオブジェクトの記憶位置を示すようにメタデータを更新するステップと、
前記メタデータの論理的なコピーを作成するステップとを含む方法。
【請求項２】
前記第１のチェックポイント・データを書き込むための書込み計画を作成し、前記書込み計画の作成と平行して前記後続の更新のための書込み計画の生成を可能にするステップと、
少なくとも１つの検証コードを記憶域に書き込むステップであって、前記チェックポイント・データの前記少なくとも１つの検証コード部分、前記少なくとも１つの検証コードが、前記第１の１組の更新が記憶域に正確に書き込まれたかどうか決定するために使用可能である、ステップと
をさらに含む請求項１に記載の方法。
【請求項３】
前記少なくとも１つの検証コードを記憶域に書き込むステップより前に、前記第１の１組の更新を表すデータが記憶域に書き込まれるのを待つステップ
をさらに含む請求項２に記載の方法。
【請求項４】
少なくとも１つの検証コードを記憶域に書き込むステップが、前記メタデータの前記論理的なコピーを表す少なくとも１つのツリーデータ構造のルートノードを参照する他のデータと共にブロックで記憶域に単一の検証コードを書き込むステップを含み、
前記ブロックを検証するために前記単一の検証コードを計算するステップをさらに含む請求項２に記載の方法。
【請求項５】
前記少なくとも１つの検証コードを読み出すステップと、記憶域内のデータから少なくとも１つの他の検証コードを計算するステップと、前記少なくとも１つの検証コードを前記少なくとも１つの他の検証コードと比較するステップと、それに基づいて、前記第１の１組の更新を表す、すべてのデータが記憶域にうまく書き込まれたかどうか決定するステップをさらに含む請求項２に記載の方法。
【請求項６】
第１の１組の更新が第１のチェックポイントに関連付けられることを示すステップが、データ構造が別のチェックポイントを示すように更新される前に行われる更新に前記第１のチェックポイントが使用されることを示す前記データ構造を更新するステップを含む請求項１に記載の方法。
【請求項７】
前記メタデータの論理的なコピーを作成するステップが、前記第１の１組の更新のうちの前記少なくとも１つの更新を表す前記データを前記記憶域に書き込むのと平行して前記論理的なコピーを作成するステップを含む請求項１に記載の方法。
【請求項８】
コンピューティング環境内におけるシステムであって、
ファイルシステムのファイルシステムオブジェクトを更新するよう求める要求を受信するよう動作可能なインターフェースと、
前記要求に応じるためストアに送る１つまたは複数のＩ／Ｏ要求を決定するように動作可能なＩ／Ｏマネージャーと、
アクションを実施するように動作可能なチェックポイント・マネージャーであって、前記アクションが、
ファイルシステムオブジェクトを更新するよう求める要求に関連する第１のチェックポイントを決定することであって、前記チェックポイント・マネージャーが要求をそれぞれ異なるチェックポイントに割り当てることができる、決定することと、
前記チェックポイントに関連するチェックポイント・データを前記ファイルシステムの記憶域に書き込むことを決定することと、
ファイルシステムオブジェクトを更新するよう求める後続の要求の第２のチェックポイントを決定することと、
前記後続の要求のためのデータの書込みの準備を可能にしながら、前記ファイルシステムの整合性状態を待つことと、
前記ファイルシステムのメタデータの論理的なコピーを作成することと、
前記論理的コピーを前記記憶域に書き込むことと、
少なくとも１つの検証コードを前記記憶域に書き込むことであって、前記少なくとも１つの検証コードが、前記チェックポイントより前の前記更新が記憶域に書き込まれたかどうか決定するのに使用可能である、書き込むこととを含む、チェックポイント・マネージャーと
を備えるシステム。
【請求項９】
前記チェックポイント・マネージャーが、ファイルシステムオブジェクトを更新するよう求める要求に関連するチェックポイントを決定するように動作可能であり、前記チェックポイント・マネージャーが、前記チェックポイントに関連するチェックポイント・データを前記ファイルシステムの記憶域に書き込むことを決定する前に行われる更新に前記第１のチェックポイントが使用されること、およびその後に行われる更新に前記第２のチェックポイントが使用されることを示すデータ構造を更新するように動作可能である請求項８に記載のシステム。
【請求項１０】
前記チェックポイント・マネージャーが、前記チェックポイントに関連するチェックポイント・データを前記ファイルシステムの記憶域に書き込むことを決定するように動作可能であることが、前記チェックポイント・マネージャーが、チェックポイント時間が終了したと決定するように動作可能であることを含み、前記チェックポイント時間がリカバリーウィンドウに基づく請求項８に記載のシステム。
【請求項１１】
前記ファイルシステムの整合性状態を維持するために前記ファイルシステムオブジェクトと共に更新されるすべてのファイルシステムオブジェクトの記憶域上の位置を示す書込み計画を生成するように動作可能な書込み計画マネージャーをさらに備える請求項８に記載のシステム。
【請求項１２】
前記チェックポイント・マネージャーが前記ファイルシステムの整合性状態を待つように動作可能であることが、前記チェックポイント・マネージャーが、前記第１のチェックポイントファイルシステムオブジェクトに関連するすべての更新が前記ファイルシステムの記憶域内に表されるまで待つように動作可能であることを含む請求項８に記載のシステム。
【請求項１３】
前記チェックポイント・マネージャーが後続の要求のためのデータ書込みの準備を可能にすることが、前記チェックポイント・マネージャーが、前記後続の要求のために書込み計画が生成され、記憶域に書き込まれることを可能にするが、前記メタデータの前記論理的なコピーの作成後まで、前記メタデータの更新を可能にしないように動作可能であることを含む請求項８に記載のシステム。
【請求項１４】
実行されたときにアクションを実施するコンピューター実行可能命令を有するコンピューター記憶媒体であって、前記アクションが、
ファイルシステムのリカバリー要求を受信することと、
前記ファイルシステムの記憶域内でチェックポイントのチェックポイント・データを突き止めることであって、前記チェックポイント・データが、アクションによって以前に生成されている、突き止めることとを含み、該アクションが、
前記チェックポイントに関連する更新の後に行われる更新が後続のチェックポイントに割り当てられることを示すこと、
前記チェックポイントに関連する前記更新の書込み計画を生成することであって、それぞれの書込み計画が、前記更新のうちの少なくとも１つを表すための記憶域内の少なくとも１つの計画された位置を示す、生成すること、
前記書込み計画によって修正されたオブジェクトの記憶位置を示すようにメタデータを更新すること、
前記メタデータの論理的なコピーを作成すること、及び
前記チェックポイントに関して記憶域に少なくとも１つの検証コードを書き込むことと
を含み、
前記検証コードを使用して前記チェックポイント・データを検証することを含むコンピューター記憶媒体。
【請求項１５】
前記検証コードを使用して前記チェックポイント・データを検証することが、前記チェックポイント・データのチェックサムを計算することと、前記チェックポイント・データの前記チェックサムを前記検証コードと比較することとを含む請求項１４に記載のコンピューター記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイルシステムのチェックポイントに関する。
【背景技術】
【０００２】
[0001]記憶デバイスにデータを書き込んでいる最中に、停電またはシステム障害が生じることがある。これが起こる場合、データが失われることも、データに不整合が生じることもある。たとえば、口座名義人がＡＴＭからお金を引き出している最中にシステムが故障する場合、このトランザクションは不公平に、銀行または口座名義人にとって有利に働くことがある。別の例として、ディスクアクセスを伴う長い計算の間にシステムが故障した場合、計算のやり直しにかなりの時間がかかることがある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明はこのようなことに関するものである。
【課題を解決するための手段】
【０００４】
[0002]本明細書において特許請求される主題は、いずれかの不利益な点を解決し、または上述されたものなどの環境内だけで動作する実施形態に限定されない。そうではなく、この背景は、本明細書に述べられたいくつかの実施形態が実施されてよい１つの例示的な技術領域を示すために提供されるものにすぎない。
【０００５】
[0003]簡潔に述べると、本明細書に述べられた主題の態様は、ファイルシステムのチェックポイントに関する。態様では、ファイルシステムに対する更新は、チェックポイント・バケットに編成される。チェックポイントが望まれる場合、後の更新は、別のチェックポイント・バケットに向けられる。現在のチェックポイント・バケット内の更新のためにグローバルテーブルが更新された後、グローバルテーブルの論理的なコピーが作成される。この論理的なコピーは、チェックポイント・データの一部として格納される。リカバリーの助けとするために、チェックポイント・マネージャーは、最後のチェックポイント・データを記憶域に書き込む前に、現在のチェックポイント・バケットのすべての更新が記憶域に書き込まれるまで待つことができる。この最後のチェックポイント・データは、グローバルテーブルの論理的なコピーを参照し、チェックポイント・データが正確であることを検証するための検証コードを含んでよい。
【０００６】
[0004]この要約は、詳細な説明において下記にさらに述べられる主題のいくつかの態様を簡潔に識別するために提供されている。この要約は、特許請求された主題の主な特徴または本質的な特徴を識別することを意図しておらず、また特許請求された主題の範囲を限定するために使用することも意図していない。
【０００７】
[0005]語句「本明細書に述べられた主題」は、文脈によって他に明らかにされていない限り、詳細な説明に述べられた主題を指す。「態様」という語は、「少なくとも１つの態様」と解釈されるべきである。詳細な説明に述べられた主題の態様を識別することは、特許請求された主題の主なまたは本質的な特徴を識別するためのものではない。
【０００８】
[0006]上記の態様、および本明細書に述べられた主題の他の態様は、例示するために示されており、添付の図に限定されるものではない。図では、同じ参照符号は、類似の要素を示す。
【図面の簡単な説明】
【０００９】
【図１】[0007]本明細書に述べられた主題の態様が組み込まれてよい例示的な汎用コンピューティング環境を表すブロック図である。
【図２】[0008]本明細書に述べられた主題の態様が動作してよいシステムのコンポーネントの例示的な構成を表すブロック図である。
【図３】[0009]本明細書に述べられた主題の態様を示すブロック図である。
【図４】[0010]本明細書に述べられた主題の態様による、ファイルシステムの更新の全体を表す図である。
【図５】[0011]本明細書に述べられた主題の態様による、例示的なチェックポイント・バケットを示すブロック図である。
【図６】[0012]本明細書に述べられた主題の態様に従って行われてよい例示的なアクションの全体を表すフローチャートである。
【図７】[0012]本明細書に述べられた主題の態様に従って行われてよい例示的なアクションの全体を表すフローチャートである。
【図８】[0012]本明細書に述べられた主題の態様に従って行われてよい例示的なアクションの全体を表すフローチャートである。
【発明を実施するための形態】
【００１０】
定義
[0013]本明細書では、「含む」およびその変形体は、「含むが、それだけに限らない」を意味する非限定的な用語と解釈されるべきである。「または」という語は、文脈によって他に明らかに示されていない限り、「および／または」と解釈されるべきである。「に基づく」という語は、「に少なくとも一部基づく」と解釈されるべきである。「一実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ、ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」という語は、「少なくとも１つの実施形態」と解釈されるべきである。「別の実施形態」という語は、「少なくとも１つの他の実施形態」と解釈されるべきである。明示的および暗黙的な他の定義は、下記に含まれ得る。
【００１１】
例示的な動作環境
[0014]図１は、本明細書に述べられた主題の態様が実施されてよい適切なコンピューティングシステム環境１００の一例を示している。コンピューティングシステム環境１００は、適切なコンピューティング環境の一例にすぎず、本明細書に述べられた主題の態様の使用または機能性の範囲に関する限定を示唆するものではない。コンピューティングシステム環境１００は、例示的な動作環境１００に示されたコンポーネントのいずれか１つまたはその組合せに関する依存性または要件を有するものと解釈されるべきでない。
【００１２】
[0015]本明細書に述べられた主題の態様は、他の複数の汎用または特別目的コンピューティングシステム環境または構成で動作可能である。本明細書に述べられた主題の態様で使用するのに適し得るよく知られているコンピューティングシステム、環境または構成の例は、パーソナルコンコンピューター、サーバーコンピューター、ハンドヘルドまたはラップトップデバイス、マルチプロセッサーシステム、マイクロコントローラーベースのシステム、セットトップボックス、プログラマブル家電、ネットワークＰＣ、ミニコンピューター、メインフレームコンピューター、携帯情報端末（ＰＤＡ：ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ）、ゲーミングデバイス、プリンター、セットトップ、メディアセンターまたは他の器具を含めた器具、自動車に組み込まれた、または取り付けられたコンピューティングデバイス、他のモバイルデバイス、上記システムまたはデバイスのいずれかを含む分散コンピューティング環境などを備える。
【００１３】
[0016]本明細書に述べられた主題の態様は、コンピューターによって実行されるプログラムモジュールなどのコンピューター実行可能命令の一般的な文脈で述べることができる。一般に、プログラムモジュールは、特定のタスクを実施し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本明細書に述べられた主題の態様は、通信網によってリンクされたリモート処理デバイスによってタスクが実施される分散コンピューティング環境内でも実施されてよい。分散コンピューティング環境では、プログラムモジュールは、メモリー記憶デバイスを含めて、ローカルとリモートの両方のコンピューター記憶媒体に置かれてよい。
【００１４】
[0017]図１を参照すると、本明細書に述べられた主題の態様を実施するための例示的なシステムが、コンピューター１１０の形の汎用コンピューティング装置を含んでいる。コンピューターは、命令を実行できる任意の電子デバイスを含んでよい。コンピューター１１０のコンポーネントは、処理装置１２０と、システムメモリー１３０と、システムメモリーを含めた様々なシステムコンポーネントを処理装置１２０に結合するシステムバス１２１とを含んでよい。システムバス１２１は、メモリーバスまたはメモリーコントローラー、周辺バス、および様々なバスアーキテクチャーのいずれかを使用したローカルバスを含めて、複数のタイプのバス構造のいずれかであってよい。限定するためではなく、例を挙げると、こうしたアーキテクチャーは、業界標準アーキテクチャー（ＩＳＡ：Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、マイクロチャネルアーキテクチャー（ＭＣＡ：Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、拡張ＩＳＡ（ＥＩＳＡ：Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ビデオ電子規格協会（ＶＥＳＡ：Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、メザニンバスとしても知られている周辺コンポーネント相互接続（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、周辺コンポーネント相互接続拡張（ＰＣＩ−Ｘ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｔｅｎｄｅｄ）バス、アドバンストグラフィックスポート（ＡＧＰ：Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）、およびＰＣＩエクスプレス（ＰＣＩｅ：ＰＣＩ  ｅｘｐｒｅｓｓ）を含む。
【００１５】
[0018]コンピューター１１０は典型的に、様々なコンピューター読取り可能媒体を含む。コンピューター読取り可能媒体は、コンピューター１１０によってアクセスできる任意の使用可能な媒体を含むことができ、揮発性と不揮発性の両方の媒体、および取外し可能と取外し不可能の媒体を含む。限定するためではなく、例を挙げると、コンピューター読取り可能媒体は、コンピューター記憶媒体および通信媒体を備えてよい。
【００１６】
[0019]コンピューター記憶媒体は、コンピューター読取り可能命令、データ構造、プログラムモジュールまたは他のデータなどの情報を格納するための任意の方法または技術で実装された揮発性と不揮発性、取外し可能と取外し不可能の両方の媒体を含む。コンピューター記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリーまたは他のメモリー技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ：ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ）または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイス、あるいは所望の情報を格納するために使用されてよく、またコンピューター１１０によってアクセスできる他の任意の媒体が含まれる。
【００１７】
[0020]通信媒体は典型的に、コンピューター読取り可能命令、データ構造、プログラムモジュール、または他のデータを搬送波や他の移送機構などの変調データ信号として具現化し、また任意の情報送達媒体を含む。「変調データ信号」という語は、信号内の情報を符号化するようにその特性の１つまたは複数が設定または変更された信号を意味する。限定のためではなく、例を挙げると、通信媒体は、有線ネットワークや直接有線接続などの有線媒体、ならびに音響、ＲＦ、赤外線などの無線媒体、および他の無線媒体を含む。上記内容のいずれかの組合せもまた、コンピューター読取り可能媒体の範囲内に含まれるべきである。
【００１８】
[0021]システムメモリー１３０は、読取り専用メモリー（ＲＯＭ）１３１およびランダムアクセスメモリー（ＲＡＭ）１３２など、揮発性および／または不揮発性メモリーの形のコンピューター記憶媒体を含む。起動時などにコンピューター１１０内の要素間で情報を転送するのに役立つ基本ルーチンを含む基本入出力システム（ＢＩＯＳ）１３３は典型的に、ＲＯＭ１３１に格納される。ＲＡＭ１３２は典型的に、処理装置１２０によって即時にアクセス可能であり、かつ／またはそれによる操作を現在受けているデータおよび／またはプログラムモジュールを含む。限定するためではなく、例示するために、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６およびプログラムデータ１３７を示している。
【００１９】
[0022]コンピューター１１０は、他の取外し可能／取外し不可能、揮発性／不揮発性のコンピューター記憶媒体を含むこともできる。例示するためだけに、図１は、取外し不可能な不揮発性の磁気媒体から読み出しまたはそこに書き込むハードディスクドライブ１４１、取外し可能な不揮発性の磁気ディスク１５２から読み出しまたはそこに書き込む磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭや他の光媒体などの取外し可能な不揮発性の光ディスク１５６から読み出しまたはそこに書き込む光ディスクドライブ１５５を示している。例示的な動作環境で使用されてよい他の取外し可能／取外し不可能、揮発性／不揮発性コンピューター記憶媒体は、磁気テープカセット、フラッシュメモリーカード、デジタル多用途ディスク、他の光ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどを含む。ハードディスクドライブ１４１は典型的に、インターフェース１４０などの取外し不可能メモリーインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は典型的に、インターフェース１５０などの取外し可能メモリーインターフェースによってシステムバス１２１に接続される。
【００２０】
[0023]上記に論じられ、図１に示されたドライブおよびその関連するコンピューター記憶媒体は、コンピューター読取り可能命令、データ構造、プログラムモジュールおよびコンピューター１１０のための他のデータの記憶域を提供する。図１では、たとえば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７を格納するように示されている。これらコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６およびプログラムデータ１３７と同じであっても良いし、異なってもよいことに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７は、本明細書で示されている最小限の数とは異なる任意の数であり、様々なコピーがある。
【００２１】
[0024]ユーザーは、キーボード１６２、およびマウス、トラックボールまたはタッチパッドと一般に呼ばれるポインティング装置１６１などの入力デバイスを介して、コンピューター１１０にコマンドおよび情報を入力してよい。他の入力装置（図示せず）は、マイクロホン、ジョイスティック、ゲームパッド、衛星放送アンテナ、スキャナー、タッチセンサー式の画面、ライティングタブレットなどを含んでよい。これらおよび他の入力装置はしばしば、システムバスに結合されたユーザー入力インターフェース１６０を介して処理装置１２０に接続されるが、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（ＵＳＢ：ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ）などの他のインターフェースおよびバス構造によって接続されてもよい。
【００２２】
[0025]モニター１９１または他のタイプの表示装置もまた、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続される。モニターに加えて、コンピューターは、出力周辺インターフェース１９５によって接続されてよいスピーカー１９７およびプリンター１９６などの他の周辺出力デバイスを含むこともできる。
【００２３】
[0026]コンピューター１１０は、リモートコンピューター１８０など、１つまたは複数のリモートコンピューターへの論理接続を使用して、ネットワーク化された環境内で動作することができる。リモートコンピューター１８０は、パーソナルコンピューター、サーバー、ルーター、ネットワークＰＣ、ピアデバイス、または他の一般的なネットワークノードであってよく、また図１にはメモリー記憶デバイス１８１だけが示されているが、典型的には、コンピューター１１０に関して上記で述べられた要素の多くまたはすべてを含む。図１に示された論理接続は、ローカルエリアネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）１７１と広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）１７３とを含むが、他のネットワークを含むこともできる。こうしたネットワーキング環境は、オフィス、企業規模のコンピューターネットワーク、イントラネットおよびインターネットでは一般的である。
【００２４】
[0027]ＬＡＮネットワーキング環境で使用される場合は、コンピューター１１０は、ネットワークインターフェースまたはアダプター１７０を介してＬＡＮ  １７１に接続される。広域ネットワーキング環境で使用される場合は、コンピューター１１０は、モデム１７２、またはインターネットなどのＷＡＮ  １７３を介して通信を確立する他の手段を含んでよい。内部にあっても、外部にあってもよい１７２は、ユーザー入力インターフェース１６０または他の適切な機構を介してシステムバス１２１に接続されてよい。ネットワーク化された環境では、コンピューター１１０に関して示されたプログラムモジュール、またはその一部は、リモートメモリー記憶デバイス内に格納されてよい。限定のためではなく、例示するために、図１は、メモリーデバイス１８１内に常駐するリモートアプリケーションプログラム１８５を示している。示されたネットワーク接続は例示的なものであり、コンピューター間の通信リンクを確立する他の手段が使用されてもよいことが理解されよう。
【００２５】
チェックポインティング
[0028]上記に言及されたように、記憶デバイスにデータを書き込んでいる間に、停電およびシステム障害が発生することがある。これによって、記憶デバイスに格納されたデータが不整合な状態に置かれることがある。この問題および他の問題に対処するために、チェックポイントが、記憶デバイスに書き込まれてよい。
【００２６】
[0029]図２は、本明細書に述べられた主題の態様が動作してよいシステムのコンポーネントの例示的な構成を表すブロック図である。図２に示されたコンポーネントは例示的であり、必要とされ、または含まれ得るコンポーネントすべてを含むものとは限らない。他の実施形態では、図２に関連して述べられたコンポーネントおよび／または機能は、本明細書に述べられた主題の態様の精神または範囲から逸脱せずに、（図示された、または図示されない）他のコンポーネントに含まれていてもよいし、サブコンポーネントに置かれてもよい。一部の実施形態では、図２に関連して述べられたコンポーネントおよび／または機能は、複数のデバイスに渡って分散されてよい。
【００２７】
[0030]図２に移ると、システム２０５は、１つまたは複数のアプリケーション２１０と、ＡＰＩ  ２１５と、ファイルシステムコンポーネント２２０と、ストア２５０と、通信機構２５５と、他のコンポーネント（図示せず）とを含んでよい。システム２０５は、１つまたは複数のコンピューティングデバイスを備えてよい。こうしたデバイスは、たとえば、パーソナルコンピューター、サーバーコンピューター、ハンドヘルドまたはラップトップのデバイス、マルチプロセッサーシステム、マイクロコントローラーベースのシステム、セットトップボックス、プログラマブル家電、ネットワークＰＣ、ミニコンピューター、メインフレームコンピューター、携帯電話、携帯情報端末（ＰＤＡ）、ゲーミングデバイス、プリンター、セットトップ、メディアセンターまたは他の器具を含めた器具、自動車に組み込まれた、または取り付けられたデバイス、他のモバイルデバイス、上記システムまたはデバイスのいずれかを含む分散コンピューティング環境などを含んでよい。
【００２８】
[0031]システム２０５が単一のデバイスを備える場合、システム２０５として働くように構成され得る例示的なデバイスは、図１のコンピューター１１０を備える。システム２０５が複数のデバイスを備える場合、複数のデバイスはそれぞれ、同様に、または異なるように図１のコンピューター１１０を備えてよい。
【００２９】
[0032]ファイルシステムコンポーネント２２０は、リカバリーマネージャー２２５と、チェックポイント・マネージャー２３０と、Ｉ／Ｏマネージャー２３５と、書込み計画マネージャー２３７と、他のコンポーネント（図示せず）とを含んでよい。本明細書では、コンポーネントという語は、デバイスのすべてまたは一部、１つまたは複数のソフトウェアモジュールの集合またはその一部、１つまたは複数のソフトウェアモジュールの何らかの組合せまたはその一部、および１つまたは複数のデバイスまたはその一部などを含むものと解釈されるべきである。
【００３０】
[0033]通信機構２５５は、システム２０５が他のエンティティと通信することを可能にする。たとえば、通信機構２５５は、システム２０５がリモートホスト上のアプリケーションと通信することを可能にすることができる。通信機構２５５は、ネットワークインターフェースまたはアダプター１７０、モデム１７２、または図１に関連して述べられた通信を確立するための他の任意の機構であってよい。
【００３１】
[0034]ストア２５０は、データへのアクセスを提供できる任意の記憶媒体である。ストアは、揮発性メモリー（たとえばキャッシュ）、および不揮発性メモリー（たとえば永続記憶装置）を含んでよい。データという語は、１つまたは複数のコンピューター記憶要素によって表され得るどんなものをも含むと解釈されるべきである。論理上、データは、揮発性または不揮発性メモリー内で一連の１および０として表されてよい。非バイナリ記憶媒体を有するコンピューターでは、データは、記憶媒体の能力に従って表されてよい。データは、番号、文字などの単純なデータタイプ、階層型の、リンクされた、または他の関連データタイプを含めた様々なタイプのデータ構造、複数の他のデータ構造または単純なデータタイプを含むデータ構造などに編成されてよい。データの一部の例は、情報、プログラムコード、プログラム状態、プログラムデータ、他のデータなどを含む。
【００３２】
[0035]ストア２５０は、ハードディスク記憶装置、他の不揮発性記憶装置、ＲＡＭなどの揮発性メモリー、他の記憶装置、上記の何らかの組合せなどを備えてよく、複数のデバイスに渡って分散されてよい。ストア２５０は、外部にあることも、内部にあることも、システム２０５の内部と外部の両方のコンポーネントを含むこともある。
【００３３】
[0036]ストア２５０は、記憶域コントローラー２４０を介してアクセスされてよい。本明細書では、アクセスは、データの読出し、データの書込み、データの削除、データの更新、上記の２つ以上を含む組合せなどを含んでよい。記憶域コントローラー２４０は、ストア２５０へのアクセスを求める要求を受信してよく、こうした要求を適宜遂行することができる。記憶域コントローラー２４０は、データが受信された順序でストア２５０に書き込まれることを保証しないように構成されてよい。さらに、記憶域コントローラー２４０は、記憶域コントローラー２４０がストア２５０の不揮発性メモリーにデータを実際に書き込む前に、要求されたデータを記憶域コントローラー２４０が書き込んでいることを示すことができる。
【００３４】
[0037]１つまたは複数のアプリケーション２１０は、データの作成、削除または更新に関与してよい任意のプロセスを含む。こうしたプロセスは、ユーザーモードで実行することも、カーネルモードで実行することもできる。「プロセス」という語およびその変形体は本明細書では、従来のプロセス、スレッド、コンポーネント、ライブラリ、タスクを実施するオブジェクトなどを含んでよい。プロセスは、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組合せで実装されてよい。一実施形態では、プロセスは、任意の機構であるが、呼び出され、アクションを実施することができ、またはその際に使用される。プロセスは、複数のデバイスに渡って分散されることも、単一のデバイスにあることもある。１つまたは複数のアプリケーション２１０は、ＡＰＩ  ２１５を介してＩ／Ｏマネージャー２３５に、（たとえば関数／メソッド呼出しによって）ファイルシステム要求を行うことができる。
【００３５】
[0038]Ｉ／Ｏマネージャー２３５は、記憶域コントローラー２４０（または他の何らかの中間コンポーネント）に１つまたは複数のどんなＩ／Ｏ要求を発行するか決定してよい。Ｉ／Ｏマネージャー２３５は、ファイルシステム要求に関連する操作が進行し、完了し、または失敗するにつれて、１つまたは複数のアプリケーション２１０にデータを返すこともできる。ファイルシステム要求がトランザクションを伴う場合、Ｉ／Ｏマネージャー２３５は、トランザクションマネージャーがトランザクションを適切に管理できるように、トランザクションマネージャー（図示せず）に通知してよい。一部の実施形態では、トランザクションマネージャーの機能は、Ｉ／Ｏマネージャー２３５に含まれてよい。
【００３６】
[0039]ファイルシステムコンポーネント２２０は、ファイルシステムオブジェクト、またはファイルシステムオブジェクトに関するメタデータをストア２５０に書き込む際にコピーオンライト、ライトインプレイス（ｗｒｉｔｅ  ｉｎ  ｐｌａｃｅ）、上記の組合せを使用することができる。「ファイル」という語は、ディレクトリー、子をもたないファイルシステムオブジェクト（たとえば、ファイルであると時々考えられるもの）、他のファイルシステムオブジェクトなどを含んでよい。
【００３７】
[0040]コピーオンライトでは、ファイルのデータが修正される前に、修正されるべきデータのコピーが、別の位置にコピーされる。ライトインプレイスでは、元のデータを別の位置にコピーせずに、ファイルのデータが適所で修正されてよい。コピーオンライトとライトインプレイスのハイブリッドは、ファイルに関するメタデータについてはコピーオンライトを実施し、そのファイル内に含まれたデータについてはライトインプレイスを実施することを含んでよい。
【００３８】
[0041]ファイルシステムのオブジェクトは、トランザクションのコンテキストで更新されてよい。トランザクションは、たとえばアトミック、整合性、分離および耐久性を含めて、様々なプロパティによって表され得る一群の操作である。本明細書では、トランザクションは、少なくとも整合性プロパティによって定義されてよく、上記の他のプロパティの１つまたは複数によっても定義され得る。
【００３９】
[0042]整合性プロパティは、１つまたは複数のファイルに関して、データの許可された状態を指す。ファイルシステムのファイルは、（トランザクションの間は無許可の状態を通過することがあるが）トランザクションの開始前、およびトランザクションの完了後は、許可された状態にある。たとえば、銀行振替は、２つの操作：１つの口座からの引落しと、別の口座への入金のセットとして実施されてよい。この例では整合性は、銀行と口座名義人の総勘定残高が一定になるもの（たとえばＴ＝Ａ＋Ｂ、ただし、Ｔは定数、Ａ＝銀行残高、Ｂ＝口座名義人残高）と定義されてよい。この例では整合性を実施するために、借方操作と貸方操作は単純に、同じ金額に対するものであり、両方が完了され、または各口座でどちらも完了されないことを必要とする。
【００４０】
[0043]ファイルシステムの整合性状態を示すために、チェックポイントが書き込まれてよい。チェックポイントは、チェックポイントおよび／またはチェックポイントに関連するデータがディスクに正確に書き込まれたかどうか決定するために使用されてもよい１つまたは複数の検証コード（たとえば１つまたは複数のチェックサム、ハッシュ、または他のデータ）を含んでよい。リカバリーすると、最後に書き込まれたチェックポイントが、突き止められてよい。次いで、チェックポイントの検証コード（複数可）は、チェックポイントおよび／またはチェックポイントに関連するデータがディスクに正確に書き込まれたかどうか決定するために使用されてもよい。そうでない場合は、有効なチェックポイントが見つかるまで、前のチェックポイントが突き止められ、有効であるかチェックされてよい。最も最近の有効なチェックポイントが見つかると、ファイルシステムの最後の整合性状態が分かる。このポイントの後に行われるファイルシステム操作は、廃棄されてもよいし、要望に応じて追加のリカバリーアクションが実施されてもよい。
【００４１】
[0044]一実施形態では、ファイルシステム上のオブジェクトがＤｎで示されてよく、ただし、ｎは、システムに対してオブジェクトを識別する。ファイルシステム内のオブジェクトは、直列化可能であり（すなわち、ストア２５０内のデータとして表すことが可能であり）、また非直列化可能である。オブジェクトテーブルは、各オブジェクト識別子を、ストア２５０内のその位置に関連付ける。
【００４２】
[0045]Ｄｎは、修正トランザクションで最初に更新されるとき、ｎを使用して、オブジェクトテーブル内でその位置を調べることにより突き止められる。一例において使用するために、ストア２５０内のＤｎの記憶位置は、Ｌ１と呼ばれる。
【００４３】
[0046]次いで、Ｌ１の内容がストア２５０から読み出され、オブジェクトは、非直列化されてよく（たとえば、直列化されたフォーマットからオブジェクトの構造に変換されてよく）、修正されるオブジェクトの一部が、メインシステムメモリーにコピーされる。更新は、メモリー内の一部（またはそのコピー）に対して実施される。修正されるメモリー内の一部に関連して、ストア２５内の１つまたは複数の新しい位置（これをＬ２と呼ぶ）が、修正された一部のために指定される。
【００４４】
[0047]メインシステムメモリー内のこれらのコピーは本明細書では、オブジェクトの「論理的なコピー」と呼ばれることがある。オブジェクトの論理的なコピーは、オブジェクトを表すために使用されてよい１つまたは複数のデータ構造を含む。論理的には、論理的なコピーは、オブジェクトの複製である。物理的には、論理的なコピーは、（他のデータへのポインターを含めて）オブジェクトの複製を作成するために使用されてよいデータを含んでよい。たとえば、一実装形態では、論理的なコピーは、オブジェクトの実際のコピー（たとえばビットごとのコピー）であってもよいし、オブジェクトを作成するために使用されてよいデータを含むデータ構造であってもよい。
【００４５】
[0048]別の実装形態では、修正されない論理的なコピーは、元のオブジェクトを指す１つまたは複数のポインターを含んでよい。論理的なコピーが修正されるとき、論理的なコピー内のポインターは、（たとえば論理的なコピーの変更された部分について）新しいメモリー位置を指してもよく、他のポインターは、（たとえば論理的なコピーの変更されていない部分について）元のオブジェクトの一部を指してよい。ポインターを使用して、修正されたコピーは、元のオブジェクトの修正されていないデータと共に修正されたデータを使用して作成されてよい。論理的なコピーの作成は、たとえば、オブジェクトの複製を作成するのに必要な記憶域を減少させるために実施されてよい。
【００４６】
[0049]さらに、本明細書では直列化および非直列化について言及されることがあるが、本明細書に述べられた主題の態様を、直列化および非直列化と通常考えられるものに限定する意図はない。一実施形態では、直列化バージョンは、ビット対ビットで非直列化バージョンと同一であってよい。別の実施形態では、直列化バージョンのビットは、非直列化バージョンのものとは異なる形式および順序でパッケージ化されてもよい。確かに、一実施形態では、直列化および非直列化は、ストアからのオブジェクトを表すデータを格納し取出すための任意の機構を意味するものと理解されるべきである。他の機構はたとえば、テキストフォーマットのオブジェクトのプロパティをストアに書み込むこと、ストア内でオブジェクトのプロパティをマークアップ言語で符号化すること、オブジェクトのプロパティおよび他の特徴をストアに格納する他の方法などを含んでよい。
【００４７】
[0050]システムの決定で（たとえばトランザクションのコミット後、または他の何らかのときに）、システムは、修正された論理的なコピーを直列化して、安定した媒体に戻すことができるが、位置Ｌ２でそれを行う。修正された論理的なコピーを新しい位置に書き込み戻す意図は、書込み計画と呼ばれる。書込み計画は、１つまたは複数のオブジェクトに対する任意の数の更新を識別してよい。書込み計画は、２つ以上のトランザクションで生じる変更を参照してよい。複数の書込み計画が、単一の書込み計画に組み合わされてよい。
【００４８】
[0051]書込み計画マネージャー２３７は、様々な更新のための書込み計画の作成に関与してよい。書込み計画が（たとえばトランザクションのコンテキストで）複数ファイルシステムオブジェクトを伴う場合、書込み計画マネージャー２３７は、ファイルシステムの整合性状態を維持するために、トランザクションに関与するすべてのファイルシステムオブジェクトの記憶域上の位置を示す書込み計画を生成するように動作可能であってよい。
【００４９】
[0052]チェックポイントの直後に修正が行われる場合、（複数の位置で複製されてよい）リカバリーブロックと呼ばれるブロックが、修正された論理的なコピーの開始（すなわちＬ２）を指すように修正されてよい。Ｌ２のオブジェクト内のフィールドは、次に書き込まれる位置を指す。このフィールドは、チェックポイント間で生じる書込み計画のチェーン内のリンクを表す。
【００５０】
[0053]論理的なコピーを書き込むよう求める要求の送信と共に、オブジェクトテーブルに対して修正が行われてよい。特に、オブジェクトの識別子によってインデックス付けされた位置の値は、修正された論理的なコピーが格納される位置（すなわちＬ２）の値に設定されてよい。これは、オブジェクトＤｎの位置の後続のルックアップが位置Ｌ２、オブジェクトの新しいバージョンに向けられるように行われる。
【００５１】
[0054]トランザクションが２つ以上のオブジェクト、たとえばＤｉおよびＤｊを修正する場合、オブジェクトは、互いに「原子的にバインドされる」と見なされ、１つの書込み計画で書き込まれる。書込み計画は、（たとえば、関与するオブジェクトへのリンクで）この関係を指定してよい。
【００５２】
[0055]任意の数のオブジェクトが、このようにして続けられてよい。周期的にオブジェクトテーブルもまた、他のいずれかのオブジェクトと同じようにしてストア２５０に書き込まれてよい。
【００５３】
[0056]オブジェクトテーブルをストア２５０に書き込むよう求める要求の送信と共に、フラッシュコマンドも、記憶域コントローラー２４０に送られてよい。フラッシュコマンドは、記憶域コントローラー２４０に、ストア２５０の不揮発性メモリーにまだ書き込まれていないその揮発性メモリーからのすべてのデータを書き込むように指示する。
【００５４】
[0057]より詳細に下記に述べられるように、チェックポイントは周期的に、記憶域に書き込まれてよい。チェックポイントは、ストア２５０によって格納されるチェックポイントレコードによって示されてよい。チェックポイントは、任意のときに書き込まれてよく、フラッシュの後に安定性／耐久性を有し得る。安定性／耐久性は、チェックポイントがストアの不揮発性メモリーに格納されることを指す。
【００５５】
[0058]チェックポイントが安定性／耐久性を有した後、オブジェクトのいずれかの古い未使用のコピー（またはその一部）に使用された空間が再使用されてよい。フラッシュが完了した後、次いで、リカバリーブロックは、次の書込み計画のチェーンの開始に向けられる。一実施形態では、リカバリーブロックは、書込み計画のチェーンの開始をオブジェクトテーブルの新しい位置に向けてよい。
【００５６】
[0059]図３に関連してより具体的な例が述べられており、この図３は、本明細書に述べられた主題の態様を示すブロック図である。示されたように、図３は、メインメモリー３０５およびストア２５０を示している。線３０７は、メインメモリー３０５とストア２５０の間の分割を表している。線３１０より上のオブジェクトはメインメモリー内にあり、線３１０より下のオブジェクトは、ストア２５０の揮発性メモリーまたは不揮発性メモリー内にある。
【００５７】
[0060]オブジェクト３１４〜３１６は、メインメモリー３０５内に示されている。実装において、オブジェクト３１４〜３１６は、それぞれオブジェクト３１９〜３２１の非直列化された論理的なコピーであってよい。オブジェクト３１９は、ストア２５０上の位置１５５０に置かれ、オブジェクト３２０は、ストア２５０上の位置２００に置かれ、オブジェクト３２１は、ストア２５０上の位置８００に置かれる。
【００５８】
[0061]オブジェクトテーブル３１０は、ストア２５０上のオブジェクト３１４〜３１６の位置を示すキー値対を含む。キー値対は、オブジェクト３１４〜３１６の識別子（ｎ）を使用してインデックス付けされる。
【００５９】
[0062]トランザクションがオブジェクト３１６を（たとえばその名前をｆｏｏ．ｔｘｔに変更することによって）を修正する場合、整合性コンポーネント（たとえば図２の整合性コンポーネント２２０）は、更新されたオブジェクトの新しい記憶位置（たとえば位置８０１）を決定してよい。オブジェクトがファイルである場合、トランザクションのコンテキストでオブジェクトの名前を更新することによって、ファイルを含むディレクトリーもまた、やはりトランザクションに関与することになり得る。たとえば、ファイル名が変更される場合、ファイルを表すオブジェクトと、ファイルを含むディレクトリーを表すオブジェクトの両方が、トランザクションに関与する必要があり得る。この場合、オブジェクトを含むディレクトリーは、オブジェクト３１４として表され、更新されたディレクトリーの論理的なコピー（たとえばオブジェクト３１８）は、ストア２５０内のオブジェクト３２３として表される。また、テーブル３１０は、修正されたオブジェクト（すなわちオブジェクト３１７および３１８）の新しい記憶位置（すなわち８０１および１０００）を示すように、テーブル３１１に対して論理的に更新されている。
【００６０】
[0063]トランザクションのコンテキスト内のオブジェクトの修正が別のオブジェクトにも影響を及ぼすことは、たとえば、Ｉ／Ｏマネージャー２３５または図２の他の何らかのコンポーネントによって明示的に示され、または決定されてよい。
【００６１】
[0064]２つ以上のオブジェクトがトランザクションの更新に関与する場合、オブジェクトは、上記に言及されたように「原子的にバインドされる」と見なされる。リカバリー操作では、トランザクションのコンテキストで変更されたすべてのオブジェクトについてストア２５０内に変更が見られない限り、見つかった変更はすべて廃棄される。換言すると、オブジェクトのうちの１つについて変更が見つかるが、オブジェクトのうちの別のオブジェクトについて変更が見つからない場合は、そのオブジェクトのうちの１つについての変更は廃棄される。
【００６２】
[0065]一実施形態では、２つ以上のオブジェクトを原子的にバインドするために、ポインターが、ストア２５０内に格納されてもよいし、別の方法で各オブジェクトに関連付けられてよい。ポインターは、トランザクションに関与する別のオブジェクト（またはその一部）の記憶位置を示すことができる。トランザクションに関与する追加のオブジェクトがない場合、ポインターは、「デッドブロック」を指してもよいし、別の書込み計画の「ヘッド」オブジェクトの記憶位置を示してもよい。このヘッドオブジェクトは、書込み計画、書込み計画の修正されたオブジェクト（またはその一部）などを備えてよい。
【００６３】
[0066]「指された」オブジェクトの正確な内容を示すために、次の記憶位置へのポインターに加えて、データもまた、ストア２５０内に格納されてよい。たとえば、指されたオブジェクトの正確な内容を示すハッシュ値が格納されてよい。
【００６４】
[0067]図３に示された例では、オブジェクト３２２に関連するポインターは、オブジェクト３２３に関連する記憶位置を指してよい。ポインターは、２つのオブジェクトを共にバインドする。リカバリーの間、オブジェクトのどちらもが見つからず、またはそれらは正確な内容をもたない場合、見つかったオブジェクトによって表された変更は、廃棄されてよい。
【００６５】
[0068]ストア２５０の性質のために、最初にどのオブジェクトがストア２５０の不揮発性メモリーに書き込まれるかに関する保証がないことがある。オブジェクト３２２が最初に書き込まれ、オブジェクト３２３が書き込まれない場合、オブジェクト３２２からのポインターは、偽のデータを有し得る記憶位置を指す。しかし、記憶位置のデータのハッシュを計算し、このハッシュをオブジェクト３２２と共に格納されたハッシュと比較することによって、位置１０００のデータは無効なデータを有するものとして検出され得る。この場合、リカバリーの間、リカバリーマネージャー（たとえば図２のリカバリーマネージャー２２５）は、オブジェクト３２２および３２３によって表された変更を廃棄してよい。
【００６６】
[0069]リカバリーブロック３３０は、チェックポイントの後にデータが格納されると思われた第１の記憶位置（この場合は位置８０１）を指す。またリカバリーブロック３３０は、第１の記憶位置に格納されたオブジェクトの正確な内容を使用して計算されるハッシュを含んでいてもよいし、それに関連付けられてもよい。
【００６７】
[0070]図４は、本明細書に述べられた主題の態様による、ファイルシステム内で行われる更新の全体を表す図である。グローバルテーブル４０５は、ストア内のオブジェクトの位置を識別するオブジェクトテーブルと、割り当てられたストア２５０内の空間に関する割当てデータとを含む。進行中の更新４１０も示されている。更新は、時間軸４１５に接触するとき、完了し、もはやグローバルテーブル４０５のいずれをも修正する必要はない。更新４１０の更新の線はそれぞれ、複数の更新を表してよい。整合性を維持するために複数の更新が共に行われる必要がある場合、更新は、トランザクションのコンテキストで行われてよい。
【００６８】
[0071]チェックポイントが有効となるには、チェックポイントは、整合性状態で書き込まれる必要がある。書込みファイルシステム内のコピーを用いて、オブジェクトが更新されるとき、修正されたオブジェクトの論理的なコピーが、ファイルシステムの新しい位置に格納される。この新しい位置は、オブジェクトテーブルへの更新と共に、オブジェクトテーブル内に反映される。整合性については、システム障害の前に更新がディスクに完全には書き込まれないことがあるので、ディスクにまだ書き込まれていない更新をオブジェクトテーブルが反映することは不正確である。同様に、更新が完了され、ディスクに書き込まれ、他のトランザクション関連の更新が完了されるが、オブジェクトテーブルが更新を示さないことも不正確である。
【００６９】
[0072]整合性を保証するために、チェックポイントは、更新用のメタデータがグローバルテーブルに反映されるときに選択される必要がある。更新４１０を表す線がそれぞれ、更新のためにグローバルテーブル４０５が更新されてよい期間を示す場合、５２０でチェックポイントを実施することによって不整合性状態がもたらされることがあるが、時間５２５でチェックポイントを実施することによって整合性状態がもたらされる。
【００７０】
[0073]図５は、本明細書に述べられた主題の態様による、例示的なチェックポイント・バケットを示すブロック図である。上記に言及された問題および他の問題に対処するために、それぞれの更新は、チェックポイント・バケット（たとえばバケット５１５のうちの１つ）に関連付けられてよい。チェックポイント・バケットは、チェックポイントのチェックポイント・データがディスクに書き込まれる前に、チェックポイント・バケットに関連する更新の少なくとも書込み計画を明らかにするようにグローバルテーブルが更新される必要があることを示す論理的な概念である。換言すると、グローバルテーブルは、更新がそれらの位置に現在書き込まれていても、いなくても、バケットの更新の位置および割当て情報を明らかにするように更新される必要がある。
【００７１】
[0074]周期的に（たとえばリカバリーウィンドウに基づくチェックポイントタイマーの終了時、ある数の書込みが行われた後、何らかの閾値を超えた後など）、チェックポイントを生成するための決定が行われてよい。これが起こるとき、チェックポイント・マネージャーは、後続の更新に関連するチェックポイント・バケットを示すデータ（たとえばデータ構造５１０）を更新してよい。たとえば、チェックポイント・マネージャーは、現在のチェックポイント・バケットを示すデータ（たとえばデータ構造５１０）の排他ロック（たとえばロック５０５）を得てもよい。チェックポイント・マネージャーは、データの排他ロックを得た後、後続の更新用の新しいチェックポイント・バケットを示すようにデータを更新してよい。すべての後続の更新は、データが後続の更新用の別のチェックポイント・バケットを示すように変更されるまで、新しいチェックポイント・バケットに関連付けられる。
【００７２】
[0075]チェックポイント・バケットは、論理的な概念と考えられてよく、様々な方法で実装されてよい。たとえば、一実装形態では、チェックポイント・バケットは、チェックポイント・バケットに関連するそれぞれの更新へのポインターを有するリストなど、データ構造として実装されてよい。別の例として、チェックポイント・バケットは、更新ごとに維持されるデータとして実装されてよく、このデータは、更新に関連するチェックポイントを示す。別の例として、チェックポイント・バケットは、カウントセマフォとして実装されてよい。この例では、どの更新を依然としてディスクに書き込む必要があるかは知られていないことがあるが、ディスクに依然として書き込む必要がある更新の回数は知られている。この例では、読書きロックが使用されてよい。
【００７３】
[0076]上記の例は、チェックポイント・バケットを実装する方法をすべて含むものでも、それを網羅するものでもない。確かに、本発明の教示に基づいて、当業者は、チェックポイント・バケットの実装するための他の多くの機構を認識することができる。
【００７４】
[0077]（たとえばデータ構造５１０の変更によって）後続の更新用のチェックポイント・バケットを示した後、チェックポイント・マネージャーは、現在のチェックポイント・バケット内のすべての更新の書込み計画が生成されるのを待ってよい。現在のチェックポイント・バケット内のすべての更新の書込み計画が生成された後（しかし、恐らく記憶域に書き込まれていないが）、チェックポイント・マネージャーは、図４のグローバルテーブル４０５のスナップショットをとり、グローバルテーブル４０５のスナップショットをストアに書き込むための書込み計画を作成してよい。スナップショットは、コピーオンライトまたは他の機構によって、グローバルテーブル４０５の論理的なコピーとして作成されてよい。
【００７５】
[0078]図４に戻って述べると、チェックポイント・マネージャーが、現在のチェックポイント・バケット内の更新が生成されるのを待っている間、またチェックポイント・マネージャーがチェックポイントの書込みのための書込み計画を生成する間、チェックポイントの後に続く更新のための書込み計画が生成され、ディスクに書き込まれてよい。しかし、チェックポイント・マネージャーは、グローバルテーブルのスナップショットを得ようとするとき、スナップショットを作成する前にグローバルテーブル４０５の排他ロックを得てよい。チェックポイント・マネージャーが排他ロックを有している間、他の更新のために書込み計画が依然として生成されてよく、これらの書込み計画は、ストア内にさらに格納されてよいが、グローバルテーブル（たとえばオブジェクトテーブル）は、チェックポイント・マネージャーがその排他ロックを解除するまで、これらの書込み計画を指すように更新されないことがある。ロックの解除と共に、チェックポイント・マネージャーは、後のチェックポイントがイネーブルされており、後の更新がグローバルテーブルを更新してよいことを示す信号を送ってよい（たとえばイベントを引き起こしてよい）。
【００７６】
[0079]リカバリーの助けとなるように、チェックポイントは、下記の規則に従ってチェックポイントを検証するために検証コードと共にディスクに書き込まれてよい。
[0080]１．書込み計画によって示されたデータがディスクに書き込まれるのを待つ（たとえば、チェックポイントに関連するすべての更新がディスクに書き込まれるのを待つ）。
【００７７】
[0081]２．チェックポイントに関連するデータのすべてがディスクに書き込まれることを要求する（たとえば、メタデータの論理的なコピーがディスクに書き込まれることを要求する）。
【００７８】
[0082]３．フラッシュを発しまたはフラッシュを待ち、およびフラッシュがうまく完了したことの肯定応答を待つ。
[0083]４．ディスクに書き込まれたチェックポイント・データのための検証コードを生成する。一実施形態では、検証コードは、ディスクに書き込まれたデータのサブセットについてものものであってよい。たとえば、ファイル用データがツリーに格納され、このツリーの各ノードが、その子の検証コードを含む場合、検証ノードは、ツリーのルートノードについてのものであってよい。この実施形態では、検証コードは、ルートノードと共に書き込まれ、検証コードが正確であることを検証するためにも使用されてよい。
【００７９】
[0084]５．検証コード（およびルートノードなどの関連する任意のデータ）がディスクに書き込まれることを要求する。検証コードは、システム障害の前に、実際にはディスクに到達しないことがあることに留意されたい。そうでない場合は、チェックポイントは、有効なチェックポイントでない。
【００８０】
[0085]これらの規則により、チェックポイントが記憶域上で見つかり、チェックポイントの内部検証コードが有効な場合、チェックポイントに関連するその他のデータも記憶域上に格納されており、また有効であると期待される。検証コードがルートノードに含まれている場合、ルートノードのその他のデータ（たとえばツリーの他のノードへのポインター）が、チェックポイントに対応するデータの残りを見つけるために使用されてよい。
【００８１】
[0086]代替案として、チェックポイントに関連する各更新の検証コードが、記憶域に書き込まれてよい。たとえば、チェックポイントは、チェックポイントより前、および前のチェックポイントの後に行われると思われたすべての更新のブロックを示してよい。示された各ブロックについて、チェックポイントは、ブロックの正確な内容を示す検証コードを格納してよい。この代替案ではリカバリー間、チェックポイントを検証するために、それぞれのブロックが、チェックポイントのその関連する検証コードに対して検証されてよい。
【００８２】
[0087]図２に戻って述べると、一実施形態では、チェックポイント・マネージャー２３０は、下記を含むアクションを実施するように動作可能であってよい。
[0088]１．ファイルシステムオブジェクトの更新の要求に関連する第１のチェックポイントを決定する。上記に言及されたように、チェックポイント・マネージャー２３０は、新しいチェックポイント・バケットを指すようにデータ構造（たとえば図５のデータ構造５１０）を更新することによってこれを行うことができる。次いで、それぞれの後続の更新要求が受信されると、要求は、新しいチェックポイント・バケットに割り当てられてよい。
【００８３】
[0089]本明細書では、「第１の」という語は、まさに最初のチェックポイントを意味するのではなく、それは「第２の」チェックポイントと区別するために使用されていることに留意されたい。換言すると、Ｎ個のチェックポイントがある場合、第１のチェックポイントは、１≦Ｘ≦Ｎとして任意のＸであってよく、第２のチェックポイントは、１≦Ｙ≦Ｎ、かつＸ＜＞Ｙとして、任意のＹであってよい。
【００８４】
[0090]２．チェックポイントに関連するチェックポイント・データをファイルシステムの記憶域にいつ書き込むか決定する。たとえば、チェックポイントタイマーが終了し得るとき、更新回数が超過し得るとき、または他の何らかの閾値が、チェックポイント・データを書き込むときであることを決定するために使用されてよい。
【００８５】
[0091]３．ファイルシステムオブジェクトの更新を求める後続の要求の第２のチェックポイントを決定する。上記に言及されたように、チェックポイント・マネージャー２３０は、データ構造の排他ロック（たとえばロック５０５）を得た後、データ構造（たとえば図５のデータ構造５１０）を更新することによってこれを行うことができる。
【００８６】
[0092]４．後続の要求のためのデータ書込みの準備を可能にしながら、ファイルシステムの整合性状態を待つ。整合性状態は、現在のチェックポイント・バケットに関連する更新のすべてが記憶域上に表される（たとえばうまく書き込まれた）ときに生じる。後続の要求のためのデータ書込みの準備を可能にすることは、後続の要求のために書込み計画が生成され、記憶域に書き込まれることを可能にするが、メタデータの論理的なコピーの作成後まで、メタデータ（たとえばグローバルテーブル）の更新を可能にしないことを含む。
【００８７】
[0093]５．ファイルシステムのメタデータの論理的なコピーを作成する。これは、上記に言及されたように、グローバルテーブルのスナップショットをとることによって行われてよい。
【００８８】
[0094]６．メタデータの論理的なコピーを記憶域に書き込む。一実施形態では、これは、論理的なコピーを記憶域に書き込むことを要求すること、および論理的なコピーが記憶域に書き込まれたことの確認を待つことを含んでよい。別の実施形態では、これは、更新の許可の前に、メタデータの後続の更新によってコピーオンライトが引き起こされるように、記憶域内のコピーをクリーンとマーキングすることを含んでよい。
【００８９】
[0095]７．少なくとも１つの検証コードを記憶域に書き込む。上記に言及されたように、検証コードは、チェックポイントより前の更新が記憶域に書き込まれたかどうか、ならびにチェックポイントレコード自体が有効かどうか決定するのに使用可能であってよい。
【００９０】
[0096]ＡＰＩ  ２１５は、トランザクションに関与するオブジェクトを修正するよう求める要求を受信してよい。これに応答して、Ｉ／Ｏマネージャー２３５は、ストアの記憶位置（たとえばＬ１）にオブジェクトを突き止め、オブジェクトの論理的なコピーを作成し、トランザクションのコンテキストでオブジェクトに変更を加え、変更された論理的なコピーを格納するための第２の記憶位置（たとえばＬ２）を決定し、変更された論理的なコピーを書き込むよう求める要求を記憶域コントローラー２４０に送り、論理的なコピーが第２の記憶位置に格納されることを示すように揮発性データ構造（たとえばオブジェクトテーブル３１０）を更新してよい。
【００９１】
[0097]ＡＰＩ  ２１５がトランザクションに関与する別のオブジェクトを修正するよう求める要求を受信する場合、Ｉ／Ｏマネージャー２３５は、他のオブジェクトと第１のオブジェクトを共にバインドする関連付け（たとえば書込み計画）を作成することを含めて、追加のアクションを実施してよい。次いで、オブジェクトの修正を書き込むよう求める要求を記憶域に送ると共に、Ｉ／Ｏマネージャー２３５は、関連付けを書き込む要求を記憶域コントローラー２４０に送ることもできる。
【００９２】
[0098]図６〜図８は、本明細書に述べられた主題の態様に従って行われてよい例示的なアクションの全体を表すフローチャートである。説明を簡単にするために、図６〜図８に関連して述べられた方法論は、一連の行為として示され述べられている。本明細書に述べられた主題の態様は、示された行為および／または行為の順序によって制限されるものでないことを理解されたい。一実施形態では、行為は、下記に述べられる順序で行われる。しかし、他の実施形態では、行為は、平行して、別の順序で、かつ／または本明細書に提示も説明もされていない他の行為と共に行われよい。さらに、示されたすべての行為が、本明細書に述べられた主題の態様に従って方法論を実施する必要があるとは限らないことがある。さらに、方法論は別法として、状態図によって一連の相互関連する状態として表されてもよいし、イベントとして表されてもよいことが当業者には理解されよう。
【００９３】
[0099]図６に移ると、ブロック６０５で、アクションが開始している。ブロック６１０で、第１の１組の更新が第１のチェックポイントに関連付けられることを示す表示が行われる。これは、後続の更新が第１のチェックポイントに関連付けられることを示すようにデータ構造を修正することによって行われてよい。上記で言及されたように、これは、たとえば、ロックを取得し解除し、ポインターまたは他のデータ構造をチェックポイント・バケットを参照するように更新することを伴い得る。この場合も「第１の」は、ファイルシステムのいずれかのチェックポイントを意味し、このチェックポイントを後続のチェックポイントと区別するために使用されることに留意されたい。たとえば、図２および図５を参照すると、チェックポイント・マネージャー２３０は、データ構造５１０のロック５０５を取得し、チェックポイント・バケット５１５のうちの１つを指すようにポインターを更新してよい。
【００９４】
[00100]ブロック６１５で、更新が受信され、第１のチェックポイントに関連付けられる。たとえば、図２を参照すると、Ｉ／Ｏマネージャー２３５は、ＡＰＩ  ２１５を介してアプリケーション２１０（複数可）から更新要求を受信してよい。更新は、受信されるとき、チェックポイントに関連付けられてよい。
【００９５】
[00101]ブロック６２０で、第１のチェックポイントのチェックポイント・データをファイルシステムの記憶域に書き込むことの決定が行われる。たとえば、図２を参照すると、チェックポイント・マネージャー２３０は、チェックポイントタイマーが終了していると決定することができ、またそれに基づいて、チェックポイントがストア２５０に書き込まれると決定してよい。
【００９６】
[00102]ブロック６２５で、後続の更新のチェックポイントを示すためのデータ構造に対してロックが取得される。たとえば、図２および図５を参照すると、チェックポイント・マネージャー２３０は、データ構造５１０のロック５０５を取得してよい。
【００９７】
[00103]ブロック６３０で、データ構造は、別のチェックポイントを参照するように更新される。このデータ構造を修正することによって、第１の１組の更新の後に続いて行われるどんな更新もが後続のチェックポイントに関連付けられることを示す。たとえば、図２および図５を参照すると、チェックポイント・マネージャー２３０は、チェックポイント・バケット５１５のうちの別のものを参照するようにデータ構造５１０を更新してよい。
【００９８】
[00104]ブロック６３５で、ロックが解除される。たとえば、図２および図５を参照すると、チェックポイント・マネージャー２３０は、ロック５０５を解除してよい。
[00105]ブロック６４０で、更新のための書込み計画が生成される。それぞれの書込み計画は、第１の１組の更新のうちの少なくとも１つを表すデータについて記憶域上の少なくとも１つの計画された位置を示す。たとえば、図２を参照すると、書込み計画マネージャー２３７は、チェックポイントに関連する更新の書込み計画の作成に関与してよい。
【００９９】
[00106]ブロック６４５で、メタデータが、書込み計画のために更新される。このメタデータは、（書込み計画が記憶域に書き込まれていることも、まだ書き込まれていないこともあるが）書込み計画の記憶位置を示す。たとえば、図２を参照すると、書込み計画マネージャー２３７は、書込み計画によって修正された記憶位置オブジェクトを示すようにグローバルテーブルを更新してよい。
【０１００】
[00107]ブロック６４５の後、図７のブロック７０５で、アクションは継続する。図７に移ると、ブロック７０５で、メタデータのためにロックが得られる。たとえば、図２および図４を参照して、チェックポイント・マネージャー２３０は、グローバルテーブル４０５のロックを取得してよい。チェックポイント・マネージャー２３０は、（これらの更新のすべてがこれらの記憶位置に書き込まれていても、書き込まれていなくても）メタデータが第１の１組の更新のすべての更新の記憶位置を反映するまで待ってよい。
【０１０１】
[00108]ブロック７１０で、メタデータの論理的なコピーが作成される。上記に言及されたように、これは、メタデータの新しいコピーを作成すること、メタデータへの後続の更新によってコピーオンライト、または他の何らかの論理的なコピー機構が引き起こされるようにメタデータをクリーンとマーキングすることを含んでよい。たとえば、図２および図４を参照すると、チェックポイント・マネージャー２３０は、グローバルテーブル４０５の論理的なコピーを作成してよい。
【０１０２】
[00109]ブロック７１５で、ロックが解除される。たとえば、図２および図４を参照すると、チェックポイント・マネージャー２３０は、グローバルテーブル４０５のロックを解除してよい。
【０１０３】
[00110]ブロック７２０で、第１のチェックポイント・データを書き込むための書込み計画が作成される。この書込み計画の作成は、チェックポイントの後に続く更新のために生成される（またディスクに書き込まれる）書込み計画と平行して行われてよく、また現在の書込み計画に対応するデータがディスクに書き込まれる。たとえば、図２を参照すると、チェックポイント・マネージャー２３０は、第１のチェックポイントのチェックポイント・データの書込み計画を作成するために書込み計画マネージャー２３７を使用してよい。このデータは、上記に言及されたグローバルテーブルの論理的なコピーを含んでよい。
【０１０４】
[00111]一実施形態では、ブロック７２５で、チェックポイント・マネージャーは、第１の１組の更新のすべての更新が記憶域にうまく書き込まれるまで待ってよい。結局、すべての更新が記憶域にうまく書き込まれた後、次いで、更新マネージャーは、検証コードを含む最後のチェックポイントレコードを書き込んでよい。上記に言及されたように、これによって、リカバリーが単純に検証コードをチェックして、チェックポイントに対応するすべての更新が記憶域に書き込まれたと期待されるかどうか決定することを可能にする。
【０１０５】
[00112]別の実施形態では、チェックポイント・マネージャーは、チェックポイントレコードにいくつかの検証コードを書き込んでよい。これらの検証コードは、第１の１組の更新の記憶位置に関連付けられてよい。この実施形態では、チェックポイント・マネージャーは、これらの更新が記憶域に書き込まれるのを待ってもよいし、待たずにチェックポイントレコードを書き込んでもよい。後者のオプションが選ばれる場合、リカバリーの間に適切なチェックポイントを見つけることは、ディスク上に有効なチェックポイントレコードがあることを検証することより深い関わり合いをもつ。
【０１０６】
[00113]ブロック７３０で、チェックポイント・データが、記憶域に書き込まれてよい。これは、たとえば、チェックポイント・データに関連する書込み計画を記憶域に書き込むことを伴い得る。別の例として、これは、グローバルテーブルの論理的なコピーを参照する記憶域にチェックポイントレコードを書き込むことを伴い得る。たとえば、図２を参照すると、チェックポイント・マネージャー２３０は、チェックポイント・データに対応する書込み計画が記憶域に書き込まれることを要求してよい。
【０１０７】
[00114]ブロック７３５で、少なくとも１つの検証コードが、記憶域に書き込まれる。記憶域に少なくとも１つの検証コードを書き込むことは、グローバルテーブルの論理的なコピーを参照する記憶域にチェックポイントレコードを書き込むことと組み合わされてよい。たとえば、図２を参照すると、チェックポイント・マネージャー２３０は、グローバルテーブルの論理的なコピーを参照し、またチェックポイントレコードの内容を検証するための検証コードを含む記憶域にチェックポイントレコードを書き込んでよい。
【０１０８】
[00115]ブロック７４０で、他のアクションがあれば、実施されてよい。
[00116]図８に移ると、ブロック８０５で、アクションが開始している。ブロック８１０で、リカバリー要求が受信される。たとえば、図２を参照すると、リカバリーマネージャー２２５は、ストア２５０に格納されたデータのリカバリーを実施するよう求めるリカバリー要求を受信してよい。
【０１０９】
[00117]ブロック８１５で、チェックポイント・データが突き止められる。たとえば、図２を参照して述べると、リカバリーマネージャー２２５は、ストア２５０（また他の何らかのストア）に格納された最新のチェックポイント・データを突き止めてよい。
【０１１０】
[00118]ブロック８２０で、チェックポイント・データが、検証コードを使用して検証される。たとえば、図２を参照して述べると、リカバリーマネージャー２２５は、チェックポイント・データのチェックサムを計算し、このチェックサムを、チェックポイント・データと共に格納されたチェックサムと比較してよい。チェックサムが一致する場合は、チェックポイントは有効であると見なされてよい。追加の検証が望まれる場合は、リカバリーマネージャーは、チェックポイント・データによって参照されたグローバルテーブルによって示された１つまたは複数のオブジェクトの検証を試みてよい。
【０１１１】
[00119]ブロック８２５で、他のアクションがあれば、実施されてよい。
[00120]上記の詳細な説明から分かるように、ファイルシステムのチェックポイントに関連して態様が述べられている。本明細書に述べられた主題の態様は様々な修正および代替の構成が可能であるが、その特定の示された実施形態が、図面に示されており、上記に詳細に述べられている。しかし、特許請求された主題の態様を開示された特定の形に限定する意図はないが、その逆に、本明細書に述べられた主題の様々な態様の精神および範囲に含まれるすべての修正物、代替構成および均等物を網羅するものであることを理解されたい。
【図１】
2013528883.tif 000003
【図２】
2013528883.tif 000004
【図３】
2013528883.tif 000005
【図４】
2013528883.tif 000006
【図５】
2013528883.tif 000007
【図６】
2013528883.tif 000008
【図７】
2013528883.tif 000009
【図８】
2013528883.tif 000010
【国際調査報告】
2013528883.tif 000011
2013528883.tif 000012