(57)【特許請求の範囲】
【請求項１】
仮想マシンに割り当てられた複数の記憶箇所を備える第１の記憶オブジェクト上で圧縮操作を実行するためのリクエストを受け取るステップと、
前記リクエストを受けてファイルを作成するステップであって、前記ファイルは前記仮想マシンによって使用されていない第１の組の記憶箇所を備える、ステップと、
前記複数の記憶箇所の第１の下位集合である前記第１の組の記憶箇所を特定する情報を生成するステップであって、前記情報は圧縮操作を実行するための前記リクエストを受けて生成される、ステップと、
前記圧縮操作を実行するように構成されるホストに前記情報を送信するステップであって、前記圧縮操作が、前記複数の記憶箇所の第２の下位集合である第２の組の記憶箇所からデータを読み出すステップであって前記第１の組の記憶箇所と第２の組の記憶箇所とは互いに排他的である、ステップと、第２の記憶オブジェクトに前記データをコピーするステップとを含む、ステップと、
を含む方法。
【請求項２】
前記ファイルが前記リクエストを受けて前記仮想マシンによって作成される、
請求項１に記載の方法。
【請求項３】
前記圧縮操作の完了を検知するステップと、
前記検知を受けて前記ファイルを削除するステップと、
をさらに含む、請求項２に記載の方法。
【請求項４】
第２のリストを生成するステップであって、第１のリストが前記第１の記憶オブジェクトの第１のパーティションの使用していない部分に対応しており、前記第２のリストが前記第１の記憶オブジェクトの第２のパーティションの使用していない部分に対応しており、前記ホストは前記第２のリストを前記第１のリストと統合するように構成される、ステップをさらに含む、請求項１に記載の方法。
【請求項５】
前記ファイルの属性を設定するステップであって、前記属性は前記ファイルを作成するのに一切の入／出力（Ｉ／Ｏ）操作を必要としないことを示す、ステップと、
前記第１の組の記憶箇所を使用不可としてマークするステップと、
をさらに含む、請求項１に記載の方法。
【請求項６】
前記ホストは、前記リクエストを受け取ったことを受けて、前記第１の記憶オブジェクトに割り振られた記憶領域の第１の量に等しい記憶領域の量を前記第２の記憶オブジェクト用に割り振るようにさらに構成される、請求項１に記載の方法。
【請求項７】
仮想マシンに割り当てられた複数の記憶箇所を備える第１の記憶オブジェクト上で圧縮操作を実行するためのリクエストを受け取るステップと、
前記リクエストを受けてファイルを作成するステップであって、前記ファイルは前記仮想マシンによって使用されていない第１の組の記憶箇所を備える、ステップと、
前記複数の記憶箇所の第１の下位集合である前記第１の組の記憶箇所を特定する情報を生成するステップであって、前記情報は圧縮操作を実行するための前記リクエストを受けて生成される、ステップと、
前記圧縮操作を実行するように構成されたホストに前記情報を送信するステップであって、前記圧縮操作が、前記複数の記憶箇所の第２の下位集合である第２の組の記憶箇所からデータを読み出すステップであって、前記第１の組の記憶箇所と前記第２の組の記憶箇所とは互いに排他的である、ステップと、第２の記憶オブジェクトに前記データをコピーするステップとを含む、ステップと、
を実行可能なプログラム命令を記憶するコンピュータ可読記憶媒体。
【請求項８】
前記ファイルが前記リクエストを受けて前記仮想マシンによって作成される、
請求項７に記載のコンピュータ可読記憶媒体。
【請求項９】
前記プログラム命令が、
前記圧縮操作の完了を検知するステップと、
前記検知を受けて前記ファイルを削除するステップと、
をさらに実行可能である、請求項８に記載のコンピュータ可読記憶媒体。
【請求項１０】
前記プログラム命令が、
第２のリストを生成するステップであって、第１のリストが前記第１の記憶オブジェクトの第１のパーティションの使用していない部分に対応しており、前記第２のリストが前記第１の記憶オブジェクトの第２のパーティションの使用していない部分に対応しており、前記ホストは前記第２のリストを前記第１のリストと統合するように構成される、ステップをさらに実行可能である、請求項７に記載のコンピュータ可読記憶媒体。
【請求項１１】
前記プログラム命令が、
前記ファイルの属性を設定するステップであって、前記属性は前記ファイルを作成するのに一切の入／出力（Ｉ／Ｏ）操作を必要としないことを示す、ステップと、
前記第１の組の記憶箇所を使用不可としてマークするステップと、
をさらに実行可能である、請求項７に記載のコンピュータ可読記憶媒体。
【請求項１２】
前記ホストが、前記リクエストを受け取ったことを受けて、前記第１の記憶オブジェクトに割り振られた記憶領域の第１の量に等しい記憶領域の量を前記第２の記憶オブジェクト用に割り振るようにさらに構成される、請求項７に記載のコンピュータ可読記憶媒体。
【請求項１３】
１つもしくはそれ以上のプロセッサと、
前記１つもしくはそれ以上のプロセッサに連結され、プログラム命令を記憶するメモリと、
を含み、前記プログラム命令は、
仮想マシンに割り当てられた複数の記憶箇所を備える第１の記憶オブジェクト上で圧縮操作を実行するためのリクエストを受け取るステップと、
前記リクエストを受けてファイルを作成するステップであって、前記ファイルは前記仮想マシンによって使用されていない第１の組の記憶箇所を備える、ステップと、
前記複数の記憶箇所の第１の下位集合である前記第１の組の記憶箇所を特定する情報を生成するステップであって、前記情報は、圧縮操作を実行するための前記リクエストを受けて生成される、ステップと、
前記圧縮操作を実行するように構成されたホストに前記情報を送信するステップであって、前記圧縮操作は、前記複数の記憶箇所の第２の下位集合である第２の組の記憶箇所からデータを読み出すステップであって、前記第１の組の記憶箇所と前記第２の組の記憶箇所とは互いに排他的であるステップと、第２の記憶オブジェクトに前記データをコピーするステップとを含む、ステップと、
を実行可能であるシステム。
【請求項１４】
前記ファイルが前記リクエストを受けて前記仮想マシンによって作成され、
前記プログラム命令が、
前記圧縮操作の完了を検知するステップと、
前記検知を受けて前記ファイルを削除するステップと、
をさらに実行可能である、請求項１３に記載のシステム。
【請求項１５】
前記プログラム命令が、
第２のリストを生成するステップであって、第１のリストが前記第１の記憶オブジェクトの第１のパーティションの使用していない部分に対応しており、前記第２のリストが前記第１の記憶オブジェクトの第２のパーティションの使用していない部分に対応しており、前記ホストは前記第２のリストを前記第１のリストと統合するように構成される、ステップをさらに実行可能である、請求項１３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ記憶装置に関するものであり、特に仮想ディスクのサイズ変更に関するものである。
【背景技術】
【０００２】
仮想ディスクとは、１つもしくはそれ以上の基底物理記憶装置のメモリから直接的または間接的に形成された記憶オブジェクトのことである。仮想ディスクは仮想マシンにより、ハードディスクなどの物理記憶装置と解釈される。仮想ディスクの種類の１つが、ダイナミック仮想ディスクである。ダイナミック仮想ディスクのサイズは、使用する記憶領域が比較的少ない比較的小さな初期サイズから、ダイナミック仮想ディスクが使用する記憶領域が多い最大サイズへと増やすことができる。仮想マシンに記憶されるデータが増えるにつれて、仮想ディスクのサイズが増す。仮想マシンで実際に記憶領域が必要になっても、ダイナミック仮想ディスクは記憶領域を消費するだけなので、ダイナミック仮想ディスクは基底物理記憶装置の容量を効率的に利用する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
仮想マシンが記憶領域の一部分を使用しなくなると、使用されなくなったその記憶領域は取り戻すことができる。例えば、仮想マシンが仮想ディスクにファイルを記憶しても、その後そのファイルを削除済みと指定すれば、そのファイルを格納している基底物理記憶装置内の記憶領域は、もう仮想マシンによって実際に使用されていない。この記憶領域は、例えば、基底物理記憶装置を管理するファイルシステムによって取り戻すことができる。これは、仮想ディスクの「圧縮」と呼ばれる。しかし、従来の仮想ディスク圧縮方法だと、一般に相当量の入出力（Ｉ／Ｏ）操作が必要であり、性能に悪影響を及ぼすことがある。
【課題を解決するための手段】
【０００４】
記憶オブジェクトを圧縮する種々のシステムおよび方法が開示される。例えば、１つの方法は、記憶オブジェクトを圧縮するためのリクエストを受け取ることを伴い得る。記憶オブジェクトは、複数の記憶箇所を備え得る。この方法は、１組の記憶箇所を特定するリストを受け取ることも伴い得る。このリストは、記憶オブジェクトを圧縮するためのリクエストを受けて生成することができる。この方法は、受け取ったリスト内で特定されていない記憶オブジェクト内の１組の記憶箇所からデータを読み出すことと、読み出したデータを第１の記憶オブジェクトから第２の記憶オブジェクトにコピーすることも伴い得る。一実施形態において、第１および第２の記憶オブジェクトは、ダイナミック仮想ディスクである。
【０００５】
一実施形態において、この方法は、記憶オブジェクトを圧縮するためのリクエストを受けてファイルを作成することを伴う。ファイルの作成は、Ｉ／Ｏ操作を一切実行せずに行うことができる。この事実は、ファイルと関連付けられた属性の値を確認することによって検知することができる。このリストは、ファイルに含まれる記憶オブジェクトの部分を特定する。圧縮操作が完了したら、このファイルは削除することができる。一実施形態において、リストで特定された部分は、ファイルの作成前に使用されていなかった記憶オブジェクトの部分である。
【０００６】
一実施形態において、この方法は、第２のリストを受け取り、第２のリストを第１のリストと統合することを伴う。各々のリストは記憶オブジェクトのパーティションに対応し、それぞれのパーティションの使用していない部分を特定する。
【０００７】
システムの一例は、１つもしくはそれ以上のプロセッサと、その１つもしくはそれ以上のプロセッサに連結されたメモリと、を備え得る。このメモリは、上記と同様の方法を実行するために実行可能なプログラム命令を記憶する。同様に、かかるプログラム命令は、コンピュータ可読記憶媒体に記憶することができる。
【０００８】
上記内容は概要であることから、必然的に詳細が簡略化、一般化、および省略されている。そのため、当業者であれば、この概要は例示的なものに過ぎず、いかなる形での限定も意図していないということを認めるであろう。請求項によってのみ定義される本発明の他の態様、独創的な特徴、および利点は、以下に記載する非限定的な詳細の説明の中で明らかになる。
【０００９】
本発明は、添付の図面を参照することにより、一層良好に理解されるとともに、本発明の多数のオブジェクト、特徴、および利点が当業者にとって明らかになり得る。
【図面の簡単な説明】
【００１０】
【図１】一実施形態によるダイナミック仮想ディスクを圧縮するシステムのブロック図である。
【図２Ａ】一実施形態によるダイナミック仮想ディスクの図である。
【図２Ｂ】一実施形態によるダイナミック仮想ディスクの図である。
【図２Ｃ】一実施形態によるダイナミック仮想ディスクの図である。
【図３】一実施形態による、ダイナミック仮想ディスク圧縮操作を実行する方法のフローチャートである。
【図４Ａ】一実施形態による、ダイナミック仮想ディスク圧縮操作を実行する方法のさらなる態様を示すフローチャートである。
【図４Ｂ】一実施形態による、ダイナミック仮想ディスク圧縮操作を実行する方法の追加態様を示すフローチャートである。
【図５】一実施形態による、ソフトウェアでサイズ変更マネージャをどのように実装できるかを示す演算装置のブロック図である。
【図６】一実施形態による、各種演算装置がネットワークを介してどのように通信できるかを示すネットワーク接続されたシステムのブロック図である。
【発明を実施するための形態】
【００１１】
本発明には種々の改変例および代替形態があるが、本発明の具体的な実施形態が、図面および詳細な説明の中で具体例として提示される。図面および詳細な説明は、本発明を、開示された特定の形態に限定することを意図するものではないということを理解すべきである。むしろその意図は、添付の請求項によって定義される本発明の精神および範囲内に属するすべての改変物、均等物および代替物を網羅することである。
【００１２】
仮想化を用いるシステムには、１つもしくはそれ以上の仮想マシンがホスト装置に展開されている。ホスト装置には、プロセッササイクル、記憶領域、ネットワーク帯域幅など、ホスト装置のリソースへのアクセスを提供し、これらのリソースを管理するホスト・オペレーティング・システムがインストールされている。ホストは、仮想マシン間で使用するこれらのリソースを割り振る。各々の仮想マシン、すなわちゲストは、独自のオペレーティングシステムとアプリケーションとを稼働させることができる。
【００１３】
オペレーティングシステムと１つもしくはそれ以上のアプリケーションとを実行する仮想マシンは、一般にいくらかの記憶領域を使用する。ホストは一般に、１つもしくはそれ以上の仮想ディスクを仮想マシンに割り当てる。仮想ディスクの種類の１つが、ダイナミック仮想ディスクである。例えばホスト・オペレーティング・システムによってダイナミック仮想ディスクが作成されると、ホストは、例えば１００ギガバイト（Ｇｂ）という具合に仮想ディスクの最大サイズを設定する。仮想ディスクは１００Ｇｂの仮想ディスクと呼ばれ、仮想ディスクが仮想マシンと関連付けられると、その仮想マシンは仮想ディスクを１００Ｇｂの記憶装置とみなす。
【００１４】
ホストが最初にダイナミック仮想ディスクを作成した時点では、仮想マシンがその仮想ディスクにまだデータを全く書き込んでいないので、実質的には仮想ディスクが物理記憶領域を消費していない。すなわち、ホストは１００Ｇｂの記憶領域を仮想ディスクに割り振ったものの、仮想ディスクは記憶領域をまだ一切使用していないということになる。１００Ｇｂというホストの割り振りは、仮想ディスクと関連付けられている仮想マシンが１００Ｇｂの物理記憶領域が使用可能であるという約束である。仮想ディスクを動的に割り振ることは、仮想マシンが仮想ディスクに対して書き込みを命令する時期まで、ホストのファイルシステムが基底物理記憶装置の具体的な物理記憶装置を仮想ディスクに実際に割り当てる必要がないということを意味する。仮想ディスクによって最終的に利用され得る記憶領域は、仮想マシンが記憶領域に書き込む時期まで、一時記憶など他の目的で利用できる。
【００１５】
仮想ディスクが作成できるもう１つの種類のホストは、固定ディスクである。固定ディスクの場合には、固定ディスクが作成されたときに、ホストのファイルシステムが、割り振られた領域に対応する物理記憶容量を確保する。本実施例では、ホストが１００Ｇｂを固定仮想ディスクに割り振ると、ファイルシステムが基底物理記憶装置上で１００Ｇｂの物理記憶領域をブロックし、その記憶領域を使用済みとしてマークするため、その記憶領域は他の目的で一切使用できない。
【００１６】
ダイナミック仮想ディスクの場合、仮想マシンはその仮想ディスクを、１００Ｇｂ（またはほぼ１００Ｇｂ）の空き領域または使用可能領域を有する１００Ｇｂの記憶装置とみなし、ファイルシステムはその仮想ディスクを、実質的にサイズがゼロの記憶オブジェクトとみなす。仮想ディスクと関連付けられた特定のメタデータが一般に仮想ディスクに記憶されるので、仮想ディスクの作成時に仮想ディスクで使用される領域が実際にゼロというわけでない。例えば、仮想ディスクは、仮想ディスクで使用可能領域と使用された領域とを特定するマップを含み得る。そのため、たとえホストが１００Ｇｂの仮想ディスクを割り振った場合でも、仮想マシンは仮想ディスクを、最初は使用可能領域が１００Ｇｂ未満であるとみなすことがあり、ファイルシステムは仮想ディスクを、０よりも大きなサイズを有するものとみなすことがある。
【００１７】
仮想マシンが仮想ディスクへの書き込みを行うと、物理記憶領域が消費、すなわち使用される。一般に仮想マシンは、仮想ディスクの一部分を使用済みとしてマークし、それにより、仮想マシンが仮想ディスク内で認識する使用可能領域の量が減少する。仮想マシンは、データを書き込むために基底物理記憶装置に直接アクセスできる可能性がある。あるいは、仮想マシンは、ホスト上のファイルシステムにデータを移送する可能性があり、ファイルシステムは、物理記憶装置に実際の書き込みを行う可能性がある。仮想マシンは、ファイルシステムへの書き込み通知も行う。仮想マシンの通知を受けて、ファイルシステムは、仮想ディスクを記憶する基底物理記憶装置の一部分を使用済みとしてマークする。例えば、仮想マシンが１Ｇｂのファイルを書き込むのであれば、ファイルシステムは仮想ディスクを１Ｇｂ増やし、１Ｇｂに相当する物理記憶領域を使用済みとしてマークして、他の目的に利用できないようにする。このようにして、仮想ディスクのサイズを時間の経過とともに増やすことができる。
【００１８】
場合によっては、以前に仮想ディスクに書き込まれたデータを仮想マシンが記憶する必要がなくなることがある。以下の実施例を検討する。第１の時点で、仮想マシンがソフトウェアパッケージをダウンロードし、そのソフトウェアパッケージを仮想ディスクに書き込む。本実施例では、ソフトウェアパッケージが１Ｇｂの領域を使用する。つまり、仮想マシンが仮想ディスクにソフトウェアパッケージを書き込むと、仮想マシンは仮想ディスクにおける空き領域の量を１Ｇｂ減らし、ファイルシステムは仮想ディスクファイルのサイズを１Ｇｂ増やす。仮想マシンがその後、同じく１Ｇｂの記憶領域を使用するソフトウェアパッケージの新バージョンをダウンロードし、仮想ディスクにその新バージョンを記憶すると、仮想マシンは仮想ディスクにおける空き領域の量を再び１Ｇｂ減らし、ファイルシステムは仮想ディスクファイルのサイズを再び１Ｇｂ増やす。仮想ディスクファイルのサイズを増やすと、ファイルシステムは、基底物理記憶装置上で対応する量の物理記憶領域を使用済みとしてマークする。本実施例では、仮想ディスクが、新バージョンと旧バージョンという２バージョンのソフトウェアパッケージを現在記憶していることになる。旧バージョンが無用であると判断すると、仮想マシンは旧バージョンを削除済みとして指定することができる。仮想マシンは、旧バージョンと削除済みとして指定したときに、仮想ディスクで使用可能領域の量を１Ｇｂ増やす。ただし、仮想マシンは一般に、このことをファイルシステムに通知しないので、ファイルシステムには、ソフトウェアパッケージの両バージョンに割り振られた物理記憶領域が依然として存在する。すなわち、仮想マシンが、仮想ディスクのうち１Ｇｂしか、新しいソフトウェアパッケージを記憶する目的で使用されていないとみなすのに対し、ファイルシステムは、ソフトウェアパッケージの両バージョンを記憶する目的で２Ｇｂが使用されているとみなす。
【００１９】
仮想マシンが空き領域を作成する操作（例えば、上記実施例に見られるような、データを削除済みとして指定するなど）が実行されてもホストに通知されないので、ファイルシステムがかかる操作を受けて仮想ディスクのサイズを減らすことはない。この状況が論理的な結論に至ることができるのであれば、仮想ディスクファイルは最終的に自身の最大割り振りサイズまで増大する可能性があり、仮想マシンは仮想ディスクにデータをこれ以上記憶できなくなる可能性がある。場合によっては、仮想ディスクでデータの相当部分が仮想マシンにとって無用となった場合でも、この状況は起こり得る。例えば、仮想マシンが、あるデータを削除済みとして指定する必要があると指定した可能性がある。その結果、これらのデータ部分は、仮想マシンによって使用可能領域とみなされる。しかし、仮想マシンは一般に、データのどの部分が無用となったのかをファイルシステムに伝えない。そのため、ファイルシステムは、仮想マシンにとって無用となったデータを格納している基底物理記憶装置上の物理記憶容量を、使用済み、すなわち使用不可としてマークしたということになる。この場合、仮想マシンからすれば、仮想ディスクには使用可能な領域があるが、ホストからすれば、仮想ディスクが満杯であるとみなされ得る。
【００２０】
これはいくつかの理由で好ましくない。一実施例では、仮想ディスクファイルがファイルシステムによって認識される自身の最大割り振りサイズに達すると、仮想マシンは新しいデータ書き込み操作を実行することができなくなる。その上、記憶領域は概して貴重であることから、記憶装置で無用となったデータを記憶すると、記憶装置システムのコストが増し、記憶装置を無用に増設することが必要となり得る。さらには、記憶装置で利用される記憶領域の量を増やすことにより、場合によっては、記憶装置の性能に悪影響が出かねない。例えば、記憶装置がデータで一杯になっていると、記憶装置の容量に余裕がある場合よりも、記憶装置への読み書きに時間がかかる可能性がある。
【００２１】
上記の不都合を改善するために、従来のシステムは、仮想マシンにとって不要となった記憶領域を取り戻す方法を用いることができる。これは、仮想ディスクの圧縮と呼ばれる。かかる方法の１つと、かかる従来の方法に伴う限定事項を以下に記載する。
【００２２】
仮想ディスクを圧縮する１つの方法は、仮想ディスク用に割り振られてはいるが仮想マシンによって使用されていないデータを格納している基底記憶装置の全領域にパターン（例えばゼロ）を書き込むことを伴う。これは、仮想マシンが以前に書き込んだものの、仮想マシンがもう使用していないデータを記憶している物理記憶装置の領域にゼロが書き込まれるというものである。本実施例では、仮想マシンのオペレーティングシステムが、基底物理記憶装置上でデータを組織する目的で使用されたファイルシステムと互換性を持っている。これによって仮想マシンは、基底物理記憶装置内のどの物理記憶領域がゼロで上書きされる必要があるかを指定することができる。
【００２３】
仮想マシンは、仮想ディスクを圧縮するためのリクエストを受け取るとまず、以前に使用したがもう使用していない仮想ディスクの部分を特定する。仮想マシンはその後、仮想ディスクのその部分にゼロを書き込む。一実施例では、使用されているデータ、すなわち有効なデータを仮想ディスクのどの部分が格納しているか否かを表す仮想ディスクのマップを仮想マシンが維持している。このマップは、仮想ディスクにおいてどれだけの領域が使用されているか、そして仮想ディスクにおいてどれだけの領域が使用可能かを仮想マシンに明示する。
【００２４】
次にホストが、仮想マシンの操作を終了または休止する。つまり、仮想マシンはもう仮想ディスクへの書き込みができなくなる。場合によっては、仮想マシンが仮想ディスクから読み出せる場合がある。圧縮操作という状況では、仮想ディスク内のデータがコピー先仮想ディスクと呼ばれる新しい仮想ディスクにコピーされることから、仮想ディスクはコピー元仮想ディスクと呼ばれる。
【００２５】
ホストはその後、新しい（コピー先）仮想ディスクを作成する。ファイルシステムは、同量の記憶領域をコピー先仮想ディスクに割り振ることができる。例えば、ホストが以前にコピー元仮想ディスク用に１００Ｇｂを割り振っていたのであれば、ホストは同じく１００Ｇｂをコピー先仮想ディスク用に割り振ることができる。上記のとおり、コピー先仮想ディスクが作成された時点では、ホストはコピー先仮想ディスクを実質０サイズの記憶オブジェクトとみなす。
【００２６】
ホストはその後、コピー元仮想ディスクに対応する基底物理記憶装置の部分を読み出す。そして、仮想ディスクによって使用中であるとファイルシステムがマークしたすべての記憶領域を読み出す。すなわち、ファイルシステムが仮想ディスクファイルのサイズを１００Ｇｂとみなした場合、つまりファイルシステムが記憶領域のうち１００Ｇｂを仮想ディスクによって使用済みとマークした場合、ホストは１００Ｇｂ分のデータを読み出す。
【００２７】
ホストは、自らが読み出す基底物理記憶装置の部分ごとに、その部分がすべてゼロで満たされているかどうかを判断する。満たされている場合、ホストは物理記憶装置のその部分を仮想マシンによって使用されていないものとみなす。物理記憶装置の部分がゼロを含んでいない場合、ホストはその部分を仮想マシンによって使用されているものとみなし、その部分に記憶されているデータを新しい仮想ディスクに書き込む。そのため、仮想ディスクに割り振られており、かつゼロで満たされている物理記憶装置の部分は、コピー元仮想ディスクからコピー先仮想ディスクに一切コピーされない。前述のとおり、ゼロで満たされている部分は、仮想マシンが自ら使用しておらず、ゼロを書き込んだ部分である。
【００２８】
仮想マシンによって使用されたすべてのデータが読み出され、コピー先仮想ディスクにコピーされると、コピー先仮想ディスクには、仮想マシンによって使用中であるとマークされたデータだけが格納されており、仮想マシンにとって無用なデータは格納されていない。この時点で、ホストはコピー元仮想ディスクファイルを削除することができ、仮想マシンにコピー先仮想ディスクを使用して操作を再開するように命令することができる。仮想マシンは、コピー先仮想ディスクへのデータの書き込みと、コピー先仮想ディスクからの読み出しを開始することができる。
【００２９】
上記の方法だと、ホストからすれば、仮想ディスクのサイズを大きく減らすことができる。しかし、この方法を実施するには、仮想マシンによって使用されなくなったデータを格納している物理記憶装置の全部分にゼロを書き込み、仮想ディスクが使用した物理記憶装置の全部分を読み出す必要がある。場合によっては、読み書き（Ｉ／Ｏ操作）により、プロセッササイクルやデータ伝送帯域幅などの演算リソースが相当量消費され得る。
【００３０】
仮想ディスクは１００Ｇｂであるとみなされるが、仮想マシンが取り扱うデータは３２Ｇｂだけという実施例を検討する。上記の方法を実行すると、仮想マシンは６８Ｇｂのゼロを書き込むことになる。その後ホストが１００Ｇｂのデータを読み出し、その１００Ｇｂをゼロと比較する。ホストはその後、仮想マシンが取り扱う３２Ｇｂのデータを新しい仮想ディスクに書き込む。これにより、Ｉ／Ｏ操作が最大２００Ｇｂに達する。
【００３１】
ダイナミック仮想ディスクを圧縮する代替方法を、添付の図面を参照しながら以下説明する。この代替方法は、Ｉ／Ｏ操作の量を減らして同じ圧縮を実行し、理論上の最小限に近づけるというものである。上記実施例において、この代替方法は、わずか３２Ｇｂの読み書きを伴うだけである。１３６ＧｂのＩ／Ｏ操作がなくなるので、６８％の節約ということになる。つまり、同じ圧縮操作でも短時間で実行することができ、プロセッササイクルやデータ伝送帯域幅など、使用する演算リソースも大幅に減少する。
【００３２】
図１は、演算システムのブロック図である。図示のとおり、この演算システムは演算装置１０と記憶装置２０とを備えており、記憶装置２０は、ネットワーク３０によって連結された仮想ディスク２２と仮想ディスク２４とを備えている。ネットワーク３０は、インターネットなどのＷＡＮ（ワイド・エリア・ネットワーク）、１つもしくはそれ以上のＬＡＮ（ローカル・エリア・ネットワーク）、および／または１つもしくはそれ以上のＳＡＮ（ストレージ・エリア・ネットワーク）を含み得る。
【００３３】
演算装置１０は、パーソナルコンピュータ、ラップトップコンピュータ、サーバー、携帯情報端末、携帯電話などの演算装置である。演算装置１０はオペレーティングシステム５０を含んでおり、オペレーティングシステム５０は、ファイルシステム６０と仮想化モジュール７０とを含んでおり、仮想化モジュール７０はサイズ変更マネージャ７２を含んでいる。演算装置１０はまた、オペレーティングシステム４２（１）、サイズ変更モジュール４４（１）、アプリケーション４６（１）を備える仮想マシン４０（１）と、オペレーティングシステム４２（２）、サイズ変更モジュール４４（２）、アプリケーション４６（２）を備える仮想マシン４０（２）と、を実装する。
【００３４】
オペレーティングシステム５０は、プロセッサや記憶装置２０などの記憶装置リソースなど、演算装置１０を通じて使用可能な演算リソースへのアクセスを提供することができる。一実施形態において、記憶装置２０は、編成されて物理クラスタになる物理記憶装置を含む。クラスタは、例えば４Ｋｂといった具合に、記憶装置２０に読み出しまたは書き込みできるデータの最小量を表す。物理記憶装置内の各クラスタは、例えば先頭の物理クラスタを表す物理クラスタゼロから、物理記憶装置内の最終物理クラスタを表す最大番号まで、順番に付番される。記憶装置２０は、演算装置１０内に含まれていてもよく、かつ／または（バス、ネットワーク、またはその他適切な相互接続などを介して）演算装置１０に連結されていてもよい。記憶装置２０は、記憶装置の電源が落とされた後でもかかる記憶装置に記憶されたデータが記憶されたままとなるように、持続的なデータ記憶を提供する。かかる記憶装置は、例えば、ハードディスク、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、または他の大容量記憶装置、あるいは、かかる記憶装置の配列を含む記憶装置システム（例えば、冗長配列独立ディスク（ＲＡＩＤ）システムまたは光学式記憶ジュークボックス）であり得る。かかる記憶装置は、かかる物理記憶装置および／または記憶装置システム上で実装される仮想または論理記憶装置であってもよい。例えば、かかる記憶装置は、ＲＡＩＤ記憶装置システム上で実装される論理ボリュームであってもよい。加えて、かかる記憶装置は、１つもしくはそれ以上の記憶装置を含み得る。記憶装置は、ソリッドステート媒体（例えばフラッシュドライブ）、光媒体（例えばＣＤおよびＤＶＤ）、および磁気媒体（例えばハードディスクまたは磁気テープ）を含む１種類もしくはそれ以上の種類の記憶媒体を含み得る。
【００３５】
ファイルシステム６０は、記憶装置２０のデータなどのデータをファイルおよびディレクトリへと編成することができる。ファイルシステム６０は、記憶装置２０におけるファイルとデータの物理箇所の一覧を維持することができる。例えば、オペレーティングシステム５０が新しいファイルを作成すると、オペレーティングシステム５０は、サイズと種類、関連付け、その他の各種メタデータなど、ファイルのパラメータをファイルシステム６０に通知することができる。この情報により、ファイルシステム６０は、例えば記憶装置２０内のどの物理クラスタがそのファイルのデータを記憶するかを判断することができる。同様に、記憶装置２０への書き込みが命令されると、ファイルシステム６０が、具体的な物理クラスタを割り当てて、書き込まれるデータを記憶する。ファイルシステム６０は、どの物理クラスタが使用されているか、どのファイルが使用中の物理クラスタにデータを記憶しているか、そしてどの物理クラスタが使用されていないかを追跡する。
【００３６】
一実施形態では、オペレーティングシステム５０が仮想ディスク２２などの仮想ディスクを作成する。ファイルシステム６０は、記憶装置２０内のどの物理クラスタが仮想ディスク２２用のデータを記憶するかを指定する。一実施形態では、オペレーティングシステム５０が、仮想ディスク２２がダイナミック仮想ディスクであると指定する。ダイナミック仮想ディスクは、最初は実際に使用された記憶領域が比較的少なく、仮想ディスクへの書き込みアクセス権を有する仮想マシンによって必要とされる領域が増えるに連れて増大することができる。ファイルシステム６０は、ダイナミック仮想ディスク２２を、ファイルなど、最初はサイズが０に近い記憶オブジェクトとみなす。そのため、仮想ディスク２２が最初に作成されたとき、ファイルシステム６０は、仮想ディスク２２用のデータを実際に記憶しているため、記憶装置２０内の物理クラスタを一切特定しない。仮想マシン４０などによって仮想ディスク２２に書き込まれるデータが増えるにつれて、ファイルシステム６０は仮想ディスク２２のサイズを増やし、仮想ディスク２２用のデータを記憶しながら、記憶装置２０内で特定する物理クラスタを増やしていく。
【００３７】
オペレーティングシステム５０は、仮想マシン４０のうちの１つもしくはそれ以上に仮想ディスク２２を割り当てることができる。オペレーティングシステム５０は、仮想ディスクが割り振られ、仮想マシン４０に割り当てられたことを仮想マシン４０に通知することができる。一般に、仮想マシン４０は、物理コンピュータシステムの働きをするソフトウェア構成物である。例えば、仮想マシン４０は、アプリケーション４６などのアプリケーションを実行し、サービスを提供し、コマンドを処理することができる。アプリケーション４６の例としては、会計、表計算、データベース、文書処理、媒体消費、調達および展開、製品開発などのためのソフトウェアを挙げることができる。仮想マシンは、オペレーティングシステム４２など、独自のオペレーティングシステムを稼働させることができる。オペレーティングシステムの例としては、マイクロソフトＷｉｎｄｏｗｓ（登録商標）やＵｎｉｘ（登録商標）などがある。アプリケーション４６がデータを書き込むと、オペレーティングシステム４２は、その書き込みを仮想ディスク２２に命令することができる。オペレーティングシステム４２は、仮想ディスク２２の使用部分と使用可能部分とを特定するマップを保つことができる。仮想ディスク２２に記憶されたデータが物理的に記憶されている場所を判断するために、オペレーティングシステム４２はファイルシステム６０と通信することができる。
【００３８】
オペレーティングシステム５０は、使用可能領域の量など、仮想ディスク２２の特徴を仮想マシン４０に通知することもできる。仮想ディスク２２が動的であることを仮想マシン４０が把握している必要はない。オペレーティングシステム５０は、仮想マシン４０に仮想ディスク２２を割り当てると、仮想マシン４０が仮想ディスク２２でどれだけの領域を使用できるかを仮想マシン４０に通知する。仮想マシン４０は仮想ディスク２２を、オペレーティングシステム５０によって指定されたサイズの記憶オブジェクトとみなす。仮想マシン４０は、仮想ディスク２２を記憶する目的で使用された物理クラスタの実サイズ、すなわち数が、最初は非常に小さく、仮想ディスク２２にさらにデータを書き込んでいくにつれて増えるということを把握することができる。例えば、オペレーティングシステム５０は、１００Ｇｂを仮想ディスク２２に割り振り、仮想マシン４０に仮想マシン２２を割り当てることができる。仮想マシン４０は、仮想ディスク２２を１００Ｇｂの記憶オブジェクトとみなす。ファイルシステム６０は、仮想ディスク２２を０Ｇｂの記憶オブジェクトとみなす。一実施形態では、仮想マシン４０が、仮想ディスク２２を連続的に配置された仮想クラスタ配列として表すビットマップなどのマップを維持する。各仮想クラスタは固定サイズを有することができる。例えば、仮想マシン４０は、本実施例において１００Ｇｂの仮想ディスクである仮想ディスク２２を、各仮想クラスタが４Ｋｂである一連の２５Ｋ仮想クラスタと認識することができる。仮想マシン４０は、このマップを使用して、どの仮想クラスタが使用されており、どの仮想クラスタが使用されていないかを特定することができる。
【００３９】
アプリケーション４６による仮想ディスク２２への書き込み例は、次のように行われる。アプリケーション４６が書き込み操作を実行する。この書き込みは、アプリケーション４６によって使用されているファイルにデータを保存することや、ネットワークからダウンロードされたファイルを記憶することなどを伴い得る。仮想ディスク２２が使用可能領域を有するかどうかを仮想マシン４０が検知する。仮想マシン４０は、例えば、仮想クラスタのマップを確認して、どの仮想クラスタが使用可能かを検知することができる。仮想ディスク２２が満杯である、すなわち使用可能な仮想クラスタがないということを仮想マシン４０が検知すれば、この書き込みは失敗する。仮想ディスク２２に空きがあり、使用可能な仮想クラスタがあれば、アプリケーション４６は、ファイル名など、この書き込みと関連付けられた情報を仮想マシン４０に渡す。アプリケーション４６は、仮想マシン４０に書き込まれるデータを渡すこともできる。仮想マシン４０は、仮想ディスク２２への書き込み操作を命令する。そのために、仮想マシン４０は、書き込みが所望されることを表す情報をファイルシステム６０に渡す。この情報は、データが関連付けられているファイルのファイル名に加え、書き込まれるデータのサイズまたは量も特定することができる。
【００４０】
ファイルシステム６０は、データを受け入れられるだけの領域が仮想ディスク２２に割り振られているかどうかを検知する。例えば、アプリケーション４６が１Ｇｂのデータを書き込んでおり、仮想ディスク２２に１００Ｇｂが割り振られており、５０Ｇｂしか使用されていないことをファイルシステム６０が検知すると、ファイルシステム６０が、その書き込みを受け入れるだけの十分な領域が仮想ディスク２２に割り振られていることを検知する。このような場合に、ファイルシステム６０は、十分な使用可能領域があり、書き込みが続行可能であることを仮想マシン４０に通知することができる。十分な使用可能領域がなく、書き込みを続行できない場合、ファイルシステム６０は、書き込みが失敗するはずであるということを明示する。あるいは、ファイルシステム６０は、仮想ディスク２２に割り振る記憶領域を増やして書き込みを続行できるようにすることもできる。
【００４１】
ファイルシステム６０は、書き込みを受け入れるだけの十分な領域が仮想ディスク２２に割り振られていないことを検知すると、データを実際に記憶する１つもしくはそれ以上の物理クラスタまたは物理クラスタの範囲を記憶装置２０で割り当てる。ファイルシステム６０は、物理クラスタを特定する情報を仮想マシン４０に送ることもできる。仮想マシン４０は、ファイルシステム６０にデータを送信し、仮想クラスタマップを更新して、そのデータに割り当てられる仮想クラスタを使用済みと特定する。ファイルシステム６０は、記憶装置２０にそのデータを記憶することができる。あるいは、仮想マシン２２がそのデータを記憶装置２０に直接送信することができる。記憶装置２０は、ファイルシステム６０によって指定された物理クラスタにデータを記憶する。
【００４２】
アプリケーション４６がファイルを削除するためのコマンドを出した場合など、具体的なデータ項目が仮想マシン４０にとって不要になると、仮想マシン４０は、仮想クラスタマップを更新して、データを記憶する仮想クラスタが有効なデータをもう格納していないということを明示することができる。仮想クラスタのデータは削除済みとして指定され、仮想クラスタは使用可能な記憶領域としてマークされる。
【００４３】
仮想マシンの作成と仮想マシンおよび仮想マシン用のリソースの管理とに関連する操作は、仮想化モジュール７０によって実行することができる。仮想化モジュール７０は、サイズ変更マネージャ７２を備える。例えば、仮想ディスク２２などの仮想ディスクが圧縮されると、サイズ変更マネージャ７２は、サイズ変更モジュール、例えばサイズ変更モジュール４４と通信して、仮想ディスク２２を圧縮することができる。
【００４４】
一実施例では、オペレーティングシステム５０が、仮想ディスクを圧縮する必要があることを示す状態を検知し、この情報を仮想化モジュール７０に渡すことができる。サイズ変更マネージャ７２はその後、仮想ディスク２２の圧縮が実行中であることをサイズ変更モジュール４４に通知することができる。サイズ変更モジュール４４はその後、仮想ディスク２２の空き領域の実質的全体を占有する仮想ディスク２２でファイルを作成することができる。サイズ変更モジュール４４は、仮想マシン４０によって維持される仮想クラスタのマップを使用して、そのファイルが占有する仮想クラスタのリストを仮想ディスク２２に生成することができる。このリストは実質的に、仮想ディスク２２によって使用されていない仮想ディスク２２内の全仮想クラスタが記載されたリストである。なお、その箇所が仮想マシン４０によってこれまで一度も書き込まれていないか、データを記憶するために仮想マシン４０によって以前に使用されたことがあり、その後仮想マシン４０によって削除済みと指定されたかは関係ない。
【００４５】
仮想マシン４０は、仮想クラスタのリストをオペレーティングシステム５０に渡すことができる。一実施形態において、仮想マシン４０はまず、仮想クラスタのリストを、対応する物理クラスタのリストに変換する。仮想マシン４０が物理クラスタに書き込むと、ファイルシステム６０が、仮想ディスク２２用のデータを記憶する物理クラスタを仮想マシン４０に提供する。これにより、仮想マシン４０が、物理クラスタと仮想クラスタとの間でのマッピングを行うことができる。リスト内の物理クラスタは、仮想マシン４０が取り扱わないデータを格納している箇所を表す。
【００４６】
オペレーティングシステム５０は、仮想マシン４０が書き込んだ仮想ディスク２２内の、リストで特定された箇所を除く全箇所からデータを読み出し、読み出されたデータを、仮想ディスク２４など新しい仮想ディスク）にコピーすることができる。このコピー操作が完了した後、仮想ディスク２４は、仮想マシン４０が取り扱うデータだけを格納しており、そのデータを受け入れるのに十分な大きさしかない。すなわち、仮想ディスク２４には、仮想マシン４０が対象とするデータ用にのみ使用された記憶領域が存在するので、仮想ディスク２４は仮想ディスク２２よりも小さい可能性が高いのに対し、仮想ディスク２２は、仮想マシン４０がもう取り扱わないデータを記憶していた記憶領域を含んでいた可能性が高い。
【００４７】
図２Ａは、図１の仮想ディスク２２など、１００Ｇｂの仮想ディスクの図である。図２Ａは、図１のファイルシステム６０などのファイルシステムから見た仮想ディスク内の使用済み領域２０５と使用していない領域２１０を示す。使用済み領域２０５と使用していない領域２１０は、１つもしくはそれ以上の物理クラスタを表す。一実施形態において、仮想ディスクは、実質的に０バイトの使用済み記憶領域から満杯近くまで増大したダイナミック仮想ディスクである。例えば、図１のオペレーティングシステム５０などのオペレーティングシステムが１００Ｇｂを仮想ディスクに割り振ったとする。このオペレーティングシステムは、図１の仮想マシン４０などの仮想マシンに書き込み許可を与えることができる。
【００４８】
オペレーティングシステムが仮想ディスクを作成し、記憶領域（例えば１００Ｇｂ）を仮想ディスクに割り振った時点で、ファイルシステムは、この仮想ディスクを、データを記憶するのに使用される領域が実質的に０バイトであるとみなす。この時点では、仮想ディスク用のデータを記憶するための物理クラスタが割り当てられていない。仮想マシンが仮想ディスクにデータを書き込むと、ファイルシステムが、図１の記憶装置２０など、基底記憶装置内の具体的な物理クラスタをそのデータに割り当て、仮想マシンによって書き込まれるデータを格納している物理クラスタを使用済みとしてマークする。仮想ディスクは、ファイルシステムによって使用済みとしてマークされている記憶領域がほぼ０バイトである初期サイズから、時間の経過とともに、図２Ａに示すような、ファイルシステムによって使用済みとしてマークされている約９０Ｇｂの記憶領域まで増大する。仮想マシンが仮想ディスクへの書き込みを行うと、ファイルシステムが使用済みとしてマークする記憶領域（例えば物理クラスタ）を増やし、仮想ディスクが動的に増大する。
【００４９】
図２Ｂは、仮想マシンから見た図２Ａの仮想ディスクを示す。図２Ｂは、使用済み領域２１５と使用していない領域２２０とを示す。使用済み領域２１５と使用していない領域２２０は、１つもしくはそれ以上の仮想クラスタを表す。仮想ディスクへの書き込みを行う仮想マシンは、仮想ディスクからデータを削除することもできる。一実施形態において、仮想マシンの削除操作は、仮想ディスクにおける使用していない領域２２０の一部もしくは全部に対して行われる。ただし、この削除操作はファイルシステムに渡されないので、ファイルシステムは仮想ディスクを、仮想ディスクに割り振られた記憶領域の９０パーセントを使用するものとみなすのに対し、仮想マシンは仮想ディスクを、図２Ｂに示すとおり、仮想ディスクに割り当てられる記憶領域の約５０パーセントしかを使用していないものとみなす。
【００５０】
図２Ｃは、下記のとおり、圧縮操作後にファイルシステムから見た図２Ａの仮想ディスクを示す。図２Ｃは、使用済み領域２２５と使用していない領域２３０とを表す。使用済み領域２２５と使用していない領域２３０は、１つもしくはそれ以上の物理クラスタを表す。なお、図２Ｃでは、使用済み領域２２５が一連の隣接するクラスタとして描かれているが、このような配置が基底物理記憶装置に存在する必要はない。図２Ａおよび２Ｂに示すとおり、仮想マシンが対応する仮想クラスタを使用していないものとみなす場合でも、ファイルシステムは、仮想ディスクに含まれる特定の物理クラスタを、仮想ディスクによって使用されているものとみなす。圧縮操作により、ファイルシステムはこれらの領域を使用していないものとみなす。圧縮操作前には、ファイルシステムが仮想ディスクを９０パーセント使用済みと認識していたのに対し、圧縮操作後は、ファイルシステムが仮想ディスクを約５０パーセント使用済みとみなす。以上のとおり、圧縮操作により、ファイルシステムが利用できる領域が増える。
【００５１】
図３は、仮想ディスク圧縮操作を実行する方法のフローチャートである。一実施形態において、この方法は、図１のシステムなどのシステムによって実行される。３０５で圧縮操作が開始される。圧縮は、ユーザーコマンドを受けて開始することができる。例えば、システム管理者は、図１の仮想ディスク２２などの仮想ディスクを手動で選択し、仮想ディスクの圧縮操作を開始することができる。圧縮中の仮想ディスクは、コピー元仮想ディスクと呼ばれる。あるいは、しきい条件の検知を受けて圧縮操作を自動的に開始することもできる。例えば、図１のオペレーティングシステム５０などのオペレーティングシステムが仮想ディスクの利用率、すなわち、図１の記憶装置２０などの基底物理記憶装置が特定のしきい値（例えば９０パーセントが満杯）に達したことを検知することができる。このしきい値に達したという検知を受けて、オペレーティングシステムは仮想ディスクの圧縮操作を開始することができる。オペレーティングシステムは、仮想ディスクが使用する記憶領域（図１の記憶装置２０など）を管理するファイルシステム（図１のファイルシステム６０など）との通信を通じて、しきい値に達したことを検知することができる。オペレーティングシステムは、周期的に圧縮を開始したり、前回の圧縮操作からの経過時間の検知を受けて圧縮を開始したりすることもできる。
【００５２】
圧縮操作が実行されることをオペレーティングシステムが検知したことを受け、オペレーティングシステムは、図１のサイズ変更マネージャ７２などのサイズ変更マネージャにコマンドを出して圧縮を開始する。サイズ変更マネージャはその後、図１の仮想マシン４０などの仮想マシンにあるサイズ変更モジュール（図１に示すサイズ変更モジュール４４など）に圧縮操作を通知する。サイズ変更マネージャは、ホスト・オペレーティング・システムに代わって圧縮操作に関連する操作を実行することができる。サイズ変更モジュールは、仮想マシンに代わって圧縮に関連する操作を実行することができる。
【００５３】
図４Ａに関してさらに説明されるとおり、３１０でクラスタのリストが生成される。このリストは、圧縮操作の通知を受け取ったことを受けて、サイズ変更モジュールによって生成することができる。このリストは、仮想マシンが使用していないものとみなす仮想ディスク内の箇所を特定する。このリストで特定された箇所のいくつかは、ファイルシステムによって使用済みと特定される可能性がある。ファイルシステムによって使用済みと特定されている箇所は、ファイルシステムから見れば、仮想ディスクによって利用されている記憶領域の量に含められる。このリストは、仮想マシンが認識する仮想ディスク内の使用していない領域の実質的にすべてを特定する。代替実施形態では、このリストが、仮想マシンが使用済みとみなす箇所を特定することができる。
【００５４】
４０５で、図１の仮想ディスク２２などの仮想ディスクが、図１のサイズ変更モジュール４４などのサイズ変更モジュールが圧縮されるという通知を受け取る。この通知を受けて、サイズ変更モジュールは、４１０で一時ファイルを開く。サイズ変更モジュールは、図１の仮想マシン４０などの仮想マシンが認識するファイルのサイズを、仮想ディスクの空き領域の量とほぼ等しくなるように設定する。一実施形態において、仮想マシンは、使用可能領域と特定したすべての仮想クラスタを使用不可としてマークし、その仮想クラスタを一時ファイルに含める。仮想マシンが残す空き仮想クラスタの数は一般に比較的少ない。何らかの操作によって仮想ディスクに圧縮後に増大した場合には、このゆったりとした領域を使用してデータを記憶することができる。
【００５５】
ファイルを作成し、仮想クラスタを使用済みとしてマークすると、基底物理クラスタも使用済みとしてマークされる。これにより、図１の記憶装置２０などの基底物理記憶装置上で実行中のデフラグメンテーション操作による位置の移動が防止される。圧縮操作中に位置が移動すると、圧縮操作が失敗したり、間違ったデータがコピーされたりする可能性がある。
【００５６】
サイズ変更モジュールは、閉じられたとき削除されるものと指定するファイルの属性を設定する。サイズ変更モジュールは、ファイルの記憶を管理する図１のファイルシステム６０などのファイルシステムがそのファイルに割り当てられた使用していない領域をゼロで満たさないように、あるいはそのファイルに割り当てられた位置に操作を書き込むように指定するファイルの属性を設定する。一実施形態では、ファイルのメタデータにフラグ設定することを伴う。ファイルシステムは、一時ファイル用の領域を割り当てるときにこのフラグの値を読み出す。
【００５７】
一実施形態では、サイズ変更モジュールが複数の一時ファイルを作成する。例えば、サイズ変更モジュールは、仮想クラスタの隣接範囲ごとに一時ファイルを作成することができる。別の実施例では、仮想ディスクが、図１の記憶装置２０などの基底物理記憶装置の複数のパーティションにまたがり得る。本実施例において、サイズ変更モジュールは、仮想ディスクがまたがるパーティションごとに一時ファイルを作成することができる。あるいは、仮想ディスクを単一パーティションに含めることができる。
【００５８】
４１５で、サイズ変更モジュールは、ファイルに含まれるデータを記憶するために割り当てられた仮想クラスタを特定し、仮想クラスタのリストを作成する。４２０で、サイズ変更モジュールは、仮想クラスタの識別子を物理クラスタの識別子に変換し、物理クラスタの識別子のリストを新たに作成する。一実施形態では、仮想クラスタと論理的クラスタとが同じサイズでない。このような場合には、１つの仮想クラスタ番号が複数の論理クラスタ番号に対応することがあり、逆に複数の仮想クラスタ番号が１つの論理クラスタ番号に対応することもある。サイズ変更モジュールは、仮想クラスタ番号のリストを論理クラスタ番号のリストに変換した後、４２５でこのリストをサイズ変更マネージャに送信する。
【００５９】
図３に戻り、３１５で、オペレーティングシステムは、３１５で図１の仮想ディスク２４などの新しい仮想ディスクを確立する。この仮想ディスクは、コピー元仮想ディスクに記憶されたデータ用のコピー先仮想ディスクとしての働きをする。オペレーティングシステムは、コピー元仮想ディスクに割り振られた記憶領域と同量の記憶領域をコピー先仮想ディスクに割り振ることも、異なる量の記憶領域をコピー先仮想ディスクに割り振ることもできる。オペレーティングシステムは、コピー先仮想ディスクがダイナミック仮想ディスクであると指定することができる。コピー先仮想ディスクは、最初はファイルシステムから見て実質的に空である、すなわちサイズが０バイトである。
【００６０】
図４Ｂに関してさらに説明されるとおり、３２０で、オペレーティングシステムがコピー元仮想ディスクからコピー先仮想ディスクへとデータをコピーする。４３０で、サイズ変更マネージャが、サイズ変更モジュールによって生成されたリストを受け取る。４３５で、オペレーティングシステムが仮想マシンを休止する。仮想マシンの休止中は、仮想マシンが仮想ディスクへの書き込みを行うことができない。仮想マシンは、仮想マシンの休止中でも仮想ディスクからの読み出し処理を行うことができる。一実施形態では、圧縮進行中に仮想マシンがいかなる操作も実行しないように、オペレーティングシステムが仮想マシンを完全に停止することができる。
【００６１】
ファイルシステムは、仮想ディスク用のデータを記憶する基底物理記憶装置の物理クラスタのリストを維持する。４４０で、オペレーティングシステムは、物理記憶装置内の先頭の物理クラスタと一致する物理クラスタのリスト内の先頭のエントリを選択する。４４５で、オペレーティングシステムは、この物理クラスタの識別子を、サイズ変更モジュールから受け取った使用されていない物理クラスタのリスト内の項目と比較して、ファイルシステムによって使用済みと特定された物理クラスタが仮想マシンによって使用されているかどうかを判断する。物理クラスタが両方のリストで特定されていれば、サイズ変更モジュールから受け取ったリストにより、仮想マシンがもう使用していない物理クラスタが特定され、オペレーティングシステムは、仮想マシンによって使用されていないと特定されたクラスタをコピーしないので、オペレーティングシステムは、物理クラスタにあるデータをコピー元仮想ディスクからコピー先仮想ディスクにコピーしない。物理クラスタがファイルシステムと仮想マシンとによって使用済みであると特定されている場合（例えば、物理クラスタがサイズ変更モジュールから受け取ったリストで特定されていない場合）、オペレーティングシステムは、４５０でコピー元仮想ディスクからコピー先仮想ディスクにクラスタをコピーする。オペレーティングシステムは、かかるクラスタをコピー元仮想ディスクの箇所から読み出し、ファイルシステムによってコピー先仮想ディスクに割り当てられたクラスタに書き込む。コピー先仮想ディスクに書き込まれた各クラスタにより、ファイルシステムはコピー先仮想ディスクのサイズを動的に増やす。
【００６２】
４５５で、オペレーティングシステムは、コピー元仮想ディスクからコピー先仮想ディスクにコピーされていないクラスタが残っているかどうかを検知する。一実施形態において、この処理は、コピー元仮想ディスクによって使用済みであるとファイルシステムによって特定されたすべてのクラスタのリストをトラバースすることを伴う。コピーされていないクラスタがまだ残っている場合には、オペレーティングシステムが４６０で、ファイルシステムによって使用済みとしてマークされた物理クラスタのリスト内の次のエントリを選択する。
【００６３】
コピー先仮想ディスクにコピーする必要があるすべてのクラスタがコピー先仮想ディスクにコピーされると、サイズ変更モジュールが４６５で一時ファイルを閉じ、それによって一時ファイルが削除される。
【００６４】
図３に戻ると、オペレーティングシステムは、３２５で仮想ディスクをスワップする。そのために、オペレーティングシステムは仮想マシンに、コピー先仮想ディスクに対する読み出しおよび書き込みアクセス権を与えて、仮想マシンがコピー元仮想ディスクにアクセスする許可を取り消す。その後３３０で、オペレーティングシステムはコピー元仮想ディスクを削除することができる。
【００６５】
圧縮操作が完了すると、オペレーティングシステムは３３５で仮想マシンを再開する。仮想マシンが再開されると、仮想マシンはコピー先仮想ディスクに対する読み書きができるようになる。
【００６６】
図５は演算装置のブロック図であり、ソフトウェアでサイズ変更マネージャ７２をどのように実装できるかを表している。演算システム５１０は、コンピュータ可読命令を実行できるシングルまたはマルチプロセッサを搭載した任意の演算装置またはシステムを広く表す。演算システム５１０の例としては、ワークステーション、パーソナルコンピュータ、ラップトップ、クライアント側端末、サーバー、分散演算システム、ハンドヘルド装置（携帯情報端末や携帯電話など）、ネットワーク機器、記憶装置コントローラ（アレイコントローラ、テープ・ドライブ・コントローラまたはハード・ドライブ・コントローラ）などを含む１つもしくはそれ以上の各種装置があるが、これらに限定されるものではない。最も基本的な構成では、演算システム５１０が、少なくとも１つのプロセッサ５１４とシステムメモリ５１６とを備え得る。サイズ変更マネージャ７２を実装するソフトウェアを実行することにより、演算システム５１０は、ダイナミック仮想ディスク圧縮操作に参加するように構成された特殊目的の演算装置になる。
【００６７】
プロセッサ５１４は概して、データを処理できるか、命令を解釈および実行できる任意の種類または形態の処理装置を表す。ある実施形態では、プロセッサ５１４が、ソフトウェアアプリケーションまたはモジュールから命令を受け取り得る。これらの命令により、プロセッサ５１４は、本明細書に記載および／または図示された実施形態のうちの１つもしくはそれ以上に示された機能を実行し得る。例えば、プロセッサ５１４は、本明細書に記載されている操作の全部または一部を実行し得るし、かつ／または実行するための手段となり得る。プロセッサ５１４は、本明細書に記載および／または図示されたその他任意の操作、方法、またはプロセスを実行し得るし、かつ／または実行するための手段となり得る。
【００６８】
システムメモリ５１６は概して、データおよび／または他のコンピュータ可読命令を記憶できる任意の種類または形態の揮発性または不揮発性記憶装置または媒体を表す。システムメモリ５１６の例として、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、フラッシュメモリ、またはその他任意の適切なメモリ装置があるが、これらに限定されるものではない。一実施例では、ＲＡＭモジュール１３５を実装しているプログラム命令が、システムメモリ５１６に読み込まれ得る。
【００６９】
ある実施形態では、演算システム５１０が、プロセッサ５１４およびシステムメモリ５１６に加え、１つもしくはそれ以上のコンポーネントまたは要素を含み得る。例えば、図５に示すとおり、演算システム５１０は、メモリコントローラ５１８と、入／出力（Ｉ／Ｏ）コントローラ５２０と、通信インターフェイス５２２とを備える場合があり、それらの各々が通信インフラストラクチャ５１２を介して相互接続され得る。通信インフラストラクチャ５１２は概して、演算装置の１つもしくはそれ以上のコンポーネント間で通信しやすくすることのできる任意の種類または形態のインフラストラクチャを表す。通信インフラストラクチャ５１２の例としては、通信バス（業界標準アーキテクチャ（ＩＳＡ）など）、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）、ＰＣＩエクスプレス（ＰＣＩｅ）または同様のバスおよびネットワークがあるが、これらに限定されるものではない。
【００７０】
メモリコントローラ５１８は概して、メモリまたはデータを取り扱えるか、あるいは演算システム５１０の１つもしくはそれ以上のコンポーネント間の通信を制御できる任意の種類または形態の装置を表す。例えば、ある実施形態において、メモリコントローラ５１８は、通信インフラストラクチャ５１２を介してプロセッサ５１４、システムメモリ５１６、およびＩ／Ｏコントローラ５２０間の通信を制御し得る。ある実施形態において、メモリコントローラ５１８は、本明細書に記載および／または図示された操作または特徴のうちの１つもしくはそれ以上を、単独または他の要素との組み合わせによって実行し得るし、かつ／または実行する手段となり得る。
【００７１】
Ｉ／Ｏコントローラ５２０は概して、演算装置の入出力機能を調整および／または制御できる任意の種類または形態のモジュールを表す。例えば、ある実施形態において、Ｉ／Ｏコントローラ５２０は、プロセッサ５１４、システムメモリ５１６、通信インターフェイス５２２、ディスプレイアダプタ５２６、入力インターフェイス５５０、記憶装置インターフェイス５５４など、演算システム５１０のうちの１つもしくはそれ以上の要素間でのデータの移送を制御または簡便化し得る。
【００７２】
通信インターフェイス５２２は、演算システム５１０と１つもしくはそれ以上の追加装置との間での通信をしやすくすることのできる任意の種類または形態の通信装置またはアダプタを広く表す。例えば、ある実施形態において、通信インターフェイス５２２は、演算システム５１０と、追加演算システムを含むプライベートまたはパブリックネットワークとの間での通信をしやすくし得る。通信インターフェイス５２２の例としては、有線ネットワークインターフェイス（ネットワーク・インターフェイス・カードなど）、無線ネットワークインターフェイス（無線ネットワーク・インターフェイス・カードなど）、モデム、およびその他任意の適切なインターフェイスがあるが、これらに限定されるものではない。少なくとも一実施形態において、通信インターフェイス５２２は、インターネットなどのネットワークとの直接リンクを介してリモートサーバーとの直接接続を提供し得る。通信インターフェイス５２２はまた、ローカル・エリア・ネットワーク（イーサネットネットワークなど）（「イーサネット」は登録商標、以下同じ）、パーソナル・エリア・ネットワーク、電話またはケーブルネットワーク、携帯電話接続、衛星データ接続、あるいはその他任意の適切な接続を通じて、かかる接続を間接的に提供し得る。
【００７３】
ある実施形態では、通信インターフェイス５２２が、外部バスまたは通信経路を介した演算システム５１０と１つもしくはそれ以上のさらなるネットワークまたは記憶装置との間での通信をしやすくするように構成されているホストアダプタも表し得る。ホストアダプタの例としては、スモール・コンピュータ・システム・インターフェイス（ＳＣＳＩ）ホストアダプタ、ユニバーサル・シリアル・バス（ＵＳＢ）ホストアダプタ、電気電子技術者協会（ＩＥＥＥ）１５９４ホストアダプタ、シリアル・アドバンスト・テクノロジ・アタッチメント（ＳＡＴＡ）、シリアルアタッチドＳＣＳＩ（ＳＡＳ）とエクスターナルＳＡＴＡ（ｅＳＡＴＡ）ホストアダプタ、アドバンスド・テクノロジー・アタッチメント（ＡＴＡ）およびパラレルＡＴＡ（ＰＡＴＡ）ホストアダプタ、ファイバー・チャネル・インターフェイス・アダプタ、イーサネットアダプタなどがあるが、これらに限定されるものではない。
【００７４】
通信インターフェイス５２２は、演算システム５１０で分散あるいはリモートコンピューティングができるようにもし得る。例えば、通信インターフェイス５２２は、リモート装置から実行命令を受け取ったり、リモート装置に実行命令を送ったりし得る。
【００７５】
図５に示すとおり、演算システム５１０は、ディスプレイアダプタ５２６を介して通信インフラストラクチャ５１２に連結された少なくとも１つのディスプレイ装置５２４も備え得る。ディスプレイ装置５２４は概して、ディスプレイアダプタ５２６によって転送された情報を視覚的に表示できる任意の種類または形態の装置を表す。同様に、ディスプレイアダプタ５２６は概して、ディスプレイ装置５２４に表示するグラフィックス、テキスト、および他のデータを通信インフラストラクチャ５１２から（または当該技術で公知のフレームバッファから）転送するように構成されている任意の種類または形態の装置を表す。
【００７６】
図５に示すとおり、演算システム５１０は、入力インターフェイス５５０を介して通信インフラストラクチャ５１２に連結された少なくとも１つの入力装置５２８も備え得る。入力装置５２８は概して、コンピュータまたは人による入力情報を演算システム５１０に提供できる任意の種類または形態の入力装置を表す。入力装置５２８の例としては、キーボード、ポインティング装置、音声認識装置、またはその他任意の入力装置があるが、これらに限定されるものではない。
【００７７】
図５に示すとおり、演算システム５１０は、記憶装置インターフェイス５３４を介して通信インフラストラクチャ５１２に連結されたデータ記憶装置５３３も備え得る。記憶装置５３３は概して、データおよび／または他のコンピュータ可読命令を記憶できる任意の種類または形態の記憶装置または媒体を表す。例えば、記憶装置５３３は、磁気ディスクドライブ（いわゆるハードドライブなど）、フロッピー・ディスク・ドライブ（「フロッピー」は登録商標、以下同じ）、光学ディスクドライブ、フラッシュドライブなどを含み得る。記憶装置インターフェイス５３４は概して、演算システム５１０の記憶装置５３３と他のコンポーネントとの間でデータを移送するための任意の種類または形態のインターフェイスまたは装置を表す。
【００７８】
ある実施形態では、記憶装置５３３が、コンピュータソフトウェア、データ、または他のコンピュータ可読情報を記憶するように構成されている取り外し可能な記憶装置との間で読み出しおよび／または書き込みを行うように構成され得る。適切な取り外し可能記憶装置の例としては、フロッピーディスク、磁気テープ、光ディスク、フラッシュメモリ装置などがあるが、これらに限定されるものではない。記憶装置５３３は、コンピュータソフトウェア、データ、または他のコンピュータ可読命令を演算システム５１０に読み込めるようにするためのその他同様の構造物または装置も備え得る。例えば、記憶装置５３３は、ソフトウェア、データ、または他のコンピュータ可読情報を読み書きするように構成され得る。記憶装置５３３は、演算システム５１０の一部であってよく、あるいは他のインターフェイスシステムを通じてアクセスされる独立した装置であってもよい。
【００７９】
演算システム５１０には、その他多くの装置またはサブシステムが接続され得る。逆に、図５に示すコンポーネントと装置のすべてが、本明細書に記載および／または図示された実施形態を実践するために存在する必要があるというわけではない。上記の装置およびサブシステムは、図５に示すものとは異なる方法で相互接続され得る。
【００８０】
演算システム５１０は、任意の数のソフトウェア、ファームウェア、および／またはハードウェア構成も用い得る。例えば、本明細書に開示された実施形態のうち１つもしくはそれ以上が、コンピュータ可読記憶媒体上のコンピュータプログラム（コンピュータソフトウェア、ソフトウェアアプリケーション、コンピュータ可読命令、またはコンピュータ制御ロジックとも呼ばれる）として符号化されたものであり得る。コンピュータ可読記憶媒体の例としては、磁気記憶媒体（例えばハード・ディスク・ドライブおよびフロッピーディスク）、光記憶媒体（例えばＣＤ−ＲＯＭまたはＤＶＤ−ＲＯＭ）、電子記憶媒体（例えばソリッドステートドライブおよびフラッシュメディア）などがある。かかるコンピュータプログラムは、インターネットなどのネットワークを介して、あるいは可搬媒体で演算システム５１０に移送し、メモリに記憶することもできる。
【００８１】
コンピュータプログラムを格納しているコンピュータ可読媒体は、演算システム５１０に読み込まれ得る。コンピュータ可読媒体に記憶されたコンピュータプログラムの全体または一部分はその後、システムメモリ５１６、および／または記憶装置５３２、５３３の様々な部分に記憶され得る。演算システム５１０に読み込まれたコンピュータプログラムは、プロセッサ５１４によって実行されると、本明細書に記載および／または図示された実施形態のうちの１つもしくはそれ以上に示す機能をプロセッサ５１４が実行し、かつ／または実行するための手段となり得る。さらに／あるいは、本明細書に記載および／または図示された実施形態のうちの１つもしくはそれ以上が、ファームウェアおよび／またはハードウェアで実装され得る。例えば、演算システム５１０は、本明細書に開示された実施形態のうちの１つもしくはそれ以上を実装するように適合された特定用途向け集積回路（ＡＳＩＣ）として構成され得る。
【００８２】
図６は、クライアントシステム６１０、６２０、６３０とサーバー６４０、６４５がネットワーク６５０に連結され得るネットワークアーキテクチャ６００のブロック図である。クライアントシステム６１０、６２０、６３０は概して、任意の種類または形態の演算装置またはシステムを表す。
【００８３】
同様に、サーバー６４０、６４５は概して、図５の演算システム５１０などの演算装置で実装されるアプリケーションサーバーまたはデータベースサーバーなど、各種データベースサービスを提供し、かつ／または特定のソフトウェアアプリケーションを実行するように構成された演算装置またはシステムを表す。ネットワーク６５０は概して、イントラネット、ワイド・エリア・ネットワーク（ＷＡＮ）、ローカル・エリア・ネットワーク（ＬＡＮ）、パーソナル・エリア・ネットワーク（ＰＡＮ）、またはインターネットなどを含む任意の電気通信またはコンピュータネットワークを表す。一実施例において、サーバー６４０および／または６４５は、図１に示すＲＡＭモジュール１３５を備え得る。
【００８４】
図６に示すとおり、１つもしくはそれ以上の記憶装置６６０（１）−（Ｎ）は、サーバー６４０に直接取り付けられ得る。同様に、１つもしくはそれ以上の記憶装置６７０（１）−（Ｎ）は、サーバー６４５に直接取り付けられ得る。記憶装置６６０（１）−（Ｎ）および記憶装置６７０（１）−（Ｎ）は概して、データおよび／または他のコンピュータ可読命令を記憶できる任意の種類または形態の記憶装置または媒体を表す。ある実施形態において、記憶装置６６０（１）−（Ｎ）および記憶装置６７０（１）−（Ｎ）は、ネットワーク・ファイル・システム（ＮＦＳ）、サーバー・メッセージ・ブロック（ＳＭＢ）またはコモン・インターネット・ファイル・システム（ＣＩＦＳ）などの各種プロトコルを使用してサーバー６４０、６４５と通信するように構成されたネットワーク接続記憶（ＮＡＳ）装置を表し得る。
【００８５】
サーバー６４０、６４５は、ストレージ・エリア・ネットワーク（ＳＡＮ）ファブリック６８０にも接続され得る。ＳＡＮファブリック６８０は概して、複数の記憶装置間での通信をしやすくできる任意の種類または形態のコンピュータネットワークまたはアーキテクチャを表す。ＳＡＮファブリック６８０は、サーバー６４０、６４５と、複数の記憶装置６９０（１）−（Ｎ）および／またはインテリジェント・ストレージ・アレイ６９５との間での通信をしやすくし得る。ＳＡＮファブリック６８０は、記憶装置６９０（１）−（Ｎ）およびインテリジェント・ストレージ・アレイ６９５がクライアントシステム６１０、６２０、６３０にローカル接続された装置として表示されるような方法で、ネットワーク６５０とサーバー６４０、６４５とを介してクライアントシステム６１０、６２０、６３０と装置６９０（１）−（Ｎ）および／またはアレイ６９５との間での通信もしやすくし得る。記憶装置６６０（１）−（Ｎ）および記憶装置６７０（１）−（Ｎ）と同様、記憶装置６９０（１）−（Ｎ）およびインテリジェント・ストレージ・アレイ６９５は概して、データおよび／または他のコンピュータ可読命令を記憶できる任意の種類または形態の記憶装置または媒体を表す。
【００８６】
ある実施形態において、かつ図５の演算システム５１０に関して、図５の通信インターフェイス５２２などの通信インターフェイスは、各々のクライアントシステム６１０、６２０、６３０とネットワーク６５０との間での接続を提供する目的で使用され得る。クライアントシステム６１０、６２０、６３０は、例えばウェブブラウザまたは他のクライアントソフトウェアを使用して、サーバー６４０または６４５上にある情報にアクセスでき得る。かかるソフトウェアにより、クライアントシステム６１０、６２０、６３０が、サーバー６４０、サーバー６４５、記憶装置６６０（１）−（Ｎ）、記憶装置６７０（１）−（Ｎ）、記憶装置６９０（１）−（Ｎ）、またはインテリジェント・ストレージ・アレイ６９５によってホストされたデータにアクセスでき得る。図６は、データを交換するためのネットワーク（インターネットなど）を使用している様子を表しているが、本明細書に記載および／または図示された実施形態は、インターネットまたは特定のネットワークベースの環境に限定されない。
【００８７】
少なくとも１つの一実施形態において、本明細書に開示された実施形態のうちの１つもしくはそれ以上の全体または一部分は、コンピュータプログラムとして符号化され得るとともに、サーバー６４０、サーバー６４５、記憶装置６６０（１）−（Ｎ）、記憶装置６７０（１）−（Ｎ）、記憶装置６９０（１）−（Ｎ）、インテリジェント・ストレージ・アレイ６９５、またはそれらの任意の組み合わせに読み込まれ、実行され得る。本明細書に開示された実施形態のうちの１つもしくはそれ以上の全体または一部分は、コンピュータプログラムとして符号化され、サーバー６４０に記憶され、サーバー６４５によって実行され、ネットワーク６５０経由でクライアントシステム６１０、６２０、６３０に分散され得る。
【００８８】
いくつかの実施例において、図１、図５、および図６の演算装置の全体または一部分は、クラウドコンピューティングまたはネットワークベースの環境の部分を表し得る。クラウドコンピューティング環境は、インターネットを介して各種サービスおよびアプリケーションを提供し得る。これらクラウドベースのサービス（ＳａａＳ、ＰａａＳ、ＩａａＳなど）は、ウェブブラウザまたは他のリモートインターフェイスを通じてアクセスでき得る。本明細書に記載されている各種機能は、リモートデスクトップ環境またはその他任意のクラウドベースコンピューティング環境を通じて提供され得る。
【００８９】
加えて、本明細書に記載されているコンポーネントのうちの１つもしくはそれ以上が、データ、物理装置、および／または物理装置の表示形態をある形態から別の形態へと変更し得る。例えば、図１のアーカイブのモジュールは、演算装置にデータ操作をＲＡＭに記憶および管理させるために、演算装置の振る舞いを変更し得る。
【００９０】
本発明について、いくつかの実施形態と関連付けて説明してきたが、本発明は、本明細書に記載された具体的な形態に限定することを意図するものではなく、むしろ、かかる代替物、変形物、および均等物を網羅することを意図するものであり、これらは、添付の請求項によって定義される本発明の範囲内に合理的に含まれ得る。
【図３】
0005955870.tif 000002
【図４Ｂ】
0005955870.tif 000003
【図１】
0005955870.tif 000004
【図２】
0005955870.tif 000005
【図４Ａ】
0005955870.tif 000006
【図５】
0005955870.tif 000007
【図６】
0005955870.tif 000008