SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

仮想ハードディスクの拡張と縮小

leave a comment

私がメインで使っているノート PC に接続しているハードウェアのデバイスドライバが 64 ビットに対応してきたので、
VHD ブートで Windows 7 x64 の確認環境を作って使用頻度の高いアプリ等も合わせて稼働確認をしています。

検証用サーバーの感覚で C ドライブを 40GB で作ったため、あっという間に残り容量も少なくなってきました…。

そこで今回は仮想ハードディスクの拡張と縮小について調べてみました。

■ディスクの管理からの操作

ディスクの管理 (diskmgmt.msc) から [VHD の接続] ができます。

image

接続した VHD で [ボリュームの拡張] [ボリュームの縮小] を行うことができます。
image
下が縮小を選んだ時の設定ダイアログになります。
image

縮小をすることでボリュームを縮小することができるのですが、40GB という最大サイズは変わりません。
縮小は枠の変更ではなく、内部領域の変更になりますのでディスクの最大サイズを変更することはできません。
image

ボリュームの拡張も同等で、枠の変更ではなく内部領域のサイズ変更となります。
image

image

?

■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)>

実行例)
SELECT VDISK FILE=”C:VHDOS.VHD”
EXPAND VDISK FILE=51200

このコマンドを実行した後の VHD の情報が以下になります。
仮想サイズが : 50 GB になっています。

DETAIL VDISK

デバイスの種類 ID: 2 (VHD)
ベンダー ID: {EC984AEC-A0F9-47E9-901F-71415A66345B} (Microsoft Corporation)
状態: 追加済み
仮想サイズ:?? 50 GB
物理サイズ:?? 24 GB
ファイル名: c:vhdos.vhd
子: いいえ
親ファイル名:
関連付けられたディスク番号: 見つかりません。

ディスクの管理からも拡張されていることが確認できます。
image

縮小をする場合は以下のコマンドになります。

SELECT VDISK FILE=<VHD ファイルのフルパス>
COMPACT VDISK

実行例)
SELECT VDISK FILE=”C:VHDOS.VHD”
COMPACT VDISK

縮小は [可変長ディスク] でしか実行することができません。
[固定長ディスク] で実行すると以下のエラーとなってしまいます。

DiskPart にエラーが発生しました: 要求された操作は、この種類の仮想ディスク上では実行できません。
詳細については、システム イベント ログを参照してください。

?

この縮小操作ですが、仮想サイズ (VHD の最大サイズ) は変更されません。
物理サイズ (ファイルとして割り当てられている領域) の縮小が実行されるようです。
# 物理サイズが 24 GB → 23 GB になっています。

DETAIL VDISK

デバイスの種類 ID: 2 (VHD)
ベンダー ID: {EC984AEC-A0F9-47E9-901F-71415A66345B} (Microsoft Corporation)
状態: 追加済み
仮想サイズ:?? 50 GB
物理サイズ:?? 23 GB
ファイル名: c:vhdos.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 マネージャーでは [ディスクの編集] 操作があり、ここからディスクの拡張と縮小ができます。
image?

ディスクの編集からは以下の操作が実行でき、最適化が縮小の処理になります。image

拡張後のサイズを指定することで、VHD の最大サイズを変更することが可能です。
image

縮小の場合は、縮小を選ぶだけですがこちらはサイズ指定はありません。
image

この操作は DISKPART の COMPACT と一緒なので、VHD の最大サイズが変更されるのではなく、VHD で使用している
領域の縮小処理となります。

縮小に関しては、可変のみ可能のため固定ディスクの場合には選択することができません。
image

Hyper-V マネージャーからのみ可能な操作は、[変換] になるようですね。
可変→固定 / 固定→可変 の変換については DISKPART では実行できないようです。
?

■SCVMM 2008 R2 からの操作

SCVMM 2008 R2 からは、仮想マシンのプロパティから操作することができます。
操作できる内容は Hyper-V マネージャーと変わらないですね。
?image

こちらも固定ディスクの場合は、圧縮はできません。
image

■VHD Resizer

Microsoft 製以外だと VHD Resizer というツールがあります。
# Twitter で教えていただきました!!ありがとうございます。

VHD Resizer

image

このツールではオリジナルのファイルを残した形で VHD の操作をします。
ディスクの変換、サイズ拡張はできるようですが、縮小はできないみたいですね。
現在選択しているディスクは 50 GB のサイズなのですが、[Min] が 50 gb 以下に設定できないようになっています。

拡張と縮小の方法はいろいろありますね。勉強になりました。

Share

Written by Masayuki.Ozawa

3月 21st, 2010 at 11:56 am

Posted in Hyper-V

Leave a Reply