本帖最后由 sungirl 于 2015-7-17 14:05 编辑
故障原因
虚拟桌面无法正常启动的故障,启动报错为“The VDI is not available”,导致部分办公人员无法正常使用虚拟桌面。经过排查主要原因为虚拟机非正常关闭或虚拟机故障重启,服务器虚拟化底层XAPI服务Hung住导致XenServer重启也是其中一方面原因。 故障过程
本次桌面虚拟化无法启动故障持续了一天的时间,由于虚拟机故障数量较多,所以寻求Citrix专家进行远程修复,以下批量处理方法为Citrix专家提供。 解决方法
1 单台解决方法
1.1 找到故障虚拟机的VBD
xe vbd-list vm-uuid=故障虚拟机UUID 1.2 卸载磁盘 VDI xe vdi-forget uuid=VDI UUID 注意:如有两块磁盘需要卸载另一块磁盘的VDI UUID 1.3 重新scan此VDI所在的存储 xe sr-scan uuid=LUN UUID 1.4 将原来的VDI重新挂载到故障虚拟机 xe vbd-create vdi-uuid=XXXXXX vm-uuid= XXXXXXXX bootable=true device=0 type=Disk mode=RW 注:将此VDI重新挂载到VM Bootable=yes:从此VDI启动 Device=0:第一个磁盘,如果有第二个,过程同上 Mode=RW:此磁盘可以读写
2 多台批量处理解决方法
2.1 检索虚拟机UUID到一个文本
cat XXX.txt |grep VDI -A 2|grep uuid|awk '{print $5}' > vdi2 2.2 运行以下脚本进行批量处理有故障的虚拟机 #!/bin/bash #the script is fixed to "The VDI is not available" #read -p "please input your vm name:" name for name in `cat BZZS_vm` do echo "start $name -----" export vmuuid=`xe vm-list name-label=$name|awk '/uuid/ {print $5}'|sed '/^$/d'` export vdiuuid=`xe vbd-list vm-uuid=$vmuuid params=vdi-uuid|awk '/uuid/ {print $5}'|grep -v \< |sed '/^$/d'` for i in $vdiuuid do( sruuid=`xe vdi-list uuid=$i params=sr-uuid|awk '/uuid/ {print $5}'|grep -v \< |sed '/^$/d'`; vbduuid=`xe vdi-list uuid=$i params=vbd-uuids|awk '/vbd-uuids/ {print $4}'|sed '/^$/d'`; devicelabel=`xe vbd-list params=all uuid=$vbduuid |awk '/userdevice/ {print $4}'`; namelabel=`xe vdi-list uuid=$i |awk '/name-label/ {print $4}'`; if [ -z $devicelabel ] then echo "device can't empty"; break; else xe vdi-forget uuid=$i; xe sr-scan uuid=$sruuid; k=0 while [[ `xe vbd-list uuid=$vbduuid|awk '/vm-uuid/ {print $4}'` == $vmuuid ]];do sleep 1s; ((k++)); echo "$k"s; done; xe vdi-param-set name-label=$namelabel uuid=$i xe vbd-create device=$devicelabel vdi-uuid=$i vm-uuid=$vmuuid bootable=true type=Disk mode=RW fi ) echo "$name finished!" done done echo All VDI recovered! |