跳到主要内容

11、使用kvm批量创建虚拟机脚本

2020.11.20-使用kvm批量创建虚拟机脚本

(仅收藏)

http://blog.mykernel.cn/2021/01/13/kvm%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%93%8D%E4%BD%9C/

image-20240401123050513

脚本位置:

https://onedayxyy.cn/scripts/safe_clone_kvm/safe_clone_kvm.sh

safe_clone_kvm.sh

[root@docusaurus-wiki safe_clone_kvm]#cat safe_clone_kvm.sh 
#!/bin/bash
#
#********************************************************************
#Author: songliangcheng
#QQ: 2192383945
#Date: 2020-11-20
#FileName: kvm.sh
#URL: http://www.magedu.com
#Description: A test toy
#Copyright (C): 2020 All rights reserved
#********************************************************************




# 默认配置
DISK_SOURCE_PATH=/var/lib/libvirt/images/centos7-2003-template-1C1G.qcow2
DISK_PATH=/var/lib/libvirt/images/xxx.qcow2
DISK_SIZE=10G
VIRT_TYPE=kvm
NAME=vm1
RAM=512
VCPUS=1
CDROM=/usr/local/src/xxx.iso
BRIDGE1=
BRIDGE2=

##############

trap 'echo -e "\n退出前操作\nerror line: $LINENO,error cmd: $BASH_COMMAND\n ${USAGE}"; rm -fr $DISK_PATH; virsh shutdown $NAME; virsh undefine $NAME' ERR

USAGE="
使用帮助:
${0##*/} -i 模板路径 -d 目标磁盘路径 -t 类型 -n 虚拟机名称 -r 内存大小MB -v CPU核心数 -b 网卡名 [-f 网卡名]
使用示例: ${0##*/} -i /var/lib/libvirt/images/centos7-2003-template-1C1G.qcow2 -d /var/lib/libvirt/images/xxx.qcow2 -t kvm|qemu -n vm1 -r 512 -v 1 -b br0 -f br1"
die() {
[ "$#" -eq 0 ] || echo "$*" >&2
exit 1
}
err() {
echo "$*" >&2
}


while getopts "i:d:s:t:n:r:v:c:b:f:" opt
do
case $opt in
i)
DISK_SOURCE_PATH=${OPTARG}
;;
d)
DISK_PATH=${OPTARG}
;;
s)
DISK_SIZE=${OPTARG}
;;
t)
VIRT_TYPE=${OPTARG}
;;
n)
NAME=${OPTARG}
;;
r)
RAM=${OPTARG}
;;
v)
VCPUS=${OPTARG}
;;
c)
CDROM=${OPTARG}
;;
b)
BRIDGE1=${OPTARG}
;;
f)
BRIDGE2=${OPTARG}
;;
?)
die "$USAGE"
;;
esac
done

[ -n "$BRIDGE2" -a -n "$BRIDGE1" ] && NETOPTS="--network bridge=$BRIDGE1 --network bridge=$BRIDGE2"
[ -n "$BRIDGE2" -a -z "$BRIDGE1" ] && NETOPTS="--network bridge=$BRIDGE2"
[ -z "$BRIDGE2" -a -n "$BRIDGE1" ] && NETOPTS="--network bridge=$BRIDGE1"
[ -z "$BRIDGE2" -a -z "$BRIDGE1" ] && die "$USAGE"


if [ -f $DISK_PATH ]; then
err "$DISK_PATH 磁盘路径已经存在, 不能创建"
die "$USAGE"
else
install -dv $(dirname $DISK_PATH)
fi

if virsh list --all | grep -q $NAME; then
err "$NAME 虚拟机名称已经被使用"
die "$USAGE"
fi

# 创建镜像
echo "开始克隆 $DISK_SOURCE_PATH -> $DISK_PATH "
cp "$DISK_SOURCE_PATH" "$DISK_PATH"

# 启动虚拟机
echo "启动虚拟机"
echo virt-install --virt-type $VIRT_TYPE --name $NAME --ram $RAM --vcpus $VCPUS --disk path="$DISK_PATH" --graphics vnc,listen=0.0.0.0 --noautoconsole --autostart ${NETOPTS} --import --cpu host
virt-install --virt-type $VIRT_TYPE --name $NAME --ram $RAM --vcpus $VCPUS --disk path="$DISK_PATH" --graphics vnc,listen=0.0.0.0 --noautoconsole --autostart ${NETOPTS} --import --cpu host
echo
[root@docusaurus-wiki safe_clone_kvm]#