Whitepaper — PodHeitor Informix

Whitepaper — PodHeitor Informix

Backup IBM Informix integrado com ON-Bar. Hot backup, dbspaces individuais, logical log streaming, PITR ao log único, suporte a alta-disponibilidade Continuous Log Restore (CLR).

  • ON-Bar nativo — integração direta com o subsistema oficial Informix.
  • dbspace-level backup — backup e restore por dbspace, granularidade total.
  • Logical log streaming — RPO próximo de zero.
  • PITR ao log único — restauração precisa.
  • HDR e Enterprise Replication-aware — backup do secondary, zero overhead no primary.

Comece em 30 dias, no mínimo 50% mais barato. Trial gratuito, RPMs e DEBs assinados, suporte direto com Heitor Faria. Substitua sua licença Veeam, Commvault ou Bacula Enterprise sem quebrar a janela noturna.

Solicitar trial gratuito de 30 dias →

🔴 AVISO COMERCIAL

Traga seu contrato ou proposta de renovação do Bacula Enterprise, Veeam, Commvault ou Netbackup. Oferecemos pelo menos 50% de desconto com recursos significativamente superiores.

Contato: heitor@opentechs.lat | +1 786 726-1749 | +55 61 98268-4220 (WhatsApp)


Sumário

  1. Sumário Executivo
  2. Caso de Negócio e TCO
  3. Visão Geral da Arquitetura
  4. Motores de Backup em Profundidade
  5. Capacidades de Replicação
  6. Recursos Avançados
  7. Segurança e Conformidade
  8. Observabilidade
  9. Guia de Instalação
  10. Referência de Configuração
  11. Procedimentos de Restauração e Casos de Uso
  12. Relatórios de Desempenho
  13. Matriz de Compatibilidade
  14. Guia de Dimensionamento
  15. Integração com Bacularis
  16. Migração do TSM/ISP e ON-Bar PSM
  17. Resolução de Problemas
  18. Roadmap
  19. Evidências de Validação (Resultados E2E)

1. Sumário Executivo

O Plugin PodHeitor de Backup, Replicação e Conversão Informix para Bacula é um plugin de nível comercial e pronto para ambientes corporativos para HCL Informix Dynamic Server (IDS) 12.10 a 15.0, construído nativamente para PodHeitor Backup+. Escrito inteiramente em Rust, oferece overhead de execução próximo a zero, segurança de memória e design orientado ao paralelismo — tudo em um único pacote binário assinado que se instala em minutos.

A Lacuna que Preenche

O Bacula Enterprise não possui plugin dedicado para Informix. O catálogo de banco de dados Enterprise inclui DB2, MSSQL, MySQL, Oracle, PostgreSQL, Sybase e Amazon RDS — mas não Informix. As organizações que utilizam IDS hoje são forçadas a escolher entre o caro IBM Spectrum Protect (TSM), scripts manuais de bpipe+ontape sem PITR ou segurança de cadeia, ou o PSM da HCL que gera duplo I/O em disco.

O PodHeitor Informix é o primeiro plugin Informix nativo para Bacula, com suporte a XBSA e baseado em Rust disponível no mercado.

Principais Diferenciais

Capacidade Scripts manuais TSM/PSM + Bacula PodHeitor Informix
Custo Gratuito, manutenção pesada Muito caro Licença única, sem taxas por banco
XBSA nativo Não Apenas TSM Sim — libpodheitor_xbsa.so
Paralelismo Nenhum Limitado N stripes × M dbspaces
PITR Manual Sim Envio contínuo e automatizado de log lógico
Restauração de tabela individual Nenhuma archecker manual Integrado — mode=table_level
Conversão entre versões Arriscada Não mode=logical_dbexport de primeira classe
Bootstrap HDR/RSS/SDS/ER Horas de trabalho manual Horas de trabalho manual Um comando bconsole
Recuperação instantânea Não Não IDS online em < 60 s via FUSE
Proteção contra ransomware Não Não ARD hook (IDS 14.10+)
Observabilidade Nenhuma Dashboard TSM Prometheus + OTLP
Nativo para Bacula Parcial (bpipe) Duas camadas XBSA direto + streaming

Status de Validação

E2E Lab (2026-04-29):  PASS=22  FAIL=0  SKIP=0  TOTAL=22
Testes unitários:      PASS=80  FAIL=0

Todos os 22 cenários end-to-end ativos e aprovados em um laboratório de 4 VMs (IDS primário, secundário HDR, secundário RSS, host de snapshot) com IDS 15.0.1.0.3 Developer Edition e PodHeitor Backup.


2. Caso de Negócio e TCO

2.1 Comparação de Custos (Anual, ambiente Informix de 10 TB)

Solução Licença Infraestrutura Operacional Total
IBM Spectrum Protect ~US$ 80.000/ano Servidor TSM separado DBA + administrador TSM (FTE) ~US$ 140.000/ano
Bacula Enterprise + scripts manuais ~US$ 30.000/ano Nenhuma DBA FTE (scripts) ~US$ 70.000/ano
Veeam Enterprise (módulo DB) ~US$ 25.000/ano Nenhuma Administrador FTE ~US$ 55.000/ano
PodHeitor Informix + PodHeitor Backup Taxa única Infraestrutura Bacula existente Mínimo < US$ 10.000 no total

Entre em contato pelo heitor@opentechs.lat para preços. Oferecemos pelo menos 50% de desconto em qualquer renovação concorrente.

2.2 Redução de Riscos

Risco Sem PodHeitor Com PodHeitor
Corrupção da cadeia de backup Silenciosa — detectada no momento da restauração Detectada imediatamente via chain_health_check + archecker
Criptografia por ransomware antes do backup O backup captura dados criptografados ARD hook aborta o backup em caso de anomalia
Lacuna na recuperação point-in-time Gerenciamento manual de arquivos de log lógico Daemon de envio contínuo de log lógico, RPO inferior a um minuto
Falha no bootstrap do secundário HDR Horas de trabalho manual + risco de interrupção Bootstrap automatizado com um único comando
Risco na atualização entre versões dbexport/dbimport manual + downtime mode=logical_dbexport em streaming, testado em E2E
DR de bare-metal (perda total do servidor) Requer reconstrução manual do onconfig/sqlhosts RestoreObject captura todos os metadados automaticamente

2.3 Exemplo de Cálculo de ROI

Uma instituição financeira de médio porte executando Informix 14.10 em 5 servidores, com backups diários e requisito de RTO de 4 horas:

  • Licença TSM + infraestrutura: ~US$ 60.000/ano
  • Um incidente de recuperação de 4h × 3 DBAs: ~US$ 3.600 por incidente
  • Migração para PodHeitor: custo único + PodHeitor Backup (gratuito)
  • Período de retorno: < 3 meses

3. Visão Geral da Arquitetura

3.1 Diagrama de Componentes

┌─────────────────────────────────────────────────────────────────────┐
│  Bacula Director 15.0.3                                              │
│  Job scheduler, catalog, pool management                             │
└──────────────────────────────┬──────────────────────────────────────┘
                               │ TCP/TLS PTCOMM
                               ▼
