Автоматический запуск виртуальных машин virtualbox при загрузке windows-хоста

virtualbox_logoЕсть у одних моих клиентов хитрая программа, защита которой привязана к аппаратной части пк. Мы посадили эту программу на виртуальную машину virtualbox, а виртуалбокс установили на один из виндовых серверов. Все бы ничего, но при перезагрузке физического сервера приходилось логиниться на него, запускать виртуальную машину и оставлять все это добро работать в терминальной сессии. Неудобно.

Оказалось, что можно запросто организовать автоматический запуск виртуальных машин при загрузке сервера через VirtualboxVmService. Качаем программу отсюда http://sourceforge.net/projects/vboxvmservice/ Инсталлируем, чуть подправляем конфиг, перезагружаемся  — и все работает (в идеале).

Нюанс: у нас установлен Virtualbox устаревшей версии. При попытке старта созданной программой службы мы получили в логе VBoxVmService.log сообщение:

Error creating VirtualBox instance! rc = 0x80004002

Погуглил. Наткнулся на предложение обновить версию VirtualboxVmService в соответствии с версией самого виртуалбокса. Догадался, что у нас с точностью до наоборот: для старой версии виртуалбокса нужен старый VirtualboxVmService. Скачал устаревшую версию и все заработало с полпинка!


 

Документация на VirtualboxVmService.

На всякий случай приведу перевод документации текущей версии 4.1

##############################################################################
#
# ЧАСТЬ 1 — SETUP
#
##############################################################################

Шаг 1.
Убедитесь что Virtualbox установлен и ваши виртуальные машины могут стартовать с помощью менеджера virtualbox без каких либо проблем. Выключите виртуальные машины и закройте VirtualBox Manager.
ВАЖНО: Если вы хотите управлять вашей виртуальной машиной с помощью VRDP, Включите поддержку удаленного монитора в настройках display settings и определите соответствующий порт для каждой виртуальной машины индивидуально (т.е 3010 для Vm0, 3020 для Vm1, и т.д). Не используйте для этих целей стандартный порт 3389!

Шаг 2.
Скачайте и распакуйте последний релиз VBoxVmService в c:\vms.

Шаг 3
Откройте VBoxVmService.ini в любом текстовом редакторе и отредактируйте под ваши нужды. Этот файл содержит пример установки с двумя виртуальными машинами.

Ключ / Значение Описание
——————————————————————————
[Settings]
ServiceName=VBoxVmService Имя службы
RunAsUser=DomainName\UserName Имя пользователя под которым сервис будет стартовать. Процесс службы залогинится под этим пользователем. Если пользователь принадлежит к встроенному домену (т.е локальный) вы должны определить как .\UserName.
UserPassword=xxxxxxxx ДОЛЖЕН БЫТЬ ОПРЕДЕЛЕН! УСТАНОВИТЕ INI ФАЙЛУ ДОСТУП НА ЧТЕНИЕ ТОЛЬКО ДЛЯ ВАС И СИСТЕМЫ
VBOX_USER_HOME=C:\Users\YOUR_NAME_HERE\.VirtualBox Путь к дирректории .VirtualBox для вашего профиля. Она обычно располагается в персональной папке пользователя.
RunWebService=no Стартовать или нет VBoxWebSrv.exe, VirtualBox HTTP веб сервер автоматически. Может быть «yes» или «no». Оставьте ее в «no» если вы не знаете что это.
PauseShutdown=5000 Параметр используется для замедления выключения компьютера чтобы предотвратить крах виртуальной машины при выключении или перезагрузке. (5000=5 секунд) Заметте что Windows имеет ограниченя как долго контроллер сервиса будет ждать когда система перезагрузится. Лимит времени определен в переменной WaitToKillServiceTimeout в следующей ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control. Ваше значение PauseShutdown не должно превышать это значение в реестре.

[Vm0]
VmName=ubuntu Имя для запуска VM (Чуствительно к регистру!)
ShutdownMethod=savestate Метод выключения («savestate», или «acpipowerbutton»). Когда используется «savestate», состояние машины сохраняется и может быть возобновлено когда она старует в следующий раз. Когда используется «acpipowerbutton» , VM просто выключится. Если ваша VM долго выключается рекомендуется использовать savestate, который завершает намного быстрее.
AutoStart=yes Будет или нет VM стартовать автоматически когда VBoxVmService работает. По умолчанию установлено в «yes».

[Vm1]
VmName=winxp Как в можете видеть значения ниже почти повторяются для каждой [VmX]-секции файла
ShutdownMethod=acpipowerbutton
AutoStart=no Эта VM не будет стартовать автоматически.
##############################################################################
#
# ЧАСТЬ II — INSTALLATION
#
##############################################################################
Шаг 1. (для WINXP / SERVER2003) Запустите CMD (Командная строка) из вашего старт меню.
Шаг 1. (для VISTA / SERVER2008 / WIN7) Кликните правой кнопкой мыши по CMD (командная строка) и выберете «Запуск от имени администратора» в контекстном меню.
Step 2. Инсталируйте сервис. В терминальном окне наберите:
cd C:\vms [ENTER]

