як перейменувати VM за допомогою libvirt + KVM


24

Як я можу перейменувати VM на KVM + libvirt?

Я хотів би, щоб вона змінила назву в "інвентарі", а також змінила назву сховища тощо.


3
після того, як я задав це питання, прекрасні люди в проекті libvirt додали команду "virsh edit my-vm-name".
Артур Ульфельдт

Відповіді:


18

бігати

virsh dumpxml name_of_vm > name_of_vm.xml

Скасуйте старий vm для запобігання помилки через дублікат UUID.

virsh undefine name-of-vm

Відредагуйте файл XML, а потім імпортуйте його.

virsh define name_of_vm.xml

Звичайно, вам доведеться зупинити і запустити vm, щоб зміни набрали чинності

virsh destroy name_of_vm
virsh start name_of_vm

5
потрібно додати один крок: (перш ніж визначити vm з новою назвою) "virsh undefine name-of-vm", інакше він скаржиться на дублікат UUID.
Артур Ульфельдт

1
мені також довелося перейменувати файл hd.img і відредагувати рядок у файлі xml
Артур Ульфальд

Правильний порядок - в іншій відповіді. Вам не потрібно перейменовувати img, якщо ви не використовуєте стару машину.
Nux

1
Ця відповідь застаріла. Дивіться мою відповідь нижче. tldr; тепер virsh має domrename.
reedstrm


13

virshвпроваджено domrenameу випуску 1.2.19: 02 вересня 2015 року. Отже, найкраща практика є:

 virsh domrename oldname newname

Як ви могли очікувати, цей домен повинен бути припинений, але він також не може мати знімків.


+1 - ви можете virsh edit newnameзмінити шлях до файлу та mv oldname newnameперейменувати каталог, якщо ви хочете, щоб усе відповідало.
Призупинено до подальшого повідомлення.

іншими словами, ви також повинні 1) перейменувати /var/lib/libvirt/images/oldname.qcow2 в /var/lib/libvirt/images/newname.qcow2; та 2) відредагуйте /etc/libvirt/qemu/newname.xml, щоб встановити правильний балійний вихідний файл <source file = '/ var / lib / libvirt / images / newname.qcow2'
MaxiReglisse

але лише якщо вам потрібні назви файлів, щоб вони відповідали доменним іменам (що, я визнаю, зручно) - це дозволяє уникнути циклу знищення / створення, хоча все-таки вимагає зупинки (і без знімків)
reedstrm

5

Щоб змінити багато машин, ви можете скористатися цим:

virsh shutdown old-name

Зачекайте, коли вище закінчиться і запустіть:

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

Зачекайте, коли вище закінчиться і запустіть:

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

Запустіть це по одному для кожної машини. Ви можете використовувати цей RegExp, якщо у вас є список, що містить 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

Я роблю це трохи інакше, і це може бути нерекомендований метод (не впевнений).

virsh destroy old-vm virsh edit old-vm

У зміні XML

  1. доменне ім'я old-vm до new-vm
  2. зміни знаку / цифри в збереженні та виході з UUID.

virsh list --all

1 стареньке вимкнення

2 відключення нового vm

Тепер визначте старого-вм

virsh undefine old-vm

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.