仮想ディスク(VHD)のディスク・サイズを縮小したいことがある。しかしWindows 7の標準のディスク管理ツールでは、ボリュームは縮小できるがディスクのサイズは縮小できない。VHD Resizerというツールを併用すれば、VHDのディスク・サイズを縮小できる。
対象OS:Windows 7
仮想マシンを構築・運用していると、仮想ハードディスク(VHD)のディスク・サイズを縮小したくなることがある。ここでいう「ディスク・サイズ」とは、ゲストOSに認識されるディスクの総容量のことで、実使用量やボリューム(パーティション)のサイズとは異なる。
例えば、運用「Windows XP→Windows 7丸ごと引っ越しテクニック」や仮想PCで学ぶWindowsシステム管理「仮想ディスクの最大サイズと137Gbytesの壁」で説明しているように、Windows Virtual PCやHyper-Vの仮想IDEインターフェイスでは、接続できる仮想ハードディスクのサイズが127Gbytes(1Gbytes=1,024Mbytes=1,048,576Kbytes=1,073,741,824bytesとして換算)までという制限がある。P2V(物理マシンから仮想マシンへの移行)によって生成されたVHDのディスク・サイズが127Gbytesを超えると、そこから仮想マシンのゲストOSを起動できなくなってしまう。
また、容量固定型のVHDを利用している場合、仮想化ホスト・マシンのディスク空き容量が心許なくなってきたので、固定容量型のままVHDを小さくしたい、ということもあるだろう(容量可変型に変換した方が容量を節約できるが、使い続けているうちにディスクのパフォーマンスが下がってしまう)。
Windows 7ではVHDを取り扱う機能が強化されており、例えばVHDに含まれるボリューム(パーティション)を縮小したり拡大したりできる(TIPS「ディスクのボリューム・サイズを縮小する」参照)。しかしディスクの縮小については、Windows 7の標準機能ではできない。
そこで本稿では、VHDファイルを直接操作する無償配布のツール「VHD Resizer」をWindows 7のボリューム縮小機能と組み合わせて、VHDのディスク・サイズを縮小する手順を説明する。おおまかな手順としては、Windows 7の「ディスクの管理」ツールでボリュームを縮小してディスク末尾に未使用領域を設け、VHD Resizerでその未使用領域を切り詰めてディスク・サイズを縮小する。
VHD Resizerは次の「vmToolkit」というサイトのダウンロード・ページから入手できる。
ページ上部の[Download]ボタンをクリックするとVhdResize-<バージョン番号>.zipというファイルがダウンロードされるので、解凍して「VhdResizerSetup.msi」というインストーラを実行する。あとはウィザードにしたがってインストールを完了させる。
本稿で対象とするVHDの形式は、容量固定型または容量可変型とする。差分仮想ディスクや物理ハードディスクへリンクされた仮想ディスクはVHD Resizerでは操作できないので、必要なら容量固定型/可変型へ変換してから作業していただきたい。
また物理ディスクの空き容量が足りないと、後述するVHD内のボリューム縮小作業が途中で失敗することがある。試した限りでは、元のボリューム・サイズの2倍程度は空いていた方が無難なようだ。
まずは対象のVHDをWindows 7に接続(マウントとも呼ぶ)して、デフラグやボリュームの縮小といった操作ができるようにする。それには、スタート・メニューから[管理ツール]−[コンピュータの管理]を起動し、左ペインから[記憶域]−[ディスクの管理]を選ぶ(詳細はTIPS「Windows 7でVHDファイルを直接マウントする」参照)。
次に[操作]メニューから[VHD の接続]をクリックしてVHDファイルを指定する。
すると、接続されたVHD内のボリュームに新たなドライブ名が自動的に割り当てられ、エクスプローラなどからもアクセスできるようになる。
次に、接続したVHD内のボリュームに対してデフラグを実行する。この後に説明するWindows 7の[ディスクの管理]によるボリューム縮小作業では、フラグメントが残っている状態でも、可能な限り使用領域(クラスタ)を移動してボリューム末尾の未使用領域を広げようとする。しかしファイルのフラグメント自体は解消されないので、やはり事前にデフラグをしたほうが、未使用領域を広げられる可能性がある。
デフラグを実行するには、スタート・メニューから[アクセサリ]−[システム ツール]−[ディスク デフラグ ツール]をクリックして、デフラグ・ツールを起動する。次に、あらかじめ確認しておいたドライブ名からVHD内のボリュームを特定して選択し、分析→最適化の順に実行する。
デフラグが完了しても、デフラグ・ツールはそのまま終了せずに起動したままにしておく。この後のボリューム縮小作業の進行状況がデフラグ・ツールに表示されて便利だからだ。
デフラグが済んだら、次にVHD内のボリュームを縮小する。それには、前述の[コンピュータの管理]の[ディスクの管理]にて、接続済みのVHD内のボリュームを右クリックして表示されるコンテキスト・メニューから、[ボリュームの縮小]をクリックする。
すると、「利用可能な縮小領域のボリュームを紹介しています。お待ちください」というメッセージが表示される。このときデフラグ・サービスによるボリューム内のフラグメント状況の分析が実施されており、前述のデフラグ・ツールを開くと、分析が何%まで進んでいるのか確認できる。
分析が完了すると、縮小後のボリューム・サイズを指定するダイアログが表示される。デフォルトでは、可能な限りボリュームを小さくするよう設定されるため、ボリュームに必要な空き容量を考慮してサイズを決定すること。[縮小]ボタンをクリックすると実際の縮小作業が始まる。
縮小中はデフラグ・サービスによってボリューム内の使用領域(クラスタ)の移動が実施されるので、やはりデフラグ・ツールで進行状況を確認できる。事前にデフラグを実行していないと、ここで数十分から数時間、時間がかかることもある。
なお、Windows VistaなどWindows 7より前のOSにディスク管理ツールでは、NTFSボリュームの真ん中付近に配置されている管理領域(MFT:Master File Table)を移動しないため、元のディスク・サイズの半分以下には縮小できない。だがWindows 7/Windows Server 2008 R2では移動できるので、Windows 7以降のOSでボリューム縮小を実行した方がよい。
縮小作業が完了したら、[ディスクの管理]でVHD内のボリュームが指定どおりのサイズに縮小されていることを確認する。
この後にVHD ResizerでVHDのディスク・サイズを縮小するために、ここでVHDの接続を解除する(アンマウントする)。それには、[ディスクの管理]画面でVHDのディスク(「ディスク 2」などと表示されている部分)を右クリックし、表示されたコンテキスト・メニューから[VHD の切断]をクリックする(詳細はTIPS「Windows 7でVHDファイルを直接マウントする」参照)。
次のダイアログでは、[ディスクの削除後に仮想ハード ディスク ファイルを削除する]のチェックが外れていてオフになっていることを確認してから、[OK]ボタンをクリックする。
最後にVHD ResizerでVHDのディスク・サイズを縮小する。スタート・メニューから[vmToolkit]−[Vhd Resizer]をクリックしてVHD Resizerを起動すると、元になるVHDファイルを指定するダイアログが表示される(詳細はTIPS「仮想ハードディスクのサイズを拡大する」参照)。さきほどボリュームを縮小したVHDファイルを指定して[開く]ボタンをクリックすると、VHD Resizerの画面が現れる。
新たなVHDのファイル名や形式、ディスク・サイズを指定して[resize]ボタンをクリックすると、新VHDファイルの生成が始まる。物理ディスクの性能やVHDファイルのサイズに大きく依存するが、完了までには数十分を要することが多いので、じっくり待つこと。
新VHDファイルの生成が完了したら、VHD Resizerは閉じる。そして再び[コンピュータの管理]の[ディスクの管理]から新VHDを接続して、ディスク・サイズやボリューム、未使用領域の状況を確認する。ディスク・サイズは、VHD Resizerで指定したサイズに縮小されているはずだ。
複数のボリュームが存在するVHDの場合、ここまで説明した手順では、ディスク末尾に最も近いボリュームの縮小分しかディスクは小さくならない。ディスク先頭に近いボリュームをいくら縮小しても、Windows OSの標準ツールでは各ボリュームの先頭位置は変えられないため、結果としてディスク内に未使用領域(ボリュームのない領域)が散在することになる。
これを解消する方法としては、まず市販のパーティション管理ツールを利用してボリュームを移動してディスク先頭へ詰める手がある。未使用領域がディスク末尾にまとめられるため、VHD Resizerで圧縮できるだろう(市販ツールなら、これも実行できるかもしれない)。
もう1つは、OS起動関連(予約ボリュームやWindowsフォルダを含むボリューム)のボリュームだけVHDに残し、残りのボリュームはいったんバックアップしてから削除し、新たに作成した個々のVHDにリストアする、という方法だ。OSの起動に関係なくデータを保存しているだけのボリュームなら、アクセス権や所有権などを含めてフル・バックアップすれば、別のVHDにリストアすることも可能だ。こうすると起動関連のボリュームの後ろからディスク末尾までは未使用領域になるため、前述の手順でディスクを縮小できる。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.