Runbook: Backup fallido¶
| Gravedad | 🟡 Media — no hay riesgo inmediato, pero la ventana de vulnerabilidad crece |
| Tiempo de respuesta | < 4 horas (si falla 2 noches seguidas, pasar a 🔴) |
| Roles implicados | Mnemósine (backups), Argos (detección), Terminus (si hay que restaurar) |
Un backup que falla una noche es un aviso. Un backup que falla dos noches seguidas es una emergencia: cada hora sin copia aumenta lo que se puede perder.
Síntomas¶
- Alerta en ntfy topic
backup: "❌ PBS job fallido" - Alerta en ntfy topic
backup: "❌ restic offsite fallido" - PBS UI muestra el último job en rojo
- Dashboard de Grafana: última verificación de backup > 24h
Diagnóstico¶
flowchart TD
A([Alerta: backup fallido]) --> B[Diagnóstico]
B --> B1[Verificar PBS UI:\núltimo job fallido]
B1 --> B2[Comprobar espacio:\nzpool list backuppool]
B2 --> B3[Verificar conectividad\ncon Thoth restic offsite]
B3 --> B4[Revisar logs del\njob fallido en PBS]
B4 --> B5[Comprobar LXCs corriendo\ndurante ventana backup]
B5 --> B6[Verificar snapshots ZFS\nhuérfanas]
B6 --> C{¿Causa\nencontrada?}
C -->|Sí| D[Resolución]
C -->|No| B
D --> D1[Problema de espacio:\nliberar o ampliar pool]
D1 --> D2[Conectividad restic:\nverificar túnel a Thoth]
D2 --> D3[LXC no responde:\narrancar y backup manual]
D3 --> D4[Fallo persistente:\nreducir alcance backup]
D4 --> D5[Resolver y verificar\nrestore con nuevo backup]
D5 --> E[Verificación]
E --> E1[PBS UI muestra\njob en verde]
E1 --> E2[ntfy confirma\nbackup completado]
E2 --> E3[Restore de prueba\nsemanal sin errores]
E3 --> E4[Grafana: última\nverificación < 24h]
E4 --> F{¿Backup\nestable?}
F -->|Sí| G[Prevención]
F -->|No| D
G --> G1[Monitorizar espacio\ncon alerta al 80%]
G1 --> G2[Verificación semanal\nautomática de restore]
G2 --> G3[Backup manual antes\nde tofu o ansible]
G3 --> H([Fin])
- [ ] Verificar PBS UI:
https://pbs.sc→ Dashboard → ver último job y su estado. Anotar el ID del job fallido. - [ ] Comprobar espacio en disco del pool de backup:
zpool list backuppool— ¿USED > 80%? - [ ] Listar snapshots de PBS locales y su consumo:
proxmox-backup-manager snapshot listen el host de PBS - [ ] Verificar conectividad con Thoth para restic offsite:
ping -c 3 thoth.scyssh thoth "df -h /backup/restic" - [ ] Revisar logs del job fallido en PBS:
https://pbs.sc→ Administration → Tasks → filtrar por "failed" - [ ] Ver logs de restic en Ra:
journalctl -u restic-backup --since "24 hours ago" --no-pager - [ ] Comprobar que los LXC a respaldar estaban corriendo durante la ventana de backup (02:00-04:00):
pct listen Proxmox - [ ] Verificar snapshots ZFS huérfanas consumiendo espacio:
zfs list -t snapshot -o name,used,creation | grep -v '@backup' | tail -30 - [ ] Verificar estado de salud de los pools ZFS:
zpool status rpoolyzpool status backuppool— ¿algún disco con errores?
Resolución¶
-
[ ] Problema de espacio en backuppool:
# Ver qué consume más espacio zfs list -o name,used,refer -r backuppool | sort -k2 -h | tail -20 # Eliminar snapshots de PBS antiguas (retención: 30 días) proxmox-backup-manager snapshot prune <datastore> --keep-daily 30 # Si no basta, identificar y eliminar backups de LXC fuera de servicio proxmox-backup-client list --repository <IP_PBS>:<datastore> # Luego eliminar grupos antiguos desde la UI de PBS -
[ ] Problema de conectividad con Thoth (restic offsite):
# Verificar que el túnel WireGuard a Thoth está activo wg show wg-thoth # Si no hay handshake, reiniciar el túnel wg-quick down wg-thoth && wg-quick up wg-thoth # Reintentar backup manual restic restic -r sftp:thoth:/backup/restic backup /datos/criticos # Verificar que el disco USB en Thoth tiene espacio ssh thoth "df -h /backup" -
[ ] LXC no responde o no se pudo respaldar:
-
[ ] Fallo persistente en el backup automático:
- Reducir el alcance: respaldar solo LXC Tier A (Authentik, Forgejo, NetBird, Pi-hole, Caddy) y Tier B
- Lanzar backup manual de los LXC críticos uno por uno:
- Si el backup manual funciona: reiniciar el servicio de PBS (
systemctl restart proxmox-backup) y esperar al próximo ciclo programado -
Si ni el backup manual funciona: verificar integridad del datastore de PBS:
-
[ ] Una vez resuelto: forzar un restore de prueba con el nuevo backup para confirmar que es íntegro:
Verificación¶
- PBS UI muestra el último job en verde con timestamp < 24h
- ntfy topic
backupconfirma "✅ Backup completado" para PBS y restic zpool list backuppoolmuestra espacio libre > 20%restic snapshots --repo sftp:thoth:/backup/resticmuestra último snapshot < 24h- Restore de prueba semanal se ejecuta sin errores (verificar en ntfy o Grafana)
- Dashboard de Grafana: última verificación < 24h
Si no funciona¶
- Fallo de hardware en el disco de backup: si
zpool status backuppoolmuestra errores de lectura/escritura, sustituir el disco físicamente. Mientras tanto, priorizar restic offsite a Thoth. - Thoth inaccesible (ISP caído en Garganta la Olla): esperar a que vuelva la conectividad. Los backups locales (PBS + rsync a Horus) mantienen la estrategia 3-2-1 incluso sin la copia offsite temporalmente.
- Datastore de PBS corrupto:
proxmox-backup-manager verify <datastore>. Si hay corrupción irrecuperable, recrear el datastore y lanzar backup completo desde cero. Avisar en Matrix. - Tres noches seguidas sin backup: escalar a 🔴 Crítica. Convocar al rol Terminus. Prioridad absoluta hasta resolver.
Rollback¶
No aplica un rollback de backup. Si un cambio en la configuración de PBS causó el fallo:
# Restaurar configuración de PBS desde ZFS snapshot
zfs rollback rpool/config/pbs@<fecha-antes-del-cambio>
systemctl restart proxmox-backup
Prevención¶
- Monitorizar espacio en backuppool con alerta al 80% (regla en Grafana:
zfs_used_percent > 80) - Verificación semanal automática de restore de un LXC Tier B (systemd timer:
pbs-verify.timer) - Backup manual antes de cualquier
tofu applyoansible-playbookque afecte a infraestructura - Healthcheck de conectividad con Thoth cada 6 horas:
ping -c 3 thoth.sccon alerta en ntfy si falla - Mantener el principio 3-2-1: si falla PBS, restic sigue protegiendo. Si falla restic, PBS + rsync mantienen 2 copias locales. Si fallan dos, el tercero aguanta hasta que se resuelva.