VirtualBox中的虚拟机已被锁定,无法进行会话(或正在解锁)

108

我的Virtualbox虚拟机因为这个错误无法启动,我不想销毁并重新安装它,有没有恢复的方法?

在控制VirtualBox的Vagrant使用的CLI VBoxManage 执行时出现了错误。该命令和stderr如下所示。

Command: ["modifyvm", "319fcce3-e8ff-4b6f-a641-3aee1df6543f", "--natpf1", "delete", "ssh"]

Stderr: VBoxManage: error: The machine 'centos64_c6402_1454036461345_59755' is already locked for a session (or being unlocked)
VBoxManage: error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component MachineWrap, interface IMachine, callee nsISupports
VBoxManage: error: Context: "LockMachine(a->session, LockType_Write)" at line 493 of file VBoxManageModifyVM.cpp
11个回答

180

在命令行上运行此命令可以解锁虚拟机:

vboxmanage startvm <vm-uuid> --type emergencystop

在错误信息中,<vm-uuid>是一个数字:Command: ["modifyvm", "<vm-uuid>" [...]。然后我就能够控制虚拟机(启动、关闭等)。使用Ubuntu上的Virtualbox 4.1。


1
谢谢,这真的帮助了我,我在docker中有关共享文件夹的一些问题。我无法删除共享文件夹(错误:找不到名为“ourspends”的共享文件夹),并且创建时也会提示它已经存在(无法创建映射到“/home/relu/projects/ourspends”的共享文件夹'ourspends'(VERR_ALREADY_EXISTS))。 - Relu Mesaros
大坤萨!!哈哈 :) - facundofarias
7
请使用命令VBoxManage -nologo list vms查找您的虚拟机UUID。 - Jakob
7
对于 Windows 系统,您需要提供完整的路径,然后运行 "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" <vm-uuid> --type emergencystop 命令来执行紧急停止虚拟机的操作。 - Felix Eve
1
这是我觉得最好的方法。我想补充一下,要找到虚拟机的 UUID,请使用以下命令(如有必要,请编辑路径): "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" -nologo list vms - Joey
显示剩余4条评论

39

我遇到了同样的问题,发现有一个进程正在运行并锁定了虚拟机:

501 79419 79323   0  2:18PM ??         0:39.75 /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless --comment default --startvm 1d438a2e-68d7-4ba2-bef9-4ea162913c1b --vrde config

请确保没有进程卡在尝试启动虚拟机的过程中:

ps -ef | grep -i "vbox"

这对我起作用了。我杀掉了由ps -ef语句返回的所有进程,然后“vagrant destroy”又可以正常工作了。 - thebiggestlebowski

17

sudo pkill -9 VBox 命令可以结束所有与 vbox 相关的运行程序


1
这是一个非常糟糕的想法,因为如果你有多个客人,它会杀死所有客人,甚至不给他们关闭一切的机会,因此很可能导致数据丢失。 - Guntram Blohm
1
我甚至无法想象谁会给这个点赞。运行多个客户端肯定会使它们处于未定义状态,很有可能导致数据和控制的丢失。 - Mogens TrasherDK
1
正确的答案是vboxmanage startvm <vm-uuid> --type emergencystop,正如@Gonzalo Matheu和@Erman所述。 - Mogens TrasherDK

17

我发现@Gonzalez的这个答案非常有趣。

vboxmanage startvm <vm-uuid> --type emergencystop

唯一的问题是它会关闭我的虚拟机当前实例,所以如果当前虚拟机正在运行,可以使用controlvm而不是使用modifyvm

例如:

 VBoxManage modifyvm <vm_name> --natpf1 "guestssh,tcp,,22,,2222"
 VBoxManage modifyvm <vm_name> --natpf1 delete "guestssh"

成为:

VBoxManage controlvm <vm_name> natpf1 "guestssh,tcp,,22,,2222"
VBoxManage controlvm <vm_name> natpf1 delete "guestssh"

完整文档在此处 https://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvm


VBoxManage控制vm "Ubuntu_1604s" --natpf1 "u8848,tcp,,18848,,8848",但我得到了与modifyvm相同的错误。错误:上下文:"LockMachine(a->session, LockType_Shared)",位于文件VBoxManageControlVM.cpp的第388行。有什么解决方案吗? - CS QGB

16

对我来说,我需要在任务管理器中结束VboxHeadless.exe进程。另外,我还需要确保CMD提示符以管理员模式打开。


在Linux上也对我奏效了。建议优雅地关闭所有正在运行的其他虚拟机(如果在终端中可以使用 ps aux | grep box)。 - Dan

8
在Windows任务管理器中,我结束了与Virtual Box有关的所有任务(您可以在任务管理器中看到它们以V开头,如Vbox Headless.exe等)。一旦我这样做了,我就能够让这个错误消失了(上面的'vboxmanage startvm ...等...'解决方案对我没有用)。

4
如果您在VirtualBox GUI中为该框打开了设置窗口,可能会遇到此错误。只需关闭设置窗口并重试即可。

1
这是因为你重新分配了为Virtual Box设置的内存。要解决这个问题,你需要重启电脑。

vboxmanage 没有起作用,杀掉 vbox 进程也不行;我本来想销毁这个虚拟机,但是在此之前我想先重启系统并进行最后一次尝试,结果成功启动了虚拟机。 - alboforlizo

1

我今天遇到了同样的错误信息:

>me@myhost:~$ ps -ef | grep -i "vbox"

me  3064     1  0 08:51 ?        00:00:00 /usr/lib/virtualbox/VBoxXPCOMIPCD

me  3089     1  0 08:51 ?        00:00:00 /usr/lib/virtualbox/VBoxSVC --auto-shutdown

me  3126  3089 27 08:51 ?        00:00:39 /usr/lib/virtualbox/VBoxHeadless --comment RHEL5 64-bit desktop --startvm e5c598d8-1234-4003-a7c1-b9d8af15dfe7 --vrde config

me  3861  3415  0 08:53 pts/1    00:00:00 grep --color=auto -i vbox*

Gergely的回答完美地解决了这个问题。原来我在重新启动时设置了一个crontab以启动虚拟机,这启动了上面显示的三个VBox进程。

me@myhost:~$ crontab -l

@reboot me /usr/bin/vboxmanage startvm "RHEL5 64-bit desktop" --type headless

0
在我的情况下,表面上的原因是一个USB以太网适配器,在暂停机器后被拔除了。在我的情况下,
vboxmanage startvm <vm-uuid> --type emergencystop

没有帮助。相反,我收到了令人困惑的消息

VBoxManage: error: The machine 'xyzzy' is not locked by a session

真正的错误是通过运行揭示的

vboxmanage startvm <vm-uuid> --type gui

返回了

VBoxManage: error: Nonexistent host networking interface, name 'en9: USBPlug' (VERR_INTERNAL_ERROR)

将网络配置更改为不同的网络适配器解决了该问题。


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