┌─────────────────────────────────────────────────────────────────────┐
│  Bacula File Daemon (bacula-fd)                                      │
│                                                                      │
│  Loads: podheitor-informix-fd.so                                     │
│         ├── PLUGIN_PREFIX = "podheitor-informix:"                   │
│         ├── Namespace    = "@informix/"                              │
│         ├── 64 backup parameters + 33 restore parameters            │
│         └── PTCOMM binary protocol (streams D-packets to Director)  │
└──────────────────────────────┬──────────────────────────────────────┘
                               │ Unix socket / stdin-stdout PTCOMM
                               ▼
┌─────────────────────────────────────────────────────────────────────┐
│  podheitor-informix-backend  (Rust static binary)                    │
│                                                                      │
│  ┌─── Engine Layer (mode=) ──────────────────────────────────────┐  │
│  │  xbsa          onbar_psm      ontape      logical_dbexport    │  │
│  │  (libxbsa.so)  (FIFO drain)   (STDIO)     (dbexport stream)   │  │
│  │  snapshot      replicate_hdr  replicate_rss  replicate_er     │  │
│  └──────────────────────────────────────────────────────────────┘  │
│  ┌─── XBSA Library (libpodheitor_xbsa.so) ──────────────────────┐  │
│  │  BSAInit / BSABeginTxn / BSACreateObject / BSASendData        │  │
│  │  BSAEndTxn / BSATerminate / BSAGetData / BSAQueryObject       │  │
│  └──────────────────────────────────────────────────────────────┘  │
│  ┌─── Daemon de Envio de Log Lógico ─────────────────────────────┐  │
│  │  Consulta sysmaster:syslogs a cada N segundos                  │  │
│  │  Envia logs fechados via PTCOMM — RPO inferior a um minuto     │  │
│  └──────────────────────────────────────────────────────────────┘  │
│  ┌─── Observabilidade ────────────────────────────────────────────┐  │
│  │  Prometheus /metrics    OpenTelemetry OTLP traces              │  │
│  └──────────────────────────────────────────────────────────────┘  │
│  ┌─── Segurança ──────────────────────────────────────────────────┐  │
│  │  Captura/restauração DBCRYPT   ARD ransomware hook   Redação  │  │
│  └──────────────────────────────────────────────────────────────┘  │
└──────────────────────────────┬──────────────────────────────────────┘
                               │ XBSA ABI / pipes / sockets / SQL
                               ▼
┌─────────────────────────────────────────────────────────────────────┐
│  HCL Informix Dynamic Server (12.10.FC12+ / 14.10 / 15.0)           │
│  + sysmaster (bar_action, bar_object, syslogs, sysshmvals)          │
│  + ON-Bar (onbar) + archecker + oncheck                             │
│  + topologia de replicação HDR / RSS / SDS / ER                     │
│  + DBCRYPT keystore                                                  │
└─────────────────────────────────────────────────────────────────────┘

3.2 Fluxo de Dados — Modo XBSA (Preferencial)

ON-Bar invocado pelo plugin
    │
    │ dlopen(libpodheitor_xbsa.so)
    ▼
libpodheitor_xbsa.so  ──Unix socket──►  podheitor-informix-backend
    │                                         │
    │ BSACreateObject(dbspace)                 │  compressão (zstd/lz4)
    │ BSASendData(blocks)                      │  N streams PTCOMM em stripe
    │                                         │  cálculo SHA-256
    │                                         │  gravação de sidecar manifest
    ▼                                         ▼
  BSAEndTxn                           Bacula Storage Daemon
                                            (File, Tape, S3, Dedup)

3.3 Namespace do Volume de Backup

/@informix/<INSTANCE_UUID>/
├── __ph_manifest.json          # manifest canônico do job (LSN, SHA256, lista de dbspace)
├── __ph_topology.json          # snapshot de topologia HDR/RSS/SDS/ER
├── __ph_dbcrypt.json           # referência do keystore criptografado (sem chave em texto plano)
├── __ph_layout.json            # mapeamento dbspace → chunk path
├── restoreobjects/
│   ├── onconfig
│   ├── sqlhosts
│   └── ixbar.<servernum>       # arquivo de boot de emergência do ON-Bar
├── dbspace/<name>/
│   ├── L0.<jobid>.s<N>.zst    # stripe N nível 0 (quadro ZSTD)
│   ├── L1.<jobid>.s<N>.zst
│   └── manifest.<jobid>.json  # LSN + SHA256 por dbspace
├── logs/
│   ├── log.<unique_id>.<lsn>.zst
│   └── continuous/<YYYY>/<MM>/<DD>/
└── logical/
    ├── dbexport.<db>.<jobid>.tar.zst
    └── schema.<db>.<jobid>.sql

4. Motores de Backup em Profundidade

4.1 Modo xbsa — XBSA Nativo (Padrão em mode=auto)

O diferencial estratégico. libpodheitor_xbsa.so implementa o ABI C completo do IBM XBSA, construído em Rust com memory-safety nativo. O ON-Bar o carrega via BAR_BSALIB_PATH, tornando o Bacula um gerenciador de armazenamento Informix de primeira classe — sem staging, sem duplo I/O, sem manipulação de FIFO.

Vantagens sobre todas as alternativas:

  • O paralelismo nativo do ON-Bar (BAR_MAX_BACKUP) mapeia 1:1 para streams PTCOMM
  • Acesso completo ao catálogo do ON-Bar (sysmaster:bar_action, bar_object) para captura de LSN
  • Suporte à verificação pós-backup do archecker através do registro padrão do ON-Bar
  • Zero bytes gravados no disco local do host FD (diretório de trabalho < 50 MB)

Funções XBSA implementadas: BSAInit, BSABeginTxn, BSACreateObject, BSASendData, BSAEndTxn, BSATerminate, BSAGetData, BSAQueryObject, BSAEndData, BSADeleteObject

4.2 Modo onbar_psm — Fallback PSM

O ON-Bar grava no HCL Primary Storage Manager (PSM) direcionado a um named pipe. O backend drena o pipe → PTCOMM. Utilizado quando a política da organização proíbe o carregamento de bibliotecas XBSA de terceiros.

4.3 Modo ontape — Legado/Simples

ontape -s -t STDIO -L 0|1|2. Apenas servidor completo; sem granularidade por dbspace. Para desenvolvimento, instâncias pequenas ou ambientes sem ON-Bar configurado. Validado em E2E T16.

4.4 Modo logical_dbexport — Conversão Entre Versões

dbexport <db> -ss -X -q transmitido via tar-on-the-fly assíncrono → PTCOMM. A saída é um tar comprimido contendo schema SQL + arquivos de unload por tabela. Restaurável em qualquer versão do IDS com dbimport. Uso principal: migração de versão principal (12.10 → 14.10 → 15.0). Validado em E2E T12.

4.5 Modo snapshot — Quiesce LVM/ZFS

  1. Checkpoint onmode -c
  2. Coloca dbspaces em modo de backup (BAR_BLOCK_BACKUP=1)
  3. LVM lvcreate --snapshot / ZFS zfs snapshot
  4. Libera modo de backup — janela de quiesce < 1 segundo
  5. Transmite blocos do snapshot via PTCOMM (chunking por conteúdo para dedup)
  6. Captura logs lógicos arquivados via onbar -b -l

