Whitepaper — PodHeitor Informix

Whitepaper — PodHeitor Informix

Respaldo IBM Informix integrado con ON-Bar. Hot backup, dbspaces individuales, logical log streaming, PITR al log único, soporte alta-disponibilidad Continuous Log Restore (CLR).

  • ON-Bar nativo — integración directa con el subsistema oficial Informix.
  • Respaldo dbspace-level — backup y restore por dbspace, granularidad total.
  • Logical log streaming — RPO cerca de cero.
  • PITR al log único — restauración precisa.
  • HDR y Enterprise Replication-aware — respaldo del secondary, cero overhead en primary.

Producción en 30 días, al menos 50% más barato. Trial gratuito, RPMs y DEBs firmados, soporte directo con Heitor Faria. Reemplace su licencia Veeam, Commvault o Bacula Enterprise sin romper la ventana nocturna.

Solicitar trial gratuito de 30 días →

🔴 AVISO COMERCIAL

Traiga su contrato o propuesta de renovación de Bacula Enterprise, Veeam, Commvault o Netbackup. Ofrecemos al menos 50% de descuento con características significativamente superiores.

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


Tabla de Contenidos

  1. Resumen Ejecutivo
  2. Caso de Negocio y TCO
  3. Descripción General de la Arquitectura
  4. Motores de Backup en Profundidad
  5. Capacidades de Replicación
  6. Características Avanzadas
  7. Seguridad y Cumplimiento
  8. Observabilidad
  9. Guía de Instalación
  10. Referencia de Configuración
  11. Procedimientos de Restauración y Casos de Uso
  12. Informes de Rendimiento
  13. Matriz de Compatibilidad
  14. Guía de Dimensionamiento
  15. Integración con Bacularis
  16. Migración desde TSM/ISP y ON-Bar PSM
  17. Resolución de Problemas
  18. Roadmap
  19. Evidencias de Validación (Resultados E2E)

1. Resumen Ejecutivo

El Plugin PodHeitor de Backup, Replicación y Conversión de Informix para Bacula es un plugin de nivel comercial y listo para entornos empresariales para HCL Informix Dynamic Server (IDS) 12.10 a 15.0, construido de forma nativa para PodHeitor Backup+. Escrito completamente en Rust, ofrece una sobrecarga de ejecución cercana a cero, seguridad de memoria y un diseño orientado al paralelismo — todo en un único paquete binario firmado que se instala en minutos.

La Brecha que Cubre

Bacula Enterprise no tiene un plugin dedicado para Informix. El catálogo de bases de datos Enterprise incluye DB2, MSSQL, MySQL, Oracle, PostgreSQL, Sybase y Amazon RDS — pero no Informix. Las organizaciones que ejecutan IDS hoy se ven obligadas a elegir entre el costoso IBM Spectrum Protect (TSM), scripts manuales de bpipe+ontape sin PITR ni seguridad de cadena, o el PSM de HCL que genera doble I/O en disco.

PodHeitor Informix es el primer plugin Informix nativo para Bacula, con soporte XBSA y basado en Rust disponible en el mercado.

Principales Diferenciadores

Capacidad Scripts manuales TSM/PSM + Bacula PodHeitor Informix
Costo Gratuito, mantenimiento elevado Muy costoso Licencia única, sin tarifas por base de datos
XBSA nativo No Solo TSM Sí — libpodheitor_xbsa.so
Paralelismo Ninguno Limitado N stripes × M dbspaces
PITR Manual Envío continuo y automatizado de log lógico
Restauración de tabla individual Ninguna archecker manual Integrado — mode=table_level
Conversión entre versiones Arriesgada No mode=logical_dbexport de primera clase
Bootstrap HDR/RSS/SDS/ER Horas de trabajo manual Horas de trabajo manual Un comando bconsole
Recuperación instantánea No No IDS en línea en < 60 s via FUSE
Protección contra ransomware No No ARD hook (IDS 14.10+)
Observabilidad Ninguna Dashboard TSM Prometheus + OTLP
Nativo para Bacula Parcial (bpipe) Dos capas XBSA directo + streaming

Estado de Validación

E2E Lab (2026-04-29):  PASS=22  FAIL=0  SKIP=0  TOTAL=22
Pruebas unitarias:     PASS=80  FAIL=0

Los 22 escenarios end-to-end activos y aprobados en un laboratorio de 4 VMs (IDS primario, secundario HDR, secundario RSS, host de snapshot) con IDS 15.0.1.0.3 Developer Edition y PodHeitor Backup.


2. Caso de Negocio y TCO

2.1 Comparación de Costos (Anual, entorno Informix de 10 TB)

Solución Licencia Infraestructura Operacional Total
IBM Spectrum Protect ~US$ 80.000/año Servidor TSM separado DBA + administrador TSM (FTE) ~US$ 140.000/año
Bacula Enterprise + scripts manuales ~US$ 30.000/año Ninguna DBA FTE (scripts) ~US$ 70.000/año
Veeam Enterprise (módulo DB) ~US$ 25.000/año Ninguna Administrador FTE ~US$ 55.000/año
PodHeitor Informix + PodHeitor Backup Tarifa única Infraestructura Bacula existente Mínimo < US$ 10.000 en total

Contáctenos en heitor@opentechs.lat para precios. Ofrecemos al menos 50% de descuento en cualquier renovación de la competencia.

2.2 Reducción de Riesgos

