#!/bin/bash
iso=/iso/CentOS-7-x86_64-Minimal-1708.iso  #本机镜像文件位置
centos=centos7.0                 #操作系统版本
disk_path=/var/lib/libvirt/images        #虚拟磁盘文件存储路径
file_path=/etc/libvirt/qemu          #虚拟机配置文件存储路径
HANSHU(){                    #定义函数
if [ $num == 1 ];then
read -p "输入数字:1 开启指定虚拟机
2 开启所有虚拟机
3 关闭指定虚拟机(使用shutdown)
4 关闭所有已开启虚拟机
5 开启多台虚拟机
6 关闭多台虚拟机(使用shutdown)
请选择您想实现的功能:" num1            #根据标准输入实现不同的功能
if [ $num1 == 1 ];then
virsh list --inactive          #显示所有未开启的虚拟机
read -p "请输入需开启的虚拟机的名称:" vm1
virsh start $vm1
elif [ $num1 == 2 ];then
for i in `virsh list --inactive |sed "$ d" |awk 'NR>2{print $2}'`;do  #截取出所有未开启虚拟机的名称
virsh start $i
done
elif [ $num1 == 3 ];then
virsh list
read -p "请输入需关闭的虚拟机的Id:" vm1
virsh shutdown $vm1            #使用shutdown命令关闭 防止强制关闭可能引起的数据丢失
elif [ $num1 == 4 ];then
for i in `virsh list |sed "$ d" |awk 'NR>2{print $1}'`;do
virsh shutdown $i
done
elif [ $num1 == 5 ];then
virsh list --inactive|sed -e '1,2d' -e '$d' -e 's/-//'|cat -n
read -p "请输入想要开启的虚拟机的编号(以空格隔开):" num11
array=(0)                  #定义数组
for i in $num11;do
vm_name=`virsh list --inactive|sed -e '1,2d' -e '$d' -e 's/-//'|cat -n|awk 'NR=='$i'{print $2}'`    #截取出未开启虚拟机名称
array[$i]=$vm_name          #名称写入数组
done
vm_start=`echo ${array[*]}`        #列出数组值
for n in $vm_start;do
[ $n != 0 ] && virsh start $n
done
elif [ $num1 == 6 ];then
virsh list |sed -e '1,2d' -e '$d'|awk '{print $2"\t"$3}'|cat -n
read -p "请输入关闭开启的虚拟机的编号(以空格隔开):" num11
array=(0)
for i in $num11;do
vm_name=`virsh list|sed -e '1,2d' -e '$d'|awk '{print $2"\t"$3}'|cat -n|awk 'NR=='$i'{print $2}'`
array[$i]=$vm_name
done
vm_start=`echo ${array[*]}`
for n in $vm_start;do
[ $n != 0 ] && virsh shutdown $n
done
fi
elif [ $num == 2 ];then
read -p "输入数字:1 安装虚拟机
2 删除虚拟机
请选择您想实现的功能:" num2
if [ $num2 == 1 ];then            #建议使用文本方式安装 图形安装太慢
read -p "输入数字:1 命令安装
2 文本方式安装(建议)
镜像文件存储在/iso/目录下 如需更换镜像请将新镜像存储在这里并修改校本中的iso值
请选择您的安装方式:" num21
virsh list --all
read -p "请输入您安装的虚拟机的名称:" name          #标准输入虚拟机各项参数值
read -p "请输入您安装的虚拟机的运行内存大小(单位为kb):" kb
read -p "请输入您安装的虚拟机的cpu数量:" cpu
read -p "请输入您安装的虚拟机的内存大小(单位为G):" g
if [ $num21 == 1 ];then
virt-install -n $name --memory $kb --vcpus $cpu --cdrom $iso --disk $disk_path/$name.img,size=$g,format=qcow2,bus=scsi
elif [ $num21 == 2 ];then
echo "默认版本为centos7.0 如需更换请修改脚本中centos值"
virt-install --connect qemu:///system -n $name -r $kb --disk /var/lib/libvirt/images/$name.img,size=$g --os-type=linux --os-variant=$centos --vcpus=$cpu --location=$iso -x console=ttyS0 --nographics
fi
elif [ $num2 == 2 ];then
virsh list --all
read -p "请输入您想删除的虚拟机的名称:" vm2
virsh destroy $vm2 &> /dev/null              #先强制关闭虚拟机 并将回显输出到黑洞文件中
a=`virsh domblklist $vm2|awk 'NR==3{print $2}'`     #截取出虚拟机磁盘文件存储路径
b=`virsh snapshot-list $vm2|sed -n '3p'`        #虚拟机快照(若虚拟机存在快照 则无法直接删除)
if [ -z "$b" ];then                    #若b值为空 则此虚拟机没有快照 可以直接删除
virsh undefine $vm2                  #取消定义虚拟机(相当于删除)
rm -rf $a                        #删除此虚拟机磁盘文件
rm -rf $file_path/$vm2.xml              #删除此虚拟机配置文件
else
for i in `virsh snapshot-list $vm2|awk 'NR>2{print $1}'`;do  #若存在快照 则先删除快照
virsh snapshot-delete $vm2 $i          #删除快照
done
virsh undefine $vm2
rm -rf $a
rm -rf $file_path/$vm2.xml
fi
fi
elif [ $num == 3 ];then
read -p "输入数字:1 添加硬盘
2 删除硬盘
3 添加网卡
4 删除网卡
请选择您想实现的功能:" num3
if [ $num3 == 1 ];then
virsh list --all
read -p "请输入想要添加磁盘的虚拟机名称:" vm3
virsh domblklist $vm3                      #列出已存在的磁盘文件
read -p "请输入磁盘文件名称(无需后缀):" name
if [ -f $disk_path/$name.img ] || [ -f $file_path/$name.xml ];then  #判断磁盘文件名或配置文件名是否已存在
for ((i=0;i<10;));do                    #若存在 则重新输入 直至不重复为止
read -p "文件名已存在 请重新输入:" name1  
[ ! -f $disk_path/$name1.img ] && [ ! -f $file_path/$name1.xml ] && break
done
name=$name1
fi
read -p "请输入磁盘大小(单位为G):" size                    #输入各项值
echo "若选用sata类型 若虚拟机在运行将会关闭虚拟机(sata无法热拔)"
read -p "请输入磁盘bus类型(virtio|sata|scsi|ide):" bus
read -p "请输入磁盘名称(一一对应上表vd..|sd...|sd..|hd..):" dev
qemu-img create -f qcow2 $disk_path/$name.img $size\G          #创建虚拟磁盘文件
cat > $file_path/$name.xml <<- eof                    #创建虚拟配置文件
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='$disk_path/$name.img'/>
<target dev='$dev' bus='$bus'/>
</disk>
eof
[ "$bus" == "sata" ] && virsh shutdown $vm3 &> /dev/null        #当选用sata类型且虚拟机正运行时先关闭虚拟机
sleep 3
virsh attach-device $vm3 $file_path/$name.xml --persistent      #添加磁盘
elif [ $num3 == 2 ];then
virsh list --all
read -p "请输入想要删除磁盘的虚拟机名称:" vm3
virsh domblklist $vm3
read -p "请输入磁盘名称:" name
a=`virsh domblklist $vm3|grep "$name"|awk '{print $2}'`      #截取出磁盘文件路径
b=`echo "$a"|sed -r "s/(.*)($vm3)(.*)(\.img)/\2\3.xml/"`      #截取出虚拟配置文件路径
virsh detach-disk $vm3 $name --persistent               #删除磁盘
rm -rf $a
rm -rf $file_path/$b
elif [ $num3 == 3 ];then
virsh list --all
read -p "请输入想要添加网卡的虚拟机名称:" vm3
ls $file_path |grep "$vm3"
read -p "请输入网卡文件名称:" name
if [ -f $disk_path/$name.img ] || [ -f $file_path/$name.xml ];then
for ((i=0;i<10;));do
read -p "文件名已存在 请重新输入:" name1
[ ! -f $disk_path/$name1.img ] && [ ! -f $file_path/$name1.xml ] && break
done
name=$name1
fi
virsh domiflist $vm3
read -p "请输入网卡类型(推荐使用相同网卡类型):" type
cat > $file_path/$name.xml <<- eof
<interface type='$type'>
<source network='default' bridge='virbr0'/>
<model type='virtio'/>
</interface>
eof
virsh attach-device $vm3 $file_path/$name.xml --persistent  #添加网卡
elif [ $num3 == 4 ];then
virsh list --all
read -p "请输入想要删除网卡的虚拟机名称:" vm3
virsh domiflist $vm3
read -p "请输入想要删除网卡的类型:" type
read -p "请输入想要删除网卡的mac地址:" mac
virsh detach-interface $vm3 $type --mac $mac --persistent  #删除网卡
fi
elif [ $num == 4 ];then
read -p "输入数字:1 链接克隆(默认)
2 完整克隆
请选择您要实现的功能:" num4
if [ $num4 == 2 ];then
virsh list --all
read -p "请输入想要克隆的虚拟机的名字:" vm4
read -p "请输入克隆后的虚拟机的名称(克隆后虚拟机磁盘文件/配置文件
默认为虚拟机名称+后缀):" vm41
if [ -f $disk_path/$vm41.img ] || [ -f $file_path/$vm41.xml ];then
for ((i=0;i<10;));do
read -p "虚拟机文件名已存在 请重新输入:" name1
[ ! -f $disk_path/$name1.img ] && [ ! -f $file_path/$name1.xml ] && break
done
vm41=$name1
fi
for i in `virsh domblklist $vm4|awk 'NR>2{print $2}'`;do  #截取出克隆的虚拟机的虚拟磁盘文件路径
if [ -n "$i" ] && [ "$i" != "-" ];then
src=$i
path=`dirname $src`
cp -p $src $path/$vm41.img                #拷贝克隆的虚拟机的虚拟磁盘文件
else
continue
fi
done
virsh dumpxml $vm4 > $file_path/$vm41.xml            #查看克隆的虚拟机的虚拟配置文件信息并写入
sed -i "s/>$vm4</>$vm41</" $file_path/$vm41.xml        #修改虚拟配置文件相关信息
sed -ri "/<\/uuid>/d" $file_path/$vm41.xml
sed -ri "s/(<source fi)(.*)(\/)(.*)(\/>)/\1\2\3$vm41.img'\5/" $file_path/$vm41.xml
sed -ri '/<mac/ d' $file_path/$vm41.xml
virsh define $file_path/$vm41.xml                #从虚拟配置文件定义(创建)虚拟机
else
virsh list --all
read -p "请输入您想要克隆的虚拟机的名称:" vm4
read -p "请输入克隆后的虚拟机的名称(克隆后的虚拟机磁盘文件/配置文
件默认为虚拟机名称+后缀):" vm41
if [ -f $disk_path/$vm41.img ] || [ -f $file_path/$vm41.xml ];then
for ((i=0;i<10;));do
read -p "虚拟机文件名已存在 请重新输入:" name1
[ ! -f $disk_path/$name1.img ] && [ ! -f $file_path/$name1.xml ] && break
done
vm41=$name1
fi
src=`virsh domblklist $vm4|awk 'NR==3{print $2}'`
path=`dirname $src`
qemu-img create -f qcow2 -b $src $path/$vm41.img
virsh dumpxml $vm4 > $file_path/$vm41.xml
sed -i "s/>$vm4</>$vm41</" $file_path/$vm41.xml
sed -ri "/<\/uuid>/d" $file_path/$vm41.xml
sed -ri "s/(<source fi)(.*)(\/)(.*)(\/>)/\1\2\3$vm41.img'\5/" $file_path/$vm41.xml
sed -ri '/<mac/ d' $file_path/$vm41.xml
virsh define $file_path/$vm41.xml
fi
elif [ $num == 5 ];then
read -p "输入数字选择:1 拍摄快照
2 删除快照
3 删除所选虚拟机所有快照
4 从快照恢复虚拟机
请选择您想实现的功能:" num5
if [ $num5 == 1 ];then
virsh list --all
read -p "请输入您要创建快照的虚拟机的名称:" vm5
virsh snapshot-list $vm5            #列出此虚拟机所有快照
read -p "请输入您要创建的快照的名称:" sna
virsh snapshot-create-as $vm5 $sna
elif [ $num5 == 2 ];then
virsh list --all
read -p "请输入您要删除快照的虚拟机的名称:" vm5
virsh snapshot-list $vm5
read -p "请输入您要删除的快照的名称:" sna
virsh snapshot-delete $vm5 $sna
elif [ $num5 == 3 ];then
virsh list --all
read -p "请输入您要删除所有快照的虚拟机的名称:" vm5
b=`virsh snapshot-list $vm5|sed -n '3p'`
if [ -n "$b" ];then
for i in `virsh snapshot-list $vm5|awk 'NR>2{print $1}'`;do
virsh snapshot-delete $vm5 $i
done
fi
elif [ $num5 == 4 ];then
virsh list --all
read -p "请输入您想要恢复快照的虚拟机的名称:" vm5
virsh snapshot-list $vm5
read -p "请输入您想要恢复快照的名称:" sna
virsh destroy $vm5 &> /dev/null
virsh snapshot-revert $vm5 $sna
fi
elif [ $num == 6 ];then
read -p "输入数字:1 内存管理
2 CPU管理
请选择您想要实现的功能:" num6
if [ $num6 == 1 ];then
virsh list --all
read -p "请输入您想要修改内存的虚拟机的名称:" vm6
virsh dumpxml $vm6|grep "K"
read -p "请输入修改的内存大小(单位为kib)(将关闭虚拟机):" num61
virsh shutdown $vm6
sleep 3
sed -ri "/memory/ s/(.*>)([0-9]+)(<\/.*)/\1$num61\3/" $file_path/$vm6.xml    #修改虚拟配置文件
elif [ $num6 == 2 ];then
virsh list --all
read -p "请输入您想要修改cpu的虚拟机的名称:" vm6
virsh dumpxml $vm6|grep vcpu|grep auto > /dev/null    #判断虚拟机是否支持热添加
ech=`echo $?`
lscpu|grep "CPU(s):"
virsh dumpxml $vm6|grep "vcpu"
if [ $ech != 0 ];then
echo "当前不支持热添加CPU 请修改配置文件"
echo "将重启启动虚拟机使配置文件生效"
echo
read -p "请输入虚拟机最大CPU个数:" num61
read -p "请输入虚拟机运行CPU个数:" num62
sed -ri "/vcpu/ s/.*/<vcpu placement='auto' current=\"$num62\">$num61<\/vcpu>/" $file_path/$vm6.xml
virsh reboot $vm6
elif [ $ech == 0 ];then
read -p "输入数字:1 修改运行CPU(减少时会停止当前虚拟机)
2 修改最大CPU
请选择您想实现的功能:" num61
if [ $num61 == 1 ];then
read -p "请输入修改后的CPU个数:" num62
num621=`virsh dumpxml $vm6|grep "vcpu"|awk -F "=" '{print $3}'|awk -F ">" '{print $1}'`
[ $num62 -le $num621 ] && virsh destroy $vm6
virsh setvcpus $vm6 $num62 --live --config
elif [ $num61 == 2 ];then
read -p "请输入最大CPU个数(不能超过最大物理CPU个数):" num63
virsh setvcpus $vm6 $num63 --maximum --config
fi
fi
fi
fi
}
read -p "输入数字:1 开启或关闭虚拟机
2 安装或删除虚拟机
3 磁盘/网卡管理
4 克隆虚拟机
5 快照管理
6 内存/CPU管理
请选择您想实现的功能:" num            #根据标准输入实现不同功能
if [[ ! $num =~ ^[1|2|3|4|5|6]$ ]];then  #判断标准输入是否是正确的格式
for ((i=0;i<10;));do
read -p "请输入正确的数字:" num7
[[ $num7 =~ ^[1|2|3|4|5|6]$ ]] && break
done
num=$num7
HANSHU
else
HANSHU
fi

