如何使用命令行安全关闭 VirtualBox 中的客户操作系统

如何使用命令行安全关闭 VirtualBox 中的客户操作系统

我有 Ubuntu 10.10 并使用 VirtualBox 3.2。作为客户操作系统,我在 VirtualBox 中还有另一个 Ubuntu。

一旦我的主机 Ubuntu 启动,我将使用以下命令自动启动客户机 Ubuntu:

VBoxHeadless -startvm Ubuntu --vrdp on

然后我可以使用 ssh 或 tsclient 访问它。

现在我需要在关闭主机 Ubuntu 后自动关闭客户机 Ubuntu。有人知道使用命令行自动关闭客户机 Ubuntu 的安全方法吗?我发现了两种关闭客户机操作系统的方法,但我不确定它们是否安全。它们如下:

VBoxManage controlvm Ubuntu acpipowerbutton

或者

VBoxManage controlvm Ubuntu poweroff

答案1

如果您打开 Gnome 电源管理偏好设置,您可以设置按下电源按钮时要采取的操作。如果您将其设置为关机,则当您使用命令按下虚拟电源按钮时,它将正常关机VBoxManage controlvm Ubuntu acpipowerbutton

答案2

不要这样做:

VBoxManage controlvm Ubuntu poweroff

这相当于拔掉了真实计算机的电源插头。你不会想这么做的!

使用 ACPI 关机方法(按照 Egil 建议的检查电源管理设置)或者尝试保存状态方法(savestate)。

答案3

如果您在服务器关闭虚拟机时也关闭虚拟机,则必须等待虚拟机

(在此 shellscript 中,“root”是调用者,“theuser”是“thevm”的所有者)

当命令输出VBoxManage list runningvms返回空字符串时,我知道虚拟机已完成。

我在我的 shell 脚本中使用它

...
stop(){
    su -c "VBoxManage controlvm thevm acpipowerbutton" -s /bin/bash theuser
    while [ "`su -c 'VBoxManage list runningvms' -s /bin/bash theuser`" != "" ]
    do
        echo waiting for VMs to shutdown
        sleep 3
    done
}
...

答案4

使用 savestate 选项关闭虚拟机时的一个问题是,如果您必须将该虚拟机移至另一台计算机。如果新计算机使用不同的处理器,并且硬件可能存在其他差异,则可能会遇到问题。当虚拟机从保存的状态重新启动时,它需要恢复其环境,如果处理器不同,则不会发生这种情况。已正确关闭的虚拟机在重新启动时会查看当前硬件,并且通常会引入其所需的部分或全部新驱动程序。

相关内容