Validado em E2E T13 usando LVM VG com loop-backed (ifxvg/ifxdata).

4.6 Mapeamento de Nível de Backup

Nível Bacula Nível ON-Bar Comportamento do Plugin
Full onbar -b -L 0 Baseline nível 0 do servidor completo. O manifest captura BAR_VERSION, INSTANCE_UUID, lista completa de dbspace, LSN.
Differential onbar -b -L 1 Cumulativo desde L0. Promove automaticamente para Full se chain_health_check detectar cadeia quebrada.
Incremental onbar -b -L 2 OU apenas log lógico Padrão: level_incr=logical_log para RPO inferior a um minuto. Envia apenas arquivos de log recém-fechados.
VirtualFull (sintético) O plugin mescla a cadeia L0+L1+L2 em um novo stream L0 consumido pela consolidação do Bacula.

5. Capacidades de Replicação

5.1 Bootstrap HDR (High-Availability Data Replication)

Problema: Configurar um secundário HDR hoje requer onmode -d primary, onmode -d secondary manuais, configuração de rede personalizada, frequentemente horas de trabalho do DBA.

Solução PodHeitor: Um único job de restauração com mode=ag_seed ag_target_role=hdr_secondary:

  1. Restaura a cadeia de backup mais recente no destino com equivalente a WITH NORECOVERY
  2. Ajusta DRAUTO/DRINTERVAL/DRTIMEOUT no destino
  3. Executa onmode -d primary <target_servernum> no primário
  4. Executa onmode -d secondary <primary_servernum> no destino
  5. Valida se o secundário atinge o estado On-Line (Sec)

Validado em E2E T10 e T14.

5.2 Bootstrap RSS (Remote Standalone Secondary)

Mesmo fluxo com ag_target_role=rss. Usa onmode -d add RSS <name> no primário + onmode -d RSS <primary_name> no destino. Validado em E2E T11.

5.3 Attach SDS (Shared Disk Secondary)

Valida a topologia de disco compartilhado, anexa novo SDS via onmode -d set SDS PRIMARY <primary_name>.

5.4 Snapshot/Restauração de Topologia Enterprise Replication (ER)

__ph_topology.json captura a malha ER completa: servidores, replicates, grids, assinaturas. Na restauração, cdr define server + cdr define replicate + cdr start replicate reconstitui a topologia. Essencial para DR quando toda a malha ER precisa ser reconstruída.

5.5 Backup a partir do Secundário (Descarga do Primário)

Plugin = "podheitor-informix: prefer_secondary_for_backup=yes hdr_role_check=secondary"

O plugin detecta o par HDR, conecta-se ao secundário e executa o ON-Bar lá. A CPU/I/O do primário permanece completamente sem impacto durante a janela de backup.


6. Recursos Avançados

6.1 Envio Contínuo de Log Lógico (RPO Inferior a Um Minuto)

Quando continuous_log=yes, o backend cria uma thread daemon que:

  • Consulta sysmaster:syslogs a cada continuous_log_interval segundos (padrão: 60s, mínimo: 5s)
  • Detecta arquivos de log lógico recém-fechados (status U → B)
  • Envia cada log atomicamente via um micro-job PTCOMM com verificação de integridade SHA-256
  • Detecta e alerta sobre lacunas na sequência de log lógico

RPO alcançado: < 1 minuto em laboratório; < 5 segundos com continuous_log_interval=5.

Validado em E2E T09-F (base) + T09-I (contínuo).

6.2 Recuperação Point-in-Time (PITR)

podheitor-informix: mode=whole_server stop_at_time="2026-04-28 14:30:00"
                    point_in_time_tz=America/Sao_Paulo

Opções:

  • stop_at_lsn=<N> — para a reprodução do log lógico em um LSN específico
  • stop_at_time=<datetime> — para em um timestamp
  • stop_before_txn=<txnid> — para antes de uma transação específica (para rollback direcionado)

O plugin reproduz a cadeia de backup L0 → L1 → L2 → logs lógicos até o ponto escolhido, então executa onmode -m para colocar a instância online. Validado em E2E T05.

6.3 Recuperação Instantânea (Montagem FUSE)

podheitor-informix: mode=instant instant_fuse_mount=/var/lib/podheitor-informix/instant
  1. Restaura cabeçalhos de chunk e página 0 de cada dbspace
  2. O sistema de arquivos FUSE apresenta arquivos de chunk virtuais respaldados por dados Bacula transmitidos de forma lazy
  3. O IDS inicializa via oninit -PHY contra os chunks montados via FUSE
  4. Instância consultável em < 60 segundos
  5. Os blocos restantes são transmitidos em lazy em segundo plano enquanto o IDS atende consultas

Caso de uso: continuidade imediata dos negócios enquanto a restauração completa prossegue em segundo plano. Validado em E2E T17 usando /dev/loop-control + /dev/fuse na VM 189.

6.4 Extração de Tabela Individual

podheitor-informix: mode=table_level table=app_db.dbo.orders
                    sandbox_docker_image=icr.io/informix/informix-developer-database:latest
                    single_item_export_dir=/tmp/restored
  1. Inicializa um contêiner Podman/Docker Developer Edition efêmero
  2. Restaura a cadeia de backup completa no sandbox
  3. Reproduz até o ponto de tempo solicitado
  4. Executa dbexport/unload para a tabela de destino
  5. Copia a saída para single_item_export_dir
  6. Destrói o contêiner sandbox

Resultado: Tabela de destino extraída em < 5 min a partir de um backup de 100 GB, sem impacto na produção. Validado em E2E T07.

6.5 Aplicação da Integridade da Cadeia

Por padrão (chain_health_check=yes), antes de cada Differential ou Incremental:

  1. O plugin consulta sysmaster:bar_action para o LSN do nível 0 precedente
  2. Valida a cadeia de manifest (SHA-256 de cada sidecar)
  3. Compara com o histórico de jobs do catálogo Bacula

Se a cadeia estiver quebrada (job ausente, lacuna de LSN, incompatibilidade de SHA), o job aborta antes de gravar qualquer dado, evitando um backup de falsa confiança. Os operadores são notificados com um erro claro explicando a lacuna.

6.6 Virtual Full (Full Sintético)

virtual_full=yes aciona uma mesclagem de cadeia no lado do servidor: o plugin lê os streams L0+L1+L2 do Bacula, mescla-os em um novo stream L0 que o Bacula ingere como um novo backup Full. Elimina cadeias longas de restauração (sem necessidade de aplicar Diff+Incr na restauração) evitando outro backup completo do host IDS.

6.7 Recuperação de Desastre Bare-Metal

Cada backup captura automaticamente um RestoreObject contendo:

  • onconfig (arquivo ONCONFIG)
  • sqlhosts (definições de conectividade)
  • ixbar.<servernum> (arquivo de boot de emergência do ON-Bar)

Ao restaurar em um host novo sem instalação prévia do IDS:

  1. O Bacula restaura o RestoreObject primeiro
  2. O plugin reconstrói a estrutura de diretórios do IDS
  3. Executa a inicialização padrão do oninit
  4. Restaura chunks e reproduz logs lógicos

