lcfvol(1.2版快速创建kvm实验环境脚本)_2018_lcf

#!/bin/bash
#version:lcfvol1.2
#writer:lcf
#E-mail:cbuy518@163.com
#My website:www.ald8.cn
#date:2018-6-26
#virsh version  根据库编译:libvirt 3.2.0  使用库:libvirt 3.2.0  使用的 API: QEMU 3.2.0  运行管理程序: QEMU 1.5.3
#--需要安装libguestfs-tools-c.x86_64支持
#--本原始镜像分配磁盘大小为60G,1个CPU,内存1.2G,可自已生成原始镜像后自定义值
#--自定义default.xml配置文件时,请确保下面几行<..>变量名<..>中的变量名格式和下面一致(其它都可以自定义),本脚本以下面方式查询和定义主机名、内存、CPU、磁盘大小值
#  <name>%Name%</name>
#  <memory unit='KiB'>%Memory%</memory>
#  <currentMemory unit='KiB'>%Memory%</currentMemory>
#  <vcpu placement='static'>%Cpu%</vcpu>
#  <source file='/var/lib/libvirt/images/%Name%.img'/>
# --本脚本使用方法,#lcfvol help 加参数help可以查看

#-S---------------------配置项
#VOLPATH--设置默认原始境像路径,镜像文件名可自定义 ||  XMLPATH--设置默认原配置文件路径,配置文件名可自定义 ||  NAME--设置默认虚拟主机名
#MEMORY--设置默认内存大小 || CPU--设置默CPU个数  ||  DISK--设置默认磁盘大小(不能小于原像生成的磁盘大小)
VOLPATH=/var/lib/libvirt/images/default.qcow2
XMLPATH=/etc/libvirt/qemu/default.xml
VP="${VOLPATH%/*}/"
XP="${XMLPATH%/*}/"
NAME="cs7_"
MEMORY=1.2
CPU=1
DISK=60
#-D---------------------配置项

#lcfvol d 名字(不带数字编号) 2 1 3 5 //快速删除虚拟机

