• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

Kvm虚拟化——虚拟机克隆管理【显哥出品,必为精品】

Kvm lixian 4年前 (2020-07-31) 1384次浏览 1个评论 扫描二维码
文章目录[隐藏]

一、完整克隆


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

本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:Kvm虚拟化——虚拟机克隆管理【显哥出品,必为精品】
喜欢 (0)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽
  1. Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?