(58)【調査した分野】(Int.Cl.,DB名)
前記セクタ内に格納されたデータが有効データでない場合、前記セクタは前記ガベージセクタであると前記判断することは、前記セクタ内に格納されたデータはすべて0であると判断することを含むことを特徴とする請求項1に記載の方法。
前記ガベージデータブロックの後にある前記有効データブロックを前記移動することは、前記有効データブロック内のデータを前記ガベージデータブロックの位置にコピーすることを含むことを特徴とする請求項1から請求項4のいずれか1項に記載された方法。
【発明の概要】
【0008】
本概要は、下記の詳細な説明においてさらに記載される、さまざまな概念を簡略化された形で紹介するために提供される。本概要は、特許請求される発明の主題のすべての重要な特徴または必須の特徴を特定することを意図しておらず、また特許請求される発明の主題の範囲を決定するための補助として単独で使用されることも意図していない。例えば、「技術」という用語は、上記および本開示の全体に及ぶ文脈により認められるごとく、デバイス(複数可)、システム(複数可)、方法(複数可)、および/またはコンピュータ可読の命令を示し得る。本開示は、仮想ハードディスクイメージを圧縮する方法および装置を開示する。
【0009】
本開示は、仮想ハードディスクイメージファイルを圧縮する方法を開示する。1つのファイルは、1つまたは複数のデータブロックと、それぞれのデータブロックの情報を記録するブロック割り当て表(BAT)とを含む。このファイル内で1つまたは複数のガベージデータブロックが検索され、BAT内のガベージデータブロックに対応する1つまたは複数の記録が修正される。ガベージデータブロックとは、有効データを格納していないデータブロックである。このガベージデータブロックの後にある有効データブロックは、ガベージデータブロックの位置に移動され、有効データブロックが移動された後、BAT内の有効データブロックの対応する記録が修正される。データブロックの移動が完了した後、ファイルのサイズが縮小する。
【0010】
例えば、それぞれのデータブロックは、1つまたは複数のセクタと、それぞれのセクタの情報を記録するビットマップとを含み得る。ファイル内のガベージデータブロックの検索に先立って、データブロック内の1つまたは複数のガベージセクタが検索され、ビットマップ内の1つまたは複数のガベージセクタの対応する記録が修正される。
【0011】
例えば、ファイル内のガベージデータブロックの検索は、ファイルのデータブロックのビットマップの検索と、すべての対応するセクタの記録がガベージセクタであることを示すビットマップを持つデータブロックはガベージデータブロックであるという判断とを含み得る。
【0012】
例えば、データブロック内のガベージセクタの検索は、ファイルのデータブロック内のビットマップの検索を含み得る。ビットマップ内のセクタに対応する記録が、セクタ内にデータが格納されていることを示した場合、ファイルの種類に関する判断がなされる。ファイルが容量可変ハードディスクイメージファイルである場合、セクタ内のすべてのデータが0で表されるかどうかのさらなる判断がなされる。判断結果が正である場合、セクタはガベージセクタであると判断される。ファイルが差分ハードディスクイメージファイルである場合、セクタ内に格納されたデータが、親イメージファイルに同じセクタ位置を持つ、対応するセクタ内に格納されたデータと同じかどうかのさらなる判断がなされる。これらが同じである場合、セクタはガベージセクタであると判断される。
【0013】
別の例では、データブロック内のガベージセクタの検索は、ファイルが容量可変ハードディスクイメージファイルであるという判断がなされたとき、ある処理を行うことを含み得る。ファイルのデータブロックのソースビットマップと、対応するセクタが有効データを格納しているかどうかを示すブロックビットマップとが取得される。ソースビットマップとブロックビットマップとの間ですべてのビットが比較される。ソースビットマップ内の対応するセクタの記録が、このセクタがデータを格納していることを示し、一方でブロックビットマップ内のセクタの対応する記録が、このセクタがテータを格納していないことを示した場合、このセクタはガベージセクタであると判断される。
【0014】
別の例では、データブロック内のガベージセクタの検索は、ファイルが差分ハードディスクイメージファイルであるという判断がなされたとき、ある処理を行うことを含み得る。ファイルのデータブロックのソースビットマップと、対応するセクタが有効データを格納しているかどうかを示すブロックビットマップと、親イメージファイル内の同じデータブロックの親ビットマップとが取得される。ソースビットマップと、ブロックビットマップと、親ビットマップとにあるすべてのビットが比較される。ソースビットマップ内の対応するセクタの記録が、このセクタがデータを格納していることを示し、一方で親ビットマップ内のセクタの対応する記録が、このセクタがデータを格納していないことを示し、かつブロックビットマップ内のセクタの対応する記録が、このセクタがデータを格納していないことを示した場合、このセクタはガベージセクタであると判断される。
【0015】
例えば、データブロックが移動を終了した後、ファイルは圧縮される。データブロックが移動された後、1つまたは複数のガベージデータブロックに相当するサイズを持つ未使用領域がファイルの最後に形成される。この未使用領域は削除され、圧縮されたサイズを持つファイルが得られる。
【0016】
本開示はまた、仮想ハードディスクイメージファイルを圧縮するための装置を開示する。ファイルは、データブロックと、それぞれのデータブロックの情報を記録するBATとを含む。本装置は、データブロック検索モジュールと、データ移動モジュールと、ファイル圧縮モジュールとを含み得る。データブロック検索モジュールは、ファイル内の1つまたは複数のガベージデータブロックを検索し、BAT内のガベージデータブロックに対応する1つまたは複数の記録を修正する。ガベージデータブロックとは、有効データを格納していないデータブロックである。データ移動モジュールは、ガベージデータブロックの後にある有効データブロックを、ガベージデータブロックの位置に移動させ、有効データブロックが移動された後に、BAT内の有効データブロックの対応する記録を修正する。データブロックの移動が完了した後に、ファイル圧縮モジュールはファイルのサイズを圧縮する。
【0017】
例えば、それぞれのデータブロックは、1つまたは複数のセクタと、それぞれのセクタの情報を記録するビットマップとを含み得る。本装置は、データブロック内の1つまたは複数のガベージセクタを検索し、ビットマップ内の1つまたは複数のガベージセクタの対応する記録を再利用する、ガベージセクタ検索モジュールをさらに含み得る。
【0018】
別の例では、ガベージデータブロック検索モジュールは、ファイルのデータブロックのビットマップを検索し、すべての対応するセクタの記録がガベージセクタであることを示すビットマップを持つデータブロックを、ガベージデータブロックであると判断し得る。
【0019】
さらに別の例では、ガベージセクタ検索モジュールは、ビットマップ検索サブモジュールと、判断サブモジュールとを含み得る。ビットマップ検索サブモジュールは、ファイルのデータブロック内のビットマップを検索する。ビットマップ内のセクタに対応する記録が、セクタ内に格納されているデータがあることを示した場合には、判断サブモジュールがトリガされる。判断サブモジュールは、ファイルの種類を判断する。ファイルが容量可変ハードディスクイメージファイルである場合、判断サブモジュールは、セクタ内のすべてのデータが0と表されるかどうかを判断する。判断結果が正である場合、このセクタはガベージセクタであると判断される。ファイルが差分ハードディスクイメージファイルである場合、判断サブモジュールは、セクタ内に格納されているデータが、親イメージファイルに同じセクタ位置を持つ、対応するセクタ内に格納されているデータと同じであるかどうかを判断する。これらが同じである場合、このセクタはガベージセクタであると判断される。
【0020】
別の例では、ファイルが容量可変ハードディスクイメージファイルである場合、ガベージセクタ検索モジュールは、第1の取得サブモジュールと、第1の比較サブモジュールとを含み得る。第1の取得サブモジュールは、ファイルのデータブロックのソースビットマップと、対応するセクタが有効データを格納しているかどうかを示すブロックビットマップとを取得する。第1の比較サブモジュールは、ソースビットマップとブロックビットマップとの間ですべてのビットを比較する。ソースビットマップ内の対応するセクタの記録が、セクタがデータを格納しており、一方でブロックビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示した場合、このセクタはガベージセクタであると判断される。
【0021】
別の例では、ファイルが差分ハードディスクイメージファイルである場合、ガベージセクタ検索モジュールは、第2の取得サブモジュールと、第2の比較サブモジュールとを含み得る。第2の取得サブモジュールは、ファイルのデータブロックのソースビットマップと、対応するセクタが有効なデータを格納しているかどうかを示すブロックビットマップと、親イメージファイル内の同じデータブロックの親ビットマップとを取得する。第2の比較サブモジュールは、ソースビットマップと、ブロックビットマップと、親ビットマップとの間でそれぞれのビットを比較する。ソースビットマップ内の対応するセクタの記録が、セクタがデータを格納していることを示し、一方で親イメージファイルの親ビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示し、ブロックビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示した場合、このセクタはガベージセクタであると判断される。
【0022】
従来技術と比較すると、本開示に記載の本発明の技術は、少なくとも以下の効果を有する。
【0023】
第1に、本発明の技術は、仮想ハードディスクイメージファイル内のガベージデータブロックを検索し、ガベージデータブロックの後ろの有効データブロックをガベージデータブロックの位置へと移動し、したがってファイルの最後に未使用領域を形成する。本発明の技術は、次に、不要な領域を切り取るかまたは削除し、したがってガベージデータブロックが整理され、ファイルのサイズが圧縮される。本発明の技術は、容量可変ディスクイメージファイルまたは差分ディスクイメージファイルのサイズを、それらの中のいくつかのデータが削除された後に縮小することを可能にし、これによってファイルの記憶領域を確保する。
【0024】
第2に、本発明の技術は、データブロック内のどのセクタがガベージセクタであるかを迅速に特定し、すべてがガベージセクタであるセクタを持つデータブロックをガベージデータブロックであると判断し得る、ガベージセクタを迅速に演算する方法を提供する。
【0025】
本開示によるいかなる製品も、上述するすべての効果を有する必要はない。
【発明を実施するための形態】
【0027】
以下に、図面を参照した本発明の技術の詳細な説明を記載する。本明細書に記載される実施形態は実施形態の例であり、本開示の範囲を制限するために使用されないものとする。
【0028】
本開示に開示される技術は、仮想ハードディスクイメージファイル内のガベージデータを整理し、ファイルのサイズを縮小する方法を提供する。イメージファイル内のいくつかのデータが削除された後、本発明の技術は、ファイルのサイズを縮小させることができ、それにより、ファイルの記憶領域を確保する。以下に、仮想ハードディスク(VHD)フォーマット内のイメージファイルの例を用いた本開示の方法の例を記載する。
【0029】
図1は、本開示に従う、VHDイメージファイルフォーマット100の一例を示す図である。VHDイメージファイル100の例は、フッタ102、ヘッダ104、BAT(BAT)106、および1つまたは複数のデータブロック108(0)、108(1)、…、108(m)を含み、ここで、mは任意の整数であってもよい。
【0030】
フッタ102は、ヘッダ104の開始セクタ、ファイルサイズ、イメージの種類(容量可変イメージまたは差分イメージ等)等の情報を記録する。フッタ102は、ファイル100の最後に存在する。ファイル100の中に新しいデータが書き込まれたときは、後にファイル100の最後へと移動される。フッタ102は、ファイル100の重要な情報を含むため、フッタコピー110もまたファイル100の最初に保存され得る。
【0031】
ヘッダ104は、BAT106の開始セクタ、BAT106の項目数(これはデータブロックの最大許容数である)、データブロック108のサイズ等の情報を記録する。また、ファイルが差分イメージファイルである場合、ヘッダ104はまた、その親イメージまたは親イメージファイルの位置情報を記録する。
【0032】
BAT[0]112(0)およびBAT[1]112(1)等の、BAT106内のそれぞれのBAT項目112は、各々のデータブロック108の開始セクタに対応する。例えば、BAT[0]112(0)はデータブロック0 108(0)に対応し、BAT[1]112(1)はデータブロック1 108(1)に対応する。BAT内の記録が、対応するデータブロック108を持たない場合、記録は割り付けられていないデータブロックを表す0xFFFFFFFFを含み得る。
【0033】
それぞれのデータブロック108は、ビットマップと、1つまたは複数のデータフィールド(またはセクタ)を含み得る。容量可変VHDファイル内において、ビットマップ内のビットが0である場合、そのビットに対応するセクタがデータを格納していないことを示す。ビットマップ内のビットが1である場合、そのビットに対応するセクタがデータを格納していることを示す。しかし、セクタ内のデータが削除されると、このビットは反転せず、依然として1を示す。言い換えると、1つのセクタ内のデータがデータブロック108からファイル100へと割り当てられたとき、データが修正されなければ、対応するビットマップ内のビットは0であり、データが修正されれば、対応するビットマップ内のビットは1である。
【0034】
差分VHDファイル内において、ビットが1である場合、これは差分VHDファイルの対応するセクタが有効データを格納していることを表す。ビットが0である場合、これは差分VHDファイルの対応するセクタが有効データを格納しておらず、データが親イメージファイルの対応するセクタから読み出される必要があることを表す。親イメージファイルもまた差分イメージファイルである場合、データは、差分でない先祖イメージファイル(これは容量固定または容量可変である)が見つかるまで、親イメージファイルの親イメージファイルから読み出される必要がある。
【0035】
イメージファイル100内のデータブロックは、同じサイズを有してもよく、これはヘッダ104内に記録される。
【0036】
図1に示すイメージファイルフォーマット100に基づき、容量可変イメージファイルまたは差分イメージファイルが作成されると、新規に作成されたイメージファイルは、フッタ、ヘッダ、BAT等を含むセクションのみを含み得る。データブロックは割り当てられない。データがイメージファイルの中に書き込まれると、データに1つまたは複数のデータブロックが割り当てられてこのデータを保存し、BAT内の対応する記録が更新されてデータブロックの開始セクタが記録される。
【0037】
格納されているデータがVHDイメージファイルから読み出されると、読み出される論理セクタ番号(これは、VHDイメージファイルに相対する物理セクタ番号の代わりに、データを格納している論理セクタ番号に対応する)がVHDイメージファイルに相対する物理セクタ番号に変換される。変換方法の一例を以下に示す。
BlockNumber=LogicalSectorNumber/SectorsPerBlock、
ここで、記号“/”は除算演算子を表す。例えば、5/3=1である。
SectorInBlock=LogicalSectorNumber%SectorsPerBlock、
ここで、記号“%”はモジュロ演算子を表す。例えば、5%3=2である。
PhysicalSectorLocation=BAT[BlockNumber]+BlockBitmapSectorCount+SectorInBlock、
ここで、
LogicalSectorNumberは論理セクタ番号を表し、
BlockNumberはデータブロック番号を表し、
SectorsPerBlockはデータブロック内のセクタの数を表し、
SectorInBlockは置かれたデータブロック内のセクタの数を表し、
PhysicalSectorLocationは、VHDイメージファイルに相対する物理セクタ番号を表し、
BlockBitmapSectorCountは、ビットマップ内のセクタの数を表す。
【0038】
仮想マシンのユーザの観点からすると、VHDイメージファイルはディスクパーティションのような働きをし、その上にファイルシステムを配備することができる。書き込まれることが必要なデータが存在する場合、異なるファイルシステム用の異なるデータ書き込みストラテジに基づき、データはファイルシステムの異なる物理的位置に書き込まれ得る。一例において、データはファイルシステムの開始位置からの順序通りに書き込まれず、後に1つずつとなる(すなわち、開始位置に相対して、小さいセクタ番号から始まって大きいセクタ番号へ)。したがって、VHDファイルにおいて、データブロックの順序は、その開始セクション番号としばしば異なる。
【0039】
図1の例において、例えば、それぞれのデータブロック108のサイズは、2MBであり得る。仮想マシンのユーザが、3MB目の位置に数KBのデータを書き込むことを意図すると、ファイルシステムはまずVHDファイルにデータブロック0 108(0)ではなくデータブロック1 108(1)を割り当て得る。
【0040】
図2は、本開示に従う、BAT202の例を図示する。
図2の例において、VHDファイル200は16個のデータブロックを有し得る。BAT202は、16データブロック(これはDBと短縮される)204の数を記録し、それらはDB0 204(0)、DB1 204(1)、DB2 204(2)、DB3 204(3)、DB4 204(4)、DB5 204(5)、DB6 204(6)、DB7 204(7)、DB8 204(8)、DB9 204(9)、DB10 204(10)、DB11 204(11)、DB12 204(12)、DB13 204(13)、DB14 204(14)、DB15 204(15)である。BAT202はまた、それぞれのデータブロック204の開始セクタを記録する。
【0041】
各々のデータブロックの開始セクタ番号は、VHDファイル内の各々のデータブロックの相対位置である。偏差206は、ファイル200内の各々のデータブロックの相対位置を示す。
【0042】
各々のデータブロックの開始セクタ番号が0xFFFFFFFFであるとき、これは各々のデータブロックがまだ割り付けられていないことを示す。
図2の例において、DB0 204(0)の開始セクタ番号は15であり、これは偏差206における値15に対応する。DB1 204(1)、DB2 204(2)、DB3 204(3)、DB9 204(9)、DB10 204(10)およびDB11 204(11)の開始セクタ番号は、0xFFFFFFFFである。DB0 204(0)の開始セクタ番号は15であり、これは偏差206における値15に対応する。DB4 204(4)の開始セクタ番号は8223であり、これは偏差206における値8223に対応する。DB5 204(5)の開始セクタ番号は12327であり、これは偏差206における値12327に対応する。DB6 204(6)の開始セクタ番号は16431であり、これは偏差206における値16431に対応する。DB7 204(7)の開始セクタ番号は32847であり、これは偏差206における値32847に対応する。DB8 204(8)の開始セクタ番号は36951であり、これは偏差206における値36951に対応する。DB12 204(12)の開始セクタ番号は20535であり、これは偏差206における値20535に対応する。DB13 204(13)の開始セクタ番号は24639であり、これは偏差206における値24639に対応する。DB14 204(14)の開始セクタ番号は28743であり、これは偏差206における値28743に対応する。DB15 204(15)の開始セクタ番号は4119であり、これは偏差206における値4119に対応する。
図2に示すように、それぞれのデータブロック204の開始セクタ番号は、DB0 204(0)からDB15 204(15)への順序通りに、小さい数から大きい数へと並んではいない。
【0043】
上記に記載した説明に基づき、以下はVHDファイルからデータが削除されたとしても、従来技術がVHDファイルを圧縮できないことを示す分析である。
【0044】
従来技術において、データが書き込まれるべきセクタに対応するデータブロックがまだ割り付けられていない場合(すなわち、BAT内の対応する項目記録は0xFFFFFFFFである)、新規のデータブロックが割り付けられ(BAT内の対応する項目記録は、新規に割り付けられたデータブロックの新規の開始セクション番号)、データが書き込まれるべきセクタに対応するビットマップ内のビットが1に修正される。しかし、いくつかのデータが削除された後、データブロック内のデータが有効でなくても有効であっても、ビットマップ内のデータブロックのビットは反転せず、依然として1に留まり、これはデータブロックが割り付けられていることを示す。したがって、従来技術はデータブロックによって占拠されている記憶領域を回収することができず、これによって記憶領域が浪費されることをもたらす。
【0045】
上記に記載した説明に基づき、VHDファイルの記憶領域を確保するためには、VHDファイルは圧縮されねばならない。ファイルが圧縮される前に、データファイルの後の位置に格納されているデータは、ガベージデータが位置する場所に移動され、したがってファイルの最後に未使用領域が形成される。未使用領域は次に切り取られるか削除される。
【0046】
したがって、本開示は、ファイル内のガベージデータを効果的に排除し、ファイルを圧縮するための、仮想ハードディスクイメージファイルを圧縮する方法を提供する。
【0047】
図3は、本開示に従う、仮想ハードディスクイメージファイルを圧縮する方法の一例のフローチャートを示す。302で、ファイル内のガベージデータブロックが検索され、BAT内のガベージデータブロックの対応する記録が修正される。ガベージデータブロックとは、有効データを格納していないデータブロックである。
【0048】
ファイル内のデータブロックは、主にガベージデータブロックとして、または有効データブロックとして分類される。有効データブロックとは、有効データを格納しているデータブロックである。ガベージデータブロックとは、中のデータがすべて削除されたデータブロックを指す。すなわち、ガベージデータブロック内のデータは有効でない。
【0049】
ガベージデータブロックが発見された後、BAT内のガベージデータブロックの開始セクション番号の値が0xFFFFFFFFに設定される。すなわち、このデータブロックに対応する論理データブロックは、データを格納していない。
【0050】
304で、ガベージデータブロックの後の位置を有する有効データブロックがガベージデータブロックの位置に移動され、移動後のBAT内の有効データブロックの対応する記録が修正される。
【0051】
ファイルの物理的記憶領域内において、後の位置とは、ガベージデータブロックの位置がガベージデータブロックの位置へ移動された後のファイル内の位置を有する有効データブロックを指す。BAT内の有効データブロックの開始セクション番号は、ガベージデータブロックの開始セクション番号に修正される。
【0052】
移動とは、複製処理を指す。ガベージデータブロックの後の位置を有する有効データブロック内のデータは、ガベージデータブロックの位置にコピーされる。
【0053】
306で、データブロックが移動を終了した後、ファイルが圧縮される。この移動の目的は、ファイルの最後に不要な領域が形成される程度に、有効データブロックをファイルの前方に移動させることである。不要な領域は次に切り取られるか削除される。したがって、ファイルのサイズは圧縮される。
【0054】
当業者が
図3に示す実施形態の例をより良く理解することができるように、
図4に本開示に従う、仮想ハードディスクイメージファイルを圧縮する別の方法の例のフローチャートを示す。
図4はやはり例としてVHDファイルを使用する。
【0055】
402で、ファイル内のガベージデータセクタが検索される。例えば、それぞれのデータブロック内のそれぞれのセクタに関して、データブロックのビットマップが検索される。ビットマップ内のセクタに対応する記録が、セクタマップ内のセクタに対応するビットが1であるというように、セクタ内にデータが格納されていることを示した場合、データは対応するセクタ内に格納されているか、データはすでにセクタから削除されている。1つまたは複数のさらなる判断がなされる必要がある。
【0056】
ファイルが容量可変ハードディスクイメージファイルである場合、セクタ内に格納されたデータがすべて0であるかどうか判断される。セクタ内に格納されたデータがすべて0である場合、セクタはガベージセクタであると判断される。
【0057】
ファイルが差分ハードディスクイメージファイルである場合、セクタ内に格納されたデータが、親イメージファイル内の同じセクタ位置に格納されたデータと同じであるかどうかが判断される。セクタ内に格納されたデータが、親イメージファイル内の同じセクタ位置に格納されたデータと同じである場合、セクタはガベージセクタであると判断される。
【0058】
404で、ビットマップ内のガベージセクタの対応する記録が修正される。ガベージセクタが発見された後、ビットマップ内のガベージセクタの対応するビットが0にクリアされ、これはセクタ内にデータが格納されていないことを表す。
【0059】
406で、ファイル内のガベージデータブロックが検索される。例えば、ファイル内のデータブロックのビットマップが検索される。ビットマップ内のデータブロックのすべてのセクタの記録がガベージセクタであると示されたとき、データブロックはガベージデータブロックであると判断される。しかし、それぞれのデータブロックについて、データブロックが使用される場合(BATの対応する記録が0xFFFFFFFFでないように)は、上記に記載の操作の後、データブロックのビットマップはすべて0を示し、もはや有効データを格納していないため、データブロックもまたガベージデータブロックであると判断される。
【0060】
しかし、データブロックのビットマップ内において、セクタに対応するいくつかのビットが0であり、セクタに対応するいくつかのビットが1である場合、データブロックはガベージデータブロックではなく、依然として有効データブロックである。
【0061】
408で、BAT内のガベージデータブロックの対応する記録が修正される。BATにおいて、ガベージデータブロックの開始セクタの記録が0xFFFFFFFFに設定される。例えば、
図2の例において、3つのデータブロックDB5 204(5)、DB13 204(13)およびDB14 204(14)の開始セクタ番号はそれぞれ、12327、24630、および28743である。上記に記載の3つの操作の後、この3つのデータブロックがガベージデータブロックであると判断される。BAT内のこれらの対応する記録、すなわちDB5 204(5)、DB13 204(13)、およびDB14 204(14)は、
図5に示されるように0xFFFFFFFFに設定される。
図5は、
図2に示される実施形態の例に従う、ガベージデータブロックの検索後のBAT202の例を示すダイアグラムである。
【0062】
図5の例において、開始セクタ番号が新規に0xFFFFFFFFに設定された3つのデータブロックは、これらの3つのブロックがいまやガベージデータブロックであることを示すため、黒色で塗られている。
【0063】
410で、データが移動される。そのビットマップおよびデータを含む、ガベージデータブロック(ターゲット位置)の後にある有効データブロック(ソース位置)は、ガベージデータブロックの位置にコピーされる。移動後のBAT内の有効データブロックの開始セクタは更新される。
【0064】
例えば、
図5において、開始セクタ番号36951を持つ有効データブロックDB8 204(8)は、開始セクタ番号12327を持つデータブロックに移動され得る。対応するBAT[8]の開始セクタ番号は、12327に変えられる。開始セクタ32847を持つ有効データブロックDB7 204(7)は、開始セクタ24639を持つデータブロックに移動され得る。対応するBAT[7]の開始セクタ番号は、24639に変えられる。最後に、
図6に示されるファイルが形成される。
図6は、
図5に示される実施形態の例に従う、データの移動後のBAT202の例を示すダイアグラムである。
【0065】
したがって、ファイル200の最後で、開始セクタ28743を持つデータブロックは依然としてガベージデータブロックであり、一方で開始セクタが32847および36951のデータブロック内のデータが、開始セクタがそれぞれ24639および12327に変えられたデータブロックにコピーされる。したがって、開始セクタが32847および36951のデータブロックはもはやファイル200に確保しておく必要がない。開始番号28743、32847、および36951を持つ合計3つのデータブロックは、未使用領域をそれぞれ形成する。
【0066】
ファイルを利便的に圧縮するため、ファイルの最後に未使用領域を形成することを目的とした他の移動技術が存在し得る。
【0067】
412で、ファイルが圧縮される。例えば、データブロックの移動が完了した後、つまりは406で発見されたガベージデータブロックがいまや有効データを格納しているか、または有効データブロックがガベージデータブロックの位置にそれ以上コピーされ得ないとき、未使用領域がファイル200の最後に形成される。未使用領域が切り取られるかまたは削除された後、圧縮されたファイルが得られる。例えば、圧縮されたサイズの最大は、発見されたガベージデータブロックのサイズであり得る。
図7に示すとおり、ファイルの最後の3つのブロックは切り取られるかまたは削除される。
【0068】
本発明の技術は、ガベージデータを整理し、VHDフォーマットの容量可変ハードディスクイメージファイルまたは差分ハードディスクイメージファイルの記憶領域を、その中のデータのいくつかが削除された後に圧縮し、それによってファイルの記憶領域を確保する。
【0069】
ガベージデータブロックを検索する処理において、上記に記載した方法を使用して、セクタがガベージセクタであるかどうかを判断するための比較のために、現在のイメージファイル(ファイルが容量可変イメージファイルである場合)および/または親イメージファイル(差分イメージファイルである場合)からビットマップを読み出すことに加え、本発明の技術はまた、ガベージセクタを迅速に演算する方法を提供する。この方法は、データブロックからガベージセクタを迅速に特定し、そのすべてのセクタがガベージセクタであるデータブロックをガベージデータブロックとして扱うことができ得る。
【0070】
ガベージセクタを迅速に演算する方法の例は、やはりVHDイメージファイルの例を使用する。
【0071】
差分ハードディスクイメージファイルに関して、それぞれのデータブロックについて、3つのビットマップが取得されることがあり、これらはsrc_bmpと表され得るソースビットマップと、prt_bmpと表され得る親ビットマップと、blk_bmpと表され得るブロックビットマップである。
【0072】
src_bmpは、VHDイメージファイル内のデータブロックのソースビットマップを表す。prt_bmpは、先祖イメージのビットマップを表す。例えば、親イメージファイル内のデータブロックの親ビットマップが読み出される。親イメージファイル内のデータブロックの親ビットマップ内のビットが1である場合、ビット1はである。そうでない場合、最終の先祖のイメージファイルまでデータブロックのビットマップが親イメージファイルの親イメージファイルから読み出される。最終の先祖のイメージファイル内のビットマップ内のビットが0である場合、ビットは0である。
【0073】
blk_bmpは、ブロックビットマップを表す。例えば、仮想マシンのユーザは、VHDイメージファイル内に構築されたファイルシステムを読み出し、反射的に、セクタが有効な情報を格納しているかどうかを表すビットマップを取得することができる。
【0074】
ファイルシステムは一般的に、どのセクタが有効な情報を格納しているか、またどのセクタが有効な情報を格納していないかを特定するために、種々の方法でデータのビットマップ情報を記録する。例えば、Linux(登録商標)においてはext2/3/4が頻繁に使用される。ビットマップブロックは、どのブロックが有効データを格納しているか記録する。別の例では、Windows(登録商標)においてはNew Technology File System(NTFS)がしばしば使用される。その$Bitmapファイルは、ブロックのビットマップ情報を記録する。1つのブロックは、数個のセクタを含み得る。
【0075】
ファイルシステムのビットマップ情報が取得された後、VHDファイル内のどのセクタが有効な情報を格納しているか特定するために、論理セクタ番号と物理セクタ番号との間で上記に記載の変換方法が使用されることができ、これによってblk_bmpが取得される。
【0076】
次に、3つのビットマップが互いに比較され、終点ビットマップが生成され、これはdst_bmpと表され得る。dst_mapは、ビットマップ内のガベージセクタに対応するビットが0にクリアされた後(すなわち、404での操作の完了後)に、VHD内のデータブロックのビットマップとして使用され得る。それぞれのビットについて、以下の方法の例が使用されることができ、これは次の擬似コードで表される。
if src_bmp=0,then dst_bmp=0;
if src_bmp=1,then
if prt_bmp=0 and blk_bmp=1,then dst_bmp=1;
/*これは、親イメージファイルに相対して、新規データが書き込まれることを表す。*/
if prt_bmp=1 and blk_bmp=0,then dst_bmp=1;
/*これは、親イメージファイルに相対してデータが削除されることを表す。*/
if prt_bmp=0 and blk_bmp=0,then dst_bmp=0;
/*これは、親イメージファイルに相対して新規データが書き込まれ、かかる新規データが後に削除されることを表す。*/
if prt_bmp=1 and blk_bmp=1
/*これは、親イメージファイルに相対してデータの変更が発生することを表す。データは、ソースイメージファイルおよび親イメージファイルから読み出され、比較される。これらが同じであった場合、dst_bmpは0に設定される。そうでない場合、dst_bmpは1に設定される。*/
【0077】
上記に記載の方法に基づき、ソースビットマップ内のセクタに対応する記録が、このセクタがデータを格納している(src_bmp=1)ことを示し、親ビットマップ内のセクタに対応する記録が、このセクタがデータを格納していない(prt_bmp=0)ことを示し、ブロックビットマップ内のセクタに対応する記録が、このセクタがデータを格納していない(blk_bmp=0)ことを示した場合、このセクタはガベージセクタであると判断される。
【0078】
加えて、src_bmp=1、prt_bmp=1、およびblk_bmp=1である場合、データはソースイメージおよび親イメージから抽出され、比較される。これらが同じである場合、dst_bmpは0に設定される。このセクタもまたガベージセクタであると判断される。
【0079】
容量可変ハードディスクイメージの処理は比較的単純である。例えば、最初に、それぞれのデータブロックについて、ソースビットマップとブロックビットマップとが取得される。親ビットマップを取得する必要はない。
【0080】
次に、ソースビットマップとブロックビットマップとが比較され、404の後の上記に記載の操作において、終点ビットマップすなわちdst_bmpがセクタビットマップとして取得される。それぞれのビットについて、以下の方法の例が使用されることができ、これは次の擬似コードで表される。
if src_bmp=0,then dst_bmp=0;
if src_bmp=1,then
if blk_bmp=1,then dst_bmp=1;
/*これは、新規データが書き込まれることを表す。*/
if blk_bmp=0,then dst_bmp=0;
/*これは、新規データが書き込まれることを表す。しかし、新規に書き込まれたデータは後に削除される。*/
【0081】
上記に記載したとおり、ソースビットマップ内のセクタに対応する記録が、セクタがデータを格納している(src_bmp=1)ことを示し、ブロックビットマップ内のセクタに対応する記録が、セクタがデータを格納していない(blk_bmp=0)ことを示した場合、このセクタはガベージセクタであると判断される。
【0082】
上記に記載された実施形態の例は、例としてVHDフォーマットのイメージファイルを使用して説明される。本発明の技術はまた、上記に記載した原理と同じかまたは類似の、本明細書に記載されない他の種類のフォーマットにの仮想イメージファイルにおいても使用され得る。
【0083】
簡単にするため、上記の方法の実施形態の例は、一連の操作の組み合わせとして説明される。当業者は、本開示が本明細書に記載された操作の順序に制限されないことを理解するであろう。本明細書に記載された操作は、本開示に従って、他の順序となる場合、または一斉に起こる場合がある。当業者はまた、本明細書に記載された実施形態が説明を目的とするものであり、本開示に従いすべての操作が必要なわけではないことを理解するであろう。
【0084】
上記に記載の実施形態の例の説明に基づき、本開示はまた、上記に記載の例を実装するための、仮想ハードディスクイメージファイルを圧縮する対応する装置を開示する。
【0085】
図8は、本開示に従う、仮想ハードディスクイメージファイルを圧縮する装置の一例を示す図である。
【0086】
装置800は、1つまたは複数のプロセッサ802と、メモリ804とを含むがこれに限定されない。メモリ804は、ランダムアクセスメモリ(RAM)等の揮発性メモリおよび/または読み出し専用メモリ(ROM)またはフラッシュRAM等の不揮発性メモリの形式のコンピュータ記憶媒体を含み得る。メモリ704は、コンピュータ記憶媒体の一例である。
【0087】
コンピュータ記憶媒体には、コンピュータで実行可能な命令、データ構造、プログラムモジュール、またはその他のデータ等の情報を格納するためのあらゆる方法および技術において実装される、揮発性および不揮発性の、取り外し可能および取り外し不可能の媒体を含む。コンピュータ記憶媒体の例には、相変化メモリ(PRAM)、静的ランダムアクセスメモリ(SRAM)、動的ランダムアクセスメモリ(DRAM)、他の種類のランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、電気的消去可能なプログラム可能読み出し専用メモリ(EEPROM)、フラッシュメモリまたは他のメモリ技術、コンパクトディスク読み出し専用メモリ(CD−ROM)、デジタル汎用ディスク(DVD)または他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイス、またはコンピュータデバイスからのアクセス用の情報を格納するために使用されることができるあらゆる非伝送媒体を含むがこれに限定されない。本明細書に定義されるとおり、コンピュータ記憶媒体には、変調データ信号および搬送波等の一時的な媒体は含まない。
【0088】
メモリ804は、その中にプログラムユニットまたはモジュールおよびプログラムデータを格納し得る。一実施形態において、モジュールはガベージデータブロック検索モジュール806と、データ移動モジュール808と、ファイル圧縮モジュール810とを含み得る。
【0089】
ガベージデータブロック検索モジュール806は、ファイル内の1つまたは複数のガベージデータブロックを検索し、BAT内のガベージデータブロックに対応する1つまたは複数の記録を修正する。ガベージデータブロックとは、有効データを格納していないデータブロックである。データ移動モジュール808は、ガベージデータブロックの後にある有効データブロックを、ガベージデータブロックの位置に移動させ、有効データブロックが移動された後に、BAT内の有効データブロックの対応する記録を修正する。ファイル圧縮モジュール810は、データブロックの移動が完了した後に、ファイルを圧縮する。
【0090】
例えば、それぞれのデータブロックは、1つまたは複数のセクタと、それぞれのセクタの情報を記録するビットマップとを含み得る。本装置は、データブロック内の1つまたは複数のガベージセクタを検索し、ビットマップ内の1つまたは複数のガベージセクタの対応する記録を修正する、ガベージセクタ検索モジュール812とをさらに含み得る。
【0091】
例えば、ガベージセクタ検索モジュール812に基づき、ガベージデータブロック検索モジュール806は、ファイルのデータブロックのビットマップを検索し、データブロックであって、そのビットマップがすべての対応するセクタの記録がガベージセクタであることを示すデータブロックがガベージデータブロックであると判断し得る。
【0092】
例えば、ガベージセクタ検索モジュール812は、ガベージセクタを検索するための2つの例示的な方法を使用してもよい。例示的な方法の1つにおいて、ガベージセクタ検索モジュール812は、ソースイメージ(イメージファイルが容量可変イメージファイルである場合)または親イメージファイル(イメージファイルが差分イメージファイルである場合)からビットマップを読み出し、それらを比較してセクタがガベージセクタであるかどうか判断し得る。ガベージセクタ検索モジュール812は、ビットマップ検索サブモジュールと判断サブモジュールとを含み得る。ビットマップ検索サブモジュールは、ファイルのデータブロックのビットマップを検索する。ビットマップ内のセクタに対応する記録が、セクタ内にデータが格納されていることを示した場合、判断サブモジュールがトリガされる。判断サブモジュールは、追加の判断操作を行ってもよい。判断サブモジュールは、ファイルの種類を判断する。ファイルが容量可変ハードディスクイメージファイルである場合、判断サブモジュールは、セクタ内のすべてのデータが0を表すかどうか判断する。判断結果が正である場合、セクタはガベージセクタであると判断される。ファイルが差分ハードディスクイメージファイルである場合、判断サブモジュールは、セクタ内に格納されたデータが、親イメージファイルに同じセクタ位置を持つ、対応するセクタ内に格納されたデータと同じかどうかを判断する。これらが同じである場合、セクタはガベージセクタであると判断される。
【0093】
ガベージセクタを高速検索するための別の例示的な方法として、ガベージセクタ検索モジュール812は、ファイルの種類に基いて、異なるサブモジュールを含み得る。ファイルが容量可変ハードディスクイメージファイルである場合、ガベージセクタ検索モジュール812は、第1の取得サブモジュールと、第1の比較サブモジュールとを含み得る。第1の取得サブモジュールは、ファイルのデータブロックのソースビットマップと、対応するセクタが有効データを格納しているかどうかを示すブロックビットマップとを取得する。第1の比較サブモジュールは、ソースビットマップとブロックビットマップとの間で、すべてのビットを比較する。ソースビットマップ内の対応するセクタの記録が、このセクタがデータと格納していることを示し、一方でブロックビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示した場合、このセクタはガベージセクタであると判断される。
【0094】
ファイルが差分ハードディスクイメージファイルである場合、ガベージセクタ検索モジュール812は、第2の取得サブモジュールと第2の比較サブモジュールとを含み得る。第2の取得サブモジュールは、ファイルのデータブロックのソースビットマップと、対応するセクタが有効なデータを格納しているかどうかを示すブロックビットマップと、先祖イメージファイル内の同じデータブロックの親ビットマップとを取得する。第2の比較サブモジュールは、ソースビットマップと、ブロックビットマップと、親ビットマップとの間でそれぞれのビットを比較する。ソースビットマップ内の対応するセクタの記録が、セクタがデータを格納していることを示し、一方で親ビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示し、ブロックビットマップ内のセクタの対応する記録が、セクタがデータを格納していないことを示した場合、セクタはガベージセクタであると判断される。
【0095】
本開示に記載の仮想ハードディスクイメージファイルを圧縮する装置800は、VHDフォーマットの容量可変ハードディスクイメージファイルまたは差分ハードディスクイメージファイルからデータが削除された後に、イメージファイルのサイズを縮小させることができ、それにより、ファイルの記憶領域を確保する。
【0096】
上記に記載された仮想ハードディスクイメージファイルを圧縮するための装置の実施形態の例は、原理が本明細書の方法の実施形態の例に記載されたものに類似するため、比較的単純に説明される。関連のある説明は、
図1〜
図7に示す実施形態の例を参照してもよい。
【0097】
本開示は、本開示の実施形態の方法、デバイス(システム)およびコンピュータプログラムのフローチャートおよび/またはブロックダイアグラムを参照することによって説明される。それぞれのフローおよび/またはブロック、ならびにフローチャートおよび/またはブロックダイアグラムのフローおよび/またはブロックは、コンピュータプログラム命令によって実装されることが可能であることが理解されるものとする。これらのコンピュータプログラム命令は、フローチャートの1つまたは複数のフローおよび/またはブロックダイアグラムの1つまたは複数のブロックを実装するためのデバイスが、コンピュータまたは他のプログラム可能なデータプロセッサによって操作される命令を通じて生成されることができるように、汎用コンピュータ、特殊コンピュータ、埋め込みプロセッサまたは他のプログラム可能なデータプロセッサに提供され、マシンを生成することができる。
【0098】
これらのコンピュータプログラム命令は、コンピュータまたは他のプログラム可能なデータプロセッサに一定の作動をするように命令することができる、他のコンピュータ可読の記憶装置にも格納されることができ、その結果、コンピュータ可読の記憶装置に格納された命令により、命令デバイスであって、フローチャートの1つまたは複数のフローおよび/またはブロックダイアグラムの1つまたは複数のブロックに定められた機能を実装する命令デバイスを含む製品が生成される。
【0099】
これらのコンピュータプログラム命令は、コンピュータまたは他のプログラム可能なデータプロセッサが一連の操作ステップを操作させて、コンピュータによって実装されるプロセスを生成することができるように、コンピュータまたは他のプログラム可能なデータプロセッサ内にロードされることができる。その結果、コンピュータまたは他のプログラム可能なデータプロセッサ内で操作される命令は、フローチャートの1つまたは複数のフローおよび/またはブロックダイアグラムの1つまたは複数のブロックにおいて定められた機能を実装するためのステップを提供することができる。
【0100】
本実施形態は、単に本開示の説明に過ぎず、本開示の範囲を制限することを意図するものではない。本開示の原理を逸脱することなく、ある特定の修正および改善がなされることが可能であり、本開示の保護下にあるということが当技術分野の当業者に理解されるものとする。