全自动链接克隆KVM虚拟机
virt-clone这个命令是基于全克隆的,也就是拷贝虚拟磁盘文件和虚拟配置文件来实现的完整克隆,速度慢,占用空间多
kvm软件包中并没有实现全自动链接克隆的命令或工具,只能手动实现,于是我决定写一个脚本来搞定kvm虚拟机的自动链接克隆
想自动,先手动
手动克隆:
第一步:创建基于链接克隆的虚拟磁盘文件
第二步:修改xml配置文件
1)修改name虚拟机名称
2)删除uuid,导入之后会自动生成新的uuid
3)修改虚拟磁盘文件存储路径
4)删除mac地址,导入之后会自动生成新的mac地址
5)删除channel部分中带有source路径的行,如<source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-node1/org.qemu.guest_agent.0'/>
防止出现以下报错:
qemu-kvm: -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-vm1/org.qemu.guest_agent.0,server,nowait: Failed to bind socket: Permission denied
2016-10-20T02:20:11.713371Z qemu-kvm: -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-vm1/org.qemu.guest_agent.0,server,nowait: chardev: opening backend "socket" failed
第三步:导入要被克隆的虚拟机
第四步:测试启动
下面献上比较简陋的自动化脚本,看不下去的可自行完善。
#!/bin/bash
old_vm=$1
new_vm=$2
new_xml="/tmp/${new_vm}.xml"
virsh dumpxml $old_vm >$new_xml
old_disk=`grep qcow2 $new_xml|awk -F "'" '/source file/{print $2}'`
tmp_dir=`dirname $old_disk`
new_disk=${tmp_dir}/${new_vm}.qcow2
#1.创建基于链接克隆的虚拟磁盘文件
qemu-img create -f qcow2 -b $old_disk $new_disk
#2.修改xml配置文件
sed -i '/uuid/d' $new_xml
sed -i '/mac address/d' $new_xml
sed -i '2s#'$old_vm'#'$new_vm'#' $new_xml
sed -i 's#'$old_disk'#'$new_disk'#g' $new_xml
sed -i '/\/var\/lib\/libvirt\/qemu\/channel\/target/d' $new_xml
#3.导入要被克隆的虚拟机
virsh define $new_xml
#4.测试启动
virsh start $new_vm
评论已关闭