KVM--基本管理的更多相关文章

  1. 如何在KVM中管理存储池

    来自:http://blog.csdn.net/my2005lb/article/details/8635661 KVM平台以存储池的形式对存储进行统一管理,所谓存储池可以理解为本地目录.通过远端磁盘 ...

  2. KVM镜像管理利器-guestfish使用详解

    原文  http://xiaoli110.blog.51cto.com/1724/1568307   KVM镜像管理利器-guestfish使用详解 本文介绍以下内容: 1. 虚拟机镜像挂载及w2k8 ...

  3. [原创]KVM虚拟化管理平台的实现

    KVM虚拟化管理平台的实现 源码链接:https://github.com/wsjhk/IaaS_admin.git 根据KVM虚拟化管理的要求,设计并实现网页操作管理KVM虚拟机.设计原理架构如下图 ...

  4. kvm虚拟机管理 系统自动化安装

    原创博文安装配置KVM http://www.cnblogs.com/elvi/p/7718574.htmlweb管理kvm http://www.cnblogs.com/elvi/p/7718582 ...

  5. kvm虚拟机管理基础

    部署 KVM 虚拟机 a.kvm 安装 环境:centos7,cpu 支持虚拟化,关闭 selinux,关闭 firewalld yum install libvirt virt-install qe ...

  6. kvm虚拟化管理平台WebVirtMgr部署-完整记录(3)

    继下面三篇文章完成了kvm虚拟化管理平台webvirtmgr环境的部署安装:kvm虚拟化管理平台WebVirtMgr部署-虚拟化环境安装-完整记录(0)kvm虚拟化管理平台WebVirtMgr部署-完 ...

  7. kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)

    继上一篇kvm虚拟化管理平台WebVirtMgr部署-完整记录(1),接下来说说WebVirtMgr的日常配置:添加宿主机,创建虚机,磁盘扩容,快照等具体操作记录如下: 一.配置宿主机1.登录WebV ...

  8. kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)

    公司机房有一台2U的服务器(64G内存,32核),由于近期新增业务比较多,测试机也要新增,服务器资源十分有限.所以打算在这台2U服务器上部署kvm虚拟化,虚出多台VM出来,以应对新的测试需求.当KVM ...

  9. KVM -> 虚拟机管理&console登录_02

    1.KVM虚拟机管理操作 virsh命令常用参数总结 1.开机关机: virsh list (只可以查看运行的虚拟机) virsh list  --all (全部都可以查看) 开机与关机: virsh ...

  10. KVM虚拟化管理 virt manager常用操作

    部分涉及到Linux.Nginx.tomcat.MySQL等的点滴操作记录,时间长了,就忘掉了,偶尔整理一下操作的history,就此简要备份一下: [原][BG]-一次虚拟化环境实践简要记录: ht ...

