私がメインで使っているノート PC に接続しているハードウェアのデバイスドライバが 64 ビットに対応してきたので、
VHD ブートで Windows 7 x64 の確認環境を作って使用頻度の高いアプリ等も合わせて稼働確認をしています。
検証用サーバーの感覚で C ドライブを 40GB で作ったため、あっという間に残り容量も少なくなってきました…。
そこで今回は仮想ハードディスクの拡張と縮小について調べてみました。
■ディスクの管理からの操作
ディスクの管理 (diskmgmt.msc) から [VHD の接続] ができます。
接続した VHD で [ボリュームの拡張] [ボリュームの縮小] を行うことができます。
下が縮小を選んだ時の設定ダイアログになります。
縮小をすることでボリュームを縮小することができるのですが、40GB という最大サイズは変わりません。
縮小は枠の変更ではなく、内部領域の変更になりますのでディスクの最大サイズを変更することはできません。
ボリュームの拡張も同等で、枠の変更ではなく内部領域のサイズ変更となります。
?
■DISKPART コマンドからの操作
DIKSPART コマンドを使うと VHD の操作ができます。
DISKPART で使える VHD 関連のコマンドをざっと調べたところ、以下のものがあるようです。
コマンド | 説明 |
ATTACH VDISK | 仮想ディスク ファイルをアタッチします。 |
COMPACT VDISK | ファイルの物理サイズの削減を試みます。 |
CREATE VDISK | 仮想ディスク ファイルを作成します。 |
DETAIL VDISK | 選択した仮想ディスクのプロパティを表示します。 |
DETACH VDISK | 仮想ディスク ファイルをデタッチします。 |
EXPAND VDISK | 仮想ディスクで使用可能な最大サイズを拡張します。 |
LIST VDISK | 仮想ディスクの一覧を表示します。 |
MERGE VDISK | 子ディスクを親ディスクと結合します。 |
SELECT VDISK | 仮想ディスクにフォーカスを移動します。 |
?
ボリュームの拡張と縮小に関しては、VHD に限らず実行することができます。
DISKPRT で拡張と縮小をする場合には以下のコマンドを使用します。
コマンド | 説明 |
EXTEND | フォーカスされたボリュームまたはパーティションとそのファイル システムをディスクの空き (未割り当て) 領域に拡張します。 |
SHRINK | フォーカスされたボリュームのサイズを指定した容量だけ縮小します。 ボリュームの最後の使用されていない領域から、空きディスク領域を使用可能にします。 |
ディスクの管理から実行しているのは上記の [EXTEND] [SHRINK] になります。
ディスク自体を拡張と縮小をするためには、[EXPAND VDISK] [COMPACT VDISK] を実行します。
まずは VHD の拡張から。
# 拡張と縮小をする場合、VHD は切断した状態にする必要があります。
??? コマンドの実行時に、VHD が読み取り専用で自動的に接続されます。
SELECT VDISK FILE=<VHD ファイルのフルパス> EXPAND VDISK FILE=<VHD の最大サイズ (MB)> 実行例) |
このコマンドを実行した後の VHD の情報が以下になります。
仮想サイズが : 50 GB になっています。
DETAIL VDISK
デバイスの種類 ID: 2 (VHD) |
縮小をする場合は以下のコマンドになります。
SELECT VDISK FILE=<VHD ファイルのフルパス> COMPACT VDISK 実行例) |
縮小は [可変長ディスク] でしか実行することができません。
[固定長ディスク] で実行すると以下のエラーとなってしまいます。
DiskPart にエラーが発生しました: 要求された操作は、この種類の仮想ディスク上では実行できません。 詳細については、システム イベント ログを参照してください。 |
?
この縮小操作ですが、仮想サイズ (VHD の最大サイズ) は変更されません。
物理サイズ (ファイルとして割り当てられている領域) の縮小が実行されるようです。
# 物理サイズが 24 GB → 23 GB になっています。
DETAIL VDISK
デバイスの種類 ID: 2 (VHD) |
調べてみたところ、Virtual Server 2005 で使用されていた事前圧縮ツールのようなものを一度実行してから
[COMPACT VDISK] を実行しないとうまく縮小されないがあるようですね。
縮小はVHD として利用している領域を縮小するため、ファイル内の [0 データ] を圧縮するようため、
未使用の領域を事前圧縮ツールで [0 データ] になるようにする必要があります。
Virutal Server 2005 をダウンロードして [precompact.exe] をコピーしてもよいのですが、ダウンロードもできるみたいですね。
Hyper-V How To: Shrink a VHD File
# [CIPHER /W] でも流用できるかもしれないですね。
■Hyper-V マネージャーからの操作
Hyper-V マネージャーでは [ディスクの編集] 操作があり、ここからディスクの拡張と縮小ができます。?
ディスクの編集からは以下の操作が実行でき、最適化が縮小の処理になります。
拡張後のサイズを指定することで、VHD の最大サイズを変更することが可能です。
縮小の場合は、縮小を選ぶだけですがこちらはサイズ指定はありません。
この操作は DISKPART の COMPACT と一緒なので、VHD の最大サイズが変更されるのではなく、VHD で使用している
領域の縮小処理となります。
縮小に関しては、可変のみ可能のため固定ディスクの場合には選択することができません。
Hyper-V マネージャーからのみ可能な操作は、[変換] になるようですね。
可変→固定 / 固定→可変 の変換については DISKPART では実行できないようです。
?
■SCVMM 2008 R2 からの操作
SCVMM 2008 R2 からは、仮想マシンのプロパティから操作することができます。
操作できる内容は Hyper-V マネージャーと変わらないですね。
?
■VHD Resizer
Microsoft 製以外だと VHD Resizer というツールがあります。
# Twitter で教えていただきました!!ありがとうございます。
このツールではオリジナルのファイルを残した形で VHD の操作をします。
ディスクの変換、サイズ拡張はできるようですが、縮小はできないみたいですね。
現在選択しているディスクは 50 GB のサイズなのですが、[Min] が 50 gb 以下に設定できないようになっています。
拡張と縮小の方法はいろいろありますね。勉強になりました。