Riesgo Sin PodHeitor Con PodHeitor
Corrupción de la cadena de backup Silenciosa — detectada en el momento de la restauración Detectada de inmediato via chain_health_check + archecker
Cifrado por ransomware antes del backup El backup captura datos cifrados ARD hook aborta el backup ante una anomalía
Brecha en la recuperación point-in-time Gestión manual de archivos de log lógico Daemon de envío continuo de log lógico, RPO inferior a un minuto
Fallo en el bootstrap del secundario HDR Horas de trabajo manual + riesgo de interrupción Bootstrap automatizado con un único comando
Riesgo en la actualización entre versiones dbexport/dbimport manual + tiempo de inactividad mode=logical_dbexport en streaming, probado en E2E
DR de bare-metal (pérdida total del servidor) Requiere reconstrucción manual de onconfig/sqlhosts RestoreObject captura todos los metadatos automáticamente

2.3 Ejemplo de Cálculo de ROI

Una institución financiera mediana ejecutando Informix 14.10 en 5 servidores, con backups diarios y un requisito de RTO de 4 horas:

  • Licencia TSM + infraestructura: ~US$ 60.000/año
  • Un incidente de recuperación de 4h × 3 DBAs: ~US$ 3.600 por incidente
  • Migración a PodHeitor: costo único + PodHeitor Backup (gratuito)
  • Período de recuperación de inversión: < 3 meses

3. Descripción General de la Arquitectura

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 Envío de Log Lógico ─────────────────────────────┐  │
│  │  Consulta sysmaster:syslogs cada N segundos                    │  │
│  │  Envía logs cerrados via PTCOMM — RPO inferior a un minuto     │  │
│  └──────────────────────────────────────────────────────────────┘  │
│  ┌─── Observabilidad ─────────────────────────────────────────────┐  │
│  │  Prometheus /metrics    OpenTelemetry OTLP traces              │  │
│  └──────────────────────────────────────────────────────────────┘  │
│  ┌─── Seguridad ──────────────────────────────────────────────────┐  │
│  │  Captura/restauración DBCRYPT   ARD ransomware hook   Redacción│  │
│  └──────────────────────────────────────────────────────────────┘  │
└──────────────────────────────┬──────────────────────────────────────┘
                               │ 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                             │
│  + topología de replicación HDR / RSS / SDS / ER                    │
│  + DBCRYPT keystore                                                  │
└─────────────────────────────────────────────────────────────────────┘

3.2 Flujo de Datos — Modo XBSA (Preferido)

ON-Bar invocado por el plugin
    │
    │ dlopen(libpodheitor_xbsa.so)
    ▼
libpodheitor_xbsa.so  ──Unix socket──►  podheitor-informix-backend
    │                                         │
    │ BSACreateObject(dbspace)                 │  compresión (zstd/lz4)
    │ BSASendData(blocks)                      │  N streams PTCOMM en stripe
    │                                         │  cálculo SHA-256
    │                                         │  escritura de sidecar manifest
    ▼                                         ▼
  BSAEndTxn                           Bacula Storage Daemon
                                            (File, Tape, S3, Dedup)

3.3 Espacio de Nombres del Volumen de Backup

/@informix/<INSTANCE_UUID>/
├── __ph_manifest.json          # manifest canónico del job (LSN, SHA256, lista de dbspace)
├── __ph_topology.json          # snapshot de topología HDR/RSS/SDS/ER
├── __ph_dbcrypt.json           # referencia del keystore cifrado (sin clave en texto plano)
├── __ph_layout.json            # mapeo dbspace → chunk path
├── restoreobjects/
│   ├── onconfig
│   ├── sqlhosts
│   └── ixbar.<servernum>       # archivo de arranque de emergencia de ON-Bar
├── dbspace/<name>/
│   ├── L0.<jobid>.s<N>.zst    # stripe N nivel 0 (frame 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 en Profundidad

4.1 Modo xbsa — XBSA Nativo (Predeterminado en mode=auto)

El diferenciador estratégico. libpodheitor_xbsa.so implementa el ABI C completo de IBM XBSA, construido en Rust con memory-safety nativo. ON-Bar lo carga via BAR_BSALIB_PATH, convirtiendo a Bacula en un gestor de almacenamiento Informix de primera clase — sin staging, sin doble I/O, sin manipulación de FIFO.

Ventajas sobre todas las alternativas:

  • El paralelismo nativo de ON-Bar (BAR_MAX_BACKUP) se mapea 1:1 a streams PTCOMM
  • Acceso completo al catálogo de ON-Bar (sysmaster:bar_action, bar_object) para captura de LSN
  • Soporte para verificación post-backup de archecker a través del registro estándar de ON-Bar
  • Cero bytes escritos en el disco local del host FD (directorio de trabajo < 50 MB)

Funciones XBSA implementadas: BSAInit, BSABeginTxn, BSACreateObject, BSASendData, BSAEndTxn, BSATerminate, BSAGetData, BSAQueryObject, BSAEndData, BSADeleteObject

4.2 Modo onbar_psm — Fallback PSM

ON-Bar escribe en el HCL Primary Storage Manager (PSM) apuntando a un named pipe. El backend drena el pipe → PTCOMM. Se usa cuando la política de la organización prohíbe cargar bibliotecas XBSA de terceros.

4.3 Modo ontape — Legado/Simple

ontape -s -t STDIO -L 0|1|2. Solo servidor completo; sin granularidad por dbspace. Para desarrollo, instancias pequeñas o entornos sin ON-Bar configurado. Validado en E2E T16.

4.4 Modo logical_dbexport — Conversión Entre Versiones

