現象
VMWare Server 1.0.7 on RHEL4 update4上で走っているRHEL4 update7が何度か以下の様なメッセージを残して突如落ちてしまった。バックアップから復旧させても同様に落ちることがある。
Mar 06 20:23:02: app| vmdbPipe_Streams Couldn't read: OVL_STATUS_EOF Mar 06 20:23:02: app| VMHS: Connection to VM broken: cfg: /path/to/vmx-file; error: Pipe: Read failed; state: 3 Mar 06 20:23:04: app| VM suddenly changed state: poweredOff. Mar 06 20:23:04: app| VM suddenly changed state: poweredOff. Mar 06 20:23:04: app| VM suddenly changed state: poweredOff. Mar 06 20:23:04: app| VMServerd IPC closed the connection with thread /path/to/vmx-file (0x83028b0)
対策
可能性1) きちんとマウントしてあげていない
たとえばバックアップをリネームしてあげただけで、VMWare Server Consoleから立ち上げるときの情報は何も変更していないとか。その場合はきちんとvmware-cmdを使って登録し直してあげてみるとよいかも。
$ vmware-cmd -s unregister /full-path/to/vmx-file $ vmware-cmd -s register /full-path/to/vmx-file
このコマンドを使わなくてもVMWare Server ConsoleのUIでファイルを選び直してあげるだけでもよいかもしれない。上記でフルパスと書いていることに注意。フルパス指定しないと
VMControl error -11: No such virtual machine
となり認識されません。
ワークアラウンド
それでも落ちてしまう場合は、こちらに載っているように、Host OS側でGuest OSを監視して落ちていたら自動的に起動させてあげるようにしてあげる。万一消えたときのために転載。各スクリプトの詳細はリンク先で。
- vmcheck.sh
#!/bin/sh # ------------------------ # VM Bootup Script # ------------------------ # Version : 1.0 # date : 2008/10/19 export LANG=C export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH ## Set VMBOOT=/home/system/scripts/apl/vmware/vmboot.sh VMCKLOG=/home/system/logs/vm-check.log VMLIST=/home/system/logs/vmlist.txt ## Cheack # CentOS-Web VMNAME=CentOS-Web ps ax | grep vmx | grep $VMNAME > /dev/null if [ $? -eq 1 ]; then date +%Y/%m/%d\ %H:%M:%S >> $VMCKLOG echo $VMNAME >> $VMCKLOG $VMBOOT $VMNAME >> $VMCKLOG 2>&1 sleep 20 echo "------------------" >> $VMCKLOG fi exit 0 # EOF
- vmlist.sh
#!/bin/sh # ------------------------ # VM List Script # ------------------------ # Version : 1.0 # date : 2008/10/19 export LANG=C export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH ## Set VMCMD=/usr/bin/vmware-vim-cmd VMLIST=/home/system/logs/vmlist.txt ## Exec $VMCMD vmsvc/getallvms > $VMLIST exit 0 # EOF
- vmboot.sh
#!/bin/sh # ------------------------ # VM Bootup Script # ------------------------ # Version : 1.0 # date : 2008/10/19 export LANG=C export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH ## Set VMCMD=/usr/bin/vmware-vim-cmd VMLIST=/home/system/logs/vmlist.txt ## Check if [ -z $1 ]; then echo "ERR : please VM name" echo "USE : ./vmboot.sh [VM NAME]" exit 0 else VMNAME=$1 fi ## Get vmid cat $VMLIST | grep $VMNAME > /dev/null 2>&1 if [ $? -eq 1 ]; then echo "ERR:"$VMNAME" - not found " exit 0 fi ## Bootup VMID=`cat $VMLIST | grep $VMNAME` $VMCMD vmsvc/power.on $VMID exit 0 # EOF