AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 478129
Accepted
Stonecraft
Stonecraft
Asked: 2018-10-28 07:48:06 +0800 CST2018-10-28 07:48:06 +0800 CST 2018-10-28 07:48:06 +0800 CST

A passagem da GPU funciona com o firmware UEFI, mas não com a ISO do Windows

  • 772

Estou tentando configurar uma máquina virtual com gráficos de passagem. Consigo fazer a passagem funcionar para o shell UEFI, mas não para o instalador oficial do Windows . Consigo fazer o instalador do Windows funcionar, mas apenas com gráficos emulados

Isso inicializa o instalador do Windows em uma janela QEMU:

sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-vga qxl

Isso também inicializa o instalador do Windows em uma janela QEMU (ainda sem passagem)

sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 

Mas se eu especificar os caminhos para o firmware UEFI, recebo a tela slpash Tiano e, em seguida, o shell UEFI no monitor conectado à minha placa de vídeo passada e em uma janela QEMU.

sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd 

Por que a passagem está funcionando apenas na ausência dos arquivos UEFI? Ou, por que especificar os arquivos UEFI está me impedindo de iniciar o Windows?

Editar: Tentei baixar uma versão diferente do Windows (abril de 2018 em vez de outubro), mesmo problema.

Edit: Tentei limpar e reinstalar o OVMF, mas sem sorte.

Editar: eu posso acessar o gerenciador de inicialização digitando "exit" no shell, mas selecionando a unidade de DVD disponível (e todas as outras opções) imediatamente volta para o gerenciador de inicialização.

Edit: Executei isso:

-name TESTVM,process=TESTVM \
-drive file=/media/big-tank-8TB/OSISOS/Windows/Win10_1803_English_x64.iso,index=1,media=cdrom  \
-drive file=/media/big-tank-8TB/OSISOS/Windows/virtio-win-0.1.160.iso,index=2,media=cdrom \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd 

Quando peguei também o shell do uefi, digitei "exit" para chegar ao gerenciador de inicialização. No gerenciador de inicialização, selecionar a unidade de DVD disponível instantaneamente retornou ao gerenciador de inicialização.

Em seguida, adicionei outra unidade de DVD pelo Gerenciador de manutenção de inicialização > Opções de inicialização > Adicionar opção de inicialização e selecionei-a no menu Gerenciador de inicialização. a entrada de inicialização que eu escolhi.

Isso me deu um breve "pressione qualquer tecla para inicializar a partir do CD". Se eu for rápido o suficiente, isso inicializa no instalador do Windows, MAS APENAS NA JANELA QEMU. A tela anexada ao cartão de passagem era preta com um cursor simples, em oposição ao espelhamento como no UEFI/Boot Manager.

Edit: Estou tentando passar por uma NVIDIA GTX1070. Mobo é ASRock x399 Taichi, CPU é Threadripper 1950X. O SO é o Ubuntu Server com o XFCE instalado.

Edit: Se eu continuar com a instalação, ainda tenho o Windows na janela do QEMU e apenas uma tela inicial do TianoCore na placa de passagem. Se eu for ao gerenciador de dispositivos, o Windows vê o cartão, mas é interrompido por algum motivo. Erro 43

Edit: tentei usar estas instruções para me livrar do código 43, sem sucesso. Para tentar isso, usei o virt-install em vez do qemu-system e, ao fazer isso, não há tela inicial do TianoCore. Mas ainda código 43 quando entro no Windows.

Editar: usado dmesg para verificar erros de reserva de memória conforme descrito aqui. Não encontrou nenhum. Edit: Também no link acima, usei o analisador de ROM e confirmei a presença de um "tipo 3 (EFI)"

kvm windows
  • 3 3 respostas
  • 7705 Views

