GNU/Linux >> Linux Esercitazione >  >> Linux

Come esportare e importare macchine virtuali KVM in Linux

In questo articolo, ti guiderò attraverso i passaggi per esportare il disco e le configurazioni della macchina virtuale KVM e successivamente importarli nella stessa macchina o in una macchina diversa. Ti mostrerò anche come esportare e importare macchine virtuali KVM con uno script Bash.

Introduzione

Recentemente ho cambiato il mio hypervisor da Oracle VirtualBox a KVM per le sue caratteristiche e prestazioni native. Per quanto ho testato, le macchine virtuali KVM funzionano velocemente rispetto alle macchine virtuali Virtualbox.

È sempre importante eseguire periodicamente il backup delle VM. Quindi, in caso di discrepanza, puoi utilizzare l'immagine di backup per ripristinare la macchina virtuale. L'esportazione e l'importazione di macchine virtuali KVM è un processo in due fasi.

  • In primo luogo, devi controllare dove sono archiviate le immagini del disco e copiare l'immagine del disco in una posizione di backup.
  • In secondo luogo, esporta le configurazioni della macchina, in modo che possano essere utilizzate in seguito per creare il dominio.

Definizione di macchina virtuale

Esistono due modi per ottenere le informazioni sul dominio della macchina virtuale. Puoi usare il "Virsh" programma o utilizzare "Virt-manager" .

Puoi ottenere il nome della VM dal Virt-manager o eseguendo il seguente 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

È possibile eseguire il comando seguente per visualizzare le informazioni sull'intero dominio (configurazione VM) su una particolare macchina virtuale. Questo visualizzerà il risultato in formato XML.

$ virsh dumpxml vm_name | less
$ virsh dumpxml ubuntu20.04-clone | less

Puoi anche prendere una particolare configurazione della macchina collegandola a grep comando. Diciamo che se vuoi visualizzare l'allocazione della memoria, puoi eseguire il comando seguente.

$ virsh dumpxml ubuntu20.04-clone | grep -i "MEMORY"
  <memory unit='KiB'>5632000</memory>
  <currentMemory unit='KiB'>5632000</currentMemory>

Se preferisci Virt-manager, puoi acquisire queste informazioni in formato XML premendo la scheda XML nella sezione "mostra hardware virtuale".

Posizione del disco della macchina virtuale

I dischi della macchina virtuale vengono creati in qcow2 formato. Per impostazione predefinita, il disco della macchina virtuale è archiviato in /var/lib/libvirt/images/ directory a meno che tu non abbia archiviato esplicitamente il disco in una directory separata.

Esegui il comando seguente per ottenere il percorso della directory del disco.

$ virsh dumpxml ubuntu20.04-clone | grep -i "source"
      <source file='/var/lib/libvirt/images/ubuntu20.04-clone.qcow2'/>

Dal Virt-manager, nella Panoramica sezione, controlla il <disk> sezione.

Se hai utilizzato percorsi diversi per archiviare le immagini del disco e se desideri conoscere tutti i percorsi del disco della VM, puoi eseguire il seguente snippet dal terminale o dallo script della 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 

Esporta informazioni sul dominio e copia disco

Ora che sai come ottenere il percorso del disco e le informazioni sul dominio, è il momento di esportare le informazioni sul dominio per una VM e copiare l'immagine del disco in una posizione diversa.

Per esportare le informazioni sul dominio, puoi eseguire il seguente "virsh dumpxml " e salva l'output in un XML file.

$ virsh dumpxml vm-name > /path/to/xm_file.xml
$ virsh dumpxml ubuntu20.04-clone > ~/Documents/ubuntu.xml

Ora copia l'immagine del disco in un posto diverso che può essere utilizzato in seguito.

$ sudo cp /var/lib/libvirt/images/ubuntu20.04-clone.qcow2 ~/Documents/

Il processo di esportazione è completato. È così semplice!

Avviso: Dovresti usare sudo oppure copia il disco con il root utente poiché il disco è di proprietà dell'utente root.

Importa macchina virtuale KVM

Per importare la macchina virtuale KVM, devi definire il dominio dal file XML esportato eseguendo il comando seguente.

$ virsh define --file <path-to-xml-file>
$ virsh define –file ~/Documents/ubuntu.xml

Ora puoi controllare il Virt-manager o eseguire il virsh comando, il dominio dovrebbe essere creato correttamente. Devi copiare l'immagine del disco nel percorso della directory definito nel file XML. Nel mio caso è la posizione predefinita /var/lib/libvirt/images/ .

$ sudo cp ~/Documents/ubuntu20.04-clone.qcow2 /var/lib/libvirt/images/

Il processo di importazione è completato. Ora puoi avviare la macchina virtuale.

Uno script Bash per esportare e importare macchine virtuali KVM

Ho creato uno script bash che si occuperà di esportare tutta la configurazione e le immagini del disco. Se sei interessato, puoi dare un'occhiata a questo script nel mio repository GitHub . I tuoi suggerimenti per migliorare questo script saranno molto apprezzati.

#!/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

L'utilizzo di questo script è il seguente.

Puoi eseguire il comando seguente per clonare il gist da GitHub.

$ git clone https://gist.github.com/d6c671597592fe5634a39b7974bc8029.git

Lo script esegue il backup (cioè l'esportazione) e il ripristino (cioè il ripristino).

Esportiamo la macchina virtuale KVM usando questo script come di seguito.

$ sudo bash kvm_export_import.sh export

È necessario fornire il percorso della directory in cui copiare/esportare il file XML e l'immagine del disco. Non aggiungere / finali barra quando si fornisce la directory di esportazione. Per prima cosa copierà l'immagine del disco (.qcow2 ) ed eseguire "virsh dumpxml " comando per esportare tutte le configurazioni.

L'immagine sotto mostra come funziona l'esportazione.

Quando passi "import " come argomento, copierà prima l'immagine del disco nella posizione predefinita /var/lib/libvirt/ ed esegui "virsh define " comando su tutti i file XML di esportazione.

$ sudo bash kvm_export_import.sh import

Conclusione

In questo articolo ti ho mostrato come esportare la macchina virtuale KVM e importarla nella stessa macchina o in una macchina diversa. Costruire la macchina virtuale da zero è un'attività che richiede tempo. Quindi una corretta strategia da seguire per evitare che le immagini vadano perse a causa di qualsiasi situazione. Se hai trucchi o suggerimenti per questo articolo, ci piacerebbe sentirli da te.

Spero che questo aiuti.


Linux
  1. Come rimuovere le macchine virtuali basate su KVM su Redhat Linux

  2. Come clonare macchine virtuali basate su KVM su Redhat Linux

  3. Come esportare e importare le impostazioni DNS in CloudFlare

  4. Quickemu – Esegui macchine virtuali Windows, macOS e Linux

  5. Come aggiungere memoria, vCPU, disco rigido alla macchina virtuale KVM Linux

Come installare KVM e creare macchine virtuali su Ubuntu 16.04 LTS

Come installare e configurare KVM su Ubuntu Linux

Come creare e gestire macchine virtuali in KVM

Come importare un'esportazione di macchine virtuali su Windows Server 2012

Come controllare la dimensione di file e directory su Linux

Come aumentare lo spazio su disco virtuale VM su VirtualBox e VMware