Windows 10 no KVM: altere o disco de inicialização para o Virtio


25

Instalei uma máquina virtual do Windows 10 usando um disco IDE e agora gostaria de alterar o disco para usar o driver Virtio.

Para outras versões do Windows, a abordagem nesta pergunta parece ser suficiente - Como migrar uma VM IDE para uma VM virtio?

No entanto, com o Windows 10, isso leva a um INACCESSIBLE_BOOT_DEVICEproblema.

Estou ciente de que a abordagem preferida é usar o dispositivo Virtio desde o início e instalar o driver virtio apropriado quando solicitado. Infelizmente, eu estava tendo alguns problemas separados ao alterar o CD no KVM (também não consegui que dois dispositivos CDROM funcionassem).

Existe alguma maneira de corrigir esse problema sem reinstalar?

Problema semelhante aqui - https://me.m01.eu/blog/2015/03/windows-10-kvm-and-iscsi/#comment-36090


+1. Eu não conseguia descobrir isso sozinho. Após várias soluções alternativas para versões anteriores do Windows, tentei instalar o driver VirtIO na VM do Windows depois de conectar um dispositivo de bloco VirtIO, mas ainda havia uma INACCESSIBLE_BOOT_DEVICEtela azul. Acabei reinstalando em um dispositivo de inicialização VirtIO.
Deltik 27/03

Por ser preguiçoso, vou postá-lo como um comentário para você verificar: Adicione um disco adicional, com virtio “controller”. Instale o driver quando o Windows solicitar. Não há necessidade de criar partições ou qualquer coisa. Em seguida, mude o disco de inicialização para virtio. Como uma instância do driver do controlador está agora instalada (muito importante), ela deve funcionar.
31716 Daniel B

@DanielB: Foi exatamente o que eu fiz. Parece que a sua sugestão funciona para versões anteriores do Windows, mas não o Windows 10.
Deltik

Hum, tudo bem. Bem, acho que tenho a melhor maneira de não resolver o seu problema (risos): basta modificar a ISO do Windows e incluir os drivers. Lembre-se de que ele precisa permanecer inicializável. Dessa forma, você pode (espero) instalar diretamente no virtio.
Daniel B

11
@DanielB: O driver VirtIO pode ser carregado no processo de instalação com um disco de driver separado. Se o Windows 10 estiver instalado com o driver VirtIO, não há problema. Apenas as instruções existentes na Internet para alternar o Windows do IDE para o VirtIO não funcionam nas máquinas virtuais KVM do Windows 10.
Deltik 03/04

Respostas:


24

Todas as respostas estão corretas, mas talvez você precise executar algumas etapas adicionais depois de instalar os drivers virtio. Aqui estão os passos que segui:

  1. Abra um prompt de comando elevado e configure a VM para inicializar no modo de segurança, digitando

    bcdedit / set {current} safeboot mínimo

  2. desligue a VM e altere o tipo de dispositivo de inicialização para virtio.

  3. inicialize a VM. Ele entrará no modo de segurança.

    Nota: No modo de segurança, todos os drivers de inicialização serão ativados e carregados, incluindo o driver virtio. Como agora existe um miniport instalado para usá-lo, o kernel agora fará parte dos drivers a serem carregados na inicialização e não o desativará novamente.

  4. na VM inicializada, redefina as configurações do bcdedit para permitir que a máquina inicialize no modo Normal digitando (no prompt de comando elevado novamente):

    bcdedit / deletevalue {atual} inicialização segura

  5. Feito.


11
Fantástico! Esta foi a parte que faltava para mim. Eu costumava bcdedit /set safeboot minimalomitir o {current}porque não tinha certeza do que deveria entrar lá.
Charles Green

2
@CharlesGreen {current}é literal, você digita como está.
Marc.2377

Problema se você tiver login por PIN, pois o login por senha pode exigir acesso à rede. Estou reinstalando o Windows como resultado. answers.microsoft.com/en-us/windows/forum/windows_10-security/…
Andrew Olney,

Eu tentei com a rede safeboot bcdedit / set {current} na etapa um para evitar o problema de logon, também criei um usuário local para ser mais seguro e realmente não acho que o problema se aplique a mim, mas como a máquina está conectado a um domínio e não tenho controle de tudo o que queria para garantir que não fizesse nada errado. E o parâmetro de rede pelo menos não estragou o processo.
HackerBaloo

como você faz 1), ou seja, o prompt elevado?
Frederick Nord

16