#-S---------------------快速生成默认配置虚拟机
if [ "$1" == "" -o "$1" == "fs" ];then
	echo "默认配置-->主机前缀名:$NAME  CPU:$CPU  内存:"$MEMORY"G 磁盘:"$DISK"G"
	if [ "$1" == "" ];then
		read -p "请问创建多少台虚拟机:" num
		expr $num + 0 &>/dev/null
		[[ $? -ne 0 && $? != "fs" ]] &&  echo "无效输入" && exit
		[ $num -lt 1 ] && echo "无效输入" && exit
	elif [  "$1" == "fs" ];then
		[ "$2" != "" ] && echo $2 | egrep -w '[0-9]{1,3}' >/dev/null && num=$2 || exit
	fi
	cd $XP
	temp=`ls $NAME*.xml | sort` 
	temp=${temp//cs7_/}
	temp=${temp//.xml/}
#-S--自动补足指定位数字
	while : 
   		do
		let "i++"
		echo $temp | grep $i >/dev/null
		[ $? -ne 0 ] && lnum[i]=$i 
		[ ${#lnum[@]} -eq $num ] && break
	done
#-D--自动补足指定位数字

	if [ ! $num == 'lcf' ];then
		echo "正在创建虚拟机...."
		for y in ${lnum[@]}
			do
				cp $XMLPATH  $XP$temp1.xml
				Mtemp=`echo "$MEMORY * 1024000" | bc` && Mtemp=${Mtemp%%.*}
				sed  "s,%Name%,$NAME$y,g" $XMLPATH > $XP$NAME$y.xml
				sed  "s,%Memory%,$Mtemp,g" $XP$NAME$y.xml -i
				sed  "s,%Cpu%,$CPU,g" $XP$NAME$y.xml -i
				qemu-img create -b $VOLPATH -f qcow2 $VP$NAME$y.img  "$DISK"G  > /dev/null
				virsh define $XP$NAME$y.xml  > /dev/null
				echo "$NAME$y 创建完成"
		done
		echo "虚拟机$NAME编号为${lnum[@]},一共${#lnum[@]}台全部创建完成"
	virsh list --all
	fi
exit
fi
#-D---------------------快速生成默认配置虚拟机

#-S---------------------自定义IP和主机名生成虚拟机
#-S--修改IP和主机名 ,检测主机名是否存在了
cpn(){
if [ "$1" == "ip" ];then
echo "NAME=eth0
DEVICE="eth0"
ONBOOT=yes
NETBOOT=yes
IPV6INIT=no
BOOTPROTO=none
TYPE=Ethernet
IPADDR="$2"
PREFIX=24" >/ifcfg-eth0
elif [ "$2" == "gateway" ];then
echo "GATEWAY="$1"" >>/ifcfg-eth0
elif [ "$2" == "dns" ];then
echo "NAMEserver "$2"" > /etc/resolv.conf
elif [ "$1" == "NAMEcheck" ];then
	temp=(`virsh list --all | awk  '{print $2}'`)
	for y in ${temp[@]}
	do
		[ "$2" == $y ] && return 110
	done
fi
}
#-D--修改IP和主机名,检测主机名是否存在了
#--使用例子:lcfvol add test 192.168.0.1 c=1 m=1.5 d=80 (add 名字 固定顺序)
CreatePc(){
	cpn NAMEcheck $2
	if [ "$2" != "" -a $? != "110" ];then
		All=("$3" "$4" "$5" "$6")
		for y in ${All[@]}
		do
			echo $y | egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' > /dev/null
			[ $? -eq 0 ] && Itemp=$y
			echo $y | egrep 'c=[1-9][0-9]?' > /dev/null
			[ $? -eq 0 ] && Ctemp=$y
			echo $y | egrep 'm=[0-9]{1,2}\.?[0-9]{0,3}' > /dev/null
			[ $? -eq 0 ] && Mtemp=$y		
			echo $y | egrep 'd=[0-9]{1,4}' > /dev/null
			[ $? -eq 0 ] && Dtemp=$y		
		done			
		Ctemp=${Ctemp##*=} ; Mtemp=${Mtemp##*=} ; Dtemp=${Dtemp##*=} ; Ctemp=${Ctemp%%.*}
		[ "$Itemp" == "" ]  && Itemp="未指定" 
		[ "$Ctemp" == "" ]  && Ctemp="$CPU"
		[ "$Mtemp" == "" ]  && Mtemp="$MEMORY"
		[ "$Dtemp" == "" ]  && Dtemp="$DISK"
		echo "主机名:$2  IP:$Itemp  CPU:$Ctemp  内存:"$Mtemp"G 磁盘:"$DISK"G"
		Mtemp=`echo "$Mtemp * 1024000" | bc` && Mtemp=${Mtemp%%.*}
		[ "$1" == "addi" -o $1 == "addsi" ] && ans="y" && echo "正在创建$2.."  || read -p "确认创建这台主机吗(y)" ans 
		if [ "$ans" == "y" ];then
			cp $XMLPATH  $XP$2.xml
			sed  "s,%Name%,$2,g" $XMLPATH > $XP$2.xml
			sed  "s,%Memory%,$Mtemp,g" $XP$2.xml -i
			sed  "s,%Cpu%,$Ctemp,g" $XP$2.xml -i		
			qemu-img create -b $VOLPATH -f qcow2 $VP$2.img "$Dtemp"G  > /dev/null
			virsh define $XP$2.xml > /dev/null
			[ ! $Itemp == "未指定" ] && cpn ip $Itemp		
			[ ! $Itemp == "未指定" ] && virt-copy-in -d "$2"  /ifcfg-eth0 /etc/sysconfig/network-scripts/ > /dev/null
			echo "$2" > /hostname
			virt-copy-in -d "$2"  /hostname /etc/
			rm -rf  /ifcfg-eth0 /hostname
			Mtemp=$MEMORY
			Ctemp=$CPU
			Dtemp=$DISK
			echo "-----------主机:$2 创建完成--------------------"
		fi
	else
		echo "主机:$2 已存在"
	fi
}

if [ "$1" == "add" -o "$1" == "addi" ];then
	CreatePc "$1" "$2" "$3" "$4" "$5" "$6"
elif [ "$1" == "adds" -o "$1" == "addsi" ];then
	if [ -e "$2" ];then
		n=`cat $2 | wc -l`
		for line in `seq $n`
		do
			y=(`sed -n ''$line'p' $2`)
			CreatePc "$1" "${y[0]}" "${y[1]}" "${y[2]}" "${y[3]}" "${y[4]}" 
		done
	else
	
		echo "无效参数输入格式(可以加--help查找例子),请检查再尝试"
	fi	
exit
fi
#-D---------------------自定义IP和主机名生成虚拟机

#-S---------------------删除所有主机或删除和某一台主机
if [ "$1" == "delall" -o "$1" == "delalli" ];then
	[ "$1" != "delalli" ] && read -p "你确认要删除所有主机吗(y)" ans
	if [ "$ans" == "y" ];then
		cd $VP
		ls *.img | xargs -n1 rm -rf 
		cd $XP
		temp=${XMLPATH##*\/}
		xmls=`ls *.xml | sed -r '/'$temp'/d;s/.xml//g'`
		echo $xmls | xargs -n1 virsh undefine
		echo $xmls | xargs -n1 rm -rf 
	fi
elif [ "$1" == "del" ];then
	if [ $2 ];then
		virsh undefine $2
		rm -rf $VP$2.img
	fi	
exit
fi
#-D---------------------删除所有主机或删除和某一台主机

if [ "$1" == "help" ];then
echo '	
----------使用方法例子 (注意切换成英文模式输入,才不会造成变量字符编码不识别的情况)

-1-快速生成默认虚拟主机(一种是交互式和非交互式fs)

  [root@lcf2018 /]# lcfvol 
  请问创建多少台虚拟机:2             //交互式创建,输入要创建几台
  ....     
   [root@lcf2018 /]# lcfvol fs 2   //非交互式,fs是关键字 后面加数字要创建几台
    ....
    
-2-自定义虚拟主机(一种是交互式add和非交互式addi)

	格式:#lcfvol add/addi  主机名 ip c=(cpu个数) m=(内存大小,单位G) d=(硬盘大小,单位G) // (add/addi 主机名)固定参数位置,后面的不固定和可选
	
	[root@lcf2018 /]# lcfvol add lcf c=2 m=2 d=70  //交互式创建,add关键字参数 
	主机名:lcf  IP:未指定  CPU:2  内存:2G 磁盘:60G
	确认创建这台主机吗(y)y
	....
	[root@lcf2018 ~]# lcfvol addi test m=2 192.168.1.20
	主机名:test  IP:192.168.1.20  CPU:1  内存:2G 磁盘:60G
	正在创建test..
	-----------主机:test 创建完成--------------------
	[root@lcf2018 /]# lcfvol addi ald8 c=2 m=2 d=70    //非交互式创建,addi关键字参数
	主机名:ald8  IP:192.168.0.66  CPU:2  内存:2G 磁盘:60G
	正在创建ald8..
	...

-3-文件导入批量生成自定义主机(一种是交互式adds和非交互式addsi)	

	文件格式:主机名 ip c=(cpu个数) m=(内存大小,单位G) d=(硬盘大小,单位G) // 以空格作分隔,(主机名)固定第一个位置,后面的不固定和可选
	[root@lcf2018 ~]# cat adds /ips  
	pc3 192.168.1.20 m=2 c=2 d=80
	lfc1 192.168.1.2 c=2 
	ald 192.168.1.1 
    ...
    
   [root@lcf2018 ~]# lcfvol adds /ips       //交互式创建,adds关键字参数
	主机名:pc3  IP:192.168.1.20  CPU:1  内存:2G 磁盘:60G
	确认创建这台主机吗(y)
	....

	[root@lcf2018 ~]# lcfvol addsi /ips      //非交互式创建,addsi关键字参数
	主机名:pc3  IP:192.168.1.20  CPU:1  内存:2G 磁盘:60G
	正在创建pc3..
' 
fi

 

引用\[1\]:报错内容显示在加载FAST_LCF_ATEPC模型的state_dict时出现了异常,其中有一些意外的键。这意味着模型的state_dict中包含了一些在模型定义中未定义的键。引用\[2\]:报错内容显示在加载ResNet模型的state_dict时出现了异常,缺少了一些在state_dict中的键。这意味着模型的state_dict中缺少了一些在模型定义中定义的键。引用\[3\]:报错内容显示在尝试在CUDA设备上反序列化对象时出现了异常,但torch.cuda.is_available()返回False。这意味着你正在运行在一个只有CPU的机器上,需要使用torch.load函数并设置map_location=torch.device('cpu')来将存储映射到CPU上。 问题:在加载FAST_LCF_ATEPC模型的state_dict时出现了异常,有意外的键。如何解决这个问题? 回答: 这个问题的原因是模型的state_dict中包含了一些在模型定义中未定义的键。为了解决这个问题,你可以尝试使用strict=False参数来加载state_dict,这样就可以忽略掉意外的键。另外,你也可以检查模型定义和state_dict中的键是否匹配,确保它们一致。 #### 引用[.reference_title] - *1* [load_state_dict报错: Error(s) in loading state_dict for XXX: Missing keys(s) in state_dict: ....](https://blog.csdn.net/gray___/article/details/123400407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [解决RuntimeError: Error(s) in loading state_dict for ResNet: Missing key(s) in state_dict: “conv1.0...](https://blog.csdn.net/qq_39691492/article/details/125675091)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

璐程风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值