YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

Guest OSが突如落ちる

現象

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

となり認識されません。

可能性2) NTFS上で走らせている

真偽のほどはわからないけど、ここのフォーラムのなかのコメントのやりとりでそんな会話がなされている。なので、Linux上でNTFSに対応したマウントをしてあげないといけない。
ちなみにリンク先のフォーラムはUbuntuのものなので、対応策として

$ sudo aptitude install ntfs-config

を挙げている。

ワークアラウンド

それでも落ちてしまう場合は、こちらに載っているように、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