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

Bak*_*yor 84 virtualbox shutdown

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

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

VBoxHeadless -startvm Ubuntu --vrdp on
Run Code Online (Sandbox Code Playgroud)

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

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

VBoxManage controlvm Ubuntu acpipowerbutton
Run Code Online (Sandbox Code Playgroud)

或者

VBoxManage controlvm Ubuntu poweroff
Run Code Online (Sandbox Code Playgroud)

Egi*_*gil 68

如果您打开 Gnome 电源管理首选项,您可以设置电源按钮时要执行的操作。如果您将其设置为关闭,则当您使用VBoxManage controlvm Ubuntu acpipowerbutton 命令按下虚拟电源按钮时,它将正常关闭。

  • 正如[关于超级用户的答案](https://superuser.com/a/316805/162197) 所涵盖的那样,有一种稍微替代的方法:`VBoxManage controlvm <vm> savestate`。该命令将保存 VM 状态,然后将其停止(与关闭相反)。由于这是这个非常受欢迎的问题中最受好评的答案,我建议将其添加到此答案中。 (2认同)

小智 18

要安全关闭虚拟机,请使用以下命令:

vboxmanage controlvm Ubuntu poweroff soft
Run Code Online (Sandbox Code Playgroud)

  • 你能提供你的来源吗?我似乎无法在 VBox 文档的第 8 章中找到有关此“软”选项的任何内容。 (11认同)
  • 自 2013 年以来杀死毫无戒心的虚拟机。也许删除这个答案?任何人? (11认同)
  • `poweroff` ==“拔掉插头”。`soft` 部分没有效果:) (4认同)

hto*_*que 12

不要这样做:

VBoxManage controlvm Ubuntu poweroff
Run Code Online (Sandbox Code Playgroud)

相当于在真电脑上拔掉电源插头。你不想这样做!

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

  • 我理解,但在最常见的情况下,在阅读命令后,人们会推断这是解决方案(无需进一步阅读) (2认同)

小智 11

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

(在这个 shellscript 中,'root' 是调用者,'theuser' 是 'thevm' 的所有者)

当命令的输出VBoxManage list runningvms返回一个空字符串时,我知道 vms 已经完成。

我在我的 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
}
...
Run Code Online (Sandbox Code Playgroud)


Tak*_*kat 7

您应该像关闭真实硬件一样关闭虚拟 Ubuntu。从 ssh 会话远程问题的命令行:

sudo poweroff
Run Code Online (Sandbox Code Playgroud)

如果要保存机器状态(类似于挂起/休眠),请使用@htorque's answer 中的第二点。