Shell脚本-KVM虚拟机模块化安装与管理
发布日期:2021-05-08 00:58:41 浏览次数:36 分类:原创文章

本文共 6583 字,大约阅读时间需要 21 分钟。

目录



一、KVM虚拟机模块化安装与管理

#!/bin/bash##kvm管理脚本##ShanHai#source加载模块脚本source /shanhai/install-virtualhost.sh #创建一个全新虚拟机的模块脚本source /shanhai/mod.sh #使用虚拟机模板快速创建新虚拟机的模块脚本source /shanhai/disk.sh #添加硬盘的模块脚本source /shanhai/net.sh #添加网卡的模块脚本source /shanhai/snap.sh #创建快照的模块脚本source /shanhai/vm_del.sh #删除虚拟机硬件,快照的模块脚本while :docat <<-EOF————————————————————————————————————————————————————————————————————————————————————————————————    1.查看当前所有虚拟机    2.创建一个全新的虚拟机    3.使用模板快速创建虚拟机    4.添加虚拟机硬件    5.创建虚拟机快照    6.删除虚拟机硬件、快照    *.退出———————————————————————————————————————————————————————————————————————————————————————————————EOFread -p "请输入要进行的操作:" kvm_numcase "$kvm_num" in    1)        virsh list --all    ;;    2)        vm_install    ;;    3)        vm_mod    ;;    4)        read -p "(1)添加硬盘,(2)添加网卡,(Q/q)退出" vm_num        case "$vm_num" in            1)                vm_disk            ;;            2)                vm_net            ;;            Q|q)                exit        esac    ;;    5)        vm_snap    ;;    6)        read -p "(1)删除硬盘,(2)删除网卡,(3)删除快照,(Q/q):" del_num        case "$del_num" in            1)                disk_del            ;;            2)                net_del            ;;            3)                snap_del            ;;            Q|q)                exit            ;;        esac    ;;    *)        exit    ;;esacdone

1.创建全新虚拟机的模块脚本

#!/usr/bin/env bash##vm_install##ShanHaivm_install(){   set -ueset -o pipefail# 创建相关目录ls /home/kvm/{   ks,virtualhost,virtual-img} 1>/dev/null 2>&1 || mkdir -p /home/kvm/{   ks,virtualhost,virtual-img}# 此程序的变量KVM_HOME=/home/kvmKVM_ISO=${   KVM_HOME}/iso/CentOS-7-x86_64-Minimal-1708.isoKVM_KS_FILE=${   KVM_HOME}/ks/ks.cfgKVM_IMG_DIR=${   KVM_HOME}/virtual-imgOS_TYPE="linux"DEF_OS_VARIANT="rhel7"DEF_VM_NAME="centos$(date +%Y%m%dT%H%M%S)"# 设置默认内存大小 1024 M,这个单位是固定的 M,不支持其他单位DEF_MEM_SIZE=1024DEF_VCPUS=1DEF_DISK_SIZE=10G#  交互式安装echo  "输入将要创建的KVM虚拟机名称,不是主机名哦"read -p "默认值${DEF_VM_NAME}>>:" VM_NAMEecho  "输入将要创建的服务器主机名"read -p "默认 localhost>>:"  HOST_NAMEread -p "输入虚拟机 CPU 核心数默认 1 示例:2>>:" VCPUSecho "输入虚拟机内存大小,默认1024M,不支持其他单位"read -p "只需要添数字即可>>:" MEM_SIZEecho "输入虚拟机使用的磁盘容量"read -p "默认 10G,[示例写法:15G]>>:"  DISK_SIZE# 变量替换, 假如没有输入值, 就使用默认值VM_NAME=${   VM_NAME:-$DEF_VM_NAME}HOST_NAME=${   HOST_NAME:-localhost.localdomain}VCPUS=${   VCPUS:-$DEF_VCPUS}MEM_SIZE=${   MEM_SIZE:-$DEF_MEM_SIZE}DISK_SIZE=${   DISK_SIZE:-$DEF_DISK_SIZE}OS_VARIANT=${   OS_VARIANT:-$DEF_OS_VARIANT}new_disk=${   KVM_IMG_DIR}/${   VM_NAME}.qcow2if [[ ! "${DISK_SIZE}" =~ G$ ]] || [[ ! "${DISK_SIZE::-1}" =~ ^[0-9]+$ ]]then    echo "格式不正确,正确示例:20G"    exitfiif [ ! -f "${new_disk}" ];then    qemu-img create -f qcow2 ${   new_disk} ${   DISK_SIZE}fi# 开始创建virt-install -v \     --arch x86_64 --virt-type kvm \     --name ${   VM_NAME} \     --memory ${   MEM_SIZE} \     --vcpus ${   VCPUS} \     --os-type ${   OS_TYPE} \     --location ${   KVM_ISO} \     --network default \     --graphics none \     --os-variant     ${   OS_VARIANT} \     --initrd-inject  "${KVM_KS_FILE}" \     --extra-args     "ks=file:/ks.cfg  \                       console=tty0 console=ttyS0,115200n8 \                       hostname=${HOST_NAME}" \     --disk ${   new_disk},cache=writeback,io=threads,bus=virtio}

2.使用现有虚拟机模板快速创建新虚拟机的模块脚本

