come rinominare una VM usando libvirt + KVM


24

Come posso rinominare una VM su KVM + libvirt?

Vorrei che cambiasse il nome nell '"inventario" e cambiasse il nome della memoria ecc.


3
dopo che ho posto questa domanda, le brave persone del progetto libvirt hanno aggiunto il comando 'virsh edit my-vm-name'.
Arthur Ulfeldt,

Risposte:


18

correre

virsh dumpxml name_of_vm > name_of_vm.xml

Annulla la definizione della vecchia VM per impedire un errore a causa di un UUID duplicato.

virsh undefine name-of-vm

Modifica il file xml quindi importalo.

virsh define name_of_vm.xml

Ovviamente dovrai interrompere e avviare la VM per rendere effettive le modifiche

virsh destroy name_of_vm
virsh start name_of_vm

5
è necessario aggiungere un passaggio: (prima di definire il vm con il nuovo nome) "virsh undefine name-of-vm", altrimenti si lamenta di UUID duplicato.
Arthur Ulfeldt,

1
ho anche dovuto rinominare il file hd.img e modificare la riga nel file xml
Arthur Ulfeldt

L'ordine corretto è nell'altra risposta. Non è necessario rinominare img se non si utilizza la vecchia macchina.
Nux,

1
Questa risposta non è più aggiornata. Vedi la mia risposta qui sotto. TLDR; virsh ora ha domrename.
reedstrm,


13

virshimplementato domrenamenella versione 1.2.19: 02 settembre 2015. Quindi l'attuale best practice è solo:

 virsh domrename oldname newname

Come ci si potrebbe aspettare, Thedomain deve essere fermato, ma non può avere nessuna istantanea.


+1: è possibile virsh edit newnamee modificare il percorso del file e mv oldname newnamerinominare la directory se si desidera che tutto corrisponda.
In pausa fino a nuovo avviso.

in altre parole, devi anche 1) rinominare /var/lib/libvirt/images/oldname.qcow2 in /var/lib/libvirt/images/newname.qcow2; e 2) modifica /etc/libvirt/qemu/newname.xml per impostare il corretto balise del file sorgente <file sorgente = '/ var / lib / libvirt / images / newname.qcow2'
MaxiReglisse

ma solo se hai bisogno che i nomi dei file corrispondano ai nomi di dominio (che lo ammetto, è conveniente) - questo evita un ciclo di distruzione / creazione, anche se richiede ancora un arresto (e nessuna istantanea)
reedstrm

5

Per cambiare molte macchine puoi usare questo:

virsh shutdown old-name

Attendere il termine di cui sopra ed eseguire:

virsh dumpxml old-name > old-name.xml
virsh undefine old-name

Attendere il termine di cui sopra ed eseguire:

sed -i 's/<name>old-name<\/name>/<name>new-name<\/name>/g' old-name.xml
virsh define old-name.xml

Eseguire questo uno per uno per ogni macchina. È possibile utilizzare questo RegExp se si dispone di un elenco contenente old-name new-name:

([^\r\n]+?)[ \t]+([^\r\n]+)
virsh shutdown $1\n#WAIT!\nvirsh dumpxml $1 > $1.xml\nvirsh undefine $1\n\#WAIT!\nsed -i 's/<name>$1<\\/name>/<name>$2<\\/name>/g' $1.xml\nvirsh define $1.xml\n

0

Lo faccio in modo leggermente diverso e potrebbe essere un metodo non raccomandato (non sono sicuro).

virsh destroy old-vm virsh edit old-vm

Nella modifica XML

  1. nome di dominio da old-vm a new-vm
  2. cambia un carattere / cifra in UUID salva ed esci.

virsh list --all

1 vecchio spegnimento vm

2 new-vm shut-off

Ora definisci il vecchio vm

virsh undefine old-vm

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.