2023年6月3日土曜日

AHV環境におけるWindows仮想マシンのシャットダウンについて

AHV環境では、仮想マシンの電源管理に、物理的なPCなどでも利用されているACPIの命令を利用しています。このACPIの命令は、業界標準の規格であるためどのようなOSに対しても統一的に電源制御できるのが特徴です。

しかし、Windows OSについては、ACPI命令に対応しているものの初期設定の場合、条件によっては、ACPIによるシャットダウン命令を受けてくれないことがあります。

そのため、NGTを経由してシャットダウンする方法が提供されていますが、環境によってはNGTを稼動できない状況下があるかと思います。

本日は、ACPIコールによるシャットダンをWindows仮想マシンで行うポイントをご紹介します。

1.一定時間無操作によるディスプレイの電源OFF

サーバーOSであっても一定時間無操作であると、ディスプレイの電源をOFF(信号出力を止める)のがデフォルトでオンになっています。ディスプレイ電源がOFFになった状態で、ACPI経由でシャットダウン命令がコールされると、ディスプレイの電源が表示(画面出力の信号が行われる)だけで、シャットダウンは行われません。さらにもう一度シャットダウンのACPI命令を投げることでシャットダウンが行われます。
UPS連携などでシャットダウンを行う場合、このままでは正常にシャットダウン出来ない可能性があります。従ってディスプレイの電源を切るは、「なし」に設定しておくことが大事です。

▼設定画面からの変更方法

▼コントロールパネルからの設定変更


2.画面ロック時のシャットダウン

ディスプレイの信号停止によるシャットダウンの影響は比較的簡単に対策をすることができます。一方で、画面ロック時のシャットダウンについては、少々厄介です。
これは、Windowsの画面で操作を行い一定時間無操作の場合や、意図的に離席するなどので「Ctrl + Alt + Delete」でロック、もしくは、「Windowsキー + L」で画面を見えないようにして、第三者の不正な操作や機密情報を盗み見るショルダーハックを防止する機能です。
これはこれで、重要な意味を持つのですが、Windows OSのデフォルト設定では、画面ロックが行われている場合、ACPIによるシャットダウン命令を無視する仕様となっています。

▼画面ロックの状態


これは、ロック時は、作業途中という扱いになりシャットダウンが行われないように設計されているWindows OSのデフォルトの動作となります。
しかし、VDI環境や停電時は、安全なシャットダウンが優先されますので、OSの正常シャットダウンを優先すべきなケースがあります。

ロック時におけるシャットダウンの設定について、ご説明していきます。

Windowsには、ロック時でもシャットダウンを強制するオプションがあるのですが、こちらがデフォルトでは非表示になっています。

▼電源ボタンに対する設定が表示されない


そこで、まずは強制シャットダウンのメニューを表示させる必要があります。
該当のWindowsマシンから、以下のコマンドを管理者で実行します。

powercfg -attributes SUB_BUTTONS 833a6b62-dfa4-46d1-82f8-e09e34d029d6 -ATTRIB_HIDE

このコマンドを実行後、「コントロールパネル」→「電源オプション」→現在設定されているプランの「プラン設定の変更」を開きます。

「電源ボタンとカバー」→「強制ボタン/カバーシャットダウンを有効にする」→「設定」を「オン」に変更します。


この設定を行うことで、画面ロック時にもシャットダウンを行うことが出来るようになります。

なお、間違えやすいのですが、電源ボタンとカバーの配下にある「電源ボタンの操作」をシャットダウンにしてもロック状態でのシャットダウンはできません。「強制ボタン/カバー シャットダウンを有効にする」の項目を「オン」にするので、間違えないようにして下さい。


詳細は、こちらもご参考下さい。
Power actions initiated from Prism or API may fail for Windows VMs