(57)【要約】  アプリケーションの開発及び試験環境においてプロダクションデータへのアクセスを最適化するための様々なシステム、方法、及びプロセスを開示する。入出力（Ｉ／Ｏ）動作が読み取り動作である場合、読み取り動作を実行するべき仮想ストレージユニット上の記憶位置が判定される。以前の書き込み動作がこの記憶場所で実行されたかどうかも判定される。以前の書き込み動作がこの記憶場所で実行された場合、１つ以上の仮想データファイルで読み取り動作が実行される。しかしながら、以前の書き込み動作がこの記憶場所で実行されなかった場合、割り当てられた記憶域で読み取り動作が実行される。
2018530817.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
入出力（Ｉ／Ｏ）動作が書き込み動作であると判定することに応じて、仮想データファイルで前記書き込み動作を実行することであって、
前記仮想データファイルが仮想ディスクに記憶され、
前記仮想ディスクが仮想ストレージユニットの一部であり、
前記仮想データファイルが割り当てられた記憶域の一部である、ことと、
前記Ｉ／Ｏ動作が読み取り動作であると判定することに応じて、
前記読み取り動作が実行されるべき、前記仮想ストレージユニット上の記憶場所を判定することと、
以前の書き込み動作が前記記憶場所で実行されたかどうかを判定することと、
前記以前の書き込み動作が前記記憶場所で実行されたと判定することに応じて、前記仮想データファイルで前記読み取り動作を実行することと、
前記以前の書き込み動作が前記記憶場所で実行されなかったと判定することに応じて、前記読み取り動作を前記割り当てられた記憶域で実行することと、を含む、方法。
【請求項２】
ストレージシステムにおいて前記Ｉ／Ｏ動作を受信することであって、
前記ストレージシステムが、
プロダクションデータファイルと、
前記仮想ストレージユニットと、を備え、前記仮想ストレージユニットが、
前記仮想ディスクと、
前記割り当てられた記憶域と、を更に備える、ことと、
前記Ｉ／Ｏ動作が前記読み取り動作であるか、前記書き込み動作であるかを判定することと、を更に含み、
前記Ｉ／Ｏ動作が仮想化サーバ上で実行する仮想マシンによって生じ、
前記ストレージシステムが、前記仮想化サーバに通信可能に接続されている、請求項１に記載の方法。
【請求項３】
前記ストレージシステムにおいて前記仮想マシンから割り当てマップを受信することであって、
前記割り当てマップが前記割り当てられた記憶域に関する情報を含み、
前記割り当てられた記憶域が前記仮想マシンによって割り当てられ、
前記割り当てられた記憶域が前記ストレージシステム上に記憶された前記プロダクションデータファイルに対応する、ことと、
前記割り当てマップ内の情報を前記プロダクションデータファイルに関連付けられている１つ以上のオフセットに変換することであって、
前記１つ以上のオフセットがストレージ構造から検索される、ことと、
前記ストレージ構造を前記第１割り当てマップにオーバーレイすることであって
前記オーバーレイすることで、前記ストレージシステムが、前記仮想ストレージユニット上の前記割り当てられた記憶域に対して指示された前記仮想マシンからの前記Ｉ／Ｏ動作を、前記ストレージシステム上の前記プロダクションデータファイルに再マップできる、ことと、を更に含む、請求項２に記載の方法。
【請求項４】
前記仮想ストレージユニットを作成することを求める、前記仮想化サーバからの要求を受信することと、
前記受信することに基づいて、
前記ストレージシステム内に前記仮想ストレージユニットを作成することであって、
前記仮想ストレージユニットが、前記割り当てられた記憶域を割り当てるために前記仮想マシンによって使用され、
前記仮想ストレージユニット上の前記仮想ディスクがスパースファイルとして作成される、ことと、を更に含む、請求項２に記載の方法。
【請求項５】
前記ストレージシステムから前記仮想化サーバに前記仮想ディスクをインポートすることであって、
前記インポートすることがクライアントによって実行され、
前記クライアントがネットワークファイルシステム（ＮＦＳ）クライアントであり、
前記仮想ディスクが前記仮想化サーバ上で実行するハイパーバイザにインポートされる、ことと、
前記ハイパーバイザから前記仮想マシンに前記仮想ディスクをエクスポートすることであって、
前記エクスポートすることが前記ハイパーバイザによって実行される、ことと、を更に含む、請求項２に記載の方法。
【請求項６】
前記プロダクションデータファイルが、前記仮想マシンがアプリケーションの開発及び試験のために必要とするプロダクションデータを含み、
前記プロダクションデータが１つ以上の生のプロダクションデータセットの一部である、請求項２に記載の方法。
【請求項７】
前記ストレージシステム内の前記仮想ディスクがスパースファイルであり、
前記仮想マシンがシンプロビジョニングされた仮想ディスクを用い、
前記シンプロビジョニングされた仮想ディスクが、前記仮想マシンによって加えられた前記プロダクションデータファイルに対する変更を記憶する、請求項２に記載の方法。
【請求項８】
前記ストレージシステムは、プロダクション環境の部分であり、
前記仮想マシン及び前記クライアントがアプリケーションの開発及び試験環境の一部である、請求項５に記載の方法。
【請求項９】
前記再マップすることで、前記仮想マシンが、前記プロダクションデータファイルではなく、前記割り当てられた記憶域に対する前記読み取り動作を指示することにより前記プロダクションデータファイルにアクセスできる、請求項３に記載の方法。
【請求項１０】
プログラム命令を備える非一過性コンピュータ可読ストレージ媒体であって、前記プログラム命令が、
入出力（Ｉ／Ｏ）動作が書き込み動作であると判定することに応じて、仮想データファイルで前記書き込み動作を実行することであって、
前記仮想データファイルが仮想ディスクに記憶され、
前記仮想ディスクが仮想ストレージユニットの一部であり、
前記仮想データファイルが割り当てられた記憶域の一部である、ことと、
前記Ｉ／Ｏ動作が読み取り動作であると判定することに応じて、
前記読み取り動作が実行されるべき、前記仮想ストレージユニット上の記憶場所を判定することと、
以前の書き込み動作が前記記憶場所で実行されたかどうかを判定することと、
前記以前の書き込み動作が前記記憶場所で実行されたと判定することに応じて、前記仮想データファイルで前記読み取り動作を実行することと、
前記以前の書き込み動作が前記記憶場所で実行されなかったと判定することに応じて、前記読み取り動作を前記割り当てられた記憶域で実行することと、を実行可能である、非一過性コンピュータ可読ストレージ媒体。
【請求項１１】
ストレージシステムにおいて前記Ｉ／Ｏ動作を受信することであって、
前記ストレージシステムが、
プロダクションデータファイルと、
前記仮想ストレージユニットと、を備え、前記仮想ストレージユニットが、
前記仮想ディスクと、
前記割り当てられた記憶域と、を更に備える、ことと、
前記Ｉ／Ｏ動作が前記読み取り動作であるか、前記書き込み動作であるかを判定することと、を更に含み、
前記Ｉ／Ｏ動作が仮想化サーバ上で実行する仮想マシンによって生じ、
前記ストレージシステムが、前記仮想化サーバに通信可能に接続されている、請求項１０に記載の非一過性コンピュータ可読ストレージ媒体。
【請求項１２】
前記ストレージシステムにおいて前記仮想マシンから割り当てマップを受信することであって、
前記割り当てマップが前記割り当てられた記憶域に関する情報を含み、
前記割り当てられた記憶域が前記仮想マシンによって割り当てられ、
前記割り当てられた記憶域が前記ストレージシステム上に記憶された前記プロダクションデータファイルに対応する、ことと、
前記割り当てマップ内の情報を前記プロダクションデータファイルに関連付けられている１つ以上のオフセットに変換することであって、
前記１つ以上のオフセットがストレージ構造から検索される、ことと、
前記ストレージ構造を前記第１割り当てマップにオーバーレイすることであって
前記オーバーレイすることで、前記ストレージシステムが、前記仮想ストレージユニット上の前記割り当てられた記憶域に対して指示された前記仮想マシンからの前記Ｉ／Ｏ動作を、前記ストレージシステム上の前記プロダクションデータファイルに再マップできる、ことと、を更に含む、請求項１１に記載の非一過性コンピュータ可読ストレージ媒体。
【請求項１３】
前記仮想ストレージユニットを作成することを求める、前記仮想化サーバからの要求を受信することと、
前記受信することに基づいて、
前記ストレージシステム内に前記仮想ストレージユニットを作成することであって、
前記仮想ストレージユニットが、前記割り当てられた記憶域を割り当てるために前記仮想マシンによって使用され、
前記仮想ストレージユニット上の前記仮想ディスクがスパースファイルとして作成される、ことと、
前記ストレージシステムから前記仮想化サーバに前記仮想ディスクをインポートすることであって、
前記インポートすることがクライアントによって実行され、
前記クライアントがネットワークファイルシステム（ＮＦＳ）クライアントであり、
前記仮想ディスクが前記仮想化サーバ上で実行するハイパーバイザにインポートされる、ことと、
前記ハイパーバイザから前記仮想マシンに前記仮想ディスクをエクスポートすることであって、
前記エクスポートすることが前記ハイパーバイザによって実行される、ことと、を更に含む、請求項１１に記載の非一過性コンピュータ可読ストレージ媒体。
【請求項１４】
前記プロダクションデータファイルが、前記仮想マシンがアプリケーションの開発及び試験のために必要とするプロダクションデータを含み、
前記プロダクションデータが１つ以上の生のプロダクションデータセットの一部であり、
前記ストレージシステム内の前記仮想ディスクがスパースファイルであり、
前記仮想マシンがシンプロビジョニングされた仮想ディスクを用い、
前記シンプロビジョニングされた仮想ディスクが、前記仮想マシンによって加えられた前記プロダクションデータファイルに対する変更を記憶し、
前記再マップすることで、前記仮想マシンが、前記プロダクションデータファイルではなく、前記割り当てられた記憶域に対する前記読み取り動作を指示することにより前記プロダクションデータファイルにアクセスできる、請求項１２に記載の非一過性コンピュータ可読ストレージ媒体。
【請求項１５】
システムであって、
１つ又は２つ以上のプロセッサと、
前記１つ又は２つ以上のプロセッサに結合されたメモリと、を備え、前記メモリは、前記１つ又は２つ以上のプロセッサによって実行可能なプログラム命令を記憶し、前記プログラム命令は、
入出力（Ｉ／Ｏ）動作が書き込み動作であると判定することに応じて、仮想データファイルで前記書き込み動作を実行することであって、
前記仮想データファイルが仮想ディスクに記憶され、
前記仮想ディスクが仮想ストレージユニットの一部であり、
前記仮想データファイルが割り当てられた記憶域の一部である、ことと、
前記Ｉ／Ｏ動作が読み取り動作であると判定することに応じて、
前記読み取り動作が実行されるべき、前記仮想ストレージユニット上の記憶場所を判定することと、
以前の書き込み動作が前記記憶場所で実行されたかどうかを判定することと、
前記以前の書き込み動作が前記記憶場所で実行されたと判定することに応じて、前記仮想データファイルで前記読み取り動作を実行することと、
前記以前の書き込み動作が前記記憶場所で実行されなかったと判定することに応じて、前記読み取り動作を前記割り当てられた記憶域で実行することと、を実行可能である、システム。
【請求項１６】
ストレージシステムにおいて前記Ｉ／Ｏ動作を受信することであって、
前記ストレージシステムが、
プロダクションデータファイルと、
前記仮想ストレージユニットと、を備え、前記仮想ストレージユニットが、
前記仮想ディスクと、
前記割り当てられた記憶域と、を更に備える、ことと、
前記Ｉ／Ｏ動作が前記読み取り動作であるか、前記書き込み動作であるかを判定することと、を更に含み、
前記Ｉ／Ｏ動作が仮想化サーバ上で実行する仮想マシンによって生じ、
前記ストレージシステムが、前記仮想化サーバに通信可能に接続されている、請求項１５に記載のシステム。
【請求項１７】
前記ストレージシステムにおいて前記仮想マシンから割り当てマップを受信することであって、
前記割り当てマップが前記割り当てられた記憶域に関する情報を含み、
前記割り当てられた記憶域が前記仮想マシンによって割り当てられ、
前記割り当てられた記憶域が前記ストレージシステム上に記憶された前記プロダクションデータファイルに対応する、ことと、
前記割り当てマップ内の情報を前記プロダクションデータファイルに関連付けられている１つ以上のオフセットに変換することであって、
前記１つ以上のオフセットがストレージ構造から検索される、ことと、
前記ストレージ構造を前記第１割り当てマップにオーバーレイすることであって
前記オーバーレイすることで、前記ストレージシステムが、前記仮想ストレージユニット上の前記割り当てられた記憶域に対して指示された前記仮想マシンからの前記Ｉ／Ｏ動作を、前記ストレージシステム上の前記プロダクションデータファイルに再マップできる、ことと、を更に含む、請求項１６に記載のシステム。
【請求項１８】
前記仮想ストレージユニットを作成することを求める、前記仮想化サーバからの要求を受信することと、
前記受信することに基づいて、
前記ストレージシステム内に前記仮想ストレージユニットを作成することであって、
前記仮想ストレージユニットが、前記割り当てられた記憶域を割り当てるために前記仮想マシンによって使用され、
前記仮想ストレージユニット上の前記仮想ディスクがスパースファイルとして作成される、ことと、を更に含む、請求項１６に記載のシステム。
【請求項１９】
前記ストレージシステムから前記仮想化サーバに前記仮想ディスクをインポートすることであって、
前記インポートすることがクライアントによって実行され、
前記クライアントがネットワークファイルシステム（ＮＦＳ）クライアントであり、
前記仮想ディスクが前記仮想化サーバ上で実行するハイパーバイザにインポートされる、ことと、
前記ハイパーバイザから前記仮想マシンに前記仮想ディスクをエクスポートすることであって、
前記エクスポートすることが前記ハイパーバイザによって実行される、ことと、を更に含む、請求項１６に記載のシステム。
【請求項２０】
前記再マップすることで、前記プロダクションデータファイルではなく、前記割り当てられた記憶域に対する読み取り動作を指示することにより、前記仮想マシンが前記プロダクションデータファイルにアクセスできる、請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データストレージに関する。具体的には、本開示は、プロダクションデータへのアクセスの最適化に関する。
【関連技術の説明】
【０００２】
プロダクションデータは、事業目的のために企業及び／又は組織によって持続的に蓄積されて使用される情報である。プロダクションデータは、通常、アプリケーション及び開発及び試験を実施するために使用される。例えば、仮想マシンは、アプリケーションの開発及び試験環境に実装されてよく、そして、プロダクションデータを使用してアプリケーションの開発及び試験を実行するために使用されてよい。
【０００３】
アプリケーションの開発及び試験を実施するには、プロダクションデータのコピーが必要である。具体的には、アプリケーションの開発及び試験は（例えば、アプリケーションの開発及び試験の過程において）プロダクションデータを修正（又は変更）することがあるため、プロダクションデータの原本が改ざんされることなく、元のままに保つためにプロダクションデータのコピーが必要となる。しかしながら、プロダクションデータセットは、通常、極めてサイズが大きく、アプリケーションの開発及び試験環境では、大量のプロダクションデータのコピーを作成する（消費する）。
【０００４】
大量のプロダクションデータセットのコピーを作成するにはかなりの時間を要するが、この期間は、アプリケーションの開発及び試験環境で（例えば、かかるアプリケーションの開発及び試験を実施する仮想マシンで）このプロダクションデータを即座に利用することはできない。更に、このプロダクションデータのコピーに加えられた変更（又は修正）は、通常、非常に小さい、つまり最小限であるため、プロダクションデータのコピーの大部分は、変更されない及び／又は修正されないままであり、したがって、コピーによるプロダクションデータのプロビジョニングは冗長となる。
【発明の概要】
【０００５】
アプリケーションの開発及び試験環境においてプロダクションデータへのアクセスを最適化するための様々なシステム、方法、及びプロセスを開示する。かかる方法の１つは、入出力（Ｉ／Ｏ）動作が書き込み動作であると判定することに応じて、仮想データファイルの書き込み動作を実行することを含む。この例では、仮想データファイルは仮想ディスクに記憶され、仮想ディスクは仮想ストレージユニットの一部であり、仮想データファイルは（仮想ディスク上の）割り当てられた記憶域の一部である。
【０００６】
いくつかの実施形態では、Ｉ／Ｏ動作が読み取り動作であると判定することに応じて、方法は、読み取り動作を実行するべき仮想ストレージユニット上の記憶場所を判定し、以前の書き込み動作がこの記憶場所で実行されたかどうかを判定する。以前の書き込み動作がこの記憶場所で実行されたと判定することに応じて、方法は、仮想データファイルで読み取り動作を実行し、以前の書き込み動作がこの記憶場所で実行されなかったと判定することに応じて、方法は、割り当てられた記憶域で読み取り動作を実行する。
【０００７】
一実施形態では、方法は、ストレージシステムにおいてＩ／Ｏ動作を受信する。ストレージシステムは、プロダクションデータファイルと、仮想ストレージユニットと、を含む。この例では、仮想ストレージユニットは、仮想ディスクと、割り当てられた記憶域と、を含む。別の実施形態では、方法は、Ｉ／Ｏ動作が読み取り動作であるか、書き込み動作であるかを判定する。Ｉ／Ｏ動作は仮想化サーバ上で実行する仮想マシンによって生じ、ストレージシステムは、仮想化サーバに通信可能に接続されている。
【０００８】
いくつかの実施形態では、方法は、ストレージシステムにおいて仮想マシンから割り当てマップを受信する。この例では、割り当てマップは、割り当てられた記憶域に関する情報を含む。割り当てられた記憶域は仮想マシンによって割り当てられ、ストレージシステム上に記憶されたプロダクションデータファイルに対応する。
【０００９】
特定の実施形態では、方法は、割り当てマップ内の情報をプロダクションデータファイルに関連付けられた１つ以上のオフセットに変換することを含む。この例では、１つ以上のオフセットがストレージ構造から検索される。次いで、方法は、割り当てマップにストレージ構造をオーバーレイする。オーバーレイすることで、ストレージシステムは、仮想ストレージユニット上の割り当てられた記憶域に対して指示された仮想マシンからのＩ／Ｏ動作を、ストレージシステム上のプロダクションデータファイルに再マップできる。
【００１０】
他の実施形態では、方法は、仮想ストレージユニットの形成を求める、仮想化サーバからの要求を受信することと、受信内容に基づいて、ストレージシステム内に仮想ストレージユニットを形成することと、を含む。仮想ストレージユニットは、割り当てられた記憶域を割り当てるために仮想マシンによって使用される。
【００１１】
いくつかの実施形態では、方法は、ストレージシステムから仮想化サーバに仮想ディスクをインポートすることを含む。インポートは、クライアントによって実行される。この例では、クライアントは、ネットワークファイルシステムクライアントである。仮想ディスクは、仮想化サーバ上で実行するハイパーバイザにインポートされる。他の実施形態では、方法は、ハイパーバイザから仮想マシンに仮想ディスクをエクスポートすることを含み、エクスポートはハイパーバイザによって実行される。
【００１２】
一実施形態では、プロダクションデータファイルは、仮想マシンがアプリケーションの開発及び試験に必要とするプロダクションデータを含む。プロダクションデータは、１つ以上の生のプロダクションデータセットの一部である。別の実施形態では、ストレージシステム内の仮想ディスクはスパースファイルであり、仮想マシンはシンプロビジョニングされた仮想ディスクを用い、シンプロビジョニングされた仮想ディスクは、仮想マシンによって加えられたプロダクションデータファイルへの変更を記憶する。
【００１３】
特定の実施形態では、ストレージシステムはプロダクション環境の一部であり、仮想マシン及びクライアントはアプリケーションの開発及び試験環境の一部である。一実施形態では、再マップすることで、仮想マシンは、プロダクションデータファイルではなく、割り当てられた記憶域に対する読み取り動作を指示することによりプロダクションデータファイルにアクセスできる。
【００１４】
前述の内容は概要であり、したがって必然的に、簡略化、一般化、及び詳細の省略を含み、その結果として、当業者であれば、その概要が例示的であるにすぎず、なんら限定的ではないことがわかるであろう。請求項によってのみ規定されるような、本開示の他の態様、本発明の機能、及び利点は、下記に示す非限定的な詳細な説明において明瞭になるであろう。
【図面の簡単な説明】
【００１５】
本開示は、添付図面を参照することによってよりよく理解され得、そして、その多数の目的、機能、及び利点が当業者に明らかにされる。
【００１６】
【図１】本開示の一実施形態による、ストレージシステムに通信可能に接続されている仮想化サーバのブロック図である。
【００１７】
【図２】本開示の一実施形態による、アプリケーションの開発及び試験環境のブロック図である。
【００１８】
【図３】本開示の一実施形態による、プロダクションデータへのアクセスの提供に使用され得るデータアクセスモジュールのブロック図である。
【００１９】
【図４】本開示の一実施形態による、入出力（Ｉ／Ｏ）動作を再マップするためのプロセスを示すフローチャートである。
【００２０】
【図５】本開示の一実施形態による、プロダクションデータへのアクセスを提供するためのプロセスを示すフローチャートである。
【００２１】
【図６】本開示の一実施形態による、プロダクションデータからの読み取り動作を提供するためのプロセスを示すフローチャートである。
【００２２】
【図７】本開示の一実施形態による、新しいデータファイルを新しい割り当てにマップするためのプロセスを示すフローチャートである。
【００２３】
【図８】本開示の一実施形態による、ソフトウェアに実装され得るハイパーバイザを示すコンピューティングシステムのブロック図である。
【００２４】
【図９】本開示の一実施形態による、様々なコンピューティングデバイスがネットワークを介して通信し得る方法を示す、ネットワーク化システムのブロック図である。
【００２５】
本開示は、様々な修正及び代替的な形態が可能であるが、本開示の特定の実施形態は、図面及び詳細な説明において例として提供される。図面及び詳細な説明は、開示内容を開示された特定の形式に限定することを意図しないことを理解されたい。その代わりに、添付の請求項によって規定されるような本開示の趣旨及び範囲内にある全ての修正形態、等価物、及び代替形態を包含することが意図される。
【発明を実施するための形態】
【００２６】
序論
アプリケーションの開発及び試験環境は、現実の環境を模倣する状況でかかる開発及び試験を実行するために、好ましくは、（テストデータとは対照的な）プロダクションデータで動作する。しかしながら、かかるプロダクションデータセットは、極めて大量であり得る。かかるプロダクションデータは、開発され、試験されるアプリケーションを実行する１つ以上の仮想マシン（アプリケーション仮想マシンと呼ばれる）に時宜を得た方法でアクセスできる必要がある。アプリケーションの開発及び試験環境の性質を考慮すると、プロダクションデータのコピーは、複数回更新することが必要であり得る。したがって、かかるデータの最初のプロビジョニング並びに以降の更新には、プロダクションデータの複数のコピーを作成し、プロダクション環境から（例えば、ストレージアプライアンス内のストレージスタックから）アプリケーションの開発及び試験環境に転送することが必要になり得る。
【００２７】
プロダクションデータがアプリケーションの開発及び試験の対象となるとき、通常、これらは大幅に変更（修正）されない。実際、アプリケーションの開発及び試験中に使用されたプロダクションデータのコピーの相当部分は、そのままであるという予測もある。例えば、アプリケーションの開発及び試験に必要なプロダクションデータが１テラバイト（ＴＢ）である場合、かかる開発及び試験のために１ＴＢのプロダクションデータセットのコピーを最初に作成する必要がある。その後、アプリケーションの開発及び試験プロセスがプロダクションデータのコピーの更新を要求する場合、別の１ＴＢのプロダクションデータセットのコピーを作成する必要がある。しかしながら、通常、アプリケーションの開発及び試験プロセスは、１ＴＢのプロダクションデータセットのコピーのわずかな比率（例えば、５％）のみを変更（又は修正）する。１ＴＢのプロダクションデータセットのコピーの残りの９５％は、そのままである（例えば、変更されない）。
【００２８】
したがって、プロダクションデータをコピーすることによりプロダクションデータをアプリケーションの開発及び試験環境にプロビジョニングすることは、少なくとも２つの問題をもたらす。第１に、アプリケーションの開発及び試験環境へのプロダクションデータの最初のプロビジョニングは、時宜を得た方法で実現できない。これは、大量のプロダクションデータセットのコピーの作成にかなりの時間を費やすためである。第２に、アプリケーションの開発及び試験を続行するために更新したプロダクションデータのコピーが必要となるたびに、大量のプロダクションデータセットの別のコピーを作成して更にかなりの時間が浪費される。また、プロダクションデータの既存のコピーの大部分がそのままであるため、プロダクションデータのコピーを何度も作成することは冗長である。
【００２９】
本明細書では、アプリケーションの開発及び試験環境においてプロダクションデータへのアクセスを最適化する方法、システム、及びプロセスを開示する。
例示的なアプリケーション開発及び試験環境
【００３０】
アプリケーションの開発及び試験は、プロダクション（つまり生の）データファイル（例えば、営利主体によって現在使用されている実際の顧客データベース）を表す１つ以上のプロダクションデータファイルのコピーで実行される。かかる開発及び試験により、アプリケーションが適切に、かつ現実のシナリオで期待されるように実行するようになる。（プロダクションデータ及び／又はプロダクション環境を表す）プロダクションデータファイルのコピー（又は、カバースナップショット）は、アプリケーションの開発及び試験に使用され得る。本明細書に記載のアプリケーションの開発及び試験環境は、生のデータを使用することが好ましいが、その使用によりこれらのデータを変更することは許されない状況の単なる例である。本明細書に示す構成と異なる構成を有する環境もまた想定される。
【００３１】
そのような開発及び試験を実行するために、縮小された仮想マシンがしばしば使用される。例えば、企業がプロダクション環境においてウェブサーバソフトウェアを使用している場合、かかるウェブサーバソフトウェアをも動かす縮小された仮想マシンを使用することが好ましい（例えば、プロダクション環境が１０００の顧客をサポートする場合、アプリケーション開発及び試験環境における縮小された仮想マシンは、１０の顧客のみをサポートしてよい）。このように、プロダクション環境（プロダクションデータの精度の所定の重要性は所与とする）は、影響を受けない。
【００３２】
図１は、一実施形態に従う、仮想化サーバを実装するコンピューティングシステムのブロック図である。仮想化サーバ１０５は、プロセッサ１１０と、メモリ１１５と、を含むコンピューティングデバイスである。仮想化サーバ１０５は、サーバ、デスクトップ、ラップトップ、タブレット等を含む任意のタイプのコンピューティングデバイスであってもよい。
【００３３】
メモリ１１５は、仮想化環境を実装することにより、アプリケーション開発及び試験を実行する。メモリ１１５は、仮想マシン１２５と、ファイルシステムクライアント１３０及び仮想ディスク１３５を実装するハイパーバイザ１２０と、を含む（仮想ディスク１３５は点線で示して、仮想ディスク１３５が別個の仮想ディスクではないが、本明細書に記載するように、割り当てのためにストレージシステムからインポートされる仮想ディスク１５０と称する）。
【００３４】
上述のように、メモリ１１５はまた、ハイパーバイザ１２０及びオペレーティングシステム１４０を実装する。図１に示すように、ハイパーバイザ１２０は、ソフトウェアを使用して実装され得る。しかしながら、ハイパーバイザ１２０はまた、ネイティブ、つまりベアメタルハイパーバイザであり得る。加えて、他の実施形態は、仮想化サーバごとに異なる数の仮想マシンを実装してよく、そして、仮想化サーバは、同一の仮想化サーバ内の他のコンピューティングデバイスと同一の又はそれと異なる数の仮想マシンをそれぞれ実装する付加的なコンピューティングデバイスを含んでよい。
【００３５】
図１はまた、ストレージシステム１７０を示す。ストレージシステム１６０は、ストレージアプライアンスであってよく、及び／又はハードドライブ、コンパクトディスク、デジタル多目的ディスク、ソリッドステートドライブ、フラッシュメモリ等のメモリ、又はアレイ等を含む１つ以上の様々な異なるストレージデバイスを含んでよい。データアクセスモジュール１６５は、ネットワーク１８０を介してストレージシステム１７０と仮想化サーバ１０５との間のインターフェースを提供してよい。ネットワーク１８０の代わりに及び／又はそれに加えて、任意の他の適切なネットワーク又は相互接続が使用され得ることに留意されたい。
【００３６】
データアクセスモジュール１６５に加えて、ストレージシステム１７０はまた、仮想ストレージユニット１４５を含む。仮想ストレージユニット１４５は仮想ディスク１５０を実装する。仮想ストレージユニット１４５は、スタンドアローンの仮想ディスクとして機能できる、又は１つ以上の仮想ディスクを実装できる。仮想ディスク１５０は割り当てられた記憶域１５５を含む。ストレージシステム１７０はまた、プロダクションデータファイル１６０を含む。この例では、ストレージシステム１７０は、プロダクションデータファイル１６０への１つ以上のアプリケーションアクセスを提供することによりプロダクション環境を実装する。
【００３７】
図２は、一実施形態による、アプリケーションの開発及び試験環境のブロック図である。図１と同様に、図２はまた、２つの仮想マシン（仮想マシン１２５（１）及び１２５（２））を実装する仮想化サーバ１０５を含む。仮想マシン１２５（２）は、書き込み可能オーバーレイ２０５に接続されている。仮想マシン１２５（１）及び１２５（２）の両方は、ネットワークファイルシステム（ＮＦＳ）クライアント２１０を実装するハイパーバイザ１２０に接続されている。ＮＦＳクライアント２１０は、ファイルシステムクライアント（例えば、図１に示すクライアント１３０等）の一種である。
【００３８】
一実施形態では、書き込み可能オーバーレイ２０５は、仮想マシン１２５（２）によって加えられたプロダクションデータファイルへの変更を記憶する、シンプロビジョニングされた仮想ディスク上で提供されるコンテンツログを含む。例えば、オーバーレイファイル２０５は、仮想マシン１２５（２）によって加えられたプロダクションデータセットへの変更を記憶するシンプロビジョニングされた仮想ディスク（例えば、差分仮想ディスク）上で提供される。ＮＦＳクライアント２１０はオーバーレイファイルにアクセスして、（例えば、コンテンツログを使用して）仮想マシンのオーバーレイファイルから仮想マシンに提供され得るデータブロックを識別できる。他の例では、ＮＦＳクライアントは書き込み可能オーバーレイ（例えば、仮想マシン１２５（１））にアクセスしない。ハイパーバイザが、要求されたプロダクションデータファイルは書き込み可能オーバーレイにあると判定する場合、ハイパーバイザは、書き込み可能オーバーレイからプロダクションデータを提供する。ハイパーバイザが、要求されたプロダクションデータは書き込み可能オーバーレイにはないと判定する場合、ハイパーバイザは、ＮＦＳクライアントと通信して、ストレージシステムからプロダクションデータファイルを取り込む。
【００３９】
図２はまた、ｉＳＣＳＩイニシエータ２２０を実装する物理ホスト２１５を示す。物理ホスト２１５は、サーバ、デスクトップ、ラップトップ、タブレット等を含む任意のタイプのコンピューティングデバイスであってよく、ｉＳＣＳＩイニシエータ２２０は、物理ホスト２１５が、ネットワーク１８０、又は他のタイプのネットワーク及び／若しくは相互接続を通じてストレージシステム１７０に接続できるようにする。仮想化サーバ１０５及び物理ホスト２１５のそれぞれは、単独で使用して、又は併用して、アプリケーションの開発及び試験を実行できる。したがって、仮想化サーバ１０５（仮想マシン１２５（１）及び１２５（２）を含む）及び物理ホスト２１５は、アプリケーションの開発及び試験環境と総称され得る。
【００４０】
図２に示すように、ストレージシステム１７０は、アプリケーションの開発及び試験環境とプロダクション環境（例えば、ストレージシステム１７０）との間のインターフェースを提供する、データアクセスモジュール１６５を含む。データアクセスモジュール１６５は、マッピングモジュール２３５を含む。加えて、ストレージシステム１７０は、ｉＳＣＳＩターゲット２２５と、仮想ストレージユニット１４５と、を含む。仮想ストレージユニットは仮想ディスク１５０を実装する。仮想ディスク１５０は、仮想データファイル１７５を更に記憶する、割り当てられた記憶域１５５を含む。ストレージシステム１７０はまた、図１及び２に示すように、プロダクションデータ１５７内にプロダクションデータファイル１６０を含む。上述のように、仮想ストレージユニットは、仮想ディスクであり得る、又は１つ以上の仮想ディスクを実装し得る。
【００４１】
一実施形態では、図２のシステムを使用して、プロダクションデータファイル１６０へのアクセスを提供できる。例えば、データアクセスモジュール１６５は、仮想マシン１２５（１）若しくは１２５（２）又は物理ホスト２１５によって生じた入出力（Ｉ／Ｏ）動作が書き込み動作（又は単に書き込み）であるかどうかを判定する。Ｉ／Ｏ動作が書き込みの場合、データアクセスモジュール１６５は仮想データファイル１７５への書き込みを実行する。仮想データファイル１７５は、仮想ストレージユニット１４５の一部である仮想ディスク１５０（例えば、ベース仮想ディスクとも称せられる）に記憶されることに留意されたい。仮想データファイル１７５は、仮想ディスク１５０上の割り当てられた記憶域１５５の一部である。この例では、割り当てられた記憶域１５５は、データアクセスモジュール１６５によって仮想ディスク１５０上で割り当てられ得る。
【００４２】
別の実施形態では、データアクセスモジュール１６５は、（仮想化サーバ１０５又は物理ホスト２１５から受信した）Ｉ／Ｏ動作が読み取り動作（又は単に読み取り）であるかどうかを判定する。Ｉ／Ｏ動作が読み取りである場合、データアクセスモジュール１６５は、読み取りが実行されるべき仮想ストレージユニット１４５上の記憶場所を判定する。データアクセスモジュール１６５はまた、以前の書き込み動作がその記憶場所で実行されたかどうかを判定する。以前の書き込み動作がその記憶場所で実行された場合、データアクセスモジュール１６５は、仮想データファイル１７５で読み取りを実行する。しかしながら、以前の書き込み動作がその記憶場所で実行されなかった場合、データアクセスモジュール１６５は、割り当てられた記憶域１５５で読み取りを実行する。
プロダクションデータへのアクセスの最適化の例
【００４３】
図３は、一実施形態による、プロダクションデータへのアクセスの提供に使用され得るデータアクセスモジュールのブロック図である。図１及び２と同様に、図３は、アプリケーションの開発及び試験環境として実装される仮想化サーバ１０５並びにプロダクション環境として実装されるストレージシステム１７０を示す。仮想化サーバ１０５は、仮想マシン１２５と、ハイパーバイザ１２０と、を含む。ハイパーバイザ１２０はＮＦＳクライアント２１０を更に実装し、仮想ディスク１３５は、前述したようにシンプロビジョニングされる。ＮＦＳクライアント２１０は、仮想マシン１２５によって生じたＩ／Ｏ動作（例えば、読み取り及び／又は書き込み）とストレージシステム１７０との間のインターフェース機構を提供する。
【００４４】
ハイパーバイザ１２０は、仮想データファイル、仮想マシンの仕様、テンプレート等（例えば、図１及び３に示すように仮想ディスク１３５）を記憶できるデータストアを実装する。ハイパーバイザは、仮想マシン１２５上で実行する（又は動く）オペレーティングシステム１４０のためのＳｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ（ＳＣＳＩ）ブロックデバイスとして、仮想データファイルを仮想マシンに結合できる。データストアは、ファイルシステム（例えば、ハイパーバイザ自体の私有ファイルシステム、又はＮＦＳファイルシステム）によって補助されてよい。データストアがＮＦＳファイルシステムによって補助される場合、ハイパーバイザ１２０上のＮＦＳクライアント１２０を使用して、ＮＦＳサーバによって提供されるＮＦＳファイルシステムを実装できる。ＮＦＳサーバは、他のホストデバイス（例えば、仮想デバイス、又は物理デバイス）上で動くことができる。データストア（例えば、仮想ディスク１３５）から提供される、仮想ディスク１５０へのＩ／Ｏ動作は、補助ファイルシステム（例えば、上述のようにＮＦＳファイルシステム）を調べる。
【００４５】
ハイパーバイザの私有ファイルシステムがその代わりに使用されるとき、Ｉ／Ｏ動作は、私有ファイルシステムを調べることができ、そして、私有ファイルシステムは、次に、Ｉ／Ｏ動作が仮想データファイル１７５の適切な領域まで進行するのを可能にする前に、シンプロビジョニングされた仮想ディスク（例えば、仮想ディスク１３５）のためにストレージをプロビジョニングすること（必要に応じて）等の活動を実行できる。ＮＦＳデータストアでは、Ｉ／Ｏ動作はＮＦＳクライアント２１０によってインターセプトされ、ＮＦＳサーバにリダイレクトされる。
【００４６】
いくつかの実施形態では、データアクセスモジュール１６５は、マッピングモジュール２３５を使用して、ストレージシステム１７０にて仮想マシン１２５から割り当てマップを受信する。割り当てマップは、割り当てられた記憶域１５５に関する情報を含む。上述のように、割り当てられた記憶域１５５は、仮想マシン１２５からの割り当て要求に基づいて、仮想ディスク１５０上のデータアクセスモジュール１６５によって割り当てられ得る。この例では、割り当てられた記憶域１５５の仮想データファイル１７５は、ストレージシステム１７０に記憶されたプロダクションデータファイル１６０に対応する（そして、これにマップされる）。
【００４７】
マッピングモジュール２３５は、仮想ストレージユニット１４５に実装された仮想ディスク１５０上の仮想データファイル１７５のプロダクションデータファイル１６０へのマッピングを実行する。マッピングモジュール２３５が仮想マシン１２５から割り当てマップを受信すると、マッピングモジュール２３５は、プロダクションデータファイル１６０に関連付けられた１つ以上のオフセットに割り当てマップ内の情報を変換する。マッピングモジュール２３５は、プロダクションデータファイル１６０のストレージ構造にアクセスすることにより、プロダクションデータファイル１６０に関連付けられた１つ以上のオフセットを検索できる。
【００４８】
一実施形態では、マッピングモジュール２３５は、仮想マシン１２５から受信した割り当てマップにプロダクションデータファイル１６０のストレージ構造をオーバーレイする。この例では、オーバーレイすることで、データアクセスモジュール１６５は、割り当てられた記憶域１５５上の仮想データファイル１７５に対して指示された仮想マシン１２５からの１つ以上のＩ／Ｏ動作を、ストレージシステム１７０上で別個に記憶されているプロダクションデータファイル１６０に再マップできる。このようにして、データアクセスモジュール１６５は、プロダクションデータファイルをコピーすることをコピーを要せずに、アプリケーションの開発及び試験のための仮想マシン１２５によるプロダクションデータファイル１６０へのアクセスを最適化できる。
【００４９】
いくつかの実施形態では、データアクセスモジュール１６５は、仮想マシン１２５（又は仮想化サーバ１０５上の他のかかる仮想コンピューティングデバイス）からの要求を受信して、仮想ストレージユニット１４５を作成する。データアクセスモジュール１６５は、かかる要求に基づいて、ストレージシステム１７０内で仮想ストレージユニット１４５を作成する。仮想ストレージユニット１４５は、仮想マシン１２５によって使用されて、割り当てられた記憶域１５５を割り当てることができる。例えば、プロダクションデータファイル１６０の合計サイズが１０ギガバイト（１０ＧＢ）の場合、データアクセスモジュール１６６は、仮想ディスク（例えば、仮想ディスク１５０）を作成することにより仮想ストレージユニットを作成し、この（ベース）仮想ディスク上の記憶域を割り当てられた記憶域（例えば、割り当てられた記憶域１５５）として割り当てることができる。
【００５０】
しかしながら、データアクセスモジュール１６５によって（例えば、適切な仮想マシンディスク（ＶＭＤＫ）形式で）作成された仮想ディスク（例えば、仮想ディスク１５０）はスパースファイルであることに留意されたい。スパースファイルは、ファイル自体がほぼ空である場合に、ファイルシステム上の領域をより効率的に使用するために作成され得るタイプのファイルである。したがって、データアクセスモジュール１６５がプロダクションデータファイル１６０に基づいて仮想ストレージユニット１４５内の記憶域を割り当てても、割り当て（例えば、割り当てられた記憶域１５５）は、実際には１０ＧＢの記憶域（例えば、プロダクションデータファイルの実際のサイズ）を消費しない。割り当ての結果として仮想ストレージユニット１４５上で消費される唯一の記憶域は、（例えば、オフセットに関連するメタデータを記憶するため等の）ごく少量の記憶域である。
【００５１】
前述のように、マッピングモジュール２３５は、仮想マシン１２５から受信した割り当てマップにプロダクションデータファイル１６０のストレージ構造をオーバーレイする。割り当てマップは、例えば、ＮＦＳクライアント２１０を使用して、ストレージシステム１７０から仮想化サーバ１０５に仮想ディスク１５０をインポートすることで、仮想マシン１２５によって作成される。例えば、仮想ディスク１５０（例えば、割り当てられたスパースファイル）が、仮想化サーバ１０５上で実行するハイパーバイザ１２０にインポートされる。次いで、ハイパーバイザ１２０はこの仮想ディスクを仮想マシン１２５にエクスポートする。
【００５２】
例えば、いくつかの実施形態では、仮想ディスク１５０は、ストレージユニット１７０上でスパースファイルとして作成される（例えば、スパースファイルは単なる割り当てである）。ハイパーバイザ１２０内のＮＦＳクライアント２１０は、この仮想ディスク１５０をエクスポートするように指示される。こうすることにより、ＮＦＳクライアント２１０及び仮想マシン１２５は、どちらも仮想ディスク１５０にアクセスできる。上述のように、ＮＦＳクライアント２１０は、割り当てられたスパースファイル（例えば、仮想ディスク１５０）を別の仮想ディスクとして（例えば、仮想ディスク１３５として）仮想マシン１２５にエクスポートする。
【００５３】
このようにして、仮想マシン１２５は、割り当てられた記憶域１５５内で仮想データファイル１７５を割り当てることができる。次いで、データアクセスモジュール１６５は、仮想化サーバ１０５からストレージシステム１７０にこれらの割り当てをもう一度取り込み、仮想ディスク１５０上に位置付けられたこれらの割り当て（例えば、仮想マシン１２５によって指定される）の位置を更に翻訳する。次いで、マッピングモジュール２３５は、仮想ディスク１５０のこれらの区域（又は割り当て）を、ストレージシステム１７０上のプロダクションデータファイル１６０に再マップできる。前述のプロセスにより、仮想マシン１２５がアプリケーションの開発及び試験のためにプロダクションデータファイル１６０をただちに利用できる。これは、再マップすることで、プロダクションデータファイル１６０ではなく、割り当てられた記憶域１５５に対する読み取りを指示することにより、仮想マシン１２５が、プロダクションデータファイル１６０にアクセスできるためである。
【００５４】
一実施形態では、前述したように些細なものであり得る、仮想マシン１２５によって実行されたプロダクションデータファイル１６０に対する変更が、仮想ストレージユニット１４５上の仮想データファイル１７５に書き込まれる。別の実施形態では、仮想マシンによって実行されたプロダクションデータファイル１６０に対する変更は、図２に示すように書き込み可能オーバーレイ（例えば、シンプロビジョニングされた仮想ディスクとして実装される）によってキャプチャされ得る。
プロダクションデータへのアクセスを最適化する例示的なプロセス
【００５５】
図４は、一実施形態による、Ｉ／Ｏ動作を再マップするためのプロセスを示すフローチャートである。このプロセスは、４１０において仮想ストレージユニット（例えば、仮想ストレージユニット１４５）の作成を求める要求を（例えば、仮想マシン１２５（１）又は１２５（２）から）受信することにより開始する。４２０において、プロセスは、ストレージシステム内に仮想ストレージユニットを作成する（例えば、データアクセスモジュール１６５は、ストレージシステム１７０内に仮想ストレージユニット１４５を作成する）。
【００５６】
前述したように、仮想マシン１２５（１）若しくは１２５（２）、又は物理ホスト２１５は、プロダクションデータファイルに基づいて、仮想ストレージユニット上の記憶域を割り当てることができる。仮想ストレージユニット上の記憶域の割り当ては、仮想ディスク１５０のファイルシステムのメタデータ構造を変更するだけであり、Ｉ／Ｏ動作は、記憶域の割り当ての結果としては実際に実行されないことに留意されたい。
【００５７】
４３０において、プロセスは、仮想化サーバから（例えば、ＮＦＳクライアント２１０から）割り当てマップを受信する。この時点において、データアクセスモジュール１６５は、仮想マシンによって作成された割り当てを判定し、これらの割り当てを仮想ディスク１５０のオフセットに翻訳する。データファイルの割り当ては、通常、ファイルシステム内で連続的ではないことに留意されたい。したがって、データアクセスモジュール１６５は、仮想ディスク１５０上の仮想データファイルのオフセットに割り当てられたブロックの１つずつを翻訳する。
【００５８】
４４０において、プロセスは、プロダクションデータファイルのデータストレージ構造にアクセスする。４５０において、プロセスは、（例えば、割り当てマップと（プロダクションデータファイルの）データストレージ構造との間で１つ以上のエクステントを共有することにより）割り当てマップ及びデータストレージ構造をオーバーレイする。４６０において、プロセスは、仮想マシンからのＩ／Ｏ動作を割り当てられた記憶域に再マップすることへと進む。このようにして、割り当てられた記憶域が読み取り要求を受信すると、マッピングモジュール２３５は、プロダクションデータファイルの１つ以上の実際のデータファイルに読み取り要求を再マップし、要求されたデータをプロダクションデータファイルから仮想マシンに提供する。したがって、プロダクションデータファイルのコピーの作成は不要になる。次いで、プロセスは終了する。
【００５９】
図５は、一実施形態による、プロダクションデータへのアクセスを最適化するためのプロセスを示すフローチャートである。このプロセスは、５１０においてＩ／Ｏ動作を受信すること（例えば、データアクセスモジュール１６５において）により開始する。５２０において、プロセスは、Ｉ／Ｏ動作が読み取りか、書き込みかを判定する。Ｉ／Ｏ動作が書き込みである場合、プロセスは、５３０において、仮想データファイル（例えば、仮想データファイル１７５）での書き込みを実行する。しかしながら、Ｉ／Ｏ動作が読み取りである場合、プロセスは、５４０において、以前の書き込みが、読み取りの（記憶）場所（例えば、仮想データファイル上）に対して実行されたかどうかを判定して、読み取りが、変更及び／又は修正されたデータを要求しているかどうかを判定する）。
【００６０】
以前の書き込みが読み取りの記憶場所に対して実行された場合、プロセスは、５６０において、仮想データ（例えば、仮想データファイル）での読み取りを実行する。しかしながら、以前の書き込みが読み取りの記憶場所に対して実行されなかった場合、プロセスは、５６０において、プロダクションデータでの読み取りを実行する（例えば、データアクセスモジュール１６５は、プロダクションデータファイル１６０の実際のコンテンツにアクセスして、図５のフローチャートで示すように、翻訳の結果としての読み取り及び割り当ての再マップを提供できる）。プロセスは、５７０において、更なるＩ／Ｏ動作が存在するかどうかを判定することにより終了する。
【００６１】
図６は、一実施形態による、プロダクションデータからの読み取り動作を提供するためのプロセスを示すフローチャートである。このプロセスは、６１０において、仮想マシンから割り当てマップを取得（又は受信）することにより開始する。仮想マシン１２５は仮想ストレージユニット上の割り当てられた記憶域を割り当てることができるため、仮想マシン１２５は、割り当てマップの形式で割り当てに関する情報（例えば、１つ以上の仮想データファイルが作成される仮想ディスクファイルシステムのディレクトリ、１つ以上の仮想データファイルのサイズ等）を保持できる。前述したように、割り当てられた記憶域内の仮想データファイルにＩ／Ｏ動作がまだ書き込まれていないため、かかる割り当ては、ファイルシステム（ストレージシステムではない）の空き領域のみを減少させる。
【００６２】
６２０において、プロセスは、割り当てられた記憶域のオフセットに割り当てを翻訳する。例えば、データアクセスモジュール１６５は、ＮＦＳクライアント２１０から、割り当てられた記憶域で仮想マシンによって割り当てられた１つ以上の仮想データファイルに関する情報を含む割り当てマップ（ブロック割り当てマップとも称される）を受信する。ブロック割り当てマップの受信後、マッピングモジュール２３５は、仮想マシンから受信した（及び割り当てマップに含まれる）仮想データファイルの割り当てを、ストレージシステム上の割り当てられた記憶域内の仮想データファイルのオフセットに翻訳する。
【００６３】
６３０において、プロセスは、プロダクションデータファイルのデータストレージ構造を取得する（又は受信する）。プロダクションデータファイルのデータストレージ構造は、別のブロック割り当てマップの形式又はプロダクションデータファイルのオフセットを明らかにする他の形式で受信され得る。この時点において、プロセスは、マッピングモジュール２３５経由で、２つのブロックマップへのアクセスを有する。第１ブロックマップは、仮想マシンから受信した割り当てマップである。第２ブロックマップは、ストレージシステム内に存在するプロダクションデータファイルのデータストレージ構造である。６４０において、プロセスは、（仮想マシンから受信した）割り当てマップ及びデータストレージ構造（例えば、ストレージシステムに記憶される第２ブロックマップ）をオーバーレイする。
【００６４】
例えば、割り当てマップは、仮想マシンに関連付けられた仮想ディスク（例えば、仮想ディスク１３５）内の仮想データファイルのオフセット並びに仮想データファイルの長さを明らかにすることができる。オーバーレイ時には、（例えば、仮想マシンによる）仮想ディスクファイルシステム内の仮想データファイルのこの割り当てを使用して、仮想データファイルが実際に開始する（及び終了する）オフセット、並びにストレージシステム内の仮想ディスク上の（例えば、図３に示す仮想ストレージユニット１４５上の仮想ディスク１５０の割り当てられた記憶域１５５内の）仮想データファイルのサイズを判定できる。
【００６５】
６５０において、プロセスは、割り当てられた記憶域内の（仮想データファイルの）オフセットを、プロダクションデータ１５７内のプロダクションデータファイルの実際のデータのオフセットに再マップする。このようにして、図６のプロセスは、プロダクションデータファイルをコピーせずに１つ以上の仮想マシンにプロダクションデータファイルを提供できる。その結果として、６６０において、プロセスは、仮想ディスクから（例えば、割り当てられた記憶域１５５内の仮想データファイル１７５から）書き込み（及び修正された書き込みに対する読み取り）を提供する。しかしながら、アプリケーションの開発及び試験中、プロダクションデータの大部分は、通常変更されないままであるため、プロセスは、６７０において、プロダクションデータ１５７から（例えば、プロダクションデータファイル１６０から）読み取りを提供することにより終了する。
【００６６】
図７は、一実施形態による、同一のプロダクションデータのコピーで、又は新しいプロダクションデータのコピー（例えば、より新しいバージョン）でアプリケーションの開発及び試験を実施するためのプロセスを示すフローチャートである。一実施形態では、この（プロダクション）データ更新プロセスは、仮想マシン１２５に接続されている同一の仮想ディスク（例えば、図１に示す仮想ディスク１３５）を使用して実現し得る。プロセスは、７１０において、（例えば、データアクセスモジュール１６５を使用して仮想マシン１２５から）既存の仮想データファイルの割り当てを取り込むことにより開始する。７２０において、プロセスは、ストレージシステム１７０上（例えば、仮想ディスク１５０上）の（既存の）仮想データファイルからの領域を再利用する。７３０において、プロセスは、（仮想マシン１２５上の）これらの（既存の）仮想データファイルを削除する。
【００６７】
７４０において、プロセスは、（例えば、ファイルシステムクライアント１３０及び仮想ディスク１３５を使用して）仮想マシン１２５上の新しい仮想データファイルに領域を割り当てる。７５０において、プロセスは、仮想マシン１２５からこれらの（新しい）仮想データファイルへの割り当てを取り込む。プロセスは、７６０において、ストレージシステム１７０上で新しい仮想データファイルをこれらの割り当てにマップすることにより終了する。
データエクステントを共有するための方法の例
【００６８】
一実施形態では、マッパーメソッドを使用して、仮想ディスクファイルシステムとホストファイルシステムとの間でデータエクステントを共有できる。この例では、（例えば、マッピングモジュール２３５に実装された）マッパーによって、仮想データファイルセットに応じて仮想データファイルを指定できる。マッパーは、アプリケーションとファイルシステムとの間のＩ／Ｏパスに実装されるソフトウェアコンポーネントである。マッパーは、他のファイルのブロックからなるものとしてファイルのビューを作成する。例示のマッピング仕様には、［Ｆｉｌｅ１］；ＦｉｌｅＡ，０，０，１０；ＦｉｌｅＢ，０，１０，２０；ａｎｄ  ＦｉｌｅＣ，５０，３０，１０が挙げられる。マッパーは、仮想データファイルのセットに応じて仮想データファイルのこの仕様を使用して、複合ファイル（例えば、ｔａｒファイル）からホストファイルシステムの名前区間内の個々のファイルを識別できる。マッパーはまた、仮想データファイルコンテンツの仕様を、複数のプロダクションデータファイルにまたがる集合体にすることができる。マッパーを使用して、プロダクションデータファイルの識別に使用される仮想ディスクの領域を指定できる。したがって、仮想ディスクに対してＩ／Ｏ動作が実行される場合、データアクセスモジュール１６５はＩ／Ｏ動作をインターセプトし、プロダクションデータファイルからデータを提供することができる。
【００６９】
例えば、マッパーは、上記の仕様を以下のように読み取ることができる。（１）「Ｆｉｌｅ１」という名前のファイルを作成する。Ｆｉｌｅ１のコンテンツは、ＦｉｌｅＡ、ＦｉｌｅＢ、及びＦｉｌｅＣにまたがる。３つの数字のうちの最初の数字（例えば、ＦｉｌｅＡ、ＦｉｌｅＢ、及びＦｉｌｅＣにおいてそれぞれ０、０、及び５０）は、指定されたファイル内のオフセットとして読む。２番目の数字（例えば、ＦｉｌｅＡ、ＦｉｌｅＢ、及びＦｉｌｅＣにおいてそれぞれ０、１０、及び３０）は、Ｆｉｌｅ１内のオフセットであり、３つの数字のうちの３番目の数字（例えば、ＦｉｌｅＡ、ＦｉｌｅＢ、及びＦｉｌｅＣにおいてそれぞれ１０、２０、及び１０）は、そのファイルのコンテンツの長さである。例えば、ＦｉｌｅＡのオフセット０において始まる１０ブロックを使用して、オフセット０におけるＦｉｌｅ１のコンテンツを形成する（又は割り当てる）。同様に、ＦｉｌｅＢのオフセット０において始まる２０ブロックを使用して、オフセット１０におけるＦｉｌｅ１のコンテンツを形成する。同様に、ＦｉｌｅＣのオフセット５０において始まる１０ブロックを使用して、オフセット３０におけるＦｉｌｅ１のコンテンツを形成する。
【００７０】
したがって、いくつかの実施形態では、Ｆｉｌｅ１がオフセット０において読み取られる場合、マッパーは、１０ブロックついてＦｉｌｅＡからＦｉｌｅ１のコンテンツを提供し、次の２０ブロックについてはＦｉｌｅＢ、最後の１０ブロックについてはＦｉｌｅＣから提供する。例えば、アプリケーションがオフセット５においてＦｉｌｅ１の１０ブロックを読み取る場合、マッパーは、ＦｉｌｅＡから最初の５ブロック、ＦｉｌｅＢから次の５ブロックを提供する。
【００７１】
別の実施形態では、ネイティブファイルシステムメソッドを使用して、仮想ディスクファイルシステムとホストファイルシステムとの間でデータエクステントを共有できる。ネイティブファイルシステムメソッドによって、プロダクションデータファイルが仮想データファイルで利用可能になり、プロダクションデータファイル及び仮想データファイルの両方が、別のホストに対してファイルシステムとして（例えば、入れ子のファイルシステムとして）動作できる。
【００７２】
入れ子のファイルシステムは、ファイルシステム内のファイルが、それ自体で完全なファイルシステムを形成するデータを含むファイルシステムである。例えば、仮想データファイル１７５は、ゲストオペレーティングシステム（例えば、オペレーティングシステム１４０）に見えて使用可能である、完全なファイルシステムをホストできる。ホストファイルシステム（例えば、ハイパーバイザ１２０に、又はこれによって実装されるファイルシステム）の場合、仮想データファイルは単にファイルである。一実施形態では、仮想ディスクによってホストされるファイルシステムのビューを作成できる。この例では、ファイルシステムコンテンツは、仮想ディスク内のファイルシステムコンテンツをコピーするのではなく、別のファイルから提供され得る。コンテンツは、例えば、上述したマッパーメソッドを使用して仮想的に利用可能になり得る。
【００７３】
マッパーメソッド及びネイティブファイルシステムメソッドの上記の例に関して、１つ以上の実施形態では、ストレージシステムはファイルシステムを含み、ストレージシステム上の仮想ディスクはまた、別個のファイルシステムを含む。ストレージシステムのファイルシステムはホストファイルシステムであり、仮想ディスクのファイルシステムは仮想ディスクファイルシステムである。これらの例では、仮想ディスクファイルシステムは仮想マシンの仮想データファイルを管理し、ホストファイルシステムは、ストレージシステムに記憶されたプロダクションデータファイルを管理する。
例示的なコンピューティング環境
【００７４】
図８は、一実施形態による、データアクセスモジュールがソフトウェアに実装され得る方法を示すコンピューティングシステムのブロック図である。コンピューティングシステム８００は、コンピュータ可読命令を実行することができる任意の単一又はマルチプロセッサコンピューティングデバイス又はシステムを広く表す。コンピューティングシステム８００の例としては、ワークステーション、パーソナルコンピュータ、ラップトップ、クライアント側端末、サーバ、分散型コンピューティングシステム、携帯用デバイス（例えば、パーソナル携帯情報機器、及び携帯電話）、ネットワークアプライアンス、ストレージ制御装置（例えば、配列制御装置、テープドライブ制御装置、又はハードディスク制御装置）等を含む任意の１つ又は２つ以上の様々なデバイスが挙げられるが、これらに限定されない。その最も基本的な構成において、コンピューティングシステム８００は、少なくとも１つのプロセッサ１１０と、メモリ１１５と、を含んでもよい。仮想化サーバ１０５を実装するソフトウェアを実行することによって、コンピューティングシステム８００は、例えば、アプリケーションの開発及び試験環境でプロダクションデータに対する（及びプロダクションデータの）アクセスを最適化するように構成されている専用コンピューティングデバイスになる。
【００７５】
プロセッサ１１０は、概して、データの処理、又は命令の解釈及び実行ができる任意のタイプ又は形式の処理装置を表す。特定の実施形態では、プロセッサ１１０は、ソフトウェアアプリケーション又はモジュールから命令を受信してよい。これらの命令は、プロセッサ１１０に、本明細書に記載及び／又は例示する実施形態のうちの１つ又は２つ以上の機能を実施させてもよい。例えば、プロセッサ１１０は、本明細書に記載する動作の全部又は一部を実行してもよく、及び／又は実行するための手段であってもよい。プロセッサ１１０は、また、本明細書に記載又は例示する任意の他の動作、方法、及びプロセスを実行してもよく、及び／又は実行するための手段であってもよい。
【００７６】
メモリ１１５は、データ及び／又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形式の揮発性又は不揮発性ストレージデバイス若しくは媒体を概して表す。例としては、限定することなく、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、フラッシュメモリ、又は任意の他の好適なメモリデバイスが挙げられる。必要でないけれども、特定の実施例では、コンピューティングシステム８００は、揮発性メモリユニット及び不揮発性ストレージデバイスの両方を含んでもよい。一例では、データアクセスモジュール、マッピングモジュール、及び／又はハイパーバイザを実装するプログラム命令は、メモリ１１５にロードされてよい。
【００７７】
特定の実施形態において、コンピューティングシステム８００は、また、プロセッサ１１０及びメモリ１１５に加えて、１つ又は２つ以上の構成要素又は要素を含んでもよい。例えば、図８に示すように、コンピューティングシステム８００は、メモリコントローラ８２０と、入力／出力（Ｉ／Ｏ）コントローラ８３５と、通信インターフェース８４５と、を含んでよく、これらのそれぞれは、通信インフラストラクチャ８０５を介して相互接続されてよい。通信インフラストラクチャ８０５は、コンピューティングデバイスの１つ以上の構成要素間の通信を容易にすることが可能な任意のタイプ又は形式のインフラストラクチャを概して表す。通信インフラストラクチャ８０５の例としては、限定することなく、通信バス（業界標準アーキテクチャ（ＩＳＡ）、周辺構成要素相互接続（ＰＣＩ）、ＰＣＩエクスプレス（ＰＣＩｅ）、又は類似のバス等）、及びネットワークが挙げられる。
【００７８】
メモリコントローラ８２０は、メモリ若しくはデータを取り扱うことが可能な、又はコンピューティングシステム８００の１つ以上の構成要素の間の通信を制御することが可能な任意のタイプ又は形式のデバイスを概して表す。例えば、特定の実施形態では、メモリコントローラ８２０は、通信インフラストラクチャ８０５を介して、プロセッサ１１０、メモリ１１５、及びＩ／Ｏコントローラ８３５間の通信を制御してもよい。特定の実施形態では、メモリコントローラ８２０は、本明細書に記載又は例示する１つ又は２つ以上の動作又は機能を単独又は他の要素との組み合わせのいずれかで実行してもよく、及び／又は実行するための手段であってもよい。
【００７９】
Ｉ／Ｏコントローラ８３５は、仮想化サーバ及び／又はコンピューティングデバイスの入出力機能を調整及び／又は制御することが可能な任意のタイプ又は形式のモジュールを概して表す。例えば、特定の実施形態では、Ｉ／Ｏコントローラ８３５は、プロセッサ１１０、メモリ１１５、通信インターフェース８４５、表示アダプタ８１５、入力インターフェース８２５、及びストレージインターフェース８４０等のコンピューティングシステム８００の１つ又は２つ以上の要素間のデータの転送を制御してもよく、又はそれを容易にしてもよい。
【００８０】
通信インターフェース８４５は、コンピューティングシステム８００と、１つ以上の他のデバイスとの間の通信を容易にすることが可能な任意のタイプ又は形式の通信デバイス又はアダプタを広く表す。通信インターフェース８４５は、コンピューティングシステム８００と追加のコンピューティングシステムを含むプライベート又はパブリックネットワークとの間の通信を容易にしてよい。通信インターフェース８４５の例としては、有線ネットワークインターフェース（ネットワークインターフェースカード等）、無線ネットワークインターフェース（無線ネットワークインターフェースカード等）、モデム、及び任意の他の好適なインターフェースが挙げられるが、これらに限定されない。通信インターフェース８４５は、インターネット等ネットワークへの直接リンクを介してリモートサーバへの直接接続を提供してよく、また、例えば、ローカルエリアネットワーク（例えば、イーサネット（登録商標）ネットワーク）、パーソナルエリアネットワーク、電話若しくはケーブルネットワーク、携帯電話接続、衛星データ接続、又は任意の他の好適な接続を通じて、かかる接続を間接的に提供してよい。
【００８１】
通信インターフェース８４５はまた、外部バス又は通信チャネルを介して、コンピューティングシステム８００と、１つ以上の追加のネットワーク又はストレージデバイスとの間の通信を容易にするように構成されたホストアダプタを表してよい。ホストアダプタの例としては、スモールコンピュータシステムインターフェース（ＳＣＳＩ）ホストアダプタ、ユニバーサルシリアルバス（ＵＳＢ）ホストアダプタ、米国電気電子技術者協会（ＩＥＥＥ）１３９４ホストアダプタ、シリアルアドバンストテクノロジーアタッチメント（ＳＡＴＡ）、シリアルアタッチトＳＣＳＩ（ＳＡＳ）、及びエクスターナルＳＡＴＡ（ｅＳＡＴＡ）ホストアダプタ、アドバンスドテクノロジーアタッチメント（ＡＴＡ）、及びパラレルＡＴＡ（ＰＡＴＡ）ホストアダプタ、ファイバチャネルインターフェースアダプタ、イーサネット（登録商標）アダプター等が挙げられるが、これらに限定されない。通信インターフェース８４５はまた、コンピューティングシステム８００が、（例えば、実行するためにリモートデバイスに対して命令を送受信することにより）分散又はリモートコンピューティングに関与できるようにしてよい。
【００８２】
図８に示すように、コンピューティングシステム８００はまた、表示アダプタ８１５を介して、通信インフラストラクチャ８０５に接続されている少なくとも１つの表示デバイス８１０を含んでよい。表示デバイス８１０は、表示アダプタ８１５によって転送された情報を視覚的に表示することが可能な任意のタイプ又は形式のデバイスを概して表す。同様に、表示アダプタ８１５は、表示デバイス８１０上に表示するために、通信インフラストラクチャ８０５から（又は当該技術分野において既知のように、フレームバッファから）グラフィック、テキスト、及び他のデータを転送するように構成されている任意のタイプ又は形式のデバイスを概して表す。コンピューティングシステム８００はまた、入力インターフェース８２５を介して通信インフラストラクチャ８０５に接続されている、少なくとも１つの入力デバイス８３０を含んでよい。入力デバイス８３０は、コンピュータ又はヒトのいずれかによって生成された入力を、コンピューティングシステム８００に提供することが可能な任意のタイプ又は形式の入力デバイスを概して表す。入力デバイス８３０の例としては、キーボード、ポインティングデバイス、音声認識デバイス、又は任意の他の入力デバイスが挙げられる。
【００８３】
コンピューティングシステム８００はまた、ストレージインターフェース８４０を介する通信インフラストラクチャ８０５へのストレージデバイス８５０を含んでよい。ストレージデバイス８５０は、データ及び／又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形式のストレージデバイス又は媒体を概して表す。例えば、ストレージデバイス８５０は、磁気ディスクドライブ（例えば、いわゆるハードドライブ）、フロッピーディスクドライブ、磁気テープドライブ、光ディスクドライブ、フラッシュドライブ等を含み得る。ストレージインターフェース８４０は、コンピューティングシステム８００のストレージデバイス８５０と他の構成要素との間でデータを転送及び／又は送信するための任意のタイプ又は形式のインターフェース又はデバイスを概して表す。
【００８４】
ストレージデバイス８５０は、コンピュータソフトウェア、データ、又は他のコンピュータ可読情報を記憶するように構成されている、取り外し可能なストレージユニットから読み取るように、及び／又はそれに書き込むように構成されてよい。好適な取り外し可能なストレージユニットの例としては、フロッピーディスク、磁気テープ、光ディスク、フラッシュメモリデバイス等が挙げられるが、これらに限定されない。ストレージデバイス８５０は、また、コンピュータソフトウェア、データ、又は他のコンピュータ可読命令が、コンピューティングシステム８００にロードされることを可能にするための他の類似の構造又はデバイスを含んでもよい。例えば、ストレージデバイス８５０は、ソフトウェア、データ、又は他のコンピュータ可読情報を読み取り、及び書き込むように構成されてもよい。ストレージデバイス８５０は、また、コンピューティングシステム８００の一部であってもよく、又は他のインターフェースシステムによってアクセスされる別個のデバイスであってもよい。
【００８５】
多くの他のデバイス又はサブシステムは、コンピューティングシステム８００に接続されてよい。逆に、図８に示す構成要素及びデバイスの全てが、本明細書において説明及び／又は例示する実施形態を実践するために存在する必要はない。上記で述べたデバイス及びサブシステムはまた、図８に示すものとは異なる様式で相互接続されてよい。
【００８６】
コンピューティングシステム８００はまた、任意の数のソフトウェア、ファームウェア、及び／又はハードウェア構成を用いてよい。例えば、本明細書において開示される実施形態のうちの１つ又は２つ以上は、コンピュータ可読ストレージ媒体上にコンピュータプログラム（コンピュータソフトウェア、ソフトウェアアプリケーション、コンピュータ可読命令、又はコンピュータ制御論理とも称される）としてコード化され得る。コンピュータ可読ストレージ媒体の例としては、磁気記憶媒体（例えば、ハードディスクドライブ、及びフロッピーディスク）、光記憶メディア（例えば、ＣＤ−、又はＤＶＤ−ＲＯＭ）、電子記憶媒体（例えば、ソリッドステートドライブ、及びフラッシュメディア）等が挙げられる。そのようなコンピュータプログラムは、また、インターネット等のネットワークを介してメモリに又はキャリア媒体に記憶するためにコンピューティングシステム８００に転送されてもよい。
【００８７】
コンピュータプログラムを含むコンピュータ可読媒体は、コンピューティングシステム８００にロードされてよい。コンピュータ可読媒体上に記憶されたコンピュータプログラムの全部又は一部分は、次に、メモリ１１５及び／又はストレージデバイス８５０の種々の部分に記憶されてもよい。プロセッサ１１０によって実行されるとき、コンピューティングシステム８００にロードされたコンピュータプログラムは、本明細書において説明及び／又は例示する実施形態のうちの１つ又は２つ以上の機能をプロセッサ１１０に実施させてもよく、及び／又はそれらを実施するための手段であってもよい。付加的に又は代替的に、本明細書に説明及び／又は例示される例示的な実施形態のうちの１つ又は２つ以上は、ファームウェア及び／又はハードウェアに実装され得る。例えば、コンピューティングシステム８００は、本明細書において開示される実施形態のうちの１つ又は２つ以上を実装するように適合された特定用途向け集積回路（ＡＳＩＣ）として構成されてもよい。
例示的なネットワーキング環境
【００８８】
図９は、本開示の一実施形態に従う、様々なコンピューティングデバイスがネットワークを介して通信し得る態様を示す、ネットワーク化システムのブロック図である。特定の実施形態では、ネットワーク接続型ストレージ（ＮＡＳ）デバイスは、ネットワークファイルシステム（ＮＦＳ）、サーバメッセージブロック（ＳＭＢ）、又はコモンインターネットファイルシステム（ＣＩＦＳ）等の様々なプロトコルを使用して仮想化サーバ３１０と通信するように構成されてよい。
【００８９】
ネットワーク１８０は、複数のコンピューティングデバイス間での通信を容易にすることができる任意のタイプ又は形式のコンピュータネットワーク又はアーキテクチャを概して表す。ネットワーク１８０は、仮想化サーバ１０５とストレージシステム１７０との間での通信を容易にしてよい。特定の実施形態では、そして、図８のコンピューティングシステム８００に関して、図８の通信インターフェース８４５等の通信インターフェースは、仮想化サーバ１０５とネットワーク１８０との間にコネクティビティを提供するために使用されてよい。本明細書に記載及び／又は例示する実施形態は、インターネット又は任意の特定のネットワークベース環境に限定されないことに留意されたい。例えば、ネットワーク１８０は、ストレージエリアネットワーク（ＳＡＮ）であってよい。
【００９０】
少なくとも１つの実施形態では、本明細書で開示する実施形態のうちの１つ以上の全体又は一部は、コンピュータプログラムとしてコード化されてよく、そして、仮想化サーバ１０５、仮想マシン１２５、及びハイパーバイザ１２０、又はこれらの任意の組み合わせにロードされて実行されてよい。本明細書で開示する実施形態のうちの１つ以上の全体又は一部は、また、コンピュータプログラムとしてコード化されてもよく、そして、仮想化サーバ１０５、仮想マシン１２５、及び／又はハイパーバイザ１２０に記憶されてよく、並びにネットワーク１８０上に分散されてよい。
【００９１】
いくつかの例では、図１、２、及び３の仮想化サーバの全体又は一部は、クラウドコンピューティング又はネットワークベース環境の一部を表してよい。クラウドコンピューティング環境は、インターネットを介して、種々のサービス及びアプリケーションを提供し得る。これらのクラウドベースのサービス（例えば、サービスとしてのソフトウェア、サービスとしてプラットフォーム、サービスとしてのインフラストラクチャなど）は、ウェブブラウザ又は他の遠隔インターフェースを通じて、アクセス可能であり得る。本明細書において説明される種々の機能は、遠隔デスクトップ環境又は任意の他のクラウドベースのコンピューティング環境を通じて提供され得る。
【００９２】
加えて、本明細書に記載の構成要素のうちの１つ又は２つ以上は、データ、物理的デバイス、及び／又は物理的デバイスの表現を、ある形態から他の形態に変換し得る。例えば、ストレージシステム１７０、仮想化サーバ１０５、仮想マシン１２５、及び／又はハイパーバイザ１２０は、ストレージシステム及び／又は仮想化サーバに、アプリケーションの開発及び試験環境におけるプロダクションデータへのアクセスを最適化させるために、ストレージシステム及び／又は仮想化サーバの挙動を変換してよい。
【００９３】
本開示がいくつかの実施形態と関連して説明されたけれども、本開示は、本明細書で述べた特定の形式に限定されるように意図されていない。逆に、添付の請求項によって規定されるような本開示の範囲内に合理的に含まれ得るような代替形態、修正形態、及び等価物を包含するように意図されている。
【図１】
2018530817.tif 000003
【図２】
2018530817.tif 000004
【図３】
2018530817.tif 000005
【図４】
2018530817.tif 000006
【図５】
2018530817.tif 000007
【図６】
2018530817.tif 000008
【図７】
2018530817.tif 000009
【図８】
2018530817.tif 000010
【図９】
2018530817.tif 000011
【国際調査報告】
2018530817.tif 000012
2018530817.tif 000013
2018530817.tif 000014