Come posso spostare di host una VM?

Per chi è conosce VMware o VirtualBox resta decisamente spiazzato con KVM anche se usa l'intervaccia grafica "Virtual Machine Manager" che rendo tutto intuitivo e semplice come le altre due soluzioni.

Naturalmente stiamo parlando di una installazione desktop. Nelle installazioni "server farm" i tool di gestione prevedono questo ed altro.

E' possibile, ma dobbiamo procedere in modo più artigianale sia nell'aexport, sia nell'import. Ecco come fare.


Panoramica

Vogliamo trasferire-copiare la VM "VM-001" dal PC "MioPC1" a "MioPC2". I PC, in questo caso, per KVM sono gli Host.
Il trasferimento-copia lo vogliamo fare tramite una pendrive su cui copiare la VM.
Entrambi gli host sono con hardware uguale, e sono dotati dello stesso ambiente KVM+qemu, con console "Virtual Machine Manager" e Linux Mint 21 come OS.

Nota: KVM insieme a Qemu permettono, contemporaneamente, sia di virtualizzare, sia di emulare. In ogni caso se le nostre VM sono configurate per comunicare direttamente con hardware specifico connesso e/o integrato nell'host questo non viene migrato in nessun modo.
Pertanto la migrazioni delle VM è indicato per VM generiche o che fungono da "bolle software".


Esport

  • Autentichiamoci nell'host "MioPC1" con un utente amministratore della virtualizzazione (=è nel gruppo "libvirt" o "libvirtd");
  • assicurarsi che la VM da esportare sia stoppata;
  • aprire un terminale (da tastiera CTRL+ALT+T);
  • creiamo una directory dove mettere l'export della VM;

mkdir VM-001
cd VM-001

  • estraiamo la definizione della VM con il comando dumpxml vm_name > file_name.xml

virsh dumpxml VM-001 > VM-001.xml

- individuiamo e copiamo l'immagine della VM con il domando virsh domblklist vm_name
  NB: normalmente servono i diritti di root per copia il file immagine

virsh domblklist VM-001
 Target   Source
--------------------------------------
 vda      /var/lib/libvirt/images/VM-001.qcow2
 sda      -

sudo cp /var/lib/libvirt/images/VM-001.qcow2 ./

  • comprimiamo la directory per ottenere un file unico (e un po' più piccolo)

cd ..
zip -9 -r VM-001.zip VM-001

Il nostro file per l'esportazione pronto! Copiamolo su una pendrive o su un altro sistema per copiarlo sul "MioPC2".


Import

  • Autentichiamoci nell'host "MioPC2" con un utente amministratore della virtualizzazione (=è nel gruppo "libvirt" o "libvirtd");
  • copiamo il file VM-001.zip nella home o in una directory a piacimento ed estraiamolo. Otterremo la directory VM-001 che contiene i file VM-001.xml e VM-001.qcow2;
  • aprire un terminale (da tastiera CTRL+ALT+T);
  • posizioniamoci nella directory VM-001

cd VM-001

  • copia il file immagine nello store di libvirt

sudo cp VM-001.qcow2 /var/lib/libvirt/images/

  • importiamo la definizione della VM con il comando virsh define file_name.xml

virsh define VM-001.xml

VM importata! Ora la possimo comodamente lanciare dalla console "Virtual Machine Manager" o da CLI con il comando virsh start VM-001 .


Note finali

Molti elementi, come i percorsi dei file, sono variabili che possiamo manipolare.
Un toccasana, soprattutto nell'importazione, è controllare ed eventualmente correggere l'xml .