如何確保虛擬機器正確關閉?

如何確保虛擬機器正確關閉?

我的家庭伺服器透過虛擬機器中的 VirtualBox 運行其他幾台伺服器。

特別是,我有一個 Web 伺服器,由於某種原因,如果它沒有正確關閉,則不會在 grub 選單上自動選擇,這意味著它會掛起,直到我在伺服器上手動重置它。

如何確保在伺服器關閉時我的虛擬機器也正確關閉?

附加資訊:「伺服器」實際上是一台舊筆記型電腦,它運行 Ubuntu Desktop 11.04 並且不是無頭的(也運行媒體中心)。

答案1

您可以使用該VBoxManage命令從命令列控制虛擬機器。這允許您建立一個可以在關閉虛擬機器之前關閉虛擬機器的腳本。

您可以運行一個非常基本的腳本來關閉虛擬機器和主機...

#!/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...

這些是非常基本的範例,可以根據您的特定要求進行建構。它們可能還需要修改才能與您的作業系統配置正常運作。

答案2

我使用在託管 Windows Server 2003 VM 的 Debian 上執行的 qemu 來完成此操作。我在 Win2k3 VM 上啟用了「緊急管理服務」。這將為您提供串行埠上的“特殊管理控制台”。 qemu 允許您將虛擬串行端口連接到“telnet”端口,因此我給了它一個本地主機地址。 SAC 允許您透過序列埠發出命令來乾淨地關閉系統,並且由於它類似於“緊急後門”,因此無論虛擬機器中可能發生什麼情況,它都非常可靠。

然後,我創建了一個簡短的expect腳本來「登入」基於串行的 SAC 並發出關閉命令。它被包裝在另一個腳本中,該腳本將呼叫該expect腳本並等待 2 分鐘讓 qemu 進程終止。如果進程沒有死亡,那麼它就會強行殺死它。將 Linux 設定為在關閉時呼叫此腳本可確保虛擬機器始終在可能的情況下徹底關閉。

因此,您也許可以根據自己的情況調整此方法。

如果您有 Linux VM,那麼您實際上可以在 Ubuntu 系統上建立一個小腳本,透過 ssh 登入 VM 並呼叫正確關閉系統的腳本。

相關內容