仮想マシンのオンデマンド型イメージストリーミングのための方法であって、選択された仮想マシンと関連したイメージメタデータを、それぞれ1つ又は複数の仮想マシンに対応する1つ又は複数のイメージテンプレートを格納するストレージサーバから、ホストコンピュータのローカルストレージにコピーするステップであって、前記ホストコンピュータのローカルストレージは、最初に、前記選択された仮想マシンのイメージテンプレートを含まない、コピーするステップと、前記コピーされたイメージメタデータを用いて、前記ホストコンピュータにおいて前記選択された仮想マシンをブートするステップと、前記選択された仮想マシンが、前記ホストコンピュータにおいて前記選択された仮想マシンの実行を続行するのに必要とされるデータを、前記必要とされるデータが前記ホストコンピュータのローカルストレージ上に格納されていない場合に、前記ストレージサーバ上の前記イメージテンプレートから読み出すことを可能にするステップと、前記イメージテンプレートの前記読み出されたデータが前記ホストコンピュータのローカルストレージ上に格納されていない場合に、前記イメージテンプレートの前記読み出されたデータを、前記ストレージサーバから前記ホストコンピュータのローカルストレージにコピーするステップであって、同じデータに対する後の読み出しは前記ホストコンピュータのローカルストレージから行われる、コピーするステップと、前記読み出されたデータが前記ホストコンピュータのローカルストレージ上に格納されていることを示すように、ビットマップ内のビットを設定するステップと、リソースのアイドル時間を用いて、前記選択された仮想マシンと関連した前記イメージテンプレートのデータを、前記ストレージサーバから前記ホストコンピュータのローカルストレージにプリフェッチするステップと、を含む方法。前記イメージメタデータは、最初に、前記イメージテンプレート、及びビットを前記イメージテンプレートの対応するセクタにマッピングする前記ビットマップへの参照を含む、請求項1に記載の方法。イメージのプリフェッチ中に応答時間が監視され、応答時間が閾値を上回った場合、プリフェッチが一時的に停止される、請求項1に記載の方法。前記ビットマップのサイズは、前記ホストコンピュータのローカルストレージ上に格納された前記対応するイメージのサイズではなく、前記ストレージサーバ上の前記イメージテンプレートのサイズに比例する、請求項1に記載の方法。前記ビットマップの完全なコピーは、メモリ内に保持することができる、請求項1に記載の方法。その論理ブロックアドレスが前記ストレージサーバ上の前記イメージテンプレートの前記サイズを上回るセクタに対する、前記選択された仮想マシンの読み出し及び/又は書き込み要求は、前記ビットマップのチェック及び/又は前記ビットマップの更新を行わずに、直接、前記セクタを読み出すこと及び/又は前記ホストコンピュータのローカルストレージに書き込むことによって処理される、請求項1に記載の方法。前記プリフェッチの終了後、前記選択された仮想マシンにより発行される1つ又は複数のディスク読み出し及び/又は書き込み要求は、前記ビットマップのチェック及び/又は前記ビットマップの更新を行わずに、直接、前記ホストコンピュータのローカルストレージ上に格納されたイメージデータを用いて実行される、請求項1に記載の方法。前記ビットマップは、前記ホストコンピュータにおいてメモリ内及びディスク上に保持され、コピーオンリード操作は、前記インメモリビットマップを更新するだけであり、前記オンディスクビットマップを即時に更新しない、請求項1に記載の方法。コピーオンリード操作は、前記データを前記VMに戻すクリティカルパス上になく、前記データは、前記VMがバッキングイメージから読み出された前記データの処理を続行する間、バックグラウンドにおいて、ODSイメージに非同期的に保存される、請求項1に記載の方法。前記ストレージサーバ上の前記イメージテンプレート内のデータセクタが完全にゼロで埋められている場合、前記ホストコンピュータのローカルストレージ上に格納されている前記ビットマップ内の前記データセクタの初期状態は、あたかも前記データセクタが前記ホストコンピュータのローカルストレージに既にコピーされているように設定される、請求項1に記載の方法。前記方法は、ハイパーバイザにおいて実装され、前記選択された仮想マシンに対する修正なしに、前記ハイパーバイザの機能を提供する、請求項1に記載の方法。仮想マシンのオンデマンド型イメージストリーミングのための方法であって、仮想マシンと関連したイメージメタデータを、前記仮想マシンに対応するイメージテンプレートを格納するソースコンピュータから、ターゲットコンピュータにコピーするステップであって、前記ターゲットコンピュータは、最初に、前記仮想マシンの前記イメージテンプレートを含まない、コピーするステップと、前記コピーされたイメージメタデータを用いて、前記ターゲットコンピュータにおける前記仮想マシンをブートするステップと、前記ターゲットコンピュータにおける仮想マシンが、前記ターゲットコンピュータにおいて前記仮想マシンの実行を続行するのに必要とされる、前記ソースコンピュータ上の前記イメージテンプレートのデータを、前記イメージテンプレートの必要とされるデータが前記ターゲットコンピュータ上に格納されていない場合に読み出すのを可能にするステップと、前記イメージテンプレートの前記読み出されたデータが前記ターゲットコンピュータ上に格納されていない場合に、前記イメージテンプレートの前記読み出されたデータを前記ソースコンピュータから前記ターゲットコンピュータにコピーするステップであって、前記同じデータの後の読み出しは、前記ターゲットコンピュータにおいて前記コピーされたデータを読み出す、コピーするステップと、前記読み出されたデータが前記ターゲットコンピュータ上に格納されていることを示すように、ビットマップ内のビットを設定するステップと、を含む方法。前記イメージメタデータは、最初に、前記イメージテンプレート、及びビットを前記イメージテンプレートの対応するセクタにマッピングする前記ビットマップへの参照を含む、請求項12に記載の方法。前記ビットマップ内の前記ビットをチェックすることにより、前記仮想マシンの実行に必要とされる前記データが前記ターゲットコンピュータ上に格納されているかどうかを判断するステップをさらに含み、前記ビットマップ内の前記ビットに応じて、前記仮想マシンは、前記ソースコンピュータ又は前記ターゲットコンピュータからデータを読み出す、請求項12に記載の方法。リソースのアイドル時間を利用して、前記仮想マシンと関連した前記イメージテンプレートのデータを、前記ソースコンピュータから前記ターゲットコンピュータにプリフェッチするステップをさらに含む、請求項12に記載の方法。前記ステップは、前記ソースコンピュータから前記ターゲットコンピュータへの前記仮想マシンのライブマイグレーションのために実施され、別個のストレージサーバは用いられない、請求項12に記載の方法。選択された仮想マシンと関連したイメージメタデータを、それぞれ1つ又は複数の仮想マシンに対応する1つ又は複数のイメージテンプレートを格納するストレージサーバから、ホストコンピュータのローカルストレージにコピーするステップであって、前記ホストコンピュータのローカルストレージは、最初に、前記選択された仮想マシンのイメージテンプレートを含まない、コピーするステップと、前記コピーされたイメージメタデータを用いて、前記ホストコンピュータにおいて前記選択された仮想マシンをブートするステップと、前記選択された仮想マシンが、前記ホストコンピュータにおいて前記選択された仮想マシンの実行を続行するのに必要とされるデータを、前記必要とされるデータが前記ホストコンピュータのローカルストレージ上に格納されていない場合に、前記ストレージサーバ上の前記イメージテンプレートから読み出すことを可能にするステップと、前記イメージテンプレートの前記読み出されたデータが前記ホストコンピュータのローカルストレージ上に格納されていない場合、前記イメージテンプレートの前記読み出されたデータを、前記ストレージサーバから前記ホストコンピュータのローカルストレージにコピーするステップであって、同じデータに対する後の読み出しは、前記ホストコンピュータのローカルストレージから行われる、コピーするステップと、前記読み出されたデータが前記ホストコンピュータのローカルストレージ上に格納されていることを示すように、ビットマップ内のビットを設定するステップと、を含む、仮想マシンのオンデマンド型イメージストリーミングのための方法を実施するための、マシンにより実行可能な命令のプログラムを格納するコンピュータ可読ストレージ媒体。前記イメージメタデータは、最初に、前記イメージテンプレート、及びビットを前記イメージテンプレートの対応するセクタにマッピングする前記ビットマップへの参照を含む、請求項17に記載のコンピュータ可読ストレージ媒体。前記イメージメタデータは、ビットを前記イメージテンプレートの対応するセクタにマッピングする前記ビットマップをさらに含む、請求項18に記載のコンピュータ可読ストレージ媒体。前記ビットマップ内の前記ビットをチェックすることにより、前記選択された仮想マシンの実行に必要とされる前記イメージテンプレートの前記データが前記ホストコンピュータのローカルストレージ上に格納されているかどうかを判断するステップをさらに含み、前記ビットマップ内の前記ビットに応じて、前記選択された仮想マシンは、前記ストレージサーバ上の前記イメージテンプレート又は前記ホストコンピュータのローカルストレージ上のコピーされたイメージテンプレートを読み出す、請求項17に記載のコンピュータ可読ストレージ媒体。リソースのアイドル時間を利用して、前記選択された仮想マシンと関連した前記イメージテンプレートのデータを、前記ストレージサーバから前記ホストコンピュータのローカルストレージにプリフェッチするステップをさらに含む、請求項17に記載のコンピュータ可読ストレージ媒体。仮想マシンのオンデマンド型イメージストリーミングのためのシステムであって、仮想マシンと関連したイメージメタデータを、前記仮想マシンに対応するイメージテンプレートを格納するソースコンピュータからコピーするように動作可能であり、最初に、前記仮想マシンの前記イメージテンプレートを含まない、ターゲットコンピュータと、前記ターゲットコンピュータにローカルに取り付けられたストレージデバイスと、を含み、前記ターゲットコンピュータは、前記コピーされたイメージメタデータを用いて、前記ターゲットコンピュータにおける前記仮想マシンをブートし、且つ、前記ターゲットコンピュータにおける前記仮想マシンが、前記ターゲットコンピュータにおいて前記仮想マシンの実行を続行するのに必要とされる、前記ソースコンピュータ上の前記イメージテンプレートのデータを、前記イメージテンプレートの前記必要とされるデータが前記ターゲットコンピュータ上に格納されていない場合に読み出すことを可能にし、前記イメージテンプレートの前記読み出されたデータが前記ターゲットコンピュータ上に格納されていない場合に、前記イメージテンプレートの前記読み出されたデータを、前記ソースコンピュータから、前記ターゲットコンピュータにローカルに取り付けられた前記ストレージデバイスにコピーし、同じデータの後の読み出しは前記ターゲットコンピュータにローカルに取り付けられた前記ストレージデバイスから行われ、前記読み出されたデータが前記ターゲットコンピュータ上に格納されていることを示すように、ビットマップ内のビットを設定する、ようにさらに動作可能である、システム。前記イメージメタデータは、最初に、前記イメージテンプレートへの参照を含む、請求項22に記載のシステム。前記イメージメタデータは、ビットを前記イメージテンプレートの対応するセクタにマッピングする前記ビットマップをさらに含む、請求項23に記載のシステム。リソースのアイドル時間を利用して、前記仮想マシンと関連した前記イメージテンプレートのデータを、前記ソースコンピュータから前記ターゲットコンピュータにプリフェッチすることをさらに含む、請求項22に記載のシステム。仮想マシンのオンデマンド型イメージストリーミングのための方法及びシステムを提供する。本方法は、1つの態様において、選択された仮想マシンと関連したイメージメタデータを、それぞれ1つ又は複数の仮想マシンに対応する1つ又は複数のイメージテンプレートバッキングイメージとも呼ばれるを格納するストレージサーバから、ホストコンピュータのローカルストレージにコピーすることを含むことができ、ここで、ホストコンピュータのローカルストレージは、最初に、選択された仮想マシンのイメージテンプレートを含まない。本方法はまた、コピーされたイメージメタデータを用いて、ホストコンピュータにおいて選択された仮想マシンをブートすることと、選択された仮想マシンが、ホストコンピュータにおいて選択された仮想マシンの実行を続行するのに必要とされるデータを、該必要とされるデータがホストコンピュータのローカルストレージ上に格納されていない場合に、ストレージサーバ上のイメージテンプレートから読み出すことを可能にすることとを含むこともできる。本方法は、イメージテンプレートの読み出されたデータがホストコンピュータのローカルストレージ上に格納されていない場合に、イメージテンプレートの読み出されたデータを、ストレージサーバからホストコンピュータのローカルストレージにコピーすることをさらに含むことができる。同じデータに対する後の読み出しは、ホストコンピュータのローカルストレージから行われる。本方法はまた、読み出されたデータがホストコンピュータのローカルストレージ上に格納されていることを示すように、ビットマップ内のビットを設定することを含むこともできる。本方法は、リソースのアイドル時間を利用して、選択された仮想マシンと関連したイメージテンプレートのデータバッキングイメージを、ストレージサーバからホストコンピュータのローカルストレージにプリフェッチすることを含むこともできる。仮想マシンのオンデマンド型イメージストリーミングのための方法は、別の態様において、仮想マシンと関連したイメージメタデータを、その仮想マシンに対応するイメージテンプレートを格納するソースコンピュータから、ターゲットコンピュータにコピーすることを含むことができ、ここで、ターゲットコンピュータは、最初に、仮想マシンのイメージテンプレートを含まない。本方法はまた、コピーされたイメージメタデータを用いて、ターゲットコンピュータにおける仮想マシンをブートすることと、ターゲットコンピュータにおける仮想マシンが、ターゲットコンピュータにおいて仮想マシンの実行を続行するのに必要とされる、ソースコンピュータ上のイメージテンプレートのデータを、イメージテンプレートの必要とされるデータがターゲットコンピュータ上に格納されない場合に読み出すのを可能にすることとを含むこともできる。本方法はまた、イメージテンプレートの読み出されたデータがターゲットコンピュータ上に格納されていない場合に、イメージテンプレートの読み出されたイメージデータを、ソースコンピュータからターゲットコンピュータにコピーすることを含むことができ、ここで、同じデータの後の読み出しは、ターゲットコンピュータにおいてコピーされたデータを読み出す。本方法は、読み出されたデータがターゲットコンピュータ上に格納されていることを示すように、ビットマップ内のビットを設定することをさらに含むことができる。仮想マシンのオンデマンド型イメージストリーミングのためのシステムが、1つの態様において、仮想マシンと関連したイメージメタデータを、仮想マシンに対応するイメージテンプレートを格納するソースコンピュータからコピーするように動作可能であり、最初に、仮想マシンのイメージテンプレートを含まない、ターゲットコンピュータと、ターゲットコンピュータにローカルに取り付けられたストレージデバイスとを含むことができる。ターゲットコンピュータは、コピーされたイメージメタデータを用いて、ターゲットコンピュータにおける仮想マシンをブートし、且つ、ターゲットコンピュータにおける仮想マシンが、ターゲットコンピュータにおいて仮想マシンの実行を続行するのに必要とされる、ソースコンピュータ上のイメージテンプレートのデータを、イメージテンプレートの必要とされるデータがターゲットコンピュータ上に格納されていない場合に読み出すのを可能にするようにさらに動作可能であり得る。ターゲットコンピュータは、イメージテンプレートの読み出されたデータがターゲットコンピュータ上に格納されていない場合に、イメージテンプレートの読み出されたデータを、ソースコンピュータから、ターゲットコンピュータにローカルに取り付けられたストレージデバイスにコピーするようにさらに動作可能とすることができ、ここで、同じデータの後の読み出しは、ターゲットコンピュータにローカルに取り付けられたストレージデバイスから行われる。ターゲットコンピュータは、読み出されたデータがターゲットコンピュータ上に格納されていることを示すように、ビットマップ内のビットを設定するようにさらに動作可能とすることができる。本明細書で説明される1つ又は複数の方法を実施するための、マシンにより実行可能な命令のプログラムを格納するコンピュータ可読ストレージ媒体を提供することもできる。種々の実施形態の更なる特徴、並びに構造及び操作が、添付図面を参照して以下に詳細に説明される。図面において、同様の参照符号は、同一の要素又は機能的に類似する要素を示す。本開示の1つの実施形態における仮想マシンイメージのオンデマンド型イメージストリーミングondemandimagestreaming、ODSは、コピーオンライトcopyonwrite、CoW、コピーオンリードcopyonread、CoR、及びプリフェッチを実施することができる。コピーオンリードは、使用のために、コンピュータのホストマシンのローカルディスク例えば、直接接続型ストレージDAS上に戻されるセクタのコピーを保存することにより、データセクタを遠隔ストレージサーバ例えば、ネットワーク接続型ストレージNASから繰り返し読み出すことを回避する。プリフェッチは、アイドル時間を用いて、仮想マシンがまだアクセスしていない残りのイメージを、遠隔ストレージサーバ例えば、NASからローカルディスク例えば、DASにコピーする。コピーオンライト及びコピーオンリードの際、1つの実施形態における本開示は、ディスク上のデータ及びメタデータの両方を更新することを規定し、ここで、メタデータは、データが現在、遠隔ストレージサーバ例えば、NASの代わりに、ローカルディスク例えば、DAS内に格納されていることを示す。1つの実施形態における本開示のODSは、QEMUのための新しいイメージ形式と、対応するブロックデバイスドライバとを含むことができる。1つの実施形態における本開示のODSは、そのイメージがホストコンピュータの直接接続型ストレージ上に格納されている仮想マシンのために設計することができる。ODSの主要な使用例として、1遠隔ストレージサーバからDASへのVMのイメージテンプレートのコピーの終了を待つことのない、直接接続型ストレージ例えばDAS、即ちホストにとってのローカルディスク上での仮想マシンVMの即時作成、及び2DASを用いてVMをホストする、マシン間のライブVMマイグレーションを含むことができる。1つの実施形態における本開示のODSは、コピーオンライト及びコピーオンリードの両方を実施して、遠隔ストレージサーバ上のデータをホストのローカルディスクに徐々にもたらすことができる。多数のVMを有するクラウド環境において、コピーオンリードは、ストレージサーバ上に過度のネットワークトラフィック又は入力/出力I/O負荷をもたらし得る、遠隔ストレージサーバから同じデータセクタを繰り返し読み出すことを回避する。1つの実施形態における本開示のODSはまた、プリフェッチを実施することもできる。本開示のODSは、アイドル時間を見つけて、まだタッチされていないnotyettouchedイメージデータを遠隔ストレージサーバからホストのローカルディスクにコピーする。1つの実施形態におけるODSのイメージ形式は、1ヘッダ、2データセクタがローカルディスク上にあるのか又は遠隔ストレージサーバ上にあるのかを示すビットマップ、及び3raw形式で格納されたイメージコンテンツを含むことができる。図1は、1つの実施形態における本開示の仮想マシンVMのオンデマンド型ストリーミングにより実施されるシステムコンポーネント及び操作フローを示す図である。ストレージサーバ102は、対応する1つ又は複数の仮想マシンの1つ又は複数のイメージテンプレート104を格納する。ストレージサーバ102は、通常、仮想マシン106をホストするホストコンピュータ108から遠隔に配置され、ネットワーク110を介して接続される。ストレージサーバ102の一例は、NASサーバとすることができる。ストレージサーバ102は共有することができ例えば、共有ストレージサーバSONAS、且つ、ネットワークファイルシステムNFSを通じてエクスポートされたイメージテンプレートを保持することができる。ローカルディスク112の一例は、DASとすることができる。DASは一時ストレージephemeralstorageと考えることができるのに対して、NASは永続ストレージと考えることができる。一時ストレージは、ルートファイルシステムを収容するVMのディスクイメージを格納するために用いることができる。VMが終了すると、一時ストレージ上のデータは失われる。随意的に、ユーザは、永続ストレージをVMに取り付けることもできる。永続ストレージは、VMの寿命より長く存在し、例えば、これを用いて関係データベースの永続データを格納することができる。クラウド環境において、場合によってはハードウェアRAIDを用いずに、ホストのローカルディスクにより一時ストレージが提供される。VMは、ストレージサーバ102上に格納され、全てのホスト例えば、VMをホストする又は実行しているコンピュータ又はマシンにアクセス可能である、読み出し専用イメージテンプレート104に基づいて作成することができる。VMの仮想ディスク114は、ホストのファイルシステム内に、通常ファイル116として格納することができる。ホストコンピュータ計算ノード108は、KVMのようなハイパーバイザを含むことができる。ハイパーバイザ又は仮想マシンモニタは、所与のマシンハードウェア又はプロセッサ上で複数のオペレーティングシステムが同時に実行されるのを可能にするソフトウェアコンポーネントである。ハイパーバイザに応じて、仮想ディスク114のための多数の形式をサポートすることができる。例えば、KVM/QEMUは、仮想ディスクのための多数の形式をサポートする。KVMは、Linuxカーネルの仮想化インフラストラクチャである。KVMは、I/OエミュレーションのためにQEMUを使用する。RAW形式は、通常ファイル内に格納された物理ブロックデバイスのコンテンツのバイト単位コピーbytebycopyである。QCOW2は、QEMUによりサポートされる別のイメージ形式である。QCOW2イメージは、変更されたデータのみを格納し、変更されていないデータは、常にバッキングイメージ即ち、ストレージサーバ、例えば、NASから読み出される。最初に、ホストコンピュータ108のローカルディスク112は、選択された仮想マシン106を実行するためのイメージテンプレートを収容していない。VM106を起動又はブートする命令の受信に応答して、1つの実施形態における本開示のODSは、116に示されるように、小容量のイメージメタデータ118をストレージサーバ102からローカルディスク112にコピーする。イメージメタデータは、ヘッダ及びビットマップを含む。ヘッダはイメージテンプレートを識別し、ビットマップは、イメージテンプレートのどの部分例えば、セクタがローカルに格納されているかを識別するために用いられる。初期状態において、1つの実施形態におけるビットマップは、完全にゼロで埋められているイメージテンプレートのセクタを識別する。実行時に、ストレージサーバ102からローカルディスク112に、これらのゼロで埋められたセクタをコピーする必要はない。別の実施形態における本開示のODSは、116に示されるように、小容量のイメージメタデータ118を、ストレージサーバ102からローカルディスク112にコピーするステップを省略することができる。この場合、メタデータは、ローカルディスク112上のスクラッチから作成され、ビットマップ内の全てのビットは、全てのデータセクタがローカルに格納されていないことを示すように設定される。この形式的な実施形態は、イメージテンプレート内のゼロで埋められたセクタをコピーしないという利点を有する。VM106は、イメージメタデータ118を用いてブートされ、VM106が、そのブート及び実行のために用いるために、付加的なデータ104にアクセスし、これをストレージサーバ102から読み出すと、そのデータもまた、ローカルイメージ116としてローカルディスク112上にコピー及び保存される。ビットマップ内のビットもまた、イメージテンプレート104の対応するデータ部分又はセクタがローカルに格納されたことを示すように更新される。この次にVM106が同じデータにアクセスする必要があるときには、ネットワークを辿ってストレージサーバ102上のイメージテンプレート104にアクセスするのではなく、ローカルに格納されたバージョンが用いられる。本開示のODSの実行時操作は、バックグラウンドにおいて、ネットワークにわたるイメージデータの非同期式コピーオンリード、コピーオンライト、及びプリフェッチを含むことができる。非同期式コピーオンリードの場合、VM106が初めてセクタを読み出したとき、本開示のODSにより強化されたホストマシン108上のハイパーバイザが、ネットワーク110にわたって、遠隔ストレージサーバ102からセクタをフェッチする。バックグラウンドにおいて、1つの実施形態における本開示のODSにより強化されたホストコンピュータ108上のハイパーバイザは、セクタをそのローカルODSファイル116内に格納し、これに従ってビットマップを設定する。ビットマップは、ODSイメージの一部であり、且つ、ローカルディスク上に格納される。本開示の1つの実施形態において、セクタの後の読み出しは、常に、ローカルODSファイル116からデータを直接入手する。ローカルディスクへの直接書き込みコピーオンライトの場合、VMがセクタを書き込むとき、1つの実施形態における本開示のODSにより強化されたホストコンピュータ108上のハイパーバイザは、ストレージサーバ102から4KBデータをフェッチする必要なしに、ローカルODSファイル116に直接書き込みを行う。1つの実施形態における本開示のODSはまた、バックグラウンドにおいて、ネットワークにわたってイメージデータのプリフェッチを実施することもできる。バックグラウンド操作として構成可能なポリシーに導かれ、1つの実施形態における本開示のODSにより強化されたホストコンピュータ108上のハイパーバイザは、ストリーミング方式で、ネットワーク110にわたってrawイメージデータ104全体をプリフェッチし、データをローカルODSファイル116内に格納することができる。例えば、プリフェッチポリシーは、VM106が12時間実行された後、ネットワーク110及びストレージサーバ102上の作業負荷が軽くなる真夜中に、プリフェッチを開始できると指示することができる。その結果、この例示的なポリシーに従うと、その寿命が12時間より短いVMに対して、データはプリフェッチされない。1つの実施形態においては、システム管理者又は他のユーザがポリシーを設定することができる。図2は、本開示の1つの実施形態におけるODSイメージ形式の簡略化された図を示す。図2に示されるODS形式の仮想ディスクを、ホストマシン又はコンピュータ上で実行されている各々のVMについて割り当てることができる。1つの態様において、ODSイメージは、読み出し専用のバッキングイメージに基づいている。ODSヘッダ202は、仮想マシンのイメージテンプレートを識別するための、バッキングイメージ206への参照を格納する。バッキングイメージは、永続ストレージ内に格納された仮想マシンのイメージテンプレートを参照する。この参照は、仮想マシンのイメージテンプレートのファイル名、例えば、ODSイメージが基づくrawイメージの名称を格納する文字列とすることができる。他の参照を用いて、仮想マシンのイメージテンプレートを識別することができる。ODSイメージ形式はまた、例えば、仮想ディスクイメージ内の各々のデータセクタについて1ビットを有する、ビットマップ204も含む。このビットは、対応するセクタの現在のコンテンツがODSイメージ内に格納されているか、又はバッキングイメージ内に格納されているかを示す。例えば、その対応するセクタが既にrawイメージからODSイメージ内にコピーされている場合、又は、セクタが既にVMによりローカルに書き込まれている場合、ビットは1に設定される。本開示の1つの実施形態において、ビットマップのサイズは、イメージテンプレートのサイズに比例する。ODSブロックデバイスドライバは、例えば、ODS形式を理解し、VMが発行するディスク入力/出力I/O要求を処理する、QEMUにおいて実装される。イメージデータ208のためのスペースは、最初に空であってもよく、最初にデータが存在せず、最初にスペースを保持する必要がない。イメージデータ208のためのスペースのサイズは、イメージデータがコピーされるテンプレートイメージと同じになり得る。ODSイメージ形式はまた、拡張されたディスクデータのためのスペース210を含むこともできる。拡張されたディスクデータのためのスペース210は、任意のサイズのものとすることができ、いずれの時点でもサイズを変更して、イメージのサイズ変更をサポートすることができる。このスペース210に対して、テンプレートイメージ内に対応するデータは存在しない。さらに、このスペース210内のデータに対応するビットマップは必要とされない。従って、ビットマップのサイズは、拡張されたディスクデータのためのスペース210のサイズに依存せず、拡張されたディスクデータのためのスペース210に起因するODSイメージのサイズ変更は、ビットマップに影響を与えない。拡張されたディスクデータのサイズに関係なく、拡張されたディスクデータのためのスペースを付加するようにODSイメージをサイズ変更することは、一定時間の操作である。これには、ODSイメージのヘッダ内のdisk_sizeフィールドの変更しか必要としない。このスペース210内のデータは、ローカルにのみ使用することができる。拡張されたディスクデータのためのスペースは、随意的なものである。新しいVMを開始するために、ホストは、そのバッキングイメージ206への参照が、ストレージサーバ例えば、NAS内に格納されたイメージテンプレートを指し示す、ローカルディスク例えば、DAS上にODSイメージを作成する。例えば、ヘッダ及びビットマップのみを含むODSイメージを、ローカルディスク例えば、DASにコピーすることができる。次いで、いずれのイメージデータテンプレートイメージもストレージサーバ例えば、NASからローカルディスク例えば、DASにコピーすることなく、VMを即時にブートすることができる、即ち、ODSイメージのディスクデータのためのスペースセクション208は、最初は空である。一例として、10ギガバイトGBのオリジナルのrawイメージについて、ビットマップは、わずか2.5メガバイトMBとすることができる。新しいVMを作成し、ブートするときには、ネットワークにわたって、2.5MBのビットマップ小容量のヘッダフィールドをコピーするだけでよい。VMからのディスク書き込み要求を処理するとき、QEMUのODSドライバは、データをODSイメージ208内に格納し、それに従ってビットマップ204を更新することができる。この挙動は、コピーオンライトと呼ばれる。VMからのディスク読み出し要求を処理するとき、ODSドライバはビットマップ204をチェックして、要求されたデータがODSイメージ内に存在するかどうかを判断する。存在する場合、データは、ODSイメージから読み出され、VMに戻される。存在しない場合、データはバッキングイメージ206から読み出され、VMに戻される。VMが戻されたデータの処理を続行する間、バックグラウンドにおいて、戻されたデータのコピーがODSイメージ208内に保存され、それに従ってビットマップ204が更新されるので、同じデータに対する将来の読み出し要求は、ストレージサーバ例えば、NAS上のバッキングイメージ208からではなく、ローカルディスク例えば、DAS上のODSイメージからデータを取得する。この挙動は、コピーオンリードと呼ばれる。このコピーオンリードの挙動を用いて、データセクタを、ストレージサーバ例えば、NASから多くとも一度で読み出すことができ、そのことは、ストレージサーバ例えば、NAS上に過度なネットワークトラフィック及びI/O負荷を生成するのを回避する助けとなる。コピーオンリードは、バッキングイメージ206のコンテンツを、ストレージサーバ例えば、NASからホストコンピュータのローカルディスク例えば、DASに徐々にマイグレートする。ODSのプリフェッチメカニズムは、アイドルリソースをさらに活用して、データマイグレーションを加速することができる。表1は、本開示の1つの実施形態におけるディスク上のODSイメージの詳細なレイアウトの一例を示す。disk_dataセクションは、ディスクコンテンツをraw形式で格納することができる。disk_data[n512]において論理ブロックアドレスLBA=nを有するセクタのコンテンツを格納することができ、ここで512は、セクタサイズである。図3は、本開示の1つの実施形態におけるKVM/QEMUスタック例えばハイパーバイザ内のODSドライバを示す。Linuxカーネルのようなオペレーティングシステムカーネル302は、ハードウェアプロセッサ304上で実行することができる。オペレーティングシステムカーネル302は、例えばKVM、KVMの異なるベンダバージョンなどの複数のハイパーバイザプログラムを実行することができる。ハイパーバイザの別の例は、Xenである。ハイパーバイザプログラム306例えば、KVMは、ハードウェアプロセッサ304上で仮想マシン310を実行することを可能にする。さらに、ハイパーバイザプログラム306は、例えば、raw形式、qcow2形式、及び本開示のODS形式などの複数の仮想イメージ形式308をサポートすることができる。仮想マシン310の起動時に、仮想マシンは、対応する仮想ディスクローカルディスク上のイメージ形式308上の第1のセクタ例えば、512キロバイトKBを読み出そうと試みる。本開示のODSと共に機能するように拡張されたハイパーバイザプログラムは、ODSイメージがまだ仮想ディスクローカルディスク内に存在しないことを検出し、本開示のODS方法を開始する実行する。本開示のODSは、本明細書で記載されるように、必要とされるデータをストリーミングし、1つの実施形態においては、VMを殆ど即時にブートする。実装のために、他のコードを変更することなく、ods.c及びods.hを付加するように、ハイパーバイザユーザスペースプログラム例えば、qemu-kvmユーザスペースプログラムを変えることができる。特に、コンピュータノード例えば、Linuxのカーネルに対する変更を行う必要はない。図4及び図5は、RAWイメージ及びODSイメージを用いたVM作成の比較を示す。示される例は、同時に3つのVMを作成する。図4に示されるように、RAWイメージ形式を用いたVM作成プロセスは、イメージテンプレート全体がストレージサーバ例えば、NASからローカルディスク例えば、DASにコピーされるまで待つ必要があり、それによって初めてVMがブートされる。これは、VMブートプロセス中、コピーされるイメージデータの大部分が必要とされず、VMの寿命全体を通じてアクセスされることがない場合でさえ当てはまる。1つの実施形態における本開示のODS作成プロセスが、図5に示される。ODSは、ローカルディスク例えば、DAS上にいかなるイメージデータもない状態で、VMを即時にブートし、VMがデータにアクセスする際に、オンデマンドで、データをストレージサーバ例えば、NASからホストのローカルディスク例えば、DASにコピーする。さらに、ODSのプリフェッチメカニズムは、リソースのアイドル時間を見つけて、VMがアクセスしていないイメージの残りの部分又はイメージの部分を、ストレージサーバ例えば、NASからローカルディスク例えば、DASにコピーする。ODSがいずれかのリソース例えば、ストレージサーバ、ローカルディスク、又はネットワーク上の競合を検出した場合、ODSは一時的にプリフェッチを停止し、輻輳が消滅又は緩和した後で、プリフェッチを再開できるという点で、プリフェッチは保守的であり得る。別の実施形態においては、ひとたびイメージテンプレートの全体がプリフェッチ操作によりローカルディスクにコピーされると、本開示はまた、一般的なイメージテンプレートをホストのローカルディスク例えば、DAS上にキャッシュすることもできるので、キャッシュされたイメージテンプレートを用いて、新しいVMを即時に作成すること、即ち、キャッシュヒット時にイメージコピーステップを省くことができる。1つの実施形態における本開示のODSは、コピーオンリードを用いて、データが必要とされる際に、オンデマンドで、データセクタをストレージサーバ例えば、NASからローカルディスク例えば、DASにもたらすことができる。随意的に、ODSにおいて、使用されてないアイドルリソースを用いて、まだタッチされていないデータセクタをストレージサーバ例えば、図1の102からローカルストレージ例えば、図1の112にコピーするように、プリフェッチをイネーブルにすることができる。1つの実施形態における本開示のODSは、全イメージのプリフェッチを実施することができる。全イメージのプリフェッチにおいて、1つの実施形態における本開示のODSは、アイドルリソースを用いて、例えば、最初のデータセクタから最後のデータセクタまでなど、イメージ全体をストレージサーバ例えば、NASからローカルストレージ例えば、DASに連続的にコピーする。随意的に、局所性ベースのプリフェッチにおいて、1つの実施形態は、連続的な全イメージのプリフェッチを行う代わりに、既にアクセスされたデータセクタのものに密接に関連した、まだアクセスされていないデータセクタをプリフェッチすることができる。随意的に、プロファイルベースのプリフェッチにおいて、1つの実施形態は、オフラインで構築されるイメージテンプレートプロファイルに従って、まだアクセスされていないデータセクタをプリフェッチすることができる。プロファイルは、データセクタについてのプリフェッチの順序を、その重要性に基づいて優先順位付けすることができるか、又は、通常一緒にアクセスされるデータセクタを識別することができる、即ち、キャッシングの用語を用いて作業用セットを形成することができる。データセクタの状態が既にSin_odsである場合、そのデータセクタはプリフェッチ手順により省かれる。ひとたびプリフェッチが終了すると、ODSイメージ内に、例えばall_data_in_ods_imageフラグなどのフラグが設定される例えば、表1を参照されたい。次いで、バッキングイメージ内のそのデータは再び必要とされないことが先験的に分かっているので、VMが発行する全ての読み出し及び書き込み要求は、ビットマップをチェックすること又は更新することなしに、直接、ODSイメージのdisk_dataセクションに対して動作することができる。プリフェッチされるデータは緊急に必要とされないので、プリフェッチは、プロセッサ例えば、CPU、ストレージディスク例えば、DAS、NAS、及びネットワークを含むいずれかのリソース上の競合の発生を回避しようと試みる。ODSドライバは、ストレージサーバ例えば、NASからデータを読み出すための応答時間Tr、並びに、ローカルディスク例えば、DASにデータを書き込むための応答時間Twを監視する。Tr<Cr及びTw<Cwである場合、ODSドライバは、プリフェッチを続行し、ここでCr及びCwは、例えばCr=30ミリ秒ms、Cw=30msなどの2つの一定の閾値である。いずれかの応答時間が閾値を上回った場合、ODSドライバは、乱数を生成して、プリフェッチを一時停止するかどうかについての決定を行う。1つの実施形態において、ODSドライバは、50の確率でプリフェッチを続行し、50の確率で、一定の期間プリフェッチを一時停止する。プリフェッチを一時停止するように決定した場合、ODSドライバは後で起動し、少量のデータをストレージサーバ例えば、NASからローカルディスク例えば、DASに暫定的にコピーすることにより、リソースの競合が解消したかどうかを探る。ODSドライバは応答時間を監視し、プリフェッチを続行するか、又はスリープ状態に戻るかを決定する。応答時間が閾値を上回る場合にプリフェッチを一時停止するかどうかを決定する際のランダム性のために、本開示の1つの実施形態において、複数のODSインスタンスが互いに競合するとき、全てのODSインスタンスがプリフェッチを一時停止するまで、又はボトルネックリソースが競合から解放されるまで、各回のプリフェッチ操作の後に、アクティブにプリフェッチしているODSインスタンスの50が、プリフェッチを一時停止する。ノイズを低減させるために、応答時間は、指数移動平均として計算される。複数の同時ディスクI/O要求をサブミットするリソース管理システムとは異なり、1つの実施形態における本開示のODSのプリフェッチは、リソース消費に関して保守的であり得る。例えば、本開示のODSにおけるプリフェッチは、ストレージサーバ例えば、NAS上のバッキングイメージに対する多くとも1つの未処理の読み出し要求と、ローカルディスク例えば、DAS上のODSイメージに対する多くとも1つの未処理の書き込み要求とを保持する。本開示のODSにおけるプリフェッチは、ストレージサーバ例えば、NASから幾らかのデータセクタをプリフェッチした後、直ちに次の読み出し要求をストレージサーバ例えば、NASにサブミットし、且つ、同時に以前に戻されたデータをローカルディスク例えば、DASに書き込む。ネットワークの待ち時間が短くデータセンタ内にある場合のように、システムに競合がない場合、本開示のODSにおけるプリフェッチは、ストレージサーバ例えば、NAS又はローカルディスク例えば、DASを最大限の利用率まで推進することができる。いつプリフェッチが開始するかを制御するためのポリシーを指定することができる。例えば、高速のVM作成の使用事例において、寿命の短いVMに対してプリフェッチが実施されないように、VMが作成されてから12時間後にプリフェッチを開始するように構成することができる。VMマイグレーションを使用する場合、仮想ディスクイメージのマイグレーションがより早く終了できるように、VMがマイグレートされた直後に開始するようにプリフェッチを構成することができる。別の実施形態における本開示のODSは、ライブVMマイグレーションにおいて用いることができる。例えば、クラウド環境において、ライブVMマイグレーションの能力は、クラウドの保守及び操作を大きく強化する。例えば、時間の経過と共に、ホストが、ハードウェアの保守例えば、信頼できないCPUファンを交換する又はソフトウェアの保守例えば、セキュリティパッチをハイパーバイザに適用する。KVMの場合、ハイパーバイザはLinuxであるを必要とすることは避けられない。幾つかの保守操作は、ホストのリブートを必要とし、ホスト上で実行されているVMに対してダウンタイムを生じさせ得る。ライブVMマイグレーションの能力を用いて、ユーザに感知されるダウンタイムが存在しないように、保守操作が開始する前に、影響を受けるVMを他のホストにマイグレートすることができる。VMをソースホストからターゲットホストにマイグレートするために、全ての既存のハイパーバイザKVM、Xen、及びVMwareを含むは、ソースホスト及びターゲットホストの両方にアクセス可能な共用ストレージ上に、VMのイメージファイルを格納することを必要とする。DASを用いる場合でさえ、VMマイグレーションが成功するように、ソースホスト上のVMイメージファイルが、ターゲットホストにアクセスできるようにすることが依然として可能である例えば、NFSを通じて。しかしながら、この場合、ターゲットホスト上のVMにより生成される全てのディスクI/O要求は、ソースホストに向けられ、これにより処理される。ソースホストのリブートにより、イメージファイルが利用できなくなり、ターゲットホスト上で実行されているVMが故障する。1つの実施形態における本開示のODSは、ホストのローカルディスク例えば、DAS上で実行されているVMのライブマイグレーションをサポートする。図6は、本開示のODSによる、ローカルディスクを用いる仮想マシンのライブマイグレーションのためのシステムコンポーネント及び動作フローを示す。ソースホストは、物理コンピュータ又はマシンであり、そのローカルディスク510上のVMのODSイメージ504を用いてVM508を実行する。ターゲットホスト506は、VM508がマイグレートされる、別の物理コンピュータ又はマシンである。説明のために、ソースホスト502上のVM508をソースVMと呼び、ターゲットホスト506上のVMをターゲットVM512と呼ぶ。マイグレーションが開始する前に、ソースホスト502は、NFSを通じて、VMのイメージファイル504をターゲットホスト506にエクスポートし、その結果、イメージファイルは、ネットワークを通じてターゲットホストにアクセス可能になる。ターゲットホスト506は、そのローカルディスク514例えば、DAS上に、バッキングイメージとしてソースホストによりエクスポートされたイメージファイルを参照する又は指し示す。ODSイメージのメタデータのヘッダフィールドを有するODSイメージ516を作成する。次いで、VMのイメージファイル504をソースホスト502からターゲットホスト506に実際にコピーすることなく、VM508を即時にマイグレートすることができる。つまり、最初はバッキングイメージへの参照のみを含むODSイメージ516のみを用いて、ターゲットホスト506上でターゲットVM512をブートすることができる。ターゲットVM512はターゲットホスト506上で連続して実行されているので、1つの実施形態における本開示のODSは、ターゲットVM512が、コピーオンリードを通じてデータをもたらすことを可能にする。さらに、1つの実施形態における本開示のODSは、プリフェッチを用いて、イメージの残りをソースホスト502からターゲットホスト506にコピーする。ひとたびプリフェッチが終了すると、VMのイメージファイル504がターゲットホスト506に完全にコピーされ、ターゲットVM512は、もはや決してソースホスト502に依存しない。次いで、保守のためにソースホスト502をシャットダウンすることができる。ローカルストレージを用いた仮想マシンのライブマイグレーションに関する上述のODSプロシージャにより、ローカルストレージ上にデータを移動させることなく、VMを即時にマイグレートすることができる。マイグレートされたVMターゲットVMは、新しい位置で実行を続行することができ、データは、ターゲットVMがそれを必要とするときに、オンデマンドでコピーすることができる。ターゲットVMが生成した書き込みは、ローカルに格納される。リソースに関するアイドル時間を用いて、オリジナルのホストソースホスト上に残されたデータをプリフェッチする。ひとたび全てのデータがソースホストからターゲットホストにプリフェッチされると、マイグレーションは完全に終了する。図7は、新しいVMを作成するための、1つの実施形態における仮想マシンのオンデマンド型イメージストリーミング方法を示すフロー図である。602において、本方法は、それぞれ1つ又は複数の仮想マシンに対応する1つ又は複数のイメージテンプレートを格納するストレージサーバから、選択された仮想マシンと関連したイメージメタデータを、ホストコンピュータのローカルストレージにコピーすることを含むことができる。ホストコンピュータのローカルストレージは、最初は、選択された仮想マシンのイメージテンプレートを含まない。604において、本方法は、コピーされたイメージメタデータを用いて、ホストコンピュータにおいて選択された仮想マシンをブートすることを含むことができる。606において、本方法は、選択された仮想マシンが、ホストコンピュータにおいて選択された仮想マシンの実行を続行するのに必要とされるデータを、該必要とされるデータがホストコンピュータのローカルストレージ上に格納されていない場合に、ストレージサーバ上のイメージテンプレートから読み出すのを可能にすることを含むことができる。608において、本方法は、イメージテンプレートの読み出されたデータがホストコンピュータのローカルストレージ上に格納されていない場合に、イメージテンプレートの読み出されたデータを、ストレージサーバからホストコンピュータのローカルストレージにコピーすることを含むことができる。同じデータに対する後の読み出しは、ホストコンピュータのローカルストレージから行われる。610において、本方法は、読み出されたデータがホストコンピュータのローカルストレージ上に格納されていることを示すように、ビットマップ内のビットを設定することを含むことができる。612において、選択された仮想マシンによるイメージテンプレートへのデータ書き込みは、ホストコンピュータのローカルストレージに書き込まれる。614において、リソースのアイドル時間を用いて、選択された仮想マシンと関連したイメージテンプレートのデータを、ストレージサーバからホストコンピュータのローカルストレージにプリフェッチすることができる。別の態様において、イメージのプリフェッチ中、応答時間を監視することができ、例えば応答時間が閾値を上回る場合など、長い応答時間が検出された場合、プリフェッチを一時的に停止することができる。1つの態様において、ストレージサーバからコピーされるイメージメタデータは、最初は、イメージテンプレートへの参照を含む。ビットを、イメージテンプレートの対応するセクタにマッピングするビットマップにより、ホストコンピュータのローカルストレージにおいてイメージメタデータを増強することができる。別の態様において、ストレージサーバからコピーされたイメージメタデータはまた、イメージテンプレートへの参照に加えて、このビットマップを含むこともできる。仮想マシンの実行に必要とされるデータについてのビットマップ内の対応するビットをチェックして、選択された仮想マシンを実行するのに必要とされるイメージテンプレートのデータが、ホストコンピュータのローカルストレージ上に格納されているかどうかを判断する。ビットマップ内のビットに応じて、選択された仮想マシンは、ストレージサーバ上のイメージテンプレート、又はホストコンピュータのローカルストレージ上のコピーされたイメージテンプレートを読み出す。ストレージサーバ及びホストコンピュータは、例えば、クライアントのために複数の仮想マシンがクラウドにインストールされているクラウド環境内のコンピュータとすることができる。図8は、例えばVMのライブマイグレーションのための、仮想マシンのオンデマンド型ストリーミングのための方法を示すフロー図である。702において、本方法は、仮想マシンと関連したイメージメタデータを、仮想マシンに対応するイメージテンプレートを格納するソースコンピュータからターゲットコンピュータにコピーすることを含むことができる。ターゲットコンピュータは、最初は、仮想マシンのイメージテンプレートを含まない。704において、本方法は、コピーされたイメージメタデータを用いて、ターゲットコンピュータにおいて仮想マシンをブートすることを含むことができる。706において、本方法は、イメージテンプレートの必要とされるデータがターゲットコンピュータ上に格納されていない場合、ターゲットコンピュータにおける仮想マシンが、ターゲットコンピュータにおける仮想マシンの実行を続行するのに必要とされる、ソースコンピュータ上のイメージテンプレートのデータを読み出すのを可能にすることを含むことができる。708において、本方法は、イメージテンプレートの読み出されたデータがターゲットコンピュータ上に格納されていない場合、イメージテンプレートのデータの読み出されたデータをソースコンピュータからターゲットコンピュータにコピーすることを含むことができる。同じデータに対する後の読み出しは、ターゲットコンピュータのコピーされたデータから行われる。710において、本方法は、読み出されたデータがターゲットコンピュータ上に格納されていることを示すように、ビットマップ内のビットを設定することを含むことができる。712において、仮想マシンのデータ書き込みは、ターゲットコンピュータに書き込まれる。714において、リソースのアイドル時間を用いて、仮想マシンと関連したイメージテンプレートのデータを、ソースコンピュータからターゲットコンピュータにプリフェッチすることができる。1つの態様において、ソースコンピュータからコピーされたイメージメタデータは、最初は、イメージテンプレートへの参照を含む。ビットを、イメージテンプレートの対応するセクタにマッピングするビットマップにより、ターゲットコンピュータにおいてイメージメタデータを増強することができる。別の態様において、ソースコンピュータからコピーされたイメージメタデータはまた、イメージテンプレートへの参照に加えて、このビットマップを含むこともできる。仮想マシンの実行に必要とされるデータについてのビットマップ内の対応するビットをチェックして、仮想マシンの実行に必要とされるイメージテンプレートのデータがターゲットコンピュータ上に格納されているかどうかを判断する。ビットマップ内のビットに応じて、仮想マシンは、ソースコンピュータ上のイメージテンプレート、又はターゲットコンピュータ上のコピーされたイメージテンプレートを読み出す。図8に示される方法は、別個のストレージサーバを用いる必要なしに、直接、ソースコンピュータからターゲットコンピュータへの仮想マシンのライブマイグレーションを実施することができる。そのイメージファイルをマイグレートすることなく、VMを即時にマイグレートすることができる。VMはターゲットホスト上で連続して実行されているので、1つの実施形態における本開示のODSは、コピーオンリード及びプリフェッチを用いて、イメージファイルをソースホストからターゲットホストに徐々にマイグレートすることができる。ひとたびプリフェッチが終了すると、VMはもはやソースホストに依存する必要はなく、ソースホストは、保守のためにシャットダウンすることができる。1つの態様において、異なる使用事例をサポートするように、ODSの特徴コピーオンライト、コピーオンリード、及びプリフェッチを個々にイネーブルにすることができる。図9-図12は、1つの実施形態における本開示のODSの異なる特徴の可能な異なる使用事例を示す。図9では、ODSにおいて、コピーオンライトのみがイネーブルにされる。この最も基本的な構成は、以下の利点を提供しながら、QEMUの既存のCOWイメージ形式の置換として用いることができる。:即ち、1ODSはQEMUのcache=noneオプション及びcache=writethroughオプションを尊重し、停電の際に、データの完全性を保証する。2ODSのビットマップセクション及びディスクデータセクションは、ページ境界上に適切に整合され、優れた性能を提供する。クラウド環境及び非クラウド環境とすることができる図9の設定において、ODSイメージ及びイメージテンプレートについてのストレージ選択肢は、柔軟性がある。両方をホストのローカルディスク例えば、DAS上に格納することができ、両方をストレージサーバ例えば、NAS上に格納することができ、又は一方がホストのローカルディスク例えば、DAS上に格納され、他方がストレージサーバ例えば、NAS上に格納される。図10及び図11における設定は、イメージテンプレートがストレージサーバ例えば、NAS上に格納され、ODSイメージがホストコンピュータのローカルディスク例えば、DAS上に格納されるクラウド環境にとって適したものとなり得る。これらは、高速のVM作成をサポートし、且つ、イメージテンプレートのコンテンツをODSイメージ内に徐々にマイグレートし、ネットワーク及びストレージサーバNAS上の過剰な負荷を回避することができる。図12は、イメージテンプレートがストレージサーバ例えば、NAS上に格納され、3つのODSイメージが全てホストコンピュータのローカルストレージ例えば、DAS上に格納されている設定を示す。この設定は、複数のVMが、別個のコピーオンライトODSイメージを使用するが、ローカルストレージ例えば、DAS上にイメージテンプレートのコンテンツのミラーを提供するODSCoRプリフェッチイメージの、単一の読み出し専用コピーを共有することを可能にする。この設定は、イメージテンプレートのコンテンツを、遠隔ネットワークストレージサーバ例えば、NASからホストコンピュータのローカルストレージ例えば、DASに、異なるVMごとにその都度、複数回コピーすることを回避する。本開示はまた、データの完全性も提供する。以下のイベントが連続して発生したと仮定する。即ち、1VMがディスク書き込み要求をサブミットする、2ODSドライバが何らかの処理の後で書き込み操作が成功裡の完了したことを確認応答する、及び3ホストが即時に停電する。電力の復旧後、同じセクタに対するVMの次の読み出しは、故障以前に書き込まれたコンテンツを入手しなければならない。上記の表1は、本開示の1つの実施形態におけるディスク上のODSイメージの例示的なレイアウトを示す。1つの実施形態における本開示のODSイメージは、停電がいつ発生するかに関わりなく、データの完全性を保持する。例えば、コピーオンライト及びコピーオンリードを実施するとき、1つの実施形態における本開示のODSは、ディスクデータ及びビットマップを別個に更新することができる。下記で説明されるように、1つの実施形態における本開示において、2つの更新間の停電により、依然としてデータの完全性は損なわれない。ビットマップ内のビットは、それぞれ、対応するセクタのコンテンツがバッキングイメージ内又はODSイメージ内にあることを意味する2つの状態、すなわちSin_backing=0又はSin_ods=1の一方とすることができる。セクタの状態は、Sin_backingからSin_odsにしか変更することができず、決して、Sin_odsからSin_backingに変更することはできない。セクタの状態をSin_backingからSin_odsに変更することができる2つのシナリオ、即ちコピーオンライト及びコピーオンリードが存在する。コピーオンライトは、ODSがVMからのディスク書き込み要求を処理するときに発生する。簡潔にするために、以下の議論は、書き込み要求が2つのディスクセクタd1、d2にわたると仮定する。ビットd1及びビットd2は、それぞれ、ビットマップにおけるd1及びd2の状態を示すものとする。書き込み操作の前には、ビットd1=Sin_backing且つbitd2=Sin_backingであるとさらに仮定する。より多くのデータセクタが関与し、異なる初期状態を有する他の場合は、以下の例と同様の方法で分析することができる。ODSにおける書き込み要求の処理は、次の一連の操作を含むことができる。:即ち、ODS-W1:VMが2つのセクタd1、d2に関する書き込み要求を発行する。ODS-W2:ODSドライバは、d1を、ディスク上のODSイメージのdisk_dataセクション内に格納する。ODS-W3:ODSドライバは、d2を、ディスク上のODSイメージのdisk_dataセクション内に格納する。ODS-W4:ODSドライバは、ビットd1をSin_backingからSin_odsに更新する。ODS-W5:ODSドライバは、ビットd2をSin_backingからSin_odsに更新する。ODS-W6:ODSドライバは、書き込み操作の完了をVMに確認応答する。ビットd1及びビットd2は同じセクタに属することができるので、ODS-W4及びODS-W5は、単一の更新で実施できることに留意されたい。最悪の場合の分析を考慮して、最悪の場合の分析のために、ODS-W4及びODS-W5を分離する。上記のいずれかのステップの後で、ホストが故障し得る。本開示は、ODSが、故障に関係なくデータの完全性を保持することを示す。特に、ODSは、RAWイメージ形式に生じ得るよりも多くの複雑さをもたすものではない。つまり、ODSにおけるデータの完全性は、少なくともRAWイメージ形式におけるデータの完全性と同じくらいに良好である。VMがRAWイメージ形式を使用する場合、このディスク書き込みの処理は、以下の一連の操作を含む。即ち、RAW-W1:VMが2つのセクタd1、d2に関する書き込み要求を発行する。RAW-W2:RAWドライバは、d1をディスク上に格納する。RAW-W3:RAWドライバは、d2をディスク上に格納する。RAW-W4:ODSドライバは、書き込み操作の完了をVMに確認応答する。VMの書き込み操作の前に、d1及びd2の古いコンテンツがバッキングイメージ内に格納される。VMの書き込み操作の後、それらの新しいコンテンツが、ODSイメージ内に格納される。ここで、ODSの故障例を1つずつ考慮する。:即ち、ODS-W1の後の故障。この場合、ODSの挙動は、RAW-W1の後でRAWイメージ形式に停電があるのと同等である。その影響は、書き込み操作が単純に失われることであり、ドライバがまだ書き込みの完了をVMに確認応答していなかったので、これは許容される正しい挙動である。ODS-W2の後の故障。この場合、d1はODSイメージに書き込まれるが、ビットd1は更新されず、Sin_backingのままである。電力の復旧後、VMの次のd1に対する読み出しは、あたかもODSイメージ内の新しいd1コンテンツが存在しないかのように、バッキングイメージからそのコンテンツを取得する。この挙動は正しく、RAW-W1の後でRAWイメージ形式に停電があるのと同等である。その影響は、書き込み操作が単純に失われることであり、ドライバがまだ書き込みの完了をVMに確認応答していなかったので、これは許容される正しい挙動である。ODS-W3の後の故障。上記の場合と同様に、電力の復旧後、VMの次のd1又はd2に対する読み出しは、あたかもODSイメージ内に新しいコンテンツが存在しないかのように、バッキングイメージから古いコンテンツを入手する。この挙動は正しく、RAW-W1の後でRAWイメージ形式に停電があるのと同等である。ODS-W4の後の故障。電力の復旧後、VMの次のd1に対する読み出しはODSイメージからその新しいコンテンツを入手するのに対して、VMの次のd2に対する読み出しは、バッキングイメージからその古いコンテンツを入手するビットd1=Sin_odsであり、且つ、ビットd2=Sin_backingであるため。この挙動は正しくRAW-W2の後でRAWイメージ形式に停電があるのと同等である。ODS-W5の後の故障。電力の復旧後、VMの次のd1又はd2に対する読み出しは、ODSイメージから新しいコンテンツを入手するビットd1=Sin_odsであり、且つ、ビットd2=Sin_odsであるため。この挙動は正しく、RAW-W3の後でRAWイメージ形式に停電があるのと同等である、即ち、書き込み操作は完了しているが、まだ確認応答されていない。ODS-W6の後の故障。電力の復旧後、VMの次のd1又はd2に対する読み出しは、ODSイメージから新しいコンテンツを入手するビットd1=Sin_odsであり、且つ、ビットd2=Sin_odsであるため。この挙動は正しく、RAW-W4の後でRAWイメージ形式に停電があるのに相当する。上記の分析は、1つの実施形態における本開示のODSが、コピーオンライト中にデータの完全性を保持し得ることを証明する。また、同様のプロセスの後、1つの実施形態における本開示のODSが、最初にODSイメージのディスクデータセクションを更新し、次いでビットマップセクションを更新する、正しい更新シーケンスに従うことにより、コピーオンリード中にデータの完全性を保持し得ることも証明することができる。1つの実施形態における本開示のODSの実装は、ディスクの入力/出力I/Oオーバーヘッドを低減させることができる。例えば、RAWイメージ形式に比べると、ODSの単純な実装では、ビットマップの読み出し及び書き込み時にオーバーヘッドが生じ得る。最悪の場合、VMからの一組の連続した書き込み要求が、ホストのファイルシステム上に、次の書き込みシーケンス、即ち、書き込みs1、書き込みビットs1、書き込みs2、書き込みビットs2、書き込みs3、書き込みビットs3等を生成し得る。ここで、s1、s2、及びs3は、連続した論理ブロックアドレスを有するセクタであり、ビットsiは、ビットマップ内のsiの対応するビットである。この例において、ディスクヘッドは、ODSイメージのディスクデータセクションとビットマップセクションとの間を前後に移動することができる。本開示の1つの実施形態においては、最も一般的な場合における、データの完全性を損なわずに、ビットマップの更新と関連したオーバーヘッドをなくすための技術が提示される。クラウド環境において、VMのイメージテンプレートのサイズは、典型的には、そのVMに対して割り当てられる一時ストレージスペースephemeralstoragespaceよりもずっと小さい。例えば、DAS上で実行されている周知のVMに許容される最大のイメージテンプレートサイズは10GBであり、一方、そのVMに与えられる一時ストレージスペーススペースは、170GB又はそれ以上である。イメージテンプレートに基づいてVMのルートディスクを拡張すること、又は、付加的な仮想ディスクをVMに取り付けることのいずれかにより、VMに付加的な一時ストレージスペースを与えることができる。別の周知のクラウドは、企業の顧客をターゲットとしており、より柔軟な構成を提供する。このクラウドにより、VMが10GBよりもずっと大容量のルートディスクを使用することが可能になる。以下は、クラウドにおいて、Linuxイメージテンプレートを準備するプロセスである。イメージテンプレートは、RAWイメージ形式を用いる。初期のイメージテンプレートサイズは50GBであると仮定する。イメージテンプレートは最初に、必要なソフトウェアがインストールされ、十分に試験される。次いで、resize2fsツールを用いて、イメージテンプレート内のext3ファイルシステムをその最小サイズにサイズ変更する例えば、50GBから12GBに至るまで。最後に、最小のファイルシステムサイズに適合するように、イメージテンプレートを切り捨てる例えば、50GBから12GBまで。サイズ変更ステップ及び切り捨てステップは、インストール及び試験の際に生成された不要なデータgarbagedataを取り除き、最小サイズのイメージテンプレートを形成する。小容量のイメージテンプレートは、イメージテンプレートに基づいて新しいVMを作成する際に、NASからDASに転送されるデータの量を減らす助けとなる。上記の例を受けて、12GBのイメージテンプレートを用いて、ユーザの支払額に応じて、ルートディスクのサイズが変わり得るVMを作成することができる。例えば、次のQEMUコマンドは、NFS上に格納された12GBのイメージテンプレートに基づいて、DAS上に100GBのODSイメージを作成する。即ち、qemuimgcreatefodsbnfstemplaterawvmods100Gfdiskを用いて仮想ディスクのパーティションサイズを12GBから100GBに拡張した後、resize2fsを用いて、ODSイメージ内のext3ファイルシステムを12GBから100GBに拡張することができ、これが、VMの大容量のルートファイルシステムとなる。ファイルシステムの拡張のためにresize2fsを用いることは、ブロックの再配置を必要としないため、迅速な操作であることに留意されたい。表1に示されるODSイメージ形式において、ディスクデータサイズは、VMにより認識されるODSイメージのサイズであり、有効バッキングイメージサイズは、バッキングイメージのサイズである。上記の例においては、ディスクデータサイズ=100Gであり、有効バッキングイメージサイズ=12Gである。図2は、ODSイメージをバッキングイメージより大容量のものにし得る概念を示す。そのバッキング論理ブロックアドレスLBAがバッキングイメージのサイズを上回るデータセクタの場合、そのコンテンツはバッキングイメージ内に存在することができず、ODSイメージ内にのみ存在することができる。セクタの状態は先験的に知られているので、ODSイメージのビットマップセクションにおいてセクタの状態を捕捉する必要はない。その結果、ビットマップのサイズは、ODSイメージのサイズではなく、バッキングイメージのサイズに比例する。10GBのバッキングイメージを指し示す2TBのODSイメージの場合、ビットマップのサイズはわずか2.5Mである。サイズが小さいため、ビットマップ全体をメモリ内に容易にキャッシュすることができ、それにより、ディスクからビットマップを繰り返し読み出すオーバーヘッドが回避される。周知のクラウドにおいて、10GBは、DAS上で実行されているVMに許容される最大のイメージテンプレートサイズである。その論理ブロックアドレスLBAがバッキングイメージのサイズを上回るセクタSの場合、VMからの読み出し要求を処理するとき、ODSドライバは、単にLBAに基づいて、このセクタがバッキングイメージ内に存在し得ないことを知っており、従って、ODSイメージのディスクデータセクションからこのセクタを読み出す。セクタSについてVMからの書き込み要求を処理するとき、ODSドライバは、データをディスクデータセクションに直接書き込み、ビットマップを更新する必要はない実際には、ビットマップ内のセクタSについての対応するビットさえ存在しない。イメージテンプレートはresize2fsにより最小サイズに低減され、イメージテンプレート内のデータは、テンプレートの性質上、大部分が読み出し専用であるので例えば、プログラム実行ファイル、VMターゲットセクタからの大部分のディスク書き込み要求は、そのアドレスがバッキングイメージのサイズを上回るものである。これらの書き込み要求について、ODSドライバは、データをローカルディスク例えば、DASに直接書き込み、ビットマップの更新におけるオーバーヘッドは存在しない。本開示の1つの実施形態において、多くのデータセクタがゼロで埋められている疎sparseイメージテンプレートについて1つの最適化が以下に説明される。RAWイメージテンプレートimage.rawについては、qemu-imgツールを用いて、そのバッキングイメージがimage.rawであるODSイメージテンプレートimage.odsを作成することができる。image.odsのサイズは、image.rawのサイズと同一である。image.odsを作成するとき、qemu-imgは、ゼロで埋められたセクタSを検索し、ビットマップ内のその状態をSin_odsに設定することができる。非ゼロのセクタについての状態は、Sin_backingに設定される。実行時に、VMが、その状態がSin_odsであるセクタSを読み出すとき、ODSドライバは、ODSイメージのディスクデータセクションから読み出しを行い、ゼロで埋められたセクタが戻されるが、これは望ましい挙動である。このことは、ODSイメージがホストのファイルシステム上に疎ファイルとして格納され、セクタSは以前に書き込まれたことがなく、従って、ホストのオペレーティングシステムOSがゼロで埋められたセクタを戻すことに起因している。ODSイメージテンプレートimage.odsは、image.rawと共にNAS上に格納される。ホスト上に新しいVMを作成するとき、ホストは、image.odsをストレージサーバ例えば、NASからローカルストレージ例えば、DASにコピーし、image.odsをより大きいターゲットサイズにサイズ変更する。ディスクデータセクションが空であり、従ってimage.odsのサイズは小さいので、image.odsのコピーは高速である。具体的には、10GBのimage.rawについて、image.odsは、わずかに約2.5MBである。image.odsのより大きい仮想ディスクへのサイズ変更は、表1内のdisk_data_sizeフィールドをより大きい値に更新することだけを含むことができる。VMがブートすると、ODSドライバは、disk_data_sizeフィールドにより示されるサイズまで、ディスクデータセクションを自動的に切り捨てる。VMがブートすると、ODSドライバは、ODSイメージのビットマップセクションを、ディスクから、データセクタの初期状態を収容するメモリ内にロードする。本開示において、これらの2つのビットマップのコピーは、それぞれ、オンディスク状態ondiskstate及びインメモリ状態inmemorystateと呼ばれる。実行時に、ODSドライバは、インメモリ状態を常に最新に保持するが、ディスクのI/Oオーバーヘッドを減らすために、オンディスク状態の更新をゆっくりとlazily行うことができる。しかしながら、停電時に、オンディスク状態内の古い情報がデータの完全性を損なうことはないことが保証される。VMが、そのインメモリ状態がSin_odsであるセクタを読み出すとき、ODSドライバは、そのセクタをODSイメージから読み出し、それをVMに戻す。付加的なオーバーヘッドは関与しない。VMが、そのインメモリ状態がSin_backingであるセクタを読み出すとき、ODSドライバは、そのセクタをバッキングイメージから読み出し、それをVMに戻す。VMが戻されたデータの処理を続行した後、バッググラウンドにおいて即ち、非同期的に、ODSドライバは、セクタのコンテンツをODSイメージのディスクデータセクション内に書き込み、セクタのインメモリ状態をSin_backingからSin_odsに更新する。しかしながら、セクタのオンディスク状態は更新されず、Sin_backingのままであり、それにより、ディスクのI/Oオーバーヘッドが低減される。インメモリ状態のダーティdirtyビットをフラッシュし、オンディスク状態を、定期的に例えば、1時間ごとに又はVMがシャットダウンしたときに、ゆっくりと更新することができる。オンディスク状態が更新される前にホストが停電した場合、電力の復旧後、ODSドライバは、古いオンディスク状態をメモリ内に再ロードし、セクタの状態はSin_backingとして認められる。このセクタに対するVMの次の読み出しを処理するとき、ODSドライバは、再びコピーオンリードプロセスを繰り返す:即ち、バッキングイメージからセクタを読み出し、それをVMに戻し、非同期的にODSイメージに書き込み、インメモリ状態をSin_backingからSin_odsに更新する。コピーオンライト中にオンディスク状態を直ちに更新せずに、VMは、復旧後に依然として正しいセクタコンテンツを入手するが、VMは、既にODSイメージにコピーされたセクタのコンテンツを無視し得る。VMがセクタに書き込むとき、ODSドライバは、オンディスク状態インメモリ状態ではなくをチェックして、適切なアクションを判断する。セクタのオンディスク状態がSin_odsである場合セクタのインメモリ状態もまたSin_odsである、ODSドライバは、セクタをODSイメージに直接書き込み、書き込み操作が完了したことをVMに通知する。ビットマップの更新オーバーヘッドは関与しない。セクタのオンディスク状態がSin_backingである場合セクタのインメモリ状態は、Sin_backing又はSin_odsである、ODSドライバは、セクタをODSイメージに書き込み、オンディスク状態をSin_odsに更新しインメモリ状態が現在Sin_backingである場合、同じくそのインメモリ状態をSin_odsに更新する、書き込み操作の完了をVMに通知する。この場合、ODSドライバは、オンディスク状態を更新するオーバーヘッドを受けることがある。別の実施形態において、メモリオーバーヘッドを低減させる非同期的式実装を提供することができる。QEMU内の全てのブロックデバイスドライバは、同期I/Oと非同期I/Oの両方を行うためのAPIを提供する、BlockDriverインターフェースを実装する。同期I/Oは、ブロックデバイスが、一度に1つの未処理のI/O要求だけを処理することを可能にする。非同期I/Oは、ブロックデバイスドライバに、コールバック関数を通じてI/O操作の完了をVMに通知させることにより、ブロックデバイスが、複数の未処理のI/O要求を同時に処理することを可能にする。1つの実施形態における本開示のODSは、非同期インターフェースを実装する。幾つかの厄介な場合では、同一のデータセクタに対するコピーオンライト及びコピーオンリードの実行は、慎重に処理される。VMが、そのインメモリ状態がSin_backingであるデータセクタdに対する読み出し要求Rdをサブミットし、次いで読み出しが終了する前に、同一のデータセクタdに対する書き込み要求Wdをサブミットすると仮定する。これを処理するとき、ODSドライバは、次の順序で操作を終了すると仮定する。:即ち、1.Rdに関するコピーオンリード操作の一部として、セクタの古いコンテンツをバッキングイメージから読み出す。2.Wdに関するコピーオンライト操作の一部として、セクタの新しいコンテンツをODSイメージに書き込む。3.Rdに関するコピーオンリード操作の一部として、セクタの古いコンテンツをODSイメージに書き込む。同一のデータセクタに関してコピーオンライト及びコピーオンリードを行う際に、競合状態が生じ得る。ODSイメージ内に残されるのは、セクタの古いコンテンツであり、これは正しくない結果である。この及び他の類似した競合状態を適切に処理するために、データセクタdに関してコピーオンリードを実施する前に、ODSドライバは、dに関して1つの未処理のコピーオンライト操作が存在するかどうかをチェックする。存在する場合、コピーオンリード操作を断念する。同様に、データセクタdに関してコピーオンライトを実施する前に、ODSドライバは、dに関して1つの未処理のコピーオンリード操作が存在するかどうかをチェックする。存在する場合、コピーオンライト操作は、未処理のコピーオンリード操作が終了するまで遅延され、これにより、新しいコンテンツがディスク上に残されることが保証される。1つの実施形態における本開示のODSは、次の最適化を実施することができる。:即ち、ODSイメージのビットマップセクションのサイズは、ODSイメージのサイズではなくバッキングイメージのサイズに比例する。10GBのバッキングイメージを指し示す2TBのODSイメージについては、ビットマップのサイズはわずか2.5MBである。10GBは、DAS上で実行されている周知のクラウドのVMに許容される最大イメージテンプレートサイズであることに留意されたい。ビットマップのサイズが小さいため、ビットマップの完全なコピーをメモリ内に保持して、オンディスクビットマップを繰り返し読み出す際のオーバーヘッドを回避することができる。ひとたびプリフェッチが終了すると、ODSイメージは、RAWイメージとほとんど同じように働く。VMにより発行されるディスク読み出し又は書き込み要求は、インメモリビットマップのチェック又はオンディスクビットマップの更新におけるいずれのオーバーヘッドもなしに、ODSイメージのディスクデータセクションに対して実行される。その論理ブロックアドレスがバッキングイメージのサイズを上回るセクタに関するVMの読み出し又は書き込み要求を処理するとき、ODSドライバは、インメモリビットマップのチェック又はオンディスクビットマップの更新におけるいずれのオーバーヘッドもなしに、ODSイメージのディスクデータセクションを直接読み出す又は書き込む。インメモリ状態が既にSin_odsであるセクタに関するVMの読み出し要求を処理するとき、セクタは、オンディスクビットマップの更新におけるオーバーヘッドなしに、ODSイメージから直接読み出される。コピーオンリード操作は、インメモリビットマップを更新するだけであり、オンディスクビットマップを直ちに更新するわけではない。コピーオンリード操作は、データをVMに戻すクリティカルパス上にない。VMがバッキングイメージから読み出されたデータの処理を続行する間、データは、バックグラウンドにおいて、ODSイメージに非同期的に保存される。オンディスク状態が既にSin_odsであるセクタに関するVMの書き込み要求を処理するとき、オンディスクビットマップの更新におけるオーバーヘッドは存在しない。バッキングイメージ内のセクタが完全にゼロで埋められている場合、ODSイメージのオンディスクビットマップにおける初期状態をSin_odsに設定できるので、セクタの読み出し又は書き込みは、あたかもそのセクタが既にODSイメージ内にあるかのように扱われ、オンディスクビットマップの更新におけるオーバーヘッドは存在しない。ODSイメージのサイズ変更は、表1に示されるレイアウト内のdisk_data_sizeフィールドを更新することのみを必要とする、一定時間操作である。1つの実施形態における本開示のODSの考えは、コピーオンライト、コピーオンリード、及びプリフェッチを含む。理論的には、コピーオンリード及びプリフェッチを、QEMUにより既にサポートされている既存のコピーオンライト形式例えば、CoW及びQCOW2で実装することが可能であり、このことにより、新しいイメージ形式を導入する複雑性が回避される。1つの実施形態における本開示の新しいODSイメージ形式は、最も一般的な場合、高い性能を達成する。COW形式は、ODS形式とほとんど同一である。COW形式はまた、ヘッダ、ビットマップセクション、及びディスクデータセクションを含む。COWドライバの現在の実装は、QEMUのcache=noneオプション及びcache=writethroughオプションを無視する。その結果、これは、停電の場合に、ディスクデータを破損し得る。この実装問題は、潜在的に解決することができるが、COW形式自体は、そのディスクデータセクションが4KBページ境界上に整列されないという、基本的な限界を有する。VMの読み出し又は書き込み要求が仮想ディスクの4KBページ境界上に整合される場合でも、要求がCOWイメージのディスクデータセクション上で動作するように変換された後、要求は、もはやホストファイルシステムの4KBページ境界上に整合され得ない。ホストのページキャッシュは4KBページ上で動作するので、不整合misaligned要求により、ホスト上に複数のディスクI/Oがもたらされ得る。例えば、ホスト内で、VMにより発行されたうまく整合された4KB書き込みが、不整合の4KB書き込みに変換されることがあり、これは、非効率的な読み出し-修正-書き込み挙動、即ち、8KBを読み出し、4KBを修正し、8KBを書き込み戻す挙動をもたらす。1つの実施形態における本開示のODS形式は、表1内に示されるパディングpaddingセクションを付加して、bitmapビットマップセクション及びdisk_dataディスクデータセクションが、4KBページ境界上に適切に整合されることを保証することにより、この問題に対処する。QCOW2は、QEMUのネイティブ形式である。QCOW2は、疎ファイルに対してホストファイルシステムのサポートを利用する代わりに、疎イメージファイルをサポートするために、それぞれの2レベル索引を実装するという点で、COW及びODSとは著しく異なる。この索引は、論理ブロックアドレスを、ブロックのコンテンツが実際に格納されているイメージファイル内の位置にマッピングする。このアドレスマッピングの柔軟性により、QCOW2が、スナップショット及び圧縮のような高度な機能を提供することが可能になる。他方、QCOW2の2レベル索引は、特に付加的なディスクが索引を読み出そうとする又は更新しようとするときにも、オーバーヘッドを受ける。ODSにおける最適化に比べて、コピーオンリード及びプリフェッチにより強化されたQCOW2の潜在的な実装には、次の制限がある:即ち、索引のサイズは、小容量のバッキングイメージのサイズではなく、大容量のQCOW2イメージのサイズに比例する。その結果、索引をメモリ内に完全にキャッシュすることができない。プリフェッチが終了した後でも、VMにより発行される読み出し要求を処理するために、依然としてオンディスク索引を読み出す必要があり、これは、追加のディスクI/O操作を意味する。プリフェッチが終了した後でも、VMにより発行される書き込み要求を処理するために、オンディスク索引を読み出す及び潜在的に書き込む必要がある。その論理ブロックアドレスがバッキングイメージのサイズを上回るセクタに関するVMの読み出し又は書き込み要求を処理するとき、依然として索引の読み出し又は書き込みを行う必要がある。コピーオンリード及びプリフェッチ操作は、索引全体をメモリ内に保持することができないので、オンディスク索引をより頻繁に更新する可能性が高い。本開示のODSにおける最適化により、最も一般的な場合、オンディスクビットマップの更新におけるオーバーヘッドがなくなる。これとは対照的に、QCOW2の2レベル索引によっては、同じレベルの最適化を達成することはできない。QCOW2の高度な機能即ち、スナップショット、圧縮、及び暗号化はクラウドにおいて使用されないので、1つの実施形態における本開示は、より良好な性能を提供するより単純なイメージ形式、即ちODS形式を選ぶことができる。QCOW2のスナップショット能力は、クラウドにとって有用となる可能性が最も高い。クラウドは、典型的には、2つのスナップショット様の機能:即ち、1信頼できるバックアップ、及び、2イメージ様のものをバンドルし、即ち、ルートファイルシステムのスナップショットを取り、それをイメージテンプレートに変換して、将来再利用するためにそのイメージテンプレートをクラウドに登録すること、を提供する。しかしながら、QCOW2のスナップショットは、DAS上のQCOW2イメージ内に格納され、従って、バックアップメカニズムとしては信頼できるものではなく、別のホスト上に新しいVMを作成するためのイメージテンプレートとして用いることができない。1つの実施形態における本開示は、高速の仮想マシンVM作成及びクラウドにおける良好な実行時性能の両方をサポートすることができる。既存の解決策には、2つの制限:即ち、1作成前にイメージ全体をコピーすることに起因する、遅いVM作成時間例えば、KVMにおけるrawイメージ形式ドライバ、2遠隔ストレージサーバからデータを繰り返し読み出すことに起因する、実行時の高ネットワークトラフィック及び劣った性能例えば、KVMにおけるqcow2イメージ形式ドライバ、のうちの少なくとも1つがある。1つの実施形態において、本開示のオンデマンド型イメージストリーミングODSは、高速のVMプロビジョニング及び良好な実行時性能の両方を提供することができる。本開示のODSは、新しいodsイメージ形式及び対応するドライバを用いて、ハイパーバイザを強化することができる。幾つかの既存のクラウドにおいて用いられるrawイメージ形式に比べて、ODSは、プロビジョニング時のみならず、VMの寿命全体においても、ストレージサーバ上に導入するネットワークトラフィック及び入力/出力I/O負荷が少ない。幾つかの既存のクラウドにおいて用いられるrawイメージ形式とは異なり、ODSは、ネットワークにわたってイメージテンプレートの完全なコピーを作成することなく、VMをブートすることができる。ODSは、VMを即時にブートし、次いで、VMがデータブロックにアクセスすると、オンデマンドで、ストレージサーバからデータブロックをフェッチすることができる。コピーオンライトのみを実施し、コピーオンリードは実施しないので、同一のデータブロックをストレージサーバから繰り返し読み出すことができるQCOW2イメージ形式とは異なり、1つの実施形態における本開示のODSは、多くとも一回データブロックをストレージサーバから読み出し、次いでそのブロックを、後で再利用するためにローカルディスク上に格納することができる。ODSがQCOW2に優る本開示の別の利点は、ローカルディスク内のQCOW2のデータレイアウトはrawイメージ形式のものとは異なるが、一方、本開示のODSのデータブロックのレイアウトは、rawイメージ形式のものと同一であり得るという点である。その結果、ODSの実行時性能は、QCOW2のものより優れたものであり得る。実験は、1本開示のODSが、ネットワークにわたって17メガバイトMBを下回るデータを転送しながら、周知のオペレーティングシステムサーバを14秒以内でブートできること、及び、2ODSの実行時性能が、rawイメージ形式と同じように良好であるという結果を示す。別の実施形態において、本開示のODSは、ディスク、ネットワーク、及びCPUのようなリソースが他の点ではアイドル状態であるとき又はアイドル状態である間、バックグラウンドにおいて、VMイメージ全体をストレージサーバからプリフェッチする高度な機能をさらに含むことができる。この機能は、VM作成時に待機し、VMイメージ全体をコピーするのではなく、ネットワーク待ち時間を隠し、リソースの消費を均等に分散させる。本開示のODSを、クラウド環境において用いることができる。ODSはまた、非クラウド環境において用いることもできる。さらに、ODSは、例えば、高性能のCoW形式として働くように、コピーオンライトだけをイネーブルにした状態で用いることができる。さらに、ODSの実装は、ゲストVMハイパーバイザ等の上で実行されている選択されたVMに対してトランスペアレントにすることができ、従って、広範囲に適用可能である。本開示のODSを、ハイパーバイザの一部として、又は、ハイパーバイザ若しくは同様の機能への拡張機能として実装し、例えば、ゲストVMに対するいかなる修正もなしに、ハイパーバイザの全ての機能を提供することができる。ODSの能力、即ち、コピーオンライト、コピーオンリード、及びプリフェッチは、いずれの既存のハイパーバイザによっても提供されない。ODSイメージのビットマップセクションのサイズは、ODSイメージのサイズではなく、バッキングイメージのサイズに比例する。さらに、ビットマップのサイズが小さいことに起因して、ビットマップの完全なコピーをメモリ内に保持することができ、このことは、オンディスクビットマップを繰り返し読み出す際のオーバーヘッドを回避する。1つの態様において、コピーオンリード操作は、インメモリビットマップを更新するだけでよく、オンディスクビットマップを直ちに更新する必要はなく、このことは、ディスクのI/Oオーバーヘッドを減らす助けとなる。その論理ブロックアドレスがバッキングイメージのサイズを上回るセクタに関するVMの読み出し及び/又は書き込み要求を処理するとき、ODSドライバは、インメモリビットマップのチェック及び/又はオンディスクビットマップの更新における如何なるオーバーヘッドもなしに、ODSイメージのディスクデータセクションに直接読み出す及び/又は書き込む。また、ひとたびプリフェッチが終了すると、VMにより発行されたディスク読み出し及び/又は書き込み要求は、インメモリビットマップのチェック及び/又はオンディスクビットマップの更新におけるいずれのオーバーヘッドもなしに、ODSイメージのディスクデータセクションに対して実行される。別の態様において、コピーオンリード操作が、データをVMに戻すクリティカルパス上になくてもよく、VMがバッキングイメージから読み出されたデータの処理を続行している間、バックグラウンドにおいて、データをODSイメージに非同期的に保存することができる。さらに別の態様において、バッキングイメージ内のデータセクタが完全にゼロで埋められている場合、ODSイメージのオンディスクビットマップにおける初期状態は、あたかもセクタがODSイメージ内に既に存在するかのように設定され、このことは、オンディスクビットマップの更新、及びストレージサーバからのデータセクタの読み出しにおけるオーバーヘッドを回避する。当業者には認識されるように、本発明の態様は、システム、方法又はコンピュータプログラム製品として具体化することができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態ファームウェア、常駐ソフトウェア、マイクロコード等を含む、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、本明細書においては、これらを全て、一般的に、回路、モジュール又はシステムと呼ぶことがある。さらに、本発明の態様は、媒体内に具体化されたコンピュータ可読プログラムコードを有する、1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータプログラム製品の形態をとることができる。1つ又は複数のコンピュータ可読媒体のいずれの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子的、磁気的、光学的、電磁気的、赤外線若しくは半導体のシステム、機器若しくは装置、又はこれらのいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例非網羅的なリストとして、以下のもの、即ち、1つ又は複数の配線を有する電気的接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM、読み出し専用メモリROM、消去可能なプログラム可能読み出し専用メモリEPROM又はフラッシュメモリ、光ファイバ、ポータブルコンパクトディスク型読み出し専用メモリCD-ROM、光記憶装置、磁気記憶装置、又はこれらのいずれかの適切な組み合わせが挙げられる。本明細書の文脈においては、コンピュータ可読ストレージ媒体は、命令実行システム、機器若しくは装置によって又はそれらと関連して用いるためのプログラムを収容又は格納することが可能ないずれかの有形媒体とすることができる。コンピュータ可読信号媒体は、例えばベースバンドに、又は搬送波の一部として、コンピュータ可読プログラムコードが組み入れられた伝搬データ信号を含むことができる。このような伝搬信号は、電磁気、光又はそれらのいずれかの適切な組み合わせを含むがこれらに限定されない、種々の形態のうちのいずれかをとることもできる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置若しくはデバイスによって又はこれらと関連して用いるためのプログラムを通信、伝搬又搬送することができる、いずれかのコンピュータ可読媒体とすることができる。コンピュータ可読媒体上に具体化されたプログラムコードは、これらに限定されるものではないが、無線、有線、光ファイバケーブル、RF等、又はこれらのいずれかの適切な組み合わせを含む、いずれかの適切な媒体を用いて伝送することができる。本発明の態様についての操作を実行するためのコンピュータプログラムコードは、Java、Smalltalk、C等のようなオブジェクト指向型プログラミング言語、及びCプログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語のいずれかの組み合わせで書くことができる。全体がユーザのコンピュータ上で実行される場合もあり、独立型ソフトウェアパッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は全体が遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいては、遠隔コンピュータは、ローカルエリアネットワークLAN若しくは広域ネットワークWANを含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある例えば、インターネットサービスプロバイダを用いたインターネットを通じて。本発明の態様は、本明細書において、本発明の実施形態による方法、装置システム及びコンピュータプログラム製品のフローチャート図及び/又はブロック図を参照して説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図におけるブロックの組み合わせは、コンピュータプログラム命令によって実装できることが理解されるであろう。これらのコンピュータプログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて、マシンを製造し、その結果、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するための手段を生成するようになる。これらのコンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、その結果、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。コンピュータプログラム命令をコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、そのコンピュータ、他のプログラム可能装置、又は他のデバイス上で一連の動作ステップを行わせてコンピュータ実装プロセスを生成し、それにより、そのコンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施するためのプロセスを提供するようにすることもできる。図面内のフローチャート及びブロック図は、本発明の種々の実施形態による、システム、方法及びコンピュータプログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実行するための1つ又は複数の実行可能な命令を含む、モジュール、セグメント又はコードの一部を表すことができる。幾つかの代替的な実施において、ブロック内に記された機能は、図面内に記された順序とは異なる順序で行われることがあることにも留意すべきである。例えば、連続して示された2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックは、ときには逆の順序で実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェアベースのシステム、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装することができることにも留意されたい。本開示のシステム及び方法は、1つ又は複数のプロセッサ及び/又はコア、メモリ、及びコンピュータ処理システムを実装する他のシステムコンポーネント図には明示的に示されていない、又はコンピュータプログラム製品を実行することができるコンピュータを収容する処理ユニットを含むコンピュータシステムおいて実施若しくは実行することができる。コンピュータプログラム製品は、例えば、ハードディスク、コンパクトディスクのようなコンパクトストレージ媒体、又は実行のためにコンピュータプログラム製品を処理システムに提供するための、当業者には周知の又は周知になるであろういずれかの技術により、処理ユニットによって読み出すことができる他のストレージデバイスのような媒体を含むことができる。コンピュータプログラム製品は、本明細書で説明される方法の実施を可能にし、且つ、コンピュータシステム内にロードされたとき、方法を実行することができる、それぞれの機能の全てを含むことができる。コンピュータプログラム、ソフトウェアプログラム、プログラム、又はソフトウェアは、本文脈においては、情報処理機能を有するシステムに、直接的に、又はa別の言語、コード、若しくは表記法への変換、及び/又はb異なる材料形態の複製、のいずれか又はその両方の後において、特定の機能を実行させるように意図された命令のセットの、いずれかの言語、コード、又は表記法でのいずれかの表現を意味する。本開示のシステム及び方法を実行するコンピュータ処理システムはまた、出力表示を提示し、且つ、ユーザがデータを入力し、例えば、キーボード及びマウスデバイス又はポインティングデバイスなどの入力デバイスと協働して処理システムと対話することができる表示を提供するための、モニタ又は表示画面のような表示装置を含むこともできる。コンピュータ処理システムはまた、プリンタ、スキャナ、スピーカ及びいずれかの他のデバイスなどの1つ又は複数の周辺機器に、直接的に又は遠隔接続を介して接続又は結合することもできる。コンピュータ処理システムは、ローカルイーサネット、WAN接続、インターネット等のいずれか1つ又は複数を介して、又は異なるコンピューティングシステムを接続し、それらが互いに通信するのを可能にするいずれかの他のネットワーキング方法を介して、サーバ、他の遠隔コンピュータ処理システム、ネットワークストレージデバイスのような1つ又は複数の他の処理システムに接続又は結合することができる。本開示のシステム及び方法の種々の機能及びモジュールは、異なる処理システム上、又は、例えばネットワーク上に局所的に若しくは分散して格納されたデータにアクセスするいずれかの単一のプラットフォーム上に実装又は分散実行することができる。本明細書で用いられる用語は、特定の実施形態を説明するためのものであり、本発明を限定することを意図するものではない。本明細書で用いられる場合、単数形の不定冠詞a、an及び定冠詞theは、文脈から明らかにそうではないことが示されていない限り、複数形も含むことが意図される。含むcomprise及び/又は含んでいるcomprisingという用語は、本明細書において用いられる場合、言及した特徴、整数、ステップ、動作、要素、及び/又はコンポーネントの存在を指定するが、1つ又は複数のその他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。以下の特許請求の範囲における全ての手段又はステップと機能との組合せミーンズ又はステッププラスファンクション要素の対応する構造、材料、動作及び均等のものは、明確に特許請求されている他の特許請求された要素と組み合わせてその機能を実行するための、いかなる構造、材料又は動作をも含むことが意図される。本発明の説明は、例証及び説明の目的で提示されたものであるが、網羅的であることを意図するものでもなく、開示された形態の発明に限定することを意図するものでもない。本発明の範囲及び思想から逸脱することのない多くの修正及び変形が、当業者には明らかであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明するように、及び、当業者が、企図される特定の使用に適するように種々の修正を伴う種々の実施形態について本発明を理解することを可能にするように、選択され、説明された。本開示の種々の態様が、プログラム、ソフトウェア、又は、コンピュータ、プロセッサ及び/又はマシン上で実行されたときに、コンピュータ若しくはマシンに方法のステップを実行させる、コンピュータ若しくはマシン使用可能媒体若しくは可読媒体において具体化されたコンピュータ命令として具体化することができる。本開示において説明される種々の機能及び方法を実行するために、マシンにより実行可能な命令のプログラムを実体的に具体化する、マシン可読のプログラムストレージデバイスも提供される。本開示のシステム及び方法は、汎用コンピュータ又は専用コンピュータシステム上で実装又は実行することができる。コンピュータシステムは、いずれのタイプの周知の又は周知になるであろうシステムとすることができ、且つ、典型的には、プロセッサ、メモリデバイス、ストレージデバイス、入力/出力デバイス、内部バス、及び/又は通信ハードウェア及びソフトウェア等と共に他のコンピュータシステムと通信するための通信インターフェースを含むことができる。本出願において用いることができるコンピュータシステム及びコンピュータネットワークという用語は、固定型及び/又は携帯型のコンピュータ、ハードウェア、ソフトウェア、周辺機器、及びストレージデバイスの種々の組み合わせを含むことができる。コンピュータシステムは、協働して実行するようにネットワーク化された又は他の方法で接続された複数の個々のコンポーネントを含むことができる。本出願のコンピュータシステムのハードウェア及びソフトウェアコンポーネントは、デスクトップ、ラップトップなどの固定型デバイス及び携帯型デバイス、及び/又はサーバを含むことができ、且つ、これらの内部に含まれ得る。モジュールは、デバイスのコンポーネント、ソフトウェア、プログラム、又は何らかの機能を実装するシステムとすることができ、これらは、ソフトウェア、ハードウェア、ファームウェア、電子回路等として具体化することができる。上述の実施形態は、説明に役立つ実例であり、本発明がこれらの特定の実施形態に制限されると解釈すべきではない。従って、添付の特許請求の範囲内に定められるような本発明の思想又は範囲から逸脱することなく、当業者により、種々の変更及び修正を行うことができる。