Backup, Replicação e Conversão para VMware vSphere/ESXi no Bacula Community
Versão 1.4.1 — Abril de 2026 Autor: Heitor Faria Copyright © 2026 Heitor Faria — Todos os Direitos Reservados
💰 Oferta Especial
Traga sua cotação ou proposta de renovação do Bacula Enterprise, Veeam, Commvault ou Netbackup. Oferecemos pelo menos 50% de desconto, com muito mais recursos.
📧 heitor@opentechs.lat | 📱 +1 786 726-1749 | +55 61 98268-4220 (WhatsApp)
Sumário
- Sumário Executivo
- Definição do Problema e Contexto de Mercado
- Casos de Uso
- Arquitetura
- Recursos — Backup
- Recursos — Replicação e Recuperação de Desastres
- Recursos — Conversão entre Hipervisores
- Arquitetura de Segurança
- Guia de Instalação
- Referência de Configuração
- Exemplos de Configuração de Backup
- Exemplos de Configuração de Replicação
- Manual do Usuário e Operações do Dia a Dia
- Dimensionamento e Requisitos
- Matriz de Compatibilidade
- Resultados de Testes
- Comparativo com Soluções Corporativas
- Solução de Problemas
- Licenciamento e Contato
1. Sumário Executivo
PodHeitor vSphere BRC é um plugin production-ready para o Bacula Community Edition que oferece recursos enterprise-grade de backup, replicação e conversão entre hipervisores para VMware vSphere — a uma fração do custo das soluções comerciais.
Diferenciais
- Três produtos em um: Backup + Replicação + Conversão em um único plugin
- Nativo para Bacula Community: Não exige licença Enterprise
- Replicação baseada em CBT: RPO quase em tempo real com consumo mínimo de banda
- DR com 10 modos: Gerenciamento completo do ciclo de vida de failover
- Restauração entre hipervisores: Conversão vSphere ↔ Hyper-V ↔ Proxmox/KVM
- Protocolo DR com TLS: Segurança production-ready
- Escrito em Rust: Segurança de memória, alto desempenho, FFI sem overhead com VDDK
Destaques da Versão 1.4.1
Correções completas de corretude na restauração — validadas contra ESXi 8.0.3 + Bacula 15.0.3 (job 6442 restaurou 2.147 GB / 4 arquivos em 6 s, 0 erros no FD; a VM Alpine 3.21 recriada inicializou corretamente):
| Categoria | Correção |
|---|---|
| 🐛 Backup | Caminhos de arquivo não são mais duplicados (@vsphere/@vsphere/disk-2000.vmdk → @vsphere/disk-2000.vmdk). |
| 🐛 Restauração | O prefixo Where= enviado pelo Bacula agora é capturado corretamente: um valor não vazio em Where direciona para restauração no sistema de arquivos; vazio// prossegue para restauração no hipervisor. |
| 🐛 Restauração | Entradas de diretório não encerram mais o loop de comandos PTCOMM externo com um EOD espúrio; diretórios usam um writer no-op. |
Destaques da Versão 1.4.0
| Categoria | Recurso |
|---|---|
| ⚖️ Licenciamento | O plugin .so é agora uma cdylib pure-Rust — sem código-fonte AGPLv3 do Bacula vinculado. A ABI C é implementada por meio do crate bacula-fd-abi (reimplementado de forma independente a partir da especificação pública). |
| 🛠 Build | A compilação não exige mais a árvore de fontes do Bacula. cargo build --release -p plugin-vsphere a partir do workspace PodHeitor Rust cdylib gera o .so distribuído. |
| 🧱 Arquitetura | Barreira de licença preservada: cdylib em processo, backend Rust fora de processo via PTCOMM (isolamento de falhas + fronteira de licenciamento limpa). |
Destaques da Versão 1.3.0
| Categoria | Recurso |
|---|---|
| 🔐 Segurança | Criptografia TLS para o protocolo DR (rustls) |
| 🔐 Segurança | Autenticação de token em tempo constante |
| 🌐 Rede | Mapeamento automático de rede no failover (ReconfigVM SOAP) |
| 🌐 Rede | Reconfiguração automática de IP no failover (CustomizeVM SOAP) |
| 📸 Recuperação | Pontos de restore baseados em snapshot na VM réplica |
| 🔧 Operações | Encerramento gracioso via SIGTERM no modo daemon |
2. Definição do Problema e Contexto de Mercado
O Desafio
Organizações que utilizam VMware vSphere enfrentam desafios críticos de proteção de dados:
- Custo: O plugin vSphere do Bacula Enterprise custa $$$; Veeam, Commvault e Netbackup custam ainda mais
- Aprisionamento de Fornecedor: Soluções de backup corporativas prendem os clientes em renovações perpétuas caras
- Lacunas de Recursos: O Bacula Community não possui backup nativo para vSphere — apenas agentes em nível de sistema de arquivos
- Complexidade de DR: Configurar replicação e failover normalmente exige produtos separados
- Multi-Hipervisor: A migração entre vSphere, Hyper-V e KVM requer conversão manual
A Solução
O PodHeitor vSphere BRC elimina esses desafios ao oferecer:
- Zero licenciamento Enterprise — funciona com o Bacula Community gratuito
- Plugin tudo-em-um — backup, replicação e conversão unificados
- Integração nativa com Bacula — usa configuração padrão de FileSet/Job/Schedule
- DR automatizado — failover com um clique, com remapeamento de rede e reconfiguração de IP
- Padrões abertos — conversão VMDK, VHDX e QCOW2 entre hipervisores
3. Casos de Uso
Caso de Uso 1: Backup de VM VMware
Cenário: A organização precisa de backup de VM em nível de imagem com CBT para incrementais eficientes.
Job: Full backup Sunday, Incremental daily
RPO: 24 hours (backup) / minutes (replication)
RTO: Minutes (instant restore) to hours (full restore)
Caso de Uso 2: Recuperação de Desastres
Cenário: Falha no site de produção — necessidade de inicializar VMs no site de DR imediatamente.
Normal operation: CBT push every 5 minutes
Planned failover: Sync → graceful shutdown → boot replica
Unplanned failover: Boot replica immediately from last sync point
Failback: Reverse-replicate once production is restored
Caso de Uso 3: Migração entre Hipervisores
Cenário: Migração do VMware para Proxmox/KVM devido a mudanças de licenciamento da Broadcom.
Backup: VMware VM → Bacula storage
Restore: Bacula → Proxmox (automatic VMDK→QCOW2 conversion)
Caso de Uso 4: Clonagem de Ambiente de Teste/Dev
Cenário: Clonar VMs de produção para uma rede de testes isolada.
Mode: failover-test (non-destructive)
Network: Isolated test VLAN
Result: Production unaffected, test VM available
Caso de Uso 5: Conformidade e Backup Multi-Site
Cenário: Requisito regulatório para cópias de backup fora do site principal.
Primary: Local backup to disk/tape
Secondary: CBT replication to remote DR site
Tertiary: Cross-restore to different hypervisor at third site
4. Arquitetura
Visão Geral dos Componentes
┌─────────────────────────────────────────────────────────────┐
│ Bacula Director │
│ (Job scheduling, catalog, policy management) │
└─────────────────┬───────────────────────────────────────────┘
│
┌─────────────────▼───────────────────────────────────────────┐
│ Bacula File Daemon (FD) │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ podheitor-vsphere-fd.so (Rust cdylib, v1.4.1+) │ │
│ │ • Loaded by Bacula FD via dlopen │ │
│ │ • Implements Bacula FD plugin C ABI through │ │
│ │ independently-reimplemented bacula-fd-abi crate │ │
│ │ • No Bacula AGPLv3 source linked │ │
│ │ • Spawns Rust backend via PTCOMM pipe │ │
│ └──────────────────┬───────────────────────────────────┘ │
│ │ stdin/stdout pipe │
│ ┌──────────────────▼───────────────────────────────────┐ │
│ │ podheitor-vsphere-backend (Rust binary) │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ Backup Module │ Restore Module │ │ │
│ │ │ • VADP workflow │ • Full VM restore │ │ │
│ │ │ • CBT tracking │ • Single disk restore │ │ │
│ │ │ • Snapshot lifecycle │ • Cross-restore (VHDX) │ │ │
│ │ ├─────────────────────────────────────────────────┤ │ │
│ │ │ Replication Module (1500+ lines) │ │ │
│ │ │ • CBT push (async replication) │ │ │
│ │ │ • Seed (initial full sync) │ │ │
│ │ │ • 10-mode failover lifecycle │ │ │
│ │ │ • TLS-encrypted DR protocol │ │ │
│ │ │ • DR receiver daemon │ │ │
│ │ ├─────────────────────────────────────────────────┤ │ │
│ │ │ vSphere API Client │ │ │
│ │ │ • SOAP/XML over HTTPS │ │ │
│ │ │ • Property collector │ │ │
│ │ │ • Task manager │ │ │
│ │ │ • ReconfigVM (net_map) │ │ │
│ │ │ • CustomizeVM (Re-IP) │ │ │
│ │ ├─────────────────────────────────────────────────┤ │ │
│ │ │ VDDK Integration (FFI) │ │ │
│ │ │ • VixDiskLib_Open/Read/Write │ │ │
│ │ │ • QueryAllocatedBlocks │ │ │
│ │ │ • Transport: NBD, NBDSSL, HotAdd, SAN │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────────┐
│ VMware vSphere API │ │ DR Receiver (remote host) │
│ (SOAP over HTTPS) │ │ TLS-encrypted TCP │
│ ESXi / vCenter │ │ PSK authentication │
└─────────────────────────┘ │ Snapshot management │
│ Delta application │
└─────────────────────────────┘
Fluxo de Dados — Backup
1. Bacula FD invokes plugin
2. Plugin creates VM snapshot (quiesced)
3. VDDK opens VMDK via chosen transport
4. CBT provides changed block list (incremental)
5. Blocks streamed to Bacula SD via FD pipe
6. Snapshot deleted after backup
7. Job metadata stored in Bacula catalog
Fluxo de Dados — Replicação CBT
1. Plugin queries CBT delta since last sync
2. Changed blocks read via VDDK
3. Delta sent to DR receiver via TLS-encrypted TCP
4. Receiver creates restore point snapshot on replica
5. Receiver writes delta to replica VMDK via VDDK
6. Replication state persisted to /var/lib/podheitor/replication/
Fluxo de Dados — Failover
Planned Failover:
1. Final CBT sync (catch up)
2. Shutdown source VM
3. Apply net_map (ReconfigVM)
4. Apply Re-IP (CustomizeVM)
5. Power on replica
6. Update replication state
Unplanned Failover:
1. Apply net_map on replica
2. Apply Re-IP on replica
3. Power on replica immediately
4. (no final sync — uses last available restore point)
5. Recursos — Backup
Backup Full
- Backup de VM em nível de imagem via VMware VADP API
- Snapshots com quiesce para consistência de aplicação
- Suporte a múltiplos discos (todos os discos virtuais capturados)
- Preservação de metadados (configuração da VM, versão de hardware, sistema operacional convidado)
Backup Incremental
- Changed Block Tracking (CBT) para backups incrementais eficientes
- Somente os blocos modificados são transferidos — tipicamente 1 a 5% do disco total
- Redução expressiva da janela de backup e do uso de armazenamento
Backup Diferencial
- Captura todas as alterações desde o último backup Full
- Útil em ambientes com alta taxa de modificação
Modos de Transporte
| Modo | Descrição | Caso de Uso |
|---|---|---|
| NBD | Network Block Device (sem criptografia) | Ambientes de laboratório/teste |
| NBDSSL | NBD com criptografia SSL | Uso padrão em produção |
| HotAdd | Anexa VMDK diretamente à VM do FD | FD em execução como VM no mesmo ESXi |
| SAN | Acesso direto via SAN ao LUN do VMDK | Backup sem LAN, máximo desempenho |
Suporte a Múltiplas VMs
- Backup de múltiplas VMs com Jobs separados
- Filtros de inclusão/exclusão por host para operações em massa
- Inclusão/exclusão de disco para backup seletivo
6. Recursos — Replicação e Recuperação de Desastres
Replicação Baseada em CBT
- Replicação assíncrona push usando VMware CBT
- RPO medido em minutos (intervalo de push configurável)
- Eficiente em banda — apenas blocos alterados transmitidos
- Limitação de banda opcional (
max_bandwidth_mbps)
Ciclo de Vida DR com 10 Modos
| # | Modo | Descrição | Destrutivo | Impacto na Origem |
|---|---|---|---|---|
| 1 | replication-status |
Consulta o estado de replicação e a última sincronização | Não | Nenhum |
| 2 | cbt-push |
Envia deltas CBT para a réplica | Não | Nenhum |
| 3 | seed |
Sincronização completa inicial do disco (cria réplica) | Não | Nenhum |
| 4 | failover-test |
Inicializa réplica em rede isolada | Não | Nenhum |
| 5 | failover-undo |
Desliga réplica de teste | Não | Nenhum |
| 6 | failover-planned |
Sincroniza → desliga origem → inicializa réplica | Sim | Desligamento |
| 7 | failover-unplanned |
Inicializa réplica imediatamente | Não | Nenhum |
| 8 | failover-permanent |
Converte réplica em produção | Sim | N/A |
| 9 | failback |
Replica em sentido inverso da réplica para a origem | Sim | Restaurado |
| 10 | reprotect |
Reestabelece replicação no sentido direto | Não | Nenhum |
Mapeamento de Rede (net_map)
- Reconfigura automaticamente as NICs da VM no failover
- Mapeia redes de origem para redes de destino no site de DR
- Utiliza a API SOAP ReconfigVM_Task do VMware
- Aplicado em: failover planejado, não planejado e permanente
Reconfiguração de IP (Re-IP)
- Define automaticamente endereço IP, máscara, gateway e DNS no failover
- Utiliza a API SOAP CustomizeVM_Task do VMware (Customização do SO Convidado)
- Formato:
"nic_index:ip/prefix:gateway:dns1,dns2" - Requer VMware Tools no sistema operacional convidado
Pontos de Restore
- Snapshot criado na réplica antes de cada aplicação de delta
- Nomeado
PodHeitor_RP_<timestamp> - Retenção configurável (
dr_restore_points, padrão: 5) - Permite recuperação em momento específico a partir da réplica
Daemon Receptor de DR
- Modo daemon persistente para recebimento de dados replicados
- Escuta em porta TCP configurável (padrão: 9102)
- Autenticação baseada em PSK com comparação em tempo constante
- Handler de encerramento gracioso via SIGTERM
- Criptografia TLS (opcional, recomendada para produção)
7. Recursos — Conversão entre Hipervisores
Conversões Suportadas
| Origem | Destino | Conversão de Formato |
|---|---|---|
| VMware vSphere (VMDK) | Hyper-V (VHDX) | Automática |
| VMware vSphere (VMDK) | Proxmox/KVM (QCOW2) | Automática |
| Hyper-V (VHDX) | VMware vSphere (VMDK) | Automática |
| Hyper-V (VHDX) | Proxmox/KVM (QCOW2) | Automática |
| Proxmox/KVM (QCOW2) | VMware vSphere (VMDK) | Automática |
Como Funciona
- O backup captura a VM em nível de imagem (formato nativo VMDK)
- O Bacula armazena os dados de backup em seu armazenamento padrão
- Na restauração, o plugin de destino detecta o hipervisor de origem
- Conversão automática de formato (VMDK ↔ VHDX ↔ QCOW2)
- Configuração da VM adaptada ao hipervisor de destino (hardware, drivers)
8. Arquitetura de Segurança
Segurança de Transporte
- Backup: NBDSSL (criptografado com SSL) ou SAN (rede de armazenamento dedicada)
- Protocolo DR: TLS 1.3 via rustls (quando certificado/chave configurados)
- API vSphere: HTTPS com validação de certificado
Autenticação
- vSphere: Usuário/senha via SOAP SessionManager
- Protocolo DR: Chave pré-compartilhada (PSK) com comparação em tempo constante
- Autenticação em tempo constante: Comparação baseada em XOR previne ataques de temporização
Proteção de Dados
- Nenhum segredo armazenado no código — credenciais via configuração de FileSet do Bacula
- Tokens de autenticação de DR rotativos sem reinicialização do serviço
- Caminhos de certificado/chave TLS configuráveis via opções do plugin
Recursos de Conformidade
- Log estruturado (nível + componente + mensagem)
- Trilha de auditoria via catálogo do Bacula (histórico de jobs, metadados)
- Persistência do estado de replicação para verificação de conformidade de DR
9. Guia de Instalação
9.1 Pré-requisitos
| Requisito | Detalhes |
|---|---|
| SO (host do File Daemon) | Oracle Linux 9 / RHEL 9 / Rocky Linux 9 / AlmaLinux 9 — x86_64 |
| Bacula | Community 15.0.x instalado e em execução no mesmo host |
| VDDK | Distribuído como RPM podheitor-vixdisklib-runtime — sem extração manual de tar |
| Rede | TCP 443 para ESXi/vCenter; TCP 9102 (padrão) entre o FD primário e o receptor de DR |
| VMware Tools | Instalado nas VMs convidadas (necessário para quiesce e Re-IP) |
| CBT | Habilitado em cada VM a ser protegida (ver §9.5) |
| Espaço em disco | ≥ 500 MB livres para o binário do backend + runtime do VDDK; ver §13 para armazenamento de backup |
O host do File Daemon precisa de saída TCP 443 para a API ESXi/vCenter e, para replicação, saída TCP 9102 para o receptor de DR. Nenhuma porta de entrada é necessária no FD primário.
9.2 Artefatos da Versão
Tudo é distribuído como RPMs assinados dentro de releases/:
| Arquivo | Finalidade |
|---|---|
podheitor-vsphere-1.4.1-1.el9.x86_64.rpm |
Plugin Rust cdylib (.so) + backend Rust + diretórios de estado CBT/replicação |
podheitor-vixdisklib-runtime-9.0.1-1.el9.x86_64.rpm |
Bibliotecas de runtime VMware VDDK 9.0.1, autossuficientes via RPATH $ORIGIN |
Sem extração de tar, sem edições manuais de ld.so.conf, sem exportações de LD_LIBRARY_PATH — tudo isso é tratado pelos scriptlets %post dos RPMs.
9.3 Instalação padrão (RPM)
A ordem não importa; qualquer RPM pode ser instalado primeiro.
# 1. Plugin RPM
sudo rpm -Uvh releases/podheitor-vsphere-1.4.1-1.el9.x86_64.rpm
# 2. VDDK runtime RPM
sudo rpm -Uvh releases/podheitor-vixdisklib-runtime-9.0.1-1.el9.x86_64.rpm
# 3. Restart Bacula FD
sudo systemctl restart bacula-fd
O RPM do plugin instala:
| Caminho | Conteúdo |
|---|---|
/opt/bacula/plugins/podheitor-vsphere-fd.so |
Plugin Rust cdylib carregado pelo Bacula FD |
/opt/bacula/bin/podheitor-vsphere-backend |
Binário do backend Rust |
/opt/bacula/working/podheitor/cbt/ |
Estado CBT (change-ids por VM) |
/var/lib/podheitor/replication/ |
Estado de replicação + metadados de pontos de restore |
O RPM do runtime VDDK instala:
| Caminho | Conteúdo |
|---|---|
/usr/lib/vmware-vix-disklib/lib64/ |
libvixDiskLib.so* + OpenSSL/curl/z incluídos (todos corrigidos com RPATH=$ORIGIN) |
/usr/lib/vmware-vix-disklib/bin64/ |
vixDiskCheck, vmware-vdiskmanager, vddkReporter |
/usr/lib/vmware-vix-disklib/include/ |
Headers VDDK (somente para desenvolvimento) |
/usr/lib/vmware-vix-disklib/doc/ |
Documentação HTML do VDDK |
9.4 Conflito com OpenSSL 3.4.0 — prevenção e recuperação
Instaladores antigos criavam /etc/ld.so.conf.d/vmware-vddk.conf apontando para /usr/lib/vmware-vix-disklib/lib64. Em hosts EL9 cujo OpenSSL do sistema tenha sido atualizado além da versão 3.4.0, todo binário do sistema (rpm, dnf, flatpak, …) passava a carregar o libcrypto.so.3 (versão mais antiga) do VMware e falhava com:
flatpak: /usr/lib/vmware-vix-disklib/lib64/libcrypto.so.3:
version `OPENSSL_3.4.0' not found (required by /lib64/librpmio.so.9)
O RPM atual do podheitor-vixdisklib-runtime previne isso ao corrigir cada objeto compartilhado com RPATH=$ORIGIN em tempo de compilação, de forma que o VDDK encontra seus irmãos sem nenhuma diretiva global no loader. O scriptlet %post também remove entradas obsoletas:
/etc/ld.so.conf.d/vmware-vddk.conf
/etc/ld.so.conf.d/vmware-vix-disklib.conf
/etc/ld.so.conf.d/vixlib*.conf
/etc/ld.so.conf.d/flatpack*.conf
/etc/ld.so.conf.d/flatpak-vddk*.conf
Para recuperar um host já quebrado (que nem consegue executar o dnf), execute — sem necessidade de conexão:
sudo rm -f /etc/ld.so.conf.d/vmware-vddk.conf
/etc/ld.so.conf.d/vmware-vix-disklib.conf
/etc/ld.so.conf.d/*vixlib*.conf
/etc/ld.so.conf.d/*flatpack*.conf
sudo ldconfig
# Verify the system libcrypto is back in front:
ldconfig -p | grep 'libcrypto.so.3 .*=> /lib64'
# Then dnf/rpm/flatpak work again:
sudo dnf check-update
9.5 Habilitar Changed Block Tracking (CBT)
O CBT é obrigatório para incrementais eficientes e para replicação.
Via govc:
export GOVC_URL="https://root:<PASSWORD>@<ESXI_IP>/sdk"
export GOVC_INSECURE=true
govc vm.change -vm <VM_NAME> -e ctkEnabled=TRUE
govc vm.change -vm <VM_NAME> -e scsi0:0.ctkEnabled=TRUE
# Repeat for each virtual disk (scsi0:1, scsi0:2, …)
Via vSphere Client: VM → Editar Configurações → Opções da VM → Avançado → Parâmetros de Configuração → definir ctkEnabled=TRUE e scsi<N>:<M>.ctkEnabled=TRUE por disco, depois criar e excluir um snapshot para materializar o change log.
9.6 Configurar o Bacula
Adicione o diretório de plugins ao FD (normalmente já configurado):
# /opt/bacula/etc/bacula-fd.conf
FileDaemon {
Name = vsphere-fd
Plugin Directory = /opt/bacula/plugins
Plugin Names = "podheitor-vsphere"
...
}
Em seguida, adicione FileSets / Jobs / Schedules no Director (ver §11 e §12). Reinicie ambos os daemons:
sudo systemctl restart bacula-fd
sudo systemctl restart bacula-dir
9.7 Teste de fumaça
# VDDK visible to the backend?
/opt/bacula/bin/podheitor-vsphere-backend --version
# Should print the build version and exit 0.
# Run a dry-run backup of a single VM:
echo "status" | bconsole
run job=Backup-<VM_NAME> yes
# watch progress:
status client=vsphere-fd
9.8 Opcional: compilar a partir do código-fonte
Para desenvolvedores / clones do repositório git:
sudo ./install.sh
O script install.sh irá: detectar e instalar o RPM do runtime VDDK a partir de releases/, remover entradas legadas de flatpack/vixlib/vmware-vddk em /etc/ld.so.conf.d/, compilar o backend Rust com cargo --release e instalar o binário resultante + .so em /opt/bacula/.
9.9 Desinstalar
sudo systemctl stop bacula-fd
sudo rpm -e podheitor-vsphere podheitor-vixdisklib-runtime
sudo systemctl start bacula-fd
Os diretórios de estado (/opt/bacula/working/podheitor/, /var/lib/podheitor/) são preservados entre upgrades e removidos somente na desinstalação completa com rpm -e.
10. Referência de Configuração
Formato da Plugin String
Plugin = "podheitor-vsphere: key1=value1 key2=value2 ..."
Todas as opções podem ser especificadas diretamente na diretiva Plugin do FileSet.
Tabela Completa de Opções — Backup
| Opção | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
host |
string | Sim | — | Nome de host / IP do ESXi ou vCenter |
username |
string | Sim | — | Nome de login no vSphere |
password |
string | Sim | — | Senha de login no vSphere |
datacenter |
string | Sim | — | Nome do objeto gerenciado do datacenter |
vm |
string | Sim | — | Nome da VM a proteger |
transport |
string | Não | nbdssl |
nbd, nbdssl, hotadd, san |
quiesce |
bool | Não | true |
Quiesce o sistema de arquivos do convidado |
timeout |
int | Não | 3600 |
Timeout em segundos |
include_disk |
multi | Não | todos | Incluir discos específicos |
exclude_disk |
multi | Não | nenhum | Excluir discos específicos |
keep_cbt |
bool | Não | false |
Manter CBT após o backup |
abort_on_error |
bool | Não | false |
Abortar no primeiro erro |
snapshot_delete_delay |
int | Não | 0 |
Segundos de espera antes de excluir o snapshot |
force_san |
bool | Não | false |
Forçar transporte SAN |
debug |
bool | Não | false |
Habilitar log de depuração |
config_file |
string | Não | — | Arquivo de configuração externo |
Tabela Completa de Opções — Restauração
| Opção | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
new_vm_name |
string | Não | original | Nome da VM restaurada |
power_on |
bool | Não | false |
Ligar após a restauração |
datastore |
string | Não | original | Nome do datastore de destino |
overwrite |
bool | Não | false |
Sobrescrever VM existente |
no_network |
bool | Não | false |
Desconectar NICs |
thin_provisioned |
bool | Não | false |
Usar provisionamento thin de disco |
resource_pool |
string | Não | padrão | Pool de recursos de destino |
network_name |
string | Não | original | Rede de destino |
guest_id_override |
string | Não | auto | Substituir tipo de SO convidado |
hw_version |
string | Não | auto | Substituir versão de hardware |
controller_type |
string | Não | auto |
auto, ide, scsi, nvme |
Tabela Completa de Opções — Replicação
| Opção | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
mode |
string | Sim | — | Modo de replicação (ver tabela de modos) |
dr_host |
string | Sim* | — | Nome de host / IP do receptor de DR |
dr_port |
int | Não | 9102 |
Porta TCP do receptor de DR |
dr_auth_token |
string | Sim* | — | Token de autenticação pré-compartilhado |
dr_restore_points |
int | Não | 5 |
Máximo de snapshots na réplica |
dr_replica_datastore |
string | Não | auto | Datastore para a réplica |
push_interval |
int | Não | 300 |
Intervalo de push (segundos) |
push_apply_remote |
bool | Não | true |
Aplicar deltas remotamente |
max_retries |
int | Não | 3 |
Máximo de tentativas em caso de falha |
retry_delay_sec |
int | Não | 30 |
Intervalo entre tentativas |
alert_after_failures |
int | Não | 3 |
Limite para alerta |
net_map |
multi | Não | — | Regras de mapeamento de rede |
reip |
multi | Não | — | Regras de reconfiguração de IP |
storage_map |
multi | Não | — | Regras de mapeamento de datastore |
max_bandwidth_mbps |
int | Não | 0 |
Limite de banda (0=ilimitado) |
test_failover_network |
string | Não | — | Rede de teste isolada |
failover_vm |
string | Não | auto | VM de destino no failover |
dr_tls_cert |
string | Não | — | Caminho do certificado TLS |
dr_tls_key |
string | Não | — | Caminho da chave privada TLS |
dr_tls_insecure |
bool | Não | false |
Aceitar certificados autoassinados |
Obrigatório para modos que se comunicam com o receptor de DR (cbt-push, seed, failover-*, failback, reprotect).
11. Exemplos de Configuração de Backup
Exemplo 1: Backup Full + Incremental Básico
# FileSet
FileSet {
Name = "vSphere-Backup-VM1"
Include {
Options { signature = MD5 }
Plugin = "podheitor-vsphere: host=192.168.1.100 username=root
password=MyP@ss datacenter=ha-datacenter vm=production-web
transport=nbdssl"
}
}
# Full backup weekly, Incremental daily
Schedule {
Name = "vSphere-Schedule"
Run = Full sun at 02:00
Run = Incremental mon-sat at 22:00
}
# Backup Job
Job {
Name = "Backup-Production-Web"
Type = Backup
Client = vsphere-fd
FileSet = "vSphere-Backup-VM1"
Storage = File1
Pool = File
Schedule = "vSphere-Schedule"
Messages = Standard
}
Exemplo 2: Múltiplas VMs
FileSet {
Name = "vSphere-Backup-All"
Include {
Options { signature = MD5 }
Plugin = "podheitor-vsphere: host=192.168.1.100 username=root
password=MyP@ss datacenter=ha-datacenter vm=web-server
transport=nbdssl"
Plugin = "podheitor-vsphere: host=192.168.1.100 username=root
password=MyP@ss datacenter=ha-datacenter vm=db-server
transport=nbdssl quiesce=true"
Plugin = "podheitor-vsphere: host=192.168.1.100 username=root
password=MyP@ss datacenter=ha-datacenter vm=app-server
transport=nbdssl"
}
}
Exemplo 3: Backup via SAN (sem LAN)
FileSet {
Name = "vSphere-SAN-Backup"
Include {
Options { signature = MD5 }
Plugin = "podheitor-vsphere: host=vcenter.prod.local username=admin@vsphere.local
password=VcP@ss datacenter=Production vm=critical-db
transport=san force_san=true"
}
}
Exemplo 4: Backup Seletivo de Disco
FileSet {
Name = "vSphere-Selective"
Include {
Options { signature = MD5 }
Plugin = "podheitor-vsphere: host=192.168.1.100 username=root password=MyP@ss
datacenter=ha-datacenter vm=multi-disk-vm transport=nbdssl
exclude_disk=Hard disk 3"
}
}
Exemplo 5: Restauração em Nova VM
# bconsole commands
restore jobid=<BACKUP_JOBID> where=/
# Then add these override options at the restore prompt:
# podheitor-vsphere: host=192.168.1.100 username=root password=MyP@ss
# datacenter=ha-datacenter new_vm_name=restored-vm power_on=yes
# datastore=datastore2 thin_provisioned=yes
12. Exemplos de Configuração de Replicação
Exemplo 1: Replicação CBT Push (Incremental)
# FileSet for CBT push
FileSet {
Name = "vSphere-Repl-Push"
Include {
Options { signature = MD5 }
Plugin = "podheitor-vsphere: host=192.168.1.100 username=root password=MyP@ss
datacenter=ha-datacenter vm=production-web transport=nbdssl
mode=cbt-push dr_host=192.168.2.50 dr_port=9102
dr_auth_token=MySecureToken2026 dr_tls_insecure=yes"
}
}
# Schedule: push every 15 minutes
Schedule {
Name = "Repl-Push-15min"
Run = Incremental hourly at 0:00
Run = Incremental hourly at 0:15
Run = Incremental hourly at 0:30
Run = Incremental hourly at 0:45
}
# Job
Job {
Name = "Replicate-Production-Web"
Type = Backup
Client = vsphere-fd
FileSet = "vSphere-Repl-Push"
Storage = File1
Pool = File
Schedule = "Repl-Push-15min"
}
Exemplo 2: Seed Inicial
FileSet {
Name = "vSphere-Seed"
Include {
Options { signature = MD5 }
Plugin = "podheitor-vsphere: host=192.168.1.100 username=root password=MyP@ss
datacenter=ha-datacenter vm=production-web transport=nbdssl
mode=seed dr_host=192.168.2.50 dr_port=9102
dr_auth_token=MySecureToken2026"
}
}
Job {
Name = "Seed-Production-Web"
Type = Backup
Client = vsphere-fd
FileSet = "vSphere-Seed"
Storage = File1
Pool = File
}
Exemplo 3: Failover Planejado com Mapeamento de Rede
FileSet {
Name = "vSphere-Failover-Planned"
Include {
Options { signature = MD5 }
Plugin = "podheitor-vsphere: host=192.168.1.100 username=root password=MyP@ss
datacenter=ha-datacenter vm=production-web transport=nbdssl
mode=failover-planned
dr_host=192.168.2.50 dr_port=9102 dr_auth_token=MySecureToken2026
net_map=Production_Network=DR_Network
reip=0:192.168.2.10/24:192.168.2.1:8.8.8.8,8.8.4.4"
}
}
Exemplo 4: Receptor de DR
FileSet {
Name = "vSphere-DR-Receiver"
Include {
Options { signature = MD5 }
Plugin = "podheitor-vsphere: host=192.168.2.50 username=root password=DrP@ss
datacenter=ha-datacenter vm=production-web-replica transport=nbdssl
mode=dr-receiver dr_port=9102 dr_auth_token=MySecureToken2026
dr_tls_cert=/etc/podheitor/tls/server.crt
dr_tls_key=/etc/podheitor/tls/server.key"
}
}
Exemplo 5: Configuração Completa de DR
# === PRIMARY SITE (Production) ===
# 1. Initial seed
Job { Name = "Seed-WebVM" ... FileSet = "vSphere-Seed" }
# 2. Continuous replication (every 5 min)
Job { Name = "Repl-WebVM" ... FileSet = "vSphere-Repl-Push" Schedule = "Every5Min" }
# 3. Status check (hourly)
Job { Name = "Status-WebVM" ... FileSet = "vSphere-Status" Schedule = "Hourly" }
# === DR SITE (Standby) ===
# 4. DR Receiver (long-running)
Job { Name = "DR-Receiver" ... FileSet = "vSphere-DR-Receiver" }
# === FAILOVER JOBS (manual trigger) ===
# 5. Test failover
Job { Name = "Test-Failover-WebVM" ... mode=failover-test }
# 6. Undo test
Job { Name = "Undo-Failover-WebVM" ... mode=failover-undo }
# 7. Planned failover (during maintenance window)
Job { Name = "Planned-Failover-WebVM" ... mode=failover-planned
net_map=... reip=... }
# 8. Emergency failover
Job { Name = "Emergency-Failover-WebVM" ... mode=failover-unplanned
net_map=... reip=... }
# 9. Permanent failover
Job { Name = "Permanent-Failover-WebVM" ... mode=failover-permanent
net_map=... reip=... }
# 10. Failback (after production restored)
Job { Name = "Failback-WebVM" ... mode=failback }
# 11. Re-protect
Job { Name = "Reprotect-WebVM" ... mode=reprotect }
13. Manual do Usuário e Operações do Dia a Dia
Esta seção descreve as tarefas cotidianas executadas pelo operador após a instalação do plugin e adição dos FileSets das seções §11–§12 ao bacula-dir.conf.
13.1 Comandos comuns do bconsole
| Tarefa | Comando (no bconsole) |
|---|---|
| Listar jobs de backup configurados | show jobs |
| Listar jobs de backup de um cliente | list jobs client=vsphere-fd |
| Executar um job sob demanda | run job=Backup-Production-Web yes |
| Executar com nível explícito | run job=Backup-Production-Web level=Full yes |
| Ver jobs em execução | status client=vsphere-fd |
| Acompanhar mensagens | messages |
| Buscar arquivos no catálogo | list files jobid=<JOBID> |
| Cancelar um job travado | cancel jobid=<JOBID> |
| Purgar e excluir um backup | delete jobid=<JOBID> |
13.2 Executar um backup
echo "run job=Backup-Production-Web yes" | bconsole
# Then watch:
echo "status client=vsphere-fd" | bconsole
echo "messages" | bconsole
Para forçar um Full (ex.: após habilitar o CBT pela primeira vez):
run job=Backup-Production-Web level=Full yes
Após o primeiro Full, os Incrementais subsequentes carregarão apenas os blocos alterados reportados pelo CBT (tipicamente 1 a 5% do disco por dia).
13.3 Restaurar uma VM (interativo)
* restore
Select item: 5 (Select the most recent backup for a client)
Defined Clients:
1: vsphere-fd
Select Client (File Daemon) resource: 1
The defined FileSet resources are:
1: vSphere-Backup-VM1
Select FileSet: 1
... bconsole picks the latest Full + chain of Incrementals
... it then drops you into the file selection tree.
$ mark *
$ done
Run Restore job
JobName: RestoreFiles
Bootstrap: /opt/bacula/working/...
Where: /tmp/bacula-restores
Plugin Options: *None*
OK to run? (yes/mod/no): mod
Parameters to modify:
...
12: Plugin Options
Select parameter to modify (1-13): 12
Please enter a Plugin Options string: podheitor-vsphere:
host=192.168.1.100 username=root password=MyP@ss
datacenter=ha-datacenter new_vm_name=production-web-restored
datastore=datastore2 thin_provisioned=yes power_on=yes
OK to run? (yes/mod/no): yes
O plugin reutiliza a versão de hardware original da VM, o tipo de adaptador de rede e o SO convidado, a menos que você substitua via hw_version, network_name, guest_id_override ou controller_type.
13.4 Restauração de disco único
Use include_disk (ou exclude_disk) na Plugin string da restauração para restringir qual VMDK será restaurado:
podheitor-vsphere: host=192.168.1.100 username=root password=MyP@ss
datacenter=ha-datacenter new_vm_name=onlydata
include_disk="Hard disk 2" datastore=datastore2 power_on=no
13.5 Restauração entre hipervisores (vSphere → Proxmox / Hyper-V)
A restauração entre hipervisores é simplesmente uma restauração regular direcionada a um host não VMware. A conversão de formato (VMDK ↔ VHDX ↔ QCOW2) é automática — ver §7.
# Restore a VMware backup onto a Proxmox host (FD running on PVE node)
restore client=proxmox-fd jobid=<BACKUP_JOBID>
Plugin Options: podheitor-proxmox: node=pve1 storage=local-lvm
new_vm_name=migrated-web vmid=120 power_on=no
13.6 Fluxo de operações do dia a dia na replicação
Após a conclusão do seed (modo seed) e com um job recorrente em modo cbt-push, a replicação é totalmente automática. As operações do dia a dia são:
| Operação | Quando | bconsole |
|---|---|---|
| Verificar status | A qualquer momento | run job=Status-WebVM yes |
| Testar failover (não destrutivo) | Simulação de DR | run job=Test-Failover-WebVM yes |
| Desfazer teste | Após simulação | run job=Undo-Failover-WebVM yes |
| Failover planejado | Janela de manutenção | run job=Planned-Failover-WebVM yes |
| Failover não planejado | Interrupção | run job=Emergency-Failover-WebVM yes |
| Failover permanente | Migração definitiva | run job=Permanent-Failover-WebVM yes |
| Failback para a origem | Origem restaurada | run job=Failback-WebVM yes |
| Reproteger (reiniciar replicação direta) | Após failback | run job=Reprotect-WebVM yes |
13.7 Ciclo de vida do daemon receptor de DR
O receptor de DR executa como um job de longa duração (mode=dr-receiver) no Bacula FD do site de DR. Configuração recomendada:
Job {
Name = "DR-Receiver-Always-On"
Type = Backup
Client = vsphere-dr-fd
FileSet = "vSphere-DR-Receiver"
Schedule = "Boot" # starts on FD boot
Max Run Sched Time = 0 # never time out
Allow Duplicate Jobs = no
Reschedule On Error = yes
Reschedule Interval = 60
Reschedule Times = 0 # forever
}
SIGTERM (ex.: bconsole: cancel jobid=<n>) aciona um encerramento gracioso — os deltas em andamento são descarregados e o bloqueio de snapshot na réplica é liberado antes da saída.
13.8 Certificados TLS para o protocolo DR
Para produção, gere um certificado de servidor para o host do receptor de DR:
openssl req -x509 -newkey rsa:4096 -nodes -days 3650
-keyout /etc/podheitor/tls/server.key
-out /etc/podheitor/tls/server.crt
-subj "/CN=vsphere-dr-fd.dr.local"
chmod 600 /etc/podheitor/tls/server.key
Referencie ambos os arquivos via dr_tls_cert= e dr_tls_key= no FileSet com mode=dr-receiver, e remova dr_tls_insecure=yes no lado remetente assim que o certificado for confiável.
13.9 Rotação de token
Os tokens são lidos da Plugin string no início do job, portanto a rotação é:
- Gere um novo token (
openssl rand -hex 32). - Atualize ambas as strings
dr_auth_token=(FileSets do remetente e do receptor). bconsole: reload.- Cancele o job do receptor de DR em execução — o Bacula o reagendará
automaticamente (conforme §13.7) e o novo token entrará em vigor.
13.10 Localização dos logs
| Arquivo | Conteúdo |
|---|---|
/opt/bacula/working/bacula-fd.log |
Log do Bacula FD (saída do plugin multiplexada) |
/opt/bacula/working/podheitor/cbt/<vm>.json |
Change-IDs CBT por VM |
/var/lib/podheitor/replication/<vm>.json |
Estado de replicação, hora da última sincronização, pontos de restore |
journalctl -u bacula-fd -e |
stderr capturado pelo systemd |
Adicione debug=true à Plugin string para rastreamento detalhado do backend (encaminhado ao log do Bacula FD via PTCOMM).
14. Dimensionamento e Requisitos
Requisitos de Hardware
| Componente | Mínimo | Recomendado | Alto Desempenho |
|---|---|---|---|
| CPU | 2 núcleos | 4 núcleos | 8+ núcleos |
| RAM | 4 GB | 8 GB | 16+ GB |
| Disco (FD) | 20 GB | 50 GB | 100+ GB |
| Rede | 1 Gbps | 10 Gbps | 25 Gbps |
Dimensionamento de Armazenamento
| Cenário | Estimativa |
|---|---|
| Backup Full | ~1:1 com dados usados (compressão pelo Bacula SD) |
| Incremental | 1 a 5% do disco total por dia (típico) |
| Réplica | Igual ao tamanho do disco da VM de origem |
| Pontos de restore | ~1 a 5% por snapshot (depende da taxa de alteração) |
Largura de Banda de Rede
| Cenário | Largura de Banda Necessária |
|---|---|
| Backup diário (VM de 100 GB) | ~5 GB incremental → ~11 Mbps sustentado |
| Replicação (VM de 100 GB, RPO de 5 min) | ~100 MB/intervalo → ~3 Mbps sustentado |
| Seed completo (VM de 100 GB) | 100 GB → ~2,2 horas a 100 Mbps |
Limites de VMs Simultâneas
| Configuração | Máximo Recomendado |
|---|---|
| 2 CPU / 4 GB RAM | 2 a 3 VMs simultâneas |
| 4 CPU / 8 GB RAM | 5 a 10 VMs simultâneas |
| 8 CPU / 16 GB RAM | 15 a 20 VMs simultâneas |
15. Matriz de Compatibilidade
Compatibilidade VMware
| Componente | Versão | Testado | Observações |
|---|---|---|---|
| ESXi | 7.0 | ✅ | Todos os níveis de atualização |
| ESXi | 8.0 | ✅ | Todos os níveis de atualização |
| ESXi | 8.0U3e | ✅ | Plataforma de teste principal |
| vCenter | 7.0 | ✅ | Opcional — ESXi standalone suportado |
| vCenter | 8.0 | ✅ | Opcional |
| VDDK | 8.0.x | ✅ | Mínimo recomendado |
| VDDK | 9.0.1 | ✅ | Plataforma de teste principal |
Compatibilidade de Sistema Operacional (Servidor FD)
| SO | Versão | Testado | Observações |
|---|---|---|---|
| Oracle Linux | 9.x | ✅ | Plataforma de teste principal (9.5) |
| RHEL | 9.x | ✅ | Mesmo binário que OL9 |
| Rocky Linux | 9.x | ✅ | Mesmo binário que OL9 |
| AlmaLinux | 9.x | ✅ | Mesmo binário que OL9 |
Compatibilidade com Bacula
| Componente | Versão | Testado |
|---|---|---|
| Bacula Community | 15.0.3 | ✅ |
| Bacula Community | 15.0.x | Compatível esperado |
Suporte a SO Convidado
| SO Convidado | Backup | Restauração | Quiesce | CBT | Re-IP |
|---|---|---|---|---|---|
| Linux (qualquer) | ✅ | ✅ | ✅* | ✅ | ✅* |
| Windows Server | ✅ | ✅ | ✅* | ✅ | ✅* |
| Windows 10/11 | ✅ | ✅ | ✅* | ✅ | ✅* |
| FreeBSD | ✅ | ✅ | ⚠️ | ✅ | ❌ |
| Outros | ✅ | ✅ | ⚠️ | ✅ | ❌ |
*Requer VMware Tools instalado no convidado.
16. Resultados de Testes
Ambiente de Teste
| Componente | Detalhes |
|---|---|
| ESXi | 8.0U3e, standalone, IP 192.168.15.91 |
| Servidor FD | Oracle Linux 9.5, Bacula 15.0.3 |
| VDDK | 9.0.1 |
| VMs de Teste | Alpine (381 MB), TinyCore, CirrOS, Multi-Disk |
Testes de Backup e Restauração
| # | Teste | Resultado | Detalhes |
|---|---|---|---|
| 1 | Backup Full (NBDSSL) | ✅ APROVADO | Todas as 4 VMs |
| 2 | Backup Incremental (CBT) | ✅ APROVADO | Apenas blocos alterados |
| 3 | Restauração completa da VM | ✅ APROVADO | Nome original + novo nome |
| 4 | Restauração para datastore diferente | ✅ APROVADO | Thin provisioned |
| 5 | Restauração entre hipervisores (vSphere → Hyper-V) | ✅ APROVADO | VMDK → VHDX |
| 6 | Restauração entre hipervisores (Hyper-V → vSphere) | ✅ APROVADO | VHDX → VMDK |
Testes de Replicação (20 de abril de 2026)
| # | Teste | JobId | Status | Dados |
|---|---|---|---|---|
| 1 | Status de Replicação | 881 | ✅ T | 870 B |
| 2 | CBT Push (Incremental) | 882 | ✅ T | 377 MB |
| 3 | Teste de Failover | 883 | ✅ T | 137 B |
| 4 | Desfazer Failover | 884 | ✅ T | 137 B |
| 5 | Failover Planejado | 885 | ✅ T | 140 B |
| 6 | Desfazer Failover (2) | 887 | ✅ T | 137 B |
| 7 | Failover Não Planejado | 889 | ✅ T | 142 B |
| 8 | Failover Permanente | 892 | ✅ T | 142 B |
| 9 | Seed (Sincronização Completa) | 893 | ✅ T | 377 MB |
| 10 | Failback | 894 | ✅ T | 2,1 GB |
| 11 | Reprotect | 895 | ✅ T | 1.795 B |
| 12 | Status Final | 897 | ✅ T | 870 B |
Resultado: 12/12 testes APROVADOS — 100% de taxa de sucesso
Matriz de Validação de Restauração (v1.4.1, 29 de abril de 2026)
Laboratório de caminho de restauração de ponta a ponta em ESXi 8.0.3 (192.168.15.91, sem vCenter) + Bacula 15.0.3 FD/SD/Director (192.168.15.105). VM de origem vm-alpine1 (Alpine 3.21, ext4 com SYSLINUX VBR; snapshot ao vivo).
| # | Caminho | JobId | Resultado | Observações |
|---|---|---|---|---|
| 1 | Backup Full (NBDSSL + habilitação CBT) | 6425 | ✅ T | changeId persistido: …/85 |
| 2 | Full → restauração no sistema de arquivos (Where=/tmp/restore) |
6427 | ✅ T | 4 arquivos / 2,147 GB / 6 s, 0 erros no FD |
| 3 | Corretude de bytes do VMDK restaurado | — | ✅ | mount -o ro,loop,noload; /etc/alpine-release = 3.21.0 |
| 4 | Backup Incremental (CBT) | 6429 | ✅ T | changeId persistido: …/86 |
| 5 | Incremental → restauração no sistema de arquivos | 6431 | ✅ T | correspondência byte a byte com a restauração Full |
| 6 | Segurança da restauração no hipervisor (VM de origem existe) | 6434/6435 | ✅ recusado | “VM already exists; use overwrite=yes or different where name” |
| 7 | Backup com new_vm_name=vm-alpine1-restored embutido |
6440 | ✅ T | Plugin string congelada no catálogo |
| 8 | Restauração no hipervisor (recriação no ESXi via NBD/SSL) | 6442 | ✅ T | moref=71 criado, VMDK enviado |
| 9 | Inicialização da VM recriada / boot | — | ✅ | bootTime definido, uptimeSeconds=118, CPU 29 MHz, mem 220 MB |
Resultado: 9/9 caminhos APROVADOS. As três correções da v1.4.1 (duplicação de caminho, captura de Where=, EOD do writer de diretório) confirmadas contra carga de trabalho real.
17. Comparativo com Soluções Corporativas
Comparativo de Recursos
| Recurso | PodHeitor BRC | Bacula Enterprise | Veeam B&R | Commvault |
|---|---|---|---|---|
| Backup em Nível de Imagem | ✅ | ✅ | ✅ | ✅ |
| Suporte a CBT | ✅ | ✅ | ✅ | ✅ |
| Incremental | ✅ | ✅ | ✅ | ✅ |
| Transporte SAN | ✅ | ✅ | ✅ | ✅ |
| Restauração Completa de VM | ✅ | ✅ | ✅ | ✅ |
| Restauração de Disco Único | ✅ | ✅ | ✅ | ✅ |
| Entre Hipervisores | ✅ | ❌ | ⚠️ | ⚠️ |
| Replicação de VM | ✅ | ❌ | ✅ | ✅ |
| Failover de DR | ✅ (10 modos) | ❌ | ✅ | ✅ |
| Mapeamento de Rede | ✅ | ❌ | ✅ | ✅ |
| Re-IP no Failover | ✅ | ❌ | ✅ | ✅ |
| Protocolo DR com TLS | ✅ | N/A | ✅ | ✅ |
| Bacula Community | ✅ | ❌ | N/A | N/A |
| Custo | $$ | $$$$ | $$$$$ | $$$$$ |
Vantagem de Custo
Traga sua cotação ou proposta de renovação do Bacula Enterprise, Veeam, Commvault ou Netbackup. Garantimos pelo menos 50% de desconto, com muito mais recursos.
18. Solução de Problemas
18.1 OPENSSL_3.4.0 not found do rpm / dnf / flatpak
Causa: uma entrada legada em /etc/ld.so.conf.d/ está forçando todo processo a carregar o libcrypto.so.3 antigo do VMware. Consulte §9.4 para a recuperação em um único comando.
18.2 libvixDiskLib.so not found in standard paths
O backend busca em:
/usr/lib/vmware-vix-disklib/lib64/usr/lib64/vmware-vix-disklib/opt/bacula/lib/vix
Se o RPM do runtime VDDK estiver instalado, o caminho #1 conterá libvixDiskLib.so. Se você instalou o VDDK manualmente em um local incomum, defina a variável de ambiente VDDK_LIB_PATH=/caminho/completo/libvixDiskLib.so na unidade de serviço do FD:
sudo systemctl edit bacula-fd
# add:
# [Service]
# Environment=VDDK_LIB_PATH=/opt/vddk/lib64/libvixDiskLib.so
sudo systemctl daemon-reload && sudo systemctl restart bacula-fd
18.3 Backup executado, mas produz 0 bytes no Incremental
O CBT não está habilitado ou foi redefinido. Verifique:
govc vm.info -vm.ipath /ha-datacenter/vm/<VM_NAME> | grep -i ctk
# Must show ctkEnabled = true
Em seguida, crie e exclua um snapshot para materializar o change log e execute um Full novamente.
18.4 dlopen(libvixDiskLib.so): symbol lookup error
O .so do VDDK não encontrou um de seus irmãos (libcrypto.so.3, libssl.so.3, libcurl.so.4, …). Confirme se o RPATH foi aplicado:
readelf -d /usr/lib/vmware-vix-disklib/lib64/libvixDiskLib.so.9 | grep PATH
# Expected:
# 0x0000000000000001 (RUNPATH) Library runpath: [$ORIGIN]
Se ausente, reinstale o podheitor-vixdisklib-runtime — o %install do RPM aplica patchelf --set-rpath '$ORIGIN' a cada .so em lib64/.
18.5 O delta de replicação é aplicado, mas a VM não inicializa após o failover
Verifique se net_map= / reip= no FileSet de failover apontam para redes e IPs que existem de fato no site de DR. Um port group não mapeado faz o VMware desconectar silenciosamente a NIC na inicialização.
18.6 “Authentication failed” no receptor de DR
dr_auth_token= deve ser idêntico byte a byte no remetente e no receptor. A comparação é feita em tempo constante (baseada em XOR) para prevenir ataques de temporização, portanto a única forma de falhar é uma discrepância real. Se você rotacionou o token recentemente, consulte §13.9.
18.7 Backups lentos ou presos em connecting
Verifique o transporte:
nbdsslvia WAN com alta latência — mude parasanse possível,
ou hotadd se o FD for uma VM no mesmo cluster ESXi.
- Firewall entre FD e ESXi — a porta NBD (902) deve estar aberta
além da 443 ao usar nbd / nbdssl.
19. Licenciamento e Contato
Licença
Copyright © 2026 Heitor Faria — Todos os Direitos Reservados
Este software é proprietário. Todo o código-fonte, binários e documentação são propriedade exclusiva de Heitor Faria. Cópia, distribuição, modificação ou engenharia reversa não autorizadas são estritamente proibidas.
Contato
Heitor Faria
- 📧 Email: heitor@opentechs.lat
- 📱 Telefone: +1 786 726-1749
- 📱 WhatsApp: +55 61 98268-4220
Consultas Comerciais
Para preços, licenciamento, prova de conceito e demonstrações técnicas, entre em contato diretamente. Descontos por volume e contratos plurianuais disponíveis.
Oferta Especial: Traga sua cotação ou proposta de renovação existente do Bacula Enterprise, Veeam, Commvault ou Netbackup. Garantimos pelo menos 50% de desconto, com muito mais recursos.
PodHeitor vSphere BRC Plugin — Whitepaper v1.4.1 — Abril de 2026 VMware, vSphere, ESXi, VADP, VDDK são marcas registradas da Broadcom/VMware. Bacula é marca registrada de Kern Sibbald. Todas as demais marcas são propriedade de seus respectivos donos.
Disponível em:
Português
English (Inglês)
Español (Espanhol)