LINUX.ORG.RU
ФорумAdmin

Как правильно выключать виртуалки?

 


1

4

Предположим, имеется сервер с кучей виртуалок, время от времени, когда мамка заставляет прибраться в комнате, надо сервер выключать. Как корректно завершать работу виртуальных машин, на которых крутятся всякие важные сервисы?

Заглянул в местечковый /etc/rc.shutdown файлик, оно отправляет всем процессам сигнал killall5 -15, ждёт, отправляет -9, я думал, что авторы QEMU учли такой момент, отправил через kill -n 15 $(pgrep qemu), а виртуалка просто убилась апстену, — я ожидал, что QEMU отправит гостевой ОС сигнал «нажали кнопку power». Нет, не отправил, виртуалка просто убилась сразу.

Сходу есть вариант слушать -qmp сокет, отправлять json-команду { "execute": "system_powerdown" }. Это говорят, аналогично действию «нажали кнопку power на системнике» и значит не только Linux, а всякая ОС должна сообразить, что от неё просят выключиться.

Дело в том, что это действие хотелось бы автоматизировать. Что, писать очередного /etc/rc.d демона, который будет корректно пробегаться по всем виртуалкам и завершать их? И только после этого, собственно, выключать сервер?

Ещё есть вариант, очень хороший, это полностью перекатиться на PXE, чтобы все ОС (линуксы) в виртуалках загружались по PXE, и тогда вообще без разницы как виртуалки будут выключены, тогда как они каждый раз будут загружаться и настраиваться «на лету».

А как это сделано у Proxmox?

★★★★★

Не разбирался как сделано, но в Debian у виртуальных машин появляется событие «power button pressed» и запускается процесс останова.

Установленные пакеты:

  • qemu-kvm
  • libvirt-clients
  • libvirt-daemon-system
Evenik ()
Последнее исправление: Evenik (всего исправлений: 2)

Если по теме, то по идее резкое убивание виртуалки не делает ничего плохого, железо же виртуальное, запись на виртуальный диск посередине не обрывается, чтоб ФС попортить или что-нибудь в этом роде

Harald ★★★★★ ()
Ответ на: комментарий от Harald

Так как я залогинюсь, когда ник прибит окончательно и туда ему и дорога. Это был ник, когда ЛОР был свободным и демократичным.

А теперь вот жалею что анонимусам низя в некоторые разделы, но с другой стороны, ЛОР занимает время только на бегло прочитать.

Смотрю зачинщики большой чистки и самовыпилов посетителей сами посваливали в историческое небытиё, молодцы, чо…

anonymous ()

Как вариант (с просторов google, кто умный - Ваш вариант в студию):

  1. добавить в скрипт запуска VM [code]echo $$>/home/user/vm.pid #сохраняем PID скрипта запуска в файл[br] -monitor telnet:127.0.0.1:55555,server,nowait; # запускаем мониторинг порта 55555 [/code]
  2. создать скрипт [code] #!/bin/sh echo system_powerdown |telnet 127.0.0.1 55555 # выключить VM [br] read PID</home/user/vm.pid # прочитать PID из файла [br] while [ -d /proc/$PID ]; do sleep 1; done # ждать завершения VM [br] notify-send «NAS выключен!»; # отправить себе в GUI сообщение [/code]
anonymous ()
Ответ на: комментарий от anonymous

Как вариант (с просторов google, кто умный - Ваш вариант в студию):

1. Добавить в скрипт запуска VM:

echo $$>/home/user/vm.pid #отдельной строкой, в начало. Сохраняем PID скрипта запуска в файл 
-monitor telnet:127.0.0.1:55555,server,nowait; # В строку запуска VM. запускаем мониторинг порта 55555 

2. Cоздать скрипт:

#!/bin/sh
echo system_powerdown |telnet 127.0.0.1 55555 # выключить VM
read PID</home/user/vm.pid # прочитать PID из файла
while [ -d /proc/$PID ]; do sleep 1; done # ждать завершения VM 
notify-send «VM выключена»; # отправить себе в GUI сообщение 

P.S.: Просьба к модераторам удалить мой предыдущий коммент, там выбран не тот вариант представления кода. Спасибо.

anonymous ()