Skip to content

PBS restore drill

Proxmox Backup Server vive en LXC 186 (pmx-50, .186), datastore main, ~57% usado. Hace backups diarios de todas las VMs/LXCs según jobs.cfg.

El restore drill mensual valida que los backups son realmente restorables — "un backup que nunca se restauró no es un backup".

Cron actual

Script pbs-drill.sh corre día 5 de cada mes en pmx-50. Logs en /var/log/pbs-drill.log. Resultado push a Telegram via n8n.

Drill automatizado (lo que corre el cron)

pbs-drill.sh (resumen):

  1. Crea un LXC temporal pct restore 999 <snapshot> --storage local-zfs.
  2. Arranca el LXC.
  3. Verifica que un servicio canario responde (depende del LXC restaurado).
  4. Destruye el LXC temporal.
  5. Reporta éxito/fallo.

```bash

Trigger manual del drill

ssh pmx-50 '/usr/local/bin/pbs-drill.sh' ```

Restore manual de una VM/LXC

Vía PBS UI

  1. Abrir https://pbs.monxas.casa/ (CF Access).
  2. Datastore main → seleccionar el guest (e.g. ct/200).
  3. Click en un snapshot → Restore.
  4. Target: nodo destino, storage destino, VMID nuevo (para no pisar el original).
  5. Confirmar.

Vía CLI desde el nodo Proxmox

Listar snapshots disponibles:

bash ssh pmx-50 'pvesm list pbs-main --content backup --vmid 200'

Restore a un VMID temporal:

bash ssh pmx-50 'pct restore 999 pbs-main:backup/ct/200/2026-05-18T03:00:00Z --storage local-zfs --rootfs local-zfs:32'

Para VMs (qm restore):

bash ssh pmx-50 'qmrestore pbs-main:backup/vm/208/2026-05-18T03:00:00Z 998 --storage local-zfs'

Restore "file-level" (recuperar un archivo concreto)

PBS soporta montar el snapshot como FUSE para extraer archivos sin restore completo:

```bash ssh pmx-50 'proxmox-backup-client mount --repository @pbs@192.168.0.XXX:main vm/208/2026-05-18T03:00:00Z /mnt/restore-tmp'

Copiar lo que necesites

ssh pmx-50 'cp /mnt/restore-tmp/path/to/file /destino/'

Desmontar

ssh pmx-50 'proxmox-backup-client unmount /mnt/restore-tmp' ```

Verificación post-restore

Después de un restore "real" (no drill):

bash ssh pmx-50 'pct start 999' # o qm start ssh pmx-50 'pct exec 999 -- systemctl is-system-running' ssh pmx-50 'pct exec 999 -- ip a' # ¡cuidado IP duplicada con el original!

IP duplicada

El LXC/VM restaurado conserva la IP del original. Si la VM origen sigue viva, vas a tener conflicto ARP. Cambia la IP antes de arrancar el restore, o arranca con red desconectada (--net0 name=eth0,bridge=vmbr0,link_down=1).

Capacidad del datastore

bash ssh pmx-50 'pct exec 186 -- proxmox-backup-manager datastore show main'

Métrica clave: available. Si baja de 20% → revisar prune policy:

bash ssh pmx-50 'pct exec 186 -- proxmox-backup-manager prune-job list'

Política actual (estándar): keep last 3, daily 7, weekly 4, monthly 6.

Troubleshooting

Síntoma Causa Fix
Restore falla con chunk store error Bit-rot en datastore proxmox-backup-manager datastore verify main
Restore lentísimo (<10MB/s) Network entre PBS y nodo destino saturada Verificar iperf3 entre nodos
Sin snapshots recientes Cron vzdump paró journalctl -u vzdump.timer en pmx-50
403 permission denied Token PBS expirado o sin permisos Regenerar token en UI → actualizar /etc/pve/storage.cfg

Plan futuro

  • Test restore fuera del cluster (a un Proxmox standalone aislado) — valida que los backups son portables. Pendiente.
  • Off-site backup PBS (sync a NAS externo o cloud) — pendiente, riesgo evaluado en ADR-0007.