Linux
如何創建 KVM/libvirt/virt-manager VM 的副本?
我對 virt-manager / libvirt / KVM 有點迷茫。
我有一個執行良好的 KVM VM (Windows XP)。
VM 由一個 4GB 左右的文件(一個*.img*)支持。
現在我想做一些非常簡單的事情:我想複製我的虛擬機。
我想*“好吧,沒問題,讓我們複製 4GB 文件並複制 XML”*文件。
但隨後 libvirt 常見問題解答全部大寫:“您不應該關心 XML 的儲存位置”
好吧好吧,我不應該在乎。但是我該如何複製我的虛擬機呢?
我想創建一個作為該 VM 副本的新 VM。
最方便的就是:
# virt-clone --connect=qemu://example.com/system -o this-vm -n that-vm --auto-clone
它將製作
this-vm
, named的副本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 image. 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”,您還可以通過以下方式複制 VM:
- 確保現有 VM(要複製)已關閉。
- 對現有 VM 執行“sudo virsh dumpxml <domid >”,並保存輸出 xml 文件。
- 修改<domain>標籤下的<name>標籤。
- 使用“uuidgen”生成一個新的唯一 ID,並使用它來修改現有的 <uuid> 標籤。
- 製作 VM 使用的現有 qcow 虛擬映像的副本(通常儲存在 /var/lib/libvirt/images 中,但請確保僅讀取您的 XML 文件以獲取確切位置)。命令為“sudo cp /var/lib/libvirt/images/xxx.qcow2 yyyy.qcow2”,並在XML文件中填寫新文件yyyy.qcow2。
- 啟動新的虛擬機:sudo virsh define new.xml
- 啟動新的domid:sudo virsh start<new_domid>