Чтобы виртуальная система загружалась автоматически при старте основной системы, надо выполнить:
#virsh autostart name_domain
Чтобы корректно выключить (эмулируется нажатие на клавишу питания, что для современных дебианов с поддержкой acpi обеспечивает корректное завершение работы) виртуальную машину выполните:
#virsh shutdown name_domain
Ну и чтобы запустить, выполните:
#virsh start name_domain
Теперь про выключение/перезагрузку основной системы и соответственное выключение виртуальных машин (может очень полезным при выключении основной системы с помощью apcupsd (управление питанием в зависимости от состояния бесперебойника APC).
Создаем скрипт /etc/init.d/vmshutdown
- #!/bin/bash
- # Original Author :
- # Joern http://www.linux-kvm.com/content/stop-script-running-vms-using-virsh
- #
- # Modified by : Vivek Kapoor http://exain.com
- # Date: 22 May 2009
- # Parameters you can modify :: START
- TIMEOUT=90
- LISTFILE=/root/runvm.lst
- LOGFILE=/var/log/kvmshutdown.log
- # Parameters you can modify :: STOP
- PS=/bin/ps
- SSH=/usr/bin/ssh
- GREP=/bin/grep
- CUT=/usr/bin/cut
- VIRSH=/usr/bin/virsh
- TR=/usr/bin/tr
- CAT=/bin/cat
- DATE=/bin/date
- # Function to shutdown the virtual machine
- kvmshutdown () {
- COUNT=0
- PID=$($PS ax|$GREP $1|$GREP kvm|$CUT -c 1-6)
- echo kvmshutdown \: Shutting down $1 with pid $PID
- #$VIRSH shutdown $1
- $($SSH root@$1 halt)
- while [ "$COUNT" -lt "$TIMEOUT" ]
- do
- $PS --pid $PID
- if [ "$?" -eq "1" ]
- then
- return 0
- else
- sleep 5
- COUNT=$(($COUNT+5))
- fi
- done
- echo kvmshutdown \: Timeout happened. Destroying VM $1
- $VIRSH destroy $1
- return 1
- }
- # The program begins here
- $VIRSH list 2>/dev/null|$GREP running|$TR -s \ |$CUT -f3 -d\ > $LISTFILE
- VMN=`$CAT $LISTFILE`
- for vm in $VMN
- do
- echo "$vm" is running
- kvmshutdown "$vm"
- if [ "$?" -eq "0" ]
- then
- echo VM "$vm" normally shutdown
- echo `$DATE +%Y-%m-%d\ %H:%M:%S` VM $vm normally shutdown >> $LOGFILE
- else
- echo VM "$vm" destroyed !
- echo `$DATE +%Y-%m-%d\ %H:%M:%S` VM $vm destroyed >> $LOGFILE
- fi;
- done
Далее, права запуска:
#chmod 755 vmshutdown
Проверяем выключение по ssh (как в скрипте, есть вариант через virsh - пробуйте), не забыв прописать хост в /etc/hosts.
server:/etc/init.d# ./vmshutdown stop
У меня спросил разрешения на отпечаток ключа RSA, после пароль рута, и только тогда выключился. Наверное метод через ssh требует беспарольного доверенного соединение, поэтому вернемся к virsh (закомментируем $($SSH root@$1 halt) и раскомментируем $VIRSH shutdown $1).
Пробуем:
server:/etc/init.d# ./vmshutdown stop
У меня все получилось - скрипт выключил все виртуальные машины. Остается внедрить его в rc.d.
Смотрим на уровень запуска самого kwm на основной системе.
/etc/rc0.d# ls | grep kvm
K20qemu-kvm
Посему выставляем 18 уровень для завершения виртуальных машин.
- #ln -s /etc/init.d/vmshutdown /etc/rc0.d/K18vmshutdown
- #ln -s /etc/init.d/vmshutdown /etc/rc6.d/K18vmshutdown
Теперь подключаемся по ssh к виртуальным машинам и к основному хосту. На основном выполняем:
#poweroff
или:
#reboot
и наблюдаем за виртуальными машинами.
Они должны выключиться раньше основной.
Ну а выключение с помощью apcupsd или позже или не буду описывать, ибо мануалов много, посмотрим.
Комментариев нет:
Отправить комментарий