Skip to content

pbs-drill.sh — restore drill automatizado desde PBS

Last updated: 2026-04-26

Script en proxmox-50:/usr/local/bin/pbs-drill.sh que valida automáticamente que los backups PBS son realmente restaurables, no solo presentes/verified.

Por qué

PBS verify-jobs comprueban integridad de chunks (checksum), no que la restauración funcione end-to-end. Es posible que un backup verifique OK y aún así no arranque por config corrupta, FS inconsistente, o cambios en host (kernel/storage). El drill lo demuestra restaurando de verdad y arrancando.

Qué hace

  1. Selecciona random target del pool según tipo:
  2. lxc: pool (100 123 155 200 251) — exclude 186 (PBS mismo). (Corregido 2026-07-12: antes apuntaba a 249/253 ya decomisionados.)
  3. vm: pool (171 208).
  4. Encuentra el último backup PBS de ese guest.
  5. Restaura a VMID 999 (drill temporal). Sin USB pinning para VMs (HA), sin IP estática (sin colisión de red).
  6. Arranca el guest.
  7. Verifica running status tras 8s (LXC) o 30s (VM).
  8. Trap EXIT siempre destruye VMID 999 — sin importar el resultado.
  9. Notifica resultado a Telegram con duración y backup timestamp.

Cron

/etc/cron.d/pbs-drill en proxmox-50:

# LXC drill mensual día 1 a las 05:05
5 5 1 * * root /usr/local/bin/pbs-drill.sh lxc

# VM drill trimestral (Ene/Abr/Jul/Oct) día 15 a las 05:05
5 5 15 1,4,7,10 * root /usr/local/bin/pbs-drill.sh vm

= 12 LXC drills + 4 VM drills por año. ~30 min agregados de trabajo en background.

Logs

  • Stdout/stderr: /var/log/pbs-drill.log (no rota — pequeño, no preocupa).
  • Telegram: cada ejecución manda mensaje con resultado.

Test manual

ssh [email protected] /usr/local/bin/pbs-drill.sh lxc
# o vm para drill VM

Validación inicial

Ejecutado manualmente 2026-04-26 15:41: target lxc-253, backup 2026-04-25 23:00, ✅ OK en 249s.

Failure modes

  • VMID 999 ya en uso al arrancar → script lo destruye antes (idempotente).
  • Backup no encontrado → notify ❌ + exit 3.
  • Restore falla → notify ❌ + cleanup vía trap.
  • Start falla → notify ❌ + cleanup vía trap.

Tradeoffs

  • No verifica integridad de datos dentro del guest (DB consistency, app state). Solo "el guest arranca". Para tests más profundos: drill manual con pct exec 999 -- <verify-cmd> ad-hoc.
  • VMID 999 hardcoded — si añades en el futuro un guest que use 999, cambiar DRILL_VMID en script.
  • Ejecuta solo en proxmox-50. Si pmx-50 muere, el cron muere con él. Plan: tras failover documentado, recrear cron en pmx2-51 manualmente.