Windowsで仮想ディスク(VHD)のディスクサイズを縮小するTech TIPS

仮想ディスク(VHD)のディスク・サイズを縮小したいことがある。しかしWindows 7の標準のディスク管理ツールでは、ボリュームは縮小できるがディスクのサイズは縮小できない。VHD Resizerというツールを併用すれば、VHDのディスク・サイズを縮小できる。

» 2011年09月16日 05時00分 公開
[島田広道デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象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に接続(マウント)する

 まずは対象のVHDをWindows 7に接続(マウントとも呼ぶ)して、デフラグやボリュームの縮小といった操作ができるようにする。それには、スタート・メニューから[管理ツール]−[コンピュータの管理]を起動し、左ペインから[記憶域]−[ディスクの管理]を選ぶ(詳細はTIPS「Windows 7でVHDファイルを直接マウントする」参照)。

 次に[操作]メニューから[VHD の接続]をクリックしてVHDファイルを指定する。

VHDをWindows 7に接続する VHDをWindows 7に接続する
これはスタート・メニューから[管理ツール]−[コンピュータの管理]を実行したところ。
  (1)まずこれを選択する。
  (2)これをクリックして操作メニューを開く。
  (3)これをクリックすると、接続するVHDファイルを指定するためのダイアログが表示される。[読み取り専用]のチェックは外してオフにしたまま、VHDのパスを指定して[OK]ボタンをクリックすると、そのVHDが接続される。

 すると、接続されたVHD内のボリュームに新たなドライブ名が自動的に割り当てられ、エクスプローラなどからもアクセスできるようになる。

接続されたVHD 接続されたVHD
接続されたVHD内のボリュームが自動的に認識され、ドライブ名が割り当てられてアクセス可能な状態になっている。
  (1)接続されたVHD。この例では元のディスク・サイズは約233Gbytesであることが分かる。
  (2)このあとのデフラグの際に必要なので、割り当てられたドライブ名(この例ではG:)を確認しておく。

●接続したVHD内のボリュームに対してデフラグを実行する

 次に、接続したVHD内のボリュームに対してデフラグを実行する。この後に説明するWindows 7の[ディスクの管理]によるボリューム縮小作業では、フラグメントが残っている状態でも、可能な限り使用領域(クラスタ)を移動してボリューム末尾の未使用領域を広げようとする。しかしファイルのフラグメント自体は解消されないので、やはり事前にデフラグをしたほうが、未使用領域を広げられる可能性がある。

 デフラグを実行するには、スタート・メニューから[アクセサリ]−[システム ツール]−[ディスク デフラグ ツール]をクリックして、デフラグ・ツールを起動する。次に、あらかじめ確認しておいたドライブ名からVHD内のボリュームを特定して選択し、分析→最適化の順に実行する。

接続したVHD内のボリュームに対してデフラグを実行する 接続したVHD内のボリュームに対してデフラグを実行する
スタート・メニューから[アクセサリ]−[システム ツール]−[ディスク デフラグ ツール]をクリックすると、このツールが起動する。
  (1)あらかじめ確認しておいたドライブ名から、VHD内のボリュームを選択する。
  (2)これをクリックすると、フラグメントの状況分析が始まる。
  (3)分析が完了した結果。このVHDでは28%のフラグメントが生じていることが分かる。
  (4)これをクリックしてデフラグを実行する。完了には数十分から数時間単位でかかる場合もあるので、じっくり待つ。

 デフラグが完了しても、デフラグ・ツールはそのまま終了せずに起動したままにしておく。この後のボリューム縮小作業の進行状況がデフラグ・ツールに表示されて便利だからだ。

●接続したVHD内のボリュームを縮小する(未使用領域を拡大する)

 デフラグが済んだら、次にVHD内のボリュームを縮小する。それには、前述の[コンピュータの管理]の[ディスクの管理]にて、接続済みのVHD内のボリュームを右クリックして表示されるコンテキスト・メニューから、[ボリュームの縮小]をクリックする。

接続したVHD内のボリュームを縮小する 接続したVHD内のボリュームを縮小する
これは[コンピュータの管理]の[ディスクの管理]を選択したところ。
  (1)マウントしたVHD。
  (2)VHD内のボリューム部分を右クリックしてコンテキスト・メニューが表示されたら、これをクリックする。すぐに、どれくらいボリュームを縮小できるか分析する作業が始まる。

 すると、「利用可能な縮小領域のボリュームを紹介しています。お待ちください」というメッセージが表示される。このときデフラグ・サービスによるボリューム内のフラグメント状況の分析が実施されており、前述のデフラグ・ツールを開くと、分析が何%まで進んでいるのか確認できる。

 分析が完了すると、縮小後のボリューム・サイズを指定するダイアログが表示される。デフォルトでは、可能な限りボリュームを小さくするよう設定されるため、ボリュームに必要な空き容量を考慮してサイズを決定すること。[縮小]ボタンをクリックすると実際の縮小作業が始まる。

ボリュームを縮小するサイズを指定する ボリュームを縮小するサイズを指定する
対象ボリュームの分析が完了すると、このダイアログが表示される。
  (1)元のボリューム・サイズ。
  (2)縮小可能な最大サイズ。
  (3)いくら縮小するかという指定。デフォルトでは(2)と同じ値、すなわち可能な限りボリュームを小さくするよう設定されている。ここでは縮小後のサイズが100Gbytesとなるように設定してみた(約33Gbytesの空き容量を設けた)。
  (4)縮小後のボリューム・サイズ。(3)に入力した値によって変動する。この値が希望するディスク・サイズになるように、(3)の値を設定すること。
  (5)これをクリックするとボリューム縮小化が始まる。

 縮小中はデフラグ・サービスによってボリューム内の使用領域(クラスタ)の移動が実施されるので、やはりデフラグ・ツールで進行状況を確認できる。事前にデフラグを実行していないと、ここで数十分から数時間、時間がかかることもある。

 なお、Windows VistaなどWindows 7より前のOSにディスク管理ツールでは、NTFSボリュームの真ん中付近に配置されている管理領域(MFT:Master File Table)を移動しないため、元のディスク・サイズの半分以下には縮小できない。だがWindows 7/Windows Server 2008 R2では移動できるので、Windows 7以降のOSでボリューム縮小を実行した方がよい。

 縮小作業が完了したら、[ディスクの管理]でVHD内のボリュームが指定どおりのサイズに縮小されていることを確認する。

ボリューム縮小直後のVHD内の状態 ボリューム縮小直後のVHD内の状態
これはボリューム縮小作業が完了した直後の[ディスクの管理]画面。
  (1)ディスク・サイズは変わっていない。
  (2)ボリューム・サイズが指定どおりに縮小されたか確認する。この例では233Gbytesから100Gbytesに縮小された。
  (3)ボリューム縮小により、ディスクの後半部分に未使用領域(ボリュームに占有されていない領域)が現れた。この部分を切り詰めることでディスク・サイズを縮小です。

●VHDをアンマウントする

 この後にVHD ResizerでVHDのディスク・サイズを縮小するために、ここでVHDの接続を解除する(アンマウントする)。それには、[ディスクの管理]画面でVHDのディスク(「ディスク 2」などと表示されている部分)を右クリックし、表示されたコンテキスト・メニューから[VHD の切断]をクリックする(詳細はTIPS「Windows 7でVHDファイルを直接マウントする」参照)。

 次のダイアログでは、[ディスクの削除後に仮想ハード ディスク ファイルを削除する]のチェックが外れていてオフになっていることを確認してから、[OK]ボタンをクリックする。

●VHD ResizerでVHDのディスク・サイズを縮小する

 最後にVHD ResizerでVHDのディスク・サイズを縮小する。スタート・メニューから[vmToolkit]−[Vhd Resizer]をクリックしてVHD Resizerを起動すると、元になるVHDファイルを指定するダイアログが表示される(詳細はTIPS「仮想ハードディスクのサイズを拡大する」参照)。さきほどボリュームを縮小したVHDファイルを指定して[開く]ボタンをクリックすると、VHD Resizerの画面が現れる。

VHD ResizerでVHDのディスク・サイズを縮小する VHD ResizerでVHDのディスク・サイズを縮小する
これは最初のファイル・オープン・ダイアログのあとに表示される画面。VHD Resizerでは、元のVHDファイルを上書きせず、縮小(あるいは拡大)したVHDを新規作成のファイルに保存する。
  (1)元になるVHDファイルのパス。
  (2)元のVHDの形式。容量可変型なら「Dynamic」、容量固定型なら「Fixed」と表示される。
  (3)元のVHDのディスク・サイズ。
  (4)新しいVHDファイルのパス。縮小後のVHDはこのファイルに保存される。
  (5)新しいVHDファイルの形式を、容量可変型(Dynamic)と容量固定型(Fixed)のいずれかから選ぶ。
  (6)新しいVHDのディスク・サイズを指定する。この左下に表示されている「Min:」より大きい値を指定する必要がある。
  (7)これをクリックすると、縮小される新VHDの生成が始まる。

 新たなVHDのファイル名や形式、ディスク・サイズを指定して[resize]ボタンをクリックすると、新VHDファイルの生成が始まる。物理ディスクの性能やVHDファイルのサイズに大きく依存するが、完了までには数十分を要することが多いので、じっくり待つこと。

 新VHDファイルの生成が完了したら、VHD Resizerは閉じる。そして再び[コンピュータの管理]の[ディスクの管理]から新VHDを接続して、ディスク・サイズやボリューム、未使用領域の状況を確認する。ディスク・サイズは、VHD Resizerで指定したサイズに縮小されているはずだ。

VHD Resizerによってディスク・サイズが小さくなったVHD VHD Resizerによってディスク・サイズが小さくなったVHD
VHD Resizerが生成した新しいVHDを[ディスクの管理]でWindows 7に接続したところ。
  (1)この例ではディスク・サイズが233Gbytesから101Gbytesに縮小された。
  (2)未使用領域は、ボリューム縮小直後の133Gbytesから1Gbytesに切り詰められた。

●複数のボリュームを含むVHDを縮小するには?

 複数のボリュームが存在するVHDの場合、ここまで説明した手順では、ディスク末尾に最も近いボリュームの縮小分しかディスクは小さくならない。ディスク先頭に近いボリュームをいくら縮小しても、Windows OSの標準ツールでは各ボリュームの先頭位置は変えられないため、結果としてディスク内に未使用領域(ボリュームのない領域)が散在することになる。

 これを解消する方法としては、まず市販のパーティション管理ツールを利用してボリュームを移動してディスク先頭へ詰める手がある。未使用領域がディスク末尾にまとめられるため、VHD Resizerで圧縮できるだろう(市販ツールなら、これも実行できるかもしれない)。

 もう1つは、OS起動関連(予約ボリュームやWindowsフォルダを含むボリューム)のボリュームだけVHDに残し、残りのボリュームはいったんバックアップしてから削除し、新たに作成した個々のVHDにリストアする、という方法だ。OSの起動に関係なくデータを保存しているだけのボリュームなら、アクセス権や所有権などを含めてフル・バックアップすれば、別のVHDにリストアすることも可能だ。こうすると起動関連のボリュームの後ろからディスク末尾までは未使用領域になるため、前述の手順でディスクを縮小できる。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。