como renomear uma VM usando libvirt + KVM

24

Como posso renomear uma VM no KVM + libvirt?

Gostaria que ele mudasse o nome no 'inventário', bem como o nome do armazenamento, etc.

Arthur Ulfeldt
fonte
3
depois que eu fiz essa pergunta, o pessoal do projeto libvirt adicionou o comando 'virsh edit my-vm-name'.
Arthur Ulfeldt 29/11

Respostas:

18

corre

virsh dumpxml name_of_vm > name_of_vm.xml

Defina a vm antiga para evitar um erro devido a um UUID duplicado.

virsh undefine name-of-vm

Edite o arquivo xml e importe-o.

virsh define name_of_vm.xml

Claro que você terá que parar e iniciar o vm para que as alterações entrem em vigor

virsh destroy name_of_vm
virsh start name_of_vm
melhor cão
fonte
5
é necessário adicionar uma etapa: (antes de definir a vm com o novo nome) "virsh indefinir o nome da vm", caso contrário, ele reclama de duplicação de UUID.
Arthur Ulfeldt
1
Eu também tive que mudar o nome do arquivo hd.img e editar a linha no arquivo xml
Arthur Ulfeldt
A ordem correta está na outra resposta. Você não precisa renomear img se não usar a máquina antiga.
Nux
1
Esta resposta está desatualizada. Veja minha resposta abaixo. tldr; O virsh agora tem domrename.
reedstrm 2/09/16
13

virshimplementado domrenamena versão 1.2.19: 02 de setembro de 2015. Portanto, a melhor prática atual é apenas:

 virsh domrename oldname newname

Como seria de esperar, o domínio deve ser parado, mas também não pode ter nenhum instantâneo.

reedstrm
fonte
+1 - você pode virsh edit newnamealterar o caminho do arquivo e mv oldname newnamerenomear o diretório se desejar que tudo corresponda.
Pausado até novo aviso.
em outras palavras, você também precisa 1) renomear /var/lib/libvirt/images/oldname.qcow2 em /var/lib/libvirt/images/newname.qcow2; e 2) edite o /etc/libvirt/qemu/newname.xml para definir o equilíbrio correto do arquivo de origem <arquivo de origem = '/ var / lib / libvirt / images / newname.qcow2'
MaxiReglisse
mas apenas se você precisar que os nomes dos arquivos correspondam aos nomes de domínio (o que eu admito, é conveniente) - isso evita um ciclo de destruição / criação, embora ainda exija uma parada (e não instantâneos)
reedstrm
5

Para alterar muitas máquinas, você pode usar isso:

virsh shutdown old-name

Aguarde o processo acima terminar e executar:

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

Aguarde o processo acima terminar e executar:

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

Execute este um por um para cada máquina. Você pode usar este RegExp se você tiver uma lista contendo 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
fonte
0

Faço isso de maneira um pouco diferente e pode ser um método não recomendado (não tenho certeza).

virsh destroy old-vm virsh edit old-vm

Na mudança XML

  1. nome de domínio old-vm para new-vm
  2. altere um caractere / dígito em UUID para salvar e sair.

virsh list --all

1 desligamento da antiga vm

2 desligamento da nova vm

Agora, defina o old-vm

virsh undefine old-vm

Jay
fonte