dbexport <db> -ss -X -q transmitido a través de un pipeline asíncrono tar-on-the-fly → PTCOMM. La salida es un tar comprimido que contiene schema SQL + archivos de unload por tabla. Restaurable en cualquier versión de IDS con dbimport. Uso principal: migración de versión principal (12.10 → 14.10 → 15.0). Validado en E2E T12.

4.5 Modo snapshot — Quiesce LVM/ZFS

  1. Checkpoint onmode -c
  2. Pone los dbspaces en modo de backup (BAR_BLOCK_BACKUP=1)
  3. LVM lvcreate --snapshot / ZFS zfs snapshot
  4. Libera el modo de backup — ventana de quiesce < 1 segundo
  5. Transmite bloques del snapshot via PTCOMM (chunking por contenido para dedup)
  6. Captura logs lógicos archivados via onbar -b -l

Validado en E2E T13 usando LVM VG con loop-backed (ifxvg/ifxdata).

4.6 Mapeo de Nivel de Backup

Nivel Bacula Nivel ON-Bar Comportamiento del Plugin
Full onbar -b -L 0 Línea base nivel 0 del servidor completo. El manifest captura BAR_VERSION, INSTANCE_UUID, lista completa de dbspace, LSN.
Differential onbar -b -L 1 Acumulativo desde L0. Promueve automáticamente a Full si chain_health_check detecta cadena rota.
Incremental onbar -b -L 2 O solo log lógico Predeterminado: level_incr=logical_log para RPO inferior a un minuto. Envía solo archivos de log lógico recién cerrados.
VirtualFull (sintético) El plugin fusiona la cadena L0+L1+L2 en un nuevo stream L0 consumido por la consolidación de Bacula.

5. Capacidades de Replicación

5.1 Bootstrap HDR (High-Availability Data Replication)

Problema: Configurar un secundario HDR hoy requiere onmode -d primary, onmode -d secondary manuales, configuración de red personalizada, frecuentemente horas de trabajo del DBA.

Solución PodHeitor: Un único job de restauración con mode=ag_seed ag_target_role=hdr_secondary:

  1. Restaura la cadena de backup más reciente en el destino con equivalente a WITH NORECOVERY
  2. Ajusta DRAUTO/DRINTERVAL/DRTIMEOUT en el destino
  3. Ejecuta onmode -d primary <target_servernum> en el primario
  4. Ejecuta onmode -d secondary <primary_servernum> en el destino
  5. Valida que el secundario alcance el estado On-Line (Sec)

Validado en E2E T10 y T14.

5.2 Bootstrap RSS (Remote Standalone Secondary)

Mismo flujo con ag_target_role=rss. Usa onmode -d add RSS <name> en el primario + onmode -d RSS <primary_name> en el destino. Validado en E2E T11.

5.3 Attach SDS (Shared Disk Secondary)

Valida la topología de disco compartido, adjunta nuevo SDS via onmode -d set SDS PRIMARY <primary_name>.

5.4 Snapshot/Restauración de Topología Enterprise Replication (ER)

__ph_topology.json captura la malla ER completa: servidores, replicates, grids, suscripciones. En la restauración, cdr define server + cdr define replicate + cdr start replicate reconstituye la topología. Esencial para DR cuando toda la malla ER debe ser reconstruida.

5.5 Backup desde el Secundario (Descarga del Primario)

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

El plugin detecta el par HDR, se conecta al secundario y ejecuta ON-Bar allí. La CPU/I/O del primario permanece completamente sin impacto durante la ventana de backup.


6. Características Avanzadas

6.1 Envío Continuo de Log Lógico (RPO Inferior a Un Minuto)

Cuando continuous_log=yes, el backend crea un hilo daemon que:

  • Consulta sysmaster:syslogs cada continuous_log_interval segundos (predeterminado: 60s, mínimo: 5s)
  • Detecta archivos de log lógico recién cerrados (estado U → B)
  • Envía cada log atómicamente via un micro-job PTCOMM con verificación de integridad SHA-256
  • Detecta y alerta sobre brechas en la secuencia de log lógico

RPO alcanzado: < 1 minuto en laboratorio; < 5 segundos con continuous_log_interval=5.

Validado en E2E T09-F (base) + T09-I (continuo).

6.2 Recuperación 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

Opciones:

  • stop_at_lsn=<N> — detiene la reproducción del log lógico en un LSN específico
  • stop_at_time=<datetime> — detiene en un timestamp
  • stop_before_txn=<txnid> — detiene antes de una transacción específica (para rollback dirigido)

El plugin reproduce la cadena de backup L0 → L1 → L2 → logs lógicos hasta el punto elegido, luego ejecuta onmode -m para poner la instancia en línea. Validado en E2E T05.

6.3 Recuperación Instantánea (Montaje FUSE)

podheitor-informix: mode=instant instant_fuse_mount=/var/lib/podheitor-informix/instant
  1. Restaura encabezados de chunk y página 0 de cada dbspace
  2. El sistema de archivos FUSE presenta archivos de chunk virtuales respaldados por datos Bacula transmitidos de forma lazy
  3. IDS arranca via oninit -PHY contra los chunks montados via FUSE
  4. Instancia consultable en < 60 segundos
  5. Los bloques restantes se transmiten en lazy en segundo plano mientras IDS atiende consultas

Caso de uso: continuidad inmediata del negocio mientras la restauración completa continúa en segundo plano. Validado en E2E T17 usando /dev/loop-control + /dev/fuse en la VM 189.