Nenhuma intervenção manual do DBA necessária. Validado em E2E T18.


7. Segurança e Conformidade

7.1 Controles de Segurança

Superfície Controle Padrão
Configuração do plugin Caminho do passfile verificado para chmod 600; backend aborta se mais permissivo Aplicado
Strings de conexão em logs Redação por regex de segredos em toda a saída do logger PTCOMM redact_sysuser_passwords=yes
DBCRYPT keystore Apenas blob criptografado (ponteiro de hash) armazenado em __ph_dbcrypt.json; chave em texto plano NUNCA registrada ou armazenada dbcrypt_capture=yes
Caminho de carga da biblioteca XBSA Verificado contra /opt/podheitor-informix/lib/; LD_PRELOAD rejeitado Aplicado
Diretório de trabalho /var/run/podheitor-informix modo 0700 pertencente ao informix Aplicado
Contêiner sandbox Efêmero, root --read-only + tmpfs; excluído após extração Aplicado
Montagem FUSE Somente leitura; montado como informix:informix modo 0700 Aplicado
Códigos de saída do ON-Bar Código diferente de zero aciona falha no job chain_health_check=yes
IDs de correlação Todas as mensagens PTCOMM registradas com estrutura com o JobId do Bacula Sempre

7.2 Suporte a DBCRYPT

O recurso DBCRYPT do Informix criptografa dados em repouso no nível do mecanismo de armazenamento. O PodHeitor:

  • Captura os metadados do keystore (não a chave) em __ph_dbcrypt.json
  • Registra o label/alias da chave para invocação do hook na restauração
  • Na restauração, invoca o hook de passphrase do DBCRYPT antes do oninit
  • Resultado: bancos de dados criptografados em repouso fazem backup e restauração sem gerenciamento manual de chaves

Validado em E2E T15.

7.3 ARD Ransomware Hook

Quando ransomware_hook=yes, o plugin executa onstat -g ARD antes do backup e verifica:

  • Anomalias de entropia em blocos de log lógico recentemente gravados
  • Aumento repentino nas taxas de UPDATE/DELETE (Active Ransomware Detection, IDS 14.10+)

Se uma anomalia for detectada, o backup aborta com um aviso claro, impedindo que o estado criptografado pelo ransomware sobrescreva um backup limpo.

7.4 Checklist de Endurecimento de Permissões de Arquivo

# Verificar permissões corretas após instalação
ls -la /opt/bacula/plugins/podheitor-informix-fd.so    # -rwxr-xr-x root root
ls -la /opt/bacula/plugins/podheitor-informix-backend   # -rwxr-x--- root informix
ls -la /opt/podheitor-informix/lib/libpodheitor_xbsa.so # -rwxr-x--- root informix
ls -la /opt/bacula/etc/podheitor-informix.conf          # -rw------- informix informix
ls -la /var/run/podheitor-informix/                     # drwx------ informix informix

8. Observabilidade

8.1 Métricas Prometheus

Quando metrics_endpoint=localhost:9100 está configurado, o plugin expõe um endpoint padrão Prometheus /metrics.

Métrica Tipo Descrição
podheitor_ifx_job_bytes_total Counter Total de bytes transferidos neste job
podheitor_ifx_job_throughput_bytes_sec Gauge Taxa de transferência atual
podheitor_ifx_dbspace_progress_pct Gauge Percentual de conclusão por dbspace
podheitor_ifx_logship_lag_seconds Gauge Atraso no envio de log lógico (modo continuous_log)
podheitor_ifx_onbar_exit_code Gauge Código de saída da última invocação do ON-Bar
podheitor_ifx_archecker_pass Gauge 1=aprovado, 0=falhou (última execução do archecker)
podheitor_ifx_queue_depth Gauge Profundidade da fila write-ahead do PTCOMM
podheitor_ifx_active_stripes Gauge Número atual de streams PTCOMM ativos
podheitor_ifx_xbsa_buffer_pool_used Gauge Utilização do pool de buffers XBSA (bytes)

Exemplo de query Grafana para throughput:

rate(podheitor_ifx_job_bytes_total[1m])

Exemplo de query Grafana para alerta de atraso no envio de log lógico:

podheitor_ifx_logship_lag_seconds > 300

8.2 Traces OpenTelemetry OTLP

Quando otel_endpoint=http://collector:4317 está configurado, o plugin emite spans estruturados para um coletor compatível com OTLP (Jaeger, Tempo, Honeycomb, etc.).

Hierarquia de spans:

backup.job (job_id=NNNNN, instance=ifxprod)
  ├── engine.xbsa.init
  ├── dbspace.rootdbs.backup (level=0)
  │     ├── stripe.0.compress
  │     └── stripe.0.ptcomm_write
  ├── dbspace.app_data.backup (level=0)
  ├── manifest.write
  ├── archecker.verify
  └── topology.snapshot

9. Guia de Instalação

9.1 Pré-requisitos

Host do Bacula File Daemon (co-localizado com IDS):

  • SO: OL9/RHEL 8/9/Rocky 8/9/AlmaLinux 8/9, Ubuntu 20.04/22.04/24.04, Debian 11/12, SLES 15
  • PodHeitor Backup FD 15.0.3+
  • HCL Informix 12.10.FC12+ / 14.10.FCx / 15.0.x instalado
  • Usuário/grupo informix com privilégios IDS padrão
  • Para mode=snapshot: LVM ou ZFS nos dispositivos dbspace, losetup+lvcreate disponíveis
  • Para mode=instant: /dev/fuse + /dev/loop-control acessíveis
  • Para mode=table_level: Podman ou Docker instalado

Bacula Director:

  • Director 15.0.x com as definições de FileSet e Job (ver §10)

9.2 Instalação no EL8/EL9 (RPM)

# Baixe o RPM de releases/
rpm -ivh podheitor-informix-plugin-0.1.0-1.el9.x86_64.rpm

# Verificar instalação
ls /opt/bacula/plugins/podheitor-informix-fd.so
ls /opt/bacula/plugins/podheitor-informix-backend
ls /opt/podheitor-informix/lib/libpodheitor_xbsa.so
ls /opt/bacula/etc/podheitor-informix.conf.sample

9.3 Instalação no Ubuntu 22.04 / Debian 12 (DEB)

# Baixe o DEB de releases/
dpkg -i podheitor-informix-plugin_0.1.0-1_amd64.deb

# Verificar
dpkg -L podheitor-informix-plugin

9.4 Configurar o Plugin

# Copiar e editar a configuração de exemplo
cp /opt/bacula/etc/podheitor-informix.conf.sample 
   /opt/bacula/etc/podheitor-informix.conf
chmod 600 /opt/bacula/etc/podheitor-informix.conf
chown informix:informix /opt/bacula/etc/podheitor-informix.conf

vi /opt/bacula/etc/podheitor-informix.conf

Configurações mínimas necessárias:

[connection]
informixdir    = "/opt/ibm/informix"
informixserver = "ifxprod"
onconfig       = "onconfig.std"

[engine]
mode           = "auto"   # xbsa se onbar disponível, caso contrário ontape
compress       = "zstd"
compress_level = 3

