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 ...
随机推荐
- RPN FPN ROIPooling
RPN(Region Proposal Network)介绍---> 特点从backbone 生成的Feture Map中 用一个 3x3 的Conv卷积核 遍历FeatureMap的每个点然后 ...
- 跨境 ERP 积加系统与金蝶云星空系统数据集成对接方案
方案简介 由于积加ERP 系统专注服务于亚马逊跨境电商是非常复杂和庞大的应用系统,具有非常丰富的业务流程.复杂的系统架构和服务接口.主要涉及系统解决店铺运营,店铺管理,供应链管理,协同智能补货.采用& ...
- 黑客玩具入门——2、Kali常用命令与简单工具
一.Linux常用命令 首先,我们启动kali系统,然后点击这里的命令行工具. 就可以使用下面学习的命令了,另外,如果你有过计算机基础,那么Mac的terminal和Git的gitbash,都是可以练 ...
- top命令和ps命令
top 命令和 ps 命令 ps 命令 ps 命令查看系统的瞬时信息.通常使用ps -ef | grep 进程名, -e 代表显示所有进程,-f 表示做一个更为完整的输出.经常使用这个命令获得进程的 ...
- SQLBI_精通DAX课程笔记_02_数据类型
SQLBI_精通DAX课程笔记_02_数据类型 PowerBi 和 Analysis Services 在数据加载环节,无论数据源是什么类型,都会自动将数据转化为DAX可用的数据类型集. 以下链接为微 ...
- 25 个超棒的 Python 脚本合集
Python是一种功能强大且灵活的编程语言,拥有广泛的应用领域.下面是一个详细介绍25个超棒的Python脚本合集: 1. 网络爬虫:使用Python可以轻松编写网络爬虫,从网页中提取数据并保存为结构 ...
- [GDOI22pj1A] 邹忌讽秦王纳谏
时间空间限制: 1 秒, 256 MB 齐国人邹忌对齐国国君齐威王说,大王身边的人会因为私情.利益等原因而对大王阿谀奉承,所以不能光听好话,只有广泛接受群众的批评意见,才不会被蒙蔽双眼,齐国才能强盛. ...
- ubuntu防火墙ufw基本使用方法
ubuntu系统基本使用方法 防火墙 # 查看服务器防火墙状态 ufw status # 将防火墙设置为可用状态 ufw enable # 将防火墙设置为关闭状态 ufw disbale # 放行端口 ...
- 使用axios发送请求的几种方式
1.是什么? axios 它的底层是用了 XMLHttpRequest(xhr)方式发送请求和接收响应,xhr 相对于之前讲过的 fetch api 来说,功能更强大,但由于是比较老的 api,不支持 ...
- storeToRefs()的作用和使用
store 是一个用 reactive 包装的对象,这意味着不需要在 getters 后面写 .value,就像 setup 中的 props 一样,如果你写了,我们也不能解构它: <scrip ...