L'émulateur Android et la virtualbox ne peuvent pas s'exécuter en même temps

104

Chaque fois que Virtualbox est en cours d'exécution, je ne peux pas démarrer une image d'émulateur Android (et vice versa). Le message d'erreur dans le gestionnaire AVD est

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

Comment puis-je faire fonctionner les deux en même temps?

Il s'agit d'un Ubuntu 64 bits, tous les logiciels impliqués sont de la dernière version publiée.

Bananeweizen
la source

Réponses:

40

La suppression des modules du noyau kvm (en utilisant 'sudo rmmod kvm_intel kvm') permet d'exécuter la Virtualbox et l'émulateur Android en même temps, mais les performances de l'émulateur Android dans une telle configuration sont extrêmement mauvaises. Si possible, il est préférable d'arrêter l'émulateur Virtualbox et de décharger son pilote (vboxdrv) en exécutant «sudo /etc/init.d/vboxdrv stop». Google propose cette "solution" sur sa page Android Emulator dans la section Linux.

traber
la source
9
Mon backend requis pour que l'application ait des données s'exécute sur VirtualBox (Vagrant), donc ce n'est pas une excellente option: P
Richard de Wit
4
Cette solution # @%! Est due au fait que je dois exécuter les deux en même temps .. mon service HTTPD est dans Virtual Box, tandis que mon application est sous Android .. / me soupire. Je suppose qu'il est temps de relancer le serveur de développement.
E Net Arch
1
Une autre option peut être d'utiliser Docker au lieu de VirtualBox en conjonction avec l'émulateur Android.
Matt Welke
1
Ou exécutez Vagrant avec KVM.
Michael Hampton
Merci @MichaelHampton. J'ai installé vagrant-libvert et cela a fonctionné!
jchook
30

J'ai le même conflit VirtualBox. Résolu en utilisant ABI différent de "x86" (armeabi-v7a dans mon cas)

Stanislav Makarenko
la source
Beaucoup plus élégant que d'arrêter la VM existante. Merci.
MonoThreaded le
2
Triste d'entendre cela.
MatBee du
Vraisemblablement, l'émulateur fonctionnera lentement de cette façon, mais c'est une option.
ToolmakerSteve
Dans mon cas, j'ai également besoin de la VM VirtualBox pour fonctionner (pour RDP), c'était donc un très bon conseil.
Csaba Toth
2
@rudolfbyker, la réponse est que les émulateurs qui fonctionnent avec CPU / ABI x86 / x86_64 sont beaucoup plus rapides, mais utilisent le même KVM (machine virtuelle basée sur le noyau) que VitualBox. Création d' un émulateur avec un autre processeur, comme arm64, ne sera pas en conflit avec VirtualBox, mais l' émulateur est un beaucoup plus lent.
jayeffkay
16

J'ai arrêté les machines virtuelles que j'avais exécutées avec VirtualBox. Cela a fait disparaître l'erreur.

Ole Tange
la source
Cela a fonctionné pour moi dans Fedora 20. Avec des écrans plus grands, plus de RAM et des espaces de travail Gnome 3, il est facile d'oublier que vous utilisez une autre machine quelque part en arrière-plan. killall virtualboxdevrait le faire.
Ray Foss
Fonctionne mais pas la meilleure solution. Vous pouvez les avoir tous les deux (voir la réponse de Stanislav)
MonoThreaded le
J'ai eu ce problème avec Ubuntu 16 lors de l'utilisation de la machine docker et des pilotes de boîte virtuelle. arrêter le vms avec docker-machine stop machine-namerésolu le problème comme suggéré dans cette réponse
Benjamin Slabbert
Il s'avère que le simple fait d'arrêter l'interface graphique de VirtualBox et les machines virtuelles ne fera pas l'affaire. Dans mon cas, j'avais plusieurs processus virtualbox toujours en cours d'exécution: VBoxSVC, VBoxNetDHCP, VBoxXPCCOMIPCD. Les tuer dans top / htop a résolu le problème.
Babken Vardanyan
La question était: «Comment puis-je faire fonctionner les deux en même temps?».
Stephen M -on grève-
5