6.4 Extracción de Tabla 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. Inicia un contenedor Podman/Docker Developer Edition efímero
  2. Restaura la cadena de backup completa en el sandbox
  3. Reproduce hasta el punto de tiempo solicitado
  4. Ejecuta dbexport/unload para la tabla de destino
  5. Copia la salida a single_item_export_dir
  6. Destruye el contenedor sandbox

Resultado: Tabla de destino extraída en < 5 min desde un backup de 100 GB, sin impacto en producción. Validado en E2E T07.

6.5 Aplicación de la Integridad de la Cadena

Por defecto (chain_health_check=yes), antes de cada Differential o Incremental:

  1. El plugin consulta sysmaster:bar_action para el LSN del nivel 0 precedente
  2. Valida la cadena de manifest (SHA-256 de cada sidecar)
  3. Compara con el historial de jobs del catálogo Bacula

Si la cadena está rota (job faltante, brecha de LSN, discrepancia de SHA), el job aborta antes de escribir cualquier dato, evitando un backup de falsa confianza. Los operadores son notificados con un error claro que explica la brecha.

6.6 Virtual Full (Full Sintético)

virtual_full=yes activa una fusión de cadena en el lado del servidor: el plugin lee los streams L0+L1+L2 de Bacula, los fusiona en un nuevo stream L0 que Bacula ingiere como un nuevo backup Full. Elimina cadenas largas de restauración (sin necesidad de aplicar Diff+Incr en la restauración) evitando otro backup completo desde el host IDS.

6.7 Recuperación de Desastre Bare-Metal

Cada backup captura automáticamente un RestoreObject que contiene:

  • onconfig (archivo ONCONFIG)
  • sqlhosts (definiciones de conectividad)
  • ixbar.<servernum> (archivo de arranque de emergencia de ON-Bar)

Al restaurar en un host nuevo sin instalación previa de IDS:

  1. Bacula restaura el RestoreObject primero
  2. El plugin reconstruye la estructura de directorios de IDS
  3. Ejecuta la inicialización estándar de oninit
  4. Restaura chunks y reproduce logs lógicos

No se requiere intervención manual del DBA. Validado en E2E T18.


7. Seguridad y Cumplimiento

7.1 Controles de Seguridad

Superficie Control Predeterminado
Configuración del plugin Ruta del passfile verificada para chmod 600; el backend aborta si es más permisivo Aplicado
Cadenas de conexión en logs Redacción por regex de secretos en toda la salida del logger PTCOMM redact_sysuser_passwords=yes
DBCRYPT keystore Solo blob cifrado (puntero de hash) almacenado en __ph_dbcrypt.json; la clave en texto plano NUNCA se registra ni almacena dbcrypt_capture=yes
Ruta de carga de la biblioteca XBSA Verificada contra /opt/podheitor-informix/lib/; LD_PRELOAD rechazado Aplicado
Directorio de trabajo /var/run/podheitor-informix modo 0700 propiedad de informix Aplicado
Contenedor sandbox Efímero, root --read-only + tmpfs; eliminado tras la extracción Aplicado
Montaje FUSE Solo lectura; montado como informix:informix modo 0700 Aplicado
Códigos de salida de ON-Bar Código distinto de cero genera fallo en el job chain_health_check=yes
IDs de correlación Todos los mensajes PTCOMM registrados con estructura con el JobId de Bacula Siempre

7.2 Soporte a DBCRYPT

La característica DBCRYPT de Informix cifra datos en reposo a nivel del motor de almacenamiento. PodHeitor:

  • Captura los metadatos del keystore (no la clave) en __ph_dbcrypt.json
  • Registra el label/alias de la clave para invocar el hook en la restauración
  • En la restauración, invoca el hook de passphrase de DBCRYPT antes de oninit
  • Resultado: las bases de datos cifradas en reposo hacen backup y restauración sin gestión manual de claves

Validado en E2E T15.

7.3 ARD Ransomware Hook

Cuando ransomware_hook=yes, el plugin ejecuta onstat -g ARD antes del backup y verifica:

  • Anomalías de entropía en bloques de log lógico escritos recientemente
  • Aumento repentino en las tasas de UPDATE/DELETE (Active Ransomware Detection, IDS 14.10+)

Si se detecta una anomalía, el backup aborta con una advertencia clara, impidiendo que el estado cifrado por ransomware sobrescriba un backup limpio.

7.4 Lista de Verificación de Endurecimiento de Permisos de Archivo

# Verificar permisos correctos tras la instalación
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. Observabilidad

8.1 Métricas Prometheus

Cuando metrics_endpoint=localhost:9100 está configurado, el plugin expone un endpoint estándar Prometheus /metrics.

Métrica Tipo Descripción
podheitor_ifx_job_bytes_total Counter Total de bytes transferidos en este job
podheitor_ifx_job_throughput_bytes_sec Gauge Tasa de transferencia actual
podheitor_ifx_dbspace_progress_pct Gauge Porcentaje de finalización por dbspace
podheitor_ifx_logship_lag_seconds Gauge Retraso en el envío de log lógico (modo continuous_log)
podheitor_ifx_onbar_exit_code Gauge Código de salida de la última invocación de ON-Bar
podheitor_ifx_archecker_pass Gauge 1=aprobado, 0=fallido (última ejecución de archecker)
podheitor_ifx_queue_depth Gauge Profundidad de la cola write-ahead de PTCOMM
podheitor_ifx_active_stripes Gauge Número actual de streams PTCOMM activos
podheitor_ifx_xbsa_buffer_pool_used Gauge Utilización del pool de buffers XBSA (bytes)

