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?

★★★★★

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

Хз, как сделано, но при выключении виртуалки корректно выключаются, а хост их ждёт.

anonymous
()

В том и прелесть, я не знаю как это сделано в проксмокс. qemu-agent только ставлю и всё.

system-root ★★★★★
()

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

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

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

Вызвать poweroff из виртуалки.1 bash скрипт написать и всё он по ссх зайдёт и выключит изнутри как и положено

LINUX-ORG-RU ★★★★★
()

ssh или какой нибудь master of puppets ?

anonymous
()

Используй virsh

for I in $(sudo virsh list | sed ‘1,2d’ | awk ‘{print$2}’); do sudo virsh shutdown $I; done

skazochnik2007
()

Если виртуалка понимает acpi все корректо выключается.

voltmod ★★★
()

qemu умеет разные шатдауны, просто шатдаун шлёт гостю acpi shutdown, poweroff именно убивает машину. Вам нужен первый вариант

dyasny ★★★★★
()

hyper-v, VMWareWorkstation Pro умеют отправлять разные сигналы завершения работы.

anonymous
()

ХЗ как там у Прохмох, но в убунте оно настроено «из коробки»

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

RTP, залогинься! :) Судя по официальной бнвач-странице Спуфинга, трёшка на месте и обрастает проводами

Harald ★★★★★
()

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

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

запись на виртуальный диск посередине не обрывается

Всё отлично обрывается.

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

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

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

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

anonymous
()
4 апреля 2020 г.

Как вариант (с просторов 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
()

ты ищешь /usr/lib/libvirt/libvirt-guests.sh

bass ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.