Как запустить NetBSD в QEMU с новым PVH boot

Как запустить NetBSD в QEMU с новым PVH boot

Если вы когда-нибудь пробовали запустить NetBSD в виртуальной машине несколько лет назад — вы помните, как это выглядело. Долгая загрузка, куча эмулированного железа, которое гостевая ОС не очень-то понимала, и общее ощущение, что система чувствует себя в виртуалке не в своей тарелке. С выходом NetBSD 11 ситуация изменилась: появилась поддержка PVH boot не только для Xen, но и для QEMU. Если раньше NetBSD в виртуалке запускалась «как получится», то с PVH boot она начинает летать.

В этом руководстве разберём по шагам: что такое PVH boot, зачем он нужен, как поднять NetBSD в QEMU с нуля и как задействовать PVH для ускорения виртуальной машины. Всё с реальными командами, без воды.

Что такое PVH boot и почему это важно

PVH (Para-Virtualized Hardware) — это режим загрузки виртуальной машины, который объединяет лучшее из двух миров виртуализации:

  • Паравиртуализация (PV) — гостевая ОС знает, что работает в виртуальной среде, и использует оптимизированные драйверы вместо эмулированного железа.
  • Аппаратная виртуализация (HVM) — использование расширений процессора (Intel VT-x / AMD-V) для запуска кода без трансляции.

PVH берёт аппаратную изоляцию от HVM и паравиртуализированные интерфейсы ввода-вывода от PV. Результат: виртуальная машина загружается быстро, работает с минимальными накладными расходами и не тащит за собой груз legacy BIOS-эмуляции.

Конкретно PVH boot убирает из цепочки запуска:

  • эмуляцию BIOS/UEFI (SeaBIOS, OVMF)
  • инициализацию фиктивных PCI-устройств
  • лишние этапы bootloader’а

Итог — VM стартует заметно быстрее. Для CI/CD пайплайнов или micro-VM, которые запускаются и гасятся десятки раз в день, это ощутимая разница.

Архитектура PVH boot: схема взаимодействия гипервизора QEMU и гостевой ОС NetBSD
Схема: архитектура PVH boot — между паравиртуализацией и аппаратной виртуализацией

Почему PVH появился в NetBSD 11

Исторически PVH boot в BSD-мире был вотчиной Xen. NetBSD поддерживала его под Xen уже несколько лет. Но мир движется в сторону QEMU, KVM и лёгких гипервизоров вроде Firecracker — особенно в облачных средах и CI/CD инфраструктуре.

В NetBSD 11 разработчики расширили поддержку PVH boot на QEMU/KVM. Это открывает несколько новых сценариев использования:

  • NetBSD как лёгкая гостевая ОС в облачной инфраструктуре на базе QEMU
  • Быстрые одноразовые VM для тестирования и разработки
  • NetBSD в роли micro-VM в Firecracker-совместимых средах

В сочетании с новым MICROVM kernel (тоже из NetBSD 11) получается по-настоящему лёгкий стек виртуализации. Подробнее о MICROVM kernel — в нашей статье про что нового в NetBSD 11.0-RC2.

Что понадобится для запуска NetBSD в QEMU

Прежде чем переходить к командам — быстрый чеклист:

  • Хост-система: Linux (предпочтительно), FreeBSD или macOS
  • Процессор с поддержкой виртуализации: Intel VT-x или AMD-V, включённое в BIOS/UEFI
  • QEMU: версия 6.0 и выше (для корректной поддержки PVH рекомендуется 7.0+)
  • KVM: модуль ядра kvm_intel или kvm_amd (только на Linux — для аппаратного ускорения)
  • ISO-образ NetBSD 11: скачаем ниже
  • Свободное место на диске: минимум 5 ГБ, рекомендуется 20 ГБ
  • RAM для гостевой VM: минимум 512 МБ, комфортно — 2 ГБ

Проверить наличие KVM на Linux:

lsmod | grep kvm
# Должно быть: kvm_intel или kvm_amd

# Если модуль не загружен:
sudo modprobe kvm-intel
# или
sudo modprobe kvm-amd

Установка QEMU на хост-систему

Устанавливаем QEMU в зависимости от вашей платформы.

Ubuntu / Debian

sudo apt update
sudo apt install qemu-system-x86 qemu-utils

Arch Linux

sudo pacman -S qemu-full

Fedora / RHEL / Rocky Linux

sudo dnf install qemu-kvm qemu-img

FreeBSD

pkg install qemu

macOS (через Homebrew)

brew install qemu

