Moovv1.0.44
Moov · Guias práticos

Windows não inicia após migrar do VMware para o Proxmox: INACCESSIBLE_BOOT_DEVICE

Uma VM Windows que funcionava bem no VMware para na tela azul INACCESSIBLE_BOOT_DEVICE (código de parada 0x0000007B) na primeira inicialização no Proxmox VE, oVirt / OLVM ou qualquer hipervisor KVM quando o disco de sistema está em um controlador VirtIO e o Windows não tem um driver de armazenamento VirtIO marcado para carregar na inicialização. Os dados estão intactos. A solução é iniciar uma vez por um controlador que o Windows já conhece, instalar o driver e trocar de volta, ou injetar o driver sem iniciar o sistema.

Por que acontece

No VMware o disco de sistema fica em um controlador LSI Logic SAS ou VMware Paravirtual (PVSCSI), e o Windows só inicia no boot os drivers de armazenamento de que precisou na última vez em que rodou. No KVM os controladores rápidos são o VirtIO SCSI, que usa o driver vioscsi, e o VirtIO Block, que usa o viostor. Nenhum deles vem com o Windows. O kernel carrega, procura o volume de inicialização por um controlador para o qual não tem driver e para com 0x7B.

Instalar os drivers VirtIO enquanto a VM ainda está no VMware muitas vezes não basta. O instalador os deixa no repositório de drivers, mas sem um dispositivo VirtIO presente o Windows não marca o driver de armazenamento como de inicialização, então o primeiro boot em um controlador VirtIO pode falhar exatamente do mesmo jeito.

Há uma segunda causa, sem relação com a anterior, que leva a um beco parecido: o firmware. Uma VM que iniciava por UEFI no VMware precisa ser criada com OVMF e um disco EFI no destino, e uma de BIOS com SeaBIOS. As entradas de boot UEFI ficam no arquivo NVRAM que o VMware guarda junto da VM, e esse arquivo não viaja com o disco.

Como corrigir manualmente

Os passos estão escritos para o Proxmox VE, onde o problema é mais relatado, e valem do mesmo jeito para qualquer hipervisor KVM. Os cinco primeiros são o caminho habitual. O último é para um Windows que não inicia por nenhum controlador.

  1. 01
    Iguale o firmware

    Verifique se a VM usava BIOS ou EFI no VMware e configure o mesmo no destino: OVMF mais um disco EFI para UEFI, SeaBIOS para BIOS. No Proxmox é o campo BIOS, em Hardware.

  2. 02
    Inicie uma vez pelo SATA

    Desconecte o disco de sistema e conecte-o de novo como SATA. O Windows traz um driver AHCI próprio, então inicia. Deixe esse disco em primeiro na ordem de boot.

  3. 03
    Adicione um disco VirtIO temporário

    Com a VM desligada, defina o controlador SCSI como VirtIO SCSI, adicione nele um disco de 1 GB e monte a ISO do virtio-win como CD-ROM. O disco pequeno dá ao Windows um dispositivo VirtIO real ao qual associar o driver.

  4. 04
    Instale o driver de armazenamento VirtIO

    Inicie o Windows e execute virtio-win-gt-x64.msi a partir da ISO, ou instale só os drivers de armazenamento em um prompt de comando elevado. Troque 2k22 pela pasta da sua versão: 2k16, 2k19, 2k22 ou 2k25. Quando o disco de 1 GB aparece no Gerenciamento de Disco, o driver já está associado.

    pnputil /add-driver E:\vioscsi\2k22\amd64\vioscsi.inf /install
    pnputil /add-driver E:\viostor\2k22\amd64\viostor.inf /install
  5. 05
    Passe o disco de sistema para VirtIO SCSI

    Desligue, desconecte outra vez o disco de sistema e conecte-o como SCSI. Corrija a ordem de boot e inicie a VM. Quando ela iniciar, remova o disco temporário.

  6. 06
    Se o Windows não inicia por nenhum controlador, injete o driver sem iniciá-lo

    Inicie a ISO de instalação do Windows, escolha Reparar o computador e abra o Prompt de Comando. O drvload torna o disco visível para o ambiente de recuperação e o dism adiciona o driver ao Windows instalado. As letras de unidade mudam na recuperação: confira com diskpart e list volume antes de rodar os comandos.

    drvload E:\vioscsi\2k22\amd64\vioscsi.inf
    dism /image:C:\ /add-driver /driver:E:\vioscsi\2k22\amd64\vioscsi.inf
Moov v1.0.44

Como o Moov evita isso

O Moov prepara a VM antes da primeira inicialização no destino. A etapa de customize roda sem iniciar a VM, contra o disco montado, então não há primeiro boot pelo SATA, nem disco temporário, nem segundo desligamento.

  • Os drivers de armazenamento VirtIO, vioscsi e viostor, são injetados no Windows com a VM desligada, em arquivos e no registro, e é isso que permite deixar o disco em virtio-scsi desde o primeiro boot.
  • Os drivers de rede, balloon e serial e o QEMU Guest Agent são instalados pelo Windows nesse primeiro boot, sem nada a fazer manualmente.
  • No Windows roda o BCD fixup, e em VMs que iniciam por UEFI a partição ESP é semeada ou reparada.
  • VMs BIOS com discos MBR iniciam mesmo quando o Windows não está no disco 0.
  • O Windows Server 2016 recebe seus próprios drivers VirtIO, e você escolhe a versão do virtio-win por conexão de destino ou por VM.
  • Depois de migrar, o Moov liga a VM e espera o QEMU Guest Agent. A onda informa verificada, inconclusiva ou com falha, em vez de ficar verde só porque os discos foram copiados.

Perguntas frequentes

O que significa INACCESSIBLE_BOOT_DEVICE?
É o código de parada 0x0000007B do Windows: o kernel iniciou, mas não conseguiu chegar ao volume de onde inicia. Depois de uma troca de hipervisor a causa quase sempre é a falta do driver do controlador de armazenamento, e não um disco danificado.
Perdi meus dados?
Não. O disco está intacto e o Windows simplesmente não o enxerga pelo controlador novo. Conecte-o como SATA e ele inicia.
Posso deixar o disco em SATA?
Funciona, mas o SATA é um controlador emulado e rende menos sob carga. O VirtIO SCSI é o barramento que o Proxmox recomenda para VMs Windows.
Acontece no Windows Server 2016, 2019, 2022 e 2025?
Sim, e também no Windows 10 e 11: nenhum deles traz os drivers de armazenamento VirtIO. Só muda a pasta de onde você tira o driver: 2k16, 2k19, 2k22, 2k25, w10 ou w11.
Também acontece com outros métodos de migração?
Pode acontecer com qualquer método que copie o disco sem preparar a VM: uma importação direta a partir do hipervisor de origem, uma conversão manual do disco ou uma restauração simples. A correção é a mesma em todos.