这个脚本适合批量创建虚拟机,使用时请根据实际情况进行修改
# 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
这个阉割版随时都可以整一个,快速方便实验用。而上边的完成版还是适合批量克隆用。