Não tenho certeza se esta pergunta está mais relacionada ao Linux ou ao Windows. Mas vamos lá:
Usando qemu-system-x86_64 7.2.15
o Debian bookworm com kernel 6.1.0 / amd64
em um servidor com dois Xeon E5-2690v3, criei minha primeira VM executando o Windows 11. A mídia de instalação continha o Windows 11 Pro 21H2.
Esta instalação falhou inicialmente devido à ausência de um módulo TPM 2.0 no hardware da VM. Graças a este site e a outros, o problema não foi muito difícil de resolver (instale o swtpm
e seus amigos e expanda um pouco a linha de comando do Qemu). Após seguir esses passos, o Windows 11 foi instalado sem problemas. Como mencionado acima, esta era a versão 21H2.
Durante a instalação, o Qemu tinha -cpu host
... Ou seja, o Windows 11 foi instalado usando a CPU Xeon E5-2690v3.
Em seguida, a VM começou a instalar suas atualizações. Ao tentar executar a atualização de recursos do Windows 11 para a versão 23H2, ela me informou que a falha ocorreu devido à incompatibilidade da CPU com o Windows 11. Sim, é verdade: primeiro, a instalação ocorreu naquela CPU sem nenhuma reclamação, depois as atualizações falharam devido à incompatibilidade da CPU.
Como eu precisava de uma versão atualizada daquela VM, fiz vários testes com diferentes tipos de CPU no Qemu. Todos falharam, exceto um: se eu configurasse -cpu qemu64
, as atualizações eram realizadas.
Embora eu esteja feliz com isso (claro), estou realmente me perguntando por que funcionou. Estudei a lista de CPUs Intel compatíveis com o Windows 11 várias vezes, mas não vi nenhuma entrada como qemu64
essa. O mesmo acontece com a lista de CPUs AMD .
Daí a pergunta: Por que o Windows 11 funciona -cpu qemu64
mesmo que essa CPU não esteja na lista de CPUs suportadas?
Não sei dizer o que acontece no Windows, mas posso ajudar a esclarecer a confusão sobre qemu
-cpu host
e-cpu ${model}
flags. Literatura relevante: Configuração do modelo de CPU QEMU/KVM .-cpu host
passará pelo acesso aos registros de identificação da CPU e a tantos recursos quantos puderem ser virtualizados com segurança para a máquina convidada.-cpu ${model}
emulará um registrador de identificação de CPU que reflita esse modelo de CPU e repassará informações disponíveis na CPU host, quando possível, para a CPU convidada, desde que esta possua esse recurso. Isso pode implicar uma emulação mais "básica" de periféricos de hardware.Suspeito que o Windows simplesmente detecte que está sendo executado em uma VM e, então, só permita CPUs básicas que digam especificamente que são virtualizadas, a menos que você compre uma licença mais cara (e essa atualização acabou de trazer uma melhor detecção de CPUs virtualizadas). Não sei dizer, esta é realmente uma questão do Windows.
A outra opção é que a
host
opção na sua CPU não faça o tipo de passagem de TPM que o Windows 11 exige, mas a emulação de TPM no qemu64 pode fazer. Eu também não sei – esse é o Windows Insights que me falta :)