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."