我对virt-manager / libvirt / KVM有点迷惑。
我有一个工作正常的KVM VM(Windows XP)。
VM由大约4GB的文件(.img)支持。
现在,我想做一些非常简单的事情:我想复制我的VM。
我以为“好的,没问题,让我们复制4GB文件并复制XML”文件。
但是,libvirt常见问题以所有大写形式声明:“您不应该在意XML的存储位置”
好吧,我不在乎。但是,如何复制我的VM?
我想创建一个新的虚拟机,该虚拟机是该虚拟机的副本。
我对virt-manager / libvirt / KVM有点迷惑。
我有一个工作正常的KVM VM(Windows XP)。
VM由大约4GB的文件(.img)支持。
现在,我想做一些非常简单的事情:我想复制我的VM。
我以为“好的,没问题,让我们复制4GB文件并复制XML”文件。
但是,libvirt常见问题以所有大写形式声明:“您不应该在意XML的存储位置”
好吧,我不在乎。但是,如何复制我的VM?
我想创建一个新的虚拟机,该虚拟机是该虚拟机的副本。
Answers:
最方便的是:
# 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"
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根本无法正常工作。
除了“ virt-clone”之外,您还可以通过以下方式复制虚拟机:
以下命令对我有用(运行命令之前必须关闭VSA / Vm)
# virt-clone --connect=qemu:///system -o present_vsa/vm_name -n vsa/vm_to_be_cloned_name --auto-clone