一、完整克隆
宿主机必须在关机状态下才能进行克隆!
#宿主机关机 [root@kvm /opt]# virsh shutdown web01 Domain web01 is being shutdown #克隆 # --auto-clone 从宿主机中获得配置信息 # -o 指定宿主机名称 # -n 指定新的虚拟机名称 [root@kvm /opt]# virt-clone --auto-clone -o web01 -n web03 Allocating 'web03.qcow2' | 10 GB 00:01:25 Clone 'web03' created successfully. #查看克隆后的虚拟机 [root@kvm /opt]# virsh list --all Id Name State ---------------------------------------------------- - web01 shut off - web03 shut off #开机 [root@kvm /opt]# virsh start web03 Domain web03 started #连接克隆后的虚拟机 [root@kvm /opt]# virsh console web03 Connected to domain web03 Escape character is ^] CentOS Linux 7 (Core) Kernel 3.10.0-957.el7.x86_64 on an x86_64 kvm login: root Password: Last login: Thu Jul 30 21:55:35 on ttyS0
脚本完整克隆
[root@kvm01 /opt]# cat complete_link.sh #!/bin/bash #定义变量 Old_name=$1 New_name=$2 #判断环境变量的个数 if [ $# -ne 2 ];then echo "Usage: sh $0 Old_Name New_Name" exit fi #关闭源客户机 virsh shutdown $Old_name &>/dev/null && sleep 3 #判断源客户机是否关机 virsh list | grep "$Old_name" &>/dev/null if [ $? -eq 0 ];then echo -e "\033[31m 客户机关闭失败,尝试强制关机 \033[0m" virsh destroy $Old_name fi #进行完整克隆 virt-clone --auto-clone -o $Old_name -n $New_name if [ $? -ne 0 ];then echo -e "\033[31m 完整克隆失败!\033[0m" exit fi #启动测试 virsh start $New_name &>/dev/null if [ $? -ne 0 ];then echo -e "\033[31m 启动${New_Name}失败 \033[0m" exit fi #console登录测试 virsh console $New_name
二、链接克隆
#1. 创建一个基于链接克隆的虚拟磁盘文件 [root@kvm /opt]# qemu-img create -f qcow2 -b web01.qcow2 web04.qcow2 Formatting 'web04.qcow2', fmt=qcow2 size=10737418240 backing_file='web01.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off [root@kvm /opt]# ll -h -rw-r--r-- 1 root root 193K Jul 31 10:55 web04.qcow2 #2.导出源客户机的配置信息 [root@kvm /opt]# virsh dumpxml web01 > web04.xml #3.修改配置信息 [root@kvm /opt]# vim web04.xml #在文件第2行,修改克隆后的虚拟机名称<name>web04</name> #在文件第3行,删除UUID一行 #大概在42行,修改克隆后的文件名称<source file='/opt/web04.qcow2'/> #大概在75行, 删除mac地址 #4.导入配置 [root@kvm /opt]# virsh define web04.xml Domain web04 defined from web04.xml [root@kvm /opt]# virsh list --all Id Name State ---------------------------------------------------- - web04 shut off [root@kvm /opt]# ll -h /etc/libvirt/qemu/web04.xml -rw------- 1 root root 4.3K Jul 31 11:08 /etc/libvirt/qemu/web04.xml #5.登录测试 [root@kvm /opt]# virsh start web04 Domain web04 started [root@kvm /opt]# virsh console web04 Connected to domain web04 Escape character is ^] CentOS Linux 7 (Core) Kernel 3.10.0-957.el7.x86_64 on an x86_64 kvm login: root Password: Last login: Thu Jul 30 21:55:35 on ttyS0 [root@kvm ~]#
脚本链接克隆
[root@kvm01 /opt]# cat link_clone.sh #!/bin/bash #定义变量 Old_name=$1 New_name=$2 #判断环境变量的个数 if [ $# -ne 2 ];then echo "Usage: sh $0 Old_Name New_Name" exit fi #关闭源客户机 virsh shutdown $Old_name &>/dev/null && sleep 3 #判断源客户机是否关机 virsh list | grep "$Old_name" &>/dev/null if [ $? -eq 0 ];then echo -e "\033[31m 客户机关闭失败,尝试强制关机 \033[0m" virsh destroy $Old_name fi #导出源客户机的配置信息 virsh dumpxml $Old_name > /opt/${New_name}.xml if [ $? -ne 0 ];then echo -e "\033[31m 配置文件导出失败!\033[0m" fi #创建一个基于源客户机磁盘的磁盘文件 qemu-img create -f qcow2 -b /opt/${Old_name}.qcow2 /opt/${New_name}.qcow2 &>/dev/null if [ $? -ne 0 ];then echo -e "\033[31m 链接克隆失败!\033[0m" exit fi #修改配置信息 sed -i "s#$Old_name#$New_name#g" /opt/${New_name}.xml if [ $? -ne 0 ];then echo -e "\033[31m 重命名失败! \033[0m" exit fi sed -ri '/uuid|mac address/d' /opt/${New_name}.xml if [ $? -ne 0 ];then echo -e "\033[31m uuid及mac地址删除失败! \033[0m" exit fi #导入配置信息 virsh define /opt/${New_name}.xml &>/dev/null if [ $? -ne 0 ];then echo -e "\033[31m 配置文件信息导入失败! \033[0m" exit fi #启动测试 virsh start $New_name &>/dev/null if [ $? -ne 0 ];then echo -e "\033[31m 启动${New_Name}失败 \033[0m" exit fi #console登录测试 virsh console $New_name