コロナ禍になってから、オンラインセミナーに登壇する機会が何度かありました。Hyper-Vの仮想マシン環境でデモをお見せすることが多いのですが、何度かやってみて気になったのは、実行中の仮想マシンに対して「チェックポイント」を適用すると、予想よりも余計に時間がかかることでした。適用時間を半減させる“裏技”を発見したので紹介しましょう。次回からはこの方法でデモを実施します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
最近登壇したオンラインセミナーで、ファイルサーバをゼロからセットアップしていくという内容でデモを行いました。「Windows Server 2019」のHyper-V環境にWindows Server仮想マシンを新規インストールし、サーバの初期設定、Windows Update、役割の追加、ユーザーやグループの作成、共有の作成、サンプルデータの準備、管理アプリのインストールなど、セットアップを進める各段階で実行中の状態を「チェックポイント」として保存しました。デモ中に時間のかかるところは先に進んだ状態のチェックポイントを適用することで、デモ時間の短縮を図りました。
Hyper-Vホストに十分なリソースがあれば、各段階の仮想マシン環境を別々に用意し、同時に動かしておくということもできそうですが、そんなリソースが潤沢な環境は筆者の手元にはありません。
「Hyper-Vマネージャー」を使用して停止中(オフまたは保存完了)のHyper-V仮想マシンに対してチェックポイントを適用する場合、その操作は“瞬時に完了”します。ただし、仮想マシンが自動的にオンになることはなく、オフまたは保存完了状態で復元されます。
実行中の仮想マシンに対してチェックポイントを適用する場合は、チェックポイントを作成した時点の状態で復元されます。つまり、実行中に作成したチェックポイントを適用すると、仮想マシンがオンになり、実行状態になるまで復元されます。
デモではこの方法を利用したのですが、復元が完了するまでに数十秒、長い場合は30秒ほどかかり、スライドで説明している間に別のディスプレイでチェックポイントを操作したり、それができない場合は言葉で時間をつなぐなどしたりして、ちょっと苦労しました。
この反省から、もっと短時間でチェックポイントを適用できないものかと考えたのでした。
「Hyper-Vマネージャー」でチェックポイントを適用する場合、既定では「選択したチェックポイントを適用しますか?」のダイアログボックスが表示されます。現在の状態は破棄して問題ないため、「今後、このメッセージを表示しない」をチェックした上で「キャンセル」をクリックします(画面1)。
しかし、「キャンセル」をクリックしたにもかかわらず、仮想マシンの状態は「保存中」「停止中」「保存完了」「保存完了(チェックポイントの適用中)」「開始中(復元中)」と変化します。何も保存してはいないと思うのですが、「保存中」のプロセスに10秒ほどかかり、その後の「保存完了」の状態が数秒間続き、ようやくチェックポイントが適用され、復元が始まるのです(画面2)。筆者の環境では、チェックポイントの適用に25〜30秒かかりました。このうち、最初の10秒程度は「保存中」にかかる時間です。
このチェックポイント適用時の「保存中」の時間が余計な気がしてなりません。初期のHyper-Vでは「保存中」のプロセスはなかったように記憶していますが、記憶違いかもしれません。少なくとも、「Windows 10」と「Windows Server 2016」以降のHyper-Vではこのような動きをします。
Windows PowerShellのHyper-Vモジュールのコマンドレットを使用した場合はどうでしょう。仮想マシンのチェックポイントの確認と適用は、次のコマンドラインで実行できます。
Get-VMCheckpoint -VMName "仮想マシン名" Restore-VMCheckpoint -Name "チェックポイント名" -VMName "仮想マシン名" -Confirm:$false Restore-VMCheckpoint -Name "Dummy G2VM Windows Server vNext Preview 20270" -VMName $vmname -Confirm:$false
「Restore-VMCheckpoint」コマンドレットは「Hyper-Vマネージャー」からのチェックポイント適用操作と全く同じことをするようで、「Hyper-Vマネージャー」の状態表示の変化や復元完了までの時間は変わりませんでした。ちなみに、PowerShellウィンドウに表示されるインジケーターは、「保存中(0〜100%)」「チェックポイントの適用中(0〜100%)」「復元中(0〜100%)」と変化しました(画面3)。
チェックポイント適用時の「保存中」のプロセスを省略する方法が1つあります。仮想マシンを「停止」して強制的に電源をオフにし、チェックポイントを適用するのです。仮想マシンがオフの状態でチェックポイントを適用した場合は、仮想マシンが自動的にオンになることはないので、仮想マシンに対して「起動」操作を行う手間が1つ増えます。
この一連の操作を「Hyper-Vマネージャー」で行うと、チェックポイントの適用完了を待ってから「起動」操作をすることになるため、時間は短縮できますが少しバタバタします(デモ中を想像してください)。
そこでPowerShellのHyper-Vモジュールのコマンドレットの出番です。以下の3つのコマンドラインを連続実行(各コマンドを「;」でつないで1行で実行可能)すればよいのです。
Stop-VM -Name "仮想マシン名" -TurnOff Restore-VMCheckpoint -Name "チェックポイント名" -VMName "仮想マシン名" -Confirm:$false Start-VM -Name "仮想マシン名"
以下の画面4は、Restore-VMCheckpointコマンドレットだけで行った場合と、前後に「Stop-VM」コマンドレットと「Start-VM」コマンドレットを組み合わせた場合の復元時間(秒)を、「Measure-Command」コマンドレットで計測したものです。3回実行してみましたが、最大30秒かかっていたチェックポイントの適用が、最短14秒で完了しました。これなら、デモ中に“変な間”を感じさせない時間だと思います。
この記事を書いた後、次のオンラインセミナーの予定が決まり、このテクニックを使ったデモを準備しているところです。複数の仮想マシンが関わる場合は、次のコマンドラインで全て強制停止したり、「vmconnect」コマンドや「start https://〜」などを組み合わせて、1つのデモが終わったら、次のデモの場面に一気に切り替えたりすることを考えています(画面5)。
Get-VM | where {$_.State -eq "Running"} | Stop-VM -TurnOff
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2019-2020)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.