После destroy_domain виртуальная машина XenServer не может мигрировать в пул
У меня есть три сервера XenServer 6.1 в пуле. HA обычно используется, но в настоящее время отключен для этой операции.
Недавно мне пришлось принудительно завершить работу виртуальной машины, уничтожив домен с помощью следующих инструкций: http://support.citrix.com/article/CTX131421
За исключением того, что в моей командной строке не было команды destroy_domain. В другой статье указывался полный путь по адресу / opt / xensource / debug / xenops destroy_domain -domid x ( http://gimpland.org/now/2013/01/citrix-xenserver-how-to-force-shutdown-virtual-machines/)
Это сработало, и я смог запустить ВМ без проблем. Однако я обнаружил, что пытался перенести виртуальную машину на любой другой сервер в пуле. Попытка перенести виртуальную машину на другой хост в пуле через XenCenter приводит к следующей ошибке примерно через 30-40 секунд:
Migrating VM 'Cleanup 7' from XenBlade5 to XenBlade 6:
Error: Internal error: file "xapi_xenops.ml", line 1740, characters 3-9: Assertion Failed.
ВМ сейчас приостановлена. Попытка возобновить его (все еще на исходном сервере, так как он не мог переместиться) приводит к следующей ошибке в журнале событий сервера: не было доступных серверов для выполнения указанной операции.
Кроме того, XenCenter открывает диалоговое окно с сообщением "Ошибка запуска виртуальной машины" с ошибкой для каждого сервера в пуле, говорящей "Объект был удален.VDI:OpaqueRef:NULL. Сервер не будет возобновлен.
Если я принудительно выключу виртуальную машину, я могу перезапустить ее. К сожалению, виртуальная машина все еще не может быть перенесена и выдает те же ошибки, что и выше.
Я обнаружил эту проблему на одном из наших производственных серверов виртуальных машин, но эти тесты выполняются на одноразовой виртуальной машине Windows 7 Enterprise. Производственная виртуальная машина - это CentOS, поэтому я не думаю, что у меня есть что-то специфическое для операционной системы. Это похоже на проблему с командой destroy_domain, которую я выпустил выше.
Другие виртуальные машины, которые не были отключены с помощью destroy_domain, могут свободно перемещаться на этот сервер и с него.
Я не ветеран XenServer, поэтому любая помощь, исправление или просьба о разъяснении с благодарностью. Огромное спасибо заранее за любую помощь!
1 ответ
В https://github.com/xapi-project/xen-api/blob/fe28d3e3254b1c9928dfb99d75e94e949504dcf7/ocaml/xapi/xapi_xenops.ml, который выглядит как источник E67 v6.1, есть строка #1739:
(* XXX: if the guest crashed or shutdown immediately then it may be offline now *)
assert (Db.VM.get_power_state ~__context ~self = (if paused then `Paused else `Running))
Я не делаю OCAML и не являюсь экспертом по XenServer, но это утверждение, по-видимому, содержится в методе, называемом start
и похоже, что он гарантирует, что виртуальная машина запущена, путем проверки состояния питания во внутренней базе данных. Я предполагаю, что, поскольку вы заставили виртуальную машину завершить работу, она не обновила базу данных должным образом.
Возможно, команда из вашей второй ссылки очистит базу данных:
xe vm-reset-powerstate uuid=<UUID of VM> force=true
В противном случае вам придется просмотреть журналы, чтобы определить, какие операции не были выполнены до этой, может быть, в /var/log/xensource.log
?