Uma resposta bastante simples é fornecida - e pode funcionar em muitos casos, junto com dicas de outras opções. Se (como eu) você não conseguir mudar para o IDE e forçado a usar o VirtIO, a seguinte abordagem alternativa poderá funcionar:

  1. Adicione o ISO do DVD / CD do Windows 10 e o ISO do driver virtio à VM.
  2. Inicialize o DVD / CD do Windows 10 e entre em um prompt de comando na opção Modo de reparo.
  3. Carregue o driver via CLI, por exemplo drvload e:\viostor\w10\amd64\viostor.inf
    • No meu caso, e: foi onde o virtio install ISO foi atribuído.
    • Depois de carregar o driver f: foi onde a instalação do Windows foi montada.
  4. Use o comando DISM para injetar o driver do controlador de armazenamento
    • Por exemplo dism /image:f:\ /add-driver /driver:e:\viostor\w10\amd64\viostor.inf
    • Como acima, altere as atribuições de letra de unidade de acordo com o seu próprio ambiente.

Evita a necessidade de mexer com a criação de janelas / CDs especiais de inicialização e 'correções'; as janelas reais instalam a imagem rapidamente.

Observe que, nesse caso de nicho, sugiro evitar o reparo da inicialização (que falhou para mim). Não parecia saber como incluir o vistor.inf depois de carregá-lo e, se você tentar, tenha cuidado para evitar a ânsia de DVD do Windows 10 em restaurar ou reinstalar tudo ...

Abordagem de crédito pela DISM: usando o dism para adicionar drivers


11
Alternativa para 4: Clique com o botão direito do mouse no arquivo inf -> Instalar.
rbs

Além disso, atente para o Windows Update quebrando isso. De acordo com uma publicação no reddit, "a atualização apagou meus drivers do VirtIO": reddit.com/r/VFIO/comments/6b06y5/… . Isso pode acontecer no caso de canto quando você executar o seu Windows instalar tanto como um dual boot e uma VM e aplicar a atualização quando em hardware nativo ...
JPvRiel

11
Isso, mais a resposta abaixo. Eu tive que fazer a inicialização no Modo de Segurança (bcdedit / set {current} safeboot minimal) e depois remover a inicialização do Modo de Segurança (bcdedit / deletevalue {current} safeboot) e reiniciar. Depois disso, ele trabalhou com o Windows Server 2016 Essentials.
precisa saber é o seguinte

10

Os passos a seguir em geral são:

  1. Instale os drivers do VirtIO na VM
  2. Defina o disco do sistema da VM para usar o VirtIO
  3. Se a VM não inicializar, execute o Reparo de Inicialização ou mesmo Reparar Instalação

O procedimento em detalhes é:

  1. Retorne o disco de inicialização ao IDE.
  2. Verifique se a VM do Windows está desligada.
  3. Faça o download do ISO dos drivers VirtIO aqui .
  4. Monte-o na unidade de CD da VM.
  5. Adicione um dispositivo de armazenamento que seja do tipo VirtIO. A alocação de tamanho não importa, pois você a está usando para instalar os drivers.
  6. Inicie a VM do Windows. Ele tentará instalar os drivers. Caso contrário, abra o Gerenciador de dispositivos e você verá o dispositivo SCSI listado com o ícone de ponto de exclamação ao lado. Você pode optar por atualizar o driver e apontar para o diretório apropriado do ISO montado. Uma vez instalado, não reinicie, mas desligue a máquina.
  7. Nas configurações do virt-manager para Windows, altere o tipo de armazenamento de IDE para VirtIO.
  8. Você pode remover o dispositivo de armazenamento que você criou anteriormente. Não é mais necessário.
  9. Inicie o Windows, ele deve inicializar e instalar os drivers SCSI. Você precisará reiniciar depois disso.
  10. Se a VM não inicializar, mas os drivers estiverem instalados, você pode tentar:

    1. Reparo de inicialização que pode corrigir certos problemas do sistema que podem impedir a inicialização do Windows.
    2. A última solução: repare a instalação durante a inicialização a partir do Windows 10 ISO. Isso manterá todos os aplicativos e configurações do usuário, apenas atualizando o Windows e a inicialização. Use uma ISO recente do Windows 10.

Se a última etapa for infelizmente necessária, mais uma dificuldade que poderá ser encontrada é se o CD de inicialização do Windows não conseguir entender o disco do VirtIO porque esses drivers não foram incluídos pela Microsoft. Nesse caso, é necessário criar um CD / USB de inicialização personalizado que contenha esses drivers, mas certifique-se de iniciar a partir de uma ISO do Windows que esteja no mesmo nível da instalação, obtendo a mais recente (atualmente 1511).

Aqui estão alguns tutoriais sobre como instalar drivers de fluxo contínuo no Windows:


Esta resposta funcionaria (e funciona para outras versões no Windows), exceto que na etapa 9, quando você tenta inicializar, há um erro INACCESSIBLE_BOOT_DEVICE (era aqui que eu estava quando postei a pergunta). Um reparo de inicialização (10.1) não funciona e a etapa 10.2 não é realmente possível. Uma instalação de reparo só pode ser feita inicializando o sistema primeiro, sem o CD, e depois executando setup.exeo CD. É isso que o link na pergunta descreve e, até onde sei, não há outra maneira de fazê-lo.
Graeme

