一、完整克隆
宿主机必须在关机状态下才能进行克隆!
#宿主机关机 [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