9.5 Configurar Ambiente BAR

# /etc/sysconfig/podheitor-informix  (lido pelo onbar e pelo backend)
cat > /etc/sysconfig/podheitor-informix << 'EOF'
INFORMIXDIR=/opt/ibm/informix
INFORMIXSERVER=ifxprod
ONCONFIG=onconfig.std
INFORMIXSQLHOSTS=/opt/ibm/informix/etc/sqlhosts
PATH=/opt/ibm/informix/bin:$PATH
BAR_BSALIB_PATH=/opt/podheitor-informix/lib/libpodheitor_xbsa.so
BAR_MAX_BACKUP=4
BAR_XFER_BUF_SIZE=1048576
BAR_NB_XPORT_COUNT=10
EOF
chmod 640 /etc/sysconfig/podheitor-informix
chown root:informix /etc/sysconfig/podheitor-informix

9.6 Verificação Preflight

/opt/bacula/plugins/podheitor-informix-backend --dry-run 
  /opt/bacula/etc/podheitor-informix.conf

Saída esperada:

[INFO] PodHeitor Informix v0.1.0 — preflight check
[INFO] IDS version: 15.0.1.0.3
[INFO] ON-Bar available: yes
[INFO] archecker available: yes
[INFO] XBSA library: /opt/podheitor-informix/lib/libpodheitor_xbsa.so [OK]
[INFO] BAR_BSALIB_PATH configured: yes
[INFO] Working dir: /var/run/podheitor-informix [created, mode 0700]
[INFO] Connectivity: ifxprod@localhost:9088 [OK]
[INFO] DRY-RUN COMPLETE — all checks passed

9.7 Reiniciar o bacula-fd

systemctl restart bacula-fd
journalctl -u bacula-fd -n 50 | grep -i podheitor
# Esperado: "Loaded plugin: podheitor-informix v0.1.0"

10. Referência de Configuração

10.1 Opções de Backup

# Parâmetro Padrão Tipo Descrição
Conexão
1 informixdir $INFORMIXDIR caminho Diretório de instalação do IDS
2 informixserver $INFORMIXSERVER string Nome do servidor (entrada sqlhosts)
3 onconfig $ONCONFIG arquivo Override do arquivo onconfig
4 sqlhosts $INFORMIXSQLHOSTS arquivo Override do arquivo sqlhosts
5 user informix string Usuário SO para execução
6 passfile caminho Arquivo de credenciais (chmod 600)
7 kerberos_keytab caminho Keytab Kerberos para Trusted Context
Motor
8 mode auto enum `auto | xbsa | onbar_psm | ontape | logical_dbexport | snapshot | replicate_hdr | replicate_rss | replicate_sds | replicate_er`
Escopo
9 dbspace * glob Quais dbspaces fazer backup
10 include_dbspace glob (múltiplo) Lista de inclusão explícita
11 exclude_dbspace tempdb* glob (múltiplo) Lista de exclusão
12 database glob Filtro de BD no modo lógico
13 whole_system yes bool Servidor completo vs por dbspace
14 include_blobspace yes bool Blobspaces tradicionais
15 include_sbspace yes bool Sbspaces de smart-blob
16 include_external_dbspace no bool Dbspaces externos (somente leitura)
17 include_temp_dbspace no bool Dbspaces temporários
Níveis
18 level_full 0 int Mapeia Bacula Full → ON-Bar nível 0
19 level_diff 1 int Mapeia Bacula Differential → nível 1
20 level_incr logical_log enum `2 | logical_log`
21 force_full_after 7 int Promoção automática para Full após N incrementais
22 chain_health_check yes bool Verificar cadeia antes de Diff/Incr
23 simulate_full no bool Forçar nível 0 independente da solicitação do Bacula
24 copy_only no bool Backup fora de banda (não perturba a cadeia)
Desempenho
25 bar_max_backup # núcleos CPU int Define BAR_MAX_BACKUP (streams ON-Bar paralelos)
26 stripes 1 int Striping em N vias por stream (1–32)
27 parallel_dbspaces # núcleos CPU int Backups de dbspace concorrentes
28 bar_xfer_buf_size 1048576 bytes Define BAR_XFER_BUF_SIZE
29 bar_nb_xport_count 10 int Define BAR_NB_XPORT_COUNT
30 xbsa_buffer_count 8 int Profundidade do pool de buffers compartilhados XBSA
31 xbsa_block_size 65536 bytes Tamanho de bloco XBSA
32 compress zstd enum `none | zstd | lz4`
33 compress_level 3 int Nível de compressão ZSTD (1–22)
34 lob_chunked_streaming yes bool Chunking por conteúdo para LOBs sbspace
35 max_rate_kbps 0 int Limitação de largura de banda por job (0=ilimitado)
36 cpu_quota 0 pct Cota de CPU cgroup para o processo backend
Envio de Log Lógico
37 continuous_log no bool Daemon de envio de log lógico em segundo plano
38 continuous_log_interval 60 segundos Intervalo de polling (mínimo 5)
39 continuous_log_archive_only yes bool Para após BAR_RETRY falhas
40 salvage_logs no bool onbar -l -s recuperação após crash
Integridade
41 oncheck_pre_backup no enum `no | ce | cI | cD`
42 oncheck_post_backup no enum `no | ce | cI | cD`
43 archecker_verify yes bool Executar archecker após backup
44 manifest_sha256 yes bool SHA256 por stream no manifest
45 verify_lsn_chain yes bool Verificação cruzada de LSNs sysmaster:bar_action
Replicação
46 topology_snapshot yes bool Snapshot de topologia HDR/RSS/SDS/ER
47 er_subscribe_snapshot yes bool Captura replicates + grids ER
48 hdr_role_check any enum `primary | secondary | any`
49 prefer_secondary_for_backup no bool Fazer backup a partir do secundário HDR
Segurança
50 dbcrypt_capture yes bool Capturar metadados do DBCRYPT keystore
51 redact_sysuser_passwords yes bool Filtrar sysmaster:sysuser das exportações
52 audit_export no bool Incluir trilha de auditoria
53 ransomware_hook no bool Abortar em detecção de anomalia ARD
Observabilidade
54 metrics_endpoint host:porta Endpoint Prometheus /metrics
55 otel_endpoint URI Coletor de traces OTLP
56 progress_report_interval 30 segundos Cadência do progresso no log do job
Operacional
57 dry_run no bool Apenas preflight (sem escrita)
58 abort_on_chain_break yes bool Recusar Diff/Incr se cadeia quebrada
59 working_dir /var/run/podheitor-informix caminho Diretório FIFO + sentinel
60 config_file /opt/bacula/etc/podheitor-informix.conf caminho Config TOML externo
61 cluster_id string Separador de namespace multi-cluster
62 bar_ixbar_path $INFORMIXDIR/etc/ixbar.<servernum> caminho Arquivo de boot de emergência do ON-Bar
63 restore_object yes bool Armazenar onconfig+sqlhosts+ixbar como RestoreObject
64 virtual_full no bool Full sintético a partir da cadeia L0+L1+L2

10.2 Opções de Restauração

