linux虚拟机如何批量克隆,KVM虚拟机快速克隆脚本(Linux7版本)

这个脚本适合批量创建虚拟机,使用时请根据实际情况进行修改

# vim base_vm.sh

7 # 56 -> user input is not a number

8 # 57 -> user input out of range

9 # 58 -> vm disk image exits

10

11 IMG_DIR=/var/lib/libvirt/images

14 if [ $VMNUM -le 9 ];then

15 VMNUM=0$VMNUM

16 fi

17

18 if [ -z "${VMNUM}" ];then

19 echo "You nust input a number."

20 exit 55

21 elif [ ${VMNUM} = ~[a-z] ];then

22 echo "You must input a number."

23 exit 56

24 elif [ ${VMNUM} -lt 1 -o ${VMNUM} -gt 99 ];then

25 echo "Input out of range."

26 exit 57

27 fi

1 #!/bin/bash

3 #该脚本使用qemu-img命令快速创建快照虚拟机

7 # 56 -> user input is not a number

8 # 57 -> user input out of range

9 # 58 -> vm disk image exits

10

11 IMG_DIR=/var/lib/libvirt/images

14 if [ $VMNUM -le 9 ];then

15 VMNUM=0$VMNUM

16 fi

17

18 if [ -z "${VMNUM}" ];then

19 echo "You nust input a number."

20 exit 55

21 elif [ ${VMNUM} = ~[a-z] ];then

22 echo "You must input a number."

23 exit 56

24 elif [ ${VMNUM} -lt 1 -o ${VMNUM} -gt 99 ];then

25 echo "Input out of range."

26 exit 57

27 fi

28

29 NEWVM=rh7_node${VMNUM}

30

31 if [ -e $IMG_DIR/${VMNUM}.img ];then

32 echo "File exists."

33 exit 58

34 fi

35

36 echo -en "Great Virtual Machine disk image......\t"

37 qemu-img create -f qcow2 -b $IMG_DIR/.${BASEVM}.img $IMG_DIR/$ {NEWVM}.img &>/dev/null

38 echo -e "\3[32;1m[OK]\e[0m"

39

40 #创建配置文件并修改 virsh dumpxml ${BASEVM} > /tmp/myvm.xml

41 cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml

42 sed -i "/${BASEVM}/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml

43 sed -i "/uuid/s/.*/$(uuidgen)/" /tmp /myvm.xml

44 sed -i "/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml

45

46 #修改MAC地址,本例子使用的是常量,可以根据实际情况进行修改

47 sed -i "/mac/s/a1/0c/" /tmp/myvm.xml

48

49 echo -en "Defining new virtual machine......\t\t"

50 virsh define /tmp/myvm.xml &>/dev/null

51 echo -e "\e[32;1m[OK]\e[0m"

还有一版是我用于敲实验时用的阉割版,脚本能快速写完但需要提前准备一些模板

#which base-vm7

/usr/bin/base-vm7

# cat /usr/bin/base-vm7

#!/bin/bash

IMG_DIR=/var/lib/libvirt/images

BASEVM1=rhel7.qcow2

XML_DIR=/etc/libvirt/qemu #这里的xml启动文件要提前把uuid删除作为模板,因为uuid的唯一的。要不然虚拟机启动不起来

BASEVM2=node

read -p "Enter VM NAME: " VMNAME #这里直接输入需要虚拟机的名字,做实验时好做区别

#创建磁盘系统

echo -en "Create virtual Machine disk image.....\t"

qemu-img create -f qcow2 -b $IMG_DIR/$BASEVM1 $IMG_DIR/${VMNAME}.img &> /dev/null

echo -e " \e[32;1m[OK]\e[0m"

#复制配置启动文件

cat ${XML_DIR}/.node.xml > ${XML_DIR}/${VMNAME}.xml

sed -i "s/${BASEVM2}/${VMNAME}/" ${XML_DIR}/${VMNAME}.xml

#创建虚拟机

echo -en "Defining new virtual machine $VMNAME ......\t\t"

virsh define ${XML_DIR}/${VMNAME}.xml &> /dev/null

echo -e " \e[32;1m[OK]\e[0m"

给大家展示下我用的版本吧

# base-vm7

Enter VM NAME: test

Create virtual Machine disk image..... [OK]

Defining new virtual machine test ...... [OK]

# virsh list --all

Id 名称 状态

----------------------------------------------------

1 mysql running

2 mysql_1 running

3 mysql_2 running

- test 关闭

# virsh start test

这个阉割版随时都可以整一个,快速方便实验用。而上边的完成版还是适合批量克隆用。