Автор Тема: Корректное выключение виртуальной машины с помощью libvirt-guest (Решено)  (Прочитано 389 раз)

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 046
  • ITS
Прошу помощи. Имеется виртуальная машина, которая на хосте с systemd должна:
1) выключаться (сохраняться /usr/libexec/libvirt-guests.sh stop) до выключения хоста
2) включаться после загрузки хоста

Второй вариант пока решил принудительной автозагрузкой:
# virsh autostart VM

Первый вариант не отрабатывается почему то.
# cat /lib/systemd/system/libvirt-guests.service
[Unit]
Description=Suspend/Resume Running libvirt Guests
Requires=virt-guest-shutdown.target
After=network.target
After=time-sync.target
After=libvirtd.socket
After=virtqemud.socket
After=virtlxcd.socket
After=virtvboxd.socket
After=virtvzd.socket
After=virtxend.socket
After=virt-guest-shutdown.target
Documentation=man:libvirt-guests(8)
Documentation=https://libvirt.org

[Service]
EnvironmentFile=-/etc/sysconfig/libvirt-guests
# Hack just call traditional service until we factor
# out the code
ExecStart=/usr/libexec/libvirt-guests.sh start
ExecStop=/usr/libexec/libvirt-guests.sh stop
Type=oneshot
RemainAfterExit=yes
StandardOutput=journal+console
TimeoutStopSec=0

[Install]
WantedBy=multi-user.target

# cat /lib/systemd/system/virt-guest-shutdown.target
[Unit]
Description=Libvirt guests shutdown
Documentation=https://libvirt.org

# cat /etc/sysconfig/libvirt-guests | grep -v ^# | grep -v ^$
URIS=default
ON_SHUTDOWN=suspend

все, что нужно, это выполнить скрипт /usr/libexec/libvirt-guests.sh stop до начала выключения системы хоста.
Как это сделать? А то я уже "зачрутился и переименовался" в конец с этим systemd )
« Последнее редактирование: 11.08.2023 18:09:21 от rits »

Оффлайн toreonify

  • Давно тут
  • **
  • Сообщений: 77
1. В файле /lib/systemd/system/libvirt-guests.service
After=libvirtd.socket
заменить на:
After=libvirtd.service

2. По умолчанию alias на URI default не задан. В файле /etc/libvirt/libvirt.conf его можно задать, например, на QEMU.
uri_default = "qemu:///system"

Если же вам нужно выключать несколько типов подключений, то их можно указать через пробел в /etc/sysconfig/libvirt-guests, а также заменить default напрямую на нужное значение:
URIS=qemu:///system
или
URIS='default xen:/// vbox+tcp://host/system lxc:///'

Про дополнительные настройки libvirt-guests можно почитать на сайте Red Hat:
https://access.redhat.com/documentation/ru-ru/red_hat_enterprise_linux/6/html/virtualization_administration_guide/sub-sect-shutting_down_rebooting_and_force_shutdown_of_a_guest_virtual_machine-manipulating_the_libvirt_guests_configuration_settings

Проверил на ALT Workstation K 10.1 с двумя виртуальными машинами в QEMU. Одна - ALT Linux Workstation K 10.1, вторая - Windows Server 2012 R2. При ON_SHUTDOWN=suspend усыпляются и стартуют обратно при включении, при ON_SHUTDOWN=shutdown корректно (gracefully) выключаются, в логах есть записи, а на винде нет окошка о "укажите причину выключения".

З.Ы. По идее, ожидать сокет нет смысла, поэтому службы не ждали друг друга.

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 046
  • ITS
Проверил на ALT Workstation K 10.1 с двумя виртуальными машинами в QEMU. Одна - ALT Linux Workstation K 10.1, вторая - Windows Server 2012 R2. При ON_SHUTDOWN=suspend усыпляются и стартуют обратно при включении, при ON_SHUTDOWN=shutdown корректно (gracefully) выключаются, в логах есть записи, а на винде нет окошка о "укажите причину выключения".
Спасибо дружище, то что надо, работает! Теперь в маны и настройка NUT на корректное выключение по питанию, будет отрабатываться правильно.