После 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?

Другие вопросы по тегам