使用文件路径使用Virtualbox启动虚拟机

时间:2015-01-02 13:12:58

标签: shell virtual-machine virtualbox

我在Linux Debian上运行虚拟机的虚拟机。 它位于隐藏的Truecrypt容器中。

我希望尽可能地减少该VM的存在。 因此,将VM导入虚拟框,在其GUI中留下一个条目 不是我想要的。 (我每次都可以手动删除它,但这很费力 并且在紧急情况下无法关闭。)

有没有办法用虚拟机启动虚拟机 使用.vbox文件的路径而不是导入文件,然后使用导入的VM的名称?

所以而不是:

vboxmanage startvm <Name_Of_VM_Here>

类似的东西:

vboxmanage startvm <Path_to_VMDK_file>

1 个答案:

答案 0 :(得分:0)

您可以使用:

vboxmanage showhdinfo "PathToYourVMDK"

将在最后一行输出中显示其UUID。

然后,您可以使用UUID而不是其名称

启动该VM
vboxmanage startvm YourUUID

所以,基本上你需要的命令是:

vboxmanage startvm $(vboxmanage showhdinfo "PathToYourVMDK" | awk -F" |)" '/^In use/{print $(NF-1)}')

如果您没有使用bash,则需要使用这样的反引号替换$()

vboxmanage startvm `vboxmanage showhdinfo "PathToYourVMDK" | awk -F" |)" '/^In use/{print $(NF-1)}'`

<强>更新

如果您在编写脚本并调试脚本时遇到问题,请按照以下步骤操作。

首先......让基本showhdinfo命令正常工作。所以试试这个:

vboxmanage showhdinfo "PathToYourVMDK"

UUID:           c3166b8a-3c21-4531-927c-030f3cfb9728
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       ...
Storage format: VDI
Format variant: fixed default
Capacity:       8192 MBytes
Size on disk:   8192 MBytes
In use by VMs:  UbuntuVM (UUID: 77743eca-e338-471c-b824-60c5c5c22b6f)   <-- THIS ONE

其次......现在看看最后一行,UUID可以与vboxmanage startvm一起使用,所以请尝试复制并粘贴它:

vboxmanage startvm 77743eca-e338-471c-b824-60c5c5c22b6f

那应该启动VM。

第三......下一次检查是awk正在正确提取该UUID,所以让我们尝试一下

vboxmanage showhdinfo "PathToYourVMDK" | awk -F" |)" '/^In use/{print $(NF-1)}'

77743eca-e338-471c-b824-60c5c5c22b6f

看起来是正确的,现在将它全部放入脚本中:

#!/bin/bash -xv
UUID=$(vboxmanage showhdinfo "PathToYourVMDK" | awk -F" |)" '/^In use/{print $(NF-1)}')
echo UUID:$UUID
vboxmanage startvm $UUID