Вопрос или проблема
У меня есть виртуальная машина FreeBSD, которая работает на Linux KVM, и когда я пытаюсь запустить виртуальную машину bhyve, я получаю следующую ошибку:
vm exit[0]
причина SVM
rip 0x000000000f49eac0
длина_инструкции 2
код_выхода 0x7b
информация_выхода1 0x511021d
информация_выхода2 0xf49eac2
Ошибка прерывания
Я запускаю KVM с помощью команды:
/usr/sbin/bhyve -A -D -H -P -S -u -w -c 1 -m 250m -s 0,amd_hostbridge \
-s 5,virtio-blk,FreeBSD-14.0-RELEASE-amd64-bootonly.iso \
-s 7,virtio-blk,guest.img \
-s 29,virtio-rnd -s 21,virtio-net,tap0 -s 31,lpc \
-l com1,stdio \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd test
Виртуальная машина FreeBSD – это свежая установка FreeBSD-14.1-RELEASE-amd64-memstick.img
, которая подготовлена с помощью следующего скрипта:
pkg install -y bhyve-firmware
truncate -s 16G guest.img
fetch https://download.freebsd.org/releases/ISO-IMAGES/14.0/FreeBSD-14.0-RELEASE-amd64-bootonly.iso
kldload vmm
Также я уже доказал, что хост Linux KVM обеспечивает вложенную виртуализацию с гостем на Linux, который запускал другую виртуальную машину KVM.
Также я здесь привожу virt-manager xml виртуальной машины FreeBSD:
<domain type="kvm">
<name>freebsd</name>
<uuid>88888888-8888-8888-8888-888888888888</uuid>
<metadata>
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
<libosinfo:os id="http://freebsd.org/freebsd/14.0"/>
</libosinfo:libosinfo>
</metadata>
<memory unit="KiB">1048576</memory>
<currentMemory unit="KiB">1048576</currentMemory>
<vcpu placement="static">1</vcpu>
<os>
<type arch="x86_64" machine="pc-i440fx-noble">hvm</type>
</os>
<features>
<acpi/>
<apic/>
<vmport state="off"/>
</features>
<cpu mode="host-passthrough" check="none" migratable="on"/>
<clock offset="utc">
<timer name="rtc" tickpolicy="catchup"/>
<timer name="pit" tickpolicy="delay"/>
<timer name="hpet" present="no"/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled="no"/>
<suspend-to-disk enabled="no"/>
</pm>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
<driver name="qemu" type="qcow2"/>
<source file="/var/local/freebsd.qcow2"/>
<target dev="vda" bus="virtio"/>
<boot order="2"/>
<address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
</disk>
<controller type="usb" index="0" model="ich9-ehci1">
<address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x7"/>
</controller>
<controller type="usb" index="0" model="ich9-uhci1">
<master startport="0"/>
<address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x0" multifunction="on"/>
</controller>
<controller type="usb" index="0" model="ich9-uhci2">
<master startport="2"/>
<address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x1"/>
</controller>
<controller type="usb" index="0" model="ich9-uhci3">
<master startport="4"/>
<address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x2"/>
</controller>
<controller type="ide" index="0">
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
</controller>
<controller type="virtio-serial" index="0">
<address type="pci" domain="0x0000" bus="0x00" slot="0x06" function="0x0"/>
</controller>
<controller type="pci" index="0" model="pci-root"/>
<interface type="network">
<mac address="52:52:52:52:52:52"/>
<source network="default"/>
<model type="virtio"/>
<address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0"/>
</interface>
<serial type="pty">
<target type="isa-serial" port="0">
<model name="isa-serial"/>
</target>
</serial>
<console type="pty">
<target type="serial" port="0"/>
</console>
<input type="mouse" bus="ps2"/>
<input type="keyboard" bus="ps2"/>
<sound model="ac97">
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/>
</sound>
<audio id="1" type="none"/>
<memballoon model="virtio">
<address type="pci" domain="0x0000" bus="0x00" slot="0x08" function="0x0"/>
</memballoon>
</devices>
</domain>
Ответ или решение
При попытке запустить виртуальную машину Bhyve в гостевой системе FreeBSD, работающей на хосте Linux с KVM, вы столкнулись с ошибкой "Abort trap". Это сообщение об ошибке указывает на проблемы с платформой виртуализации, особенно в контексте вложенной виртуализации. Давайте рассмотрим проблему более подробно и предложим возможные решения.
Анализ проблемы
Ошибка, с которой вы столкнулись, связана с выходом из виртуальной машины (vm exit) и, в частности, с причиной "SVM" (Secure Virtual Machine). Ваша команда для запуска bhyve выглядит корректной, однако есть несколько факторов, которые стоит учесть:
-
Настройки KVM: Убедитесь, что на вашем хост-системе включена поддержка вложенной виртуализации. Для этого проверьте, загружены ли необходимые модули и правильно ли настроены параметры вашей системы:
dmesg | grep -e svm -e vmx
Если результаты показывают, что вложенная виртуализация не активна, ее нужно включить:
echo 'options KVM nested=1' >> /etc/modprobe.d/kvm.conf
-
Параметры запуска bhyve: Параметры, использованные вами при запуске, выглядят в целом приемлемыми, но стоит попробовать некоторые изменения:
- Убедитесь, что выбрана правильная архитектура процессора и никаких конфликтов с совместимостью. Возможно, стоит уменьшить количество ядер или уменьшить объем оперативной памяти.
- Проверьте, может ли ваша версия bhyve по умолчанию использовать UEFI. Это может вызвать проблемы, если вы используете BIOS.
-
Совместимость оборудования: Некоторые процессоры могут не поддерживать работу с вложенной виртуализацией, либо же работа с bhyve в этой конфигурации может быть нестабильной. Убедитесь, что у вас поддерживается и включено:
- Вложенная виртуализация (Intel VT-x или AMD-V).
- Поддержка второго уровня адресации (EPT или NPT).
-
Ошибки в конфигурации виртуальных сетей: Проверьте настройки сети в вашем виртуальном окружении. Иногда неправильные конфигурации или проблемы со шлюзами могут приводить к подобным сбоям.
Решение
Вот несколько шагов, которые помогут решить проблему с "Abort trap":
-
Обновите ПО: Убедитесь, что все ваши пакеты и ядро FreeBSD обновлены до последних версий. Возможно, это исправит известные проблемы со стабильностью.
-
Попробуйте альтернативные параметры: Измените параметры запуска вашей команды bhyve. Уберите или измените флаги
-u
(это может вызвать конфликты с нишей, если используются смешанные модули):/usr/sbin/bhyve -A -D -H -P -S -c 1 -m 250m ...
-
Тестирование другой конфигурации: Попробуйте использовать другую версию FreeBSD или другой образ ISO для запуска bhyve, чтобы исключить возможность поврежденного образа.
Заключение
Ошибки "Abort trap", возникающие при запуске вложенной виртуализации bhyve в FreeBSD на KVM, могут возникать по многим причинам, включая конфликты конфигурации, несовместимость оборудования и настройки системы. Следуя приведенным выше рекомендациям, вы можете диагностировать и, возможно, устранить возникшую проблему. Если ошибка продолжает появляться, рассмотрите возможность дублирования вашего окружения на другой системе для исключения проблем с текущей аппаратной или программной конфигурацией.