После установки проверяем версию:

qemu-system-x86_64 --version
# QEMU emulator version 8.x.x

Скачивание ISO-образа NetBSD 11

Берём образ с официального CDN NetBSD. На момент написания статьи актуален RC2:

# NetBSD 11.0 RC2 для x86_64
wget https://cdn.netbsd.org/pub/NetBSD/NetBSD-11.0_RC2/images/NetBSD-11.0_RC2-amd64.iso

# Проверяем контрольную сумму (файл SHA512 лежит рядом)
wget https://cdn.netbsd.org/pub/NetBSD/NetBSD-11.0_RC2/images/SHA512
sha512sum -c SHA512 --ignore-missing

Когда выйдет финальный релиз NetBSD 11.0, путь изменится на /pub/NetBSD/NetBSD-11.0/. Актуальные ссылки всегда есть на официальной странице релизов NetBSD.

Создание образа диска для виртуальной машины

Создаём виртуальный диск в формате qcow2 — это стандартный формат QEMU с поддержкой снапшотов и динамическим выделением места:

qemu-img create -f qcow2 netbsd.qcow2 20G

Почему qcow2, а не raw:

  • Динамически растёт по мере заполнения — 20G на диске не занимает сразу
  • Поддерживает снапшоты — удобно для экспериментов
  • Поддерживает сжатие и шифрование

Если нужна максимальная производительность дискового ввода-вывода — можно использовать raw, но для лабораторных задач qcow2 оптимален.

Схема виртуализации QEMU: гостевая NetBSD, виртуальный диск qcow2 и гипервизор KVM
Схема: как QEMU организует виртуальную машину NetBSD — от образа диска до гипервизора KVM

Запуск NetBSD в QEMU: стандартный режим (установка)

Сначала запускаем установку в обычном режиме HVM — загружаемся с ISO и устанавливаем систему на виртуальный диск:

qemu-system-x86_64 \
  -enable-kvm \
  -m 2048 \
  -smp 2 \
  -hda netbsd.qcow2 \
  -cdrom NetBSD-11.0_RC2-amd64.iso \
  -boot d \
  -net nic -net user \
  -nographic

Разбираем параметры:

  • -enable-kvm — включить аппаратное ускорение через KVM (только Linux)
  • -m 2048 — 2 ГБ RAM для гостевой системы
  • -smp 2 — 2 виртуальных CPU
  • -hda netbsd.qcow2 — виртуальный диск
  • -cdrom — путь к ISO-образу
  • -boot d — загрузка с CD-ROM
  • -net nic -net user — простая сеть через NAT (интернет внутри VM работает)
  • -nographic — вывод в терминал вместо окна GUI

Установщик NetBSD — текстовый, но вполне дружелюбный. Следуем инструкциям: выбираем диск, раскладку, набор устанавливаемых компонентов. Для лабораторной VM достаточно базового набора. После завершения установки выключаем VM и переходим к настройке PVH boot.

Запуск NetBSD в QEMU с PVH boot

Для PVH boot нам нужно запускать VM напрямую через загрузку ядра NetBSD, минуя BIOS и bootloader. QEMU поддерживает это через параметр -kernel.

Шаг 1: Извлекаем ядро NetBSD из установленной системы

После установки NetBSD ядро находится в корне файловой системы — файл netbsd. Нам нужно его достать. Самый простой способ — примонтировать образ диска на хосте:

# Находим смещение раздела внутри qcow2
# Сначала конвертируем qcow2 в raw для монтирования
qemu-img convert -f qcow2 -O raw netbsd.qcow2 netbsd.raw

# Смотрим таблицу разделов
fdisk -l netbsd.raw

# Монтируем первый раздел (замените offset на значение из fdisk * 512)
sudo mount -o loop,offset=512 netbsd.raw /mnt/netbsd

# Копируем ядро
cp /mnt/netbsd/netbsd ./netbsd-kernel

sudo umount /mnt/netbsd

Шаг 2: Запускаем VM с PVH boot

qemu-system-x86_64 \
  -enable-kvm \
  -machine q35 \
  -cpu host \
  -m 2048 \
  -smp 2 \
  -drive file=netbsd.qcow2,format=qcow2,if=virtio \
  -kernel netbsd-kernel \
  -append "root=wd0a console=com0" \
  -net nic,model=virtio -net user \
  -nographic

