El emulador de Android y la caja virtual no se pueden ejecutar al mismo tiempo

104

Siempre que tengo Virtualbox ejecutándose, no puedo iniciar una imagen de emulador de Android (y viceversa). El mensaje de error en el administrador de AVD es

ioctl(KVM_CREATE_VM) failed: Device or resource busy
ko:failed to initialize KVM

¿Cómo puedo hacer que ambos funcionen al mismo tiempo?

Ese es un Ubuntu de 64 bits, todo el software involucrado es de la última versión publicada.

Bananeweizen
fuente

Respuestas:

40

La eliminación de los módulos del kernel de kvm (usando 'sudo rmmod kvm_intel kvm') hace posible ejecutar Virtualbox y el emulador de Android al mismo tiempo, pero el rendimiento del emulador de Android en tal configuración es extremadamente malo. Si es posible, es mejor apagar el emulador de Virtualbox y descargar su controlador (vboxdrv) ejecutando 'sudo /etc/init.d/vboxdrv stop'. Google sugiere esta "solución" en su página de emulador de Android en la sección sobre Linux.

traber
fuente
9
Mi backend requiere que la aplicación tenga datos que se ejecutan en VirtualBox (Vagrant), por lo que esa no es una gran opción: P
Richard de Wit
4
Esta solución # @%! Se debe al hecho de que necesito ejecutar ambos al mismo tiempo ... mi servicio HTTPD está en Virtual Box, mientras que mi aplicación está en Android ... / me suspira. Supongo que es hora de volver a encender el servidor de desarrollo.
E Net Arch
1
Otra opción puede ser usar Docker en lugar de VirtualBox junto con el emulador de Android.
Matt Welke
1
O ejecute Vagrant con KVM.
Michael Hampton
Gracias @MichaelHampton. ¡Instalé vagrant-libvert y funcionó!
jchook
30

Tengo el mismo conflicto de VirtualBox. Lo resolvió usando ABI diferente de "x86" (armeabi-v7a en mi caso)

Stanislav Makarenko
fuente
Mucho más elegante que derribar la VM existente. Gracias.
MonoThreaded
2
Entristecido al escuchar esto.
MatBee
Es de suponer que el emulador se ejecutará lentamente de esta manera, pero es una opción.
ToolmakerSteve
En mi caso, también necesito que se ejecute VirtualBox VM (para RDP), así que este fue un muy buen consejo.
Csaba Toth
2
@rudolfbyker, lo que dice la respuesta es que los emuladores que se ejecutan con CPU / ABI x86 / x86_64 son mucho más rápidos, pero usan el mismo KVM (máquina virtual basada en kernel) que VitualBox. La creación de un emulador con otro CPU, como arm64, será no conflicto con VirtualBox, pero emulador es un montón más lento.
jayeffkay
16

Detuve las máquinas virtuales que tenía ejecutándose con VirtualBox. Esto hizo desaparecer el error.

Ole Tange
fuente
Esto funcionó para mí en Fedora 20. Con pantallas más grandes, más RAM y espacios de trabajo de Gnome 3, es fácil olvidar que está ejecutando otra máquina en algún lugar en segundo plano. killall virtualboxDeberías hacerlo.
Ray Foss
Funciona pero no es la mejor solución. Puede tener ambos (consulte la respuesta de Stanislav)
MonoThreaded
Tuve este problema con Ubuntu 16 mientras usaba la máquina acoplable y los controladores de caja virtual. detener el vms con docker-machine stop machine-nameresolvió el problema como se sugiere en esta respuesta
Benjamin Slabbert
Resulta que solo apagar la GUI de VirtualBox y las VM no funcionará. En mi caso, tenía varios procesos de virtualbox aún en ejecución: VBoxSVC, VBoxNetDHCP, VBoxXPCCOMIPCD. Matarlos en top / htop resolvió el problema.
Babken Vardanyan
La pregunta era '¿Cómo puedo hacer que ambos funcionen al mismo tiempo?'.
Stephen M -en huelga-
5

Tuve el mismo problema en Ubuntu 13.10. Intente eliminar los módulos del kernel kvm y kvm_intel.

Para hacer esto:

  1. Detenga todos los emuladores.
  2. Ejecutar comando: 'sudo rmmod kvm_intel kvm'

Sin estos módulos de kernel, los emuladores de Virtualbox y Android pueden funcionar al mismo tiempo.

Por cierto, no sé por qué se cargan los módulos.

Alexander Zhukov
fuente
16
Una advertencia: si bien esto funciona, la eliminación de los módulos del kernel de KVM provocará una disminución sustancial en el rendimiento con la imagen de Intel Android, ya que perderá el soporte de aceleración de hardware de la CPU sin los módulos del kernel.
JustJohn
1
@Tajchert: para revertir: 'sudo modprobe kvm_intel kvm'
Splitlocked
Los emuladores x86 ... se negaron a ejecutarse sin módulos KVM. Bah.
Martlark
se necesitan ambos controladores
user1121055
5

Finalmente hay una solución para esto.

Siga estos pasos para macOS :

  1. En Android Studio, vaya a Herramientas -> Android -> Administrador de SDK

  2. Confirme que tiene instalada la última versión de Intel Emulator Accelerator HAXM (v6.1.1) Panel de preferencias en Android Studio.

  3. Vaya al extrasdirectorio de la ubicación del SDK de Android que se muestra en las preferencias. En MacOS puedes hacer esto:

    open ~/Library/Android/sdk/extras

  4. Instale el paquete HAXM abriendo IntelHAXM_6.1.1.dmg, luego abriendo IntelHAXM_6.1.1.mpkg en la carpeta montada y siguiendo las instrucciones del instalador.

