Linux

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

  • November 30, 2021

我對 virt-manager / libvirt / KVM 有點迷茫。

我有一個執行良好的 KVM VM (Windows XP)。

VM 由一個 4GB 左右的文件(一個*.img*)支持。

現在我想做一些非常簡單的事情:我想複製我的虛擬機。

我想*“好吧,沒問題,讓我們複製 4GB 文件並複制 XML”*文件。

但隨後 libvirt 常見問題解答全部大寫:“您不應該關心 XML 的儲存位置”

libvirt 常見問題

好吧好吧,我不應該在乎。但是我該如何複製我的虛擬機呢?

我想創建一個作為該 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:

  1. 確保現有 VM(要複製)已關閉。
  2. 對現有 VM 執行“sudo virsh dumpxml <domid >”,並保存輸出 xml 文件。
  3. 修改<domain>標籤下的<name>標籤。
  4. 使用“uuidgen”生成一個新的唯一 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>


引用自:https://unix.stackexchange.com/questions/8351