En este artículo, lo guiaré a través de los pasos para exportar el disco y las configuraciones de la máquina virtual KVM y luego importarlos en la misma máquina o en una máquina diferente. También le mostraré cómo exportar e importar máquinas virtuales KVM con un script Bash.
Introducción
Recientemente cambié mi hipervisor de Oracle VirtualBox a KVM por sus características y rendimiento nativos. Por lo que he probado, las máquinas virtuales KVM se ejecutan más rápido en comparación con las máquinas virtuales Virtualbox.
Siempre es importante hacer una copia de seguridad de sus máquinas virtuales periódicamente. Entonces, en caso de cualquier discrepancia, puede usar la imagen de respaldo para restaurar la máquina virtual. Exportar e importar máquinas virtuales KVM es un proceso de dos pasos.
- Primero, debe verificar dónde se almacenan las imágenes del disco y copiar la imagen del disco en una ubicación de respaldo.
- En segundo lugar, exporte las configuraciones de la máquina, para que luego puedan usarse para crear el dominio.
Definición de máquina virtual
Hay dos formas de obtener información del dominio de la máquina virtual. O puedes usar el "Virsh" programe o utilice "Virt-manager" .
Puede obtener el nombre de la VM desde Virt-manager o ejecutando el siguiente virsh
comando.
$ virsh list --all Id Name State ------------------------------------ - Linux_Mint_20 shut off - mxlinux shut off - popos_21_10 shut off - rocky_linux_8 shut off - ubuntu20.04 shut off - ubuntu20.04-clone shut off
Puede ejecutar el siguiente comando para ver toda la información del dominio (Configuración de VM) sobre una máquina virtual en particular. Esto mostrará el resultado en formato XML.
$ virsh dumpxml vm_name | less
$ virsh dumpxml ubuntu20.04-clone | less
También puede tomar una configuración de máquina en particular conectándola a grep dominio. Digamos que si desea ver la asignación de memoria, puede ejecutar el siguiente comando.
$ virsh dumpxml ubuntu20.04-clone | grep -i "MEMORY" <memory unit='KiB'>5632000</memory> <currentMemory unit='KiB'>5632000</currentMemory>
Si prefiere Virt-manager, puede obtener esta información en formato XML presionando la pestaña XML en la sección "mostrar hardware virtual".

Ubicación del disco de la máquina virtual
Los discos de la máquina virtual se crean en qcow2
formato. De forma predeterminada, el disco de la máquina virtual se almacena en el /var/lib/libvirt/images/
directorio a menos que haya almacenado explícitamente el disco en un directorio separado.
Ejecute el siguiente comando para obtener la ruta del directorio del disco.
$ virsh dumpxml ubuntu20.04-clone | grep -i "source" <source file='/var/lib/libvirt/images/ubuntu20.04-clone.qcow2'/>
Desde el Virt-manager, en Descripción general sección, busque el <disk>
sección.

Si ha utilizado diferentes rutas para almacenar las imágenes de disco y si desea conocer todas las rutas de disco de la máquina virtual, puede ejecutar el siguiente fragmento de código desde la terminal o desde el script de shell.
VM_NAMES=($(virsh list --all| awk '(NR>2)' | awk '{ print $2 }')) for VM in ${VM_NAMES[@]}; do DISK_PATH=$(virsh dumpxml ${VM} | grep -i "<source file") echo "${VM} ${DISK_PATH}" done | column -t

Exportar información de dominio y copiar disco
Ahora que sabe cómo obtener la ruta del disco y la información del dominio, es hora de exportar la información del dominio para una máquina virtual y copiar la imagen del disco en una ubicación diferente.
Para exportar la información del dominio, puede ejecutar el siguiente "virsh dumpxml
" y almacenar la salida en un XML
archivo.
$ virsh dumpxml vm-name > /path/to/xm_file.xml
$ virsh dumpxml ubuntu20.04-clone > ~/Documents/ubuntu.xml
Ahora copie la imagen del disco en un lugar diferente que pueda usarse más tarde.
$ sudo cp /var/lib/libvirt/images/ubuntu20.04-clone.qcow2 ~/Documents/
Se completa el proceso de exportación. ¡Es así de simple!
Aviso: Deberías usar sudo
o copie el disco con el root
ya que el disco es propiedad del usuario root.

