【 Move-VMStorage 】コマンドレット――Hyper-V仮想マシンの「記憶域」を移動する:Windows PowerShell基本Tips(153)
本連載は、PowerShellコマンドレットについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は「Move-VMStorage」コマンドレットを解説します。
本連載では、Windows PowerShellの基本的なコマンドレットについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、「Hyper-V」の仮想マシンの「記憶域」を移動する「Move-VMStorage」コマンドレットです。
Move-VMStorageコマンドレットとは?
これまでも解説してきた通り、Hyper-Vの仮想マシンの実態は、Hyper-Vホスト上にある「設定ファイル」と「仮想ハードディスクファイル」です。これらのファイル群は、当然のことながらHyper-Vホストに接続されたHDD(Hard Disk Drive)やSSD(Solid State Drive)といった物理ディスク上に存在します。
物理ディスクの容量枯渇やより高速な物理ディスク上で仮想マシンを動かしたいといった、さまざまな理由で仮想マシンを構成するファイル群を別のドライブ(ディスク)に移動する場合、GUI(グラフィカルユーザーインタフェース)ツールである「Hyper-Vマネージャー」であれば、仮想マシンを選択して「移動」を実行します。すると仮想マシンの「移動ウィザード」が起動するので、「仮想マシンの記憶域を移動する」を選択することで、仮想マシンの格納先ドライブやフォルダを変更(移動)できます(画面1)。
移動操作はPowerShellでも可能で、今回紹介するMove-VMStorageコマンドレットを使用します。
【注】Move-VMStorageは「Windows PowerShell用Hyper-Vモジュール」に含まれるコマンドレットになります。GUIの「Windowsの機能の有効化」や「役割と機能の追加」からHyper-Vを有効化するか、PowerShellから「Enable-WindowsOptionalFeature」コマンドレットを使用して有効化します。
Move-VMStorageコマンドレットの主なオプション
| オプション | 意味 |
|---|---|
| -Name | 仮想マシン名を指定する |
| -DestinationStoragePath | 移動先のフォルダパスを指定する。他の移動先を指定するオプションを使用する際は省略可能 |
| -VirtualMachinePath | 仮想マシンの構成ファイルの移動先を指定する。省略可能 |
| -SnapshotFilePath | 仮想マシンのチェックポイントフォルダの移動先を指定する。省略可能 |
| -SmartPagingFilePath | 仮想マシンのスマートページングフォルダの移動先を指定する。省略可能 |
| -Vhds | 仮想マシンの仮想ハードディスクの移動先を指定する。省略可能 |
| -ComputerName | リモートのHyper-Vホストの仮想マシンを起動する場合にコンピュータ名を指定。省略可能 |
仮想マシンのファイル群を全て同じフォルダに移動する
移動したい仮想マシンの名前を必須オプションである「-Name」オプションで、移動先のフォルダを「-DestinationStoragePath」で指定し、Move-VMStorageコマンドレットを実行することで、仮想マシンの記憶域を移動できます(画面2)。なお、Move-VMStorageコマンドレットは管理者権限での実行が必要となります。
コマンドレット実行例
Move-VMStorage -Name "Test-VM01" -DestinationStoragePath "E:\Hyper-V\Test-VM01"
なお、仮想マシンの状態には指定がなく、電源オンの状態でも無停止で記憶域の移動が可能です。
仮想マシンの記憶域の移動先フォルダを確認すると、画面3のように「-DestinationStoragePath」オプションで指定したフォルダ配下に自動的に各種フォルダが作成されます。例えば、仮想ハードディスクは「Virtual Hard Disks」フォルダ下に移動しています。これらのサブフォルダは自動的に作成されます。
仮想マシンのファイル群を全て個別のフォルダに移動する
例えば、仮想ハードディスクだけを別のドライブに移動したいなどの個別の要件がある場合には、ファイル群それぞれの移動先フォルダを個別に指定できます。
個別のフォルダを指定したい場合、主なオプションにもある通り「-VirtualMachinePath」オプションや「-SnapshotFilePath」などを使用します。
例えば、「Test-VM01」の記憶域を移動する際、構成ファイルは「E:\VMConfig\Test-VM01」、チェックポイントとスマートページングは「E:\VMFiles\Test-VM01」、仮想ハードディスクは「E:\VHDs\Test-VM01」に移動したいといった場合は、以下のようなコマンドレットを実行します(画面4)。
コマンドレット実行例
Move-VMStorage -Name "Test-VM01" -VirtualMachinePath "E:\VMConfig\Test-VM01" -SnapshotFilePath "E:\VMFiles\Test-VM01" -SmartPagingFilePath "E:\VMFiles\Test-VM01" -VHDs @(@{"SourceFilePath" = "D:\Hyper-V\Test-VM01\Virtual Hard Disks\Win2022_20240526.vhdx"; "DestinationFilePath" = "E:\VHDs\Test-VM01\Win2022_20240526.vhdx"})
「-Vhds」オプションは配列で指定することが必須で、仮想ハードディスクの移動元のフルパスを「SourceFilePath」で、移動先のフルパスを「DestinationFilePath」で指定する必要があります。
画面4の例では仮想ハードディスクは1つでしたが、仮想ハードディスクが2つ接続されている仮想マシンでは個別に移動先を指定する必要があり、以下のコマンドレット実行例のように「-VHDs」オプションで個々の仮想ハードディスクの移動先を配列で指定します(画面5)。
コマンドレット実行例
Move-VMStorage -Name "Test-VM02" -VirtualMachinePath "E:\VMConfig\Test-VM02" -SnapshotFilePath "E:\VMFiles\Test-VM02" -SmartPagingFilePath "E:\VMFiles\Test-VM02" -VHDs @(@{"SourceFilePath" = "D:\Hyper-V\Test-VM02\Virtual Hard Disks\Win2022_20240526.vhdx"; "DestinationFilePath" = "E:\VHDs\Test-VM02\Win2022_20240526.vhdx"},@{"SourceFilePath" = "D:\Hyper-V\Test-VM02\Virtual Hard Disks\Test-VM02_Data01.vhdx"; "DestinationFilePath" = "F:\VHDs\Test-VM02\Test-VM02_Data01.vhdx"})
仮想マシンの仮想ハードディスクだけを移動する
構成ファイルなどはそのままの状態で、仮想ハードディスクだけを移動したい場合もあるでしょう。
その場合は「-VHDs」オプションのみを指定することで、仮想ハードディスクだけを移動できます(画面6)。
コマンドレット実行例
Move-VMStorage -Name "Test-VM02" -VHDs @(@{"SourceFilePath" = "D:\Hyper-V\Test-VM02\Virtual Hard Disks\Win2022_20240526.vhdx"; "DestinationFilePath" = "E:\VHDs\Test-VM02\Win2022_20240526.vhdx"},@{"SourceFilePath" = "D:\Hyper-V\Test-VM02\Virtual Hard Disks\Test-VM02_Data01.vhdx"; "DestinationFilePath" = "F:\VHDs\Test-VM02\Test-VM02_Data01.vhdx"})
筆者紹介
後藤 諭史(ごとう さとし)
株式会社ネットワールド所属。Microsoft MVP for Cloud and Datacenter Management(2012-2026)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.





