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.


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

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.


+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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.