Пчёлки в деле, или Запускаем Windows на BSD Hypervisor

Автор: | 08.10.2016

Я джва года этого ждал! В январе 2014 года прочитал в FreeBSD 10.0-RELEASE Release Notes следующее:

[amd64] The BSD Hypervisor, bhyve(8) is included with FreeBSD. bhyve(8) requires Intel CPUs with VT-x and Extended Page Table (EPT) support. These features are on all Nehalem models and beyond (e.g. Nehalem and newer), but not on the lower-end Atom CPUs.

И сразу подумал, что bhyve — это отличная штука, особенно при использовании в паре с ZFS. Это позволит расширить область задач, которые можно решать с помощью FreeBSD, и увеличит популярность данной системы у IT-специалистов. На тот момент поддержка гостевых ОС была ограничена BSD-семейством и Linux, но время шло и вот, с выходом FreeBSD 11.0-RELEASE, уже официально стало возможно запустить гостя с Windows, да ещё с установкой в графическом режиме.

Устанавливать буду Windows 10 — её можно ставить как есть, а для установки более старых версий потребуется интегрировать драйвера virtio в ISO-образ (инструкция). Утилиту для создания ISO-образа с последней актуальной версией можно загрузить с сайта Microsoft.
002
003
004

  1. Создадим том ZFS для хранения данных ВМ (при необходимости замените pool/usr/bhyve):
    # zfs create pool/usr/bhyve
  2. Чтобы было проще управлять ВМ, установим sysutils/vm-bhyve:
    # portmaster sysutils/vm-bhyve
    # sysrc vm_enable="YES" vm_dir="zfs:pool/usr/bhyve"
    vm_enable:  -> YES
    vm_dir:  -> zfs:pool/usr/bhyve
    # vm init
  3. Дополнительно можно скопировать типовые шаблоны для ВМ:
    # cp /usr/local/share/examples/vm-bhyve/* /usr/bhyve/.templates/

    А при использовании csh есть смысл прописать в файле ~/.cshrc правила автодополнения:

    complete vm \
     'p@1@(list create install start stop console configure reset poweroff destroy clone snapshot rollback add switch iso)@' \
     'n@create@n@' \
     'n@list@n@' \
     'n@iso@n@' \
     'n@switch@(list create add remove destroy vlan nat)@' \
     'N@switch@`sysrc -inqf /usr/bhyve/.config/switch switch_list`@' \
     'N@install@`ls -1 /usr/bhyve/.iso`@' \
     'N@nat@(off on)@' \
     'p@2@`ls -1 /usr/bhyve | grep -v "^\." | grep -v "^images"`@'

    И активировать их:

    # source ~/.cshrc
  4. Настроем сеть. Для этого создадим виртуальный коммутатор и свяжем его с физическим интерфейсом (при необходимости замените em0):
    # vm switch create public
    # vm switch add public em0

    Если требуется, то можно аналогичным образом настроить NAT и VLAN.

  5. Для запуска Windows потребуется эмулятор UEFI. Установим его:
    # portmaster sysutils/bhyve-firmware
    
    ===>>> The following actions will be taken if you choose to proceed:
            Install sysutils/bhyve-firmware
            Install sysutils/uefi-edk2-bhyve
    
    ===>>> Proceed? y/n [y]
    
    # ln -s /usr/local/share/uefi-firmware/BHYVE_UEFI.fd /usr/bhyve/.config/BHYVE_UEFI.fd
  6. Наконец, создадим нашу первую ВМ с шаблоном «windows» и размером диска 30 ГиБ (при необходимости замените wintest):
    # vm create -t windows -s 30G wintest
  7. Откроем настройки ВМ:
    # vm configure wintest

    И добавим следующие строки:

    graphics="yes"
    graphics_res="1600x900"
    graphics_wait="yes"
    xhci_mouse="yes"

    Обязательный параметр только graphics, остальные добавляем по вкусу. Параметр graphics_res позволяет задать более удобное разрешение экрана (значение по умолчанию 800×600). С помощью graphics_wait можно приостановить загрузку ВМ до тех пор, пока не будет установлено подключение по VNC, чтобы не пропустить самое интересное. А xhci_mouse позволит использовать USB-эмуляцию мыши вместо PS/2 (работает только в новых версиях Windows, но работает лучше).

  8. Теперь всё готово к началу установки. Предполагается, что в директории /usr/bhyve/.iso вы уже разместили подходящий ISO-образ:
    # vm install wintest Windows_10_1607.iso

    Проверим результат:

    # vm list
    NAME            DATASTORE       LOADER      CPU    MEMORY    VNC                  AUTOSTART    STATE
    wintest         default         uefi        1      2G        *:5900               No           Locked
  9. Теперь можно подключаться по VNC и проводить установку в привычном для многих графическом режиме.
    006
    008
  10. Осталось дело за малым — установить драйвера для сетевого адаптера. Скачать их можно отсюда: archive-virtio, но есть нюанс — они не все корректно работают. В частности, у меня не заработала версия 0.1.126, поэтому используем версию 0.1.118. Обновление от 16.04.2017. Версия 135 прекрасно работает.
    # vm stop wintest
    # vm iso https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.135-1/virtio-win-0.1.135.iso
    # vm install wintest virtio-win-0.1.135.iso

    Снова подключаемся по VNC и устанавливаем драйвера из директории D:\NetKVM\w10\amd64.

На этом, пожалуй, всё. Если необходимо, то можно включить автоматический запуск ВМ при старте системы, только не забудьте удалить параметр graphics_wait:

# sysrc vm_list="wintest"
vm_list:  -> wintest

5 комментариев к записи «Пчёлки в деле, или Запускаем Windows на BSD Hypervisor»

  1. Savaoff

    Спасибо за статью.
    Не сравнивали ли скорость работы win 2008r2 под bhyve и qemu-kvm в линуксе?
    Ну, скажем, та же 1c под виндой в обоих гипервизорах…

    1. LB Автор

      Не приходилось, пока только тестировал Windows 10. Субъективно работает не хуже, чем под ESXi, синтетику не запускал, прямых сравнений не производил.

  2. Dmitry

    Запускаем не Windows, а Windows 10. Ошибка в заголовке статьи.

    1. LB Автор

      Windows 10 тоже Windows. Вся разница с предыдущими версиями лишь в том, что для них требуется специальная подготовка ISO-образа. Информация об этом есть в тексте, там же приведена ссылка на инструкцию.

      1. Dmitry

        Тоже то же)) Но почему не написать — «запуск windows 10»?

        С предыдущими версиями? ))
        https://lists.freebsd.org/pipermail/freebsd-virtualization/2013-November/001741.html
        «bhyve only supports amd64 VM kernels at this time and I have clarified
        this point on bhyve.org

        i386 support is indeed theoretically possible if your proprietary OS can
        provide VirtIO devices as needed for your application.

        Michael»
        теоретически, ибо вирт железка потребует 64битный uefi загрузчик. Держала бы эта железка загрузки legacy (в графике, ибо винда есть графика и без этого хер ее установишь), то да.

        В остальном пофиг. есть эмулятор и есть. Но имхо проще поставить vbox.

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

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