J'ai eu le même problème sur Ubuntu 13.10. Essayez de supprimer les modules du noyau kvm et kvm_intel.

Pour faire ça:

  1. Arrêtez tous les émulateurs.
  2. Exécuter la commande: 'sudo rmmod kvm_intel kvm'

Sans ces modules de noyau, les émulateurs Virtualbox et Android peuvent fonctionner en même temps.

BTW, je ne sais pas pourquoi les modules sont chargés.

Alexandre Joukov
la source
16
Un mot d'avertissement: bien que cela fonctionne, la suppression des modules du noyau KVM entraînera une diminution substantielle des performances avec l'image Intel Android, car vous perdez la prise en charge de l'accélération matérielle du processeur sans les modules du noyau.
JustJohn
1
@Tajchert: pour revenir: 'sudo modprobe kvm_intel kvm'
Splitlocked
Les émulateurs x86 ... ont refusé de fonctionner sans modules KVM. Bah.
Martlark
les deux pilotes sont nécessaires
user1121055
5

Il existe enfin un correctif pour cela.

Suivez ces étapes pour macOS :

  1. Dans Android Studio, accédez à Outils -> Android -> Gestionnaire de SDK

  2. Confirmez que la dernière version d'Intel Emulator Accelerator HAXM est installée (v6.1.1) Panneau de préférences dans Android Studio.

  3. Accédez au extrasrépertoire de l'emplacement du SDK Android affiché dans les préférences. Sur MacOS, vous pouvez faire ceci:

    open ~/Library/Android/sdk/extras

  4. Installez l'emballage HAXM en ouvrant IntelHAXM_6.1.1.dmg, puis en ouvrant IntelHAXM_6.1.1.mpkg dans le dossier monté et en suivant les instructions du programme d'installation.

Suivez ces étapes pour Windows :

  1. Dans Android Studio, accédez à Outils -> Android -> Gestionnaire de SDK

  2. Confirmez que la dernière version d'Intel Emulator Accelerator HAXM est installée (v6.1.1) Panneau de préférences dans Android Studio.

  3. Accédez au extrasrépertoire de l'emplacement du SDK Android affiché dans les préférences. Quelque chose comme:

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

  4. Dans ce répertoire se trouve une sorte de fichier comme intelhaxm-android.exe. Exécuter.

laboureur
la source
2
Existe-t-il également un correctif pour Ubuntu 16.04.3?
sanders
HAXM ne prend pas en charge les machines virtuelles imbriquées!
Jorgesys
Et KVM? Comment puis-je faire de même?
Vadim Kotov
Il ne s'agit pas de machines virtuelles imbriquées. Le problème dans cette rubrique concerne les machines virtuelles côte à côte. Et cela n'a absolument aucun sens que cela ne devrait pas fonctionner,
Lothar
Et il n'y a pas de solution pour Linux. Pas de chance encore pour l'utilisation de Linux. Cela signifie que je dois maintenant choisir Windows comme serveur de build.
Lothar
4

Vous pouvez également modifier le paramètre CPT / ABI de x86 pour armer les paramètres de l'émulateur.

0x8BADF00D
la source
2
Mais alors l'émulateur va être lent comme l'enfer ... mais au moins vous pouvez exécuter les deux en même temps;)
biophonc
4

J'ai finalement rendu ce problème obsolète en utilisant Genymotion au lieu de l'émulateur Android standard. En plus de ne pas avoir ce conflit, il est plusieurs fois plus rapide que l'émulateur normal.

