本連載は、PowerShellコマンドレットについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は「Move-VM」コマンドレットを解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載では、Windows PowerShellの基本的なコマンドレットについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、「Hyper-V」の仮想マシンを現在稼働しているHyper-Vホストから新しいHyper-Vホストへ移動する「Move-VM」コマンドレットです。
Hyper-Vホスト上では複数の仮想マシンを稼働できますが、Hyper-Vホストに対する長期間のメンテナンスやHyper-Vホストの老朽化による廃止などの理由で、現在稼働している仮想マシンを他のHyper-Vホストに移動したいという話は運用上よくあるかと思います。
高可用性機能である「フェールオーバークラスタリング」を構成しているHyper-Vホスト間であれば、異なるホストへ仮想マシンを移動する「ライブマイグレーション」や「クイックマイグレーション」を使用できますが、単体のHyper-Vホスト間ではフェールオーバークラスタリングの機能を利用できません。
ただし、仮想マシンの各種ファイルとともに別のHyper-Vホストに移動する場合には、フェールオーバークラスタリングを使用できない単体のHyper-Vホスト間でも移動できます。
この移動操作をGUI(グラフィカルユーザーインタフェース)ツールである「Hyper-Vマネージャー」で行う場合、仮想マシンを選択して「移動」を実行します。仮想マシンの「移動ウィザード」が起動し、「仮想マシンを移動する」を選択することで仮想マシンを別のHyper-Vホストへ「記憶域」とともに移動できます(画面1)。
Hyper-Vホスト間の移動操作は、当然のことながらPowerShellでも可能で、今回紹介するMove-VMコマンドレットを使用します。
記憶域の移動を伴うHyper-Vホストの移動は、仮想マシンの電源が入っている状態でも実施可能で、仮想マシンの無停止移動(ストレージライブマイグレーション)も可能です。
しかし、Hyper-Vホストをまたぐストレージライブマイグレーションを行う場合は、権限設定が必要になる場合があります。その設定については別連載「今だからこそ学び直すHyper-V再入門」の第14回「いまさら聞けないHyper-Vの高可用性機能(1):フェールオーバークラスタリングとライブマイグレーション」で説明していますので、ご確認ください。
【注】Move-VMは「Windows PowerShell用Hyper-Vモジュール」に含まれるコマンドレットになります。GUIの「Windowsの機能の有効化」や「役割と機能の追加」からHyper-Vを有効化するか、PowerShellから「Enable-WindowsOptionalFeature」コマンドレットを使用して有効化します。
| オプション | 意味 |
|---|---|
| -Name | 仮想マシン名を指定する |
| -DestinationHost | 移動先となるリモートのHyper-Vホストのコンピュータ名を指定する |
| -IncludeStorage | 移動先でも同じファイルパスを使用する際に指定する。省略可能 |
| -DestinationStoragePath | 移動先のフォルダパスを指定する。省略可能 |
| -VirtualMachinePath | 仮想マシンの構成ファイルの移動先を指定する。省略可能 |
| -SnapshotFilePath | 仮想マシンのチェックポイントフォルダの移動先を指定する。省略可能 |
| -SmartPagingFilePath | 仮想マシンのスマートページングフォルダの移動先を指定する。省略可能 |
| -Vhds | 仮想マシンの仮想ハードディスクの移動先を指定する。省略可能 |
| -ComputerName | リモートのHyper-Vホストの仮想マシンを移動する場合にコンピュータ名を指定する。省略可能 |
仮想マシンを記憶域とともに別のHyper-Vホストに移動する場合は、「-IncludeStorage」オプション、もしくは「-DestinationStoragePath」オプションを使用して、移行先の記憶域のパスを指定します。
移動先のHyper-Vホストが同じストレージ構成の場合、「-IncludeStorage」オプションを指定することで移動元と同じフォルダパスで移動できます(画面2)。
Move-VM -Name "Test-VM01" -DestinationHost "host39" -IncludeStorage
Move-VMコマンドレット実行前後の「Get-VM」コマンドレットなどの実行結果からも、「host39」上の同じフォルダパスへ仮想マシンが記憶域とともに移動していることが確認できます。
移動先のドライブ構成が異なる場合や、移動先では別のフォルダパスを使用したい場合には「-DestinationStoragePath」オプションを使用して、移動先のフォルダパスを指定します(画面3)。「-DestinationStoragePath」オプションを使用した場合には、全ての仮想マシンを構成するファイルが指定したフォルダパスの配下に配置されます。
Move-VM -Name "Test-VM01" -DestinationHost "host39" -DestinationStoragePath "D:\Test-VM01"
画面3からも移動先のHyper-Vホストでは、移動元と異なるフォルダパスで移行していることが分かります。
仮想ハードディスクだけを別のドライブに移動したいといった個別の要件がある場合には、それぞれの移動先フォルダを個別に指定して、仮想マシンを移動できます。
個別のフォルダを指定したい場合、主なオプションにもある通り「-VirtualMachinePath」オプションや「-SnapshotFilePath」「-Vhds」などを使用します。
例えば、「Test-VM01」の記憶域を移動する際、構成ファイルは「D:\VMConfig\Test-VM01」、チェックポイントとスマートページングは「D:\VMFiles\Test-VM01」、仮想ハードディスクは「D:\VHDs\Test-VM01」に移動したいといった場合は、以下のようなコマンドレット実行例になります(画面4)。
Move-VM -Name "Test-VM01" -DestinationHost "host39" -VirtualMachinePath "D:\VMConfig\Test-VM01" -SnapshotFilePath "D:\VMFiles\Test-VM01" -SmartPagingFilePath "D:\VMFiles\Test-VM01" -Vhds @(@{"SourceFilePath" = "D:\Hyper-V\Test-VM01\Virtual Hard Disks\Win2022_20240526.vhdx"; "DestinationFilePath" = "D:\VHDs\Test-VM01\Win2022_20240526.vhdx"})
「-Vhds」オプションは配列で指定することが必須で、仮想ハードディスクの移動元のフルパスを「SourceFilePath」、移動先のフルパスを「DestinationFilePath」で指定する必要があります。
画面4では仮想ハードディスクは1つでしたが、仮想ハードディスクが2つ接続されている仮想マシンでは個別に移動先を指定する必要があり、「-VHDs」オプションで個々の仮想ハードディスクの移動先を配列で指定します(画面5)。
Move-VM -Name "Test-VM02" -DestinationHost "host39" -VirtualMachinePath "D:\Test-VM02\Config" -SnapshotFilePath "D:\Test-VM02\SnapShot" -SmartPagingFilePath "D:\Test-VM02\SmartFile" -Vhds @(@{"SourceFilePath" = "D:\Hyper-V\Test-VM02\Virtual Hard Disks\Win2022_20240526.vhdx"; "DestinationFilePath" = "D:\Test-VM02\VHDs\Win2022_20240526.vhdx"} , @{"SourceFilePath" = "D:\Hyper-V\Test-VM02\Virtual Hard Disks\Test-VM02_Data01.vhdx"; "DestinationFilePath" = "E:\VHDs\Test-VM02\Test-VM02_Data01.vhdx"})
仮想マシンの各ファイルをSMB(Server Message Block)共有上に置いている場合のみ、仮想マシンの記憶域を移動せずに、仮想マシンを稼働させるHyper-Vホストだけを移動できます(画面6)。
Move-VM -Name "SMB-VM01" -DestinationHost "host39"
画面6を見ると、仮想マシンのファイル格納先は変更されていないものの、稼働するHyper-Vホストは「host39」に変更されていることが分かります。仮想マシンの電源がオンの状態でも仮想マシンの稼働Hyper-Vホストを変更でき、いわゆるフェールオーバークラスタリング上で稼働している仮想マシンのように無停止で移動できます。
ただし、Move-VMコマンドレットによる稼働Hyper-Vホストのライブマイグレーションは、前述の通り、「SMB共有上に仮想マシンのファイル群が格納されている場合のみ」実行可能です。iSCSIなどの共有ディスク上にある場合は、フェールオーバークラスタリングを構成する必要があり、Hyper-Vホストのローカルディスクを使用している場合には、記憶域の移行を伴うライブマイグレーションを行う必要があります。
株式会社ネットワールド所属。Microsoft MVP for Cloud and Datacenter Management(2012-2026)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.
編集部からのお知らせ