Skip to content

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

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

(仅收藏)

http://blog.mykernel.cn/2021/01/13/kvm虚拟机操作/

image-20240401123050513

脚本位置:

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

safe_clone_kvm.sh

bash
[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]#
最近更新