如何使用libvirt + KVM重命名VM


Answers:


18

virsh dumpxml name_of_vm > name_of_vm.xml

取消定义旧虚拟机,以防止由于重复的UUID而导致错误。

virsh undefine name-of-vm

编辑xml文件,然后将其导入。

virsh define name_of_vm.xml

当然,您必须停止并启动虚拟机才能使更改生效

virsh destroy name_of_vm
virsh start name_of_vm

5
需要添加一个步骤:(在使用新名称定义虚拟机之前)“ virsh undefine name-vm”,否则它将抱怨重复的UUID。
亚瑟·乌尔费尔特

1
我还必须重命名hd.img文件并在xml文件中编辑该行
Arthur Ulfeldt 2010年

正确的顺序在另一个答案中。如果您不使用旧计算机,则不必重命名img。
Nux 2012年

1
该答案现在已过期。请参阅下面的答案。tldr; virsh现在具有domrename。
reedstrm '16


13

virshdomrename在版本1.2.19:2015年9月2日实施。目前的最佳做法是:

 virsh domrename oldname newname

如您所料,该域必须停止,但不能有任何快照。


+ 1-如果希望所有内容匹配,则可以virsh edit newname更改文件路径mv oldname newname并重命名目录。
暂停,直到另行通知。

换句话说,您还必须1)在/var/lib/libvirt/images/newname.qcow2中重命名/var/lib/libvirt/images/oldname.qcow2;和2)编辑/etc/libvirt/qemu/newname.xml设置正确的源文件应答器<源文件= '的/ var / lib中/ libvirt的/图像/ 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

对每台计算机一一运行。如果您有一个包含old-name new-name以下内容的列表,则可以使用此RegExp :

([^\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新虚拟机关闭

现在取消定义旧虚拟机

virsh undefine old-vm

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.