XBSA cdylib nativo substituindo TSM/ISP, fallback ontape STDIO, log shipping contínuo, PITR por LSN/timestamp, instant recovery via loop-device + FUSE, e conversão cross-version IDS 12.10 → 14.10 → 15.0 sob Bacula Community 15.0.3+.
Documento técnico complementar à página do plugin PodHeitor Informix.
1. Problema: backup de HCL Informix sob Bacula stock força TSM/ISP
O modelo nativo de Informix para backup é ON-Bar, que no IBM/HCL ships fala com IBM Spectrum Protect (TSM/ISP) via XBSA. Para integrar isso ao Bacula, a alternativa de mercado é:
- Bacula Enterprise Informix plugin — disponível, mas funcionalidades limitadas a ON-Bar full + log archiving simples; sem PITR via LSN, sem instant recovery, sem conversão cross-version.
- Scripts shell wrappers em torno de
ontape— comuns em campo, mas frágeis: sem detecção de gap em log archiving, sem signal handling, sem timeouts, sem catalogação proper de manifests. - TSM/ISP licenciado — caro, fora do mundo Bacula, e cada renovação dói no orçamento.
O PodHeitor Informix entrega um XBSA cdylib nativo (libpodheitor_xbsa.so) que ON-Bar carrega no lugar de TSM/ISP, roteando os streams de dados diretamente para Bacula via Unix socket — substituindo TSM por completo.
2. Modelo arquitetural
bacula-fd
└── podheitor-informix-fd.so (cdylib Rust puro — crate plugin-informix;
│ metaplugin-rs / bacula-fd-abi; sem C shim)
└── podheitor-informix-backend (rlib Rust + binário CLI, dispatcher de engine)
├── XBSA engine: ON-Bar → libpodheitor_xbsa.so → Unix socket → Bacula
├── ontape engine: ontape -s -t STDIO → zstd → PTCOMM D-packets
├── log_shipper: onstat -l poll → ontape -a -l <uniq_id> → virtual file
├── PITR: replay de manifest chain → onmode -m
├── instant: imagem .raw → losetup → oninit -PHY (RTO < 60s)
├── table_level: sandbox Podman/Docker → dbexport → docker cp
├── snapshot: LVM lvcreate --snapshot / ZFS snapshot
├── replicate: bootstrap HDR/RSS/SDS/ER via transporte Bacula
└── logical_dbexport: dbexport streaming para migração cross-version
O cdylib roda dentro do bacula-fd; o backend é processo separado per-job, comunicando-se via PTCOMM. O motivo é o de sempre: crash isolation, liberdade de paralelismo (XBSA stripes paralelos cross-dbspace), e license firewall — sem source AGPLv3 do Bacula linkado estaticamente.
3. Modos de operação suportados
| Capability | Detalhe |
|---|---|
| XBSA cdylib nativo | libpodheitor_xbsa.so substitui TSM/ISP — ON-Bar roteia data direto para Bacula |
| ontape STDIO fallback | Backups de instâncias IDS sem ON-Bar/XBSA configurado |
| Backup paralelo de dbspace | XBSA stripes + modo onbar_psm — N-way per dbspace, M dbspaces paralelos |
| Log shipping contínuo | SHA-256 per-log, polling de onstat -l, detecção de gap — RPO sub-minuto |
| PITR | Recovery para qualquer LSN, timestamp ou ID de transação |
| HDR / RSS / SDS / ER bootstrap | Seeding de replicação one-command via storage Bacula |
| Snapshot backup | LVM, ZFS, checkpoint nativo IDS — janela de quiesce < 1s |
| Instant recovery | Loop-device + FUSE mount → IDS queryable em < 60s |
| Extração de tabela única | Sandbox Docker/Podman + dbexport — sem impacto produção |
| Conversão cross-version | mode=logical_dbexport + mode=logical_import — migração IDS 12.10 → 14.10 → 15.0 |
| Sidecar DBCRYPT | Metadados de keystore (sem material de chave) persistidos no catálogo — restore transparente |
| Pre-backup ARD ransomware check | Hook onstat -g ARD (IDS 14.10+) — aborta em anomalia |
| Compressão zstd / lz4 | SHA-256 per-stripe + LOB content-defined chunking |
| Bare-metal DR | onconfig + sqlhosts + ixbar empacotados como Bacula RestoreObject |
| Virtual Full | Server-side chain merge — elimina cadeias longas no restore |
| Observability | Prometheus /metrics + traces OpenTelemetry OTLP |
4. XBSA cdylib nativo — substituindo TSM/ISP
O XBSA (X/Open Backup Services API) é o ABI padronizado que ON-Bar usa para falar com servidores de mídia. IBM/HCL ships ON-Bar configurado para TSM/ISP. O libpodheitor_xbsa.so implementa o ABI XBSA inteiro em Rust e traduz cada chamada XBSA para frames PTCOMM, que viajam pelo Unix socket até o backend, que por sua vez fala com o cdylib do Bacula.
Configuração minimal em $INFORMIXDIR/etc/bar_act.cfg:
BAR_BSALIB_PATH=/opt/bacula/lib/libpodheitor_xbsa.so
ON-Bar nem precisa saber que está falando com Bacula — segue achando que é TSM/ISP. Resultado: zero mudança em scripts ON-Bar legados, zero retreinamento de DBA.
5. Log shipping contínuo e PITR
O log_shipper polla onstat -l para descobrir logs lógicos rotacionados. Cada novo log é ontape -a -l <uniq_id>-archived, hashado em SHA-256, e enviado como um virtual file separado dentro do mesmo job Bacula incremental. Detecção de gap é mandatória: se um log foi consumido por outro processo (ou se o polling perdeu um cycle), o plugin detecta via comparação de unique-id sequencial e aborta com mensagem clara.
RPO sub-minuto é alcançável com polling de 30s. PITR no restore aceita target em três formas:
restore_to_lsn=...— LSN exatorestore_to_time=2026-04-15T14:30:00Z— timestamp ISO 8601restore_to_txid=...— ID de transação Informix
O backend computa a chain (Full + N logs) e dispara onmode -m para reabrir a instância no LSN target.
6. Instant recovery em < 60s
Para workloads que não toleram restore tradicional de horas, o modo instant exporta a imagem do dbspace como .raw, faz losetup em loop device, e chama oninit -PHY apontando o IDS para o loop. A instância sobe em < 60s, queryable. A migração de volta para storage local é background, sem janela de downtime adicional.
7. Conversão cross-version (logical_dbexport)
Migrar IDS 12.10 → 14.10 → 15.0 com downtime mínimo é caso recorrente. O modo logical_dbexport streama dbexport via PTCOMM — sem disco intermediário — e o lado destino faz dbimport direto do stream. Backup, migração e restore num único job Bacula.
8. Versões suportadas
- HCL Informix Dynamic Server: 12.10.FC12+, 14.10, 15.0
- Bacula Community: 15.0.3+
- Linux: EL8/EL9 (RPM), Ubuntu 22.04 / Debian 12 (DEB), x86_64
9. Validação
E2E suite (T01–T18, lab 2026-04-29): PASS=22 / FAIL=0 / SKIP=0 / TOTAL=22 — todos os 22 cenários ativos. Lab: 4 VMs (primary, HDR, RSS, snapshot), IDS 15.0.1.0.3 Developer Edition, Bacula Community 15.0.3. Unit tests OL9: 80/80 PASS.
10. License posture
Proprietary — single license. Não vincula estaticamente nenhum source AGPLv3 do Bacula. O cdylib usa extern "C" independente via crate bacula-fd-abi in-house; libpodheitor_xbsa.so implementa o ABI XBSA padrão (X/Open) sem dependência de código IBM/HCL.
Pronto para avaliar?
Trial gratuito de 30 dias para instâncias Informix qualificadas (12.10+, 14.10, 15.0). Garantimos no mínimo 50% de desconto vs Bacula Enterprise, Veeam, Commvault ou TSM/ISP, com mais funcionalidades — incluindo XBSA nativo, conversão cross-version e instant recovery que nenhum competidor entrega.
Heitor Faria — Fundador, PodHeitor International
✉ [email protected]
☎ +1 (789) 726-1749 · +55 (61) 98268-4220 (WhatsApp)
🔗 Página do plugin PodHeitor Informix
Disponível em:
Português
English (Inglês)
Español (Espanhol)