Importar máquina virtual KVM
Para importar la máquina virtual KVM, debe definir el dominio desde el archivo XML exportado ejecutando el siguiente comando.
$ virsh define --file <path-to-xml-file>
$ virsh define –file ~/Documents/ubuntu.xml
Ahora puede verificar el Virt-manager o ejecutar virsh
comando, el dominio debe crearse con éxito. Debe copiar la imagen del disco en la ruta del directorio que se define en el archivo XML. En mi caso es la ubicación por defecto /var/lib/libvirt/images/
.
$ sudo cp ~/Documents/ubuntu20.04-clone.qcow2 /var/lib/libvirt/images/
Se completó el proceso de importación. Ahora puede iniciar la máquina virtual.
Un script Bash para exportar e importar máquinas virtuales KVM
He creado un script bash que se encargará de exportar toda la configuración y las imágenes del disco. Si está interesado, puede echar un vistazo a este script en mi repositorio de GitHub . Apreciaremos mucho sus sugerencias para mejorar este script.
#!/usr/bin/env bash # ---------------------------------------------------------------------------------------------------- # AUTHOR : KARTHICK S # PURPOSE : THIS SCRIPT WILL EXPORT/IMPORT THE CONFIG AND VM DISK. # # usage: # export function will take care of exporting the necessary for all VM. Run as "<scriptname.sh> export" # import function will take care of importing the necessary for all VM. Run as "<scriptname.sh> import" # # NOTE: Do not add trailing / for the directory when giving export and import path. #------------------------------------------------------------------------------------------------------ # Trigger the script with root user or exit. if [[ ${UID} -ne 0 ]]; then echo -e "[EXIT] - Run the script as root user or with sudo privilege..." exit fi function export_vm(){ # Get the export location. read -p "Provide the directory path where disk and config files to be exported: " EXPORT_LOCATION # Create the destination directory if not exists. [[ -d ${EXPORT_LOCATION} ]] || mkdir -p ${EXPORT_LOCATION} # Exporting the config using virsh dumpxml command. VM_NAMES=($(virsh list --all| awk '(NR>2)' | awk '{ print $2 }')) for VM in ${VM_NAMES[@]}; do virsh dumpxml ${VM} > ${EXPORT_LOCATION}/${VM}.xml done # Using rsync copy the entire directory from default location. echo -e "\n[ Copying disk images ]\n" && sudo rsync -avxp --progress /var/lib/libvirt/images ${EXPORT_LOCATION} echo -e "\n[ Exported Files ] \n" && ls -lR ${EXPORT_LOCATION} } function import_vm(){ # Get the source location. read -p "Provide the directory path where disk and config files are stored: " SOURCE_LOCATION # Throws error if directory is not available and exit. [[ -d ${SOURCE_LOCATION} ]] || { echo "Directory not available"; exit 1 ; } # Copy all the files to default disk location. echo -e "[ Copying disk images ]\n" && sudo rsync -avxp --progress ${SOURCE_LOCATION}/images /var/lib/libvirt/ if [[ $? -eq 0 ]]; then # Define VM echo -e "\n[ Defining VM ]\n" for XML_FILE in ${SOURCE_LOCATION}/*.xml; do virsh define --file ${XML_FILE} done echo -e "\n[ Imported VM List ]\n" && virsh list --all fi } case $1 in export ) export_vm ;; import ) import_vm ;; *) echo -e "USAGE : kvm_export_import.sh export - Export config and disk kvm_export_import.sh import - Define VM and copy the disk"; exit esac
El uso de este script es el siguiente.
Puede ejecutar el siguiente comando para clonar la esencia de GitHub.
$ git clone https://gist.github.com/d6c671597592fe5634a39b7974bc8029.git
El script realiza copias de seguridad (es decir, exporta) y restaura (es decir, restaura).
Exportemos la máquina virtual KVM usando este script como se muestra a continuación.
$ sudo bash kvm_export_import.sh export
Debe proporcionar la ruta del directorio donde se copiarán/exportarán el archivo XML y la imagen del disco. No agregue /
final barra oblicua al dar directorio de exportación. Primero copiará la imagen del disco (.qcow2
) y ejecute "virsh dumpxml
" Comando para exportar todas las configuraciones.
La siguiente imagen muestra cómo funciona la exportación.

Cuando pasas "import
" como argumento, primero copiará la imagen del disco en la ubicación predeterminada /var/lib/libvirt/
y ejecute "virsh define
" comando contra todos los archivos XML de exportación.
$ sudo bash kvm_export_import.sh import

Conclusión
En este artículo, le mostré cómo exportar la máquina virtual KVM e importarla en la misma máquina o en una diferente. Construir la máquina virtual desde cero es una tarea que requiere mucho tiempo. Por lo tanto, se debe seguir una estrategia adecuada para proteger las imágenes y evitar que se pierdan debido a cualquier situación. Si tiene algún truco o consejo para este artículo, nos encantaría saberlo de usted.
Espero que esto ayude.