# Parâmetro Padrão Descrição
1 mode auto `auto | whole_server | in_place | new_instance | single_dbspace | table_level | instant | ag_seed | logical_import`
2 informixdir $INFORMIXDIR Diretório de instalação IDS de destino
3 informixserver (nome da origem) Novo nome de servidor IDS
4 onconfig $ONCONFIG Arquivo onconfig de destino
5 dbspace_relocation_map Arquivo JSON para remapeamento lógico→físico de chunk path
6 target_root_dbspace Override do chunk path do rootdbs
7 target_dbspace Destino no modo single-dbspace
8 dbspace * Quais dbspaces restaurar
9 database * Filtro de BD no modo lógico
10 table (múltiplo) Tabelas de destino para mode=table_level
11 column_filter Filtro opcional em nível de coluna (table_level)
12 recovery yes WITH RECOVERY (sim) vs NORECOVERY (para seed HDR)
13 stop_at_lsn Para a reprodução de log lógico no LSN
14 stop_at_time Para a reprodução de log lógico no timestamp
15 stop_before_txn Para antes de uma transação específica
16 point_in_time_tz UTC Fuso horário para stop_at_time
17 physical_only no Restaurar apenas fisicamente (pular reprodução de log lógico)
18 drop_existing no `no | yes | only_if_match`
19 tail_log_before yes Recuperar logs lógicos atuais antes de restauração destrutiva
20 verify_post archecker `no | oncheck | archecker | both`
21 dry_run no Preflight (validar manifest + caminhos, sem escrita)
22 parallel_streams (valor do backup) Streams de restauração concorrentes
23 stripes (valor do backup) Corresponder stripes do backup
24 parallel_dbspaces # núcleos CPU Restaurações de dbspace concorrentes
25 instant_fuse_mount /var/lib/podheitor-informix/instant Ponto de montagem FUSE para recuperação instantânea
26 sandbox_docker_image icr.io/informix/informix-developer-database:latest Imagem sandbox para table_level
27 single_item_export_dir /var/lib/podheitor-informix/extracted Saída para table_level
28 ag_target_role `hdr_secondary | rss | sds`
29 ag_primary_host Primário para se conectar após seed
30 dbcrypt_keystore Override da localização do DBCRYPT keystore
31 dbcrypt_passphrase_file Passphrase para keystore selado
32 progress_report_interval 30 Cadência de progresso
33 regexwhere Realocação padrão por regex do Bacula

10.3 Exemplos de FileSet

Backup básico de servidor completo (XBSA, padrões):

FileSet {
  Name = "Informix-Full"
  Include {
    Options { Signature = SHA256 }
    Plugin = "podheitor-informix:"
  }
}

Dbspaces específicos, com stripe e verificação:

FileSet {
  Name = "Informix-AppData"
  Include {
    Plugin = "podheitor-informix: include_dbspace=app_data include_dbspace=app_index
              exclude_dbspace=tempdb* archecker_verify=yes compress=zstd
              stripes=4 parallel_dbspaces=2"
  }
}

Envio contínuo de log lógico (RPO inferior a um minuto):

FileSet {
  Name = "Informix-LogShip"
  Include {
    Plugin = "podheitor-informix: continuous_log=yes continuous_log_interval=30"
  }
}

Migração entre versões:

FileSet {
  Name = "Informix-Export"
  Include {
    Plugin = "podheitor-informix: mode=logical_dbexport database=app_db"
  }
}

Modo snapshot (LVM):

FileSet {
  Name = "Informix-Snapshot"
  Include {
    Plugin = "podheitor-informix: mode=snapshot snapshot_vg=ifxvg snapshot_lv=ifxdata snapshot_size=1G"
  }
}

Backup de alto desempenho VLDB (8 stripes, 4 dbspaces paralelos):

FileSet {
  Name = "Informix-VLDB"
  Include {
    Plugin = "podheitor-informix: stripes=8 parallel_dbspaces=4 bar_max_backup=8
              bar_xfer_buf_size=4194304 compress=zstd compress_level=3"
  }
}

Backup a partir do secundário HDR (descarga do primário):

FileSet {
  Name = "Informix-HDR-Secondary"
  Include {
    Plugin = "podheitor-informix: prefer_secondary_for_backup=yes hdr_role_check=secondary"
  }
}

10.4 Definições de Job

Job {
  Name     = "informix-prod-full"
  JobDefs  = "DefaultJob"
  Type     = Backup
  Level    = Full
  FileSet  = "Informix-Full"
  Schedule = "WeeklyFull"
  Client   = "ifx-prod-fd"
  Storage  = "DiskStorage"
  Pool     = "Informix-Full"
}

Job {
  Name     = "informix-prod-diff"
  JobDefs  = "DefaultJob"
  Type     = Backup
  Level    = Differential
  FileSet  = "Informix-Full"
  Schedule = "DailyDiff"
  Client   = "ifx-prod-fd"
  Storage  = "DiskStorage"
  Pool     = "Informix-Diff"
}

Job {
  Name        = "informix-prod-logship"
  JobDefs     = "DefaultJob"
  Type        = Backup
  Level       = Incremental
  FileSet     = "Informix-LogShip"
  Schedule    = "Every5Min"
  Client      = "ifx-prod-fd"
  Storage     = "DiskStorage"
  Pool        = "Informix-Logs"
  Max Run Time = 10 minutes
}

11. Procedimentos de Restauração e Casos de Uso

11.1 Restauração Completa do Servidor (In-Place)

bconsole> restore client=ifx-prod-fd
[navegar e marcar]
bconsole> mod
Plugin Options: podheitor-informix: mode=in_place drop_existing=only_if_match
                tail_log_before=yes verify_post=both
bconsole> yes

11.2 Restauração para Nova Instância (Recuperação de Desastre)

bconsole> restore client=ifx-prod-fd where=/
Plugin Options: podheitor-informix: mode=new_instance informixserver=ifxprod-dr
                dbspace_relocation_map=/etc/podheitor-informix/dr-relocation.json
                verify_post=archecker

11.3 Recuperação Point-in-Time

Plugin Options: podheitor-informix: mode=whole_server
                stop_at_time="2026-04-28 14:30:00"
                point_in_time_tz=America/Sao_Paulo
                verify_post=both

11.4 Recuperação Instantânea

Plugin Options: podheitor-informix: mode=instant
                instant_fuse_mount=/var/lib/podheitor-informix/instant

Linha do tempo esperada:

  • 0–15s: restaura cabeçalhos de chunk + página 0
  • 15–60s: IDS inicializa contra montagem FUSE
  • 60s+: instância online, streaming lazy continua

11.5 Extração de Tabela Individual

Plugin Options: podheitor-informix: mode=table_level
                table=app_db.dbo.orders
                stop_at_time="2026-04-28 12:00:00"
                sandbox_docker_image=icr.io/informix/informix-developer-database:latest
                single_item_export_dir=/tmp/orders-restored

11.6 Bootstrap de Secundário HDR

Plugin Options: podheitor-informix: mode=ag_seed
                ag_target_role=hdr_secondary
                ag_primary_host=ifx-prod:9088
                recovery=no

11.7 Migração Entre Versões (12.10 → 15.0)

Passo 1 — backup da origem (12.10):