VmServiceControl.exe -i [ENTER]

Шаг 3. Перезагрузите вашу систему.
Если все сделано правильно, вы сможете подключиться к вашей VM с помощью VRDP клиента (или ssh клиента, если вы сконфигурировали ssh сервер внутри вашей VM). Если нет то обратитесь к секции TROUBLESHOOTING которая расположена ниже для отладки.
##############################################################################
#
# ЧАСТЬ III — UNINSTALL
#
##############################################################################

Шаг 1. (для WINXP / SERVER2003) Запустите CMD (Командная строка) из вашего старт меню.
Шаг 1. (для VISTA / SERVER2008 / WIN7) Кликните правой мышкой по CMD (Командная строка) и выберете «Run as Administrator» из контекстного меню.
Шаг 2.[/b] Остановите VBoxVmService сервис. Внутри терминального окна наберите:
cd C:\vms [ENTER]
VmServiceControl.exe -k [ENTER]
Замечание: вы можете также остановить сервис из консоли управления компьютером.
Шаг 3. Удалите сервис . продолжайте в терминальном окне набирать:
VmServiceControl.exe -u [ENTER]
Шаг 4. Удалите директорию с программой(В этом примере «c:\vms»).
Шаг 5. Вы удалили VBoxVmService из вашей системы.
##############################################################################
#
# ЧАСТЬ IV — TROUBLESHOOTING
#
##############################################################################

Если сервис не поднимает вашу VM как вы хотите, попробуйте следующее:
Осторожно перепроверьте настройки которые вы сделали в «VBoxVmService.ini».
Уменьшите количество ваших виртуальных машин до одной (= только [Settings] и секция [Vm0] в вашем ini файле) в вашем ini файле , для отладки
Переключитесь в командную строку, cd в VBoxVmService директорию и наберите:
VmServiceControl.exe -su 0 [ENTER]
чтобы поднять VM которую вы определили в секции [Vm0] файла «VBoxVmService.ini».
Если вы успешно подняли VM, вы увидите в диспетчере задач запущенный процесс «VBoxHeadless.exe» под определенным пользователем
Комманда:
VmServiceControl.exe -sd 0 [ENTER]
может быть использована для проверки вывода во время падения процесса[Vm0]. После этого, не должно быть запущенного «VBoxHeadless.exe» процесса. В дополнении, вы должны увидеть то что процесс «VBoxSVC.exe» завершится в скором времени после успешного завершения «VBoxHeadless.exe».
И команда:
VmServiceControl.exe -st 0 [ENTER]
может быть использована для проверки статуса целевой VM [Vm0].
Читайте лог файл!
Если вы видите «Could not find a registered machine named…», проверьте переменную среды VBOX_USER_HOME которая должна быть корректно установлена.
Если вы сделали ошибку в VBOX_USER_HOME, какбы то ни было, исправление ее в VBoxVmService.ini не достаточно. Потому что значения были записаны в переменные среды во время инсталляции. Вы должны открыть Панель управления->Система->Расширенные настройки системы->Дополнительно-Переменные среды, и пофиксить их здесь. Пожалуйста также убедитесь что VBOX_USER_HOMЕ установлена как системная переменная, а не как пользовательская.
После установки и каждый раз когда вы изменяете VBOX_USER_HOME, требеется перезагрузка системы для того чтобы VBoxVmService работал корректно.
Если проблема не устранена, опишите ее здесь на форуме, может кто и поможет.

Запись опубликована в рубрике Работа, Свободный софт. Добавьте в закладки постоянную ссылку.

