KVM--基本管理
#!/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--基本管理的更多相关文章
- 如何在KVM中管理存储池
来自:http://blog.csdn.net/my2005lb/article/details/8635661 KVM平台以存储池的形式对存储进行统一管理,所谓存储池可以理解为本地目录.通过远端磁盘 ...
- KVM镜像管理利器-guestfish使用详解
原文 http://xiaoli110.blog.51cto.com/1724/1568307 KVM镜像管理利器-guestfish使用详解 本文介绍以下内容: 1. 虚拟机镜像挂载及w2k8 ...
- [原创]KVM虚拟化管理平台的实现
KVM虚拟化管理平台的实现 源码链接:https://github.com/wsjhk/IaaS_admin.git 根据KVM虚拟化管理的要求,设计并实现网页操作管理KVM虚拟机.设计原理架构如下图 ...
- kvm虚拟机管理 系统自动化安装
原创博文安装配置KVM http://www.cnblogs.com/elvi/p/7718574.htmlweb管理kvm http://www.cnblogs.com/elvi/p/7718582 ...
- kvm虚拟机管理基础
部署 KVM 虚拟机 a.kvm 安装 环境:centos7,cpu 支持虚拟化,关闭 selinux,关闭 firewalld yum install libvirt virt-install qe ...
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(3)
继下面三篇文章完成了kvm虚拟化管理平台webvirtmgr环境的部署安装:kvm虚拟化管理平台WebVirtMgr部署-虚拟化环境安装-完整记录(0)kvm虚拟化管理平台WebVirtMgr部署-完 ...
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)
继上一篇kvm虚拟化管理平台WebVirtMgr部署-完整记录(1),接下来说说WebVirtMgr的日常配置:添加宿主机,创建虚机,磁盘扩容,快照等具体操作记录如下: 一.配置宿主机1.登录WebV ...
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)
公司机房有一台2U的服务器(64G内存,32核),由于近期新增业务比较多,测试机也要新增,服务器资源十分有限.所以打算在这台2U服务器上部署kvm虚拟化,虚出多台VM出来,以应对新的测试需求.当KVM ...
- KVM -> 虚拟机管理&console登录_02
1.KVM虚拟机管理操作 virsh命令常用参数总结 1.开机关机: virsh list (只可以查看运行的虚拟机) virsh list --all (全部都可以查看) 开机与关机: virsh ...
- KVM虚拟化管理 virt manager常用操作
部分涉及到Linux.Nginx.tomcat.MySQL等的点滴操作记录,时间长了,就忘掉了,偶尔整理一下操作的history,就此简要备份一下: [原][BG]-一次虚拟化环境实践简要记录: ht ...
随机推荐
- 面向对象java前三次pta作业
目录: 1.前言 2.设计与分析 3.踩坑心得 4.主要困难及改进建议 5.总结 1.前言 面向对象程序设计(Object-Oriented Programming,简称OOP)是一种编程范式,它以对 ...
- 手把手教Electron+vue,打包vue项目,打包成桌面程序。
1.现如今前端框架数不胜数,尤其是angular.vue吸引一大批前端开发者,在这个高新技术快速崛起的时代,自然少不了各种框架的结合使用.接下来是介绍electron+vue的结合使用. 2.Elec ...
- Linux机器自建账号并赋予sudo权限,同时修改远程端口
默认使用root账号来操作Linux有一定风险,因此需要自建账号并赋予sudo权限,方便使用 登录为root用户后,创建账号 adduser <username> Ubuntu系统会同时要 ...
- uni-app学习笔记——路由与页面跳转
小颖最近在学习小程序,怕自己前看后忘,毕竟还没开始进入项目实践中,就自己瞎倒腾嘻嘻,今天来看下 uni-app 的路由与页面跳转,小颖就简单列举下它们的用法,具体的大家可以看官网哦!啦啦啦啦啦 ...
- SpringBoot整合数据可视化大屏使用
整合数据可视化大屏是现代化应用程序中的一个重要组成部分,它可以帮助我们更直观地展示和理解大量的数据. 在Spring Boot框架中,我们可以使用一些优秀的前端数据可视化库来实现数据可视化大屏,例如E ...
- Go切片是值传递还是引用传递?
Go没有引用传递和引用类型!!! 很多人有个误区,认为涉及Go切片的参数是引用传递,或者经常听到Go切片是引用类型这种说法,今天我们就来说一下方面的问题. 什么是值传递? 将实参的值传递给形参,形参是 ...
- C++学习笔记九:值,常量,常表达式和常初始化
1. 值: Literal: Data that is directly represented in code without going through some other variable s ...
- MySQL运维8-Mycat范围分表
一.范围分片 根据指定的字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片. 说明1:范围分片会提前提供一个分片的范围默认是0-500万是一个分片,500万-1000万是一个分片,10 ...
- 华企盾DSC 恢复密钥需要提供信息
1.win.ini 2.5097目录复制一份 3.c:\windows\system32\autheninfoset.cfg (64位系统:c:\windows\syswow64\autheninfo ...
- 数字孪生结合GIS系统为物流行业带来的改变
随着全球物流业务不断扩张和发展,数字化转型成为当今物流行业的主要趋势.在这个数字化时代,数字孪生技术和地理信息系统(GIS)的结合,为物流行业带来了前所未有的机遇和挑战.这种融合将为物流企业提供更高效 ...