У меня есть три сервера 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, поэтому приветствую любую помощь, исправление или запрос разъяснений. Заранее огромное спасибо за любую помощь!
Из https://github.com/xapi-project/xen-api/blob/fe28d3e3254b1c9928dfb99d75e94e949504dcf7/ocaml/xapi/xapi_xenops.ml, который, похоже, является источником v6.1 E017, имеет строку # 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
?