VirtualBox не может работать в режиме VMX.

Вопрос или проблема

Недавно я попытался использовать VirtualBox и получил эту ошибку,

VirtualBox can't operate in VMX root mode.
Please disable the KVM kernel extension, recompile your kernel and reboot.
(VERR_VMX_IN_VMX_ROOT_MODE).

Я использую Ubuntu Noble Numbat; я обновил систему до этой версии, поэтому не всегда использовал VirtualBox с ней. Тем не менее, в последний раз, когда я успешно использовал VirtualBox, это было с Noble Numbat. Я смутно понимаю, что такое KVM, но я определенно предпочел бы не перекомпилировать ядро, если это возможно избежать.

Я использую docker и иногда multipass, и действительно не хочу создавать проблемы с ними, отключая KVM. Если есть способ использовать VirtualBox с KVM, я буду очень признателен, в противном случае я готов перекомпилировать ядро Linux (если ваш ответ будет об этом, пожалуйста, дайте ссылку или инструкцию о том, как его перекомпилировать).

Машина-хост … действительно старая, это macbook pro конца 2012 года, версия с 4-ядерными, которые выглядят как 8. Некоторые характеристики, которые имеют отношение.

  • Ядра: 4 ядра, но выглядит как 8, потому что каждое ядро может выполнять 2 процесса (я так думаю).
  • Процессор: 8 x Intel Core i7-3720QM CPU @ 2.60GHz
  • Графический процессор: NVE7 (у меня нет хороших драйверов для GPU, но я не думаю, что это проблема)
  • Версия ядра: 6.5.0-9-generic (64-бит)
  • Жесткий диск внешний (внутренний сломан)
  • Версия Virtualbox: 7.0.18r162988

Иногда Ubuntu оставляет старые версии ядра, которые вы можете выбрать для использования при загрузке. Я посмотрел, могу ли я это сделать, и обнаружил, что Ubuntu не оставила их на этот раз. Мне бы хотелось сказать, что я сделал больше, но я практически не в курсе этого, и, к сожалению, я действительно не знаю

Картинка ошибки VirtualBox

Два возможных решения здесь:

Из этого FAQ Ubuntu, ядро и VBox могут конфликтовать, и вам нужно применить разные команды, чтобы это исправить: https://help.ubuntu.com/community/KVM/FAQ

Из статьи

  1. Убедитесь, что вы полностью завершили и выключили все ваши машинки KVM (с помощью virt-manager или иным способом).

  2. Выгрузите все его модули:

    $ sudo invoke-rc.d kvm stop

    В Karmic используйте

    $ sudo invoke-rc.d qemu-kvm stop

    вместо этого.

    В Lucid и позже используйте

    $ sudo service qemu-kvm stop

Из этого поста на reddit: https://www.reddit.com/r/Kubuntu/comments/rjidvs/why_wont_it_let_me_disable_kvm_i_dont_want_kvm/

Один из пользователей рекомендует проверить BIOS и убедиться, что опция виртуализации отключена.

Теперь у вас старая машина, возможно, процессор слишком стар для виртуализации.

Более простой способ – это только выгрузить модули kvm (предполагая, что они не используются):

$ vboxmanage startvm --type headless deb12-lab-10e-build
Waiting for VM "deb12-lab-10e-build" to power on...
VBoxManage: error: VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot (VERR_VMX_IN_VMX_ROOT_MODE)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole

$ lsmod | grep kvm
kvm_intel             417792  0
kvm                  1355776  1 kvm_intel
$ sudo modprobe -r kvm_intel 

и просто после того, как VM запустится без ошибок:

$ vboxmanage startvm --type headless deb12-lab-10e-build
Waiting for VM "deb12-lab-10e-build" to power on...
VM "deb12-lab-10e-build" has been successfully started.

В терминале отключите модуль ядра, ответственный за KVM (Kernel-based Virtual Machine), так как он, похоже, конфликтует с VirtualBox. Это, вероятно, означает, что вы не можете запустить и VirtualBox, и KVM одновременно, если только до повторного включения модуля:

