如何删除处于GURU_MEDITATION错误状态的虚拟机?

73

如何删除处于GURU_MEDITATION错误状态的VirtualBox虚拟机?是否仅需在未运行VirtualBox时删除该目录即可?

编辑:发布后,我删除了“在文件管理器中显示”的整个目录。

它看起来像这样:

Virtualbox Guru Meditation截图

请注意,没有关机选项,甚至删除选项也是灰色的。我相信这与删除目录之前的情况完全相同。

编辑2:我在删除文件后尝试了命令行poweroff。它卡住了:

vboxmanage controlvm wmf-vagrant_1354733432 poweroff 0%...10%...20%...

编辑3:它也无法从命令行注销:

VBoxManage unregistervm wmf-vagrant_1354733432 --delete VBoxManage: error: 在锁定虚拟机时无法注销虚拟机'wmf-vagrant_1354733432'。VBoxManage:error:详细信息:代码VBOX_E_INVALID_OBJECT_STATE(0x80bb0007),组件Machine,接口IMachine,调用者nsISupports上下文:“Unregister(fDelete?(CleanupMode_T)CleanupMode_DetachAllReturnHardDisksOnly:(CleanupMode_T)CleanupMode_DetachAllReturnNone,ComSafeArrayAsOutParam(aMedia))”,位于文件VBoxManageMisc.cpp的第160行


如果您想要移动它,请指定超级用户。 - Matthew Flaschen
1
然而,我认为这与编程有关,因为我将其与 Vagrant 一起使用,而 Vagrant 是专门为开发人员设计的工具。 - Matthew Flaschen
1
好的,看来我非常错误了。你有命令行访问权限吗?你可以尝试 VBoxManage controlvm <vm> poweroff 吗?VBoxManage list vms 可以给你现有虚拟机列表。 - Edu
请重新打开。如果您想迁移,请迁移到Superuser。 - Matthew Flaschen
10
在Mac系统上,通过终止VBoxHeadless进程,我成功运行了vagrant destroy命令并退出了锁定状态。我使用了ps aux | grep -i virtualbox命令来查找该进程。 - Stephen Emslie
12个回答

146

结束VBoxHeadless进程并运行"vagrant destroy"命令

销毁vagrant并使用"killall"命令发送kill信号的方式如下:

killall -9 VBoxHeadless && vagrant destroy


1
使用API或VBoxManage通常会出现锁定异常等问题。这是我发现的唯一100%可靠的终止VBox VM的方法(不幸的是)。 - steve cook
4
如果您正在运行多台计算机,您只需要结束与您希望销毁的计算机相关联的一个进程即可。 - Andrew Miner
10
在苹果电脑(OS X)上终止VirtualBox的操作:输入命令 ps aux | grep -i virtualbox ,然后输入命令 kill -9 <PID> ,接着运行命令 vagrant destroy - andilabs
2
在OSX上,killall -9 VBoxHeadless然后vagrant destroy对我很有效。 - electblake
正如@electblake所指出的那样,killall对我也很有效! - roosevelt
显示剩余2条评论

17

如果您无法通过VirtualBox图形用户界面关闭计算机,则可以尝试使用命令行使用vboxmanage命令(在OS X上为VBoxManage),例如:

如果您无法通过VirtualBox图形用户界面关闭计算机,则可以尝试使用命令行使用vboxmanage命令(在OS X上为VBoxManage),例如:

vboxmanage controlvm NAMEOFVM poweroff

用来替换vboxmanage list vms命令中的名称,将其替换为NAMEOFVM

然后注销并删除虚拟机:

vboxmanage unregistervm NAMEOFVM --delete

或手动删除:

rm -fr ~/"VirtualBox VMs/NAMEOFVM"

2
在Linux上,您还可以使用vboxmanage(小写),因此我使用:vboxmanage unregistervm --delete <vm-name>(稍微修饰了一下) - azbarcea

10

我遇到了这个问题。所有我读到的东西都建议你应该始终通过Virtual Box管理虚拟机,而不是直接访问文件。但当我有一个无效的虚拟机时,unregistervm命令拒绝删除它,而vagrant destroy也无法生效。最终以下过程有效:

  1. 结束所有正在运行的VBox*进程
  2. 从"VirtualBox VMs"文件夹中删除"boxname"文件夹
  3. 编辑"VirtualBox.xml"文件并删除对应于无效虚拟机的标签。

