[System Environment] | |||||||||||
仮想ハードディスクのデフラグに注意
|
|||||||||||
|
解説 |
仮想ディスクとその原理
Virtual PC 2004やVirtual Server 2005では、コンピュータの中にさらに仮想的なハードウェア・システム(仮想マシン環境)を構築し、その上でさまざまなOSやアプリケーションを動作させる。仮想マシンにはハードディスクも用意されているが、これは「仮想ハードディスク」と呼ばれ、実際には、ホストOS上の1つのファイルで実現されている。例えば仮想マシンVM01に対して、16Gbytesのサイズの仮想ハードディスクを割り当てたとすると、仮想ハードディスクの内容はVM01.VHDというファイルに格納されることになる(.VHDは仮想ハードディスク・ファイルの拡張子)。そして、VM01の中でディスク入出力を行うと、それは実際にはファイルVM01.VHDというファイルに対する読み書きとなる。
ところで仮想ハードディスクのサイズは16Gbytesだとしても、Virtual PC 2004やVirtual Server 2005の仮想ディスクでは、これをそのまま実際のファイルに割り当てたりはしない。ディスクには未使用領域が含まれるのが普通なので、これを考慮し、無駄にディスクを使用するのを防いだり、実際のディスク入出力を抑えたりするため、本当に必要な部分だけをファイルに記録するようにしているからだ。これを可変容量の仮想ハードディスクという(ほかに、固定長や差分タイプも選択できる)。
では「本当に必要な部分」をどうやって判断するかというと、その原理は非常に単純である。全ディスク領域のうち、一度でも書き込んだことがあればそれを仮想ディスク・ファイルに書き込み、そうでなければ書き込まない、となっている。書き込んでいないディスク領域を読み出すことは通常ではありえないので、そのような領域は仮想ディスク・ファイルに記録しておく必要はない。仮想ディスクに対する書き込みがあった部分だけを仮想ディスク・ファイルに記録しておけば十分と考えられる。実際には、未使用部分には0(ゼロ・データ)が書き込まれているものとして扱われる。
以上のような原理のため、可変容量の仮想ハードディスク・ファイルは、初期サイズはほとんど0だけれども(正確には、ディスク先頭にはブート・レコードなどの領域があるので、0ではない)、仮想マシンに対して、OSやアプリケーションをインストールしたり、ファイルを作成したりしていると、そのサイズはどんどん大きくなってくる。そして、ディスク・フルになるほどデータを書き込むと、最大サイズ(この場合なら16Gbytes)になる。サイズは拡大する一方で、小さくなることはない(どこが未使用になったのか、仮想マシン・ソフトウェアでは分からないから)。
仮想ディスクに対するデフラグ
さてそれでは、仮想マシン上のOS(ゲストOS)上で、ディスク領域をデフラグするとどうなるだろうか。
通常使っているコンピュータでは、OSやアプリケーションのインストール直後だけでなく、定期的にデフラグを実行して、ファイル・システムのフラグメントを除去するのは普通だろう。フラグメントが解消されると、ファイル・アクセスなどが高速に行えるようになり、パフォーマンスも向上するからだ。しかもVirtual PCやVirtual Serverでは、マスターとなる仮想マシンのイメージをコピーして利用することが多いため、最初に一回デフラグをかけておくだけで十分だと考えられる。
だが実際に、ゲストOS上でディスク領域をデフラグすると、仮想ディスク・ファイルのサイズは何割か大きくなってしまう。例えば手元のVirtual Server 2005上で、Windows 2000 ServerをゲストOSとする仮想マシン環境を作成して実験したところ、デフラグする前は2Gbytes程度だった仮想ディスク・ファイルのサイズは、デフラグ後には3Gbytes弱になってしまった(仮想ディスクのサイズは16Gbytes)。イメージをバックアップなどの目的で保存しておいたり、コピーしたりして利用するには、サイズが大きくて都合が悪い。デフラグする前のイメージの方が扱いやすかった。
デフラグでサイズが増える理由
デフラグは、ファイルの内容を改変するものではないし、ファイル・サイズを変更するようなものでもない。ただファイルの配置を変更して、空き領域を詰めているだけである。だがこれが原因で仮想ディスク・ファイルのサイズが拡張されてしまう。その原理はこうである。
デフラグとは簡単にいえば、既存のファイルを、どこか別の空き領域を見つけてコピーし、元の領域を空き領域にする、という動作の繰り返しである。移動先の空き領域は、もともとはディスク上の「未使用領域」だった可能性が高い。特にディスクの利用率が低い初期の段階では、デフラグで移動する先は、デフラグの開始時点では未使用だった領域の場合がほとんどだろう。未使用だった領域に新たにデータを書き込むということは、それは結局、仮想ディスク・ファイルの拡大をもたらすことになる。
デフラグによる新たな領域への書き込み |
仮想ディスクのドライバにとっては、ファイル・システム上の未使用領域(図中の[未使用領域]の部分)は分からないので、結局、書き込みがあった部分をすべて物理的なディスクに保存するしかない。デフラグを行うと、以前は未使用だった領域に新たにデータを書き込むことになり、それが結局、仮想ディスク・ファイルの拡大につながる。 |
これを実際のデフラグ管理ツールの画面で見ると、次のようになっている。デフラグ前には未使用だった領域に新たにファイルが書き込まれている。その分だけ仮想ディスク・ファイルのサイズが拡大している。
デフラグの前後の状態 | |||||||||
デフラグを実行すると、以前未使用だった領域にデータが移動してきている。 | |||||||||
|
仮想ディスクはデフラグするべきか?
仮想ディスクは、実際にはホストOS上のファイルとして実現されている。そのため、ゲストOS上でフラグメントが大量に発生すると、それは最終的にはファイル・アクセス時のランダム性(アクセスのちらばり具合)が多少増える程度であると考えられる。ファイル・アクセスはホストOSによって高度に管理・最適化されているため、実際の物理的なコンピュータとは比較にならないくらい、影響は小さくなるだろう。よって、特にデフラグしなくてもよいと思われるが、仮想ディスク・ファイルが拡大しても問題がないのであれば、実行しても特に問題はないし、その方が望ましい。
ただ、フラグメントが大量に発生していると、ゲストOS内部でのファイル・キャッシュ管理などに影響が及び、ゲストOS上のアプリケーションのパフォーマンスが低下することも考えられる。パフォーマンスを重視するなら、可変長の仮想ディスク・ファイルをやめて固定長の仮想ディスク・ファイルを利用したり、仮想マシンに割り当てるメモリを増やすなどの対策も必要だろう。
仮想ディスク・ファイルの未使用領域を解放するには?
以上のように、仮想ディスク・ファイルのサイズは拡大する一方である。だが何らかの手段でファイル・システム中の未使用領域を見つけ出し、それらを解放するような方法があれば、仮想ディスク・ファイルのサイズを縮小させ、必要最小限のサイズにすることが可能となる。以下、その方法についていくつか紹介する。
■ディスク事前圧縮ツールを利用する
Virtual PC 2004 SP1およびVirtual Server 2005 R2には、「Microsoft バーチャル ディスク事前圧縮ユーティリティ」という追加ツール(precompact.exe)が用意されている。これをゲストOSのWindowsシステム上で実行すると(あらかじめデフラグしておくとよい)、ファイルとして利用していない領域にすべて「0(バイナリ・データのゼロ)」が書き込まれる。つまり仮想ディスク・ファイル中の未使用領域の内容をゼロ・クリアするのである。ゲストOSを停止・終了後、仮想ディスク・ファイルを「圧縮」すると、ゼロ・クリアされた部分が削除され、その分だけファイル・サイズが縮小する。このツールの具体的な使い方については、TIPS「仮想ハードディスクを圧縮する(Virtual PC 2004編)」「仮想ハードディスクを圧縮する(Virtual Server
2005 R2編)」を参照していただきたい。
Virtual PC 2004 SP1/Virtual Server 2005 R2付属の事前圧縮ツール |
事前圧縮ツールを実行すると、(仮想)ディスク上の未使用領域にゼロ・データが書き込まれる。その後ディスク・ファイルを圧縮すると、ゼロ・データ部分が削除され、ファイル・サイズが縮小する。 |
■サードパーティ製のディスク・コピー・ツールを利用する
サードパーティ製のディスク・トゥ・ディスクのコピーを行うツールなどを利用すれば、未使用領域を除外して、仮想ディスク・ファイルのサイズを縮小させることができる(やはり、事前にデフラグしておくとよい)。例えばSymantec Ghostのようなツールでは、ファイル・システムを認識してファイル部分だけをコピーする機能を持っている。このようなツールを使って、既存の仮想ディスク・ファイルから新しい仮想ディスク・ファイルへでコピーを行えば(もちろん仮想マシン上で実行する)、ファイルが使用している部分だけをコピーすることができる。先ほどの環境で実験したところ、2Gbytesから3Gbytesに拡大した仮想ディスク・ファイルは、この方法で1.5Gbytes程度にまで縮小した。ただしファイルとしてではなく、単にディスクのセクタの内容を丸ごとコピーするタイプのツールでは、コピーされた仮想ディスク・ファイルのサイズは変わらない。
■ゲストOSにマウントしてファイル・コピーする
別のゲストOSに仮想ディスク・ファイルをマウントし、その内容を、新しく作成した空の仮想ディスクへエクスプローラなどでファイル・コピーを行えば、必要な部分だけを含む仮想ディスク・ファイルを作ることができる。ただしこの方法では、OSからはアクセスできないようなデータ領域(ブート・セクタなど)や特殊なファイルはコピーできないので、注意が必要である。
関連リンク | ||
Virtual PC 2004製品情報(マイクロソフト) | ||
Virtual PC 2004 Service Pack 1(マイクロソフト) | ||
Virtual Server 2005製品情報(マイクロソフト) | ||
この記事と関連性の高い別の記事
- 仮想ハードディスクを圧縮する(Virtual PC 2004編)(TIPS)
- 仮想ハードディスクを圧縮する(Virtual Server 2005 R2編)(TIPS)
- 仮想ディスクをコマンドラインから拡大/縮小する(TIPS)
- 物理ディスクの内容を仮想ディスク・ファイルに変換する(TIPS)
- Hyper-V 2.0で仮想SCSIディスクを動的に追加する(TIPS)
- 仮想ハードディスクのサイズを拡大する(TIPS)
- WindowsのHyper-Vで仮想ハードディスク(VHD)のサイズを拡大する(TIPS)
- 仮想マシンにおける差分ディスクと復元ディスクの違い(TIPS)
- Windows Virtual PCで新しい仮想マシンを作成する(TIPS)
- Hyper-Vの仮想マシンをインポートする(Windows 8/Server 2012編)(TIPS)
このリストは、デジタルアドバンテージが開発した自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
更新履歴 | |
|
「Windows TIPS」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|