Plugin = "podheitor-informix: mode=logical_dbexport database=app_db"

Passo 2 — restauração no destino 15.0:

Plugin Options: podheitor-informix: mode=logical_import informixdir=/opt/ibm/informix
                informixserver=ifxprod-new database=app_db

12. Relatórios de Desempenho

12.1 Benchmarks de Throughput (Lab — OL9, IDS 15.0.1, rede 1 Gbps)

Tamanho do BD Modo stripes parallel_dbspaces Throughput Tempo total
10 GB xbsa (zstd-3) 2 1 250 MB/s 42 s
10 GB ontape (zstd-3) 1 n/a 85 MB/s 2 min
50 GB xbsa (zstd-3) 4 2 420 MB/s 2 min
100 GB xbsa (zstd-3) 4 4 440 MB/s 4 min
100 GB snapshot (zstd-3) 4 4 520 MB/s 3,5 min

12.2 Comparação de Taxa de Compressão

Tipo de Dado zstd-3 zstd-9 lz4 none
OLTP (misto) 2,8× 3,5× 2,2×
Texto/documentos 6,2× 8,0× 4,5×
Dbspaces de sistema IDS 3,1× 4,0× 2,4×
BLOBs binários 1,05× 1,05× 1,02×

Recomendação: compress=zstd compress_level=3 para a maioria dos ambientes. Use lz4 para hosts com CPU limitada; zstd compress_level=9 para redução de custo de armazenamento de backup.

12.3 Metas de RPO / RTO

Configuração RPO RTO
Apenas Full diário 24 h 1–4 h
Full semanal + Diff diário 24 h 30 min–2 h
Full semanal + Diff diário + envio de log de 5 min < 5 min 1–3 h
Envio contínuo de log lógico (padrão) < 1 min 1–3 h
Envio contínuo de log lógico (interval=5) < 5 s 1–3 h
Secundário HDR + backup noturno segundos < 5 min (failover)
Recuperação instantânea (FUSE) como o backup < 60 s
Snapshot + envio de log lógico < 30 s 30 min–2 h

12.4 Consumo de Memória

Configuração padrão: xbsa_buffer_count=8 × xbsa_block_size=64KiB × stripes=1 × parallel_dbspaces=# núcleos

stripes parallel_dbspaces Teto de memória
1 1 0,5 MB
4 4 8 MB
8 8 32 MB
32 16 256 MB

Consumo de disco no host FD: < 50 MB (FIFOs + sentinels + apenas manifest). Nenhum arquivo de staging é gravado.


13. Matriz de Compatibilidade

13.1 Matriz de Versão IDS × Recurso

Recurso IDS 12.10.FC12 IDS 14.10 IDS 15.0
mode=xbsa
mode=ontape
mode=onbar_psm
mode=logical_dbexport
mode=snapshot
Envio contínuo de log lógico
PITR (stop_at_lsn)
Bootstrap HDR
Bootstrap RSS
ARD ransomware hook ❌ (< 14.10)
Captura DBCRYPT
Virtual Full
Recuperação instantânea (FUSE)

13.2 SO × Disponibilidade de Pacote

SO RPM (el9) DEB Notas
Oracle Linux 9 Alvo GA principal
RHEL 9 / Rocky 9 / AlmaLinux 9 GA
RHEL 8 / Rocky 8 GA (RPM el9 compatível)
Ubuntu 22.04 LTS GA
Ubuntu 20.04 LTS GA
Debian 12 GA
Debian 11 GA
SLES 15 Via RPM el9
AIX 7.2/7.3 Roadmap v0.2.0
Windows Server 2019/2022 Roadmap v0.3.0
Linux ARM64 Roadmap v0.3.0

13.3 Compatibilidade com Bacula

PodHeitor Backup Suporte
15.0.3 ✅ Alvo GA principal
15.0.x
14.x ✅ (PTCOMM compatível)
< 14 ⚠️ Não testado

14. Guia de Dimensionamento

14.1 Requisitos Mínimos

Componente Mínimo Notas
RAM do host FD 1 GB Pool de buffers XBSA nos padrões ≈ 0,5 MB
CPU do host FD 2 núcleos Compressão + 1 stream paralelo
Disco do host FD 50 MB Diretório de trabalho (FIFOs + apenas manifest)
Disco SO do host FD Sem staging; nunca grava dados no disco local
Rede FD→SD 100 Mbps Funcional mínimo

14.2 Dimensionamento Recomendado para Produção

Ambiente IDS RAM FD CPU FD Rede stripes parallel_dbspaces
Pequeno (< 100 GB, dbspace único) 4 GB 4 núcleos 1 Gbps 2 1
Médio (100 GB–1 TB, 4–8 dbspaces) 8 GB 8 núcleos 10 Gbps 4 4
Grande (1–10 TB, 10+ dbspaces) 16 GB 16 núcleos 25 Gbps 8 8
VLDB (> 10 TB, muitos dbspaces) 32 GB 32 núcleos 25+ Gbps 16–32 16+

14.3 Dimensionamento do Bacula Storage Daemon

Taxa de mudança diária Pool de armazenamento I/O disco SD Notas
< 50 GB/dia 4 TB em disco SAS/SATA Pools padrão
50–500 GB/dia 20 TB em disco SSD recomendado Habilitar compressão zstd no SD também
> 500 GB/dia NAS/SAN ou fita Alto throughput Considerar plugin Bacula Dedup SD

15. Integração com Bacularis

O Bacularis oferece uma interface web sobre o PodHeitor Backup. O plugin PodHeitor Informix inclui um bacularis/plugin-descriptor.json que:

  • Adiciona “Informix” como tipo de recurso de cliente no assistente de backup do Bacularis
  • Renderiza todos os 64 parâmetros de backup como campos de formulário com validação
  • Exibe o navegador de restauração com visualização em árvore do namespace IDS-aware (/@informix/)
  • Exibe os resultados de validação E2E inline

Para ativar o descriptor:

cp /opt/bacula/plugins/bacularis/plugin-descriptor.json 
   /var/www/bacularis/protected/Common/Modules/PluginConfig/podheitor-informix.json
systemctl restart bacularis

16. Migração do TSM/ISP e ON-Bar PSM

16.1 Migrando do IBM Spectrum Protect (TSM/ISP)

Consulte MIGRATION_FROM_TSM.md para o procedimento completo. Resumo:

  1. Instale PodHeitor Backup + PodHeitor no host IDS
  2. Execute backups paralelos (TSM + PodHeitor) por um ciclo completo de backup para validar
  3. Confirme a integridade da cadeia via archecker + manifest
  4. Defina BAR_BSALIB_PATH para apontar para a biblioteca PodHeitor (substitui a biblioteca TSM)
  5. Desative o cliente TSM

Diferença principal: O BAR_BSALIB_PATH do TSM aponta para sua própria biblioteca. A biblioteca do PodHeitor é uma substituição direta — o ON-Bar não percebe a diferença.

16.2 Migrando de Scripts ON-Bar PSM

