Wie benenne ich eine VM mit libvirt + KVM um?

24

Wie kann ich eine VM unter KVM + libvirt umbenennen?

Ich möchte, dass es den Namen im "Inventar" sowie den Namen des Lagers usw. ändert.

Arthur Ulfeldt
quelle
3
Nachdem ich diese Frage gestellt hatte, haben die feinen Leute im libvirt-Projekt den Befehl 'virsh edit my-vm-name' hinzugefügt.
Arthur Ulfeldt

Antworten:

18

Lauf

virsh dumpxml name_of_vm > name_of_vm.xml

Heben Sie die Definition der alten VM auf, um einen Fehler aufgrund einer doppelten UUID zu vermeiden.

virsh undefine name-of-vm

Bearbeiten Sie die XML-Datei und importieren Sie sie.

virsh define name_of_vm.xml

Natürlich müssen Sie den VM anhalten und starten, damit die Änderungen wirksam werden

virsh destroy name_of_vm
virsh start name_of_vm
Platzhirsch
quelle
5
Es muss ein Schritt hinzugefügt werden: (bevor der VM mit dem neuen Namen definiert wird) "virsh undefine name-of-vm", andernfalls wird eine doppelte UUID beanstandet.
Arthur Ulfeldt
1
ich musste auch die hd.img datei umbenennen und die zeile in der xml datei bearbeiten
Arthur Ulfeldt
Die richtige Reihenfolge ist in der anderen Antwort. Sie müssen img nicht umbenennen, wenn Sie die alte Maschine nicht verwenden.
Nux
1
Diese Antwort ist nicht mehr aktuell. Siehe meine Antwort unten. tldr; virsh hat jetzt einen Domainnamen.
Reedstrm
13

virshimplementiert domrenamein Release 1.2.19: 02.09.2015. Die aktuelle Best Practice ist also nur:

 virsh domrename oldname newname

Wie zu erwarten, muss die Domain gestoppt werden, sie kann jedoch auch keine Snapshots enthalten.

reedstrm
quelle
+1 - Sie können virsh edit newnameden Dateipfad ändern und mv oldname newnamedas Verzeichnis umbenennen, wenn alles übereinstimmen soll.
Bis auf weiteres angehalten.
Mit anderen Worten, Sie müssen auch 1) /var/lib/libvirt/images/oldname.qcow2 in /var/lib/libvirt/images/newname.qcow2 umbenennen; und 2) bearbeiten /etc/libvirt/qemu/newname.xml , um den korrekten Quelldatei balise <source file = '/ var / lib / libvirt / images / newname.qcow2'
MaxiReglisse
aber nur, wenn die Dateinamen mit den Domainnamen übereinstimmen müssen (was ich zugeben muss, ist praktisch) - dies vermeidet einen Zerstörungs- / Erstellungszyklus, erfordert jedoch immer noch einen Stopp (und keine Snapshots)
reedstrm
5

Um viele Maschinen zu wechseln, können Sie dies verwenden:

virsh shutdown old-name

Warten Sie, bis der Vorgang abgeschlossen ist und führen Sie Folgendes aus:

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

Warten Sie, bis der Vorgang abgeschlossen ist und führen Sie Folgendes aus:

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

Führen Sie dies für jeden Computer einzeln aus. Sie können diesen RegExp verwenden, wenn Sie eine Liste haben, die Folgendes enthält 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
Nux
quelle
0

Ich mache es etwas anders und kann nicht empfohlene Methode sein (nicht sicher).

virsh destroy old-vm virsh edit old-vm

In der XML-Änderung

  1. Domainname old-vm zu new-vm
  2. Ändern Sie ein Zeichen / eine Ziffer in UUID save und beenden Sie das Programm.

virsh list --all

1 Old-VM-Abschaltung

2 neu-vm abschalten

Undefine jetzt das alte-vm

virsh undefine old-vm

Jay
quelle