FreeBSD, bhyve и Windows 11 (original) (raw)

Previous Entry Flag Next Entry

FreeBSD, bhyve и Windows 11

Попробовал тут понастраивать bhyve и заодно взглянуть на Windows 11, взятую с первого попавшегося торрента на рутрекере.

bhyve завёл на домашнем роутере (FreeBSD 12.3/amd64), мелкая железка на чипсете Intel Q270 с питанием от 12 вольт.

Процессор Intel i5-7200U @ 2.50GHz с двумя ядрами без гипертрединга, 32GB памяти.

Оказалось довольно просто (сразу скажу: никаких SecureBoot и TPM 2.0 не потребовалось). Первым делом включаем в /etc/rc.conf подгрузку ядерных модулей для работы bhyve: kld_list="nmdm vmm" (и подгружаем их через kldload).

Добавляем в систему портами или пакетами sysutils/bhyve-firmware и sysutils/vm-bhyve, в моём случае получились bhyve-firmware-1.0_1 и vm-bhyve-1.4.2.

В /etc/rc.conf добавляем на время создания виртуалки:
vm_enable="YES" vm_dir="/usr/local/etc/vm" # или vm_dir="zfs:poolname/vm"

Создаём конфигурацию гипервизора для виртуалки командой vm create -t windows -s 120G win11, где "windows" имя шаблона, а "win11" имя новой виртуалки. Эта команда создала win11.conf, в который я немедленно залез редактором.

Поменял memory=2G на memory=8G; закомментировал network0_type и network0_switch, чтобы во время установки у виртуалки не было сети.

Там же была строчка disk0_name="disk0.img", указывающая на 120-гигабайтный файл-образ disk0.img, который создала команда vm create выше. Это мне не подходит, так как нужна возможность создавать снапшоты, так что поменял этот блок настроек на следующее:

disk0_type="ahci-hd" disk0_dev="custom" disk0_name="/dev/zvol/z/win11"

Удалил disk0.img и создал zvol с "секторами" 4K:
zfs create -o compression=lz4 -V 120g -b 4096 z/win11

Положил инсталляционный ISO в vm/.iso/win11.iso и запустил установку:
vm install win11 win11.iso

После начала установки подключился к системе VNC-клиентом, получил экран с предложением запустить инсталляцию с CD/DVD. Установка прошла совершенно гладко, с тремя ребутами (VNC каждый раз приходилось переподключать). После появления десктопа выбрал завершение работы системы и поглядел показания ZFS:

z/win11 referenced 3.96G - z/win11 compressratio 1.10x - z/win11 volsize 120G local z/win11 volblocksize 4K - z/win11 compression lz4 local z/win11 written 3.96G - z/win11 logicalused 4.32G -

Настало время дать виртуалке сеть. Мне не нравится идея бриджевать виртуалки по умолчанию, я предпочитаю роутить гостевой трафик средствами хоста, а заодно фильтровать и делать NAT. Поэтому не стал раскомментировать настройки network0_*, а вместо этого добавил в конфиг виртуалки:
bhyve_options="-s 2,e1000,tap0"

То есть, посадил эмулируемую сетевую карту Intel на PCI-шину 2 с подключением к системному интерфейсу tap0, который создается через /etc/rc.conf:

cloned_interfaces="tap0" ifconfig_tap0="inet 192.168.100.1/30 link0" ifconfig_tap0_descr="Windows 11"

Флаг link0 запрещает отключать (down) сетевой интерфейс при гашении виртуалки, вместо этого у него просто будет статус no carrier.

Ещё полезно в конфиг виртуалки добавить graphics_res="1856x960", чтобы увеличить размер рабочего стола Windows до указанного размера с дефолтных 1024x768. Циферки подбирайте под себя, я выбрал такие, чтобы в VNC не было скроллинга и окно VNC вместе с декорациями влазило в разрешение FullHD.