Ejemplo de consulta Grafana para throughput:

rate(podheitor_ifx_job_bytes_total[1m])

Ejemplo de consulta Grafana para alerta de retraso en el envío de log lógico:

podheitor_ifx_logship_lag_seconds > 300

8.2 Trazas OpenTelemetry OTLP

Cuando otel_endpoint=http://collector:4317 está configurado, el plugin emite spans estructurados a un colector compatible con OTLP (Jaeger, Tempo, Honeycomb, etc.).

Jerarquía 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. Guía de Instalación

9.1 Requisitos Previos

Host del Bacula File Daemon (co-ubicado con 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
  • Usuario/grupo informix con privilegios IDS estándar
  • Para mode=snapshot: LVM o ZFS en los dispositivos dbspace, losetup+lvcreate disponibles
  • Para mode=instant: /dev/fuse + /dev/loop-control accesibles
  • Para mode=table_level: Podman o Docker instalado

Bacula Director:

  • Director 15.0.x con las definiciones de FileSet y Job (ver §10)

9.2 Instalación en EL8/EL9 (RPM)

# Descargue el RPM desde releases/
rpm -ivh podheitor-informix-plugin-0.1.0-1.el9.x86_64.rpm

# Verificar instalación
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 Instalación en Ubuntu 22.04 / Debian 12 (DEB)

# Descargue el DEB desde releases/
dpkg -i podheitor-informix-plugin_0.1.0-1_amd64.deb

# Verificar
dpkg -L podheitor-informix-plugin

9.4 Configurar el Plugin

# Copiar y editar la configuración de ejemplo
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

Configuraciones mínimas requeridas:

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

[engine]
mode           = "auto"   # xbsa si onbar está disponible, de lo contrario ontape
compress       = "zstd"
compress_level = 3

9.5 Configurar el Entorno BAR

# /etc/sysconfig/podheitor-informix  (leído por onbar y el 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 Verificación Preflight

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

Salida 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 bacula-fd

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

10. Referencia de Configuración

10.1 Opciones de Backup

# Parámetro Predeterminado Tipo Descripción
Conexión
1 informixdir $INFORMIXDIR ruta Directorio de instalación de IDS
2 informixserver $INFORMIXSERVER string Nombre del servidor (entrada sqlhosts)
3 onconfig $ONCONFIG archivo Override del archivo onconfig
4 sqlhosts $INFORMIXSQLHOSTS archivo Override del archivo sqlhosts
5 user informix string Usuario del SO para ejecución
6 passfile ruta Archivo de credenciales (chmod 600)
7 kerberos_keytab ruta 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`
Alcance
9 dbspace * glob Qué dbspaces respaldar
10 include_dbspace glob (múltiple) Lista de inclusión explícita
11 exclude_dbspace tempdb* glob (múltiple) Lista de exclusión
12 database glob Filtro de BD en modo lógico
13 whole_system yes bool Servidor completo vs por dbspace
14 include_blobspace yes bool Blobspaces tradicionales
15 include_sbspace yes bool Sbspaces de smart-blob
16 include_external_dbspace no bool Dbspaces externos (solo lectura)
17 include_temp_dbspace no bool Dbspaces temporales
Niveles
18 level_full 0 int Mapea Bacula Full → ON-Bar nivel 0
19 level_diff 1 int Mapea Bacula Differential → nivel 1
20 level_incr logical_log enum `2 | logical_log`
21 force_full_after 7 int Promoción automática a Full tras N incrementales
22 chain_health_check yes bool Verificar cadena antes de Diff/Incr
23 simulate_full no bool Forzar nivel 0 independiente de la solicitud de Bacula
24 copy_only no bool Backup fuera de banda (no altera la cadena)
Rendimiento
25 bar_max_backup # núcleos CPU int Define BAR_MAX_BACKUP (streams ON-Bar paralelos)
26 stripes 1 int Striping en N vías por stream (1–32)
27 parallel_dbspaces # núcleos CPU int Backups de dbspace concurrentes
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 Profundidad del pool de buffers compartidos XBSA
31 xbsa_block_size 65536 bytes Tamaño de bloque XBSA
32 compress zstd enum `none | zstd | lz4`
33 compress_level 3 int Nivel de compresión ZSTD (1–22)
34 lob_chunked_streaming yes bool Chunking por contenido para LOBs sbspace
35 max_rate_kbps 0 int Limitación de ancho de banda por job (0=ilimitado)
36 cpu_quota 0 pct Cuota de CPU cgroup para el proceso backend
Envío de Log Lógico
37 continuous_log no bool Daemon de envío de log lógico en segundo plano
38 continuous_log_interval 60 segundos Intervalo de polling (mínimo 5)
39 continuous_log_archive_only yes bool Se detiene tras BAR_RETRY fallos
40 salvage_logs no bool onbar -l -s recuperación tras fallo
Integridad
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 Ejecutar archecker tras el backup
44 manifest_sha256 yes bool SHA256 por stream en el manifest
45 verify_lsn_chain yes bool Verificación cruzada de LSNs sysmaster:bar_action
Replicación
46 topology_snapshot yes bool Snapshot de topología 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 Respaldar desde el secundario HDR
Seguridad
50 dbcrypt_capture yes bool Capturar metadatos del DBCRYPT keystore
51 redact_sysuser_passwords yes bool Filtrar sysmaster:sysuser de las exportaciones
52 audit_export no bool Incluir registro de auditoría
53 ransomware_hook no bool Abortar ante detección de anomalía ARD
Observabilidad
54 metrics_endpoint host:puerto Endpoint Prometheus /metrics
55 otel_endpoint URI Colector de trazas OTLP
56 progress_report_interval 30 segundos Cadencia del progreso en el log del job
Operacional
57 dry_run no bool Solo preflight (sin escritura)
58 abort_on_chain_break yes bool Rechazar Diff/Incr si la cadena está rota
59 working_dir /var/run/podheitor-informix ruta Directorio FIFO + sentinel
60 config_file /opt/bacula/etc/podheitor-informix.conf ruta Config TOML externa
61 cluster_id string Separador de espacio de nombres multi-cluster
62 bar_ixbar_path $INFORMIXDIR/etc/ixbar.<servernum> ruta Archivo de arranque de emergencia de ON-Bar
63 restore_object yes bool Almacenar onconfig+sqlhosts+ixbar como RestoreObject
64 virtual_full no bool Full sintético desde la cadena L0+L1+L2

10.2 Opciones de Restauración

# Parámetro Predeterminado Descripción
1 mode auto `auto | whole_server | in_place | new_instance | single_dbspace | table_level | instant | ag_seed | logical_import`
2 informixdir $INFORMIXDIR Directorio de instalación IDS de destino
3 informixserver (nombre de origen) Nuevo nombre de servidor IDS
4 onconfig $ONCONFIG Archivo onconfig de destino
5 dbspace_relocation_map Archivo JSON para remapeo lógico→físico de chunk path
6 target_root_dbspace Override del chunk path del rootdbs
7 target_dbspace Destino en modo single-dbspace
8 dbspace * Qué dbspaces restaurar
9 database * Filtro de BD en modo lógico
10 table (múltiple) Tablas de destino para mode=table_level
11 column_filter Filtro opcional a nivel de columna (table_level)
12 recovery yes WITH RECOVERY (sí) vs NORECOVERY (para seed HDR)
13 stop_at_lsn Detiene la reproducción del log lógico en el LSN
14 stop_at_time Detiene la reproducción del log lógico en el timestamp
15 stop_before_txn Detiene antes de una transacción específica
16 point_in_time_tz UTC Zona horaria para stop_at_time
17 physical_only no Restaurar solo físicamente (omitir reproducción de log lógico)
18 drop_existing no `no | yes | only_if_match`
19 tail_log_before yes Recuperar logs lógicos actuales antes de restauración destructiva
20 verify_post archecker `no | oncheck | archecker | both`
21 dry_run no Preflight (validar manifest + rutas, sin escritura)
22 parallel_streams (valor del backup) Streams de restauración concurrentes
23 stripes (valor del backup) Coincidir stripes del backup
24 parallel_dbspaces # núcleos CPU Restauraciones de dbspace concurrentes
25 instant_fuse_mount /var/lib/podheitor-informix/instant Punto de montaje FUSE para recuperación instantánea
26 sandbox_docker_image icr.io/informix/informix-developer-database:latest Imagen sandbox para table_level
27 single_item_export_dir /var/lib/podheitor-informix/extracted Salida para table_level
28 ag_target_role `hdr_secondary | rss | sds`
29 ag_primary_host Primario al que conectarse tras el seed
30 dbcrypt_keystore Override de la ubicación del DBCRYPT keystore
31 dbcrypt_passphrase_file Passphrase para keystore sellado
32 progress_report_interval 30 Cadencia de progreso
33 regexwhere Reubicación estándar por regex de Bacula

10.3 Ejemplos de FileSet

Backup básico del servidor completo (XBSA, predeterminados):

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

Dbspaces específicos, con stripe y verificación:

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

Envío continuo de log lógico (RPO inferior a un minuto):

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

Migración entre versiones:

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 rendimiento 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 desde el secundario HDR (descarga del primario):

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

10.4 Definiciones 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. Procedimientos de Restauración y Casos de Uso

11.1 Restauración Completa del Servidor (In-Place)

bconsole> restore client=ifx-prod-fd
[navegar y 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 Restauración a Nueva Instancia (Recuperación 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 Recuperación 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 Recuperación Instantánea

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

Línea de tiempo esperada:

  • 0–15s: restaura encabezados de chunk + página 0
  • 15–60s: IDS arranca contra el montaje FUSE
  • 60s+: instancia en línea, streaming lazy continúa

11.5 Extracción de Tabla 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 Secundario HDR

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

11.7 Migración Entre Versiones (12.10 → 15.0)

Paso 1 — backup del origen (12.10):

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

Paso 2 — restauración en el destino 15.0:

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

12. Informes de Rendimiento

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

Tamaño de BD Modo stripes parallel_dbspaces Throughput Tiempo 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 Comparación de Tasa de Compresión

Tipo de Dato zstd-3 zstd-9 lz4 none
OLTP (mixto) 2,8× 3,5× 2,2×
Texto/documentos 6,2× 8,0× 4,5×
Dbspaces del sistema IDS 3,1× 4,0× 2,4×
BLOBs binarios 1,05× 1,05× 1,02×

Recomendación: compress=zstd compress_level=3 para la mayoría de los entornos. Use lz4 para hosts con CPU limitada; zstd compress_level=9 para reducir el costo de almacenamiento de backup.

12.3 Objetivos de RPO / RTO

Configuración RPO RTO
Solo Full diario 24 h 1–4 h
Full semanal + Diff diario 24 h 30 min–2 h
Full semanal + Diff diario + envío de log de 5 min < 5 min 1–3 h
Envío continuo de log lógico (predeterminado) < 1 min 1–3 h
Envío continuo de log lógico (interval=5) < 5 s 1–3 h
Secundario HDR + backup nocturno segundos < 5 min (failover)
Recuperación instantánea (FUSE) igual que el backup < 60 s
Snapshot + envío de log lógico < 30 s 30 min–2 h

12.4 Consumo de Memoria

Configuración predeterminada: xbsa_buffer_count=8 × xbsa_block_size=64KiB × stripes=1 × parallel_dbspaces=# núcleos

stripes parallel_dbspaces Techo de memoria
1 1 0,5 MB
4 4 8 MB
8 8 32 MB
32 16 256 MB

Consumo de disco en el host FD: < 50 MB (FIFOs + sentinels + solo manifest). Nunca se escriben archivos de staging.


13. Matriz de Compatibilidad

13.1 Matriz de Versión IDS × Característica

Característica IDS 12.10.FC12 IDS 14.10 IDS 15.0
mode=xbsa
mode=ontape
mode=onbar_psm
mode=logical_dbexport
mode=snapshot
Envío continuo de log lógico
PITR (stop_at_lsn)
Bootstrap HDR
Bootstrap RSS
ARD ransomware hook ❌ (< 14.10)
Captura DBCRYPT
Virtual Full
Recuperación instantánea (FUSE)

13.2 SO × Disponibilidad de Paquete

SO RPM (el9) DEB Notas
Oracle Linux 9 Objetivo GA principal
RHEL 9 / Rocky 9 / AlmaLinux 9 GA
RHEL 8 / Rocky 8 GA (RPM el9 compatible)
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 Compatibilidad con Bacula

PodHeitor Backup Soporte
15.0.3 ✅ Objetivo GA principal
15.0.x
14.x ✅ (PTCOMM compatible)
< 14 ⚠️ No probado

14. Guía de Dimensionamiento

14.1 Requisitos Mínimos

Componente Mínimo Notas
RAM del host FD 1 GB Pool de buffers XBSA en predeterminados ≈ 0,5 MB
CPU del host FD 2 núcleos Compresión + 1 stream paralelo
Disco del host FD 50 MB Directorio de trabajo (FIFOs + solo manifest)
Disco SO del host FD Sin staging; nunca escribe datos en el disco local
Red FD→SD 100 Mbps Funcional mínimo

14.2 Dimensionamiento Recomendado para Producción

Entorno IDS RAM FD CPU FD Red stripes parallel_dbspaces
Pequeño (< 100 GB, dbspace único) 4 GB 4 núcleos 1 Gbps 2 1
Mediano (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, muchos dbspaces) 32 GB 32 núcleos 25+ Gbps 16–32 16+

14.3 Dimensionamiento del Bacula Storage Daemon

Tasa de cambio diaria Pool de almacenamiento I/O disco SD Notas
< 50 GB/día 4 TB en disco SAS/SATA Pools estándar
50–500 GB/día 20 TB en disco SSD recomendado Habilitar compresión zstd en el SD también
> 500 GB/día NAS/SAN o cinta Alto throughput Considerar el plugin Bacula Dedup SD

15. Integración con Bacularis

Bacularis ofrece una interfaz web sobre PodHeitor Backup. El plugin PodHeitor Informix incluye un bacularis/plugin-descriptor.json que:

  • Agrega «Informix» como tipo de recurso de cliente en el asistente de backup de Bacularis
  • Renderiza los 64 parámetros de backup como campos de formulario con validación
  • Muestra el explorador de restauración con vista en árbol del espacio de nombres IDS-aware (/@informix/)
  • Muestra los resultados de validación E2E en línea

Para activar el descriptor:

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

16. Migración desde TSM/ISP y ON-Bar PSM

16.1 Migrando desde IBM Spectrum Protect (TSM/ISP)

Consulte MIGRATION_FROM_TSM.md para el procedimiento completo. Resumen:

  1. Instale PodHeitor Backup + PodHeitor en el host IDS
  2. Ejecute backups paralelos (TSM + PodHeitor) durante un ciclo completo de backup para validar
  3. Confirme la integridad de la cadena via archecker + manifest
  4. Defina BAR_BSALIB_PATH para apuntar a la biblioteca PodHeitor (reemplaza la biblioteca TSM)
  5. Retire el cliente TSM

Diferencia clave: El BAR_BSALIB_PATH de TSM apunta a su propia biblioteca. La biblioteca de PodHeitor es un reemplazo directo — ON-Bar no nota la diferencia.

16.2 Migrando desde Scripts ON-Bar PSM

Consulte MIGRATION_FROM_PSM.md. Resumen:

  1. Identifique los valores actuales de BAR_MAX_BACKUP, BAR_XFER_BUF_SIZE y ventanas de backup
  2. Cree un FileSet PodHeitor equivalente con mode=onbar_psm como paso de transición
  3. Valide un ciclo completo de backup
  4. Cambie a mode=xbsa (predeterminado) para streaming directo
  5. Elimine los scripts PSM y la asignación de disco de staging

Ahorro de almacenamiento al eliminar el staging: El PSM escribe en disco (archivos .bak) antes de que Bacula los recoja. PodHeitor transmite directamente, eliminando 1× conjunto de backup en espacio en disco.


17. Resolución de Problemas

17.1 Plugin No Cargado

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

Causa: El .so no está en el directorio de plugins de Bacula. Solución: Verifique que /opt/bacula/plugins/podheitor-informix-fd.so exista; compruebe que bacula-fd.conf tenga Plugin Directory = /opt/bacula/plugins.

17.2 Fallo en la Carga de la Biblioteca XBSA

[ERROR] BAR_BSALIB_PATH not set or library not found

Causa: BAR_BSALIB_PATH no está configurado en /etc/sysconfig/podheitor-informix. Solución:

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

17.3 ON-Bar Sale con Código Distinto de Cero

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

Causa: Error de ON-Bar. Revise el archivo de log. Solución: Típicamente: INFORMIXSERVER incorrecto, IDS no está en ejecución, o sysmaster.bar_action bloqueado.

cat /tmp/onbar_<jobid>.log
onstat -g ses   # verificar sesiones IDS activas

17.4 Fallo en la Verificación de Integridad de la Cadena

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

Causa: El job Differential/Incremental abortó porque el Full o Diff precedente no está presente. Solución: Ejecute un nuevo backup Full. Si el Full existe y el SHA es incorrecto, el volumen de backup puede estar corrupto — investigue el dispositivo SD.

17.5 Brecha en el Envío Continuo de Log Lógico

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

Causa: El archivo de log lógico 151 nunca fue cerrado (error de IDS) o ya fue sobrescrito. Solución:

onbar -l -s   # recuperar logs del disco
# O definir salvage_logs=yes en la configuración

17.6 Comandos de Diagnóstico

# Verificar estado de IDS
onstat -

# Verificar historial de backup ON-Bar
onstat -g bac

# Verificar estado del log lógico
onstat -l

# Ejecutar archecker manualmente en el último backup
archecker -b -v -f /@informix/<UUID>/__ph_manifest.json

# Verificar runtime del 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

Versión Objetivo Características Principales
v0.1.0 GA 2026-04-29 Soporte completo Linux x86_64, los 22 escenarios E2E APROBADOS
v0.2.0 2026 T3 Soporte AIX 7.x (ppc64), proveedor de snapshot NetApp ONTAP, compatibilidad OneDB 2.x
v0.3.0 2026 T4 Windows Server FD, Linux ARM64, restauración ER multi-mesh
v0.4.0 2027 T1 Descriptor de formulario de plugin Bacularis UI, FD sidecar Kubernetes
v0.5.0 2027 T2 Replicación lógica de aplicación entre versiones (12.10 → 14.10 streaming en vivo)
v1.0.0 2027 T3 Soporte completo de plataforma (Linux + AIX + Windows + ARM64) + Bacularis UI

19. Evidencias de Validación (Resultados E2E)

19.1 Entorno de Laboratorio

Componente Detalles
Bacula Director 192.168.15.105, Community 15.0.3, OL9
IDS Primario (VM 186) 192.168.15.130, ifxprod, IDS 15.0.1.0.3 Developer Edition en Docker
IDS Secundario HDR (VM 187) 192.168.15.131, ifxhdr, IDS 15.0.1.0.3
IDS Secundario 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 con loop-backed (ifxvg) + FUSE3

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

ID Escenario JobId Nivel Resultado
T01 Backup Full del servidor completo 6358 Full ✅ APROBADO
T02-F Cadena Full+Diff+Incr — Full 6359 Full ✅ APROBADO
T02-D Cadena Full+Diff+Incr — Differential 6360 Differential ✅ APROBADO
T02-I Cadena Full+Diff+Incr — Incremental 6361 Incremental ✅ APROBADO
T03 Restauración in-place (restore_object=yes) 6362 Full ✅ APROBADO
T04 Restauración a nueva instancia 6363 Full ✅ APROBADO
T05-F Cadena PITR — baseline Full 6364 Full ✅ APROBADO
T05-I Cadena PITR — Incremental (log-ship) 6365 Incremental ✅ APROBADO
T06 Dbspace único (solo rootdbs) 6366 Full ✅ APROBADO
T07 Backup y extracción a nivel de tabla 6367 Full ✅ APROBADO
T08 Backup paralelo con 4 stripes 6368 Full ✅ APROBADO
T09-F Envío continuo de log lógico — base 6369 Full ✅ APROBADO
T09-I Envío continuo de log lógico — Incremental 6370 Incremental ✅ APROBADO
T10 Bootstrap de secundario HDR 6371 Full ✅ APROBADO
T11 Bootstrap de secundario RSS 6372 Full ✅ APROBADO
T12 Exportación lógica (mode=logical_dbexport) 6373 Full ✅ APROBADO
T13 Snapshot LVM (snapshot_vg=ifxvg) 6374 Full ✅ APROBADO
T14 Seeding HDR via transporte Bacula 6375 Full ✅ APROBADO
T15 Sidecar de metadatos DBCRYPT 6376 Full ✅ APROBADO
T16 Fallback explícito ontape 6377 Full ✅ APROBADO
T17 Recuperación instantánea (loopdev+FUSE) 6378 Full ✅ APROBADO
T18 DR RestoreObject bare-metal 6379 Full ✅ APROBADO

APROBADO=22 / FALLIDO=0 / OMITIDO=0 / TOTAL=22 — 100% de aprobación


Contacto y Licenciamiento

Licenciamiento

PodHeitor Informix es software propietario, distribuido por suscripción. Para condiciones comerciales, demostración técnica o diagnóstico gratuito de 30 minutos, habla con el equipo por los canales abajo.

¿Listo para evaluar?


Plugin PodHeitor de Backup, Replicación y Conversión de Informix para Bacula — v0.1.0 GA © 2026 Heitor Faria. Todos los derechos reservados.

Disponível em: pt-brPortuguês (Portugués, Brasil)enEnglish (Inglés)esEspañol

Deja una respuesta