如何创建KVM / libvirt / virt-manager VM的副本?


13

我对virt-manager / libvirt / KVM有点迷惑。

我有一个工作正常的KVM VM(Windows XP)。

VM由大约4GB的文件(.img)支持。

现在,我想做一些非常简单的事情:我想复制我的VM。

我以为“好的,没问题,让我们复制4GB文件并复制XML”文件。

但是,libvirt常见问题以所有大写形式声明:“您不应该在意XML的存储位置”

libvirt常见问题解答

好吧,我不在乎。但是,如何复制我的VM?

我想创建一个新的虚拟机,该虚拟机是该虚拟机的副本。

Answers:


4

virsh将允许您编辑,导出和导入服务器的XML定义。我将virt-clone用来生成克隆的图像文件,并导出XML。为了安全起见,我将从原始服务器中删除克隆配置。


42

最方便的是:

# virt-clone --connect=qemu://example.com/system -o this-vm -n that-vm --auto-clone

它将复制this-vm,名为that-vm,并负责复制存储设备。除了细节,这里没有新内容。

更重要的是,FAQ所说的是XML域描述不可直接编辑,您需要经过 libvirt。要完成virt-clone命令采取的步骤,您可以:

source_vm=vm_name
new_vm=new_vm_name

# You cannot "clone" a running vm, stop it.  suspend and destroy
# are also valid options for less graceful cloning
virsh shutdown "$source_vm"

# copy the storage.
cp /var/lib/libvirt/images/{"$source_vm","$new_vm"}.img

# dump the xml for the original
virsh dumpxml "$source_vm" > "/tmp/$new_vm.xml"

# hardware addresses need to be removed, libvirt will assign
# new addresses automatically
sed -i /uuid/d "/tmp/$new_vm.xml"
sed -i '/mac address/d' "/tmp/$new_vm.xml"

# and actually rename the vm: (this also updates the storage path)
sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"

# finally, create the new vm
virsh define "/tmp/$new_vm.xml"
virsh start "$source_vm"
virsh start "$new_vm"

这也适用于将VM复制到另一台主机:使用sftp而不是cp,(可能)在“定义”新的vm之前更改映像路径,并且sftp还将that-vm.xml复制到另一台主机。
Andreas Florath

谢谢,为我节省了很多时间。我遇到的问题是克隆与创建新文件,如果创建新节点,则软件包版本将与使用本地镜像的其他节点不同步。
Mike Purcell 2014年

是否可以virt-clone正确处理全盘加密?意思是,在做它的事情之前,它会问我我的解密密码吗?
一位编码员

我认为sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"应该阅读 sed -i "s/$source_vm/$new_vm/" "/tmp/$new_vm.xml"或至少在我的debian衍生版sed上抱怨缺少尾部/。也感谢您提供的信息,我的virsh-clone根本无法正常工作。
number9

3

除了“ virt-clone”之外,您还可以通过以下方式复制虚拟机:

  1. 确保现有虚拟机(要复制)已关闭。
  2. 对现有虚拟机执行“ sudo virsh dumpxml <domid>”,然后保存输出xml文件。
  3. 修改<域>标记下的<名称>标记。
  4. 使用“ uuidgen”生成一个新的唯一ID,然后使用该ID修改现有的<uuid>标记。
  5. 制作VM使用的现有qcow虚拟映像的副本(通常存储在/ var / lib / libvirt / images中,但是请确保只读取XML文件以获取确切位置)。命令为“ sudo cp /var/lib/libvirt/images/xxx.qcow2 yyyy.qcow2”,然后在XML文件中填写新文件yyyy.qcow2。
  6. 启动新的虚拟机:sudo virsh define new.xml
  7. 启动新的domid:sudo virsh start <new_domid>



0

显然,virt-clone是必经之路。

我尝试复制XML,但不会在virt-manager下出现。

我仍然想知道如何将XML + .img传输到说...的新系统。


0

以下命令对我有用(运行命令之前必须关闭VSA / Vm)

# virt-clone --connect=qemu:///system -o present_vsa/vm_name -n vsa/vm_to_be_cloned_name --auto-clone

1
除了伪虚拟机名称之外,这与使用三年的答案中的命令相同,但缺少该答案中的补充信息。
G-Man说'Reinstate Monica''Aug

0

virt-clone --auto-clone在LVM中似乎无法很好地发挥作用。我期望它创建快照并使用它,但是它将复制所有数据。

最好做dumpxml / define路由;并且记住在启动原始副本和克隆之前,先安装克隆的根文件系统并适当更改IP地址和主机名。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.