¿Cómo crear una copia de una máquina virtual KVM / libvirt / virt-manager?


13

Estoy un poco perdido con virt-manager / libvirt / KVM.

Tengo una máquina virtual KVM (Windows XP) que funciona bien.

La VM está respaldada por un archivo de 4GB más o menos (un .img ).

Ahora quiero hacer algo muy simple: quiero duplicar mi VM.

Pensé "OK, no hay problema, copiemos el archivo de 4GB y copiemos el archivo XML" .

Pero luego, las preguntas frecuentes de libvirt dicen en mayúsculas: "NO DEBES IMPACTARSE DONDE SE GUARDE EL XML"

Preguntas frecuentes sobre libvirt

Bien, no me importa. Pero entonces, ¿cómo duplico mi VM?

Quiero crear una nueva VM que sea una copia de esa VM.

Respuestas:


4

virshle permitirá editar, exportar e importar la definición XML para sus servidores. Lo usaría virt-clonepara generar un archivo de imagen clonado y exportar el XML. Para estar seguro, eliminaría la configuración de clonación del servidor original.


42

Lo más conveniente es simplemente:

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

Lo que hará una copia this-vm, nombrada that-vmy se encargará de duplicar los dispositivos de almacenamiento. Nada nuevo aquí, excepto los detalles.

Más concretamente, lo que dice la pregunta frecuente es que las descripciones de dominio XML no son directamente editables, debe pasar por libvirt. Para completar los pasos tomados por el virt-clonecomando, puede:

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"

Esto también funciona para copiar una máquina virtual a otro host: use sftp en lugar de cp, (posible) cambie la ruta de la imagen antes de 'definir' el nuevo vm y sftp también that-vm.xml al otro host.
Andreas Florath

Gracias por esto, me ahorró un montón de tiempo. El problema que tuve fue la clonación frente a la creación de nuevos, ya que si creo un nuevo nodo, las versiones del paquete no estarían sincronizadas con los otros nodos que usaban un espejo local.
Mike Purcell

¿ virt-cloneManeja el cifrado de disco completo correctamente? Es decir, ¿me pedirá mi descifrado pw antes de hacer lo suyo?
un codificador

Creo que sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"debería leer sed -i "s/$source_vm/$new_vm/" "/tmp/$new_vm.xml"o al menos en mi derivado de Debian sed se queja de una falta de seguimiento /. Gracias por la información también, mi virsh-clone simplemente no estaba funcionando en absoluto.
número9

3

Aparte de "virt-clone", puede duplicar la VM de esta manera:

  1. Asegúrese de que la VM existente (para duplicar) esté apagada.
  2. haga un "sudo virsh dumpxml <domid>" de la máquina virtual existente y guarde el archivo xml de salida.
  3. Modifique la etiqueta <nombre> debajo de la etiqueta <dominio>.
  4. Use "uuidgen" para generar una nueva ID única, y úsela para modificar la etiqueta <uuid> existente.
  5. Haga una copia de las imágenes virtuales qcow existentes que utiliza la máquina virtual (generalmente almacenadas en / var / lib / libvirt / images, pero para asegurarse de leer su archivo XML para conocer la ubicación exacta). El comando es "sudo cp /var/lib/libvirt/images/xxx.qcow2 yyyy.qcow2", y complete el nuevo archivo yyyy.qcow2 en el archivo XML.
  6. Inicie el nuevo vm: sudo virsh define new.xml
  7. Inicie el nuevo domid: sudo virsh start <new_domid>



0

Al parecer, virt-clone es el camino a seguir.

Intenté duplicar el XML pero no aparecería en virt-manager.

Todavía me pregunto cómo puedo transferir un archivo XML + .img a un nuevo sistema que dice ...


0

El siguiente comando funcionó para mí (tengo que apagar VSA / Vm antes de ejecutar el comando)

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

1
Aparte de los nombres de pseudo VM, esto es idéntico al comando de la respuesta de tres años, pero carece de la información complementaria de esa respuesta.
G-Man dice 'Restablecer a Mónica' el

0

virt-clone --auto-clone no parece jugar bien con LVM. Esperaba que creara una instantánea y la usara, pero en cambio copia todos los datos.

Es mejor hacer la ruta dumpxml / define; y recuerde montar el sistema de archivos raíz del clon y cambiar las direcciones IP y el nombre de host de manera apropiada antes de iniciar el original y el clon.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.