有没有办法使用 VirtualBox 而不使用它的资源注册表?

有没有办法使用 VirtualBox 而不使用它的资源注册表?

概括

VirtualBox 似乎希望所有东西都“注册”,这使得在命令行上操作变得更加烦人。

我正在尝试创建一个自动化脚本,用于创建、移动、启动、停止和销毁虚拟机和虚拟磁盘。由于以下原因,需要注册会使任务复杂化。

  • 留下的状态信息可能会导致不可预测的边缘情况,从而导致脚本失败。
  • 多个进程创建同名虚拟机时可能会产生命名空间冲突
  • 在同一台机器上移动/复制资源更加复杂,因为需要更新注册表中的引用
  • 将资源(磁盘 + 虚拟机组合)复制到另一台机器后,一旦到达目标机器就需要重新配置,并且需要传输额外的元数据来进行重新配置。
  • 如果出现意外失败,从而无法取消注册,则剩余的配置信息可能会导致后续运行出现问题。

用例

我的具体用例是针对持续集成服务器,它创建和销毁可能具有相同名称的虚拟机和磁盘映像,并且需要更多逻辑来处理注册表的状态性。

假想例子

看来我应该能够例如(使用一些想象的和/或不正确的命令):

mkdir foobar
customdiskimg_script ./foo/foo.vdi
vboxmanage createvm --name "foo" --ostype Linux --basefolder ./foo/foo.xml
vboxmanage storagectl ./foo/foo.xml --name foo --add ide
vboxmanage storageattach --storagectl foo --medium ./foo/foo.vdi ./foo/foo.xml 
vboxmanage startvm ./foo/foo.xml

结论

有没有办法可以在不“注册”硬盘和虚拟机的情况下使用 VirtualBox?

答案1

不。

查看源代码后,据我所知,查找只能通过名称进行,而这需要注册表。

看起来,如果有办法将 virtualbox 配置目录的路径更改为自定义路径,那么就有可能近似我想要的效果,但这似乎也是不可能的。

答案2

由于您使用的是 Linux,因此可以使用主机操作系统工具来创建临时虚拟环境,以限制 VirtualBox 在进程之间的通信。具体来说,您可以使用它来创建chroot一个最小环境,该环境仅包含 VirtualBox 运行所需的最低限度,以及用户的新主目录,然后在该环境中运行 VirtualBox。虽然我还没有尝试过,但我认为这会将进程彼此隔离,从而解决您的问题

(不幸的是,我遇到这个问题是为了寻求 Windows 主机上同一问题的答案,但这样的解决方案是不可能的。唉。)

相关内容