Siga estos pasos para Windows :

  1. En Android Studio, vaya a Herramientas -> Android -> Administrador de SDK

  2. Confirme que tiene instalada la última versión de Intel Emulator Accelerator HAXM (v6.1.1) Panel de preferencias en Android Studio.

  3. Vaya al extrasdirectorio de la ubicación del SDK de Android que se muestra en las preferencias. Algo como:

    C:\Users\<username>\AppData\Local\Android\sdk\extras

  4. En ese directorio hay una especie de archivo como intelhaxm-android.exe. Ejecutarlo.

arador
fuente
2
¿Existe también una solución para Ubuntu 16.04.3?
lijadoras
¡HAXM no admite máquinas virtuales anidadas!
Jorgesys
¿Qué pasa con KVM? ¿Cómo puedo hacer lo mismo?
Vadim Kotov
No se trata de máquinas virtuales anidadas. El problema en este tema es para máquinas virtuales en paralelo. Y no tiene absolutamente ningún sentido que esto no funcione,
Lothar
Y no hay solución para Linux. Mala suerte nuevamente para el uso de Linux. Esto significa que ahora tengo que elegir Windows como mi servidor de compilación.
Lothar
4

También puede cambiar la configuración CPT / ABI de x86 para armar en la configuración del emulador.

0x8BADF00D
fuente
2
Pero entonces el emulador va a ser muy lento ... pero al menos puedes ejecutar ambos al mismo tiempo;)
biophonc
4

Finalmente hice obsoleto este problema usando Genymotion en lugar del emulador estándar de Android. Además de no tener este conflicto, es varias veces más rápido que el emulador normal.

Bananeweizen
fuente
¿Es este un software gratuito?
vishnu viswanath
@vishnu viswanath Solo para casos de uso con fines no comerciales. Lea más aquí genymotion.com/legal/terms-and-conditions debajo de "Licencia otorgada: limitada". Lo que dice: Esta licencia se otorga al usuario final única y exclusivamente en relación con el uso personal, el usuario final es un individuo, y no un profesional, que descarga la aplicación para necesidades personales y privadas, excluyendo el entorno comercial y profesional.
mykolaj
1
Esto probablemente desapareció porque genymotion no usaba KVM. Ni estable (porque en algún momento van a empezar a usarlo) , ni solución eficaz.
Hi-Angel
Gracias por comentar esta opción. Instalaría Genymotion para uso personal en Ubuntu 18.04 y ahora puedo usar mis máquinas VirtualBox al mismo tiempo :)
Fer B.
3

Otra solución es usar vagrant respaldado por libvirt usando el complemento vagrant-libvirt .

DHH
fuente
2

Aunque también es una solución alternativa, pero definitivamente es mejor que deshabilitar KVM como todos sugieren.

Simplemente ejecute el invitado virtualbox en KVM. Por ejemplo ( kvmaquí hay solo un script que ejecuta a qemu-system-x86_64 -enable-kvm) :

kvm Win7.vdi -boot c -m 2G -vga qxl
Hola angel
fuente
Esto me resolvió el problema, sin embargo, no puedo averiguar cómo hacer que mi imagen virtual se conecte a Internet y, por alguna razón, el mapeo de teclado está desordenado ..
MikeSchem
@MikeSchem sí, desafortunadamente configurar una red en KVM / QEMU es un gran problema. Cuando escribí la respuesta, no tengo tiempo para poner la red en funcionamiento porque después de algunas manipulaciones, el invitado de Windows comenzó a caer con BSOD al inicio en KVM, mientras aún trabajaba en VB.
Hi-Angel
1

En algunos casos, necesitamos mantener las máquinas virtualbox en funcionamiento, por lo tanto, deje que todas las máquinas virtualbox sigan funcionando, cambie al dispositivo móvil físico para probar su aplicación en lugar del emulador.

puede usar expo si lo está haciendo con react-native o su dispositivo Android / ios real.

Ashwin J Chhetri
fuente
0

Esto podría estar fuera de tema, debido al hecho de que OP solicitó VirtualBox + KVM al mismo tiempo, pero aún así, podría ser la solución alternativa: estaba buscando una forma de iniciar Windows 7 y AVD en Ubuntu 18.10 x64. Desactivar KVM no es una opción debido al hecho de que el rendimiento de AVD es fundamental para mí. He instalado Windows 7 a través de Virtual Machine Manager (paquete virt-manager) y ahora tanto el AVD como el Windows 7 están acelerados por hardware.

vocasle
fuente
0

Así es como se resolvió este problema, usando vagrant y sus dos complementos 'libvirt' y 'mutate':

  1. Abra el terminal y establezca las variables de entorno:

     export VAGRANT_DEFAULT_PROVIDER=libvirt
     export VAGRANT_HOME=/home/directoryToStoreVagrant/
     VBoxManage list vms
    
  2. Ahora copie el código obtenido del último comando como "c1530713-aec2-4415-a6b5-b057928c7e5f" y use lo siguiente:

    paquete vagabundo --base c1530713-aec2-4415-a6b5-b057928c7e5f --output window7.box

     vagrant init window7
     vagrant up window7 --provider=libvirt 
     vagrant box list
    
  3. Necesita instalar algunos complementos vagabundos como libvirt y mutate . Mutate convertirá .box a libvirt VM:

    vagrant plugin instalar vagrant-libvirt vagrant plugin instalar vagrant-mutate

  4. Conversión de vagrant box en libvirt:

    vagrant mutate window7_.box libvirt

  5. Ahora puede inicializar la VM vagabunda. Si persiste algún error, muévase para editar su archivo Vagrant. Como para mí, descomento que la línea comienza con config.vm.network y luego ejecuto el siguiente comando:

    vagrant up --provider=libvirt

Así es como pude deshacerme de este error por completo

muhammad tayyab
fuente