Windows TIPS
[System Environment] |
仮想ハードディスクを圧縮する(Virtual PC 2004編)
|
|
■ |
ゲストOS上でデフラグしたり、ファイルの作成/削除を繰り返すと、可変長サイズの仮想ディスク・ファイルのサイズが拡大するが、これは自動的に縮小することはない。 |
■ |
仮想ディスク・ファイル中の未使用領域を解放して、サイズを縮小するには「仮想ディスクの圧縮」を行うとよい。 |
■ |
圧縮を行う前に、デフラグや、事前圧縮ユーティティによる未使用領域への0データの書き込みを行っておくとよい。 |
■ |
仮想ディスク・ファイルの読み取り属性を解除しておかないとエラーとなり、圧縮できない。 |
|
|
TIPS「仮想ハードディスクのデフラグに注意」では、Virtual PCやVirtual Serverで利用する仮想ディスク・ファイル(.VHDファイル)をデフラグする場合の注意点について解説した。ディスクをデフラグすると、ディスクの使用中の領域(および未使用領域)が1カ所にまとめられ、その結果ディスク・アクセスが集中化することになり、ディスク入出力のパフォーマンスが向上する。
だが物理的なディスクをデフラグする場合と違い、可変長サイズの仮想ディスクをデフラグすると、仮想ディスク・ファイルの実際のサイズが拡大してしまう。その理由については、前出のTIPSを参照していただきたいが、簡単にいうと、仮想ディスク中の使用済み領域(現在使用中の領域のほか、過去に1度でも使用したことがある領域)が拡大するからだ。デフラグを行うと、新しい領域への書き込みが起こり、結果として仮想ディスク・ファイルのサイズが拡大する。またデフラグではなくても、仮想マシンのゲストOS上でファイルの作成や削除などを繰り返していると、やはり使用済み領域が増え、結果的に、不要な領域を多く含んだ、巨大な仮想ディスク・ファイルになる。
これを解決し、仮想ディスク・ファイル中の未使用領域(ファイルとして割り当てられていない領域)を本当に解放して、ファイル・サイズを最小にするには、Virtual PC 2004 SP1/Virtual Server 2005 R2に用意されている「仮想ディスクの圧縮」という操作を行う。ここでいう「圧縮(compaction)」とは、具体的には、ファイル・システムで使用していない領域(1度データを書き込んだが、ファイル削除などでその後解放された領域)を仮想ディスク・ファイルから削除し、仮想ディスク・ファイルのサイズを小さくする(無駄な領域を省く)ことである。ZIPファイルやNTFSのファイル圧縮のように、データの内容そのものを圧縮(compression)するわけではないので、何分の1にも小さくなるわけではない。あくまでも仮想ディスク・ファイル中から無駄な領域を省くという機能のことを指す(日本語版では「圧縮」と呼んでいるが、この意味では「コンパクト化」と訳す方が望ましいかもしれない)。
本TIPSでは、Virtual PC 2004(SP1)における、仮想ディスクの圧縮方法について解説する。Virtual Server 2005 R2での方法については別TIPSの「仮想ハードディスクを圧縮する(Virtual Server 2005 R2編)」を参照していただきたい。
なおこの圧縮は、可変長サイズの仮想ディスク・ファイルにのみ適用可能な処理である。固定長サイズの仮想ディスク・ファイルでは、圧縮は行えないし、その必要もない。可変長サイズの仮想ディスク・ファイルでは、データの内容が0(仮想ディスクの初期値)ばかりのブロックは、実際には.VHDファイルに保存しない。そのため仮想ディスクの圧縮では、実際には、ゲストOS上で未使用のディスク領域部分に0を書き込み、その部分を.VHDファイルから除去する、という処理を行っている。
手順1―ゲストOS上でのデフラグ
仮想ディスク・ファイルを圧縮するためには、最初に、Virtual PC 2004 SP1(以下VPC2004)で対象となる(.VHDファイルをマウントした)ゲストOSを起動し、ファイル・システムをデフラグしておくことが望ましい。MS-DOSでも標準のデフラグ・ツール(defrag.exeコマンド)を実行しておけばよいだろう。デフラグしなくても圧縮はできるが、使用済み領域が分散したままなので、アクセス効率の向上という目的はあまり望めない。またデフラグの前に、不要なファイルの削除やごみ箱を空にするといった操作も行っておくとよい。
手順2―未使用領域への0データの書き込み
仮想ディスクの圧縮では、ディスクの未使用領域(ファイル・データが書き込まれていない領域や、ファイルを削除済みの領域)に対して、0データを書き込んでおく必要がある。1つのブロック(VPC2004がアクセスする単位)の内容がすべて0ならば、その部分が.VHDファイルから解放されるからだ。
ディスクの未使用領域に0データを書き込むには、VPC2004に付属の「バーチャル・ディスク事前圧縮ユーティリティ(virtual disk precompactor。コマンド名はprecompact.exe)」を利用する。このツールの動作原理は非常に単純で、新しいファイルを次々と作成しながら、その内容として0データを書き込むだけである(0データはいくら書き込んでも無視され、仮想ディスク・ファイル・サイズは拡大しない)。そして空き領域いっぱいにファイルを作成したら、最後にそれらをすべて消去する。その結果、未使用領域の内容はすべて0になる。
このユーティリティは、VPC2004のインストール・フォルダ(デフォルトでは「C:\Program Files\Microsoft Virtual PC」)の中にある「Virtual Machine Additions」というフォルダに「Virtual Disk Precompactor.iso」という.ISOファイルとして用意されている。これはCD-ROMイメージのファイルなので、ゲストOSに仮想CD-ROMとしてマウントする。
|
仮想CD-ROMのマウント |
仮想CD-ROMイメージをマウントするには、VPC2004の[CD]−[ISO イメージのキャプチャ]で、.ISOファイルを指定する。 |
|
|
これを選択して、.ISOファイルを指定する。 |
|
仮想CD-ROMをマウントすると、自動的に実行するかどうかを聞いてくるので、[はい]を選択し、事前圧縮ユーティリティを起動する。
|
事前圧縮ユーティリティの実行 |
仮想CD-ROMが自動起動に設定されていると、事前圧縮ユーティリティが起動する。 |
|
|
これをクリックして事前圧縮ユーティリティを実行する。デフォルトでは全ドライブを事前圧縮する。 |
|
ただし特定のドライブだけを圧縮した場合や、自動起動を無効にしている場合は、手動で実行してもよい。この仮想CD-ROMの中にはprecompact.exeというファイルが入っているので、ダブルクリックすれば起動する(あらかじめこのファイルだけをコピーして抜き出しておき、ゲストOS上へコピー後、実行してもよい)。特定のドライブだけに対して事前圧縮を行うには、コマンド・プロンプト上で実行してもよい。「-SetDisks:<ドライブ名>」で、(複数の)任意のドライブに対して実行することができる。ヘルプは「precompact -?」で表示される。
C:\>d:
D:\>precompact -setdisks:ce ……ドライブC:とE:に対して実行する例 |
手順3―圧縮ツールの起動
以上で事前圧縮は終了である。ゲストOSをシャットダウンして、次はVPC2004の管理画面で圧縮操作を行う。ただし、ゲストOSを起動したままでは(仮想ディスクが使用中の場合は)、圧縮することはできない。
VPC2004で仮想ディスク・ファイルを圧縮するには、[ファイル]メニューの[バーチャル ディスク ウィザード]を起動し、既存の.VHDファイルの編集を選択する。
|
ディスク圧縮ウィザードの起動 |
仮想マシン(ゲストOS)を停止後、バーチャル・ディスク・ウィザードを起動して、ディスクの編集を選択する。 |
|
|
ウィザードを起動後、これを選択して先へ進む。 |
|
次に編集対象の.VHDファイルを指定する。差分ディスクや復元ディスクは指定できないので、必要ならば(元のファイルと結合して)容量可変の仮想ディスクに変換しておく。なお、ファイルに読み取りのみ(書込み禁止)の属性が付いているとエラーになるので、(たとえ書き込むつもりがなくても)読み取りのみの属性は外しておく。
|
圧縮対象のファイルの指定 |
圧縮対処の仮想ディスク・ファイルを指定して先へ進む。 |
|
|
容量可変の.VHDファイルを指定する。差分ディスクや復元ディスクなどは指定できない。 |
|
|
これをクリックして、選ぶことも可能。 |
|
次の画面では、[圧縮する]を選択する。
|
圧縮の選択 |
ウィザードでは、ファイルを圧縮するか、容量固定の仮想ディスク・ファイルに変換できる。 |
|
|
これを選択する。 |
|
次にファイルの書き込み先を指定する。元のファイルを上書きしてもよいし、別のファイルとして新規に作成してもよい。途中でエラーが生じると、仮想ディスク・ファイルが使用できなくなる可能性があるので、別のファイルに出力後、元のファイルを削除してファイル名を変更するのがよいだろう。なお、たとえ別のファイルに書き出す場合でも、元のファイルに読み取りのみの属性が付いていると(実際には何も書き込まれないようであるが)エラーになるので、注意する。必要ならば圧縮前に一時的に読み取り属性を外し、最後にまた属性を元に戻せばよいだろう。
|
圧縮後のファイルの保存先の指定 |
圧縮後は、新しいファイルに保存するか、元のファイルを上書きするかを選択できる。 |
|
|
上書き更新する場合。 |
|
|
新規作成する場合。 |
|
以上でウィザードは終了である。最後に[完了]をクリックすれば、圧縮が行われる。圧縮操作を行ってもファイル・サイズがあまり小さくならないようであれば、その仮想ディスクには無駄な領域があまり存在していないか、削除したはずのファイルがゴミ箱などに残ったまま、もしくはシステムの復元やボリューム・シャドウ・コピーによる以前のバージョンのファイルなどが残ったままかもしれないので、ゲストOSの環境を確認するとよい。
Windows Server Insider フォーラム 新着記事