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¶
- Selecciona random target del pool según tipo:
lxc: pool(100 123 155 200 251)— exclude 186 (PBS mismo). (Corregido 2026-07-12: antes apuntaba a 249/253 ya decomisionados.)vm: pool(171 208).- Encuentra el último backup PBS de ese guest.
- Restaura a VMID
999(drill temporal). Sin USB pinning para VMs (HA), sin IP estática (sin colisión de red). - Arranca el guest.
- Verifica
runningstatus tras 8s (LXC) o 30s (VM). - Trap EXIT siempre destruye VMID 999 — sin importar el resultado.
- 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_VMIDen 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.