FreeBSD, bhyve и Windows 11 (original) (raw)
Попробовал тут понастраивать 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.