Ключевые отличия от стандартного запуска:

  • -machine q35 — современная архитектура чипсета, лучше подходит для PVH
  • -cpu host — пробрасываем реальные флаги CPU хоста в гостевую VM
  • -drive ...,if=virtio — паравиртуализированный диск вместо эмулированного IDE
  • -kernel netbsd-kernel — прямая загрузка ядра, минуя BIOS
  • -append "root=wd0a console=com0" — параметры ядра: корневой раздел и консоль
  • -net nic,model=virtio — паравиртуализированная сетевая карта
Схема загрузки NetBSD VM в QEMU с PVH boot: прямая загрузка ядра без BIOS
Схема: цепочка загрузки NetBSD в QEMU — PVH boot обходит BIOS и загружает ядро напрямую

Проверка работы PVH boot внутри NetBSD

После загрузки проверяем, что PVH boot работает корректно. Заходим в систему и смотрим dmesg:

dmesg | grep -i pvh
dmesg | grep -i xen
dmesg | grep -i hypervisor

Также полезно проверить параметры машины через sysctl:

sysctl machdep
sysctl machdep.cpu

Если загрузка прошла через PVH — в dmesg будет соответствующая информация об обнаруженном гипервизоре и режиме инициализации. Скорость загрузки по сравнению со стандартным HVM-режимом должна быть заметно выше — особенно на слабом железе или при частых перезапусках VM.

Три практических кейса использования NetBSD в QEMU

Кейс 1: NetBSD как тестовый сервер для сетевых конфигураций

Задача: Нужно проверить поведение BSD-стека TCP/IP под нагрузкой или протестировать сетевые конфигурации без риска для продакшн-железа.

Решение: NetBSD VM в QEMU с двумя виртуальными сетевыми интерфейсами — один в NAT (для доступа в интернет), второй в изолированную сеть для тестов.

qemu-system-x86_64 \
  -enable-kvm \
  -machine q35 \
  -cpu host \
  -m 2048 \
  -drive file=netbsd.qcow2,format=qcow2,if=virtio \
  -kernel netbsd-kernel \
  -append "root=wd0a console=com0" \
  -net nic,model=virtio,vlan=0 -net user,vlan=0 \
  -net nic,model=virtio,vlan=1 -net socket,listen=:4444,vlan=1 \
  -nographic

Внутри NetBSD получаем два интерфейса: vioif0 (NAT) и vioif1 (изолированная сеть). Конфигурируем как нужно — без последствий для хоста.

Кейс 2: NetBSD как окружение для разработки и портирования BSD-приложений

Задача: Разработчику нужно проверить, что приложение корректно компилируется и работает на NetBSD, не имея под рукой физического железа с этой системой.

Решение: VM с общей папкой между хостом и гостем через 9P/VirtFS.

qemu-system-x86_64 \
  -enable-kvm \
  -machine q35 \
  -cpu host \
  -m 2048 \
  -drive file=netbsd.qcow2,format=qcow2,if=virtio \
  -kernel netbsd-kernel \
  -append "root=wd0a console=com0" \
  -virtfs local,path=/home/user/project,mount_tag=hostshare,security_model=mapped \
  -net nic,model=virtio -net user \
  -nographic

Внутри NetBSD монтируем общую папку:

mount_9p hostshare /mnt/hostshare

Теперь можно редактировать код на хосте в любимом редакторе, а компилировать и тестировать — внутри NetBSD. Удобно и быстро.

Кейс 3: NetBSD как lightweight VM для CI/CD

Задача: Запускать быстрые одноразовые VM для прогона тестов в CI/CD пайплайне. Время жизни VM — минуты. Скорость запуска критична.

Решение: Используем PVH boot + MICROVM kernel + snapshot базового образа. Запуск нового инстанса — из готового снапшота за секунды.

# Создаём базовый образ (делается один раз)
qemu-img create -f qcow2 netbsd-base.qcow2 10G
# ... устанавливаем NetBSD, настраиваем окружение ...

# Создаём overlay-образ поверх базового (для каждого CI-прогона)
qemu-img create -f qcow2 -b netbsd-base.qcow2 -F qcow2 netbsd-ci-run.qcow2

# Запускаем VM из overlay - базовый образ не меняется
qemu-system-x86_64 \
  -enable-kvm \
  -machine q35 \
  -cpu host \
  -m 1024 \
  -drive file=netbsd-ci-run.qcow2,format=qcow2,if=virtio \
  -kernel netbsd-kernel \
  -append "root=wd0a console=com0" \
  -net nic,model=virtio -net user \
  -nographic

# После завершения — просто удаляем overlay
rm netbsd-ci-run.qcow2

