Хост - Debian 4 ядро 2.6.24 etchnhalf .
Стоит VirtualBox 2.1.0, в нем гость ВинХР. Виртуалка запускается при старте системы через rc.d командой
VBoxManage startvm "WinXP" -type vrdp
Гуев на хосте нет. Проблема в том, что если не выключить корректно виртуалку, хост при выключении падает в кернел паник.
Я написал скрипт выключения виртуальной машины, который пытается корректно выключить виртуальную машину, а в случае неудачи просто убивает относящиеся к ней процессы. Да и вообще, если не найдет запущенных машин пытается убить все Vbox`ы... так, на всякий случай ;)
скрипт можно (и нужно) сложить в /etc/init.d/vm.stop и сделать на него симлинки
ln -s /etc/init.d/vm.stop /etc/rc0.d/K08vm.stop
ln -s /etc/init.d/vm.stop /etc/rc1.d/K08vm.stop
ln -s /etc/init.d/vm.stop /etc/rc6.d/K08vm.stop
А вот, собссно и сам скрипт. Поддерживается несколько ВМ. Комментарии в коде.
Версия 0.2
#!/bin/sh
#v0.2
TIMEOUT=30 #Таймаут в секундах на заверщение работы. =DELAY*TIMEOUT. Для каждой виртуальной машины
DELAY=2 #Задержка проверки.
for VMS in WinXP W2k3 #Виртуальные машины через пробел. Регистрозависимо.
do
COUNT=1
if /usr/bin/VBoxManage showvminfo "$VMS" | grep "running" -c > /dev/null
then /usr/bin/VBoxManage controlvm "$VMS" acpipowerbutton #Команда "нажать кнопку питания"
# Гостевая машина должна выполнять какое-либо действие (логично, что это выключение или спячка)
# при нажатии кнопки питания. Иначе она будет просто убита по таймауту.
# К примеру, cерверные версии Windows по умолчанию, без входа в систему не реагируют на кнопку питания.
echo -n Stopping Virtual Machine $VMS.
until [ "$COUNT" -gt "$TIMEOUT" ]
do
sleep $DELAY
echo -n .
if /usr/bin/VBoxManage showvminfo "$VMS" | grep "powered off" -c > /dev/null
then echo "done"
break
fi
let "COUNT += 1"
done
if [ "$COUNT" -gt "$TIMEOUT" ]
then echo -e '\E[31;40mtimeout. will be terminated.'; tput sgr0
fi
fi
done
killall -r VBox #На всякий случай, полюбас убиваею все VBox`ы
Форматирование кода уехало. Обращайте внимание на "левые" комментарии
0 коммент.:
Отправить комментарий