Bananeweizen
la source
est-ce un logiciel gratuit?
vishnu viswanath
@vishnu viswanath Uniquement pour les cas d'utilisation à des fins non commerciales. Pour en savoir plus, cliquez sur genymotion.com/legal/terms-and-conditions ci-dessous "Licence accordée: limitée". Ce qui dit: Cette licence est accordée à l'utilisateur final uniquement et exclusivement dans le cadre d'un usage personnel, l'utilisateur final est un particulier, et non un professionnel, qui télécharge l'application pour des besoins personnels et privés, hors environnement commercial et professionnel.
mykolaj
1
Cela a probablement disparu car genymotion n'utilisait pas KVM. Ni stable (car à un moment donné, ils vont commencer à l'utiliser) , ni solution performante.
Hi-Angel
Merci d'avoir commenté cette option. J'installerais Genymotion pour un usage personnel dans Ubuntu 18.04 et je peux maintenant utiliser mes machines VirtualBox en même temps :)
Fer B.
3

Une autre solution consiste à utiliser vagrant soutenu par libvirt en utilisant le plugin vagrant-libvirt .

DHH
la source
2

Bien que ce soit une solution de contournement non plus, mais certainement mieux que de désactiver KVM comme tout le monde le suggère.

Exécutez simplement l'invité virtualbox dans KVM à la place. Par exemple ( kvmvoici juste un script exécutant a qemu-system-x86_64 -enable-kvm) :

kvm Win7.vdi -boot c -m 2G -vga qxl
Salut ange
la source
Cela a résolu le problème pour moi, mais je ne peux pas comprendre comment obtenir mon image virtuelle pour se connecter à Internet et pour une raison quelconque, le mappage des touches est tout foiré ..
MikeSchem
@MikeSchem ouais, malheureusement, configurer un réseau en KVM / QEMU est un gros problème. Quand j'ai écrit la réponse, je n'ai pas le temps de mettre le réseau en marche car après quelques manipulations, l'invité Windows a commencé à tomber avec BSOD au démarrage dans KVM, tout en travaillant toujours en VB.
Hi-Angel
1

Dans certains cas, nous devons maintenir les machines virtualbox opérationnelles, donc laissez toutes les machines virtualbox continuer à fonctionner, passez à un appareil mobile physique pour tester votre application au lieu de l'émulateur.

vous pouvez utiliser expo si vous utilisez react-native ou votre véritable appareil Android / iOS.

Ashwin J Chhetri
la source
0

Cela peut être hors sujet, en raison du fait qu'OP a demandé VirtualBox + KVM en même temps, mais cela pourrait quand même être la solution de contournement: je cherchais un moyen de lancer Windows 7 et AVD sur Ubuntu 18.10 x64. La désactivation de KVM n'est pas une option en raison du fait que les performances d'AVD sont essentielles pour moi. J'ai installé Windows 7 via Virtual Machine Manager (package virt-manager) et maintenant l'AVD et Windows 7 sont accélérés par le matériel.

vocasle
la source
0

Voici comment ce problème a été résolu en utilisant vagrant et ses deux plugins 'libvirt' et 'mutate':

  1. Ouvrez le terminal et définissez les variables d'environnement:

     export VAGRANT_DEFAULT_PROVIDER=libvirt
     export VAGRANT_HOME=/home/directoryToStoreVagrant/
     VBoxManage list vms
    
  2. Copiez maintenant le code obtenu à partir de la dernière commande comme "c1530713-aec2-4415-a6b5-b057928c7e5f" et utilisez ce qui suit:

    paquet vagrant --base c1530713-aec2-4415-a6b5-b057928c7e5f --output window7.box

     vagrant init window7
     vagrant up window7 --provider=libvirt 
     vagrant box list
    
  3. Vous devez installer des plugins vagrant comme libvirt et mutate . Mutate convertira .box en machine virtuelle libvirt:

    vagrant plugin installer vagrant-libvirt vagrant plugin installer vagrant-mutate

  4. Conversion de vagrant box en libvirt:

    vagrant mutate window7_.box libvirt

  5. Vous pouvez maintenant initialiser la VM vagrant. Si une erreur persiste, modifiez votre fichier Vagrant. Comme pour moi, je décommente la ligne commence par config.vm.network puis exécute la commande ci-dessous:

    vagrant up --provider=libvirt

C'est ainsi que j'ai pu me débarrasser complètement de cette erreur

Muhammad tayyab
la source