Como migrar discos virtuais do VMware para ZFS no Proxmox VE via linha de comando

      Roberto Almeida 8 min de leitura
      Como migrar discos virtuais do VMware para ZFS no Proxmox VE via linha de comando

      Guia técnico passo a passo para converter discos VMDK do ESXi para volumes ZFS (ZVol) no Proxmox usando qm importdisk. Inclui solução para drivers VirtIO.

      Compartilhar:

      A migração de infraestrutura de virtualização é um momento crítico para qualquer administrador de sistemas. Ao sair do ecossistema VMware vSphere para o Proxmox VE, a mudança mais significativa não está apenas no hypervisor, mas na camada de armazenamento.

      Enquanto o VMware tradicionalmente encapsula dados em arquivos .vmdk sobre o sistema de arquivos VMFS, o Proxmox VE brilha ao utilizar o ZFS nativo. No ZFS, os discos virtuais não são arquivos comuns, mas sim ZVols (ZFS Volumes) — dispositivos de bloco lógicos que oferecem proteção contra degradação de dados (bit rot), compressão transparente e snapshots instantâneos.

      Este guia técnico detalha o processo de conversão e importação de discos virtuais diretamente via terminal, garantindo a integridade dos dados e a otimização do armazenamento.

      Resumo em 30 segundos

      • Conversão Automática: O comando qm importdisk do Proxmox converte arquivos .vmdk diretamente para ZVols (dispositivos de bloco ZFS).
      • Diferença de Arquivos: No VMware, você deve migrar o arquivo "flat" (ex: vm-flat.vmdk), que contém os dados brutos, e não o arquivo descritor pequeno.
      • Drivers VirtIO: Sistemas Windows exigem a instalação de drivers VirtIO antes da troca do controlador de disco para evitar telas azuis de boot.

      Entendendo a topologia: De arquivo para bloco

      Antes de executar comandos, é vital entender o que acontece com seus dados. No VMware, um disco virtual é um arquivo residente em um sistema de arquivos (VMFS). No Proxmox com ZFS, o disco da VM se torna um dispositivo de bloco cru (raw block device).

      Isso elimina uma camada de abstração (o sistema de arquivos local como ext4 ou xfs), permitindo que o ZFS gerencie diretamente a alocação de blocos, cache e integridade.

      Comparativo de arquitetura de armazenamento: Arquivo VMDK sobre VMFS vs. ZVol nativo no ZFS. Figura: Comparativo de arquitetura de armazenamento: Arquivo VMDK sobre VMFS vs. ZVol nativo no ZFS.

      Tabela comparativa: VMFS vs ZFS (Contexto de VM)

      Característica VMware (VMDK em VMFS) Proxmox (ZVol em ZFS)
      Tipo de Objeto Arquivo (.vmdk) Dispositivo de Bloco (/dev/zvol/...)
      Proteção de Dados Depende do RAID de Hardware Checksums e Auto-cura (Self-healing)
      Snapshots Cadeia de arquivos delta (pode degradar performance) Ponteiros de metadados (custo zero de performance)
      Compressão Geralmente requer All-Flash/vSAN LZ4/ZSTD nativo em qualquer disco
      Cache Cache do controlador RAID ARC (Adaptive Replacement Cache) na RAM

      Passo 1: Preparação e transferência dos dados

      Para importar o disco, o Proxmox precisa ter acesso ao arquivo .vmdk. A maneira mais segura e universal é copiar o arquivo do host ESXi para o host Proxmox via SSH.

      Habilitando SSH no ESXi

      Por padrão, o SSH vem desabilitado no ESXi.

      1. Acesse a interface web do ESXi.

      2. Vá em Host > Actions > Services > Enable Secure Shell (SSH).

      Identificando o arquivo correto

      No diretório de armazenamento do VMware, cada disco virtual possui dois arquivos principais:

      1. vmname.vmdk: Um arquivo de texto pequeno (descritor XML). Não copie este.

      2. vmname-flat.vmdk: O arquivo grande que contém os dados reais. Este é o alvo.

      ⚠️ Perigo: Tentar importar o arquivo descritor pequeno resultará em um disco de tamanho incorreto ou erro de leitura. Sempre busque o arquivo com o sufixo -flat.vmdk.

      Transferindo o disco (SCP)

      No terminal do seu servidor Proxmox, execute o comando abaixo para puxar o arquivo. Recomendamos salvar em um local temporário com espaço suficiente (não no armazenamento ZFS final ainda).

      # Crie um diretório temporário
      mkdir -p /mnt/pve/temp_import
      
      # Copie o arquivo flat do ESXi (substitua IP e caminhos)
      scp [email protected]:/vmfs/volumes/datastore1/MinhaVM/MinhaVM-flat.vmdk /mnt/pve/temp_import/
      

      Transferência do arquivo flat via SCP entre os hypervisors. Figura: Transferência do arquivo flat via SCP entre os hypervisors.


      Passo 2: Criando a VM esqueleto no Proxmox

      Antes de importar o disco, precisamos de uma "casca" (uma VM vazia) para recebê-lo.

      1. No Proxmox, clique em Create VM.

      2. Defina o VM ID (ex: 105).

      3. Na aba OS, selecione o tipo correto (Linux ou Windows).

      4. Na aba Disks, remova o disco padrão que o assistente cria. Queremos a VM sem discos por enquanto.

      5. Finalize a criação.


      Passo 3: Importando o disco para ZFS (qm importdisk)

      Agora ocorre a mágica. O comando qm importdisk lê o arquivo .vmdk, converte o fluxo de dados e escreve diretamente em um novo ZVol dentro do seu pool ZFS.

      Sintaxe: qm importdisk <vmid> <caminho-origem> <storage-destino>

      Execute no terminal do Proxmox:

      # Importando para o storage chamado 'local-zfs'
      qm importdisk 105 /mnt/pve/temp_import/MinhaVM-flat.vmdk local-zfs
      

      O que acontece nos bastidores:

      • O Proxmox cria um ZVol do tamanho exato do disco original.

      • Os dados são lidos sequencialmente do arquivo flat.

      • Se a compressão LZ4 estiver ativa no pool ZFS (padrão recomendado), os dados já são gravados comprimidos, economizando espaço imediatamente.

      💡 Dica Pro: Se você possui uma rede de 10Gbps ou superior entre os servidores, é possível montar o datastore do ESXi via NFS no Proxmox e importar diretamente, sem a cópia intermediária do Passo 1. Isso economiza tempo e gravações no SSD.


      Passo 4: Anexando e configurando o disco

      Após a importação, o disco não é anexado automaticamente como bootável. Ele aparecerá como um "Unused Disk" (Disco não utilizado) na configuração da VM.

      1. Acesse o painel do Proxmox.

      2. Selecione a VM 105 > Hardware.

      3. Localize o item Unused Disk 0.

      4. Clique duas vezes nele (ou clique em Edit).

      Escolhendo o Barramento (Bus/Device)

      Aqui reside a decisão mais importante para a performance:

      • Para Linux: Escolha VirtIO Block. É o padrão mais rápido e nativo do KVM.

      • Para Windows (Migração): Escolha SATA ou IDE inicialmente.

        • Por que? O Windows vindo do VMware não tem os drivers VirtIO instalados. Se você selecionar VirtIO agora, o Windows não encontrará o disco de boot e dará Tela Azul (INACCESSIBLE_BOOT_DEVICE).

      Seleção do barramento de disco no Proxmox: Escolha crítica para compatibilidade de drivers. Figura: Seleção do barramento de disco no Proxmox: Escolha crítica para compatibilidade de drivers.

      Após adicionar o disco:

      1. Vá em Options > Boot Order.

      2. Habilite o novo disco e mova-o para o topo da lista.


      Passo 5: Otimização do ZVol (Ajustes Finos)

      Como estamos usando ZFS, podemos verificar se o novo volume está otimizado.

      Liste os volumes ZFS associados à VM:

      zfs list -r local-zfs/vm-105-disk-0
      

      Verifique a compressão e o tamanho do bloco:

      zfs get compression,volblocksize local-zfs/vm-105-disk-0
      

      Saída esperada:

      NAME                      PROPERTY      VALUE     SOURCE
      local-zfs/vm-105-disk-0   compression   on        inherited from local-zfs
      local-zfs/vm-105-disk-0   volblocksize  8K        default
      

      Se a compressão estiver off, você pode ativá-la (afetará apenas novos dados gravados):

      zfs set compression=lz4 local-zfs/vm-105-disk-0
      

      Passo 6: Pós-Migração (Apenas Windows)

      Se você migrou uma VM Windows e usou SATA/IDE para garantir o boot, agora é hora de mudar para VirtIO para ganhar performance.

      1. Baixe a ISO de drivers VirtIO-win e anexe ao CD-ROM da VM.

      2. Adicione um segundo disco temporário à VM (1GB é suficiente), mas escolha o barramento VirtIO SCSI ou VirtIO Block.

      3. Inicie o Windows. Ele detectará o novo hardware (o disco de 1GB) e pedirá drivers.

      4. Instale os drivers (viostor/vioscsi) a partir do CD.

      5. Desligue a VM.

      6. No Proxmox, desanexe e remova o disco temporário de 1GB.

      7. Desanexe o disco principal (SATA/IDE) e anexe-o novamente, agora escolhendo VirtIO.

      8. Ligue a VM. O Windows agora bootará com performance máxima.

      O processo de troca de drivers no Windows para habilitar a performance do VirtIO. Figura: O processo de troca de drivers no Windows para habilitar a performance do VirtIO.


      Considerações finais

      A migração de VMDK para ZVol é mais do que uma simples cópia de arquivos; é uma atualização de arquitetura de armazenamento. Ao mover seus dados para ZFS, você ganha acesso a recursos de nível empresarial — como replicação assíncrona (zfs send/recv) para Disaster Recovery — sem custo adicional de licença.

      Recomendo fortemente que, após validar a migração, você configure uma rotina de Snapshots Automáticos no Proxmox. Diferente do VMware, onde snapshots antigos degradam a performance, no ZFS eles são praticamente gratuitos em termos de I/O, permitindo uma estratégia de backup muito mais agressiva e granular.


      Perguntas Frequentes (FAQ)

      O qm importdisk converte automaticamente para ZVol? Sim. Quando o storage de destino é um pool ZFS, o comando detecta isso e converte o fluxo de dados do arquivo VMDK (baseado em arquivo) diretamente para um ZVol (dispositivo de bloco), eliminando a necessidade de conversão manual prévia com ferramentas como qemu-img.
      Preciso desligar a VM no VMware antes de copiar? Sim, absolutamente. Copiar um arquivo VMDK (especialmente o -flat.vmdk) enquanto a VM está ligada e gravando dados resulta em inconsistência severa e corrupção do sistema de arquivos no destino. A VM deve estar em estado "Powered Off".
      Por que meu Windows dá tela azul (0x0000007B) após a migração? Esse erro (INACCESSIBLE_BOOT_DEVICE) ocorre porque o Windows não possui os drivers VirtIO SCSI/Block instalados e ativos no momento do boot. A solução é importar o disco inicialmente como SATA ou IDE, instalar os drivers VirtIO dentro do Windows, e só então alterar a interface do disco para VirtIO.
      #Proxmox VE #ZFS #VMware ESXi #Migração VMDK #qm importdisk #Storage ZVol #VirtIO Drivers
      Roberto Almeida
      Assinatura Técnica

      Roberto Almeida

      Auditor de Compliance (LGPD/GDPR)

      "Especialista em mitigação de riscos regulatórios e governança de dados. Meu foco é blindar infraestruturas corporativas contra sanções legais, garantindo a estrita conformidade com a LGPD e GDPR."