#!/usr/bin/bash##MOD##ShanHaivm_mod(){   read -p "请输入创建的新虚拟机名称:" vm_namevm_uuid=`uuidgen`vm_mem=1048576vm_mac=`openssl rand -hex 3 | sed -r 's/..\B/&:/g'`#源镜像路径image=/home/kvm/virtual-img/shanhai.qcow2#源模板位置mod=/etc/libvirt/qemu/centos7-mod.xml#新镜像位置new_image=/home/kvm/virtual-img/${   vm_name}.qcow2#新模板位置new_mod=/etc/libvirt/qemu/${   vm_name}.xmlcp $image $new_imagecp $mod $new_modsed -r \-e  s%vm-name%$vm_name% \-e  s%vm-uuid%$vm_uuid% \-e  s%vm-mem%$vm_mem% \-e  s%vm-disk-path%$new_image% \-e  s%vm-mac%$vm_mac% \$mod > $new_modecho "查看创建的虚拟机"virsh define /etc/libvirt/qemu/${   vm_name}.xml &>> /dev/nullsystemctl restart libvirtdvirsh start $vm_namevirsh list --all | grep $vm_name}

3.添加虚拟机硬盘的模块脚本

#!/bin/bash##disk##ShanHai#添加虚拟硬盘vm_disk(){   virsh list --allread -p "请输入想要添加硬件的虚拟机:" vm_name    for i in {   a..z}    do        virsh domblklist ${   vm_name} | grep "^vd${i}" > /dev/null        if [ $? -ne 0 ];then            break        fi    done    disk=vd${   i}    read -p "请输入创建的磁盘容量(如2G):" disk_sizedisk_file=/shanhai/${   vm_name}-${   disk}.qcow2qemu-img create -f qcow2 ${   disk_file} ${   disk_size}Gsource /shanhai/disk.mod > /shanhai/disk.xmlvirsh attach-device ${   vm_name} /shanhai/disk.xml --persistentecho "查看虚拟硬盘"virsh domblklist ${   vm_name}}

4.添加虚拟机网卡的模块脚本

#!/bin/bash##net##ShanHai#添加虚拟网卡vm_net(){   echo "添加虚拟网卡"s=`openssl rand -hex 3 | sed -r 's/..\B/&:/g'`source /shanhai/net.mod > /shanhai/net.xmlvirsh attach-device ${   vm_name} net.xml --persistentecho "查看虚拟网卡"virsh domiflist ${   vm_name}}

5.创建虚拟机快照的模块脚本

#!/bin/bash##snap##ShanHai#创建快照vm_snap(){       virsh list --all    read -p "请输入想要创建快照的虚拟机名称:" vm_name    vm_stat=`virsh list --all | grep $vm_name | awk '{print $3" "$4}'`    qemu-img info /home/kvm/virtual-img/${   vm_name}.qcow2 &>>/dev/null    disk_type=`qemu-img info /home/kvm/virtual-img/${   vm_name}.qcow2 | grep file | awk '{print $3}'`    echo $disk_type    exit    echo "当前虚拟机磁盘类型为:$disk_type"    echo "当前虚拟机状态为:$vm_stat"    read -p "是否继续创建快照?[Y/n]:" snap_num    case "$snap_num" in        Y|y)            if [ "$disk_type" = "qcow2" ];then                read -p "请输入创建的快照名称:" snap_name                virsh snapshot-create-as $vm_name ${   vm_name}.${   snap_name}                echo "查看指定虚拟机的快照:"                virsh snapshot-list $vm_name            else                echo "当前磁盘类型不支持创建快照"            fi        ;;        N|n)            echo "正在退出..."        ;;    esac}

6.删除虚拟机硬件,快照的模块脚本

#!/usr/bin/bash##vm_del##ShanHai#删除虚拟机硬盘disk_del(){       virsh list --all    read -p "请输入想要删除硬盘的虚拟机:" vm_name    echo "查看当前虚拟机硬盘信息:"    virsh domblklist $vm_name    read -p "请输入想要删除的硬盘:" vm_disk    virsh detach-disk ${   vm_name} ${   vm_disk} --persistent}#删除虚拟机网卡net_del(){       virsh list --all    read -p "请输入想要删除网卡的虚拟机名称:" vm_name    echo "查看当前虚拟机网卡信息:"    virsh domiflist ${   vm_name}    read -p "请输入想要删除的网卡mac名称:" net_name    virsh detach-interface ${   vm_name} network ${   net_name} --persistent}#删除虚拟机快照snap_del(){       virsh list --all    read -p "输入想要删除快照的虚拟机名称:" vm_name    echo "查看当前虚拟机所有快照:"    virsh snapshot-list ${   vm_name}    read -p "输入想要删除的快照名称:" snap_name    virsh snapshot-delete ${   vm_name} --snapshotname ${   snap_name}}


二、执行效果

1.查看所有虚拟机

在这里插入图片描述

2.创建新的虚拟机

在这里插入图片描述

3.模板快速创建虚拟机

在这里插入图片描述

4.虚拟机硬盘添加

在这里插入图片描述

5.虚拟机网卡添加

在这里插入图片描述

6.创建虚拟机快照

在这里插入图片描述
在这里插入图片描述

7.删除虚拟机硬件,快照

删除虚拟机硬盘
在这里插入图片描述
删除虚拟机网卡
在这里插入图片描述
删除虚拟机快照
在这里插入图片描述

上一篇:企业级日志分析系统---Filebeat+Logstash+Elasticsearch+Kafka
下一篇:Shell脚本-KVM虚拟机添加(删除)硬件

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年03月21日 18时27分01秒