使用 ubuntu 20.04 作为 kvm 主机,使用 cloud-init 初始化客户机。这为我提供了一个可运行的客户机,并因此获得了一个映像链。为了简化备份过程并重新使用现有脚本,我想将映像链合并为一个文件。
初始配置
virsh domblklist test
Target Source
-----------------------------
vda test-rootfs.qcow2
hdd -
整合图像
virsh blockcommit test vda --verbose --pivot --active
Block commit: [100 %]
Successfully pivoted
结果
virsh domblklist test
Target Source
------------------------------------------
vda /data/libvirt/disk-images/test
hdd -
这是预期结果。每当我关闭虚拟机并重新启动时,映像配置都会更改为:
virsh domblklist test
Target Source
-----------------------------
vda test-rootfs.qcow2
hdd -
并且不再使用合并的图像,而是再次使用原始图像链...->我的问题:为什么?
BR,谢谢你的提示
//编辑:
我已在客户机中禁用 cloud-init,然后禁用 shudtown/start 程序。
这是差异,比较块提交之后和关闭/启动域之后(使用 virsh dumpxml)。
$ diff 0_blockcommit 1_shutdown_start
1c1
< <domain type='kvm' id='8'>
---
> <domain type='kvm' id='9'>
32c32
< <disk type='file' device='disk'>
---
> <disk type='volume' device='disk'>
34,35c34,39
< <source file='/data/libvirt/pools/disk-images/test.qcow2' index='3'/>
< <backingStore/>
---
> <source pool='disk-images' volume='test-rootfs.qcow2' index='2'/>
> <backingStore type='file' index='3'>
> <format type='qcow2'/>
> <source file='/data/libvirt/pools/disk-images/test.qcow2'/>
> <backingStore/>
> </backingStore>
42c46,47
< <source index='4'/>
---
> <source file='/data/libvirt/pools/disk-images/test.iso' index='1'/>
> <backingStore/>
89c94
< <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-8-test/org.qemu.guest_agent.0'/>
---
> <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-9-test/org.qemu.guest_agent.0'/>
答案1
解决方法:
DOMAIN_NAME="test"
## save xml and remove domain
#
virsh dumpxml ${DOMAIN_NAME} > ${DOMAIN_NAME}.xml
virsh undefine ${DOMAIN_NAME}
virsh shutdown ${DOMAIN_NAME}
## redefine domain and start again
#
virsh define ${DOMAIN_NAME}.xml
virsh start ${DOMAIN_NAME}
在 libvirt 项目上创建了一张票:https://gitlab.com/libvirt/libvirt/-/issues/240