# Если вы используете процессор Intel
sudo modprobe -r kvm_intel

# Если вы используете процессор AMD
sudo modprobe -r kvm_amd

Сначала проверьте, работает ли это, поскольку эта команда будет действовать только до следующей загрузки. Если это работает и вы хотите сделать изменение постоянным, вы можете создать новую запись в /etc/modprobe.d/blacklist.conf:

blacklist kvm_intel

Ответ или решение

Виртуализация играет ключевую роль в современной ИТ-инфраструктуре, позволяя использовать один физический ресурс для запуска нескольких виртуальных машин (ВМ). Однако, конфликты между различными решениями виртуализации, такими как VirtualBox и KVM, могут вызывать проблемы, как та, с которой вы столкнулись: "VirtualBox can’t operate in VMX root mode". Давайте подробно рассмотрим, как можно решить эту проблему.

Теория (Theory)

Ошибка "VirtualBox can’t operate in VMX root mode" указывает на конфликт между VirtualBox и KVM (Kernel-based Virtual Machine). KVM — это решение виртуализации, встроенное в ядро Linux, которое использует аппаратную поддержку виртуализации процессора (Intel VT-x или AMD-V) для работы. VirtualBox также требует этих ресурсов для запуска виртуальных машин.

Когда вы видите ошибку VERR_VMX_IN_VMX_ROOT_MODE, это значит, что KVM профессионально активен и использует возможности вашей аппаратной виртуализации, что не позволяет VirtualBox получить к ним доступ. Это типичный случай, когда две технологии борются за одинаковые аппаратные ресурсы.

Пример (Example)

Давайте рассмотрим конкретный пример на вашем устройстве. У вас ноутбук Macbook Pro конца 2012 года с процессором Intel Core i7-3720QM, который поддерживает VT-x. Вы используете Ubuntu Noble Numbat с ядром версии 6.5.0-9-generic.

Когда запускается KVM, он загружает модули ядра, такие как kvm и kvm_intel, захватывая ресурсы аппаратной виртуализации. Чтобы VirtualBox мог корректно работать, необходимо временно или постоянно отключить эти модули.

Применение (Application)

Временное решение

Для временного решения проблемы можно выгрузить модули KVM из ядра. Это можно сделать следующими командами:

  1. Посмотрите, какие модули KVM загружены:

    lsmod | grep kvm
  2. Выгрузите модули для Intel процессора:

    sudo modprobe -r kvm_intel
  3. Если у вас процессор AMD, используйте:

    sudo modprobe -r kvm_amd

После выполнения этих шагов, попробуйте снова запустить VirtualBox. Эти действия не затрагивают другие программы, использующие KVM, такие как Docker или Multipass, до перезагрузки системы. После перезагрузки модули снова будут загружены.

Постоянное решение

Если вы хотите, чтобы изменения сохранились между перезагрузками, вы можете создать файл в конфигурации modprobe.d:

  1. Откройте файл blacklist.conf или создайте его (если еще не существует):

    sudo nano /etc/modprobe.d/blacklist.conf
  2. Добавьте в него запись для модуля KVM:

    blacklist kvm_intel

Если у вас процессор AMD, используйте blacklist kvm_amd.

Альтернативные подходы

Если вы активно используете как KVM, так и VirtualBox и не хотите менять конфигурацию ядра, можно рассмотреть использование других виртуализационных платформ, которые не конфликтуют с KVM. Например, QEMU с использованием libvirt или другие гипервизоры могут быть полезны для разных целей.

Заключение

Конфликт между VirtualBox и KVM является распространенной проблемой на системах с Linux, использующих аппаратную виртуализацию. Основополагающим решением является управление модулями ядра, ответственными за доступ к VT-x/AMD-V. С помощью вышеописанных шагов вы можете временно или постоянно разрешить этот конфликт.

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

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

Капча загружается...