随机推荐

  1. LabVIEW基于机器视觉的实验室设备管理系统(2)

    目录 功能计划 普通用户 欢迎登录 信息查询 返回退出程序 效果演示 在前期的准备完成之后呢,就要开始实现我们的程序啦,不过在编程之前,我们一定要计划好这个系统需要什么功能. 功能计划 既然我们做的是 ...

  2. C语言-变量常量数据类型

    常量:不会变化的数据.不能被修改. 1. "hello".'A'.-10.3.1415926(浮点常量) 2. #define PI 3.1415 [强调]:没有分号结束标记. [ ...

  3. 一次elasticsearch 查询瞬间超时案例分析

    大家好,我是蓝胖子,有段时间没有做性能分析案例讲解了,正好前两天碰到一个性能问题,今天就来对它探讨探讨. 问题背景 在晚上9点左右,刚从外面逛街回到家,就接到了电话报警(幸好前不久刚好把电话报警机制加 ...

  4. Linux笔记02: Linux环境_2.2 Linux系统安装

    2.2 Linux系统 本文使用的Linux系统为CentOS 7.9.2009,读者可以根据自己的需要选择不同的版本. 2.2.1 CentOS版本 CentOS基本上是安装在i386.x86_64 ...

  5. 媒体img组件以及swiper轮播

    .swiper{        height: 400rpx;        margin-top: 100rpx;        .item{            padding: 20rpx;  ...

  6. CatFly【汇编代码还原】

    CatFly[难度:1] 题目界面 下载附件,发现是dll文件,放到linux中运行一下,运行界面如图所示: 从上图中可以看到两处字符串,上面的字符串不断滚动,下方字符串在次数上不断累加,猜测上方字符 ...

  7. NLP复习之N元文法

    N元文法的统计 二元概率方程: \[P(w_n|w_{n-1}) = \frac{C(w_{n-1}w_n)}{C(w_{n-1})} \] 三元概率估计方程: \[P(w_n|w_{n-2},w_{ ...

  8. 初识BigDecimal

    BigDecimal所创建的是对象,我们不能使用传统的+.-.*./等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法. 方法中的参数也必须是BigDecimal的对象. BigDecim ...

  9. APP性能测试-客户端性能测试

    https://blog.csdn.net/xiaomaoxiao336368/article/details/83547318

  10. thymeleaf自定义标签

    前言 使用thymeleaf自定义标签,环境:springboot 2.3.7 + thymeleaf 3.0.11(2021-01-14最新版) 由于使用shiro,我们需要与thymeleaf整合 ...