Whitepaper técnico — PodHeitor Granular Restore para Bacula

Suíte SD-side em Rust que entrega três capacidades sobre um único core: restore granular file-level, Instant Recovery block-level (NBD/iSCSI/NFS-Datastore/SMB-VHDX), e cross-hypervisor V2V (Hyper-V↔Proxmox↔ESXi↔CloudStack↔Nutanix). Substitui o Single Item Restore (SIR) do Bacula Enterprise 18.2 com paridade técnica + diferenciais cross-hypervisor que o SIR não cobre.

Documento técnico complementar à página do plugin PodHeitor Granular Restore.

1. O problema: SIR do Bacula Enterprise é vSphere-centric

Engenharia reversa do RPM bacula-enterprise-single-item-restore-18.2.3-26020419.el9.x86_64.rpm mostrou:

  • SIR usa parsers C++ próprios (vmbackend, bacula-fused) — não libguestfs.
  • Instant Recovery existe apenas para vSphere (export NFS Datastore via vsphere-ctl --ir-mode).
  • IR para Hyper-V não existe. IR para Proxmox/KVM/CloudStack/Nutanix não existe.
  • Cross-hypervisor V2V não existe — backup Hyper-V só restaura em Hyper-V.
  • Mode JSON do mount-vm serializa em formato proprietário frágil.
  • Cache local em working/mount-cache — staging não é zero.

Para clientes multi-hypervisor (ambiente típico de hosting providers e MSPs no Brasil/LatAm), as lacunas são bloqueantes. PHGR fecha as quatro: IR Hyper-V, IR Proxmox/KVM, IR Nutanix/CloudStack, e V2V cross-hypervisor.

2. Arquitetura — workspace cargo, três binários, um core

ADR-001: tudo em um único cargo workspace com três binários (phgrd, phird, phgr-cli) compartilhando um crate de núcleo (phgr-core). Não é “tudo no mesmo binário” — é “uma codebase, vários deliverables operacionais que podem ser instalados independentemente”.

Crate Type Função
phgr-core lib Catálogo, volume reader, delta/CBT, disk adapter, FS, exporters, V2V, sessions, audit
phgrd bin Daemon GR (FUSE/SMB/NFS export)
phird bin Daemon IR (NBD/iSCSI/NFS-Datastore + hypervisor drivers)
phgr-cli bin CLI interativa + scripted (mount, ir, v2v, diff, verify)
phgr-api bin gRPC + REST gateway com OpenAPI
phgr-tests lib E2E test harness + lab fixtures

3. Granular Restore — file-level sem staging

O phgrd monta volumes Bacula como filesystem FUSE, parseia VHDX/VHD/VMDK/qcow2/raw/VDI, monta partições NTFS/ext2/3/4/xfs/btrfs/ReFS/FAT/exFAT/ZFS, e expõe arquivos via:

  • FUSE local — mount em /mnt/phgr/<jobid>/<disk-N>/
  • SMB — share dinâmica via Samba bacula.d/ include
  • NFS — export dinâmica via /etc/exports.d/

O ler de volume Bacula é em Rust puro (ADR-005) — não linka libbacsd. Em v1.0, fallback para bextract orquestrado quando o reader Rust não cobre algum encoding. Footprint em /opt/bacula/working: ≤ 2 GB para um VHDX de 200 GB (lazy reads + small LRU cache, vs SIR que faz cache completo).

4. Instant Recovery — boot da VM em ≤ 60s

O phird expõe a imagem reconstruída como bloco para que um hipervisor inicie a VM imediatamente. Quatro caminhos:

Hypervisor Bloco Caminho
Proxmox / KVM NBD direto qm importdisk via nbd:// URL
VMware ESXi NFS Datastore Mount NFS export como datastore + register VM
Hyper-V iSCSI bridge iSCSI Target Linux → Hyper-V iSCSI initiator → New-VM com VHDX iSCSI
Nutanix / CloudStack iSCSI VG attach VG temporária → attach VM → boot

Escritas durante IR ficam em overlay COW separado (qcow2 backing file). Migração viva para storage definitivo em background (Storage vMotion / qm move-disk / equivalente) — usuário não percebe transição. RTO observado: ≤ 60s p95 wall-clock entre operador clicar “Recover” e VM boot.

