#/bin/bash virsh list --all HELP(){ echo "功能:快速開啓/關閉全部虛擬機" echo "用法:$(basename $0) <domain> [1 open all|2 close all]" } echo "0. close all 1. open all" read -p "choose your option(1/2): " op #close_all函數:強制關閉全部的虛擬機 close_all(){ for i in `virsh list|egrep -v "^$"|awk 'NR>2{print $2}'`;do virsh destroy $i done } #open_all函數:開啓全部關閉的虛擬機 open_all(){ for i in `virsh list --inactive|egrep -v "^$"|awk 'NR>2{print $2}'`;do virsh start $i done } case "$op" in 0) close_all;; 1) open_all;; *) echo "error: Please again choose" && HELP && exit;; esac
#/bin/bash virsh list --all HELP(){ echo "功能:快速添加、刪除、列出虛擬機磁盤" echo "用法:$(basename $0) <domain> [1 add|2 del|3 list]" } read -p "Please input disk on which virtual: " v [[ -z "$v" || "$v" == "-h" || "$v" == "--help" ]] && HELP && exit #判斷輸入是否存在 stats=$(virsh list --all |awk '$2=="'$v'"{print $3}') [ -z $stats ] && echo "error: virtual not exist" && exit [ "$stats" != "running" ] && echo "error: virtual $v not running" && exit #熱添加判斷運行狀況 echo "1. add 2. delect 3. list" read -p "choose your option(1/2/3): " op case "$op" in 1) read -p "Please input your disk size(G):" size [[ !$size =~ ^[0-9] ]] && echo "error: size must munber" && exit pool=/mnt/lvm1 cd $pool i=1 while :;do #遍歷查找,防止重命名qcow... [ -f "$v-add-$i.qcow2" ] && let i++ && continue diskfile=$v-add-$i.qcow2&& break done qemu-img create -f qcow2 $diskfile $size bus=$(virsh dumpxml centos7.0 |awk -F "'" '/[shv]da/{print $4}'|sed -n "1p") #磁盤類型 FirstDiskName=$(virsh domblklist $v |awk 'NR==3{print $1}') DiskType=${FirstDiskName::-1} #第一塊磁盤前綴 for j in {b..z};do #循環查找,防止重命名vdb... ! virsh domblklist $v|grep "^$DiskType$j" &> /dev/null && diskName=$DiskType$j && break done #磁盤配置文件 tmpfile=/tmp/diskfile cat > $tmpfile <<- eof <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='$pool/$diskfile'/> <target dev='$diskName' bus='$bus'/> </disk> eof #熱添加磁盤並列出 virsh attach-device $v $tmpfile --persistent virsh domblklist $v ;; 2) virsh domblklist $v read -p "Please input delete disk: " disk ! virsh domblklist $v |grep -w "^$disk" && echo "error: disk $disk not exist" && exit #判斷輸入磁盤是否存在 [[ $disk =~ a$ ]] && echo "error: systemd disk $disk not allow delete" && exit #系統磁盤不容許刪除 virsh detach-disk $v $disk --persistent rm -rf $pool/$diskfile ;; 3) virsh domblklist $v ;; *) echo "error: Please again choose" && HELP && exit ;; esac
#/bin/bash HELP(){ echo "功能:添加虛擬機網卡" } virsh list --all read -p"輸入你要添加硬件虛擬機: " h [[ -z "$v" || "$v" == "-h" || "$v" == "--help" ]] && HELP && exit #判斷輸入是否>存在 stats=$(virsh list --all |awk '$2=="'$v'"{print $3}') [ -z $stats ] && echo "error: virtual not exist" && exit ##建立網卡配置文件 netfine=/tmp/network.xml cat > $netfine <<- EOF <interface type='network'> <source network='default' bridge='virbr0'/> <model type='virtio'/> </interface> EOF virsh attach-device $h $netfine --persistent
#/bin/bash HELP(){ echo "功能:快照管理虛擬機" echo "用法:$(basename $0) <domain> [virtname]" } clear virsh list --all read -p "Please input snapshot virtname: " virtname [[ -z "$virtname" || "$virtname" == "-h" || "$virtname" == "--help" ]] && HELP && exit stats=$(virsh list --all |awk '$2=="'$virtname'"{print $3}') [ -z $stats ] && echo "error: virtual not exits" && exit read -p "Please input snapshot name:" snaName virsh snapshot-create-as $virtname $snaName virsh snapshot-list $virtname
#/bin/bash HELP(){ clear echo "功能:快速克隆虛擬機" echo "用法:$(basename $0) <domain> [0 link clone|1 full clone]" virsh list --inactive echo "(ps:開機的虛擬機不能克隆如須要克隆開機的虛擬機則先執行關機)" } virsh list --inactive read -p "Please input clone-master virtual(--help): " clone [[ -z "$clone" || "$clone" == "-h" || "$clone" == "--help" ]] && HELP && exit stats=$(virsh list --all |awk '$2=="'$clone'"{print $3}') [ -z $stats ] && echo "error: virtual not exits" && exit [ "$stats" != "shut" ] && echo "error: virtual $clone not shutdown" && exit echo "0. link clone 1. full clone" read -p "choose your option(0/1): " op read -p "請輸入新克隆虛機名稱:" KVMname case "$op" in 0) sourceimage=/var/lib/libvirt/images/$clone.qcow2 sourcexml=/etc/libvirt/qemu/$clone.xml newimg=/mnt/lvm1/${KVMname}.qcow2 newxml=/etc/libvirt/qemu/${KVMname}.xml qemu-img create -f qcow2 -b $sourceimage $newimg &> /dev/null cp $sourcexml $newxml sed -i -e "/uuid/d" -e "/<mac/d" $newxml sed -i "/<name/ s/$clone/$KVMname/" $newxml sed -i "/<source file/ s#$sourceimage#$newimg#" $newxml virsh define $newxml virsh list --all ;; 1) virt-clone -o $clone -n $KVMname -f /mnt/lvm1/$KVMname.img virsh list --all ;; *) echo "error: Please again choose" && HELP && exit ;; esac
#!/bin/bash #KVM batch create vm tool #version: 0.1 #author: sun #須要事先準備模板鏡像和配置文件模板 echo "1.建立自定義配置單個虛擬機 2.批量建立自定義配置虛擬機 3.批量建立默認配置虛擬機 4.刪除虛擬機" read -p "選取你的操做(1/2/3/4):" op batch_self_define() { KVMname=`openssl rand -hex 5` sourceimage=/var/lib/libvirt/images/centos7.0.qcow2 sourcexml=/etc/libvirt/qemu/kvmmodel.xml newimg=/mnt/lvm1/${KVMname}.qcow2 newxml=/etc/libvirt/qemu/${KVMname}.xml cp $sourceimage $newimg cp $sourcexml $newxml KVMuuid=`uuidgen` KVMmem=${1}000000 KVMcpu=$2 KVMimg=$newimg KVMmac=`openssl rand -hex 3 | sed -r 's/..\B/&:/g'` sed -i "s@KVMname@$KVMname@;s@KVMuuid@$KVMuuid@;s@KVMmem@$KVMmem@;s@KVMcpu@$KVMcpu@;s@KVMimg@$KVMimg@;s@KVMmac@$KVMmac@" $newxml virsh define $newxml virsh list --all } self_define() { read -p "請輸入新虛機名稱:" newname read -p "請輸入新虛機內存大小(G):" newmem read -p "請輸入新虛機cpu個數:" newcpu sourceimage=/var/lib/libvirt/images/centos7.0.qcow2 sourcexml=/etc/libvirt/qemu/kvmmodel.xml newimg=/mnt/lvm1/${newname}.qcow2 newxml=/etc/libvirt/qemu/${newname}.xml cp $sourceimage $newimg cp $sourcexml $newxml KVMname=$newname KVMuuid=`uuidgen` KVMmem=${newmem}000000 KVMcpu=$newcpu KVMimg=$newimg KVMmac=`openssl rand -hex 3 | sed -r 's/..\B/&:/g'` sed -i "s@KVMname@$KVMname@;s@KVMuuid@$KVMuuid@;s@KVMmem@$KVMmem@;s@KVMcpu@$KVMcpu@;s@KVMimg@$KVMimg@;s@KVMmac@$KVMmac@" $newxml virsh define $newxml virsh list --all } case $op in 1)self_define;; 2) read -p "請輸入新虛機名稱:" newname read -p "請輸入新虛機內存大小(G):" newmem read -p "請輸入新虛機cpu個數:" newcpu for((i=1;i<=$num;i++));do batch_self_define $newmem $newcpu done ;; 3) read -p "請輸入要建立的虛擬機的個數:" num for((i=1;i<=$num;i++));do batch_self_define 1 1 done ;; 4) virsh list --all read -p "輸入要刪除的虛擬機:" del_virtual read -p "請確認是要是否要刪除$del_virtual yes/no:" pd virsh domblklist $del_virtual |egrep -v "^$"|awk 'NR>2{print $2}' > /tmp/$del_virtual [ $pd == "yes" ] && virsh undefine $del_virtual i=1 while read line do rm -rf $line let i++ done < /tmp/$del_virtual echo "Domain $del_virtual disk has been rm -rf" ;; *) echo "輸入錯誤,請從新執行腳本" exit ;; esac