libvirt保持虚拟机运行情况下修改名称

通过virsh list命令能看到虚拟机的列表:

[root@compute2 ~]# virsh list
Id 名称 状态
----------------------------------------------------
60 instance-00000050 running
64 instance-00000054 running

这里要修改的是第二列, 虚拟机的名称。

 

步骤:

1.查看虚拟机信息:

[root@compute2 ~]# virsh dominfo 64
Id: 64
名称: instance-00000054
UUID: 870b83a2-3c93-4244-8d4e-385268325e88
OS 类型: hvm
状态: running
CPU: 4
CPU 时间: 12.2s
最大内存: 65536 KiB
使用的内存: 65536 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

 

注意虚拟机信息中的“持久:”项,这里值为“是”,所以在修改完成后, 需要定义一下虚拟机的xml,执行步骤4

如果不是,可以跳过步骤4。

 

2.修改xml信息:

[root@compute2 ~]# vim /var/run/libvirt/qemu/instance-00000054.xml

... ...

<libDir path='/var/lib/libvirt/qemu/domain-64-instance-00000054'/>
<channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-64-instance-00000054'/>
<domain type='kvm' id='64'>
<name>instance-00000054</name>
<uuid>870b83a2-3c93-4244-8d4e-385268325e88</uuid>
<metadata>

... ...

修改为:

... ...

<libDir path='/var/lib/libvirt/qemu/domain-64-instance-00000054'/>
<channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-64-instance-00000054'/>
<domain type='kvm' id='64'>
<name>instance-00000054-rename</name>
<uuid>870b83a2-3c93-4244-8d4e-385268325e88</uuid>
<metadata>

... ...

保存,退出。

 

3.重启libvirtd服务:

[root@compute2 ~]# systemctl restart libvirtd
[root@compute2 ~]# virsh list
Id 名称 状态
----------------------------------------------------
60 instance-00000050 running
64 instance-00000054-rename running

可以看到虚拟机的名字已经被修改了。

 

4.将虚拟机的持久状态修改为“是”:

查看虚拟机的信息:

[root@compute2 ~]# virsh dominfo 64
Id: 64
名称: instance-00000054-rename
UUID: 870b83a2-3c93-4244-8d4e-385268325e88
OS 类型: hvm
状态: running
CPU: 4
CPU 时间: 21.4s
最大内存: 65536 KiB
使用的内存: 65536 KiB
持久: 否
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

 

可以看到, 这里虚拟机信息“持久:”值为“否”, 与修改前不一致,所以定义一下这个虚拟机:

cp /etc/libvirt/qemu/instance-00000054.xml  /etc/libvirt/qemu/instance-00000054-rename.xml

vim  /etc/libvirt/qemu/instance-00000054-rename.xml

<domain type='kvm'>
<name>instance-00000054</name>

... ...

修改为:

<domain type='kvm'>
<name>instance-00000054-rename</name>

... ...

[root@compute2 ~]# virsh define /etc/libvirt/qemu/instance-00000054-rename.xml

 

再次查看虚拟机状态:

[root@compute2 ~]# virsh dominfo 64
Id: 64
名称: instance-00000054-rename
UUID: 870b83a2-3c93-4244-8d4e-385268325e88
OS 类型: hvm
状态: running
CPU: 4
CPU 时间: 21.4s
最大内存: 65536 KiB
使用的内存: 65536 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

 

5.删除没用的文件:

rm -rf /etc/libvirt/qemu/instance-00000054.xml

rm -rf /var/run/libvirt/qemu/instance-00000054.* 

 

 

原理:

libvirtd守护进程在启动的时候, 会通过 /var/run/libvirt/qemu/目录下的xml文件,加载正在运行的虚拟机配置到内存中。

所以这里直接修改该目录下的相应虚拟机的配置信息,重启libvirtd后,修改的配置就加载到libvirtd的内存中了。

 

引申:

猜测虚拟机的其它内存中的配置信息,也可以通过这种方式进行修改,包括uuid等部分配置信息。

 

存在问题:

这个步骤在openstack环境下有一个问题,按照步骤修改完成后,通过openstack删除这个虚拟机会失败,nova-compute的日志

会报错误,这里猜测是修改的步骤不完善,导致这里出错,具体的原因在需要的时候再track nova-compute的错误,找到需要完善的地方。
原文地址:https://www.cnblogs.com/gushiren/p/9591110.html