5. Cross-hypervisor V2V

O phgr-cli v2v converte formato de disco e gera config nativa do hipervisor destino:

Source → Target Conversão de disco Config emitido
Hyper-V → Proxmox vhdx → qcow2 qm create + qm set
VMware → Proxmox vmdk → qcow2 qm create
Proxmox → Hyper-V qcow2 → vhdx VMCX XML
VMware → Hyper-V vmdk → vhdx VMCX XML
Hyper-V → VMware vhdx → vmdk VMX
Proxmox → VMware qcow2 → vmdk VMX

Conversão usa qemu-img convert em streaming. Driver virtio é injetado via virt-customize quando target requer (Linux guest indo para KVM da Hyper-V).

6. Diffs do SIR do Bacula Enterprise

Capacidade Enterprise SIR 18.2 PHGR v1.x
GR Hyper-V/VMware/Xen/KVM Sim Sim — paridade
GR Proxmox / CloudStack / Nutanix Namespace existe, suporte real escasso Sim — diferencial
IR vSphere Sim Sim — paridade
IR Hyper-V Não Sim — iSCSI bridge
IR Proxmox / KVM Não Sim — NBD direto
IR Nutanix / CloudStack Não Sim — iSCSI VG
Cross-hypervisor V2V Não Sim
Zero-staging Cache local ≥ 2 GB FUSE direto, ≤ 2 GB / 200 GB VHDX
Paralelismo C++ sync Rust async + tokio + io_uring quando disponível
API Formato proprietário gRPC + REST com OpenAPI
Diff entre dois jobs Não Sim — auditoria, DR remoto economia
Auto-malware scan opcional Não clamav/yara opt-in

7. Audit log assinado (compliance)

Toda sessão de restore gera trail HMAC-encadeado: cada entrada inclui hash da entrada anterior, garantindo que tampering é detectável. Cobre LGPD / GDPR / PCI requirements de evidência forense de quem acessou quais dados.

8. Throughput targets

Métrica Target
Restore granular em volume rápido (NVMe) ≥ 250 MB/s
Sessões simultâneas sem degradação > 30% ≥ 4
Início de IR (p95 wall-clock) ≤ 60s
Footprint em /opt/bacula/working ≤ 2 GB para VHDX 200 GB
Famílias de FS suportadas 8 (NTFS, ext2/3/4, xfs, btrfs, ReFS, FAT, exFAT, ZFS)

9. Anti-patterns documentados

  • Não rode phird em IR sem overlay COW configurado. Escritas durante IR vão para o image base e corrompem o backup ponto-no-tempo.
  • Não exponha share SMB do phgrd publicamente. O Samba bacula.d/ include é para LAN — sem TLS, sem Kerberos hardened. Use SMB sobre VPN.
  • Não confie no namespace de Enterprise SIR para identificar source. Backups com nomes @HYPERV-WINAPI, @vsphere etc são pistas, mas o parser PHGR validates pelo magic number do disk format, não pelo path.
  • Não esqueça de ZFS dataset cleanup quando working dir é ZFS. Sessions usam clones; cleanup automático via Drop do SessionGuard, mas force-kill do daemon deixa clones órfãos.

10. License posture

PHGR é AGPLv3 com dual-licensing comercial disponível. Diferentemente dos plugins de FD (que precisam evitar AGPL transitive porque rodam dentro do bacula-fd), o PHGR é uma suíte SD-side independente — não vincula contra o source do Bacula em nenhum ponto. A leitura de volumes é via formato documentado em Rust puro, sem libbacsd.

Pronto para avaliar?

Trial gratuito de 30 dias para clientes multi-hypervisor que precisam de Instant Recovery em Hyper-V/Proxmox/KVM/Nutanix/CloudStack ou cross-hypervisor V2V. Garantimos no mínimo 50% de desconto vs Bacula Enterprise SIR ou Veeam Instant VM Recovery, com cross-hypervisor IR e V2V que nenhum dos dois oferece.

Heitor Faria — Fundador, PodHeitor International
[email protected]
☎ +1 (789) 726-1749 · +55 (61) 98268-4220 (WhatsApp)
🔗 Página do plugin PodHeitor Granular Restore

Disponível em: pt-brPortuguêsenEnglish (Inglês)esEspañol (Espanhol)

Deixe um comentário