【 Resize-VHD 】コマンドレット――仮想ディスクのサイズ(容量)を変更するWindows PowerShell基本Tips(112)

本連載は、PowerShellコマンドレットについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は「Resize-VHD」コマンドレットを解説します。

» 2024年08月22日 05時00分 公開
[後藤諭史@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Windows PowerShell基本Tips」のインデックス

連載目次

 本連載では、Windows PowerShellの基本的なコマンドレットについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、仮想ディスクのサイズ(容量)を変更する「Resize-VHD」コマンドレットです。

Resize-VHDコマンドレットとは?

 仮想ディスクは本連載第108回で紹介した「New-VHD」コマンドレットで作成しますが、仮想ディスクのサイズ(容量)は「-SizeBytes」オプションで指定します。当然のことながら、作成時に指定されたサイズ以上の書き込みはできず、大量の書き込みを続けていれば、いずれ物理ディスクと同様に容量の限界を迎えます。

 物理ディスクであれば新しいディスクを購入して接続し、基本的には別ドライブとして使用するしかありません。しかし、仮想ディスクはResize-VHDコマンドレットを使用することで、仮想ディスクの容量そのものを拡張できます。

 なお、Resize-VHDコマンドレットは接頭辞の通り、仮想ディスクの「容量変更(リサイズ)」を実施するコマンドレットであり、拡張だけではなく、縮小も可能です。具体的な実行例は後ほど紹介しますが、拡張も縮小も同じオプションを使用します。

 つまり、現在のサイズよりもコマンドレット実行時の指定サイズが大きければ拡張、小さければ縮小という挙動になるため、実行時のサイズ指定には注意してください。また、縮小に関しては制約事項もあるので、その点については具体的な使用例で詳細を解説します。

【注】Resize-VHDは「Windows PowerShell用Hyper-Vモジュール」に含まれるコマンドレットです。GUIの「Windowsの機能の有効化」や「役割と機能の追加」から「Hyper-V」を有効にするか、Windows PowerShellで「Enable-WindowsOptionalFeature」コマンドレットを実行して有効にすることで使用できます。


Resize-VHDコマンドレットの書式

Resize-VHD [オプション]


Resize-VHDコマンドレットの主なオプション

オプション 意味
-Path 容量を変更したい仮想ディスクのパスを指定する
-SizeBytes 容量変更後の仮想ディスクサイズを指定する
-ToMinimumSize 縮小可能な限界値にサイズ変更する際に指定する。省略可能

仮想ディスクの容量を拡張する

 仮想ディスクの容量を拡張する場合は、対象の仮想ディスクを「-Path」オプションで指定し、「-SizeBytes」オプションで設定したい容量を「B(バイト)」単位で指定してResize-VHDコマンドレットを実行します。サイズが大きい場合は「MB(メガバイト)」「GB(ギガバイト)」「TB(テラバイト)」などに単位を変更して指定することも可能です(画面1)。なお、Resize-VHDコマンドレットは管理者権限で実行する必要があります。

コマンドレット実行例

Resize-VHD -Path D:\VHDFolder\DataDisk_02.vhdx -SizeBytes 20GB

ALT 画面1 Resize-VHDコマンドレットで容量が10GBの仮想ディスクを20GBへ拡張した

 上記実行例では、Resize-VHDコマンドレット実行前後にGet-VHD」コマンドレット(本連載第107回で紹介)で仮想ディスクの容量を確認しています。Resize-VHDコマンドレット実行後、サイズが「21474836480」バイト(20GB)に変更されていることが分かります。

 仮想ディスクの容量が増えた後、仮想ディスク上のボリュームがどのように変化しているかというと、画面2のように既存のボリュームの後ろに空き領域として拡張した容量が追加されます。

ALT 画面2 仮想ディスクをマウントして確認してみると、拡張した容量が空き領域として追加されていることが分かる

 追加された領域を使うには、仮想ディスク上のボリュームを拡張するか、もしくは新規ボリュームとして設定する必要があります。ボリューム(パーティション)の操作に関しては、過去の本連載記事を参照してください。


仮想ディスクの容量を縮小する

 前述の例では、10GBの仮想ディスクを20GBへ拡張しました。20GBに拡張した仮想ディスクを15GBに縮小する場合も、同じように「-SizeBytes」オプションで縮小後のサイズをバイト単位で指定します(画面3)。

コマンドレット実行例

Resize-VHD -Path D:\VHDFolder\DataDisk_02.vhdx -SizeBytes 15GB

ALT 画面3 容量が20GBの仮想ディスクを15GBへ縮小した

 Resize-VHDコマンドレット実行後、サイズが「16106127360」バイト(15GB)に変更されていることが分かります。

 同じように、別の20GBの仮想ディスクを15GBへサイズを縮小しようとしたところ、エラーが発生して縮小できませんでした(画面4)。

ALT 画面4 別の仮想ディスクで縮小作業を実施したところ、エラーが発生して縮小できなかった

 この差は何かというと「仮想ディスクを縮小するための空き領域が確保されているかどうか」という点になります。

 具体的には、画面2のようにディスクの後方に仮想ディスクを縮小するサイズに相当する未使用領域が存在する場合は仮想ディスクの縮小が成功します。しかし、この未使用領域が存在しない場合はエラーが発生してしまいます。この点が縮小時における制約事項の一つになります。

 縮小可能なサイズの確認方法ですが、仮想ディスクをマウントしてパーティション情報を確認する他、「Get-VHD」コマンドレットの「MinimumSize」の値を確認することでも分かります(画面5)。

ALT 画面5 Get-VHDコマンドレットで縮小可能サイズかどうか確認できる

 縮小できた仮想ディスクの「MinimumSize」は「10735337984」であるのに対し、エラーが発生した仮想ディスクではSize(現在の仮想ディスクのサイズ)とほぼ同じ「21472756224」となっています。

 「MinimumSize」は「仮想ディスクの最小サイズ」を示した値なので、前者の仮想ディスクは差し引き「10739498496」(10GB)の縮小の余地がある(=未使用領域が存在する)ため5GBの縮小が実施できたのに対し、後者のディスクは縮小の余地がないためエラーが発生した、ということになります。

 従って、後者の仮想ディスクのサイズを縮小する場合には、仮想ディスク上のボリューム(パーティション)を変更し、未使用領域を作り出す必要があります。


VHD形式の仮想ディスクに対するサイズ変更操作

 前項までは「VHDX形式」の仮想ディスクに対してのサイズ変更操作となります。仮想ディスクのもう1つのフォーマットである「VHD形式」の仮想ディスクに対してはどうでしょう。

 実際にVHD形式の仮想ディスクに対してResize-VHDコマンドレットを実行すると、縮小時に「VHDX形式の仮想ディスクでのみサポート」というエラーが発生して縮小操作が完了しません(画面6)。

ALT 画面6 VHD形式の仮想ディスクに対しては縮小作業が実行できない

 こちらの挙動は“仕様”となるため、VHD形式の仮想ディスクに対しては「拡張操作のみ実行可能」である点に注意してください。

筆者紹介

後藤 諭史(ごとう さとし)

Microsoft MVP for Cloud and Datacenter Management(2012-2025)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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