Consulte MIGRATION_FROM_PSM.md. Resumo:

  1. Identifique os valores atuais de BAR_MAX_BACKUP, BAR_XFER_BUF_SIZE e janelas de backup
  2. Crie um FileSet PodHeitor equivalente com mode=onbar_psm como etapa de transição
  3. Valide um ciclo completo de backup
  4. Mude para mode=xbsa (padrão) para streaming direto
  5. Remova scripts PSM e alocação de disco de staging

Economia de armazenamento ao remover o staging: O PSM grava em disco (arquivos .bak) antes de o Bacula buscá-los. O PodHeitor transmite diretamente, eliminando 1× conjunto de backup em espaço em disco.


17. Resolução de Problemas

17.1 Plugin Não Carregado

bacula-fd: error: plugin "podheitor-informix" not found

Causa: .so não está no diretório de plugins do Bacula. Solução: Verifique se /opt/bacula/plugins/podheitor-informix-fd.so existe; verifique se bacula-fd.conf tem Plugin Directory = /opt/bacula/plugins.

17.2 Falha no Carregamento da Biblioteca XBSA

[ERROR] BAR_BSALIB_PATH not set or library not found

Causa: BAR_BSALIB_PATH não está configurado em /etc/sysconfig/podheitor-informix. Solução:

echo "BAR_BSALIB_PATH=/opt/podheitor-informix/lib/libpodheitor_xbsa.so" 
  >> /etc/sysconfig/podheitor-informix
systemctl restart bacula-fd

17.3 ON-Bar Sai com Código Diferente de Zero

[ERROR] onbar exit code 45 — see /tmp/onbar_<jobid>.log

Causa: Erro do ON-Bar. Verifique o arquivo de log. Solução: Tipicamente: INFORMIXSERVER incorreto, IDS não está rodando, ou sysmaster.bar_action bloqueado.

cat /tmp/onbar_<jobid>.log
onstat -g ses   # verificar sessões IDS ativas

17.4 Falha na Verificação de Integridade da Cadeia

[ABORT] Chain broken: L0 JobId=1234 not found in catalog (or SHA mismatch)

Causa: Job Differential/Incremental abortou porque o Full ou Diff precedente está ausente. Solução: Execute um novo backup Full. Se o Full existir e o SHA estiver errado, o volume de backup pode estar corrompido — investigue o dispositivo SD.

17.5 Lacuna no Envio Contínuo de Log Lógico

[WARN] Log gap detected: expected log unique_id=150, got 152

Causa: O arquivo de log lógico 151 nunca foi fechado (bug do IDS) ou já foi sobrescrito. Solução:

onbar -l -s   # recuperar logs do disco
# OU definir salvage_logs=yes na configuração

17.6 Comandos de Diagnóstico

# Verificar status do IDS
onstat -

# Verificar histórico de backup ON-Bar
onstat -g bac

# Verificar status do log lógico
onstat -l

# Executar archecker manualmente no último backup
archecker -b -v -f /@informix/<UUID>/__ph_manifest.json

# Verificar runtime do plugin
journalctl -u bacula-fd -n 200 | grep -i podheitor

# Preflight dry-run
/opt/bacula/plugins/podheitor-informix-backend --dry-run 
  /opt/bacula/etc/podheitor-informix.conf

18. Roadmap

Versão Alvo Principais Recursos
v0.1.0 GA 2026-04-29 Suporte completo Linux x86_64, todos os 22 cenários E2E APROVADOS
v0.2.0 2026 T3 Suporte AIX 7.x (ppc64), provedor de snapshot NetApp ONTAP, compatibilidade OneDB 2.x
v0.3.0 2026 T4 Windows Server FD, Linux ARM64, restauração ER multi-mesh
v0.4.0 2027 T1 Descriptor de formulário de plugin Bacularis UI, FD sidecar Kubernetes
v0.5.0 2027 T2 Replicação lógica de aplicação entre versões (12.10 → 14.10 streaming ao vivo)
v1.0.0 2027 T3 Suporte completo de plataforma (Linux + AIX + Windows + ARM64) + Bacularis UI

19. Evidências de Validação (Resultados E2E)

19.1 Ambiente de Laboratório

Componente Detalhes
Bacula Director 192.168.15.105, Community 15.0.3, OL9
IDS Primário (VM 186) 192.168.15.130, ifxprod, IDS 15.0.1.0.3 Developer Edition em Docker
IDS Secundário HDR (VM 187) 192.168.15.131, ifxhdr, IDS 15.0.1.0.3
IDS Secundário RSS (VM 188) 192.168.15.132, ifxrss, IDS 15.0.1.0.3
Host Snapshot IDS (VM 189) 192.168.15.133, ifxsnap, OL9 bare-metal + LVM VG com loop-backed (ifxvg) + FUSE3

19.2 Resultados E2E — 2026-04-29 (JobIds 6358–6379)

ID Cenário JobId Nível Resultado
T01 Backup Full do servidor completo 6358 Full ✅ APROVADO
T02-F Cadeia Full+Diff+Incr — Full 6359 Full ✅ APROVADO
T02-D Cadeia Full+Diff+Incr — Differential 6360 Differential ✅ APROVADO
T02-I Cadeia Full+Diff+Incr — Incremental 6361 Incremental ✅ APROVADO
T03 Restauração in-place (restore_object=yes) 6362 Full ✅ APROVADO
T04 Restauração para nova instância 6363 Full ✅ APROVADO
T05-F Cadeia PITR — baseline Full 6364 Full ✅ APROVADO
T05-I Cadeia PITR — Incremental (log-ship) 6365 Incremental ✅ APROVADO
T06 Dbspace único (apenas rootdbs) 6366 Full ✅ APROVADO
T07 Backup e extração em nível de tabela 6367 Full ✅ APROVADO
T08 Backup paralelo com 4 stripes 6368 Full ✅ APROVADO
T09-F Envio contínuo de log lógico — base 6369 Full ✅ APROVADO
T09-I Envio contínuo de log lógico — Incremental 6370 Incremental ✅ APROVADO
T10 Bootstrap de secundário HDR 6371 Full ✅ APROVADO
T11 Bootstrap de secundário RSS 6372 Full ✅ APROVADO
T12 Exportação lógica (mode=logical_dbexport) 6373 Full ✅ APROVADO
T13 Snapshot LVM (snapshot_vg=ifxvg) 6374 Full ✅ APROVADO
T14 Seeding HDR via transporte Bacula 6375 Full ✅ APROVADO
T15 Sidecar de metadados DBCRYPT 6376 Full ✅ APROVADO
T16 Fallback explícito ontape 6377 Full ✅ APROVADO
T17 Recuperação instantânea (loopdev+FUSE) 6378 Full ✅ APROVADO
T18 DR RestoreObject bare-metal 6379 Full ✅ APROVADO

APROVADO=22 / REPROVADO=0 / PULADO=0 / TOTAL=22 — 100% de aprovação


Contato e Licenciamento

Licenciamento

PodHeitor Informix é software proprietário, distribuído por assinatura. Para condições comerciais, demonstração técnica ou diagnóstico gratuito de 30 minutos, fale com a equipe pelos canais abaixo.

Pronto para avaliar?


Plugin PodHeitor de Backup, Replicação e Conversão Informix para Bacula — v0.1.0 GA © 2026 Heitor Faria. Todos os direitos reservados.

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

Deixe um comentário