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.