从基础域在 libvirt 中创建新域

从基础域在 libvirt 中创建新域

TL;DR 位于底部

我正在为 libvirt 构建一个 Web 界面项目。我使用 libvirt-php 作为 libvirt 的语言绑定,一切正常,除了域创建之外。

我遇到的问题是域创建问题,我希望基于基础域创建一个域。我之前发布过类似的问题,我问了几乎完全相同的问题。我从一位版主那里得到了有用的回复,他告诉我查看 virt-install 是如何实现这一点的。

所以我这样做了,我运行了 virt-install 来查看他们如何从基础域创建一个新域,但令我沮丧的是,它并没有像我预期的那样工作,因为它最终只是共享了我指定的给定存储卷,除非我搞砸了什么。

virsh vol-create-from因此我采取了另一种方法,我将使用命令或 libvirt-php 函数根据我想要用作新域的存储的存储卷创建一个新的存储卷libvirt_storagevolume_create_xml_from()

这种方法效果很好,我可以创建一个域,指定我想用作基础磁盘映像的存储卷,而且它确实有效。但是,每当我尝试同时创建多个域时,我都会遇到一个新问题。

您会看到,由于域创建是一个耗时的过程,我决定将该作业推送到 beanstalkd 队列,并使用 Supervisord 通过生成工作程序来管理新作业,从而保持进程运行。这就是新问题出现的地方,因为错误日志中有以下消息:Requested operation is not valid: volume 'ubuntu-14.04.3-x64' is still being allocated.

所以结果就是我必须等待卷克隆完成,然后才能再次克隆。这就是我遇到的问题。

总结:尝试从基础域在 libvirt 中创建域,已尝试以下操作:

  • 尝试查看 virt-install 的 --import 标志如何工作,没有产生任何有用的结果。(但可能忽略了一些东西)。

  • 尝试从基础存储卷创建存储卷。(此方法有效,直到我尝试多次克隆存储卷,而其他卷则从我拥有的基础卷创建)。

如果它允许我同时从该基础卷创建多个卷,那么从基础卷创建新的存储卷的解决方案似乎是最方便的。

问题:

所以我的问题是,是否有可能:

  • 从 libvirt 中的基础磁盘映像创建域?

  • 多次克隆一个卷而无需等待克隆过程完成?(关于 libvirt 的配置,我是否忽略了什么?)

  • 在 libvirt 中从另一个域的快照创建一个新域?(问这个问题是因为这是我在写这个问题时突然想到的另一种可能的解决方案,而谷歌还没有给出任何有用的答案,除了如何将域恢复到以前的快照。)

答案1

我只是利用qemu-img这一点。如果你想看代码,看看 vdsm 是如何做到的。

相关内容