手把手带你编写全自动链接克隆虚拟机脚本

本文出自老男孩教育大神讲师---oldqiang

1:分析脚本的目的

由于没有自动化链接克隆的工具,于是有了此脚本,该脚本的主要功能,实现全自动链接克隆!
脚本要求支持传入两个参数,一个老虚拟机名称和一个新虚拟机名称

2:任务拆解

a:生成虚拟机磁盘文件
qemu-img create -f qcow2 -b 49-web03.qcow2 49-web04.qcow2

b:生成虚拟机的配置文件

virsh dumpxml web01 >web03.xml
vim web03.xml
#修改虚拟机的名字
<name>web03</name>
#删除虚拟机uuid
<uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid>
#删除mac地址
<mac address='52:54:00:4e:5b:89'/>
#修改磁盘路径
<source file='/opt/web03.qcow2'/>

c:导入虚拟机并进行启动测试

virsh define web03.xml
virsh start web03

版本1:不支持传参

#!/bin/bash

#a:生成虚拟机磁盘文件
qemu-img create -f qcow2 -b /data/web02.qcow2  /data/test.qcow2

#b:生成虚拟机的配置文件
virsh dumpxml web02 >/tmp/test.xml
#修改虚拟机的名字
sed -ri 's#(<name>)(.*)(</name>)#\1test\3#g' /tmp/test.xml
#删除虚拟机uuid
sed -i '/<uuid>/d' /tmp/test.xml
#删除mac地址
sed -i '/<mac address/d' /tmp/test.xml
#修改磁盘路径
sed -ri "s#(<source file=')(.*)('/>)#\1/data/test.qcow2\3#g" /tmp/test.xml

#c:导入虚拟机并进行启动测试
virsh define /tmp/test.xml
virsh start test

版本2: 支持传一个参数

#!/bin/bash
new_vm=$1
#a:生成虚拟机磁盘文件
qemu-img create -f qcow2 -b /data/web02.qcow2  /data/${new_vm}.qcow2

#b:生成虚拟机的配置文件
virsh dumpxml web02 >/tmp/${new_vm}.xml
#修改虚拟机的名字
sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml
#删除虚拟机uuid
sed -i '/<uuid>/d' /tmp/${new_vm}.xml
#删除mac地址
sed -i '/<mac address/d' /tmp/${new_vm}.xml
#修改磁盘路径
sed -ri "s#(<source file=')(.*)('/>)#\1/data/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml

#c:导入虚拟机并进行启动测试
virsh define /tmp/${new_vm}.xml
virsh start ${new_vm}

版本3:支持传两个参数

#!/bin/bash
old_vm=$1
new_vm=$2
#a:生成虚拟机磁盘文件
old_disk=`virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'`
disk_tmp=`dirname $old_disk`
qemu-img create -f qcow2 -b $old_disk  ${disk_tmp}/${new_vm}.qcow2

#b:生成虚拟机的配置文件
virsh dumpxml $old_vm >/tmp/${new_vm}.xml

#修改虚拟机的名字
sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml
#删除虚拟机uuid
sed -i '/<uuid>/d' /tmp/${new_vm}.xml
#删除mac地址
sed -i '/<mac address/d' /tmp/${new_vm}.xml
#修改磁盘路径
sed -ri "s#(<source file=')(.*)('/>)#\1${disk_tmp}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml

#c:导入虚拟机并进行启动测试
virsh define /tmp/${new_vm}.xml
virsh start ${new_vm}

版本4:脚本可以进一步优化

添加老虚拟机是否存在的if判断,和/tmp是否可以写入的判断!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 一、了解虚拟化二、常见虚拟化软件三、虚拟化架构四、KVM介绍五、Centos7上安装KVM六、配置网卡七、创...
    XiaoMing丶阅读 6,492评论 0 0
  • 一、基础命令 列表list(--all) 开机start 关机shutdown 强制关机destroy 重启 re...
    不知道就阅读 1,273评论 0 0
  • 虚拟化技术概览KVM简介KVM的管理操作 一、虚拟化技术概览 (一)虚拟化技术类型: 主机虚拟化:xen, kvm...
    哈喽别样阅读 1,863评论 0 5
  • 一.虚拟化技术的介绍 (1)虚拟化技术类型: 1.主机虚拟化:xen,kvm.virtualbox.openv2....
    楠人帮阅读 2,016评论 0 5
  • 一.虚拟机的创建 1.添加镜像到本地(利用rz命令) mkdir /iso上传镜像到/iso下,PS:虚拟机创建镜...
    平_方阅读 2,283评论 0 0