Habilite o Hyper-V em uma VM Convidada do Windows 2016

1

Eu tenho uma instalação do Windows 2016 em uma máquina virtual com a qual gostaria de usar o Hyper-V. O host é o XUbuntu. No entanto, toda vez que tento ativá-lo, sou informado de que não habilitei a virtualização no BIOS. De fato, ao usar o utilitário Intel Processor Identification, sou informado de que, embora meu processador virtualizado possa lidar com a virtualização, o VT-D não está habilitado.

Para a VM, estou usando o UEFI como o tipo de BIOS. Estou começando a pensar que este é todo o problema. Porque quando eu entro no menu não há uma opção singular relacionada à virtualização.

Aqui está o XML para o convidado do Windows:

<domain type='kvm'>
  <name>Gaming_Server</name>
  <uuid>ef50c993-194f-4090-9e07-917402fd5ae9</uuid>
  <memory unit='KiB'>10485760</memory>
  <currentMemory unit='KiB'>10485760</currentMemory>
  <vcpu placement='static'>10</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-2.5'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/Gaming_Server_VARS.fd</nvram>
    <boot dev='hd'/>
    <bootmenu enable='yes'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
  </features>
  <cpu mode='host-model'>
    <model fallback='allow'/>
    <topology sockets='1' cores='5' threads='2'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/kvm-spice</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='xxxx/Windows_Gaming_Server.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x05' function='0x0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='writeback'/>
      <source file='xxxx/Games.img'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x06' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='sda' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='xxxx/virtio-win-0.1.126.iso'/>
      <target dev='sdb' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='usb' index='0' model='nec-xhci'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <model name='i82801b11-bridge'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <model name='pci-bridge'/>
      <target chassisNr='2'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>
    </controller>
    <interface type='direct'>
      <mac address='52:54:00:ed:2a:69'/>
      <source dev='eno1' mode='bridge'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <image compression='off'/>
    </graphics>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x07' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x08' function='0x0'/>
    </hostdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x09' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Para provar que aninhei a virtualização:

$ cat /sys/module/kvm_intel/parameters/nested
Y

Então, eu realmente não sei qual é o problema e como corrigi-lo ...

    
por Robert 14.08.2017 / 06:33

2 respostas

0

Tente alterar o modo cpu para "host-passthrough". Ele deve funcionar, mas com medo de você se deparar com outros erros, como erros "Microsoft Hyper-V Virtual Machine Bus Provider".

    
por 30.12.2017 / 16:06
0

Para usar as opções de virtualização no Windows, você precisa usar as versões mais recentes do QEMU e do Libvirt. Além disso, para o UEFI, você também precisará da versão mais recente do OVMF (Titanocore). Depois de ter compilado e / ou instalado o software mencionado acima (conforme necessário), você precisará das seguintes linhas em seu arquivo de configuração XML para essa VM:

<features>
 ...
  <hyperv>
    ...
    <vendor_id state='on' value='something'/>
  </hyperv>
  <kvm>
    <hidden state='on'/>
  </kvm>
 ...
</features>


<cpu mode='host-passthrough' check='none'>
  ...
  <feature policy='disable' name='hypervisor'/>
</cpu>

Agora, tenho menos certeza sobre os valores vendor_id e kvm hidden state do que sobre o valor cpu hypervisor feature tag , mas é melhor prevenir do que remediar. Isso garantirá que:

  • O Windows não sabe que está em um hypervisor ao ser informado pela cpu
  • O Windows não poderá dizer se está dentro do KVM.
  • Se de alguma forma ele conseguir descobrir que está em um hypervisor, ele não saberá de qual programa ou empresa e, acredito, simplesmente assumirá que está em uma VM do Windows em vez de outra coisa.

Meu conhecimento técnico sobre esse assunto é bastante limitado, por isso, consulte a documentação relevante e saiba mais se precisar.

    
por 06.02.2018 / 11:41