"プロセッサにより実行されると該プロセッサに、ランダムアクセスメモリ内に仮想ディスクファイルのログのインスタンスを生成し、前記ログは順序付きログエントリを有し、前記ログ内のログエントリを識別し、該ログエントリは、キャッシュされた入力/出力ジョブを記憶装置にコミットする要求が発行された後に生成された、前記ログ内の最古のログエントリであり、前記識別したログエントリの識別子を新たに生成したログエントリに追加し、前記新たに生成したログエントリを前記ログに書き込ませる、命令を有するコンピュータ可読記憶媒体。実行されると前記プロセッサに、キャッシュされた入力/出力ジョブをコミットさせる要求の受信に応答して、前記ログエントリ及び前記新たに生成したログエントリにより識別される前記仮想ディスクファイルに対する変更を適用させる、命令を更に有する請求項1に記載のコンピュータ可読記憶媒体。プロセッサ、前記プロセッサが電力を供給されるとき前記プロセッサと通信するメモリ、を有し、前記メモリは、実行されると前記プロセッサに、仮想ディスクファイルのログにアクセスし、前記ログは連続的順序で書き込まれたログを有し、前記シーケンス内の各ログエントリは有効であるという決定に応答して、ログエントリのシーケンスを選択し、前記シーケンスは最新の有効なログエントリを有し、各ログエントリは前記ログファイル内の不連続の後に前記ログに書き込まれ、前記ログエントリのシーケンスにより識別された前記仮想ディスクファイルのセクタに対する変更を適用させる、命令を有する、コンピュータシステム。前記メモリは、実行されると前記プロセッサに、前記ログエントリのシーケンス内のログエントリに格納されたファイル識別子の終わりに基づき、前記仮想ディスクファイルのファイル識別子の終わりを変更させる、命令を更に有する、請求項3に記載のコンピュータシステム。前記メモリは、実行されると前記プロセッサに、前記仮想ディスクファイルを格納する記憶装置のセクタサイズが増大したという決定に応答して、第2のログを生成し、前記仮想ディスクファイルから得たビットパターンと前記ログ内のログエントリから得たビットパターンとを有する拡張ログエントリを前記第2のログに書き込ませる、命令を更に有する、請求項3に記載のコンピュータシステム。前記メモリは、実行されると前記プロセッサに、各ログエントリを前記ログに書き込む前に、最古の未フラッシュログエントリの識別子を各ログエントリに書き込ませる、命令を更に有する、請求項3に記載のコンピュータシステム。前記メモリは、実行されると前記プロセッサに、前記仮想ディスクファイルを格納する記憶装置のセクタサイズが減少したという決定に応答して、第2のログを生成し、前記ログ内のログエントリから得たビットパターンの一部を有する第1の縮小ログエントリと前記ログ内の前記ログエントリから得た前記ビットパターンの残りの部分を有する第2の縮小ログエントリとを、前記第2のログに書き込ませる、命令を更に有する、請求項3に記載のコンピュータシステム。仮想マシンの仮想ディスクのインスタンスを生成するステップであって、前記仮想ディスクは仮想ディスクファイルによりバックアップされる、ステップと、前記仮想ディスクファイルに書き込むべきビットパターンを決定するステップと、ログに書き込むべき前記ビットパターンを有するログエントリを生成するステップであって、前記ログは順序付きログエントリを有し、前記ログはランダムアクセスメモリに格納される、ステップと、最古の未フラッシュログエントリの識別子を前記ログに追加するステップと、前記ログエントリを前記ログに書き込むステップと、を有するコンピュータが実行する方法。記憶装置にフラッシュコマンドを発行するステップと、前記記憶装置がフラッシュ動作を完了したことを示す信号の受信に応答して、前記ログエントリからの前記ビットパターンを前記仮想ディスクファイルに適用するステップと、を更に有する請求項8に記載のコンピュータが実行する方法。電源障害が生じたという決定に応答して、前記記憶装置に格納された前記ログの前記コピーをスキャンするステップと、前記シーケンス内の各ログエントリは有効であるという決定に応答して、前記ログの前記コピーからログエントリのシーケンスを選択するステップであって、前記シーケンスは最新の有効なログエントリを有し、各ログエントリは、前記ログファイル内の不連続の後に前記ログに書き込まれた、ステップと、ログエントリの前記シーケンスにより識別される前記仮想ディスクファイルのセクタに対する変更を適用するステップと、を更に有する請求項9に記載のコンピュータが実行する方法。本願明細書は、仮想ディスクを達成する技術を記載する。例示的な構成では、仮想ディスクファイルは、ログ及びチェックポイントレコードの両方として動作するログに関連付けられ得る。ログエントリが生成されると、テイルを識別する情報が該ログエントリに格納され得る。この情報は、仮想ディスクファイルが不適切に閉じられた場合、つまりクラッシュ又は電源障害の場合に、再生すべきログエントリのシーケンスを発見するために使用できる。さらに、他の技術は、請求の範囲、詳細な説明及び図面に記載される。当業者は、本開示の1又は複数の種々の態様が、限定ではなく、ここに言及される態様を達成する回路及びプログラムを有しても良く、該回路及びプログラムが、システム設計者の設計選択に依存してここに言及される態様を達成するよう構成されるハードウェア、ソフトウェア及び/又はファームウェアの実質的に如何なる組合せでもあり得ることを理解する。以上は要約であり、したがって必然的に簡略化、一般化及び詳細の省略を含む。当業者は、この要約が単に説明のためであり、限定を意図しないことを理解する。本願明細書で用いられる用語、回路は、ハードウェア割り込み制御部、ハードドライバ、ネットワークアダプタ、グラフィックプロセッサ、ハードウェアベースのビデオ/オーディオコーデックのようなハードウェアコンポーネント、及びこれらのハードウェアを動作させるファームウェアを含み得る。用語、回路は、マイクロプロセッサ、特定用途向け集積回路、及びファームウェア及び/又はソフトウェアにより構成されるプロセッサ、例えば命令をリードし及び実行する実行ユニットも含み得る。プロセッサ等は、メモリ、例えばRAM、ROM、ファームウェア及び/又は大容量記憶装置から読み込んだ命令により構成され得る。このような命令は、1又は複数の機能を実行するようプロセッサを構成するロジックを用い得る。特定の例示的な回路は、ハードウェア及びソフトウェアの組合せを含み得る。この特定例では、実装者は、プロセッサにより実行可能な機械可読コードに後にコンパイルされる、ロジックを具現化するソースコードを記述しても良い。当業者は、最先端では、ハードウェアで実装される機能とソフトウェアで実装される後にハードウェアにより実行される機能との間に僅かな差しかないことを理解する。したがって、ハードウェア又はソフトウェアで実装されるというような機能の記載は、単に設計選択である。端的に言うと、ソフトウェア処理は等価なハードウェア構造に変換でき、ハードウェア構造はそれ自体が等価なソフトウェア処理に変換できるので、命令で具現化されるよう記載される機能は代替としてハードウェアで実装でき、逆も同様である。開示の主題は、1又は複数のコンピュータシステムを用いても良い。図1及び以下の議論は、開示の主題が実施され得る適切なコンピューティング環境の簡潔な概略的説明を提供することを目的とする。図1を参照すると、例示的なコンピューティングシステム100が示される。コンピューティングシステム100は、プロセッサ102、例えば実行コアを有し得る。1つのプロセッサ102が図示されるが、多の実施形態では、コンピュータシステム100は、複数のプロセッサ、例えばプロセッサ基板毎に複数の実行コアを及び/又はそれぞれ複数の実行コアを有する複数のプロセッサ基板を有しても良い。図示のように、種々のコンピュータ可読記憶媒体110が、種々のシステムコンポーネントをプロセッサ102に結合する1又は複数のシステムバスにより相互接続され得る。システムバスは、メモリバス又はメモリ制御部、周辺バス、及び種々のバスアーキテクチャのうちの任意のものを用いるローカルバスを含む複数種類のバス構造のうちの任意のものであっても良い。例示的な実施形態では、コンピュータ可読記憶媒体110は、例えばRAMrandomaccessmemory、記憶装置106、例えば電気機械ハードドライブ、固体ハードドライブ等、ファームウェア108、例えばFLASHRAM若しくはROM,及び取り外し可能記憶装置118、例えばCD-ROM,フロッピディスク、DVD、FLASHドライブ、外部記憶装置等を有し得る。当業者に理解されるべきことに、磁気カセット、フラッシュメモリカード、及び/又はデジタルビデオディスクのような他の種類のコンピュータ可読記憶媒体を用いることができる。コンピュータ可読記憶媒体110は、プロセッサ実行可能命令122、データ構造、プログラムモジュール、及び実行可能命令のようなコンピュータ100のための他のデータの不揮発性及び揮発性記憶を提供し得る。BIOSbasicinputoutputsystem120は、起動中のような、コンピュータシステム100内の要素間の情報転送を助ける基本ルーチンを含み、ファームウェア108に格納され得る。オペレーティングシステム及び/又はアプリケーションプログラムを含む多数のプログラムが、ファームウェア108、記憶装置106、RAM104、及び/又は取り外し可能記憶装置118に格納され、プロセッサ102により実行されても良い。例示的な実施形態では、コンピュータ可読記憶媒体110は、以下に詳述する仮想ディスクパーサ404を格納し得る。仮想ディスクパーサ404は、プロセッサ102により実行されることにより、コンピュータシステム100を、特定目的のために構成されたコンピュータシステムに変える。つまり、コンピュータシステムは、本願明細書に記載される技術に従って構成される。コマンド及び情報は、キーボード及びポインティングデバイスを含むがこれらに限定されない入力装置116を通じて、コンピュータ100により受信されても良い。他の入力装置は、マイクロフォン、ジョイスティック、ゲームパッド、スキャナ等を有しても良い。上述の及び他の入力装置は、システムバスに結合されるシリアルポートインタフェースを通じて、プロセッサ102に接続される場合が多いが、パラレルポート、ゲームポート又はUSBuniversalserialbusポートのような他のインタフェースにより接続することもできる。ディスプレイ又は他の種類のディスプレイは、グラフィックプロセッサユニット112の一部であり又はそれに接続されるビデオアダプタのようなインタフェースを介してシステムバスにも接続され得る。ディスプレイに加え、コンピュータは、通常、スピーカ及びプリンタ図示しないのような他の周辺出力装置を有する。図1の例示的なシステムは、ホストアダプタ、SCSISmallComputerSystemInterfaceバス、及びSCSIバスに接続される外部記憶装置も有し得る。コンピュータシステム100は、遠隔コンピュータのような1又は複数のリモートコンピュータへの論理コネクションを用いてネットワーク環境で動作しても良い。リモートコンピュータは、別のコンピュータ、サーバ、ルータ、ネットワークPC、ピア装置又は他の一般的なネットワークノードであって良く、通常、コンピュータシステム100に関して上述した要素の多く又は全てを有し得る。LAN又はWANネットワーク環境で用いられるとき、コンピュータシステム100は、ネットワークインタフェースカード114を通じて、LAN又はWANに接続され得る。NIC114は、内蔵又は外付けであって良く、システムバスに接続され得る。ネットワーク環境では、コンピュータシステム100に関連して示されたプログラムモジュール又はその部分は、遠隔メモリ記憶装置に格納されても良い。理解されるべきことに、本願明細書に記載されたネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を用いることが出来る。さらに、本開示の多数の実施形態はコンピュータ化されたシステムに特に良く適すると考えられるが、本願明細書はこのような実施形態に本開示を限定するものではない。図2を参照すると、仮想マシンを生成するために用いることができる例示的な仮想化プラットフォームが示される。本実施形態では、マイクロカーネルハイパーバイザ202は、コンピュータシステム200のハードウェアを制御し、該ハードウェアへのアクセスを調停するよう構成され得る。マイクロカーネルハイパーバイザ202は、Childパーティション1乃至Nここで、Nは1より大きい整数であるのようなパーティションと呼ばれる実行環境を生成し得る。ここで、Childパ―ティションは、マイクロカーネルハイパーバイザ202によりサポートされる分離の基本単位である。マイクロカーネルハイパーバイザ202は、あるパーティションのプロセスを、別のパーティションのリソースへのアクセスから隔離できる。特に、マイクロカーネルハイパーバイザ202は、ゲストオペレーティングシステムのカーネルモードコードを、別のパーティションのリソースへのアクセス及びユーザモードプロセスから隔離できる。各Childパーティションは、マイクロカーネルハイパーバイザ202の制御下にあるハードウェアリソース、例えばメモリ、装置、プロセッササイクル等のセットにマッピングされ得る。実施形態では、マイクロカーネルハイパーバイザ202は、スタンドアロン型ソフトウェア、オペレーティングシステムの一部であり、マザーボードのファームウェア内に組み込まれ、専用集積回路であり、又はそれらの組合せであり得る。マイクロカーネルハイパーバイザ202は、ゲストオペレーティングシステムの、物理コンピュータシステム内のメモリの視野メモリビューを制限することにより、パーティションを実行できる。マイクロカーネルハイパーバイザ202は、仮想マシンのインスタンスを生成するとき、システム物理メモリsystemphysicalmemory:SPMのページ、例えば開始アドレス及び終了アドレスを有する固定長メモリブロックを、ゲスト物理メモリguestphysicalmemory:GPMとして仮想マシンに割り当てることができる。ここで、ゲストの、システムメモリの制限された視野は、マイクロカーネルハイパーバイザ202により制御される。用語、ゲスト物理メモリは、仮想マシンの観点からメモリページを記述する省略表現である。また、用語、システム物理メモリは、物理システムの観点からメモリページを記述する省略表現である。したがって、仮想マシンに割り当てられるメモリページは、ゲスト物理アドレス仮想マシンにより用いられるアドレス及びシステム物理メモリページの実際のアドレスを有する。ゲストオペレーティングシステムは、ゲスト物理メモリを仮想化しても良い。仮想メモリは、オペレーティングシステムに、メモリをコミットさせ、アプリケーションに論理的連続ワーキングメモリへの単独アクセスを与えさせる管理技術である。仮想化環境では、ゲストオペレーティングシステムは、本例ではゲストページテーブルと呼ばれる1又は複数のページテーブルを用い、仮想ゲストアドレスとして知られる仮想アドレスを、ゲスト物理アドレスに変換する。本例では、メモリアドレスは、ゲスト仮想アドレス、ゲスト物理アドレス、及びシステム物理アドレスを有しても良い。図示の例では、Parentパーティションコンポーネントは、Xenのオープンソースハイパーバイザのドメイン0と同様であるとも考えられ、ホスト環境204を含み得る。ホスト環境204はオペレーティングシステム又は設定ユーティリティのセットであり、ホスト環境204は、仮想化サービスプロバイダ228VSPを用いることにより、Childパーティション1~Nで実行するゲストオペレーティングシステムにリソースを提供するよう構成され得る。VSP228は、通常、オーブンソースコミュニティでバックエンドドライバと呼ばれ、仮想化サービスクライアントVSC通常、オーブンソースコミュニティでフロントエンドドライバと呼ばれる、又は並列仮想化装置を用いてハードウェアリソースへのインタフェースを多重化するために用いることができる。図示のように、仮想化サービスクライアントは、ゲストオペレーティングシステムの環境内で実行する。しかしながら、これらのドライバは、ハードウェア又はエミュレートされたハードウェアと通信する代わりにVSPを介してホスト環境204と通信する点で、ゲスト内の残りのドライバと異なる。例示的な実施形態では、仮想化サービスクライアント216及び218と通信するために仮想化サービスプロバイダ228により用いられる経路は、EnlightenedIOパスであると考えられる。図示のように、エミュレータ234、例えば仮想化IDE装置、仮想化ビデオアダプタ、仮想化NIC等は、ホスト環境204内で動作するよう構成され、ゲストオペレーティングシステム220、222に利用可能なエミュレートされたハードウェアリソース、例えばIOポート、ゲスト物理アドレス範囲、仮想VRAM、エミュレートされたROM範囲等に取り付けられる。例えば、ゲストOSがゲスト物理アドレスにマッピングされたゲスト仮想アドレスに触れるとき、マイクロカーネルハイパーバイザ202は、要求を傍受し、関連するエミュレータに書き込みしようとしたゲストに値を渡す。ここで、装置のレジスタは、メモリを割り付けられた装置のためである。また、本例のエミュレートされたハードウェアリソースは、仮想装置がゲスト物理アドレス空間内に位置付けられると考えられる。このようなエミュレータの使用は、エミュレーションパスと考えられる。エミュレーションパスは、装置をエミュレートするためにはVSPとVSCとの間でメッセージを通過させるよりも多くのCPU時間を必要とするので、EnlightenedIOパスと比べて非効率である。例えば、レジスタにマッピングされたメモリに対する幾つかの動作は、エミュレーションパスを介してディスクにバッファを書き込むために必要である。一方、これは、EnlightenedIOパスではVSCからVSPへ渡される単一のメッセージにまで削減できる。ここで、VM内のドライバは、ハードウェアにアクセスするよう設計されるのではなく、仮想システムにより提供されるIOサービスにアクセスするよう設計される。各Childパーティションは、1又は複数の仮想プロセッサ230、232を有し得る。ゲストオペレーティングシステム220、222は、仮想プロセッサを管理し、それらで実行すべきスレッドをスケジューリングする。概して、仮想プロセッサは、実行可能命令であり、特定アーキテクチャを有する物理的プロセッサを表す関連状態情報である。例えば、ある仮想マシンは、Intelx86プロセッサの特徴を有する仮想プロセッサを有しても良い。また、別の仮想プロセッサは、PowerPCプロセッサの特徴を有しても良い。本例の仮想プロセッサは、コンピュータシステムのプロセッサにマッピングされ、仮想プロセッサを達成する命令が物理的プロセッサにより直接実行されるようにする。したがって、複数のプロセッサを有する一実施形態では、仮想プロセッサは複数のプロセッサにより同時に実行でき、同時に、例えば他のプロセッサはハイパーバイザ命令を実行する。パーティションにおける仮想プロセッサとメモリの組合せは、仮想マシンと考えられる。ゲストオペレーティングシステム220、222は、例えばMicrosoft登録商標、Apple登録商標、オープンソースコミュニティ等によるオペレーティングシステムのような任意のオペレーティングシステムであり得る。ゲストオペレーティングシステムは、ユーザ/カーネル動作モードを有し、スケジューラ、メモリマネジャ等を含み得るカーネルを有し得る。一般的に、カーネルモードは、少なくとも特権的プロセッサ命令へのアクセスを許可する、プロセッサの実行モードを有し得る。各ゲストオペレーティングシステムは関連ファイルシステムを有し得る。ゲストオペレーティングシステムは、端末サービス、電子商取引サービス、電子メールサービス等のような関連ファイルシステムに格納されたアプリケーション、並びにゲストオペレーティングシステム自身を有し得る。ゲストオペレーティングシステムは、仮想プロセッサで実行すべきスレッドをスケジューリングでき、このようなアプリケーションのインスタンス化が達成できる。図3を参照すると、図2で上述したものの代替の仮想プラットフォームを示す。図3は、図2と同様のコンポーネントを示すが、この例示的な実施形態では、ハイパーバイザ302が、マイクロカーネルコンポーネント、並びに仮想サービスプロバイダ228及びデバイスドライバ224のような図2のホスト環境204内のコンポーネントと同様のコンポーネントを含み得る。一方、管理オペレーティングシステム304は、例えばハイパーバイザ302を構成するために用いられる設定ユーティリティを有しても良い。このアーキテクチャでは、ハイパーバイザ302は、図2のマイクロカーネルハイパーバイザ202と同一の又は同様の機能を実行できる。しかしながら、このアーキテクチャでは、ハイパーバイザ302は、EnlightenedIOパスを達成し、コンピュータシステムの物理的ハードウェアのためのドライバを有する。図3のハイパーバイザ302は、スタンドアロン型ソフトウェア、オペレーティングシステムの一部であり、マザーボードのファームウェア内に組み込まれ、又はハイパーバイザ302の一部が専用集積回路により達成され得る。図4を参照すると、コンピュータシステム400を示す。図4は、本願明細書に記載する技術を実行するために用いることができるコンポーネントのハイレベルブロック図である。簡単に言うと、コンピュータシステム400は、図1~3に関して上述したコンポーネントと同様のコンポーネントを有し得る。図4は、図2又は3により説明した仮想プラットフォームのハイレベル表現であると考えられる仮想システム420を示す。例えば、仮想システム420は、ハイパーバイザマイクロカーネル202及びホスト204により提供される機能の組合せのハイレベル表現と考えられる。或いは、仮想システム420は、ハイパーバイザ302及び管理OS304のハイレベル表現と考えられる。したがって、本願明細書を通じて用語仮想システム420の使用は、以下の段落で説明する仮想ディスク技術が任意の種類の仮想ソフトウェア層内で又は任意の種類の仮想プラットフォームで実装され得ることを示唆する。仮想ディスクパーサ404は、特定の例示的な実施形態では実行可能命令であり、仮想ディスクファイルから仮想ディスクをインスタンス化し、仮想マシンの代わりに記憶IOを処理するために用いることができる。図示のように、仮想ディスクパーサ404は、仮想ディスクファイル406のような1又は複数の仮想ディスクファイルを開き、仮想ディスク402を生成できる。仮想ディスクパーサ404は、仮想システムファイルシステム408を介して記憶装置106から仮想ディスクファイル406を得ることができる。簡単に言うと、仮想システムファイルシステム408は、仮想ディスクファイル406のような、仮想システム420のコンピュータファイル及びデータを編成する実行可能命令を表す。仮想システムファイルシステム408は、このデータを固定サイズの物理的範囲のアレイ、つまり物理的記憶装置の連続記憶領域に格納できる。特定の例では、1つの範囲はクラスタであり、設定された長さを有する、複数ビットのバイトシーケンスである。例示的なクラスタのサイズは、通常、2の冪乗であり、512バイト乃至64キロバイトである。特定の構成では、クラスタのサイズは、4キロバイトであり得る。仮想ディスクファイル406を開く要求を受信すると、仮想システムファイルシステム408は、ファイルがディスクのどこに位置するかを決定し、ディスクの1又は複数の物理的範囲からデータを読み出すためにIOジョブをディスクデバイスドライバへ発行する。ファイルシステム408により発行されたIOジョブは、記憶装置106にある仮想ディスクファイル406の永続的コピーの位置を記述するディスクオフセット及び長さを決定し、IOジョブを記憶装置106へ発行する。記憶装置がどのように動作するかのセマンティクスにより、書き込みIOジョブは、記憶装置106の回路が永続的記憶ユニット460の位置、例えばプラッタ、フラッシュメモリセル等にアクセスし、及び仮想ディスクファイル406の永続的コピーの新しいコンテンツを示すバッファリングされたビットパターンを永続的記憶ユニット460に書き込むことを決定するまで、キャッシュ454により表される揮発性メモリの1又は複数レベルのキャッシュにバッファリングされる。仮想ディスクパーサ404は、仮想ディスクファイル406を示すビットパターンを得て、複数の仮想ディスク範囲を有するディスクとして仮想ディスクファイル406内にペイロード、例えばユーザデータを置く。一実施形態では、これらの仮想ディスク範囲は、固定サイズブロック、512キロバイト乃至64メガバイトのサイズであり、複数のセクタに区分され得る。しかしながら、別の実施形態では、仮想ディスク範囲は、可変サイズの範囲であり得る。例示的な構成では、ゲストオペレーティングシステム412をブートする前に、エミュレート又はEnlightened記憶制御部及び仮想ディスクのEnlightened特徴に関連するリソースは、メモリをマッピングされたレジスタを有するエミュレートされた記憶制御部が仮想マシン410のゲスト物理アドレス空間内で実行されるよう、設定される。ブートコードが実行し、ゲストオペレーティングシステム412をブートし得る。仮想システム420は、ゲスト物理アドレス空間のこの領域へのアクセスの試みを検出し、ゲストオペレーティングシステム412に記憶装置がエミュレートされた記憶制御部に取り付けられると決定させる結果を返す。これに応答して、ゲストオペレーティングシステム412は、ドライバ並列仮想ドライバ又は通常のドライバをロードし、該ドライバを用いて、検出した記憶装置へ記憶IO要求を発行する。仮想システム420は、記憶IO要求を仮想ディスクパーサ404へ転送できる。ゲストオペレーティングシステム412は、実行された後、ファイルシステム408を介して仮想ディスク402へIOジョブを発行できる。これは、ゲストオペレーティングシステム412及びゲストオペレーティングシステム412にインストールされたアプリケーションのコンピュータファイル及びデータを編成する仮想システムファイルシステム414と似ている。ゲストオペレーティングシステム412は、オペレーティングシステムが物理的記憶装置と相互作用するのと同様の方法で、仮想ディスク402と相互作用でき、最終的にIOジョブは仮想ディスクパーサ404へ転送される。仮想ディスクパーサ404は、物理的記憶装置をエミュレートする方法で、IOジョブにどのように応答するかを決定するロジックを有し得る。例えば、仮想ディスクパーサ404は、仮想ディスクファイル406からデータを読み出し、及び仮想ディスクファイル406にデータを書き込むことができる。また、仮想ディスクファイル406に書き込まれたデータは、仮想システムファイルシステム408を通じて転送され、永続的記憶ユニット460に格納された仮想ディスクファイル406の永続的コピーに又は永続的記憶ユニット460にコミットされる。図5Aを参照すると、本願明細書に記載される技術を実施するための代替のアーキテクチャを示す。図5に示すように、仮想ディスクパーサ404は、Microsoft登録商標により提供されるオペレーティングシステムのようなオペレーティングシステム520に実装できる。本例では、仮想ディスクパーサ404は、図1のコンピュータシステム100と同様のコンポーネントを有し得る記憶サーバ500で実行するよう構成され得る。本例では、記憶サーバ500は、物理的記憶装置アレイ510を有し、サーバが利用可能な記憶を作るよう構成され得る。したがって、記憶は、オペレーティングシステム508にローカルに取り付けられるように見える。仮想ディスクパーサ404は、図4に関して説明したのと同様に動作する。相違点は、本構成では、ファイルシステム414により発行されるリード/ライトIOジョブが、ネットワーク接続を介して仮想ディスクパーサ404へ転送されることである。図5Bを参照すると、本願明細書に記載される技術を実施するための更に別のアーキテクチャを示す。図5Bは、図5Aと同様に、仮想ディスクパーサ404がオペレーティングシステム502に実装され、コンピュータシステム512が図1のコンピュータシステム100と同様のコンポーネントを有し得る。しかしながら、本例は、図がループバックの取り付けられた仮想ディスク402を示す点が異なる。アプリケーション424のようなアプリケーションを含み、ファイルシステム414は、仮想ディスク402に格納され、また、仮想ディスクファイル406はコンピュータシステムファイルシステム514に格納され得る。図6を参照すると、仮想ディスクファイル406により少なくとも部分的に説明された仮想ディスクを示す。図示のように、仮想ディスク402は、N個の記憶範囲Nは0より大きい整数であるを有し、この特定の例では、仮想ディスク402は10個の範囲を有する。仮想ディスク402は、ゲストオペレーティングシステム412の異なるファイル及びデータのビットパターンを有するとして示される。これらのビットパターンは、仮想ディスク範囲内の異なるハッチングにより区別される。仮想ディスク402は物理的記憶装置ではないので、仮想ディスク範囲のための基本ペイロードデータは、仮想ディスクファイル406内の異なるセクションにより記述され、つまり異なるセクションに格納され得る。例えば、仮想ディスクブロック1は、仮想ディスクファイルオフセット値0、又はペイロードデータを格納するために用いられ得る第1のオフセットにより定められる部分により記述される。割り当てテーブル416は、コンピュータシステム400の動作中にランダムアクセスメモリに格納され、任意のセクションにある仮想ディスクファイル406内に存続し、複数のセクションに及び得る。簡単に言うと、割り当てテーブル416は、仮想ディスク範囲を仮想ディスクファイル406のセクションにリンク付けする情報を含み得る。例えば、割り当てテーブル416は、仮想ディスクブロック数、及びデータを格納する仮想ディスクファイル406のセクションを定める仮想ディスクファイルバイトオフセットを定める情報を格納し得る。矢印は、割り当てテーブル416に格納された関係を表す。割り当てテーブル416又は他のメタデータに関する変更が仮想ディスクファイルに対して行われるとき、キャッシュ454がフラッシングされるまで、その変更が永続的記憶ユニット460により持続されることが保証されないという問題がある。予期しない電源断のように、メタデータ更新が生き残る前に仮想ディスクファイルが正しく閉じられない場合、永続的記憶ユニット460のセクタに格納された全てのメタデータエントリは、損傷してしまう。特に、メタデータが割り当てテーブル416のためのものである場合、複数の仮想ディスク範囲を仮想ディスクファイル406にリンク付けする情報が失われてしまう。したがって、単一セクタの損失は、多くの仮想ディスク範囲を使用不可能にしてしまう。例示的な実施形態では、仮想ディスクファイルのメタデータのセクションの損傷が仮想ディスク402の複数のセクションを損傷する可能性を低減するために、ログ420が用いられ得る。したがって、仮想ディスクパーサ404は、仮想ディスクファイル406のメタデータの変更を示すビットパターンを有するログエントリを生成し、それらをログ420に記録し得る。仮想ディスクファイルが正しく閉じられない場合には、仮想ディスクパーサ404がリスタートされるとき、ログ420はメタデータの変更を再生するために用いられ得る。図示のように、ログ420は、ログエントリ図示の例ではログエントリ1~6の順序付きシーケンスとして構築され得る。各ログエントリは、該ログエントリが1番目、2番目、3番目、...のログエントリであることを識別するシーケンス番号を有し得る。さらに、実行時間中にログ420を格納するために用いられるランダムアクセスメモリは、仮想ディスクパーサ404により循環バッファとして用いられ得る。したがって、ログ420が一杯になると、仮想ディスクパーサ404は、ログ420の始めから古いログエントリに上書きし始める。古いエントリが上書きされ、仮想ディスクパーサ404はそれらをシーケンシャルに順序付けるので、仮想ディスクパーサ404は、ログエントリ1をログエントリ7で上書きし、ログエントリ2をログエントリ8で上書きし、以下同様である。例示的な実施形態では、仮想ディスクパーサ404は、フラッシュに応答して仮想ディスクファイル406にログエントリを適用するよう構成され得る。簡単に言うと、フラッシュは、記憶装置の内部キャッシュの内容を永続的記憶に書き込むよう記憶装置に指示する要求である。記憶装置は、IOジョブにより記述されるビットパターンが持続されるときを示さないので、フラッシュが発行されない限り、IOジョブが永続的記憶装置460に格納される保証はない。例示的な構成では、仮想ディスクパーサ404がログを生成し仮想ディスクファイル406を更新する方法の副作用は、メタデータの変更を記述するログエントリを書き込む動作が、その変更を仮想ディスクファイル406に書き込むことと等価であることである。このため、これらの変更は、個々の変更を仮想ディスクファイル406に適用することにより引き起こされる性能への影響を低減するために、仮想ディスクファイル406に一括処理で適用され得る。したがって、この例示的な実施形態では、仮想ディスクファイル406への変更は、遅延され、例えばフラッシュに応答して一緒に書き込まれ得る。特定の例では、メタデータが割り当てテーブル416に格納され、仮想ディスクパーサ404は、ログエントリをログ420に書き込み、割り当てテーブル416のメモリ内コピーを更新し、フラッシュが生じたことを決定し、仮想ディスクファイル406を更新するよう構成され得る。また、仮想ディスクファイル406の更新は、今しがたフラッシュされたログエントリにより記述される変更を示すIOジョブを、記憶装置106へ送信させる。したがって、これらの変更は、永続的記憶ユニット460に格納された仮想ディスクファイルの永続的コピーに適用され得る。例示的な実施形態では、永続的記憶ユニット460によるログエントリの格納が成功したとき、仮想ディスクパーサ404は、ログエントリを新しいログエントリで上書きし得る。上述のように、記憶装置106へ発行されたIOジョブは、揮発性メモリ、例えばキャッシュ454の1又は複数レベルに格納され得るので、及び幾つかの記憶装置はIOジョブが完了したときを報告しないので、例示的な構成では、仮想ディスクパーサ404は、永続的記憶ユニット460にフラッシュされたログエントリを上書きするよう構成され得る。図7を参照すると、異なるログエントリフォーマットを示す。例示的な実施形態では、仮想ディスクパーサ404は、ログエントリ702、704、706及び/又は708と同様のログエントリを書き込むよう構成され得る。しかしながら、本開示は、図7に示すログエントリと同様の構造を有するログエントリを用いることに限定されない。図7に示すように、各ログエントリは、ヘッダを有し得る。ヘッダは、ログエントリのシーケンス番号、例えばログ番号1~Mここで、Mは1より大きい整数である、ログエントリが現在のランの一部であることを識別する固有識別子、つまりログが仮想ディスク402がインスタンス化された前の時間ではなくこのランタイムのインスタンスのためのものであることを示す情報、及びテイルtail、つまりログ内のフラッシュされていない最古のログエントリの識別子を含み得る。これは後に詳述する。さらに、任意的な実施形態では、仮想ディスクパーサ404は、ファイルの終わりendoffile:EOF情報、例えば仮想ディスクファイル406の終わりを示す仮想ディスクファイルバイトオフセットを、各ログエントリに書き込み得る。EOF情報は、仮想ディスクファイル406のEOFがログ420により識別されるEOFと一致しない場合に、仮想ディスクファイル406の長さを修復するために用いることができる。図7に示すように、幾つかのログエントリは、ヘッダ及び記述子を有する。記述子セクションは、仮想ディスクファイル406内でペイロード、つまりビットパターンが書き込まれるべき場所のための仮想ディスクファイルオフセットへの参照を有し得る。例示的な実施形態では、ペイロードは、セクタのデータ価値を有し得る。例えば、記憶装置106が4kbの大きさのセクタを使用する場合、各ログエントリ内のペイロードは、仮想ディスクファイル406のための4kb、つまりビットパターンだけ更新され得る。ログエントリ702及706は、ログエントリのペイロードが基本記憶装置、例えば記憶装置106のセクタの大きさに依存して異なり得ることを示す。例えば、ログエントリ702は4k更新を記述し、一方、ログエントリ706は8k更新を記述しても良い。他方で、ログエントリ704は、複数の記述子及び複数のペイロードビットパターンを有する。ログエントリ704は、例示的なログエントリが複数のセクタの更新を記述し得ることを示す。仮想ディスクパーサ404は、複数の更新が同時にコミットされるよう要求されたとき、このようなログエントリを生成するよう構成されても良い。このような更新の1つの特定の例では、仮想ディスクパーサ404のデータがある仮想ディスクブロックから別のブロックへ移動される場合、仮想ディスクファイルのセクション内のペイロードを別のセクションにコピーするのではなく、仮想ディスクパーサ404が仮想ディスク範囲を仮想ディスクファイル406にリンク付けする情報を変更する。ログエントリ708は、例示的な実施形態では、ログエントリがペイロードを有するのではなく、記述子が、仮想ディスクファイルオフセットと、セクタのペイロードが全て0、全て1等であることを示す識別子と、を有しても良いことを示す。例えば、仮想ディスクパーサ404は、全て0を有するよう仮想ディスクファイルの一部を変更するよう決定し、例えばファイルの終わりを延長する。本例では、仮想ディスクパーサ404は、ペイロードの代替である識別子を有するログエントリを生成し得る。このように、ログエントリはログ420内で少ない空間しか取らない。また、ログエントリは、ログエントリ710と同様であり得る。この種のログエントリは、テイル位置を更新するために用いることができる。これは、以下に詳述する。簡単に言うと、ログ420が一杯である又は一杯に近く、ログエントリが上書きできない、つまりログエントリが永続的記憶ユニット460にフラッシュされていない場合、ログエントリ710と同様のログエントリは、テイルを進めるために用いることができる。これがどのように動作するかの特定の例では、仮想ディスクパーサ404は、ログ420内の利用可能な自由空間がどれだけあるかを決定して、閾と比較することにより、ログ420が一杯である又はほぼ一杯であると決定し得る。ログ420が一杯である又はほぼ一杯であると決定した後、仮想ディスクパーサ404は、エントリがフラッシュされていないことを決定することにより、古いエントリが上書きできないと決定し得る。次に、仮想ディスクパーサ404は、仮想化システムファイルシステム408又は記憶サーバファイルシステム504へフラッシュを発行し得る。フラッシュの完了後、仮想ディスクパーサ404は、ログエントリ710と同様のログエントリを生成し、フラッシュが生じたこと及びこのエントリが新しいテイルであることを示す情報をそのエントリ内に書き込み得る。前述に加え、ログ420内のバイトシーケンスが単一の有効なログエントリであることを仮想ディスクパーサ404に示すために、データは特定の方法でログエントリに格納され得る。例えば、ヘッダは、チェックサム又はログエントリを有効にするために用いられる他のデータ、及び該ヘッダをヘッダとして識別する固有識別子を含み得る。記述子も、該記述子がヘッダに関連することを識別する固有識別子を割り当てられ得る。記述子の固有識別子のコピーは、例えばペイロード部の最初のバイト内に置かれ、ペイロードの最初のバイトは記述子に格納され得る。したがって、実際のペイロードは、ペイロード部の中のペイロードから最初のバイトを除き、記述子に格納されたバイトを加えたものであり得る。一実施形態では、ログ420は、ログ及びチェックポイントレコードの両方として用いることができる。仮想ディスクパーサ404は、フラッシュされていないログに格納された最古のログエントリに関連する識別子であるテイルの識別子を、生成された各ログエントリに追加し得る。識別子は、クラッシュの後に、どのログエントリが仮想ディスクファイル406のディスク上コピーに適用されたか及びどのログエントリが再生されるべきかを決定するために、仮想ディスクパーサ404により用いることができる。図8を参照すると、どのように仮想ディスクパーサ404がログ420に上書きするかを経時的に示す。この特定の例では、ログ420は、8個の時点で示される420-A乃至420-H420-Aにより示される時間期間の前に、仮想ディスクパーサ404は、仮想ディスクファイル406を開き、仮想ディスク402はインスタンス化され得る。特定の例では、仮想ディスク402は、仮想マシン410内でインスタンス化され得る。つまり、コンピュータシステム400は、IOジョブを、仮想マシン410から仮想ディスクパーサ404へ転送し、仮想マシン410内の記憶装置の存在をエミュレートするよう構成され得る。別の構成では、オペレーティングシステム508は、仮想ディスク402をブートし、クライアントコンピュータシステム506で動作し始めることができる。仮想ディスクファイル406のメタデータに変更を生じるIOジョブが発行されたと仮定する。また、これは、仮想ディスクパーサ404に、仮想ディスクファイル406内のメタデータに対する変更を示すビットパターンを書き込ませる。本例では、仮想ディスクパーサ404は、変更が適用されるべき仮想ディスクファイルのセクタサイズの部分のためのビットパターンを生成し、ログエントリ1を生成し得る。因みに、セクタサイズの更新が用いられる理由は、セクタが、記憶装置106が単一トランザクションで永続的記憶ユニット460にコミットできるデータ量であるからである。したがって、メタデータの変更が数バイトの大きさであっても、変更を表すビットパターンは、更新と、既に仮想ディスクファイル406に格納されているデータの残りとを含み得る。例に戻ると、仮想ディスクパーサ404は、テイルを識別するメモリポインタを調べることにより、テイル最後のフラッシュ以来、記憶装置106にコミットされていない最古のログエントリの同一性を決定できる。本例では、テイルは、ログ420の先頭に初期化されている。したがって、仮想ディスクパーサ404は、ログエントリ1内の初期化ポイントに識別子を追加しこれは、ログエントリ1の中央から先頭を指す曲線矢印により示される、ログエントリ1をログ420に書き込み、ログ420のディスク上コピーを更新するために、ログ420に対する変更を示すIOジョブを記憶装置106へ発行し得る。例示的な実施形態では、識別子は、ログエントリ1のシーケンス番号であり、ログエントリ1の最初のセクタを示す、ログ420内のバイトオフセット等であり得る。さらに、更新が割り当てテーブル416に対するものである場合、仮想ディスクパーサ404は、変更を含めるために、割り当てテーブル416のメモリ内コピーを更新し得る。図8の説明を続け、ログ420-Bを参照すると、仮想ディスクパーサ404は、仮想ディスクファイル406に格納されたメタデータに対する変更を生じる別のIOジョブを受信すると仮定する。例えば、仮想ディスクブロックを仮想ディスクファイル406のセクションにリンク付けするために、割り当てテーブル416に対する変更が行われると仮定する。これに応答して、仮想ディスクパーサ404は、仮想ディスクブロックを仮想ディスクファイル406のセクションにリンク付けする情報を示す仮想ディスクファイル406のためのビットパターン並びに既にディスクにあるセクタからのデータを含むペイロードを有するログエントリ2を生成し得る。そして、仮想ディスクパーサ404は、最古の未フラッシュログエントリの同一性が、ログエントリ1としても分かっているログ420の最初にあることを決定し得る。例えば、仮想ディスクパーサ404は、最古の未フラッシュログエントリの最初を指すメモリポインタを調べ、識別子をログエントリ2に追加し、ログエントリ2をログ420に書き込み、ログ420のディスク上コピーを更新するためにIOジョブを発行し得る。本例のエントリ1及び2の両方は、両方とも最古の未フラッシュログエントリを明示的に識別するので、チェックポイントレコードである。ログ420-Cを参照し、フラッシュ動作を開始するコマンドが処理されると仮定する。例えば、仮想ディスクパーサ404は、タイマの終了に基づき、又は未フラッシュログエントリを格納するために用いる所定の空間量を超過したために、記憶装置106にフラッシュコマンドを発行することを決定すると仮定する。代替として、フラッシュは、仮想マシン410のファイルシステム414により発行されると仮定する。どんな処理がフラッシュを開始したかに拘わらず、仮想ディスクパーサ404は、フラッシュ手順の開始を用いて、ログエントリを持続させ、仮想ディスクファイル406のディスク上コピーを更新するよう構成される。例えば、フラッシュを開始するコマンドの処理に応答して、仮想ディスクパーサ404は、記憶装置106にキャッシュ454の内容を永続的記憶ユニット460に書き込ませるフラッシュを発行し得る。また、これは、ログエントリ1及びログエントリ2を示すIOジョブが存続することを保証する。仮想ディスクパーサ404は、次のログエントリが書き込まれる第1の仮想ディスクファイルオフセットを示す位置、つまりログエントリ3へのメモリ内のポインタを更新し得る。ログ420-Dを参照すると、仮想ディスクファイル406に対する変更を生じる別の更新が、仮想ディスクファイルメタデータに対して行われ得る。上述の動作手順と同様に、仮想ディスクパーサ404はログエントリ3を生成し、仮想ディスクパーサ404は、コミットされていない、つまりフラッシュ動作中に記憶装置106にコミットされなかった、及び適用されていない、つまり仮想ディスクファイル406に適用されていない最古のログエントリの同一性を決定し得る。例えば、仮想ディスクパーサ404は、ログエントリ2の最後を示すファイルオフセットを指すメモリポインタを調べ、ログエントリ3の識別子をログエントリ3に、例えばログエントリ3のヘッダ内に追加し得る。メモリポインタが本例でエントリ1と2の両方を超えて移動したという事実は、ログエントリ1及び2の両方がディスクにコミットされたことを示す。次に、仮想ディスクパーサ404は、ログエントリ3をRAM104内のログ420に書き込み、ログエントリ3を示すIOジョブを記憶装置106に発行し得る。ログ420-Eを参照し、フラッシュ動作を開始する別のコマンドが処理されると仮定する。フラッシュを発行する要求の処理に応答して、仮想ディスクパーサ404は、フラッシュを発行し、記憶装置106にキャッシュ460の内容をディスクに書き込ませ得る。記憶装置106がフラッシュが終了したことを示す肯定応答を送信した後、仮想ディスクパーサ404は、次のログエントリ、つまりログエントリ4のための仮想ディスクファイルバイトオフセットを示すファイルオフセットを指すテイルポインタを更新し得る。ログ420-Fを参照すると、仮想ディスクファイル406に対する変更を生じる別の更新が、仮想ディスクファイルメタデータに対して行われ得る。上述の動作手順と同様に、仮想ディスクパーサ404はログエントリ4を生成し、仮想ディスクパーサ404は、最古の未フラッシュログエントリ、例えば本例ではログエントリ4の同一性を決定し、ログエントリ4の識別子をログエントリ4に追加し、ログエントリ4をログ420に書き込み得る。ログ420の大きさが限られており循環的方法で扱われると仮定する。ログ420-Gは、仮想ディスクパーサ404が古いフラッシュ済みエントリを新しいエントリで上書きするよう構成され得ることを示す。本例では、図示のように、仮想ディスクパーサ404は、前の変更よりも大きい、メタデータに対する変更を受信している。例えば、ログエントリ5は2つのペイロードを有すると仮定する。仮想ディスクパーサ404は、ログエントリ5を書き込むための十分な空間が存在しないことを決定し得る。この決定に応答して、仮想ディスクパーサ404は、テイルポインタを調べ、テイルポインタの仮想ディスクファイルオフセット値より前にログ420内に空間が存在することを決定することにより、ログ420内にフラッシュ済みログエントリが存在するか否かを決定し得る。次に、仮想ディスクパーサ404は、ログエントリ5を生成し、最古の未フラッシュログエントリがログエントリ4であると決定し、ログエントリ5をログ420に書き込む前に、ログエントリ4の識別子をログエントリ5に追加するよう構成される。図示のように、この場合、識別子は、ログエントリ5の後にログ420に書き込まれたかのように見えるログエントリを指す。しかしながら、図9の説明と関連して後に詳述するように、仮想ディスクパーサ404は、ログエントリ5が実際にはログエントリ4の後に書き込まれたと決定し得る。ヘッドポインタがテイルポインタに達すると、フラッシュされたエントリが存在しない状況が生成され、したがって、仮想ディスクパーサ404はそれ以上エントリを上書きできない。この状況では、仮想ディスクパーサ404は、テイルを更新するために用いられるログエントリを上書きすることにより、ログ420内に空間を生成するよう構成され得る。ログエントリ420-Hにより示すように、仮想ディスクパーサ404は、フラッシュを発行し、フラッシュ済み本例ではログエントリ4及び5により記述される変更を示すIOジョブを記憶装置106に発行して仮想ディスクファイル406のディスク上コピーを更新し、ヘッダを含む点で図6のログエントリ610と同様に見えるログエントリ6を生成し、ログエントリ6の識別子をログエントリ6に追加し、該ログエントリをログ420に書き込んでも良い。したがって、仮想ディスクパーサ404は、以前にログエントリ3、5及び5の残り部分を格納していた空間を次のログエントリを格納するために使用することができる。図9を参照すると、ログエントリが生成された後に、仮想ディスクファイル406は、電源障害又はクラッシュのために、不適切に閉じられ得る。仮想ディスクパーサ404が仮想ディスクファイル406に応答するとき、永続的ログ902又は906は、衝突し得る。例示的な永続的ログ902又は906は、図8の例示的なハイレベル図から生成されなくても良く、永続的ログ902又は906は、異なる例の一部であっても良い。仮想ディスクパーサ404は、これらのエントリをスキャンし、どのログエントリが仮想ディスクファイル406に適用されたか及びどのログエントリが永続的ログエントリに格納されたテイルポインタに基づき再生できるかを決定するよう構成され得る。図示のログ902は、6個の有効なログエントリ、及び破損データを含む1個のエントリ、つまりログエントリ4を有する。ログ902を検出した後に、仮想ディスクパーサ404は、ログ420をスキャンして最新の有効なログエントリの位置を特定し、シーケンス、つまり最新の有効なログエントリが一部にある0以上の順序付きログエントリを適用するよう構成され得る。要するに、仮想ディスクパーサ404は、テイルとして識別されたログエントリ以外の、自身又は特定の他のログエントリへの識別子を含み得る、各ログエントリがテイルの識別子を有するログエントリのグループを選択することにより、最新の有効なログエントリが属するシーケンスを決定し得る。テーブル904と共にログ902を参照すると、仮想ディスクパーサ404は、ログ902を渡り歩き、テーブル906を満たす。テーブル906が選択された後、仮想ディスクパーサ404は、最新の有効なログエントリを含むシーケンスを選択できる。例えば、仮想ディスクパーサ404は初期化されて、シーケンスが0に設定され、ログ902の先頭に不連続が設定される。要するに、不連続は、データが有効なログエントリを表さない、仮想ディスクファイル内の場所である。例えば、不連続の位置にあるデータは、異なるランタイムからのエントリ、エントリの一部、ランダムデータ等であり得る。仮想ディスクパーサ404は、最近の不連続点を追跡し、その位置を用いて、所与のシーケンスが全て有効なエントリを含むか否かを決定し得る。仮想ディスクパーサ404は、ログエントリ1を読み出し、それが有効なログエントリか否かを決定し得る。例えば、仮想ディスクパーサ404は、ヘッダ、記述子及び/又はそのペイロード内の情報を調べ、それが有効なログエントリを示すフォーマットに適合するか否かを決定し得る。ログエントリ1が有効であると決定されると、仮想ディスクパーサ404は、その中に格納された情報を読み出し、ログエントリ1がコミットされたときのテイルポインタが何かを決定し得る。本例では、ログエントリ1は自身を指す。したがって、仮想ディスクパーサ404は、最新の有効なログエントリを含むイベントシーケンスがログエントリ1で開始し及びログエントリ1を含むことを示す情報を格納し得る。不連続は0に初期化されログエントリ1が有効なので、仮想ディスクパーサ404は、不連続オフセットを0に等しく保ち得る。仮想ディスクパーサ404は、ログエントリ2をスキャンし、それが有効であり及びログエントリ1を指すと決定し得る。この決定に応答して、仮想ディスクパーサ404は、1乃至2である最近の有効なログエントリを含むシーケンスを決定し、この情報をテーブル904に格納し得る。本例では、仮想ディスクパーサ404は、最新のログエントリからスキャンし始めるので、最後はログエントリ2までである。仮想ディスクパーサ404は、ログエントリ3を読み出し、それが有効であること及びそれがテイルがログエントリ2を示すファイルオフセットの位置にあることを示すと決定し得る。本例では、仮想ディスクパーサ404は、ログエントリが検出された最新の有効なログエントリであることを、そのシーケンス番号、タイムスタンプ等に基づき決定し、ログエントリ2の識別子がログエントリ3内に存在していることから、シーケンスがログエントリ2で開始すると決定し得る。因みに、ログエントリ21ではなくを指すログエントリ3の存在は、ログエントリ2が生成された後且つログエントリ3が生成される前のあるときに、フラッシュ動作が生じたことを示す。したがって、ログエントリ3は、ログエントリ1が仮想ディスク406のディスク上コピーにコミットされた後に生成されたものである。ログエントリ4を含むべき空間を参照すると、仮想ディスクパーサ404は、ログ420のこの部分をスキャンし、それが有効なログエントリを記述しないことを決定し得る。例えば、この部分は、誤ったセッション識別子、無効なチェックサムを含み、又はランダムデータである。この決定に応答して、仮想ディスクパーサ404は、ログエントリ5の最初のセクタを表すファイルオフセットへの不連続点を更新し、このエントリは有効なシーケンスを記述しないのでシーケンス値をブランクのままにし得る。先行する動作と同様に、仮想ディスクパーサ404は、ログエントリ5をスキャンし、それが有効であり及びログエントリ2を指すと決定し得る。本例では、仮想ディスクパーサ404は、ログエントリ2の識別子がログエントリ5内に存在することから、シーケンスがログエントリ2で開始することを決定するよう構成され得る。シーケンス2-5内の各ログエントリは有効なエントリではないので、仮想ディスクパーサ404は、このシーケンスを検討から外し得る。しかしながら、ログエントリ5は有効であり最近のエントリなので、仮想ディスクパーサ404は、応答のためにそれを候補シーケンスに格納し得る。無効なエントリを含むシーケンスを除外する理由の1つは、仮想ディスクパーサ404が選択されたシーケンス内の各ログエントリのペイロードを適用するよう構成され、不良データを有するシーケンスを再生することは仮想ディスクファイル406を使用不可能にしてしまうからである。例の説明を続けると、仮想ディスクパーサ404は、ログエントリ6を読み出し、それが有効であり及びログエントリ5を指すと決定し得る。この決定に応答して、仮想ディスクパーサ404は、最新のログエントリがログエントリ6であり、ログエントリ6はログエントリ5の識別子を含み、及びシーケンス5-6は不連続を有しないと決定し得る。この情報の決定に応答して、仮想ディスクパーサ404は、応答のためにシーケンス5乃至6が候補シーケンスであることを識別するために、テーブル904内のシーケンス値を更新し得る。テーブル904を更新した後、仮想ディスクパーサ404は、ログエントリ7を読み出し、それが有効であり及びログエントリ5を指すと決定し得る。この決定に応答して、仮想ディスクパーサ404は、最新のログエントリがログエントリ7であり、ログエントリ7はログエントリ5の識別子を含み、及びシーケンス5、6、7は不連続を有しないと決定し得る。この情報の決定に応答して、仮想ディスクパーサ404は、応答のためにシーケンス5乃至7が候補シーケンスであることを識別するために、テーブル904内のシーケンス値を更新し得る。ログ7は永続的ログ903内に格納された最後のエントリであり、最近の有効なシーケンスを記述するので、仮想ディスクパーサ404は、候補シーケンス本例ではログエントリ5-7を選択し、それらのペイロードを仮想ディスクファイル406に適用し得る。例示的な実施形態では、仮想ディスクパーサ404は、各ログエントリの記述子及びペイロードを読み取り、該ペイロードを記述子内で識別されるファイルオフセットに書き込むことにより、変更を適用し得る。例えば、記述子が4096のファイルオフセットを有し、ペイロードが4kbの場合、仮想ディスクパーサ404は、ファイルオフセット4096で開始する4kbのペイロードを書き込み得る。図9の説明を続け、永続的ログ906を参照すると、例示的な永続的ログ906、及び永続的ログ906の第1及び第2の通過中にテーブル808を満たすために実行される動作を示す。テーブル904と同様に、テーブル908は0で開始するよう初期化され得る。仮想ディスクパーサ404は、ログエントリ12をスキャンすると、ログエントリ12が有効であり、仮想ディスクパーサ404が未だ遭遇していないエントリであるログエントリ9を指すテイルの識別子を含むと決定し得る。したがって、仮想ディスクパーサ404は、最新のログエントリがログエントリ12であり、ログエントリ12はログエントリ9の識別子を含み、及びシーケンス9-12は不連続を有しない、つまりログエントリ10及び11を示すログエントリであると決定し得る。この情報の決定に応答して、仮想ディスクパーサ404は、応答のためにシーケンス12自体が候補シーケンスであることを識別するために、テーブル904内のシーケンス値を更新し得る。テーブル908の残りは、仮想ディスクパーサ404がログ906のログエントリをスキャンするにつれて満たされ、終わりに達すると、仮想ディスクパーサ404は、ログ906の循環特性によりテーブル908を調整するために再び各エントリを再スキャンするよう構成され得る。本例では、ログエントリ12が再び読み取られると、仮想ディスクパーサ404は、ログエントリ12が有効であり、ログエントリ9を指すテイルの識別子を含み、シーケンスが不連続を含まないと決定し得る。図示のように、仮想ディスクパーサ404は、シーケンス9-14が最新の有効なエントリ14を含み及びシーケンス9-14内の各ログエントリが有効なので、シーケンス9-14が再生できると決定し得る。図10を参照すると、基礎的記憶装置により用いられるセクタサイズの変化を説明するために、ログエントリのサイズを拡張する技術を示す。例えば、仮想ディスクファイル406は、より大きなセクタサイズを有する記憶装置を含む新しいコンピュータシステムにコピーされても良い。基礎的記憶装置が変更され、より大きなセクタサイズを有する場合、仮想ディスクパーサ404は、各ログエントリにより格納されるペイロードを、セクタサイズに適合するよう拡張し得る。これに関し、ログエントリは、基礎的記憶装置と協調し続ける。概して、仮想ディスクパーサ404が仮想ディスクファイル406を開き、セクタサイズが拡張されていると決定すると、仮想ディスクパーサ404は新しいログを生成し、古いログに格納されたログエントリを拡張ログエントリに変換するよう構成され得る。拡張処理が完了すると、仮想ディスクパーサ404は、ログエントリが再生される必要があるか否かを決定し、ログエントリを再生し、次に実行時間動作モードに入って、図7に関して説明した動作と同様の動作を実行するよう構成され得る。一実施形態では、拡張処理は、古いセクタサイズと新しいセクタサイズとの間の差を決定し、この情報を用いて古いログエントリと等価なログエントリを生成することを含み得る。例えば、仮想ディスクパーサ404は、新しいセクタサイズで仮想ディスクファイルを分割し、新しいセクタの各々が開始する場所を決定し得る。新しいログ内の最初のエントリに対して、仮想ディスクパーサ404は、古いログエントリが拡張セクタ内に位置する場所を記述子から決定し、新しいセクタ内に位置する場所である、エントリのペイロードを書き込むペイロードを生成し、ペイロードの残りをディスクからのデータで満たし得る。後続のログエントリの各々に対して、仮想ディスクパーサ404は、ペイロードを含む拡張エントリを生成し、前に生成した拡張ログエントリがこのセクタへの変更を記述するか否かを決定し得る。前に生成した拡張ログエントリがこのセクタへの変更を記述する例では、仮想ディスクパーサ404は、前に生成した1又は複数の拡張エントリからペイロードをコピーし、ディスクから残りをコピーし得る。特定の例では、仮想マシン410は、4kbセクタを使用する記憶装置を含むコンピュータシステムから、8kbセクタを使用するコンピュータシステムへ移動されると仮定する。この特定の例では、仮想ディスクパーサ404は、例えば新しい記憶装置の装置情報を問い合わせることにより、セクタサイズが増大されたと決定し、ログ420により使用されるセクタサイズを拡張することを決定し得る。仮想ディスクパーサは、未使用セクションについて仮想ディスクファイル406をスキャンし、未使用セクションを新しいログのために使用すると決定し得る。仮想ディスクパーサ404は、仮想ディスクファイル406の未使用セクション内に拡張ログ910を作成し、ログエントリ902及び904を拡張し始め得る。仮想ディスクパーサ404は、ログエントリ1002をスキャンし、それが例えばファイルオフセット16kbの位置にあると決定し得る。仮想ディスクパーサ404は、16kbが8kbに揃えられたセクタの最初の部分を表すと決定し得る例えば、仮想ディスクパーサ404は、16kbを8kbで割り、商が整数、つまり2であると決定し得る。次に、仮想ディスクパーサ404は、拡張ログエントリ1006を生成し、ログエントリ1002A’のペイロードをログエントリ1006にコピーし得る。拡張ログ1010内のログエントリは8kbなので、拡張ログ1010が再生されるとき、メモリ内の永続的仮想ディスクのコピーに書き込まれたデータが正しくなるように、第2の部分がログエントリ1006に追加される必要がある。これを考慮して、仮想ディスクパーサ404は、ファイルオフセット20kbを更新するペイロードについて拡張ログ1010内のログエントリをスキャンし、存在しないと決定するよう構成され得る。この決定に応答して、仮想ディスクパーサ404は、永続的仮想ディスクファイル1000内のファイルオフセット20kbを読み出し、それをログエントリ1006にコピーし得る。ログエントリ1006が生成された後、仮想ディスクパーサ404は、ログエントリ1004を読み出し、それが仮想ファイルオフセット20kbへの更新を含むと決定し得る。仮想ディスクパーサ404は、20kbが8kbに揃えられたセクタの第2の部分を表すと決定し、拡張ログエントリ1008を生成し、ログエントリ1004のペイロードB’をログエントリ1008の第2の4kbの大きさの部分にログエントリ1008にコピーし得る。仮想ディスクパーサ404は、ファイルオフセット20kbを更新するペイロードについて拡張ログ1010内のログエントリをスキャンし、ログエントリ1006がオフセット16kbを変更したと決定するよう構成され得る。この決定に応答して、仮想ディスクパーサ404は、A’をログエントリ1008の第1の部分にコピーし得る。その結果、これら2つのログエントリが仮想ディスクパーサ404により適用されると、仮想ディスクファイルは、仮想ディスクオフセット16kbにA’及びB’を含む。各ログエントリが拡張されディスクに適用された後、仮想ディスク402は、仮想マシン410により使用され得る。図11を参照すると、ログエントリを縮小する技術を示す。ログエントリを縮小する基本的原理は、図10に関して上述したものと同じであり、同様の動作がログを縮小するために用いることができる。図11では、仮想マシン410は、8kbセクタ又は任意の他の2の冪乗の大きさのセクタを使用する記憶装置を含むコンピュータシステムから、4kbセクタを使用するコンピュータシステムへ移動されると仮定する。仮想ディスクパーサ404は、所望の仮想ディスクファイル1100を開き、ログエントリのうちの1つのヘッダ内の情報を新しい記憶装置により提供される情報と比較することにより、セクタサイズが変更されたと決定し得る。この比較に応答して、仮想ディスクパーサ404は、ログ420により使用されるセクタサイズを縮小するよう構成され得る。仮想ディスクパーサ404は、未使用セクションについて仮想ディスクファイル406をスキャンし、未使用セクションを新しいログのために使用すると決定し得る。仮想ディスクパーサ404は、仮想ディスクファイル406の未使用セクション内に縮小ログ1110を作成し、ログをスキャンし始め得る。仮想ディスクパーサ404は、ログエントリ1102をスキャンし、それがファイルオフセット16kbの位置にあり、及び第1の部分がファイルオフセット16kbへの変更を表し、第2の部分がファイルオフセット20kbへの変更を表すと決定し得る。次に、仮想ディスクパーサ404は、縮小ログエントリ1104及び1106を生成し、ログエントリ1102の第1の部分をログエントリ1104に、ログエントリ1102の第2の部分をログエントリ1106にコピーし得る。その結果、これら2つのログエントリが仮想ディスクパーサ404により適用されると、仮想ディスクファイル406は、仮想ディスクオフセット16kb及び仮想ディスクファイル20kbにそれぞれA’及びBを含む。各ログエントリが縮小されRAM内の仮想ディスクファイルのコピー仮想ディスクファイル406に適用された後、仮想ディスク402は、仮想マシン410により使用され得る。以下に、動作手順を示す一連のフローチャートを示す。理解を容易にするために、フローチャートは、最初のフローチャートが全体的な対局図により実装を表し、以降のフローチャートが破線で示される更なる追加及び/又は詳細を提供するよう構成される。さらに、当業者は、破線で示した動作手順が任意と考えられることを理解する。図12を参照すると、動作1200、1202、1204、1206、1208を含む動作手順を示す。動作1200は動作手順を開始する。動作1202は、コンピュータシステムが、ランダムアクセスメモリ内の仮想ディスクファイルのログをインスタンス化するよう構成される回路を含むことを示す。ここで、該ログは、順序付きログエントリを有する。例えば、図4を参照すると、コンピュータシステム400は仮想ディスクパーサ404を有し、仮想ディスクパーサ404は仮想ディスクファイル406からランダムアクセスメモリ内のログ420をインスタンス化し得る。図6を参照すると、仮想ディスクパーサ404は、ランダムアクセスメモリ内で仮想ディスクファイル406を開き、その中に格納されたログ420を検出し得る。次に、仮想ディスクパーサ404は、ログ420をランダムアクセスメモリ104内にコピーし得る。図6に示すように、ログ420に格納されたログエントリは順序付けられ得る。例えば、各エントリは、シーケンス番号、又はログエントリが書き込まれた順序を示すタイムスタンプのような特定の他の識別子を有し得る。図12の説明を続けると、動作1204は、コンピュータシステムが、ログ内のログエントリを識別するよう構成される回路を含むことを示す。ここで、該ログエントリは、キャッシュされた入力/出力ジョブを記憶装置にコミットする要求が発行された後に生成されたログ内の最古のログエントリである。仮想ディスクパーサ404は、プロセッサ102で実行し、テイルの位置を示すポインタを読み出し得る。この例では、テイルは、記憶ディスク106にフラッシュ済みログエントリの始めを示す仮想ディスクファイルオフセットを指し得る。言い換えると、テイルは、最古の未フラッシュログエントリを指し得る。図8を参照し、ログ420はログ420-Bと同様の状態にあると仮定する。本例では、仮想ディスクパーサ404は、テイルがログ420-Aの始めにあること、例えば仮想ディスクファイルオフセット0又はログエントリ1の最初のオフセットを決定し得る。図12に戻ると、動作1206は、コンピュータシステムが、識別したログエントリの識別子を新たに生成したログエントリに追加する回路を含み得ることを示す。例えば、仮想ディスクパーサ404は、識別子、例えばログエントリ1を格納するために使用されるログ420内の最初のバイトを示す仮想ディスクファイルオフセット、識別したログエントリのシーケンス番号、等を新たに生成したログエントリに追加し得る。特定の例では、図8を参照し、ログ420はログ420-Aにより示した状態にあると仮定する。本例では、仮想ディスクパーサ404は、ログエントリ2を生成し、ログエントリ1の識別子をログエントリ2のヘッダに追加し得る。図12の説明を続けると、動作1208は、コンピュータシステム400が、新たに生成したログエントリをログに書き込む回路を含み得ることを示す。仮想ディスクパーサ404は、新たに生成したログエントリをログ420に書き込み得る。ログエントリを書き込むのに応答して、ログエントリを記述する1又は複数の入力/出力ジョブが、記憶装置106に発行され得る。1又は複数のIOジョブは、処理され、それらが最終的に永続的記憶ユニット460、例えばディスクプラッタ、フラッシュメモリの1又は複数のセル等にコミットされるまで、記憶装置106の種々のキャッシュに格納され得る。新たに生成されたログエントリは、記憶装置106によりコミットされると、テイルが記憶装置106にコミットされ仮想ディスクファイル406に適用される前のイベントログを示すチェックポイントレコードとして、及びログエントリとして動作する。図13を参照すると、図12に示した動作と共に実行され得る追加動作を示す。動作1310は、一実施形態では、コンピュータシステムが、新たに生成したログエントリをログに書き込む回路を有し得ることを示す。ここで、該新たに生成したログエントリは、少なくとも記憶装置のセクタのサイズと同程度のサイズを有するビットパターンを含む。例えば、図7を参照すると、本例では、ログエントリは、永続的記憶ユニット460のセクタと同じ大きさのペイロード、例えばビットパターンを有し得る。特定の例では、ログエントリは、ログエントリ702、704又は706と同様であり得る。このログエントリが再生される例では、仮想ディスクパーサ404は、ペイロードの内容を、ログ420により識別される仮想ディスクファイル406内の仮想ディスクファイルオフセットに書き込み得る。図13の説明を続けると、動作1312は、コンピュータシステムが、新たに生成したログエントリをログに書き込む回路も有し得ることを示す。ここで、該新たに生成したログエントリは、ログエントリのビットパターンが全て0であることを識別する指標を有する。例えば、仮想ディスクパーサ404は、全て0のペイロードを有するログエントリを生成すると決定し得る。本例では、このようなログエントリを生成するのではなく、仮想ディスクパーサ404は、ペイロードが全て0であると示す記述子内の識別子を含むログエントリを生成し得る。この種のログエントリは、ログエントリがログ420内で要する空間量を低減するために用いられ得る。特定の例では、ログエントリは、図7のログエントリ708と同様であっても良い。動作1314により示すように、コンピュータシステムは、新たに生成したログエントリをログに書き込む回路を更に有し得る。ここで、該新たに生成したログエントリは、第1のセクタサイズのビットパターン及び第2のセクタサイズのビットパターンを有する。例えば、仮想ディスクパーサ404は、互いに依存する仮想ディスクファイルメタデータに対する2つの変更、例えば割り当てテーブル416への2つの変更を行う要求を受信し得る。仮想ディスクパーサ404は、仮想ディスクファイルメタデータに対する単一の変更をキャプチャするために複数のセクタが変更される必要があるとき、又は別個の変更がトランザクション的に互いに依存するとき、これらの変更が互いに依存し合うと決定し、2以上のペイロードを有する単一のログエントリを生成するよう構成され得る。特定の例では、仮想ディスクパーサ404により生成されたログエントリは、図7のログエントリ704と同様であっても良い。図13の説明を続けると、動作1316は、コンピュータシステムが、仮想ディスクファイルのファイルオフセットの終わりを識別する情報を、新たに生成したログエントリに追加するよう構成される回路を有し得ることを示す。例えば、仮想ディスクパーサ404は、新たに生成したログエントリをログ420に書き込む前に、仮想ディスクファイル406のファイルの終わりを識別する情報を新たに生成したログエントリに追加し得る。例えば、仮想ディスクファイル406は、仮想ディスク402が仮想マシン410によりどのように使用されるかに基づき拡張され得る。仮想ディスクファイル406への他の書き込みと同様に、EOFendoffileを拡張する書き込みは、記憶装置106によりフラッシュが完了するまで永続的であることが保証されない。したがって、仮想ディスクパーサ404は、仮想ディスクファイル406のEOFがログエントリ内のEOFと異なる場合にEOFを正すために、ログエントリが生成されるときEOFを識別する情報を仮想ディスクファイル406に追加するよう構成され得る。動作1318を参照すると、コンピュータシステムが、キャッシュされた入力/出力ジョブをコミットさせる要求を受信するのに応答して、ログエントリ及び新たに生成したログエントリにより識別される仮想ディスクファイルに対する変更を適用するよう構成される回路も含み得ることを示す。例えば、ログエントリがログ420に書き込まれた後のあるときに、フラッシュコマンドが発行され得る。フラッシュが記憶装置106に発行されると、仮想ディスクパーサ404は、仮想ディスクファイル406への最後のフラッシュ以来記録されたログエントリのペイロードセクション内の変更を適用し、それにより、IOジョブを記憶装置106に発行させ得る。特定の例では、図7のログ420-D及び420-Eを参照し、フラッシュコマンドは、テイルポインタがログエントリ3の最初のセクタを指しているときに発行されたと仮定する。フラッシュの発行に応答して、仮想ディスクパーサ404は、最後のフラッシュ以来記録されたログエントリ、つまりテイルポインタがフラッシュはログエントリ2の後に完了したと示すのでログエントリ3を識別し、ログエントリ3のペイロードを仮想ディスクファイル406に適用し得る。特定の例では、ペイロードは、割り当てテーブル416に対する更新であり得る。ログエントリ3のペイロードが仮想ディスクファイル406に適用された後、仮想ディスクパーサ404は、ログ420-Eにより示すようにログエントリ4が書き込まれる場所を指すようテイルポインタを更新し得る。次に、仮想ディスクパーサ404は、別のフラッシュを発行し得る。しかしながら、ログエントリのフラッシュは、仮想ディスクファイル406に対するログエントリにより記述される変更のフラッシュと等価なので、仮想ディスクパーサ404は、別のフラッシュを発行する必要がない。特定の例では、仮想ディスクパーサ404は、フラッシュコマンドを発行しても良い。例えば、仮想ディスクパーサ404は、所定の時間期間に設定されるタイマを有しても良い。タイマが終了すると、仮想ディスクパーサ404は、フラッシュコマンドを発行するよう構成され得る。当業者は、所定の時間間隔がコンピュータシステム内のハードウェアの種類に基づき及びフラッシュを完了するのに要する時間的コストを考慮して設定され得ることを理解する。追加で又は代替で、仮想ディスクパーサ404は、ログ420内のメモリプレッシャmemorypressureに応答して、記憶装置106にフラッシュコマンドを発行するよう構成され得る。例えば、ログ420のサイズは限られても良く、仮想ディスクパーサ404は、ログファイルを格納するためにログ420内に所定量の空間が割り当てられる場合に、フラッシュコマンドを発行するよう構成されても良い。同様に、所定量の空間は、コンピュータシステム内のハードウェアの種類、ログ420のサイズ、フラッシュを完了するのに要する時間量、等に基づき設定され得る。図7を参照すると、ログエントリ710と同様のログエントリは、ログ420内のメモリプレッシャが閾を超える場合に、フラッシュ動作を開始するために用いられ得る。フラッシュは、仮想マシン410又はクライアントコンピュータシステム506により発行され得る。例えば、アプリケーション424は、10分毎に自動保存するよう設定されるワープロプログラムであると仮定する。タイマが終了すると、ワープロプログラムは、ファイルの内容を保存するためにゲストオペレーティングシステム412にフラッシュを発行し得る。フラッシュ要求の受信に応答して、ゲストオペレーティングシステム412は、ファイルシステム414にフラッシュするよう指示し、仮想ディスクパーサ404は最終的にフラッシュ要求を受信し得る。次に、仮想ディスクパーサ404は、仮想化システムファイルシステム408にフラッシュを発行し得る。したが、仮想ディスクファイルメタデータに対する変更は、仮想マシン410又はコンピュータシステム506により開始されたフラッシュ動作を外し得る。仮想ディスクパーサ404は、記憶装置106がフラッシュを完了したことを示す肯定応答信号を受信し、フラッシュの完了をファイルシステム414に報告し得る。図14を参照すると、図13の動作1318と共に実行され得る追加動作を示す。動作1420により示すように、コンピュータシステムは、追加ログエントリをログに書き込む回路も含み得る。ここで、該追加ログエントリは追加ログエントリの識別子を含み、該追加ログエントリは、キャッシュされた入力/出力ジョブをコミットする要求が記憶装置に発行された後に生成されたログ内の最古のログエントリである。例えば、フラッシュ後のあるときに、仮想ディスクファイル406のメタデータに対する別の変更が、仮想ディスクパーサ404により行われ得る。本例では、仮想ディスクパーサ404は、変更を示すペイロードを有する別のログエントリを生成し、どの識別子を追加ログエントリに書き込むかを決定するために、テイルについてメモリポインタを調べる。ログエントリ及び新たに生成したログがフラッシュされるので、仮想ディスクパーサ404は、追加ログエントリの識別子を追加ログエントリに追加し、それをログ420に書き込み得る。図8、特にログ420-Eに戻り、仮想ディスクパーサ404が、ログエントリ4を生成し、ログエントリ1-3はコミット及び適用されたと決定すると仮定する。この決定に応答して、仮想ディスクパーサ404は、ログエントリ4の開始位置を示す仮想ディスクファイルオフセットをログエントリ4のヘッダに追加し、ログエントリ4をログ420に書き込み得る。図14に戻ると、動作1422は、一実施形態では、コンピュータシステムは、ログエントリが記憶装置にコミットされ仮想ディスクファイルに適用されたという決定に応答して、ログエントリを上書きする回路を有し得ることを示す。例えば、仮想ディスクパーサ404は、フラッシュされたログエントリを上書きするよう構成され得る。一実施形態では、テイルポインタの配置は、フラッシュ済みログエントリを未フラッシュログエントリと区別するために用いられ得る。仮想ディスクパーサ404は、テイルポインタを示す仮想ディスクファイルオフセット値よりも小さい仮想ディスクファイルオフセット値を有するログエントリを上書きするよう構成され得る。図8、特にログ420-F及び420-Gを参照すると、仮想ディスクパーサ404は、ログエントリ5を生成し、ログ420の終わりに達したと決定し得る。次に、仮想ディスクパーサ404は、テイルのアドレスを決定し、テイルポインタの位置によりログエントリ1-3がフラッシュされたと決定し得る。次に、仮想ディスクパーサ404は、ログ420-Gにより示すように、ログエントリ5をログ420に書き込み得る。図14の説明を続けると、動作1424は、コンピュータシステムが、仮想ディスクファイルが不適切に閉じられたという決定に応答してログをスキャンする回路、有効なログエントリのシーケンスを識別する回路であって、該シーケンスはログに書き込まれた最新の有効なログエントリを含み、シーケンス内の各ログエントリは不連続の後にログに書き込まれる、回路、及びログエントリのシーケンスにより識別された仮想ディスクファイルに対する変更を適用する回路、を有し得ることを示す。例えば、電源障害が、コンピュータシステム400の動作中のあるときに生じ得る。コンピュータシステム400は再起動されても良く、仮想化システム420が実行されても良い。仮想ディスクパーサ404が動作し始め、仮想マシン410を起動する要求が受信されても良い。仮想ディスクパーサ404は、記憶装置106に格納された仮想ディスクファイル406を開き、ログ420を開き得る。仮想ディスクパーサ404は、永続的ログ420に格納されたログエントリ420を読み出し、その中に有効なエントリのシーケンスが存在するか否かを決定し得る。次に、仮想ディスクパーサ404は、有効なエントリのシーケンスを選択し得る。つまり、シーケンス内の各エントリは有効であり、シーケンスは最近のエントリを有し、シーケンス内の各ログエントリは、最近の不連続ポイントの後に書き込まれている。シーケンスが識別されると、仮想ディスクパーサ404は、シーケンス内のログエントリから1又は複数のペイロードを抽出し、それらを仮想ディスクファイル406に適用し、仮想ディスクファイル406のディスク上コピーを変更するために、1又は複数のIOジョブを記憶装置106に発行させる。特定の例では、図9を参照し、ログ420はリブート後に永続的ログ902と同様に見えると仮定する。本例では、仮想ディスクパーサ404は、最新の有効なエントリログエントリ7を含みシーケンス内の各ログエントリが最近の不連続ログエントリ4の後に書き込まれた有効なエントリのシーケンスログエントリ5-7を識別し得る。この特定の例では、仮想ディスクパーサ404は、ログエントリ5-7を選択し、各ログエントリからペイロード及び仮想ディスクファイルオフセットを抽出するよう構成され得る。次に、仮想ディスクパーサ404は、仮想ディスクファイル406に各ペイロードを順次適用し得る。図14の説明を続けると、動作1426は、コンピュータシステムが、仮想ディスクファイルは拡張セクタサイズを有する第2の記憶装置に移動されたという決定に応答して、第2のログを生成する回路、及びログエントリから得たビットパターンと仮想ディスクファイルから得たビットパターンとを有する拡張ログエントリを第2のログエントリに書き込む回路、を有し得ることを示す。例えば、仮想ディスクファイル406は、コンピュータシステム400から、同様の構成を有するが記憶装置のセクタサイズがより大きい異なるコンピュータシステムにコピーされると仮定する。例えば、記憶装置106のセクタサイズは4kbであり、より大きい記憶装置のセクタサイズは8kbであると仮定する。本例では、仮想ディスクパーサ404は、メモリ内で仮想ディスクファイル406を開き、ログ420を読み出し得る。仮想ディスクパーサ404は、より大きい記憶装置のセクタサイズがログエントリ内のペイロードよりも大きいと決定し、ログエントリのサイズを拡張することを決定し得る。特定の例では、仮想ディスクパーサ404は、仮想ディスクファイル406に適用すべきイベントのシーケンスを識別し、次に選択したシーケンスを反映する新しい拡張ログを生成し得る。特定の例では、拡張ログは、図10に示した拡張ログ1010と同様であり、拡張ログエントリはログエントリ1006と同様であり得る。拡張ログが生成された後、仮想ディスクパーサ404は、ログエントリからのペイロード及び仮想ディスクファイル406からのデータを有するログエントリを生成するよう構成され得る。図14の説明を続けると、動作1428は、コンピュータシステムが、仮想ディスクファイルは拡張セクタサイズを有する第2の記憶装置に移動されたという決定に応答して、第2のログを生成する回路、及び第2のログエントリから得た第2のセクタのビットパターンと第1のログエントリから得た第1のセクタのビットパターンとを有する拡張ログエントリを第2のログに書き込む回路、を有し得ることを示す。例えば、仮想ディスクファイル406は、コンピュータシステム400から、同様の構成を有するが記憶装置のセクタサイズがより大きい異なるコンピュータシステムにコピーされると仮定する。例えば、記憶装置106のセクタサイズは4kbであり、より大きい記憶装置のセクタサイズは8kbであると仮定する。本例では、仮想ディスクパーサ404は、メモリ内で仮想ディスクファイル406を開き、ログ420を読み出し得る。仮想ディスクパーサ404は、より大きい記憶装置のセクタサイズがログエントリ内のペイロードよりも大きいと決定し、ログエントリのサイズを拡張することを決定し得る。次に、仮想ディスクパーサ404は、ログ420から得た複数のログエントリからのデータを含む拡張ログエントリを生成し得る。特定の例では、拡張ログは、図10に示した拡張ログ1010と同様であり、拡張ログエントリはログエントリ1008と同様であり得る。図15を参照すると、動作1500、1502、1504、1506、1508を含む動作手順を示す。動作1500は動作手順を開始する。動作1502は、コンピュータシステムが、仮想ディスクファイルのログにアクセスするよう構成される回路を含むことを示す。ここで、該ログは、連続的順序で書き込まれたログエントリを有する。例えば、仮想ディスクパーサ404は、ランダムアクセスメモリ104内で仮想ディスクファイル406を開き得る。仮想ディスクパーサ404は、仮想ディスクファイル406を読み出し、その中に格納されたログ420を検出し得る。特定の例では、ログ420は、図9のログ902又は906と同様であり得る。図15の説明を続けると、動作1504は、コンピュータシステム400がシーケンス内の各ログエントリが有効であるという決定に応答して、最新の有効なログエントリを有するログエントリのシーケンスを選択する回路を含み得ること、及び各ログエントリはログファイル内の不連続の後にログに書き込まれたことを示す。例えば、仮想ディスクパーサ404は、ログ420内の各ログエントリをスキャンし、各有効なログエントリが属するシーケンスを識別する情報のテーブルを生成し得る。例えば、ログ420がログ906と同様であると仮定すると、仮想ディスクパーサ404は、テーブル908と同様のテーブルを生成し得る。テーブル908が満たされ、2回目にスキャンされた後、仮想ディスクパーサ404は、最新のログエントリを含み各ログエントリが不連続の後にログに書き込まれた有効なエントリのシーケンスを選択し得る。この特定の例では、仮想ディスクパーサ404は、最近の有効なログエントリログエントリ14を含み各エントリが最近の不連続ログエントリ8が存在すべき場所に位置する不連続の後に書き込まれたシーケンス9-14を選択し得る。動作1506を参照すると、コンピュータシステム400が、ログエントリのシーケンスにより識別される仮想ディスクファイルのセクタに対する変更を適用する回路も含み得ることを示す。図9に戻り、ログ420がログ908と同様である例では、仮想ディスクパーサ404は、ログイベント9-14を再生することを決定し得る。仮想ディスクパーサ404は、ペイロード及び仮想ディスクファイルオフセット値を抽出し、仮想ディスク406にペイロードを書き込み得る。ペイロードの書き込みは、ディスクにそれらをコミットするために、記憶装置106にIOジョブを発行する。図16を参照すると、コンピュータシステムに実行され得る代替動作を示す。動作1608を参照すると、コンピュータシステムが、ログエントリのシーケンス内のログエントリに格納されたファイル識別子の終わりに基づき、仮想ディスクファイルのファイル識別子の終わりを変更する回路を含むよう構成され得ることを示す。例えば、仮想ディスクパーサ404は、仮想ディスクファイル406のEOFが記録されたものと異なることを示す選択されたシーケンス内の1又は複数のログエントリを検出するのに応答して、仮想ディスクファイル406のEOFを変更し得る。例えば、情報がEOFが記録は拡張されたと示す場合、仮想ディスクパーサ404は、ログエントリ内に存在するものと一致するよう、仮想ディスクファイル406を拡張し得る。動作1610を参照すると、一実施形態では、コンピュータシステムが、仮想ディスクファイルを格納する記憶装置のセクタサイズが増大したという決定に応答して、第2のログを生成する回路、及び仮想ディスクファイルから得たビットパターンとログ内のログエントリからのビットパターンとを有する拡張ログエントリを第2のログに書き込む回路を含み得ることを示す。例えば、仮想ディスクパーサ404は、仮想ディスクファイル406を開き、ログ420をスキャンし得る。仮想ディスクパーサ404は、ログ420が生成された記憶装置のセクタサイズを決定し、それを仮想ディスクファイル406を現在格納している記憶装置のセクタサイズと比較し得る。本例では、ログ420は異なるコンピュータシステム上に生成され、記憶装置106のセクタサイズは該異なるコンピュータシステムにより使用されるセクタサイズより大きいと仮定する。例えば、記憶装置106のセクタサイズは8kbであり、前に仮想ディスクファイル406を格納していた記憶装置のセクタサイズは4kbであると仮定する。この決定に応答して、仮想ディスクパーサ404は、新しい拡張ログを生成することにより、ログエントリのサイズを拡張し得る。’例示的な構成では、仮想ディスクパーサ404は、再生すべきログ420内のログエントリのシーケンスを決定し、シーケンス内の各ログエントリのために拡張エントリを生成し得る。仮想ディスクパーサ404は、シーケンス内の各ログエントリについて、記憶装置106により使用されるセクタサイズの複数倍に等しい特定の例では、8kbの複数倍に等しいペイロードを有する拡張エントリを生成し得る。次に、シーケンス内の各ログエントリについて、仮想ディスクパーサ404は、記憶装置106により使用されるセクタサイズ及び古いログエントリからの記述子を用いて、新しいログエントリが記憶装置106のセクタサイズと揃うようにペイロードを新しいログエントリのどこに挿入すべきかを決定し得る。最初の新しいログエントリについて、仮想ディスクパーサ404は、仮想ディスクファイル406からのデータを用いてペイロードの残りを満たし得る。そして、各後続のエントリについて、仮想ディスクパーサ404は、ディスク上のデータとシーケンス内の古いログエントリからのデータとの組合せを使用し得る。図16の説明を続けると、動作1612は、コンピュータシステム400が、仮想ディスクファイルを格納している記憶装置のセクタサイズが減少したという決定に応答して、第2のログを生成する回路、及びログ内のログエントリから得たビットパターンの一部を含む第1の縮小ログエントリ及びログ内のログエントリからのビットパターンの残りの部分を含む第2の縮小ログエントリを第2のログに書き込む回路を有し得ることを示す。例えば、仮想ディスクパーサ404は、基礎的記憶装置により使用されるセクタサイズがログ420内に示されるセクタサイズよりも小さいと決定するよう構成され得る。任意的構成では、仮想ディスクパーサ404は、仮想ディスクファイル406内に新しい縮小ログを生成し、記憶装置106のセクタサイズを用いて各ログエントリを複数のログエントリに分けることにより、再生すべき選択されたログエントリのシーケンスを縮小ログエントリに変換し得る。縮小ログエントリが生成されると、仮想ディスクパーサ404は、仮想ディスクファイル406にペイロードを適用することによりそれらを再生し得る。縮小ログエントリに関連付けてペイロードを書き込む動作により、1又は複数のIOジョブが記憶装置106に発行される。記憶装置106は、キャッシュ454内にIOジョブを格納し、そして最終的にそれらを仮想ディスクファイル406のディスク上コピーにコミットし得る。ログ420は縮小できるが、縮小される必要はない。より大きなセクタサイズのために生成されたログを、より小さいセクタサイズを有する装置で再生することは無難である。図16の説明を続けると、動作1614は、コンピュータシステムが、各ログエントリをログに書き込む前に、最古の未フラッシュログエントリの識別子を各ログエントリに追加する回路を更に含み得ることを示す。例えば、仮想ディスクパーサ404は、割り当てテーブル416に対する更新のような、仮想ディスクファイル406のメタデータを更新すると決定する。仮想ディスクパーサ404は、ログ420内の最古の未フラッシュログエントリを識別するメモリポインタを調べ得る。本例では、仮想ディスクパーサ404は、最古の未フラッシュログエントリの識別子、例えば識別したログエントリを格納するために使用される最初のセクタを示す仮想ディスクファイルオフセット、識別したログエントリのシーケンス番号、等を、生成した各ログエントリに追加するよう構成され得る。図16の説明を続けると、動作1616は、コンピュータシステム400が、後に書き込まれたログエントリが、フラッシュ済みログエントリは記憶装置にコミットされ仮想ディスクファイルに適用されたことを示す情報を含むという決定に応答して、フラッシュ済みログエントリを上書きする回路を更に有し得ることを示す。例えば、仮想ディスクパーサ404は、別のログエントリがフラッシュ済みログエントリは実際にフラッシュされたと示す情報を含む場合に、フラッシュされたログエントリを上書きするよう構成され得る。例示的な実施形態では、この情報は、より最近のログエントリの識別子の存在であり得る。別のログエントリ内にあるより最近のログエントリの識別子の存在は、より最近のログエントリの前のログエントリがディスクにフラッシュされたという事実を示す。例えば、図8のログ420-Fを参照する。ログエントリ4内のログエントリ4の識別子の存在は、ログエントリ1-3がフラッシュされたこと及び仮想ディスクファイル406に適用されたことを示す。図17を参照すると、動作1700、1702、1704及び1706を含む、コンピュータシステム400が実行するよう構成され得る動作手順を示す。動作1700は動作手順を開始する。動作1702は、コンピュータシステムが、仮想マシンの仮想ディスクをインスタンス化する回路を含むことを示す。ここで、該仮想ディスクは、仮想ディスクファイルによりバックアップされる。例えば、図4を参照すると、コンピュータシステム400は仮想ディスクパーサ404を有し、仮想ディスクパーサ404は仮想マシン410内の仮想ディスク402をインスタンス化し得る。図5を参照すると、仮想ディスク402は、仮想ディスクファイル406によりバックアップされ得る。言い換えると、仮想ディスクファイル406は、仮想ディスク402の基礎的データを格納し得る。図17の説明を続けると、動作1704は、限定ではなく、コンピュータシステムが、仮想ディスクファイルに書き込むべきビットパターンを決定する回路を更に含み得ることを示す。仮想ディスクパーサ404は、仮想マシン410からのIOジョブ又は特定の他の信号の受信に応答して、仮想ディスクファイルのメタデータを変更すると決定し得る。特定の例では、仮想ディスク402のブロックは仮想マシン410により書き込まれ、このブロックは仮想ディスクファイル406の任意の部分により記述されないと仮定する。仮想ディスクパーサ404は、仮想ディスクブロックを記述するために使用すべき仮想ディスクファイルのセクションを選択し、割り当てテーブル416のメモリ内コピーを更新し、仮想ディスクファイル406内に格納された、割り当てテーブル416のディスク上コピーに書き込むべき、仮想ディスクブロックを仮想ディスクファイルのセクションにリンク付けする情報を示すビットパターンを生成しても良い。図17の説明を続けると、動作1706は、コンピュータシステムが、ランダムアクセスメモリ内に格納されたログであって、順序付きログエントリを含むログに書き込むべきビットパターンを有するログエントリを生成する回路を有し得ることを示す。例えば、仮想ディスクパーサ404は、ログエントリを生成し、該ログエントリのペイロードセクションにビットパターンを書き込むよう構成され得る。図7を参照すると、特定の例示的な実施形態では、仮想ディスクパーサ404は、ログエントリ702、704又は706と同様のフォーマットを有するログエントリを生成し得る。本例では、ログエントリは、データがログエントリであることを識別するヘッダ、シーケンス番号、タイムスタンプ、セッション番号エントリのセッションを識別する等、ビットパターンを書き込むべき仮想ディスクファイル406内の位置を識別する記述子、及びビットパターン又はその一部を含むペイロードセクションを有し得る。図17に戻ると、動作1708は、限定ではなく、コンピュータシステムが、最古の未フラッシュログエントリの識別子をログに追加する回路を更に含み得ることを示す。例えば、仮想ディスクパーサ404は、ログ420内の最古の未フラッシュログエントリを識別するメモリポインタを調べ、ログエントリ内のこの未フラッシュエントリを識別するために使用できる情報を格納し得る。本例では、仮想ディスクパーサ404は、最古の未フラッシュログエントリの識別子、例えば識別したログエントリを格納するために使用される最初のセクタを示す仮想ディスクファイルオフセット、識別したログエントリのシーケンス番号、等を、生成した各ログエントリに追加するよう構成され得る。特定の例では、図8を参照し、ログ420はログ420-Aにより示した状態にあると仮定する。本例では、仮想ディスクパーサ404は、ログエントリ2を生成し、テイルのアドレスをログエントリ2のヘッダ、つまりログエントリ1が最古の未フラッシュエントリであることを識別する識別子に追加し得る。動作1710を参照すると、コンピュータシステムが、ログエントリをログに書き込む回路を更に含み得ることを示す。仮想ディスクパーサ404は、ログエントリをログ420に書き込み得る。ログエントリを示す1又は複数のIOジョブは、記憶装置106に発行され得る。これらの1又は複数のIOジョブは、それらが最終的に永続的記憶ユニット460、例えばディスクプラッタ、フラッシュRAM、等にコミットされるまで、キャッシュ454に格納され得る。図18を参照すると、図17に示した動作と共に実行され得る追加動作を示す。動作1812は、限定ではなく、コンピュータシステムが、フラッシュコマンドを記憶装置に発行する回路、記憶装置がフラッシュ動作を完了したと示す信号の受信に応答して、ログエントリからのビットパターンを仮想ディスクファイルに適用する回路を含むよう構成され得ることを示す。例えば、ログエントリがログ420に書き込まれた後のあるときに、仮想ディスクパーサ404は、記憶装置106にフラッシュコマンドを発行し、それにより、記憶装置106に保留中のIOジョブを永続的記憶ユニット460に書き込ませ、動作の完了を報告させる。仮想ディスクパーサ404が、フラッシュ動作が終了したと示す肯定応答を受信すると、仮想ディスクパーサ404は、仮想ディスクファイル406に今しがたフラッシュされたログエントリのペイロードセクションに変更を適用し得る。この結果、仮想ディスクファイル406に対する変更を示すIOジョブは、記憶装置106に発行される。仮想ディスクパーサ404は、任意的に別のフラッシュを発行し、これらのIOジョブに、これらのIOジョブが永続的記憶ユニット460にコミットされることを保証させる。しかしながら、これらのIOジョブは永続的ログにより記述されるので、フラッシュ動作は必要ない。図18の説明を続けると、動作1814は、例示的な実施形態では、コンピュータシステムが、動作1812を実行する回路を有し、電源障害が発生したという決定に応答して、記憶装置に格納されたログのコピーをスキャンする回路、シーケンス内の各ログエントリが有効であるという決定に応答して、ログのコピーからログエントリのシーケンスを選択する回路であって、該シーケンスは最新の有効なログエントリを含み、各ログエントリはログファイル内の不連続の後にログに書き込まれている、回路、並びにログエントリのシーケンスにより識別される仮想ディスクファイルのセクタに対する変更を適用する回路、を更に有し得ることを示す。例えば、電源障害は、コンピュータシステム400の動作中のあるときに、しかしログエントリがフラッシュされた後に生じ得る。コンピュータシステム400は再起動されても良く、仮想化システム420が実行されても良い。仮想ディスクパーサ404が動作し始め、仮想マシン410を起動する要求が受信されても良い。仮想ディスクパーサ404は、記憶装置106に格納された仮想ディスクファイル406の永続的コピーを開き、ログ420を読み出し得る。仮想ディスクパーサ404は、ログエントリを読み出し、再生すべき有効なログエントリのシーケンスを選択し得る。仮想ディスクパーサ404は、1又は複数の有効なログエントリを含むシーケンスを選択し得る。ここで、該シーケンスは最新のログエントリを有し、該シーケンスは不連続点を有しない。シーケンスが識別されると、仮想ディスクパーサ404は、シーケンスから1又は複数のペイロードを抽出し、それらを仮想ディスクファイル406に適用し得る。以上の詳細な説明では、例及び/又は動作図を介してシステム及び/又は処理の種々の実施形態を説明した。このようなブロック図、及び/又は例が1又は複数の機能及び/又は動作を含む限り、当業者は、このようなブロック図又は例に含まれる各機能及び/又は動作が、広範なハードウェア、ソフトウェア、ファームウェア又は実質的にこれらの如何なる組合せにより個々に及び/又は集合的に実施され得ることを理解する。本願明細書に記載された本発明の主題の特定の態様が示され説明されたが、当業者は、本願明細書の教示に基づき、本願明細書に記載された主題およびその広範な態様から逸脱することなく変更及び修正が為されても良く、したがって添付の請求の範囲が、その範囲内に、そのような全ての変更及び修正を本願明細書に記載された主題の真の精神及び範囲内にあるものとして包含することを理解する。"