как переименовать виртуальную машину используя libvirt + KVM

24

Как я могу переименовать виртуальную машину в 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

Конечно, вам придется остановиться и запустить виртуальную машину, чтобы изменения вступили в силу.

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; Вирш теперь имеет домренам.
Reedstrm
13

virshреализован domrenameв выпуске 1.2.19: 02 сентября 2015 г. Таким образом, текущая лучшая практика такова:

 virsh domrename oldname newname

Как и следовало ожидать, домен должен быть остановлен, но он также не может иметь никаких снимков.

reedstrm
источник
+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
Nux
источник
0

Я делаю это немного по-другому и, возможно, не рекомендуется (не уверен).

virsh destroy old-vm virsh edit old-vm

В изменении XML

  1. доменное имя от старого vm до нового vm
  2. изменить символ / цифру в UUID сохранить и выйти.

virsh list --all

1 отключение старой виртуальной машины

2 new-vm отключение

Теперь неопределите старый-VM

virsh undefine old-vm

сойка
источник