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.


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

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.


+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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.