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 ...
随机推荐
- 如何使用C#编写低代码应用插件
本文由葡萄城技术团队发布.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 作为当今快速发展的技术之一,低代码平台为开发人员提供了更高效.更简便的工具和 ...
- 从旺店通·企业奇门到用友U8通过接口集成数据
从旺店通·企业奇门到用友U8通过接口集成数据 接入系统:旺店通·企业奇门 慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS.SaaS模式,以一体化智能零售解决方案,帮助零售企业数字化 ...
- Guava Preconditions类的各种用法
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. Guava Preconditions类 提供静态方法列表,用于检查是否使用有效参数值调用方法或构造函数.如果前提条件失败 ...
- C++ Qt开发:PushButton按钮组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QPushBu ...
- 【Python】【OpenCV】边缘检测和创建自定义核
对于使用OpenCV已有的算子,我们还可以自定义卷积核以达到不同的效果. filters.py 1 import cv2 2 import numpy 3 4 """ 定 ...
- Kernel Memory 入门系列:自定义处理流程
Kernel Memory 入门系列:自定义处理流程 在整个文档预处理的流程中,涉及到很多的处理步骤,例如:文本提取,文本分片,向量化和存储.这些步骤是Kernel Memory中的默认提供的处理方法 ...
- 在 IIS 上生成经典 ASP 网站
场景:在 IIS 上生成经典 ASP 网站 本文档将指导你完成安装 IIS 和配置经典 ASP 网站的过程. 经典 ASP 是服务器端脚本环境,可用于创建和运行动态 Web 应用程序. 借助 ASP, ...
- 解决C#连接MySQL数据库报错 MySqlConnector
如果主机不支持 SSL 连接,则不会使用 SSL 连接. 连接不上. 解决方案:在连接字符串后添加 sslmode = none. <add key="connstring" ...
- 从零玩转QQ登录-clwzqqdlu
title: 从零玩转QQ登录 date: 2021-05-01 15:55:39.951 updated: 2023-03-30 13:29:03.865 url: https://www.yby6 ...
- Jenkins 系列:Jenkins 安装(Windows、Mac、Centos)和简介
目录 简介 发展历史 应用场景 Jenkins 安装部署 先决条件 硬件要求 软件包下载 war 包部署 linux 系统部署 mac 系统部署 windows 系统部署 安装后基本配置 解锁 自定义 ...