Каждый CI-прогон получает чистую VM за секунды. Базовый образ не затрагивается. PVH boot обеспечивает минимальное время старта.

Преимущества PVH boot: подводим итог

  • Быстрый запуск VM — загрузка ядра напрямую, без BIOS-инициализации и многоступенчатого bootloader’а.
  • Меньше эмулированного железа — нет фиктивных PCI-устройств, нет ISA-шины, нет legacy-компонентов. Меньше точек отказа.
  • Меньше overhead гипервизора — паравиртуализированные драйверы работают эффективнее полной эмуляции.
  • Идеален для micro-VM — в связке с MICROVM kernel получается минимальный стек без лишнего.
  • Предсказуемое поведение — цепочка загрузки короче и проще, меньше мест где может что-то пойти не так.

Возможные проблемы и troubleshooting

VM не загружается: kernel panic или зависание

Причина: Неправильные параметры -append. Чаще всего — неверное имя корневого устройства.

Решение: Проверьте имя корневого диска. В NetBSD при virtio-диске это wd0a или sd0a в зависимости от драйвера. Попробуйте оба варианта:

-append "root=wd0a console=com0"
# или
-append "root=sd0a console=com0"

Нет вывода в терминале при использовании -nographic

Причина: Консоль ядра не перенаправлена на последовательный порт.

Решение: Убедитесь, что в параметрах ядра указано console=com0. На некоторых конфигурациях NetBSD нужно дополнительно прописать консоль в /etc/ttys внутри гостевой системы.

Ошибка: «KVM not available» или медленная работа

Причина: KVM не загружен или виртуализация отключена в BIOS.

# Проверяем поддержку виртуализации процессором
grep -E '(vmx|svm)' /proc/cpuinfo

# Проверяем загружен ли модуль KVM
lsmod | grep kvm

# Загружаем вручную
sudo modprobe kvm_intel   # для Intel
sudo modprobe kvm_amd     # для AMD

Ошибка при монтировании qcow2 для извлечения ядра

Причина: Смещение раздела определено неверно или образ не конвертирован в raw.

# Альтернативный способ — использовать guestfish (пакет libguestfs-tools)
sudo apt install libguestfs-tools

guestfish -a netbsd.qcow2
><fs> run
><fs> list-filesystems
><fs> mount /dev/sda1 /
><fs> copy-out /netbsd /tmp/netbsd-kernel
><fs> exit

Сеть не работает внутри VM

Причина: Виртуальный сетевой интерфейс не настроен автоматически.

Решение: Внутри NetBSD настраиваем интерфейс вручную:

# vioif0 — имя virtio-сетевого интерфейса в NetBSD
ifconfig vioif0 up
dhcpcd vioif0

Для автоматической настройки при каждой загрузке добавляем в /etc/rc.conf:

dhcpcd=YES

Когда стоит использовать PVH boot

PVH boot — не серебряная пуля, но в ряде сценариев он явно лучше стандартного HVM:

  • CI/CD окружения — частые запуски и остановки VM. Каждая секунда запуска на счету.
  • Micro-VM и serverless — минимальные VM с коротким временем жизни. PVH + MICROVM kernel = минимальный overhead.
  • Облачные лаборатории — если запускаете NetBSD VM десятками для тестирования, быстрый старт экономит реальное время.
  • Разработка и отладка ядра NetBSD — быстрый цикл перезапуска VM ускоряет итерации.

Для долгоживущих серверных VM (бэкенд, база данных, файловый сервер) разница во времени загрузки некритична. Там важнее runtime-производительность, и HVM с virtio-драйверами справляется отлично.

Заключение

Мы прошли полный путь: от установки QEMU и скачивания NetBSD 11 до запуска виртуальной машины с PVH boot и трёх практических кейсов. PVH boot в NetBSD 11 — это реальное ускорение запуска VM и уменьшение накладных расходов гипервизора, особенно заметное в сценариях с частыми перезапусками.

В связке с MICROVM kernel, virtio-устройствами и overlay-образами на qcow2 получается лёгкий и быстрый стек виртуализации на базе NetBSD — вполне конкурентоспособный для CI/CD и облачных лабораторий.

Запустили NetBSD в QEMU? Столкнулись с нестандартным поведением PVH? Пишите в комментарии — разберём. А в следующей статье поговорим про настройку сети в NetBSD: от базовой конфигурации до VLAN и bridge.

Оставайтесь на связи

Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.

Подписаться на IT-Аптеку →
Поделитесь:

Оставьте комментарий

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

Прокрутить вверх