
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.删除虚拟机硬件,快照
删除虚拟机硬盘
删除虚拟机网卡
删除虚拟机快照
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月21日 18时27分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Excel 拼接为 SQL 并打包 exe
2021-05-09
Pandas数据分析从放弃到入门
2021-05-09
Matplotlib绘制漫威英雄战力图,带你飞起来!
2021-05-09
机器学习是什么
2021-05-09
《小王子》里一些后知后觉的道理
2021-05-09
《自私的基因》总结
2021-05-09
《山海经》总结
2021-05-09
《非暴力沟通》总结
2021-05-09
《你当像鸟飞往你的山》总结
2021-05-09
《我是猫》总结
2021-05-09
《抗糖化书》总结
2021-05-09
apache虚拟主机配置
2021-05-09
光盘作为yum源
2021-05-09
PHP 正则表达式资料
2021-05-09
PHP官方网站及PHP手册
2021-05-09
mcrypt加密以及解密过程
2021-05-09
mysql连续聚合
2021-05-09
go等待N个线程完成操作总结
2021-05-09
消息队列 RocketMQ 并发量十万级
2021-05-09
ReactJs入门教程-精华版
2021-05-09