然后我运行了以下命令,以验证该虚拟机已经被删除。

VBoxManage list vms

之后,我能够使用相同的名称创建一个新的虚拟机。


5

我有一个虚拟机处于类似的状态

$ vagrant up

Bringing machine 'tempu' up with 'virtualbox' provider...
==> mms: Checking if box 'hashicorp/precise64' is up to date...
==> mms: Resuming suspended VM...
==> mms: Booting VM...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "9fcf2203-d4b3-47a1-a307-61bfa580bd28", "--type", "headless"]

Stderr: VBoxManage: error: The machine 'temp-ubuntu' is already locked by a session (or being locked or unlocked)
VBoxManage: error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component Machine, interface IMachine, callee nsISupports
VBoxManage: error: Context: "LaunchVMProcess(a->session, sessionType.raw(), env.raw(), progress.asOutParam())" at line 592 of file VBoxManageMisc.cpp

我查找了名为VBoxHeadless的进程,但它没有运行。

然后我运行了ps命令,并找到了具有相同虚拟机ID的进程:

$ ps aux | grep -i virtualbox
user      63466   0.0  0.1  2523608   8396   ??  S     9:36am   0:02.67 /Applications/VirtualBox.app/Contents/MacOS/VBoxManage showvminfo 9fcf2203-d4b3-47a1-a307-61bfa580bd28 --machinereadable

杀掉该进程解决了问题,在运行vagrant up后,虚拟机可以正确启动。

3
这是我在情急之下使用的脚本。它会尽可能地从计算机中清除任何虚拟机的痕迹:
VBoxManage list runningvms | awk '{print $2}'  | xargs --no-run-if-empty -t -n1 -IXXX VBoxManage controlvm XXX poweroff                                                           
VBoxManage list vms | awk '{print $2}'  | xargs --no-run-if-empty -t -n1 VBoxManage unregistervm                                                                                  
killall -9 VBoxHeadless                                                                                                                                                           
rm -rf ~/Virtualbox\ VMs/* 

1

在我的情况下,我想通过命令行删除我系统中当前所有的Vagrant boxes,我通过以下命令实现了这个目标:

$ vagrant box list | cut -f 1 -d ' ' | xargs -L 1 vagrant box remove -f --all

当然,在确保没有进一步的进程附加之后:
killall -9 VBoxHeadless && vagrant destroy
No matching processes belonging to you were found

1

我在64位多处理器主机上使用Debian Wheezy。最终,我通过删除所有VirtualBox数据(尽管您不需要删除Vagrant基础框)来解决它:

  1. 关闭Virtualbox(如果正在运行)
  2. sudo apt-get remove --purge virtualbox
  3. 移动或删除~/.VirtualBox和~/VirtualBox\ VMs/。如果您不确定,请将它们备份到安全的位置。
  4. 重新启动。
  5. 重新安装virtualbox。
  6. 像往常一样使用virtualbox/vagrant。

可能有一种更少破坏性的方法(例如仅删除这些目录的某些部分)。在我的情况下,幸运的是我当时只使用了一个VM。


0
在Windows 10上,我通过将默认防火墙配置恢复来解决了这个问题。
希望对你有所帮助...

0

我一直在苦苦挣扎,尝试使用Vagrant创建的虚拟机实例却总是冻结。 幸运的是,在类似的问题中找到了解决方案。

所以,简单概括一下,如果您遇到超时错误或Vagrant抱怨无法提供服务或任何其他与Virtual Box相关的问题,请尝试以下操作:

  1. 首先列出虚拟机实例:VmboxManage list vms
  2. 使用前一个命令的id|names停止虚拟机实例:VBoxManage startvm VMNAME/id --type emergencystop
  3. 使用vagrant box list列出vagrant boxes
  4. 删除一个或多个引起问题的vagrant boxes:vagrant remove box ${box-name}
  5. 之后,再次尝试vagrant up,希望您能回到正常状态。

祝好运!


0

打开任务管理器或系统监视器,将鼠标悬停在 VBoxHeadless 上以查看虚拟机的名称并终止进程。 现在,您可以使用 VirtualBox 管理器 GUI 删除虚拟机。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接