(57)【要約】本開示は、仮想ハードディスクイメージファイルを圧縮する方法および装置について記載する。本技術は、ファイル内のガベージデータブロックを検索して、ブロック割り当て表（ＢＡＴ）内のガベージデータブロックの記録を修正する。ファイルは１つまたは複数のデータブロックと、それぞれのデータブロックの情報を記録するＢＡＴとを含む。ガベージデータブロックとは、有効データを格納していないデータブロックである。本技術は、ガベージデータブロックの後にある有効データブロックを移動し、移動の後に、ＢＡＴ内の有効データブロックの記録を修正し、移動の後に、ファイルのサイズを圧縮する。
2014527231.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによって実行可能な命令で構成される、１つまたは複数のプロセッサによって実施される方法であって、
１つまたは複数のデータブロックと、それぞれのデータブロックの情報を記録するブロック割り当て表（ＢＡＴ）とを含むイメージファイル内において、有効データを格納していないデータブロックであるガベージデータブロックを検索することと、
前記ＢＡＴ内の前記ガベージデータブロックの記録を修正することと、
前記ガベージデータブロックの後にある有効データブロックを移動することと、
前記移動の後に、前記ＢＡＴ内の前記有効データブロックの記録を修正することと、
前記移動の後に、前記イメージファイルのサイズを圧縮することと
を含むことを特徴とする方法。
【請求項２】
それぞれのデータブロックは、１つまたは複数のセクタと、それぞれのセクタの情報を記録するビットマップとを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記ガベージデータブロックの検索に先立って、前記ガベージデータブロック内のガベージセクタを検索し、前記ビットマップ内の前記ガベージセクタの記録を修正することをさらに含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記ガベージデータブロック内の前記ガベージセクタの前記検索は、
前記データブロックの前記ビットマップを検索することと、
前記ビットマップ内にあるセクタに対応する記録が、前記セクタがデータを格納していることを示すという判断に応じて、前記イメージファイルの種類を判断することと、
前記イメージファイルが容量可変ハードディスクイメージファイルであるという判断に応じて、前記セクタ内に格納されたデータが有効データでない場合、前記セクタは前記ガベージセクタであると判断することと、
前記イメージファイルが差分ハードディスクイメージファイルであるという判断に応じて、前記セクタ内に格納されたデータが、親イメージファイルに同じセクタ位置を持つセクタ内に格納されたデータと同じである場合、前記セクタは前記ガベージセクタであると判断することと
を含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記セクタ内に格納されたデータが有効データでない場合、前記セクタは前記ガベージセクタであると前記判断することは、前記セクタ内に格納されたデータはすべて０であると判断することを含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記ガベージデータブロックの中の前記ガベージセクタを前記検索することは、
前記イメージファイルが容量可変ハードディスクイメージファイルであると判断することと、
前記データブロックのソースビットマップと、前記セクタが有効データを格納しているかどうかを示すブロックビットマップとを取得することと、
前記ソースビットマップと前記ブロックビットマップとの間でそれぞれのビットを比較することと、
前記ソースビットマップ内の前記セクタの記録が、前記セクタが前記有効データを格納していることを示し、かつ前記ブロックビットマップ内の前記セクタの記録が、前記セクタが有効データを格納していないことを示す場合、前記セクタは前記ガベージセクタであると判断することと
を含むことを特徴とする請求項３に記載の方法。
【請求項７】
前記ガベージデータブロック内の前記ガベージセクタを前記検索することは、
前記イメージファイルが差分ハードディスクイメージファイルであると判断することと、
前記データブロックのソースビットマップと、前記セクタが有効データを格納しているかどうかを示すブロックビットマップと、親イメージファイル内の前記データブロックの親ビットマップとを取得することと、
前記ソースビットマップと、前記ブロックビットマップと、前記親ビットマップとの間でそれぞれのビットを比較することと、
前記ソースビットマップ内の前記セクタの記録が、前記セクタが前記有効データを格納していることを示し、前記ブロックビットマップ内の前記セクタの記録が、前記セクタが有効データを格納していないことを示し、かつ前記親ビットマップ内の前記セクタの記録が、前記セクタが有効データを格納していないことを示す場合、前記セクタは前記ガベージセクタであると判断することと
を含むことを特徴とする請求項３に記載の方法。
【請求項８】
前記親ビットマップ内の前記セクタの前記記録が、前記有効データを格納していないかどうかを判断することをさらに含み、前記判断することは、
前記親イメージファイルから最終の先祖イメージファイルまでの親ビットマップを読み出すことと、
前記データブロックの任意の親ビットマップ内の前記セクタに対応するビットが、前記セクタが前記有効データを格納していると示した場合、前記親イメージファイル内の前記セクタが前記有効データを格納していると判断することと、
前記データブロックの任意の親ビットマップ内の前記セクタに対応するビットが、前記セクタが前記有効データを格納していないと示した場合、前記親イメージファイル内の前記セクタは前記有効データを格納していないと判断することと
を含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記ガベージデータブロックの後にある前記有効データブロックは、前記イメージファイルの物理的記憶領域内において、前記ガベージデータブロックの位置の後ろの位置を持つ有効データブロックであることを特徴とする請求項１に記載の方法。
【請求項１０】
前記ガベージデータブロックの後にある前記有効データブロックを前記移動することは、前記有効データブロック内のデータを前記ガベージデータブロックの位置にコピーすることを含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記移動の後に前記イメージファイルの前記サイズを前記圧縮することは、
前記移動の後に、前記イメージファイルの最後に未使用領域を形成することと、
前記イメージファイルから前記未使用領域を切り取ることと、
サイズが縮小したイメージファイルを取得することと
を含むことを特徴とする請求項１に記載の方法。
【請求項１２】
イメージファイルであって、１つまたは複数のデータブロックと、それぞれのデータブロックの情報を記録する、ブロック割り当て表（ＢＡＴ）とを含む、前記イメージファイル内において、ガベージデータブロックであって、有効データを格納していないデータブロックである、前記ガベージデータブロックを検索し、前記ＢＡＴ内の前記ガベージデータブロックに対応する記録を修正する、、ガベージデータブロック検索モジュールと、
前記ガベージデータブロックの後にある有効データブロックを、前記ガベージデータブロックの位置に移動させ、前記有効データブロックが移動された後に、前記ＢＡＴ内の前記有効データブロックの記録を修正する、データ移動モジュールと、
データブロックの前記移動が完了した後に、前記イメージファイルを圧縮する、ファイル圧縮モジュールと
を含むことを特徴とする装置。
【請求項１３】
それぞれのデータブロックは、１つまたは複数のセクタと、それぞれのセクタの情報を記録するビットマップとを含むことを特徴とする請求項１２に記載の装置。
【請求項１４】
前記データブロックの前記ビットマップを検索し、前記ビットマップ内の前記セクタの記録に従って、そのすべてのセクタがガベージセクタであると示された場合、前記データブロックが前記ガベージデータブロックであると判断する、ガベージセクタ検索モジュールをさらに含むことを特徴とする請求項１３に記載の装置。
【請求項１５】
前記ガベージセクタ検索モジュールは、
前記イメージファイルの前記データブロック内の前記ビットマップを検索し、前記ビットマップ内のセクタに対応する記録が、前記セクタ内に格納されているデータが存在することを示した場合には、判断サブモジュールをトリガする、ビットマップ検索サブモジュールと、
前記判断サブモジュールであって、
前記イメージファイルの種類を判断し、
前記イメージファイルが容量可変ハードディスクイメージファイルである場合、前記セクタ内のデータが有効データでないという判断に応じて、前記セクタが前記ガベージセクタであると判断し、
前記イメージファイルが差分ハードディスクイメージファイルである場合、前記セクタ内に格納されたデータが、親イメージファイルに同じセクタ位置を持つ、対応するセクタ内に格納されたデータと同じであるという判断に応じて、前記セクタが前記ガベージセクタであると判断する、前記判断サブモジュールと
を含むことを特徴とする請求項１４に記載の装置。
【請求項１６】
前記イメージファイルが容量可変ハードディスクイメージファイルであるという判断に応じて、前記ガベージセクタ検索モジュールは、
前記イメージファイルの前記データブロックのソースビットマップと、前記対応するセクタが有効データを格納しているかどうかを示すブロックビットマップとを取得する、第１の取得サブモジュールと、
前記ソースビットマップと前記ブロックビットマップとの間ですべてのビットを比較し、前記ソースビットマップ内の対応するセクタの記録が、前記セクタが有効データを格納し、一方で前記ブロックビットマップ内の前記セクタの対応する記録が、前記セクタが有効データを格納していないことを示した場合、前記セクタが前記ガベージセクタであると判断する、第１の比較サブモジュールと
を含むことを特徴とする請求項１４に記載の装置。
【請求項１７】
前記イメージファイルが差分ハードディスクイメージファイルであるという判断に応じて、前記ガベージセクタ検索モジュールは、
前記イメージファイルの前記データブロックのソースビットマップと、対応するセクタが有効データを格納しているかどうかを示すブロックビットマップと、前記先祖イメージファイル内の同じデータブロックの親ビットマップとを取得する、第２の取得サブモジュールと、
前記ソースビットマップと前記ブロックビットマップと前記親ビットマップとの間でそれぞれのビットを比較する、第２の比較サブモジュールと、
前記ソースビットマップ内の対応するセクタの記録が、前記セクタが有効データを格納していることを示し、一方で親ビットマップ内の前記セクタの対応する記録が、前記セクタが有効データを格納していないことを示し、かつ前記ブロックビットマップ内の前記セクタの対応する記録が、前記セクタが有効データを格納していないことを示した場合、前記セクタが前記ガベージセクタであると判断することと
を含むことを特徴とする請求項１４に記載の装置。
【請求項１８】
前記イメージファイルフィルタリングモジュールは、前記移動の後に前記イメージファイルの最後に未使用領域を形成し、前記イメージファイルから前記未使用領域を切り取り、縮小したサイズを持つイメージファイルを取得することを特徴とする請求項１２に記載の装置。
【請求項１９】
プロセッサによって実行可能な、コンピュータによって実行可能な命令を含むメモリであって、前記プロセッサによって実行されるとき、前記プロセッサに、
イメージファイルであって、１つまたは複数のデータブロックと、それぞれのデータブロックの情報を記録するブロック割り当て表（ＢＡＴ）とを含む、前記イメージファイル内において、ガベージデータブロックであって、有効データを格納していないデータブロックである、前記ガベージデータブロックを検索することと、
前記ＢＡＴ内の前記ガベージデータブロックの記録を修正することと、
前記ガベージデータブロックの後にある有効データブロックを移動することと、
前記移動の後に、前記ＢＡＴ内の前記有効データブロックの記録を修正することと、
前記移動の後に、前記イメージファイルのサイズを圧縮することと
を含む操作を実行させることを特徴とするメモリ。
【請求項２０】
それぞれのデータブロックは、１つまたは複数のセクタと、それぞれのセクタの情報を記録するビットマップとを含むことを特徴とする請求項１９に記載のメモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、参照によりその全体が本明細書に組み込まれる、２０１１年８月１０日に出願された、「仮想ハードディスクイメージを圧縮する方法および装置」という名称の、中国特許出願第２０１１１０２２８８３８．２号に対する外国優先権を主張するものである。
【０００２】
本開示は、コンピュータのファイル処理技術に関連し、より具体的には、仮想ハードディスクイメージファイルを圧縮する方法および装置に関する。
【背景技術】
【０００３】
イメージファイルは、ある程度ｚｉｐ形式のファイルに類似する。イメージファイルは、ある特定のフォーマットに従い、単一のファイル内に一組のファイルを含むことができ、これはオペレーションシステムやゲーム等のテスト版に使用され得る。イメージファイルの重要な特性の１つは、これが特定のソフトウエアによって認識されることができ、直接ディスクに焼くことができるということである。イメージファイルは、システムファイル、起動ファイル、パーティション情報等を含む、より多くの情報を含むことができるように拡張され得る。したがって、イメージファイルはパーティションのすべての情報またはハードディスクのすべての情報でさえも含み得る。
【０００４】
仮想ハードディスク（ＶＨＤ）とは、イメージファイル形式の仮想ハードディスクである。ＶＨＤフォーマットを持つファイルは、仮想マシンのデータをフォーマットし、格納するための仮想ハードディスクとして使用され得る。
【０００５】
ＶＨＤファイルには、容量固定ハードディスクイメージファイル、容量可変ハードディスクイメージファイルおよび差分ハードディスクイメージファイルを含む３つの型があり得る。容量固定ハードディスクイメージファイルのサイズは、作成されるときに固定される。ファイルシステムのフォーマット、データの書き込み、またはデータの削除等の、容量固定ハードディスクイメージファイルに対する操作は、容量固定ハードディスクイメージファイルのサイズを変化させないことがある。容量可変ハードディスクイメージファイルおよび差分ハードディスクイメージファイルのサイズは、その中にデータが書き込まれると、増加し得る。しかし、容量可変ハードディスクイメージファイルおよび差分ハードディスクイメージファイルのサイズは、その中のデータが削除されても縮小しない。
【０００６】
例えば、２ＧＢの記憶領域を持つ容量可変ハードディスクイメージファイルが作成されると、その初期のサイズは数１０ＫＢしかないことがある。容量可変ハードディスクイメージファイルの中にデータが書き込まれると、サイズは約２ＧＢまで増加し得る。しかし、容量可変ハードディスクイメージファイル内のデータを削除しても、そのサイズは縮小しない。
【０００７】
かかる特性に基づき、容量可変ハードディスクイメージファイルまたは差分ハードディスクイメージファイルの中に一度データが書き込まれると、そのファイルサイズは増加する。後にデータが削除されても、そのファイルサイズは圧縮されない。したがって、こうした削除されたデータは依然としてＶＨＤの記憶領域を占有し、これによって記憶領域を浪費する。
【発明の概要】
【０００８】
本概要は、下記の詳細な説明においてさらに記載される、さまざまな概念を簡略化された形で紹介するために提供される。本概要は、特許請求される発明の主題のすべての重要な特徴または必須の特徴を特定することを意図しておらず、また特許請求される発明の主題の範囲を決定するための補助として単独で使用されることも意図していない。例えば、「技術」という用語は、上記および本開示の全体に及ぶ文脈により認められるごとく、デバイス（複数可）、システム（複数可）、方法（複数可）、および／またはコンピュータ可読の命令を示し得る。本開示は、仮想ハードディスクイメージを圧縮する方法および装置を開示する。
【０００９】
本開示は、仮想ハードディスクイメージファイルを圧縮する方法を開示する。１つのファイルは、１つまたは複数のデータブロックと、それぞれのデータブロックの情報を記録するブロック割り当て表（ＢＡＴ）とを含む。このファイル内で１つまたは複数のガベージデータブロックが検索され、ＢＡＴ内のガベージデータブロックに対応する１つまたは複数の記録が修正される。ガベージデータブロックとは、有効データを格納していないデータブロックである。このガベージデータブロックの後にある有効データブロックは、ガベージデータブロックの位置に移動され、有効データブロックが移動された後、ＢＡＴ内の有効データブロックの対応する記録が修正される。データブロックの移動が完了した後、ファイルのサイズが縮小する。
【００１０】
例えば、それぞれのデータブロックは、１つまたは複数のセクタと、それぞれのセクタの情報を記録するビットマップとを含み得る。ファイル内のガベージデータブロックの検索に先立って、データブロック内の１つまたは複数のガベージセクタが検索され、ビットマップ内の１つまたは複数のガベージセクタの対応する記録が修正される。
【００１１】
例えば、ファイル内のガベージデータブロックの検索は、ファイルのデータブロックのビットマップの検索と、すべての対応するセクタの記録がガベージセクタであることを示すビットマップを持つデータブロックはガベージデータブロックであるという判断とを含み得る。
【００１２】
例えば、データブロック内のガベージセクタの検索は、ファイルのデータブロック内のビットマップの検索を含み得る。ビットマップ内のセクタに対応する記録が、セクタ内にデータが格納されていることを示した場合、ファイルの種類に関する判断がなされる。ファイルが容量可変ハードディスクイメージファイルである場合、セクタ内のすべてのデータが０で表されるかどうかのさらなる判断がなされる。判断結果が正である場合、セクタはガベージセクタであると判断される。ファイルが差分ハードディスクイメージファイルである場合、セクタ内に格納されたデータが、親イメージファイルに同じセクタ位置を持つ、対応するセクタ内に格納されたデータと同じかどうかのさらなる判断がなされる。これらが同じである場合、セクタはガベージセクタであると判断される。
【００１３】
別の例では、データブロック内のガベージセクタの検索は、ファイルが容量可変ハードディスクイメージファイルであるという判断がなされたとき、ある処理を行うことを含み得る。ファイルのデータブロックのソースビットマップと、対応するセクタが有効データを格納しているかどうかを示すブロックビットマップとが取得される。ソースビットマップとブロックビットマップとの間ですべてのビットが比較される。ソースビットマップ内の対応するセクタの記録が、このセクタがデータを格納していることを示し、一方でブロックビットマップ内のセクタの対応する記録が、このセクタがテータを格納していないことを示した場合、このセクタはガベージセクタであると判断される。
【００１４】
別の例では、データブロック内のガベージセクタの検索は、ファイルが差分ハードディスクイメージファイルであるという判断がなされたとき、ある処理を行うことを含み得る。ファイルのデータブロックのソースビットマップと、対応するセクタが有効データを格納しているかどうかを示すブロックビットマップと、親イメージファイル内の同じデータブロックの親ビットマップとが取得される。ソースビットマップと、ブロックビットマップと、親ビットマップとにあるすべてのビットが比較される。ソースビットマップ内の対応するセクタの記録が、このセクタがデータを格納していることを示し、一方で親ビットマップ内のセクタの対応する記録が、このセクタがデータを格納していないことを示し、かつブロックビットマップ内のセクタの対応する記録が、このセクタがデータを格納していないことを示した場合、このセクタはガベージセクタであると判断される。
【００１５】
例えば、データブロックが移動を終了した後、ファイルは圧縮される。データブロックが移動された後、１つまたは複数のガベージデータブロックに相当するサイズを持つ未使用領域がファイルの最後に形成される。この未使用領域は削除され、圧縮されたサイズを持つファイルが得られる。
【００１６】
本開示はまた、仮想ハードディスクイメージファイルを圧縮するための装置を開示する。ファイルは、データブロックと、それぞれのデータブロックの情報を記録するＢＡＴとを含む。本装置は、データブロック検索モジュールと、データ移動モジュールと、ファイル圧縮モジュールとを含み得る。データブロック検索モジュールは、ファイル内の１つまたは複数のガベージデータブロックを検索し、ＢＡＴ内のガベージデータブロックに対応する１つまたは複数の記録を修正する。ガベージデータブロックとは、有効データを格納していないデータブロックである。データ移動モジュールは、ガベージデータブロックの後にある有効データブロックを、ガベージデータブロックの位置に移動させ、有効データブロックが移動された後に、ＢＡＴ内の有効データブロックの対応する記録を修正する。データブロックの移動が完了した後に、ファイル圧縮モジュールはファイルのサイズを圧縮する。
【００１７】
例えば、それぞれのデータブロックは、１つまたは複数のセクタと、それぞれのセクタの情報を記録するビットマップとを含み得る。本装置は、データブロック内の１つまたは複数のガベージセクタを検索し、ビットマップ内の１つまたは複数のガベージセクタの対応する記録を再利用する、ガベージセクタ検索モジュールをさらに含み得る。
【００１８】
別の例では、ガベージデータブロック検索モジュールは、ファイルのデータブロックのビットマップを検索し、すべての対応するセクタの記録がガベージセクタであることを示すビットマップを持つデータブロックを、ガベージデータブロックであると判断し得る。
【００１９】
さらに別の例では、ガベージセクタ検索モジュールは、ビットマップ検索サブモジュールと、判断サブモジュールとを含み得る。ビットマップ検索サブモジュールは、ファイルのデータブロック内のビットマップを検索する。ビットマップ内のセクタに対応する記録が、セクタ内に格納されているデータがあることを示した場合には、判断サブモジュールがトリガされる。判断サブモジュールは、ファイルの種類を判断する。ファイルが容量可変ハードディスクイメージファイルである場合、判断サブモジュールは、セクタ内のすべてのデータが０と表されるかどうかを判断する。判断結果が正である場合、このセクタはガベージセクタであると判断される。ファイルが差分ハードディスクイメージファイルである場合、判断サブモジュールは、セクタ内に格納されているデータが、親イメージファイルに同じセクタ位置を持つ、対応するセクタ内に格納されているデータと同じであるかどうかを判断する。これらが同じである場合、このセクタはガベージセクタであると判断される。
【００２０】
別の例では、ファイルが容量可変ハードディスクイメージファイルである場合、ガベージセクタ検索モジュールは、第１の取得サブモジュールと、第１の比較サブモジュールとを含み得る。第１の取得サブモジュールは、ファイルのデータブロックのソースビットマップと、対応するセクタが有効データを格納しているかどうかを示すブロックビットマップとを取得する。第１の比較サブモジュールは、ソースビットマップとブロックビットマップとの間ですべてのビットを比較する。ソースビットマップ内の対応するセクタの記録が、セクタがデータを格納しており、一方でブロックビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示した場合、このセクタはガベージセクタであると判断される。
【００２１】
別の例では、ファイルが差分ハードディスクイメージファイルである場合、ガベージセクタ検索モジュールは、第２の取得サブモジュールと、第２の比較サブモジュールとを含み得る。第２の取得サブモジュールは、ファイルのデータブロックのソースビットマップと、対応するセクタが有効なデータを格納しているかどうかを示すブロックビットマップと、親イメージファイル内の同じデータブロックの親ビットマップとを取得する。第２の比較サブモジュールは、ソースビットマップと、ブロックビットマップと、親ビットマップとの間でそれぞれのビットを比較する。ソースビットマップ内の対応するセクタの記録が、セクタがデータを格納していることを示し、一方で親イメージファイルの親ビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示し、ブロックビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示した場合、このセクタはガベージセクタであると判断される。
【００２２】
従来技術と比較すると、本開示に記載の本発明の技術は、少なくとも以下の効果を有する。
【００２３】
第１に、本発明の技術は、仮想ハードディスクイメージファイル内のガベージデータブロックを検索し、ガベージデータブロックの後ろの有効データブロックをガベージデータブロックの位置へと移動し、したがってファイルの最後に未使用領域を形成する。本発明の技術は、次に、不要な領域を切り取るかまたは削除し、したがってガベージデータブロックが整理され、ファイルのサイズが圧縮される。本発明の技術は、容量可変ディスクイメージファイルまたは差分ディスクイメージファイルのサイズを、それらの中のいくつかのデータが削除された後に縮小することを可能にし、これによってファイルの記憶領域を確保する。
【００２４】
第２に、本発明の技術は、データブロック内のどのセクタがガベージセクタであるかを迅速に特定し、すべてがガベージセクタであるセクタを持つデータブロックをガベージデータブロックであると判断し得る、ガベージセクタを迅速に演算する方法を提供する。
【００２５】
本開示によるいかなる製品も、上述するすべての効果を有する必要はない。
【図面の簡単な説明】
【００２６】
本開示の実施形態をより良く説明するため、本実施形態において使用される図面の簡単な説明を記載する。以下の図面は、本開示のいくつかの実施形態にのみ関連することは明白である。当業者であれば、創意工夫を必要とすることなく本開示の図面により別の図面を取得することが可能である。
【図１】本開示に従う、ＶＨＤイメージファイルフォーマットの一例を示す図である。
【図２】本開示に従う、ブロック割り当て表（ＢＡＴ）の一例を示す図である。
【図３】本開示に従う、仮想ハードディスクイメージファイルを圧縮する方法の一例を示すフローチャートである。
【図４】本開示に従う、仮想ハードディスクイメージファイルを圧縮する別の方法の例を示すフローチャートである。
【図５】図２に示される実施形態の例に従う、ガベージデータブロックの検索後のＢＡＴの例を示す図である。
【図６】図５に示される実施形態の例に従う、データが移動された後のＢＡＴの例を示す図である。
【図７】図６に示される実施形態の例に従う、ファイルが圧縮された後のＢＡＴの例を示す図である。
【図８】本開示に従う、仮想ハードディスクイメージファイルを圧縮する装置の一例である。
【発明を実施するための形態】
【００２７】
以下に、図面を参照した本発明の技術の詳細な説明を記載する。本明細書に記載される実施形態は実施形態の例であり、本開示の範囲を制限するために使用されないものとする。
【００２８】
本開示に開示される技術は、仮想ハードディスクイメージファイル内のガベージデータを整理し、ファイルのサイズを縮小する方法を提供する。イメージファイル内のいくつかのデータが削除された後、本発明の技術は、ファイルのサイズを縮小させることができ、それにより、ファイルの記憶領域を確保する。以下に、仮想ハードディスク（ＶＨＤ）フォーマット内のイメージファイルの例を用いた本開示の方法の例を記載する。
【００２９】
図１は、本開示に従う、ＶＨＤイメージファイルフォーマット１００の一例を示す図である。ＶＨＤイメージファイル１００の例は、フッタ１０２、ヘッダ１０４、ＢＡＴ（ＢＡＴ）１０６、および１つまたは複数のデータブロック１０８（０）、１０８（１）、…、１０８（ｍ）を含み、ここで、ｍは任意の整数であってもよい。
【００３０】
フッタ１０２は、ヘッダ１０４の開始セクタ、ファイルサイズ、イメージの種類（容量可変イメージまたは差分イメージ等）等の情報を記録する。フッタ１０２は、ファイル１００の最後に存在する。ファイル１００の中に新しいデータが書き込まれたときは、後にファイル１００の最後へと移動される。フッタ１０２は、ファイル１００の重要な情報を含むため、フッタコピー１１０もまたファイル１００の最初に保存され得る。
【００３１】
ヘッダ１０４は、ＢＡＴ１０６の開始セクタ、ＢＡＴ１０６の項目数（これはデータブロックの最大許容数である）、データブロック１０８のサイズ等の情報を記録する。また、ファイルが差分イメージファイルである場合、ヘッダ１０４はまた、その親イメージまたは親イメージファイルの位置情報を記録する。
【００３２】
ＢＡＴ［０］１１２（０）およびＢＡＴ［１］１１２（１）等の、ＢＡＴ１０６内のそれぞれのＢＡＴ項目１１２は、各々のデータブロック１０８の開始セクタに対応する。例えば、ＢＡＴ［０］１１２（０）はデータブロック０  １０８（０）に対応し、ＢＡＴ［１］１１２（１）はデータブロック１  １０８（１）に対応する。ＢＡＴ内の記録が、対応するデータブロック１０８を持たない場合、記録は割り付けられていないデータブロックを表す０ｘＦＦＦＦＦＦＦＦを含み得る。
【００３３】
それぞれのデータブロック１０８は、ビットマップと、１つまたは複数のデータフィールド（またはセクタ）を含み得る。容量可変ＶＨＤファイル内において、ビットマップ内のビットが０である場合、そのビットに対応するセクタがデータを格納していないことを示す。ビットマップ内のビットが１である場合、そのビットに対応するセクタがデータを格納していることを示す。しかし、セクタ内のデータが削除されると、このビットは反転せず、依然として１を示す。言い換えると、１つのセクタ内のデータがデータブロック１０８からファイル１００へと割り当てられたとき、データが修正されなければ、対応するビットマップ内のビットは０であり、データが修正されれば、対応するビットマップ内のビットは１である。
【００３４】
差分ＶＨＤファイル内において、ビットが１である場合、これは差分ＶＨＤファイルの対応するセクタが有効データを格納していることを表す。ビットが０である場合、これは差分ＶＨＤファイルの対応するセクタが有効データを格納しておらず、データが親イメージファイルの対応するセクタから読み出される必要があることを表す。親イメージファイルもまた差分イメージファイルである場合、データは、差分でない先祖イメージファイル（これは容量固定または容量可変である）が見つかるまで、親イメージファイルの親イメージファイルから読み出される必要がある。
【００３５】
イメージファイル１００内のデータブロックは、同じサイズを有してもよく、これはヘッダ１０４内に記録される。
【００３６】
図１に示すイメージファイルフォーマット１００に基づき、容量可変イメージファイルまたは差分イメージファイルが作成されると、新規に作成されたイメージファイルは、フッタ、ヘッダ、ＢＡＴ等を含むセクションのみを含み得る。データブロックは割り当てられない。データがイメージファイルの中に書き込まれると、データに１つまたは複数のデータブロックが割り当てられてこのデータを保存し、ＢＡＴ内の対応する記録が更新されてデータブロックの開始セクタが記録される。
【００３７】
格納されているデータがＶＨＤイメージファイルから読み出されると、読み出される論理セクタ番号（これは、ＶＨＤイメージファイルに相対する物理セクタ番号の代わりに、データを格納している論理セクタ番号に対応する）がＶＨＤイメージファイルに相対する物理セクタ番号に変換される。変換方法の一例を以下に示す。
ＢｌｏｃｋＮｕｍｂｅｒ＝ＬｏｇｉｃａｌＳｅｃｔｏｒＮｕｍｂｅｒ／ＳｅｃｔｏｒｓＰｅｒＢｌｏｃｋ、
ここで、記号“／”は除算演算子を表す。例えば、５／３＝１である。
ＳｅｃｔｏｒＩｎＢｌｏｃｋ＝ＬｏｇｉｃａｌＳｅｃｔｏｒＮｕｍｂｅｒ％ＳｅｃｔｏｒｓＰｅｒＢｌｏｃｋ、
ここで、記号“％”はモジュロ演算子を表す。例えば、５％３＝２である。
ＰｈｙｓｉｃａｌＳｅｃｔｏｒＬｏｃａｔｉｏｎ＝ＢＡＴ［ＢｌｏｃｋＮｕｍｂｅｒ］＋ＢｌｏｃｋＢｉｔｍａｐＳｅｃｔｏｒＣｏｕｎｔ＋ＳｅｃｔｏｒＩｎＢｌｏｃｋ、
ここで、
ＬｏｇｉｃａｌＳｅｃｔｏｒＮｕｍｂｅｒは論理セクタ番号を表し、
ＢｌｏｃｋＮｕｍｂｅｒはデータブロック番号を表し、
ＳｅｃｔｏｒｓＰｅｒＢｌｏｃｋはデータブロック内のセクタの数を表し、
ＳｅｃｔｏｒＩｎＢｌｏｃｋは置かれたデータブロック内のセクタの数を表し、
ＰｈｙｓｉｃａｌＳｅｃｔｏｒＬｏｃａｔｉｏｎは、ＶＨＤイメージファイルに相対する物理セクタ番号を表し、
ＢｌｏｃｋＢｉｔｍａｐＳｅｃｔｏｒＣｏｕｎｔは、ビットマップ内のセクタの数を表す。
【００３８】
仮想マシンのユーザの観点からすると、ＶＨＤイメージファイルはディスクパーティションのような働きをし、その上にファイルシステムを配備することができる。書き込まれることが必要なデータが存在する場合、異なるファイルシステム用の異なるデータ書き込みストラテジに基づき、データはファイルシステムの異なる物理的位置に書き込まれ得る。一例において、データはファイルシステムの開始位置からの順序通りに書き込まれず、後に１つずつとなる（すなわち、開始位置に相対して、小さいセクタ番号から始まって大きいセクタ番号へ）。したがって、ＶＨＤファイルにおいて、データブロックの順序は、その開始セクション番号としばしば異なる。
【００３９】
図１の例において、例えば、それぞれのデータブロック１０８のサイズは、２ＭＢであり得る。仮想マシンのユーザが、３ＭＢ目の位置に数ＫＢのデータを書き込むことを意図すると、ファイルシステムはまずＶＨＤファイルにデータブロック０  １０８（０）ではなくデータブロック１  １０８（１）を割り当て得る。
【００４０】
図２は、本開示に従う、ＢＡＴ２０２の例を図示する。図２の例において、ＶＨＤファイル２００は１６個のデータブロックを有し得る。ＢＡＴ２０２は、１６データブロック（これはＤＢと短縮される）２０４の数を記録し、それらはＤＢ０  ２０４（０）、ＤＢ１  ２０４（１）、ＤＢ２  ２０４（２）、ＤＢ３  ２０４（３）、ＤＢ４  ２０４（４）、ＤＢ５  ２０４（５）、ＤＢ６  ２０４（６）、ＤＢ７  ２０４（７）、ＤＢ８  ２０４（８）、ＤＢ９  ２０４（９）、ＤＢ１０  ２０４（１０）、ＤＢ１１  ２０４（１１）、ＤＢ１２  ２０４（１２）、ＤＢ１３  ２０４（１３）、ＤＢ１４  ２０４（１４）、ＤＢ１５  ２０４（１５）である。ＢＡＴ２０２はまた、それぞれのデータブロック２０４の開始セクタを記録する。
【００４１】
各々のデータブロックの開始セクタ番号は、ＶＨＤファイル内の各々のデータブロックの相対位置である。偏差２０６は、ファイル２００内の各々のデータブロックの相対位置を示す。
【００４２】
各々のデータブロックの開始セクタ番号が０ｘＦＦＦＦＦＦＦＦであるとき、これは各々のデータブロックがまだ割り付けられていないことを示す。図２の例において、ＤＢ０  ２０４（０）の開始セクタ番号は１５であり、これは偏差２０６における値１５に対応する。ＤＢ１  ２０４（１）、ＤＢ２  ２０４（２）、ＤＢ３  ２０４（３）、ＤＢ９  ２０４（９）、ＤＢ１０  ２０４（１０）およびＤＢ１１  ２０４（１１）の開始セクタ番号は、０ｘＦＦＦＦＦＦＦＦである。ＤＢ０  ２０４（０）の開始セクタ番号は１５であり、これは偏差２０６における値１５に対応する。ＤＢ４  ２０４（４）の開始セクタ番号は８２２３であり、これは偏差２０６における値８２２３に対応する。ＤＢ５  ２０４（５）の開始セクタ番号は１２３２７であり、これは偏差２０６における値１２３２７に対応する。ＤＢ６  ２０４（６）の開始セクタ番号は１６４３１であり、これは偏差２０６における値１６４３１に対応する。ＤＢ７  ２０４（７）の開始セクタ番号は３２８４７であり、これは偏差２０６における値３２８４７に対応する。ＤＢ８  ２０４（８）の開始セクタ番号は３６９５１であり、これは偏差２０６における値３６９５１に対応する。ＤＢ１２  ２０４（１２）の開始セクタ番号は２０５３５であり、これは偏差２０６における値２０５３５に対応する。ＤＢ１３  ２０４（１３）の開始セクタ番号は２４６３９であり、これは偏差２０６における値２４６３９に対応する。ＤＢ１４  ２０４（１４）の開始セクタ番号は２８７４３であり、これは偏差２０６における値２８７４３に対応する。ＤＢ１５  ２０４（１５）の開始セクタ番号は４１１９であり、これは偏差２０６における値４１１９に対応する。図２に示すように、それぞれのデータブロック２０４の開始セクタ番号は、ＤＢ０  ２０４（０）からＤＢ１５  ２０４（１５）への順序通りに、小さい数から大きい数へと並んではいない。
【００４３】
上記に記載した説明に基づき、以下はＶＨＤファイルからデータが削除されたとしても、従来技術がＶＨＤファイルを圧縮できないことを示す分析である。
【００４４】
従来技術において、データが書き込まれるべきセクタに対応するデータブロックがまだ割り付けられていない場合（すなわち、ＢＡＴ内の対応する項目記録は０ｘＦＦＦＦＦＦＦＦである）、新規のデータブロックが割り付けられ（ＢＡＴ内の対応する項目記録は、新規に割り付けられたデータブロックの新規の開始セクション番号）、データが書き込まれるべきセクタに対応するビットマップ内のビットが１に修正される。しかし、いくつかのデータが削除された後、データブロック内のデータが有効でなくても有効であっても、ビットマップ内のデータブロックのビットは反転せず、依然として１に留まり、これはデータブロックが割り付けられていることを示す。したがって、従来技術はデータブロックによって占拠されている記憶領域を回収することができず、これによって記憶領域が浪費されることをもたらす。
【００４５】
上記に記載した説明に基づき、ＶＨＤファイルの記憶領域を確保するためには、ＶＨＤファイルは圧縮されねばならない。ファイルが圧縮される前に、データファイルの後の位置に格納されているデータは、ガベージデータが位置する場所に移動され、したがってファイルの最後に未使用領域が形成される。未使用領域は次に切り取られるか削除される。
【００４６】
したがって、本開示は、ファイル内のガベージデータを効果的に排除し、ファイルを圧縮するための、仮想ハードディスクイメージファイルを圧縮する方法を提供する。
【００４７】
図３は、本開示に従う、仮想ハードディスクイメージファイルを圧縮する方法の一例のフローチャートを示す。３０２で、ファイル内のガベージデータブロックが検索され、ＢＡＴ内のガベージデータブロックの対応する記録が修正される。ガベージデータブロックとは、有効データを格納していないデータブロックである。
【００４８】
ファイル内のデータブロックは、主にガベージデータブロックとして、または有効データブロックとして分類される。有効データブロックとは、有効データを格納しているデータブロックである。ガベージデータブロックとは、中のデータがすべて削除されたデータブロックを指す。すなわち、ガベージデータブロック内のデータは有効でない。
【００４９】
ガベージデータブロックが発見された後、ＢＡＴ内のガベージデータブロックの開始セクション番号の値が０ｘＦＦＦＦＦＦＦＦに設定される。すなわち、このデータブロックに対応する論理データブロックは、データを格納していない。
【００５０】
３０４で、ガベージデータブロックの後の位置を有する有効データブロックがガベージデータブロックの位置に移動され、移動後のＢＡＴ内の有効データブロックの対応する記録が修正される。
【００５１】
ファイルの物理的記憶領域内において、後の位置とは、ガベージデータブロックの位置がガベージデータブロックの位置へ移動された後のファイル内の位置を有する有効データブロックを指す。ＢＡＴ内の有効データブロックの開始セクション番号は、ガベージデータブロックの開始セクション番号に修正される。
【００５２】
移動とは、複製処理を指す。ガベージデータブロックの後の位置を有する有効データブロック内のデータは、ガベージデータブロックの位置にコピーされる。
【００５３】
３０６で、データブロックが移動を終了した後、ファイルが圧縮される。この移動の目的は、ファイルの最後に不要な領域が形成される程度に、有効データブロックをファイルの前方に移動させることである。不要な領域は次に切り取られるか削除される。したがって、ファイルのサイズは圧縮される。
【００５４】
当業者が図３に示す実施形態の例をより良く理解することができるように、図４に本開示に従う、仮想ハードディスクイメージファイルを圧縮する別の方法の例のフローチャートを示す。図４はやはり例としてＶＨＤファイルを使用する。
【００５５】
４０２で、ファイル内のガベージデータセクタが検索される。例えば、それぞれのデータブロック内のそれぞれのセクタに関して、データブロックのビットマップが検索される。ビットマップ内のセクタに対応する記録が、セクタマップ内のセクタに対応するビットが１であるというように、セクタ内にデータが格納されていることを示した場合、データは対応するセクタ内に格納されているか、データはすでにセクタから削除されている。１つまたは複数のさらなる判断がなされる必要がある。
【００５６】
ファイルが容量可変ハードディスクイメージファイルである場合、セクタ内に格納されたデータがすべて０であるかどうか判断される。セクタ内に格納されたデータがすべて０である場合、セクタはガベージセクタであると判断される。
【００５７】
ファイルが差分ハードディスクイメージファイルである場合、セクタ内に格納されたデータが、親イメージファイル内の同じセクタ位置に格納されたデータと同じであるかどうかが判断される。セクタ内に格納されたデータが、親イメージファイル内の同じセクタ位置に格納されたデータと同じである場合、セクタはガベージセクタであると判断される。
【００５８】
４０４で、ビットマップ内のガベージセクタの対応する記録が修正される。ガベージセクタが発見された後、ビットマップ内のガベージセクタの対応するビットが０にクリアされ、これはセクタ内にデータが格納されていないことを表す。
【００５９】
４０６で、ファイル内のガベージデータブロックが検索される。例えば、ファイル内のデータブロックのビットマップが検索される。ビットマップ内のデータブロックのすべてのセクタの記録がガベージセクタであると示されたとき、データブロックはガベージデータブロックであると判断される。しかし、それぞれのデータブロックについて、データブロックが使用される場合（ＢＡＴの対応する記録が０ｘＦＦＦＦＦＦＦＦでないように）は、上記に記載の操作の後、データブロックのビットマップはすべて０を示し、もはや有効データを格納していないため、データブロックもまたガベージデータブロックであると判断される。
【００６０】
しかし、データブロックのビットマップ内において、セクタに対応するいくつかのビットが０であり、セクタに対応するいくつかのビットが１である場合、データブロックはガベージデータブロックではなく、依然として有効データブロックである。
【００６１】
４０８で、ＢＡＴ内のガベージデータブロックの対応する記録が修正される。ＢＡＴにおいて、ガベージデータブロックの開始セクタの記録が０ｘＦＦＦＦＦＦＦＦに設定される。例えば、図２の例において、３つのデータブロックＤＢ５  ２０４（５）、ＤＢ１３  ２０４（１３）およびＤＢ１４  ２０４（１４）の開始セクタ番号はそれぞれ、１２３２７、２４６３０、および２８７４３である。上記に記載の３つの操作の後、この３つのデータブロックがガベージデータブロックであると判断される。ＢＡＴ内のこれらの対応する記録、すなわちＤＢ５  ２０４（５）、ＤＢ１３  ２０４（１３）、およびＤＢ１４  ２０４（１４）は、図５に示されるように０ｘＦＦＦＦＦＦＦＦに設定される。図５は、図２に示される実施形態の例に従う、ガベージデータブロックの検索後のＢＡＴ２０２の例を示すダイアグラムである。
【００６２】
図５の例において、開始セクタ番号が新規に０ｘＦＦＦＦＦＦＦＦに設定された３つのデータブロックは、これらの３つのブロックがいまやガベージデータブロックであることを示すため、黒色で塗られている。
【００６３】
４１０で、データが移動される。そのビットマップおよびデータを含む、ガベージデータブロック（ターゲット位置）の後にある有効データブロック（ソース位置）は、ガベージデータブロックの位置にコピーされる。移動後のＢＡＴ内の有効データブロックの開始セクタは更新される。
【００６４】
例えば、図５において、開始セクタ番号３６９５１を持つ有効データブロックＤＢ８  ２０４（８）は、開始セクタ番号１２３２７を持つデータブロックに移動され得る。対応するＢＡＴ［８］の開始セクタ番号は、１２３２７に変えられる。開始セクタ３２８４７を持つ有効データブロックＤＢ７  ２０４（７）は、開始セクタ２４６３９を持つデータブロックに移動され得る。対応するＢＡＴ［７］の開始セクタ番号は、２４６３９に変えられる。最後に、図６に示されるファイルが形成される。図６は、図５に示される実施形態の例に従う、データの移動後のＢＡＴ２０２の例を示すダイアグラムである。
【００６５】
したがって、ファイル２００の最後で、開始セクタ２８７４３を持つデータブロックは依然としてガベージデータブロックであり、一方で開始セクタが３２８４７および３６９５１のデータブロック内のデータが、開始セクタがそれぞれ２４６３９および１２３２７に変えられたデータブロックにコピーされる。したがって、開始セクタが３２８４７および３６９５１のデータブロックはもはやファイル２００に確保しておく必要がない。開始番号２８７４３、３２８４７、および３６９５１を持つ合計３つのデータブロックは、未使用領域をそれぞれ形成する。
【００６６】
ファイルを利便的に圧縮するため、ファイルの最後に未使用領域を形成することを目的とした他の移動技術が存在し得る。
【００６７】
４１２で、ファイルが圧縮される。例えば、データブロックの移動が完了した後、つまりは４０６で発見されたガベージデータブロックがいまや有効データを格納しているか、または有効データブロックがガベージデータブロックの位置にそれ以上コピーされ得ないとき、未使用領域がファイル２００の最後に形成される。未使用領域が切り取られるかまたは削除された後、圧縮されたファイルが得られる。例えば、圧縮されたサイズの最大は、発見されたガベージデータブロックのサイズであり得る。図７に示すとおり、ファイルの最後の３つのブロックは切り取られるかまたは削除される。
【００６８】
本発明の技術は、ガベージデータを整理し、ＶＨＤフォーマットの容量可変ハードディスクイメージファイルまたは差分ハードディスクイメージファイルの記憶領域を、その中のデータのいくつかが削除された後に圧縮し、それによってファイルの記憶領域を確保する。
【００６９】
ガベージデータブロックを検索する処理において、上記に記載した方法を使用して、セクタがガベージセクタであるかどうかを判断するための比較のために、現在のイメージファイル（ファイルが容量可変イメージファイルである場合）および／または親イメージファイル（差分イメージファイルである場合）からビットマップを読み出すことに加え、本発明の技術はまた、ガベージセクタを迅速に演算する方法を提供する。この方法は、データブロックからガベージセクタを迅速に特定し、そのすべてのセクタがガベージセクタであるデータブロックをガベージデータブロックとして扱うことができ得る。
【００７０】
ガベージセクタを迅速に演算する方法の例は、やはりＶＨＤイメージファイルの例を使用する。
【００７１】
差分ハードディスクイメージファイルに関して、それぞれのデータブロックについて、３つのビットマップが取得されることがあり、これらはｓｒｃ＿ｂｍｐと表され得るソースビットマップと、ｐｒｔ＿ｂｍｐと表され得る親ビットマップと、ｂｌｋ＿ｂｍｐと表され得るブロックビットマップである。
【００７２】
ｓｒｃ＿ｂｍｐは、ＶＨＤイメージファイル内のデータブロックのソースビットマップを表す。ｐｒｔ＿ｂｍｐは、先祖イメージのビットマップを表す。例えば、親イメージファイル内のデータブロックの親ビットマップが読み出される。親イメージファイル内のデータブロックの親ビットマップ内のビットが１である場合、ビット１はである。そうでない場合、最終の先祖のイメージファイルまでデータブロックのビットマップが親イメージファイルの親イメージファイルから読み出される。最終の先祖のイメージファイル内のビットマップ内のビットが０である場合、ビットは０である。
【００７３】
ｂｌｋ＿ｂｍｐは、ブロックビットマップを表す。例えば、仮想マシンのユーザは、ＶＨＤイメージファイル内に構築されたファイルシステムを読み出し、反射的に、セクタが有効な情報を格納しているかどうかを表すビットマップを取得することができる。
【００７４】
ファイルシステムは一般的に、どのセクタが有効な情報を格納しているか、またどのセクタが有効な情報を格納していないかを特定するために、種々の方法でデータのビットマップ情報を記録する。例えば、Ｌｉｎｕｘ（登録商標）においてはｅｘｔ２／３／４が頻繁に使用される。ビットマップブロックは、どのブロックが有効データを格納しているか記録する。別の例では、Ｗｉｎｄｏｗｓ（登録商標）においてはＮｅｗ  Ｔｅｃｈｎｏｌｏｇｙ  Ｆｉｌｅ  Ｓｙｓｔｅｍ（ＮＴＦＳ）がしばしば使用される。その＄Ｂｉｔｍａｐファイルは、ブロックのビットマップ情報を記録する。１つのブロックは、数個のセクタを含み得る。
【００７５】
ファイルシステムのビットマップ情報が取得された後、ＶＨＤファイル内のどのセクタが有効な情報を格納しているか特定するために、論理セクタ番号と物理セクタ番号との間で上記に記載の変換方法が使用されることができ、これによってｂｌｋ＿ｂｍｐが取得される。
【００７６】
次に、３つのビットマップが互いに比較され、終点ビットマップが生成され、これはｄｓｔ＿ｂｍｐと表され得る。ｄｓｔ＿ｍａｐは、ビットマップ内のガベージセクタに対応するビットが０にクリアされた後（すなわち、４０４での操作の完了後）に、ＶＨＤ内のデータブロックのビットマップとして使用され得る。それぞれのビットについて、以下の方法の例が使用されることができ、これは次の擬似コードで表される。
ｉｆ  ｓｒｃ＿ｂｍｐ＝０，ｔｈｅｎ  ｄｓｔ＿ｂｍｐ＝０；
ｉｆ  ｓｒｃ＿ｂｍｐ＝１，ｔｈｅｎ
ｉｆ  ｐｒｔ＿ｂｍｐ＝０  ａｎｄ  ｂｌｋ＿ｂｍｐ＝１，ｔｈｅｎ  ｄｓｔ＿ｂｍｐ＝１；
／＊これは、親イメージファイルに相対して、新規データが書き込まれることを表す。＊／
ｉｆ  ｐｒｔ＿ｂｍｐ＝１  ａｎｄ  ｂｌｋ＿ｂｍｐ＝０，ｔｈｅｎ  ｄｓｔ＿ｂｍｐ＝１；
／＊これは、親イメージファイルに相対してデータが削除されることを表す。＊／
ｉｆ  ｐｒｔ＿ｂｍｐ＝０  ａｎｄ  ｂｌｋ＿ｂｍｐ＝０，ｔｈｅｎ  ｄｓｔ＿ｂｍｐ＝０；
／＊これは、親イメージファイルに相対して新規データが書き込まれ、かかる新規データが後に削除されることを表す。＊／
ｉｆ  ｐｒｔ＿ｂｍｐ＝１  ａｎｄ  ｂｌｋ＿ｂｍｐ＝１
／＊これは、親イメージファイルに相対してデータの変更が発生することを表す。データは、ソースイメージファイルおよび親イメージファイルから読み出され、比較される。これらが同じであった場合、ｄｓｔ＿ｂｍｐは０に設定される。そうでない場合、ｄｓｔ＿ｂｍｐは１に設定される。＊／
【００７７】
上記に記載の方法に基づき、ソースビットマップ内のセクタに対応する記録が、このセクタがデータを格納している（ｓｒｃ＿ｂｍｐ＝１）ことを示し、親ビットマップ内のセクタに対応する記録が、このセクタがデータを格納していない（ｐｒｔ＿ｂｍｐ＝０）ことを示し、ブロックビットマップ内のセクタに対応する記録が、このセクタがデータを格納していない（ｂｌｋ＿ｂｍｐ＝０）ことを示した場合、このセクタはガベージセクタであると判断される。
【００７８】
加えて、ｓｒｃ＿ｂｍｐ＝１、ｐｒｔ＿ｂｍｐ＝１、およびｂｌｋ＿ｂｍｐ＝１である場合、データはソースイメージおよび親イメージから抽出され、比較される。これらが同じである場合、ｄｓｔ＿ｂｍｐは０に設定される。このセクタもまたガベージセクタであると判断される。
【００７９】
容量可変ハードディスクイメージの処理は比較的単純である。例えば、最初に、それぞれのデータブロックについて、ソースビットマップとブロックビットマップとが取得される。親ビットマップを取得する必要はない。
【００８０】
次に、ソースビットマップとブロックビットマップとが比較され、４０４の後の上記に記載の操作において、終点ビットマップすなわちｄｓｔ＿ｂｍｐがセクタビットマップとして取得される。それぞれのビットについて、以下の方法の例が使用されることができ、これは次の擬似コードで表される。
ｉｆ  ｓｒｃ＿ｂｍｐ＝０，ｔｈｅｎ  ｄｓｔ＿ｂｍｐ＝０；
ｉｆ  ｓｒｃ＿ｂｍｐ＝１，ｔｈｅｎ
ｉｆ  ｂｌｋ＿ｂｍｐ＝１，ｔｈｅｎ  ｄｓｔ＿ｂｍｐ＝１；
／＊これは、新規データが書き込まれることを表す。＊／
ｉｆ  ｂｌｋ＿ｂｍｐ＝０，ｔｈｅｎ  ｄｓｔ＿ｂｍｐ＝０；
／＊これは、新規データが書き込まれることを表す。しかし、新規に書き込まれたデータは後に削除される。＊／
【００８１】
上記に記載したとおり、ソースビットマップ内のセクタに対応する記録が、セクタがデータを格納している（ｓｒｃ＿ｂｍｐ＝１）ことを示し、ブロックビットマップ内のセクタに対応する記録が、セクタがデータを格納していない（ｂｌｋ＿ｂｍｐ＝０）ことを示した場合、このセクタはガベージセクタであると判断される。
【００８２】
上記に記載された実施形態の例は、例としてＶＨＤフォーマットのイメージファイルを使用して説明される。本発明の技術はまた、上記に記載した原理と同じかまたは類似の、本明細書に記載されない他の種類のフォーマットにの仮想イメージファイルにおいても使用され得る。
【００８３】
簡単にするため、上記の方法の実施形態の例は、一連の操作の組み合わせとして説明される。当業者は、本開示が本明細書に記載された操作の順序に制限されないことを理解するであろう。本明細書に記載された操作は、本開示に従って、他の順序となる場合、または一斉に起こる場合がある。当業者はまた、本明細書に記載された実施形態が説明を目的とするものであり、本開示に従いすべての操作が必要なわけではないことを理解するであろう。
【００８４】
上記に記載の実施形態の例の説明に基づき、本開示はまた、上記に記載の例を実装するための、仮想ハードディスクイメージファイルを圧縮する対応する装置を開示する。
【００８５】
図８は、本開示に従う、仮想ハードディスクイメージファイルを圧縮する装置の一例を示す図である。
【００８６】
装置８００は、１つまたは複数のプロセッサ８０２と、メモリ８０４とを含むがこれに限定されない。メモリ８０４は、ランダムアクセスメモリ（ＲＡＭ）等の揮発性メモリおよび／または読み出し専用メモリ（ＲＯＭ）またはフラッシュＲＡＭ等の不揮発性メモリの形式のコンピュータ記憶媒体を含み得る。メモリ７０４は、コンピュータ記憶媒体の一例である。
【００８７】
コンピュータ記憶媒体には、コンピュータで実行可能な命令、データ構造、プログラムモジュール、またはその他のデータ等の情報を格納するためのあらゆる方法および技術において実装される、揮発性および不揮発性の、取り外し可能および取り外し不可能の媒体を含む。コンピュータ記憶媒体の例には、相変化メモリ（ＰＲＡＭ）、静的ランダムアクセスメモリ（ＳＲＡＭ）、動的ランダムアクセスメモリ（ＤＲＡＭ）、他の種類のランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、電気的消去可能なプログラム可能読み出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリまたは他のメモリ技術、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル汎用ディスク（ＤＶＤ）または他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイス、またはコンピュータデバイスからのアクセス用の情報を格納するために使用されることができるあらゆる非伝送媒体を含むがこれに限定されない。本明細書に定義されるとおり、コンピュータ記憶媒体には、変調データ信号および搬送波等の一時的な媒体は含まない。
【００８８】
メモリ８０４は、その中にプログラムユニットまたはモジュールおよびプログラムデータを格納し得る。一実施形態において、モジュールはガベージデータブロック検索モジュール８０６と、データ移動モジュール８０８と、ファイル圧縮モジュール８１０とを含み得る。
【００８９】
ガベージデータブロック検索モジュール８０６は、ファイル内の１つまたは複数のガベージデータブロックを検索し、ＢＡＴ内のガベージデータブロックに対応する１つまたは複数の記録を修正する。ガベージデータブロックとは、有効データを格納していないデータブロックである。データ移動モジュール８０８は、ガベージデータブロックの後にある有効データブロックを、ガベージデータブロックの位置に移動させ、有効データブロックが移動された後に、ＢＡＴ内の有効データブロックの対応する記録を修正する。ファイル圧縮モジュール８１０は、データブロックの移動が完了した後に、ファイルを圧縮する。
【００９０】
例えば、それぞれのデータブロックは、１つまたは複数のセクタと、それぞれのセクタの情報を記録するビットマップとを含み得る。本装置は、データブロック内の１つまたは複数のガベージセクタを検索し、ビットマップ内の１つまたは複数のガベージセクタの対応する記録を修正する、ガベージセクタ検索モジュール８１２とをさらに含み得る。
【００９１】
例えば、ガベージセクタ検索モジュール８１２に基づき、ガベージデータブロック検索モジュール８０６は、ファイルのデータブロックのビットマップを検索し、データブロックであって、そのビットマップがすべての対応するセクタの記録がガベージセクタであることを示すデータブロックがガベージデータブロックであると判断し得る。
【００９２】
例えば、ガベージセクタ検索モジュール８１２は、ガベージセクタを検索するための２つの例示的な方法を使用してもよい。例示的な方法の１つにおいて、ガベージセクタ検索モジュール８１２は、ソースイメージ（イメージファイルが容量可変イメージファイルである場合）または親イメージファイル（イメージファイルが差分イメージファイルである場合）からビットマップを読み出し、それらを比較してセクタがガベージセクタであるかどうか判断し得る。ガベージセクタ検索モジュール８１２は、ビットマップ検索サブモジュールと判断サブモジュールとを含み得る。ビットマップ検索サブモジュールは、ファイルのデータブロックのビットマップを検索する。ビットマップ内のセクタに対応する記録が、セクタ内にデータが格納されていることを示した場合、判断サブモジュールがトリガされる。判断サブモジュールは、追加の判断操作を行ってもよい。判断サブモジュールは、ファイルの種類を判断する。ファイルが容量可変ハードディスクイメージファイルである場合、判断サブモジュールは、セクタ内のすべてのデータが０を表すかどうか判断する。判断結果が正である場合、セクタはガベージセクタであると判断される。ファイルが差分ハードディスクイメージファイルである場合、判断サブモジュールは、セクタ内に格納されたデータが、親イメージファイルに同じセクタ位置を持つ、対応するセクタ内に格納されたデータと同じかどうかを判断する。これらが同じである場合、セクタはガベージセクタであると判断される。
【００９３】
ガベージセクタを高速検索するための別の例示的な方法として、ガベージセクタ検索モジュール８１２は、ファイルの種類に基いて、異なるサブモジュールを含み得る。ファイルが容量可変ハードディスクイメージファイルである場合、ガベージセクタ検索モジュール８１２は、第１の取得サブモジュールと、第１の比較サブモジュールとを含み得る。第１の取得サブモジュールは、ファイルのデータブロックのソースビットマップと、対応するセクタが有効データを格納しているかどうかを示すブロックビットマップとを取得する。第１の比較サブモジュールは、ソースビットマップとブロックビットマップとの間で、すべてのビットを比較する。ソースビットマップ内の対応するセクタの記録が、このセクタがデータと格納していることを示し、一方でブロックビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示した場合、このセクタはガベージセクタであると判断される。
【００９４】
ファイルが差分ハードディスクイメージファイルである場合、ガベージセクタ検索モジュール８１２は、第２の取得サブモジュールと第２の比較サブモジュールとを含み得る。第２の取得サブモジュールは、ファイルのデータブロックのソースビットマップと、対応するセクタが有効なデータを格納しているかどうかを示すブロックビットマップと、先祖イメージファイル内の同じデータブロックの親ビットマップとを取得する。第２の比較サブモジュールは、ソースビットマップと、ブロックビットマップと、親ビットマップとの間でそれぞれのビットを比較する。ソースビットマップ内の対応するセクタの記録が、セクタがデータを格納していることを示し、一方で親ビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示し、ブロックビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示した場合、セクタはガベージセクタであると判断される。
【００９５】
本開示に記載の仮想ハードディスクイメージファイルを圧縮する装置８００は、ＶＨＤフォーマットの容量可変ハードディスクイメージファイルまたは差分ハードディスクイメージファイルからデータが削除された後に、イメージファイルのサイズを縮小させることができ、それにより、ファイルの記憶領域を確保する。
【００９６】
上記に記載された仮想ハードディスクイメージファイルを圧縮するための装置の実施形態の例は、原理が本明細書の方法の実施形態の例に記載されたものに類似するため、比較的単純に説明される。関連のある説明は、図１〜図７に示す実施形態の例を参照してもよい。
【００９７】
本開示は、本開示の実施形態の方法、デバイス（システム）およびコンピュータプログラムのフローチャートおよび／またはブロックダイアグラムを参照することによって説明される。それぞれのフローおよび／またはブロック、ならびにフローチャートおよび／またはブロックダイアグラムのフローおよび／またはブロックは、コンピュータプログラム命令によって実装されることが可能であることが理解されるものとする。これらのコンピュータプログラム命令は、フローチャートの１つまたは複数のフローおよび／またはブロックダイアグラムの１つまたは複数のブロックを実装するためのデバイスが、コンピュータまたは他のプログラム可能なデータプロセッサによって操作される命令を通じて生成されることができるように、汎用コンピュータ、特殊コンピュータ、埋め込みプロセッサまたは他のプログラム可能なデータプロセッサに提供され、マシンを生成することができる。
【００９８】
これらのコンピュータプログラム命令は、コンピュータまたは他のプログラム可能なデータプロセッサに一定の作動をするように命令することができる、他のコンピュータ可読の記憶装置にも格納されることができ、その結果、コンピュータ可読の記憶装置に格納された命令により、命令デバイスであって、フローチャートの１つまたは複数のフローおよび／またはブロックダイアグラムの１つまたは複数のブロックに定められた機能を実装する命令デバイスを含む製品が生成される。
【００９９】
これらのコンピュータプログラム命令は、コンピュータまたは他のプログラム可能なデータプロセッサが一連の操作ステップを操作させて、コンピュータによって実装されるプロセスを生成することができるように、コンピュータまたは他のプログラム可能なデータプロセッサ内にロードされることができる。その結果、コンピュータまたは他のプログラム可能なデータプロセッサ内で操作される命令は、フローチャートの１つまたは複数のフローおよび／またはブロックダイアグラムの１つまたは複数のブロックにおいて定められた機能を実装するためのステップを提供することができる。
【０１００】
本実施形態は、単に本開示の説明に過ぎず、本開示の範囲を制限することを意図するものではない。本開示の原理を逸脱することなく、ある特定の修正および改善がなされることが可能であり、本開示の保護下にあるということが当技術分野の当業者に理解されるものとする。
【図１】
2014527231.tif 000003
【図２】
2014527231.tif 000004
【図３】
2014527231.tif 000005
【図４】
2014527231.tif 000006
【図５】
2014527231.tif 000007
【図６】
2014527231.tif 000008
【図７】
2014527231.tif 000009
【図８】
2014527231.tif 000010
【国際調査報告】
2014527231.tif 000011
2014527231.tif 000012