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. .
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.
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)"
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:
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
Consulte https://passthroughpo.st/apply-error-43-workaround/ e outros recursos para obter exemplos.
Aqui está uma captura de tela da minha configuração:
Aqui está a parte "relevante" do meu domínio.xml, posso compartilhar tudo se você quiser, mas tem um monte de coisas desnecessárias.
Eu fiz com isso:
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.
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
Excluído o dispositivo gráfico spice do XML myWINVM1. Ainda não consegui passar TianoCore.
adicionou a linha de ID do fornecedor falso ao meu XML
meu xml final:
Isto é o que funcionou para mim depois de uma longa luta:
primeiro edite o arquivo de configuração da VM qemu desta forma:
onde "win10_GPU" é o nome da sua máquina virtual, é claro, e adicione
depois
</devices>
de quase no final do arquivoaperte ctrl+O (salvar), ctrl+X (sair) e digite
sudo virsh define win10_GPU.xml
novamente;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);
Está é minha experiência pessoal. Qualquer outra coisa que eu tentei me levou a esse código de erro 43.