kvm脚本
说明:
安装完kvm虚拟机,密码为upsa
有问题联系我就行,我可以根据你的系统在做进一步的修改
有几个注意的地方,如果你想修改目录可以私聊我,我帮你改,你也可以自己改
环境
centos 7
功能:
1.安装KVM虚拟机
2.删除KVM虚拟机
3.增加KVM虚拟机内存
4.增加KVM虚拟机磁盘
5.列出正在运行的虚拟机
6.列出所有虚拟机
7.列出指定虚拟机的快照
8.给指定虚拟机做快照
q.退出
脚本
#!/usr/bin/env bash
#小黑没那么黑
#邮箱:liubinbin0215@163.com
set -ue
set -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/kvm
KVM_XML=/etc/libvirt/qemu
KVM_ISO=${KVM_HOME}/iso/镜像文件名字 #这个需要你自己添加
KVM_KS_FILE=${KVM_HOME}/ks/ks.cfg #这个文件在下面
KVM_IMG_DIR=${KVM_HOME}/virtual-img
KVM_HOST_DIR=${KVM_HOME}/virtualhost
OS_TYPE="linux"
DEF_OS_VARIANT="rhel7"
DEF_VM_NAME="centos$(date +%Y%m%d%H%M%S)"
# 设置默认内存大小 1024 M,这个单位是固定的 M,不支持其他单位
DEF_MEM_SIZE=1024
DEF_VCPUS=1
DEF_DISK_SIZE=10G
install(){
# 交互式安装
echo "输入将要创建的KVM虚拟机名称,不是主机名哦"
read -p "默认值${DEF_VM_NAME}>>:" VM_NAME
echo "输入将要创建的服务器主机名"
read -p "默认 localhost>>:" HOST_NAME
read -p "输入虚拟机 CPU 核心数默认 1 示例:2>>:" VCPUS
echo "输入虚拟机内存大小,默认1024M,不支持其他单位"
read -p "只需要添数字即可>>:" MEM_SIZE
echo "输入虚拟机使用的磁盘容量"
read -p "默认 10G,[示例写法:15G]>>:" DISK_SIZE
# 变量替换, 假如没有输入值, 就使用默认值
VM_NAME=${VM_NAME:-$DEF_VM_NAME}
HOST_NAME=${HOST_NAME:-localhost.localdomain}
#aa=`cat ${KVM_XML}/${MEMU}.xml |grep "KiB" |awk -F'[<>]' '{print $3}' |uniq `
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}.qcow2
if [[ ! "${DISK_SIZE}" =~ G$ ]] || [[ ! "${DISK_SIZE::-1}" =~ ^[0-9]+$ ]]
then
echo "格式不正确,正确示例:20G"
exit
fi
if [ ! -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
# 桥接模式,前提是你已经建立好了网桥
# --network bridge=virbr0 --network bridge=docker0 \
# end
}
RM(){
echo "请输入删除的KVM虚拟机名称,不是主机名哦"
read -p ">>>:" name
rm -rf ${KVM_XML}/${name}.xml && rm -rf ${KVM_IMG_DIR}/qcow2
systemctl restart libvirtd
}
KVMMEM(){
read -p "请输入要给哪台虚拟机加内存:" MEMU
virsh shutdown ${MEMU}
aa=`cat ${KVM_XML}/${MEMU}.xml |grep "KiB" |awk -F'[<>]' '{print $3}' |uniq `
echo "现在的内存大小:$aa"
while :
do
read -p "请输入调整后内存的大小(G):" num
if [[ ! $num = [0-9]+ ]];then
echo "添加完成"
break
else
echo "请重新输入"
continue
fi
done
b=1024
let a=${num}*${b}*${b}
sed -i "11,12 s/$aa/$a/g" ${KVM_XML}/${MEMU}.xml
virsh define ${KVM_XML}/${MEMU}.xml
systemctl restart libvirtd
}
yingpan(){
read -p "请输入KVM虚拟机的名字:" name
read -p "磁盘大小(G):" size
NAME=`echo "${name}_$(date +%m-%d-%H-%M)"`
qemu-img create -f qcow2 ${KVM_IMG_DIR}/${NAME}.qcow2 ${size}G
num=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
aaa=`cat ${KVM_XML}/${name}.xml |grep vd|wc -l `
device_name=vd${num[$aaa]}
source ./yingpan.xml > new.yingpan.xml
virsh attach-device ${name} new.yingpan.xml --persistent
}
snapshot(){
read -p "请输入KVM虚拟机的名字:" name
virsh snapshot-list ${name}
}
make_snapshot(){
read -p "给哪台机器做快照:" vm
virsh snapshot-create-as ${vm} ${vm}.snap1
}
while :
do
cat << EOF
==============1.安装KVM虚拟机============
==============2.删除KVM虚拟机============
==============3.增加KVM虚拟机内存========
==============4.增加KVM虚拟机磁盘========
==============5.列出正在运行的虚拟机=====
==============6.列出所有虚拟机===========
==============7.列出指定虚拟机的快照=====
==============8.给指定虚拟机做快照=======
==============q.退出=====================
EOF
read -p "请选择你要选择的选项:" num
case $num in
1)
install
;;
2)
RM
;;
3)
KVMMEM
;;
4)
yingpan
;;
5)
virsh list
;;
6)
virsh list --all
;;
7)
snapshot
;;
8)
;;
q|Q)
exit
;;
esac
done
脚本依赖文件 ks.cfg
下面这个文件是ks.cfg,虚拟机安装的时候需要这个文件,直接使用就行。这个文件是你的kvm虚拟机创建时安装什么样的虚拟机
#主脚本所以依赖的文件
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$KXeyOPUO$5JlUe3pPpi.hplHB71JdX/
# 系统语言
#lang zh_CN.UTF-8
lang en_US
# System authorization information
auth --useshadow --passalgo=sha512
# Use CDROM installation media
#cdrom
# Use text mode install
# 使用字符界面安装操作系统
text
# Do not configure the X Window System
# 不配置图形界面系统
skipx
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled
# 设置动态获取 IP
network --bootproto=dhcp --device=eth0 --onboot=on
network --hostname=HOSNAME
# 设置静态 IP
# network --bootproto=static --device=eth0 --gateway=192.168.122.1 --ip=192.168.122.100 --nameserver=192.168.122.1 --netmask=255.255.255.0 --activate
# 系统安装完成后 重启系统
#halt
reboot
# System timezone 系统时区
timezone Asia/Shanghai
# System services 系统启动时候自动启动的服务
services --enable="chronyd"
# System bootloader configuration
#系统启动引导方式 vda 是kvm 虚拟机时候的第块磁盘名称
bootloader --location=mbr --boot-drive=vda
# 清除主引导记录
zerombr
# 删除原来的分区和磁盘标签
clearpart --all --initlabel
# 磁盘分区信息,这里采用的是 lvm 自动分区
autopart --type=lvm
# 下面是自定义分区
#part /boot --fstype="xfs" --ondisk=vda --size=200
#part / --fstype="xfs" --ondisk=vda --size=10040
#part /var --fstype="xfs" --ondisk=vda --size=2048
#part /home --fstype="xfs" --ondisk=vda --size=2048
# 安装软件
%packages
@^minimal
@core
chrony
%end
# 禁用 kdump
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
# 安装系统完成后执行的命令脚本
%post --interpreter=/bin/bash
yum install -y epel-release bash-completion vim-enhanced wget
yum group install "Development Tools" -y
%end
# 用户密码策略
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end