Hyper-V VMの起動とシャットダウン設定を調整し、ブート順序を管理する方法
Hyper-V ホスト上の仮想マシンの管理は、必ずしも簡単ではありません。特に、特定の順序でオンラインにしたり、ホストのシャットダウン時に正常に停止したりする必要がある多数の仮想マシンを扱う場合はなおさらです。通常、Hyper-V では各仮想マシンの起動とシャットダウンのアクションを個別に設定できますが、設定がわかりにくかったり、操作が煩雑だったりすることがあります。特に Windows GUI や PowerShell しか使い慣れていない場合はなおさらです。このガイドでは、これらのオプションの設定方法、その重要性、そしてすべてをスムーズに動作させるための実用的なヒントを紹介します。適切な設定をしないと、重要な仮想マシン(ドメインコントローラーやデータベースサーバーなど)が間違った順序で起動したり、突然シャットダウンした場合にデータ損失のリスクが生じたりすることに気付くかもしれません。これは単に利便性の問題ではありません。ホストの再起動時にアプリのエラーや依存関係の破損を回避することも重要です。ここで紹介するヒントでは、起動遅延の指定方法、シャットダウン動作の制御方法、さらにはより複雑な設定のためのカスタム起動シーケンスのスクリプト作成方法を紹介します。その結果、より優れた制御、手間の削減、そして再起動時の予期せぬトラブルの軽減が期待できます。
Hyper-V 仮想マシンの自動起動およびシャットダウンアクションを構成する
VM が勝手に動作している場合 (ランダムに起動するか、まったく起動しない場合)、スタートアップ設定を確認してください。セットアップによっては、Hyper-V に明示的に動作を指示しない限り、再起動後に VM が起動しないことがあります。これらはすべて VM の設定または PowerShell で管理されます。PowerShell は、使い方に慣れればかなり信頼性が高くなります。なぜわざわざ設定をする必要があるのでしょうか。それは、デフォルトは非常に必要最低限の機能しかないためです。VM は、適切なオプションを設定するか、手動でスタートアップする場合にのみ起動します。また、シャットダウン時の動作 (特にホストの再起動中) は非常に重要です。アプリやデータを安全に保ち、宙ぶらりんの状態や破損した状態にならないようにする必要があります。Hyper-V コンソールを実行するときは、VM を右クリックして [設定] に移動します。[自動起動アクション] の下に、3 つの選択肢があります。- [なし] – ホストの再起動時に VM は休止状態のままになり、手間がかかりません。- [実行中だった場合は起動する] – 再起動前の動作を VM に記憶させたい場合に便利です。 – この仮想マシンを常に起動する — 常にオンにしておく必要がある重要なアプリに最適です。ここで少し注意: Windows Admin Center でこれを管理するための巧妙な方法は (まだ) ありません。ほとんどの場合、コンソールまたは PowerShell を介して行います。ああ、起動遅延 (各 VM のシンプルなタイマー) も忘れないでください。これは、特に特定の VM (ドメイン コントローラーなど) を他の VM よりも先に準備する必要がある場合に、負荷と起動順序の管理に役立ちます。また、シャットダウン プロセスには、次の 3 つのオプションがあります。 – VM の状態を保存 (VM のサスペンドなど) — 再起動せずに中断したところから再開する場合に適しています。 – 電源を切る — 強制的にシャットダウンします。高速ですが、データの整合性にとってリスクがあります。 – ゲスト OS をシャットダウンする — 最も簡単な方法です。VM は正常にシャットダウンするため、データが破損することはありませんが、時間がかかります。これを一括で実行しますか? PowerShell を使用すると簡単になります。例: powershell Get-VM –VMName * | Select-Object VMName, AutomaticStartAction, AutomaticStartDelay, AutomaticStopAction このコマンドにより、すべての VM の現在の設定が表示されます。 VM が常に自動的に起動するように設定するには、次のコマンドを実行します。 powershell Get-VM –VMName lon-win10 | Set-VM –AutomaticStartAction Start また、起動遅延 (ドメイン コントローラーなどの VM の場合は 90 秒など) を追加するには、次のコマンドを実行します。 powershell Get-VM –VMName * | Where-Object {$_. VMName -notlike “lon-dc*”} | Set-VM –AutomaticStartDelay 90 シャットダウン動作を微調整する場合: powershell Set-VM –VMName lon-DB –AutomaticStopAction Save # または TurnOff、ShutDown セットアップによっては、これらのコマンドの動作が少し不均一になります。つまり、1 台のマシンでは直ちに機能しますが、他のマシンでは VM コンソールを再起動したり、ホストを再起動したりする必要がある場合があります。
VMのブート(起動)順序を管理する
Hyper-V には組み込みのブート順序がないため、一般的なアプローチは起動遅延を調整するか、カスタム スクリプトを作成することです。多数の依存 VM (DNS、AD、SQL など) がある場合は、正しい順序で起動するように異なる遅延を設定すると便利です。基本的なセットアップでは、異なる AutomaticStartDelay 値を設定するとうまくいきます。例: powershell Get-VM –VMName lon-dc01 | Set-VM –AutomaticStartDelay 0 Get-VM –VMName lon-exch1, lon-db01 | Set-VM –AutomaticStartDelay 90 Get-VM –VMName lon-rds01, lon-app01 | Set-VM –AutomaticStartDelay 180 ただし、VM が完全に動作可能になるまで待ってから次の VM を起動するなど、よりきめ細かい制御が必要な場合は、次のようなことを実行する PowerShell 起動スクリプトを作成する必要があります。 – 特定の VM を起動します。 – チェックを実行します (SQL ポート 1433 が開いているかどうか、特定のサービスが稼働しているかどうかのテストなど)。 – これらのチェックに合格した場合にのみ続行します。このようなスクリプトの簡単な例を次に示します。 powershell $VMs = @( @{Name=’lon-dc01′; Delay=0; Checks=@{‘TCPPort’=445}}, @{Name=’lon-exch1’; Delay=90; Checks=@{‘TCPPort’=25}}, @{Name=’lon-db01’; Delay=180; Checks=@{‘TCPPort’=1433}} ) foreach ($vm in $VMs) { Start-VM -Name $vm. Name Start-Sleep -Seconds $vm. Delay # VM が起動してポートが開くまで待機します do { Start-Sleep -Seconds 30 $check = Test-NetConnection -ComputerName $vm. Name -Port $vm. Checks[‘TCPPort’] -WarningAction SilentlyContinue } while (!$check. TcpTestSucceeded) } 起動時にこのようなスクリプトを実行することで、次のVMを起動する前に重要なサービスが動作していることを柔軟に確認できるようになります。ただし、起動時にこのようなスクリプトを実行する場合、PowerShell実行ポリシーの調整やスクリプトへの署名が必要になる場合があることに注意してください。—
Hyper-Vの起動とシャットダウンのオプション管理はそれほど難しいものではありませんが、自動化がなければ少々面倒です。重要なのは、それぞれの設定が何をするのかを理解し、環境に合わせてカスタマイズすることです。遅延設定、スクリプト、シャットダウンアクションなど、ちょっとした調整で安定性と信頼性を高めることができます。
まとめ
- VM 設定または PowerShell を使用して起動動作を構成し、何もしない、実行中の場合は起動、常に起動のオプションから選択します。
- 特に複雑な環境では、起動遅延を使用して起動順序を制御し、負荷を軽減します。
- データの破損を防ぐために自動停止アクションを設定します。オプションには、[保存]、[電源オフ]、[シャットダウン] などがあります。
- より詳細な制御を行うには、次の VM を起動する前に依存関係が確実に確立されるように、起動シーケンスのスクリプトを作成することを検討してください。
まとめ
Hyper-V VM の起動とシャットダウンを正常に行うには少し手間がかかりますが、その見返りとして、より予測可能で安定した環境が手に入ります。PowerShell はまさにそんな時に頼りになります。一度設定してしまえば、きっと感謝することでしょう。ただし、Hyper-V は必要以上に複雑な設定をするため、まずは非本番環境で全てをテストすることを忘れないでください。この方法が、次回の再起動時に混乱を避けるのに役立つことを願っています。