GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo exportar e importar máquinas virtuales KVM en Linux

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.


Linux
  1. Cómo eliminar máquinas virtuales basadas en KVM en Redhat Linux

  2. Cómo clonar máquinas virtuales basadas en KVM en Redhat Linux

  3. Cómo exportar e importar configuraciones de DNS en CloudFlare

  4. Quickemu:ejecute máquinas virtuales Windows, macOS y Linux

  5. Cómo agregar memoria, vCPU, disco duro a una máquina virtual Linux KVM

Cómo instalar KVM y crear máquinas virtuales en Ubuntu 16.04 LTS

Cómo instalar y configurar KVM en Ubuntu Linux

Cómo crear y administrar máquinas virtuales en KVM

Cómo importar una exportación de VM en Windows Server 2012

Cómo verificar el tamaño de los archivos y directorios en Linux

Cómo aumentar el espacio de disco virtual de la máquina virtual en VirtualBox y VMware