20 комментариев на «Автоматический запуск виртуальных машин virtualbox при загрузке windows-хоста»

  1. Тимофей говорит:

    Огромное спасибо за статью! Всё завелось без проблем.

    • Administrator говорит:

      Пожалуйста! Нахожу решения сам и делюсь с другими, чего и Вам желаю. Нашел сам — помоги коллеге!
      Если статья оказалась полезной — поставьте на нее ссылочку где-нибудь у себя в блоге или контакте ;-)

  2. Юрий говорит:

    все процессы работают в системе (Win server 2008r2) в трее значок показывает что гостевая ос запущена (WinXP), но сама гостевая ос не отображается на экране.

    • Administrator говорит:

      Так и должно быть: мы же запускаем его в режиме службы, чтобы все работало и не мешалось. Виртуалка крутится, а чтобы увидеть рабочий стол нужно прицепиться к ней через RDP.

  3. Олег говорит:

    Приветствую!
    Windows server 2008 R2.
    Все делаю по инструкции.
    В ответ на команду VmServiceControl.exe — дает Крокозябру.
    В ответ на команду VmServiceControl.exe -su 0 дает «Could not find a registered machine named…»

    Но путь в параметре VBOX_USER_HOME указан верно.
    Панель управления->Система->Расширенные настройки системы->Дополнительно-Переменные среды — Здесь тоже значение переменной верно.

    Как быть в этой ситуации?

    • lexar говорит:

      я перенес папку настроек VirtualBox в папку с простым путём без пробелов и кирилицы — типа C:\vbox\.VirtualBox и после ребута всё заработало

      зы. юзаю сабжи версии 5

      • casper_ говорит:

        привет, подскажи как ты пренастроил путь к этой папке, гденемогу найти что и как

      • casper_ говорит:

        привет, подскажи как ее перенести, не могу найти что и как :(

  4. Тимофей говорит:

    Всё работало до тех пор, пока мне не понадобилась вторая виртуалка.
    Сделал две отдельные службы для двух машин.
    Работает с одним косяком. При загрузке хоста одна машина поднимается, вторая нет. Захожу на хост и перезапускаю службу второй машины, после чего и она запускается.
    Есть решение? Например паузу куда-нибудь прописать при запуске?

    • Administrator говорит:

      Вроде у меня есть сервер с двумя виртуальными машинами. Посмотрю в понедельник, как там все устроено и расскажу в деталях.

  5. lexar говорит:

    попровьте ссылку на VBoxVmService — https://sourceforge.net/projects/vboxvmservice/

    за статью большое спасибо, и кстати параметр
    RunWebService=no
    крайне полезная вещь! добавив к нему phpVirtualBox — https://sourceforge.net/projects/phpvirtualbox/
    получаем удобнейшее управление виртуалками через браузер — хоть с мобилы =)))

  6. lexar говорит:

    исправьте плиз RunWebService=no на RunWebService =))) поторопился =)))

  7. lexar говорит:

    да, блин, рано радовался — всё запустилось, но состояние работы виртуалок нигде не видно — ни в GUI (об этом честно предупреждают в гайде), ни даже (что самое обидное) в веб-консоли (phpvirtualbox)… phpvirtualbox к службе подключается, и показывается всё, кроме того, что виртуалки запущены… пичалька… будет рыть дальше…

  8. lexar говорит:

    кароче нарыл — надо, чтоб служба VboxVmService запускалась с юзерским аккаунтом, кстати, через ini-файл это не сработало, видать для 5-й версии убрали эти параметры, с чем я согласен — это несекурно, держать пасс в простом тексте… так что из консоли windows меняем запуск службы с системного, на юзерские и вуаля — всё запускает хедлесом и рулиццо из веб-морды! кайф!

  9. Niko говорит:

    Спасибо большое! В пятой версии в конфиге нужно поправить только имя виртуальной машины и все.

  10. NetdiverXTZ говорит:

    Народ, может я чего не понял в сути вопроса, но я просто создаю ярлык виртуальной машины и ставлю ярлык в автозапуск.

  11. Sodik говорит:

    Добрый день!
    Сделал запуск через службу, все работает!
    Только, как сделать запуск ОС с автоматическим подключенным USB — устройством (в моем случаи eToken) .
    При запуске ОС виде службы, я воздействовать не могу на виртуальную машину(подключить USB-устройства), как быть?

  12. Евгений говорит:

    У меня проблема.
    Если система запущена из VBox, то по RDP подключается. Порт в настройках стоит 5001.
    А если система запущена через службу VBoxVmService, то по RDP подлючается только с локального ПК, с удаленных отказывается.
    Настройки VBoxVmService такие:
    [Settings]
    VBOX_USER_HOME=C:\Users\user\.VirtualBox
    RunWebService=no
    PauseShutdown=5000

    [Vm0]
    VmName=Microsoft Windows 10 Pro 14393.103 x86 PIP
    ShutdownMethod=savestate
    AutoStart=yes
    VrdpPort=5001
    PauseShutdown=5000

  13. Евгений говорит:

    Настроил rdp машины на 3010 порт (пробовал и на 5001).
    Если вм запущена из vbox, то по rdp можно подключиться и с локального пк и с удаленного. А если вм работает через VirtualboxVmService, то с локального пк подключается, а с удаленного нет.

    не подскажете как быть? вроде все перепробовал

  14. Ildar говорит:

    Установил все по тексту. Но запускается автоматом только одна машина из 5. Притом, что все параметры одинаковые. Уже голову сломал. Везде автостарт =yes
    На W2008R2 — все ок. На w2012R2 — такая проблема. В логе просто пишет — vm… — is powered off

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *