jak zmienić nazwę maszyny wirtualnej za pomocą libvirt + KVM

24

Jak mogę zmienić nazwę maszyny wirtualnej na KVM + libvirt?

Chciałbym, aby zmieniła nazwę w „ekwipunku”, a także zmieniła nazwę magazynu itp.

Arthur Ulfeldt
źródło
3
po tym, jak zadałem to pytanie, świetni ludzie z projektu libvirt dodali polecenie „virsh edit my-vm-name”.
Arthur Ulfeldt

Odpowiedzi:

18

biegać

virsh dumpxml name_of_vm > name_of_vm.xml

Zdefiniuj stary vm, aby zapobiec błędowi z powodu zduplikowanego UUID.

virsh undefine name-of-vm

Edytuj plik xml, a następnie zaimportuj go.

virsh define name_of_vm.xml

Oczywiście będziesz musiał zatrzymać i uruchomić vm, aby zmiany odniosły skutek

virsh destroy name_of_vm
virsh start name_of_vm
topdog
źródło
5
muszę dodać jeden krok: (przed zdefiniowaniem vm z nową nazwą) „virsh undefine name-of-vm”, w przeciwnym razie narzeka na zduplikowany UUID.
Arthur Ulfeldt,
1
musiałem również zmienić nazwę pliku hd.img i edytować wiersz w pliku xml
Arthur Ulfeldt
Prawidłowa kolejność jest w drugiej odpowiedzi. Nie musisz zmieniać nazwy img, jeśli nie korzystasz ze starego komputera.
Nux
1
Ta odpowiedź jest teraz nieaktualna. Zobacz moją odpowiedź poniżej. tldr; virsh ma teraz nazwę domeny.
reedstrm
13

virshzaimplementowane domrenamew wersji 1.2.19: 02 września 2015. Tak więc obecna najlepsza praktyka to:

 virsh domrename oldname newname

Jak można się spodziewać, domena musi zostać zatrzymana, ale także nie może zawierać żadnych migawek.

reedstrm
źródło
+1 - możesz virsh edit newnamezmienić ścieżkę mv oldname newnamedo pliku i zmienić nazwę katalogu, jeśli chcesz, aby wszystko pasowało.
Wstrzymano do odwołania.
innymi słowy, musisz również 1) zmienić nazwę /var/lib/libvirt/images/oldname.qcow2 w /var/lib/libvirt/images/newname.qcow2; i 2) edytuj /etc/libvirt/qemu/newname.xml, aby ustawić poprawną balisę pliku źródłowego <plik źródłowy = '/ var / lib / libvirt / images / newname.qcow2'
MaxiReglisse
ale tylko wtedy, gdy potrzebujesz nazw plików pasujących do nazw domen (co przyznaję, jest to wygodne) - pozwala to uniknąć cyklu niszczenia / tworzenia, choć nadal wymaga zatrzymania (i żadnych migawek)
reedstrm
5

Aby zmienić wiele maszyn, możesz użyć tego:

virsh shutdown old-name

Poczekaj, aż powyżej zakończy się i uruchom:

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

Poczekaj, aż powyżej zakończy się i uruchom:

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

Uruchom to jeden po drugim dla każdej maszyny. Możesz użyć tego RegExp, jeśli masz listę zawierającą 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
źródło
0

Robię to trochę inaczej i może to być niezalecana metoda (nie jestem pewien).

virsh destroy old-vm virsh edit old-vm

W zmianie XML

  1. nazwa domeny old-vm na new-vm
  2. zmień znak / cyfrę w UUID zapisz i wyjdź.

virsh list --all

1 odcięcie old-vm

2 odcięcie new-vm

Teraz niezdefiniuj stary vm

virsh undefine old-vm

Sójka
źródło