VM が適切にシャットダウンしていることを確認するにはどうすればよいですか?

VM が適切にシャットダウンしていることを確認するにはどうすればよいですか?

私のホームサーバーは、VM 内の VirtualBox を介して他のサーバーをいくつか実行しています。

特に、何らかの理由で、適切にシャットダウンしないと、GRUB メニューで自動選択されない Web サーバーがあり、サーバー上で手動でリセットするまでハングします。

サーバーがシャットダウンするたびに VM が適切にシャットダウンすることを確認するにはどうすればよいですか?

追加情報: 「サーバー」は実際には古いラップトップであり、Ubuntu Desktop 11.04 を実行しており、ヘッドレスではありません (メディア センターも実行しています)。

答え1

コマンドを使用して、VBoxManageコマンド ラインから仮想マシンを制御できます。これにより、電源を切る前に仮想マシンをシャットダウンできるスクリプトを作成できます。

非常に基本的なスクリプトを実行して、VM とホストをシャットダウンすることができます...

#!/bin/bash
# poff.sh - poweroff the vm, then the host...

VBoxManage controlvm VMNAME acpipowerbutton && sudo shutdown -P 1

または、.bashrc ファイルに追加されたエイリアスと同じコマンドを使用することもできます...

alias poff='VBoxManage controlvm VMNAME acpipowerbutton && sudo shutdown -P 1' # poweroff the vm, then the host...

これらは、お客様の要件に合わせて構築できる非常に基本的な例です。また、OS 構成で正しく動作するように変更する必要がある場合もあります。

答え2

私は、Windows Server 2003 VM をホストする Debian 上で実行されている qemu を使用してこれを行いました。Win2k3 VM で「緊急管理サービス」を有効にしました。これにより、シリアル ポートに「特別な管理コンソール」が提供されます。qemu では、仮想シリアル ポートを「telnet」ポートに接続できるため、これに localhost アドレスを指定しました。SAC を使用すると、シリアル ポート経由でコマンドを発行してシステムをクリーンにシャットダウンできます。これは「緊急バック ドア」のようなもので、VM で他に何が起こっているかに関係なく、非常に信頼性が高い傾向があります。

次に、expectシリアルベースの SAC に「ログイン」してシャットダウン コマンドを発行する簡単なスクリプトを作成しました。これは、このexpectスクリプトを呼び出して qemu プロセスが終了するまで 2 分間待機する別のスクリプトにラップされました。プロセスが終了しない場合は、強制的に終了します。シャットダウン時にこのスクリプトを呼び出すように Linux を設定すると、可能であれば VM が常に正常にシャットダウンされるようになりました。

したがって、この方法を自分の状況に合わせて調整できる可能性があります。

Linux VM をお持ちの場合は、Ubuntu システム上に、ssh 経由で VM にログインし、システムを適切にシャットダウンするスクリプトを呼び出す小さなスクリプトを作成するだけで済みます。

関連情報