Hyper-Vマネージャでの仮想マシン管理することはあっても、コマンドで運用することはほぼありません。
運用者がマネージャのGUIで操作していることが多いですが、Powershell コマンドを利用して仮想マシンの「起動・停止・スナップショット」操作が行えればとても便利です。
今回は、Powershell コマンドレットによる仮想マシンの電源関連・スナップショットについてまとてみたいと思います。
仮想マシンの電源管理
電源管理は、仮想マシンの電源投入やシャットダウンといった「仮想マシンの起動」関わる項目を見てみます。
仮想マシンには、「起動」「一時停止」「再開」「停止」の4つ。
この中で「一時停止」「再開」とうのが仮想マシンに特有な機能です。
「一時停止」パターンとしては、仮想マシンを稼働させている Hyper-Vホストのリソースが少なくなり、仮想マシン稼働に必要なリソースが確保できない場合に発生します。
「再開」はこの一時停止から仮想マシンを稼働させることです。
単体の仮想マシンの操作
個別の仮想マシンの電源管理を行っていきます。
それぞれのコマンドレットに各仮想マシン名を指定して実行します。
Start-VM -Name 仮想マシン名
停止した仮想マシンを起動するコマンドです。
[仮想マシン名]にはHyper-V上の仮想マシンの表示名を指定します。
Suspend-VM -Name 仮想マシン名
仮想マシンを一時停止状態へ移行するコマンドです。
Hyper-Vホストが強制再起動するとか何か特別なことが無い限り、仮想マシンは一時停止になることはありません。
基本あまり使わないコマンドです。
Resume-VM -Name 仮想マシン名
一時停止状態の仮想マシンを再稼働させるコマンドです。
なにかしらの拍子で仮想マシンが一時停止状態になった場合、コマンドを利用します。
Stop-VM -Name 仮想マシン名
仮想マシン単体をシャットダウンするコマンドです。
複数の仮想マシンの操作
複数の仮想マシンの状態を確認したり、電源管理したりします。
Powershell 実行方法として、仮想マシンの一覧を取得して、パイプ処理していきます。
Get-VM | where {$_.State -eq ‘Running’}
Get-VMコマンドレットですべての仮想マシンを取得。
「稼働中」の状態を抽出します。
Get-VM | where {$_.State -eq 'Off'}
Get-VMコマンドレットですべての仮想マシンを取得。
停止中」の状態を抽出します。
Get-VM | where {$_.State -eq ‘Off’} | Start-VM
Get-VMコマンドレットですべての仮想マシンを取得。
「停止中」の状態を抽出します。停止中の仮想マシンに対して、Start-VMコマンドで一斉にOS起動させます。
Hyper-Vで一斉に仮想マシンを稼働させると、仮想マシン設定に注意が必要です。
仮想マシン設定によっては、複数台の同時起動ができなかったり、ホストのメモリが不足して仮想マシンが起動しなかったりしますので、十分に検証が必要です。
Get-VM | where {$_.State -eq ‘Running’} | Stop-VM
Get-VMコマンドレットですべての仮想マシンを取得し、「稼働中」の状態を抽出します。
稼働中の仮想マシンに対して、Stop-VMコマンドで一斉にシャットダウンさせます。
スナップショットの管理
仮想マシンへのソフトウェアインストールや稼働を確認する際にはスナップショットを取得しておくと便利です。
スナップショットというのは「仮想マシンの静止点」と考えておけば問題ないと思います。
スナップショットを取得しておけば、仮想マシンでソフトウェアインストールして、不具合が発生した場合でもスナップショット取得時点へ戻せます。
チェックポイント作成
Checkpoint-VM -Name 仮想マシン名
基本形です。コマンド実行後にすぐにスナップショットの作成が開始されます。
複数のチェックポイントがある場合、以下で一覧を表示できます。
Get-VMCheckpoint -VMName 仮想マシン名
チェックポイント一覧から、チェックポイントを復元(適用)
Restore-VMCheckpoint -VMName 仮想マシン名
チェックポイントを削除する
Remove-VMSnapshot -VMName 仮想マシン名
まとめ
Hype-Vホストでの仮想マシンの管理およびスナップショットの管理のコマンドレットを列挙してみました。
Hyper-Vホスト上でのPowershellターミナル画面からの確認するのには便利です。
仮想マシンの再起動運用などある場合では、コマンドレットを記載したスクリプト用意し、タスクスケジューラーで運用も行ったりします。
とはいっても、実際の運用上ではコマンドはほとんど利用しません。