Exatamente que outras informações devo fornecer? Já lhe disse repetidamente que a opção não existe. O problema aqui é que você insiste continuamente que sim. Se for o caso de existirem "dezenas de outros em vários artigos encontrados na Internet", faça referência a um. Vincule um artigo que descreve como inicializar a partir do CD e iniciar uma instalação de reparo - sem primeiro inicializar o sistema instalado e executar setup.exeno CD. Vincule um artigo de uma fonte confiável que prove que você não está mentindo completamente, e eu peço desculpas e lhe darei seu precioso voto positivo.
Graeme

Veja, por exemplo, este vídeo sobre como executar o reparo de inicialização no Windows 10 na mídia de instalação. Caso contrário, tente usar o prompt de comando . Como eu disse acima, você pode precisar de uma ISO integrada - não faço idéia se a instalação do WIn10 contém os drivers VirtIO.
harrymc

Ou você pode adaptar o método drvload para adicionar os drivers do VirtIO à imagem de instalação inicializada do Windows PE.
harrymc

2
Embora a resposta acima pareça boa e pareça simples, infelizmente com minha VM usando o pc-q35-2.5tipo / emulação de máquina, não é possível adicionar um controlador IDE.
precisa saber é o seguinte

5

a resposta da harrymc funciona bem para mim.

os seguintes passos que segui:

  1. Instale o driver virtio no windows
  2. Adicione um disco virtio "fictício" adicional. Reinicie e verifique se o "manequim" funciona.
  3. Se a Etapa 2 funcionar, mude o disco de inicialização para virtio.
  4. Reiniciar
  5. Remova o disco virtio "fictício" adicional
  6. ...

Por favor, não adicione "obrigado" como respostas. Invista algum tempo no site e você obterá privilégios suficientes para votar de forma positiva as respostas que você gosta, que é a maneira do Superusuário de dizer obrigado.
DavidPostill

11
Esta é uma resposta subestimada - no Proxmox, o Windows 10 teve problemas para inicializar, mesmo após a instalação de todos os drivers. Eu tive que criar um pequeno disco de 1 GB como um dispositivo de bloco VirtIO, iniciar a VM, verificar se ela estava aparecendo corretamente e, em seguida, desligar + alterar a unidade principal para VirtIO. O Windows 10 não detectou corretamente o driver do disco rígido, então tive que persuadi-lo a carregá-lo na inicialização antes de fazer a troca.
Albert H

3

Infelizmente, é possível ter o driver perfeitamente instalado e AINDA obter "Dispositivo de inicialização inacessível". O motivo é um pouco chocante (eu acho): uma instalação do Win 10 "lembra" os drivers necessários quando foi instalado pela primeira vez e, por padrão, NÃO carrega outros drivers de armazenamento no momento da inicialização. Parece que isso é feito para "piratear" - dificulta a execução da "mesma" instalação em hardware diferente. Há uma excelente documentação sobre esse "recurso" neste post nos fóruns do gentoo. A essência é a seguinte:

Os drivers direcionados para o carregamento proibido na inicialização podem ser determinados da seguinte maneira: Na chave do registro Computer \ HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services, há uma subchave para cada driver conhecido na instalação. O nome dessa subchave é apenas o nome do driver. Dentro de cada subchave de driver, haverá uma subchave "STARTOVERRIDE" para impedir que o driver seja carregado na inicialização. Em particular, na subchave STARTOVERRIDE, existe um parâmetro cujo nome é "0". Se o valor desse parâmetro for "3", ele não será carregado no momento da inicialização. Definir esse valor como 0 substituirá o comportamento.

Eu mesmo vou a Computer \ HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services e procuro "STARTOVERRIDE". Cada vez que o encontro, se houver um nome chamado "0" com o valor "3", altero para "0". Isso parece ser um exagero, você só precisa alterar a unidade que precisa carregar. No meu caso, existem vários deles, e eu nunca me lembro de qual, então apenas faço uma "pesquisa F3" dentro dessa seção de 'serviços'.

E uma dica final que não é necessária para o armazenamento atual, assinado e virtio, mas pode ser para outra pessoa que estiver lendo isso se quiser usar um driver mais experimental que ainda não esteja assinado: descobri que MESMO depois de fazer o acima truque, eu também precisava inicializar na tela de opções avançadas e escolher F7 ("desativar verificação de assinatura de driver"). Irritantemente, não foi suficiente definir o sinalizador bcd para desativar a verificação do driver, porque o driver precisa carregar antes que a máquina leia o BCD e descubra que não precisa verificar a assinatura.

Em suma, não é a hora mais brilhante da Microsoft. Você realmente precisa odiar seus usuários se preferir fornecer aos usuários legítimos uma tela azul artificial inventada do que permitir que as pessoas substituam (digamos) um disco SATA por um disco NVMe e façam com que "funcione".


Obrigado por fornecer tantos detalhes, esta é a solução mais viável! Um regfile para importar e resolver tudo.
Florian Heigl
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.