3 respostas

  • Voted
  1. Best Answer
    FreeSoftwareServers
    2018-11-01T21:34:33+08:002018-11-01T21:34:33+08:00

    Você já está no caminho certo. O GPU Passthrough não é perfeito, especialmente se for uma placa NVidia (que você não menciona NVidia ou AMD). Conclua a configuração na janela do Qemu. Certifique-se de que a máquina Windows esteja conectada à Internet e deixe o Windows Update instalar os drivers gráficos para você. Quando você voltar, deverá ser recebido por um segundo monitor, caso contrário, reinicie. Eu geralmente removo o console spice/vnc e só tenho o monitor GPU conectado. Fazer com que o GPU Passthrough funcione é uma questão de tentativa e erro.

    Outras coisas para tentar:

    • Instale o Windows sem passagem de GPU e tente passar por GPU.
    • Instale drivers via NVidia_drivers.exe
    • Instalar drivers via Windows Update
    • BIOS x UEFI
    • Q35 vs i440fx

    Nota: O código 43 é um erro conhecido com NVidia relacionado aos drivers NVidia que verificam se eles estão sendo executados em uma VM. A NVidia vende cartões especificamente para execução em um ambiente de VM e tenta bloquear a instalação de drivers para cartões de grau de consumidor em uma VM. Você precisa certificar-se de usar o seguinte em seu domínio.xml

    <kvm>
     <hidden state='on'/>
    </kvm>
    

    Consulte https://passthroughpo.st/apply-error-43-workaround/ e outros recursos para obter exemplos.

    Aqui está uma captura de tela da minha configuração:

    Configurações de passagem de GPU QEMU

    Aqui está a parte "relevante" do meu domínio.xml, posso compartilhar tudo se você quiser, mas tem um monte de coisas desnecessárias.

      <os>
        <type arch='x86_64' machine='pc-i440fx-2.10'>hvm</type>
        <loader readonly='yes' type='pflash'>/usr/share/edk2/ovmf/OVMF_CODE.fd</loader>
        <nvram>/var/lib/libvirt/qemu/nvram/Windows10_VARS.fd</nvram>
        <boot dev='hd'/>
      </os>
      <features>
        <acpi/>
        <apic/>
        <kvm>
          <hidden state='on'/>
        </kvm>
        <vmport state='off'/>
      </features>
      <clock offset='localtime'>
        <timer name='rtc' tickpolicy='catchup'/>
        <timer name='pit' tickpolicy='delay'/>
        <timer name='hpet' present='no'/>
      </clock>
    
    • 7
  2. Stonecraft
    2018-11-05T11:57:47+08:002018-11-05T11:57:47+08:00

    Eu fiz com isso:

    sudo qemu-system-x86_64 --enable-kvm \
    -name TESTVM,process=TESTVM \
    -drive id=disk0,if=virtio,cache=none,format=raw,file=/dev/nvme-tank/ntfs-zvol,index=2 \
    -smp 4 \
    -cpu core2duo,kvm=off \
    -m 4096 \
    -device vfio-pci,host=43:00.0,multifunction=on \
    -device vfio-pci,host=43:00.1 \
    -drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
    -drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd 
    

    e, em seguida, vá para a entrada GTX 1070 no Gerenciador de dispositivos e atualize os drivers. Da última vez (usando virt-install) instalei atualizações do site da NVIDIA. Agora, para fazer isso funcionar com virt-install, para que eu possa ter um XML de domínio editável.

    Edit: Até agora, ao usar o virt-install, agora (novamente) recebo a tela do Tiano, mas desta vez instalar os drivers conforme descrito acima não foi suficiente, nem funcionou para importar a instalação acima usando o virt-install (em um nota lateral, demorei um pouco para perceber que tudo o que eu precisava fazer para que o virt-install funcionasse com minha instalação existente era incluir a iso de inicialização, permitindo que ela inicializasse a partir da instalação sem erros).

    Edit: Então, acho que agora está funcionando.

    1. Faça a instalação inicial usando o qemu-system-x86_64 acima
    2. Drivers atualizados usando o Gerenciador de dispositivos
    3. Em seguida, faça virt-install (mas receba o erro 43 novamente):

      virt-install \ --name myWINVM1 \ --boot uefi \ --ram 4096 \ --features kvm_hidden=on \ --hostdev 43:00.0,address.type=pci,address.multifunction=on \ --hostdev 43: 00.1,address.type=pci \ --disk path=/dev/nvme-tank/ntfs-zvol-part2 \ --cpu core2duo \ --vcpus 4 \ --os-type windows \ --os-variant win10 \ --network bridge=virbr0 \ --console pty,target_type=serial \ --disk /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso,device=cdrom \ --disk /media/big-tank- 8TB/OSISOS/Windows/virtio-win-0.1.160.iso,device=cdrom

    4. Excluído o dispositivo gráfico spice do XML myWINVM1. Ainda não consegui passar TianoCore.

    5. adicionou a linha de ID do fornecedor falso ao meu XML

    6. Adicionado meus dispositivos USB

    meu xml final:

    <domain type='kvm' id='24'>
      <name>myWINVM1</name>
      <uuid>43e052b3-b3da-4025-92d8-ec7c8ff96ae9</uuid>
      <memory unit='KiB'>4194304</memory>
      <currentMemory unit='KiB'>4194304</currentMemory>
      <vcpu placement='static'>4</vcpu>
      <resource>
        <partition>/machine</partition>
      </resource>
      <os>
        <type arch='x86_64' machine='pc-i440fx-bionic'>hvm</type>
        <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader>
        <nvram>/var/lib/libvirt/qemu/nvram/myWINVM1_VARS.fd</nvram>
        <boot dev='hd'/>
      </os>
      <features>
        <acpi/>
        <apic/>
        <hyperv>
          <relaxed state='on'/>
          <vapic state='on'/>
          <spinlocks state='on' retries='8191'/>
          <vendor_id state='on' value='1234567890ab'/>
        </hyperv>
        <kvm>
          <hidden state='on'/>
        </kvm>
        <vmport state='off'/>
      </features>
      <cpu mode='custom' match='exact' check='full'>
        <model fallback='forbid'>core2duo</model>
        <feature policy='disable' name='ss'/>
        <feature policy='disable' name='monitor'/>
        <feature policy='require' name='cx16'/>
        <feature policy='require' name='x2apic'/>
        <feature policy='require' name='hypervisor'/>
        <feature policy='require' name='lahf_lm'/>
      </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>destroy</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='raw'/>
          <source file='/dev/nvme-tank/ntfs-zvol-part2'/>
          <backingStore/>
          <target dev='hda' bus='ide'/>
          <alias name='ide0-0-0'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
        <disk type='file' device='cdrom'>
          <driver name='qemu' type='raw'/>
          <source file='/media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso'/>
          <backingStore/>
          <target dev='hdb' bus='ide'/>
          <readonly/>
          <alias name='ide0-0-1'/>
          <address type='drive' controller='0' bus='0' target='0' unit='1'/>
        </disk>
        <disk type='file' device='cdrom'>
          <driver name='qemu' type='raw'/>
          <source file='/media/big-tank-8TB/OSISOS/Windows/virtio-win-0.1.160.iso'/>
          <backingStore/>
          <target dev='hdc' bus='ide'/>
          <readonly/>
          <alias name='ide0-1-0'/>
          <address type='drive' controller='0' bus='1' target='0' unit='0'/>
        </disk>
        <controller type='usb' index='0' model='ich9-ehci1'>
          <alias name='usb'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci1'>
          <alias name='usb'/>
          <master startport='0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci2'>
          <alias name='usb'/>
          <master startport='2'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
        </controller>
        <controller type='usb' index='0' model='ich9-uhci3'>
          <alias name='usb'/>
          <master startport='4'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
        </controller>
        <controller type='pci' index='0' model='pci-root'>
          <alias name='pci.0'/>
        </controller>
        <controller type='ide' index='0'>
          <alias name='ide'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
        </controller>
        <controller type='virtio-serial' index='0'>
          <alias name='virtio-serial0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
        </controller>
        <interface type='bridge'>
          <mac address='52:54:00:36:1d:c4'/>
          <source bridge='virbr0'/>
          <target dev='vnet0'/>
          <model type='rtl8139'/>
          <alias name='net0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
        <serial type='pty'>
          <source path='/dev/pts/4'/>
          <target type='isa-serial' port='0'>
            <model name='isa-serial'/>
          </target>
          <alias name='serial0'/>
        </serial>
        <console type='pty' tty='/dev/pts/4'>
          <source path='/dev/pts/4'/>
          <target type='serial' port='0'/>
          <alias name='serial0'/>
        </console>
        <channel type='spicevmc'>
          <target type='virtio' name='com.redhat.spice.0' state='disconnected'/>
          <alias name='channel0'/>
          <address type='virtio-serial' controller='0' bus='0' port='1'/>
        </channel>
        <input type='tablet' bus='usb'>
          <alias name='input0'/>
          <address type='usb' bus='0' port='1'/>
        </input>
        <input type='mouse' bus='ps2'>
          <alias name='input1'/>
        </input>
        <input type='keyboard' bus='ps2'>
          <alias name='input2'/>
        </input>
        <sound model='ich6'>
          <alias name='sound0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
        </sound>
        <video>
          <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
          <alias name='video0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
        </video>
        <hostdev mode='subsystem' type='usb' managed='no'>
          <source>
            <vendor id='0x046d'/>
            <product id='0xc33b'/>
            <address bus='5' device='3'/>
          </source>
          <alias name='hostdev0'/>
          <address type='usb' bus='0' port='4'/>
        </hostdev>
        <hostdev mode='subsystem' type='usb' managed='no'>
          <source>
            <vendor id='0x046d'/>
            <product id='0xc52b'/>
            <address bus='5' device='4'/>
          </source>
          <alias name='hostdev1'/>
          <address type='usb' bus='0' port='5'/>
        </hostdev>
        <hostdev mode='subsystem' type='pci' managed='yes'>
          <driver name='vfio'/>
          <source>
            <address domain='0x0000' bus='0x43' slot='0x00' function='0x0'/>
          </source>
          <alias name='hostdev2'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
        </hostdev>
        <hostdev mode='subsystem' type='pci' managed='yes'>
          <driver name='vfio'/>
          <source>
            <address domain='0x0000' bus='0x43' slot='0x00' function='0x1'/>
          </source>
          <alias name='hostdev3'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
        </hostdev>
        <redirdev bus='usb' type='spicevmc'>
          <alias name='redir0'/>
          <address type='usb' bus='0' port='2'/>
        </redirdev>
        <redirdev bus='usb' type='spicevmc'>
          <alias name='redir1'/>
          <address type='usb' bus='0' port='3'/>
        </redirdev>
        <memballoon model='virtio'>
          <alias name='balloon0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
        </memballoon>
      </devices>
      <seclabel type='dynamic' model='apparmor' relabel='yes'>
        <label>libvirt-43e052b3-b3da-4025-92d8-ec7c8ff96ae9</label>
        <imagelabel>libvirt-43e052b3-b3da-4025-92d8-ec7c8ff96ae9</imagelabel>
      </seclabel>
      <seclabel type='dynamic' model='dac' relabel='yes'>
        <label>+64055:+120</label>
        <imagelabel>+64055:+120</imagelabel>
      </seclabel>
    </domain>
    
    • 4
  3. tarzanello666
    2019-01-16T06:25:04+08:002019-01-16T06:25:04+08:00

    Isto é o que funcionou para mim depois de uma longa luta:

    • primeiro edite o arquivo de configuração da VM qemu desta forma:

       cd /etc/libvirt/qemu    
       sudo virsh define win10_GPU.xml
       sudo virsh edit win10_GPU
      

      onde "win10_GPU" é o nome da sua máquina virtual, é claro, e adicione

       <qemu:commandline>
         <qemu:arg value='-cpu'/>
         <qemu:arg value='host,hv_time,kvm=off,hv_vendor_id=null,-hypervisor'/>   
       </qemu:commandline>
      

      depois </devices>de quase no final do arquivo
      aperte ctrl+O (salvar), ctrl+X (sair) e digite sudo virsh define win10_GPU.xmlnovamente;

    • remova todas as outras interfaces de exibição da sua máquina virtual antes mesmo de iniciar a instalação do Windows (como spice, video cirrus, o que for);

    • Não instale a versão 18xx do windows10. Instalei uma versão 16xx que está funcionando perfeitamente mesmo após as atualizações completas.

    Está é minha experiência pessoal. Qualquer outra coisa que eu tentei me levou a esse código de erro 43.

    • -1

relate perguntas

  • Como definir variáveis ​​de ambiente para plink.exe?

  • Erro ao validar local de instalação: Distro 'centos7' não existe em nosso dicionário || Host OS CentOS 7 [fechado]

  • Como você altera a porta KVM VNC em tempo de execução, na linha de comando?

  • Por que os vms no KVM/QEMU são chamados de domínios?

  • Instale o grub na partição do Windows 7 no Kali Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve