2017-05-12 5 views
5

Dans mon hôte déjà virtualisé, en essayant de passer l'option l'option -enable-kvm -m 1024, échouera:virtualisation imbriquée avec KVM: --enable-kvm dans qemu en matière de virtualisation imbriquée

qemu-system-x86_64 -vga std -enable-kvm -m 1024 -monitor telnet:localhost:9313,server,nowait -drive file=my_img.img,cache=none 
# Could not access KVM kernel module: No such file or directory 
# failed to initialize KVM: No such file or directory 

Si je supprime cette option -enable-kvm -m 1024, qemu chargera (mais il faudra toujours, car il utilise un logiciel d'émulation):

qemu-system-x86_64 -vga std -monitor telnet:localhost:9313,server,nowait -drive file=my_img.img,cache=none 
# qemu running, OK, but image taking forever to load. 

Assurément, cet hôte virtualisé de la mine a des capacités d'imbrication sa propre virtualisation. Partout où je trouve des informations à ce sujet [comme ici: https://docs.openstack.org/developer/devstack/guides/devstack-with-nested-kvm.html] me dit que je dois vérifier le fichier /sys/module/kvm_intel/parameters/nested qui est tout simplement pas disponible, car kvm-intel n'est pas et ne peut pas être chargé à l'intérieur d'une image:

sudo modprobe kvm-intel 
# modprobe: ERROR: could not insert 'kvm_intel': Operation not supported 

Probablement que cette méthode de débogage de la virtualisation imbriquée ne fonctionne que dans le métal nu. Alors, comment puis-je activer (transférer le support de) kvm à l'intérieur d'un kvm?

Informations complémentaires:

lscpu # from inside the virtualized host 
# Architecture:   x86_64 
# ... 
# Vendor ID:    GenuineIntel 
# CPU family:   6 
# Model:     13 
# Model name:   QEMU Virtual CPU version (cpu64-rhel6) 
# Stepping:    3 
# ... 
# Hypervisor vendor:  KVM 

ltrace de qemu:

# open64("/dev/kvm", 524290, 00)     = -1 
# __errno_location()        = 0x7f958673c730 
# __fprintf_chk(0x7f957fd81060, 1, 0x7f9586474ce0, 0Could not access KVM kernel module: No such file or directory 

Répondre

4

Pour tester si le support kvm est activé dans l'hôte actuel (ie, il fonctionne dans la machine virtuelle) faire:

grep -E "(vmx|svm)" /proc/cpuinfo 
flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 popcnt aes xsave avx f16c lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt lwp fma4 tce tbm topoext perfctr_core perfctr_nb arat cpb hw_pstate npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold vmmcall bmi1 

Dans la question:

grep -E "(vmx|svm)" /proc/cpuinfo | wc -l 
0 

Cela signifie que le support est désactivé et enable-kvm ne fonctionnera pas. L'action dans la machine de métal nu est requise.