У нас есть KVM-хост CentOS 5.5, на котором работают гости с различными версиями CentOS и, возможно, с другими ОС позже.
Мы хотели бы иметь возможность либо (а) автоматически отправлять отключение ACPI всем гостям, либо (б) приостанавливать работу всех гостей на диске при завершении работы хоста.
Есть ли стандартный метод для достижения любой из этих целей или это случайная ситуация? Спасибо!
Да.
В virsh shutdown
команда (или другие реализации "выключения" с использованием libvirt, как в virt-manager
) предписывает гостевой ОС полностью завершить работу. На странице руководства:
shutdown domain-id
Gracefully shuts down a domain. This coordinates with the domain
OS to perform graceful shutdown, so there is no guarantee that it
will succeed, and may take a variable length of time depending on
what services must be shutdown in the domain.
The exact behavior of a domain when it shuts down is set by the
on_shutdown parameter in the domain’s XML definition.
С KVM это должно отправить событие ACPI system_powerdown.
В Fedora и RHEL 6 libvirt-guests
Сценарий инициализации настроен на приостановку работы всех гостей при выключении системы. Однако это не особо магия, поэтому можно скопировать это в CentOS 5 с небольшими изменениями.
Теперь это стандартная функция в последних версиях Fedora и RHEL 6.
Насколько мне известно, такого стандартного скрипта для CentOS не существует. Кодировать можно, но это немного опасно, так как вам нужно обрабатывать гостей, которые долго отключаются. Простое уничтожение их после тайм-аута может уничтожить данные, а ожидание их может привести к зависанию вашего завершения работы.
Вместо этого лучше выключить гостей вручную перед перезагрузкой. Какое-то время у меня был скрипт, заменявший выключение и перезагрузку. Этот сценарий предупреждал меня, если были запущены гостевые системы (простой lc в списке виртуальных машин), и блокировал команду, если были запущены гостевые системы.
Гости KVM - это просто процессы пользовательского пространства. у вас должен быть некоторый мониторинг процесса. наиболее распространенным является libvirt (он разработан RedHat, поэтому я думаю, он должен быть доступен в CentOS).