Skip to content

ZFS snapshot rollback

Cómo usar los snapshots ZFS de zfs-ha (pool replicado entre pmx-50 y pmx-51) para deshacer un cambio destructivo en un LXC o VM.

Rollback es destructivo

zfs rollback borra todos los cambios posteriores al snapshot. Si dudas, primero zfs clone a un dataset nuevo, inspecciona, y luego decide.

Snapshots existentes

Antes del plan de cohesión (2026-05-19) se tomaron snapshots protectores @pre-cohesion-20260519 en ambos nodos para todos los LXCs/VMs.

Verificado 2026-08-01 — no des por hecho ni el nodo ni la existencia

  • Estos snapshots tienen ya ~2.5 meses, muy por encima de los "30 días" que la sección de Limpieza más abajo sugiere como umbral — candidatos a purgar salvo que sigan sirviendo de punto fijo.
  • subvol-200-disk-0@pre-cohesion-20260519 vive en pmx-51 (nodo proxmox2), no en pmx-50 — LXC 200 (n8n) corre hoy en pmx-51, no en pmx-50 como sugieren los ejemplos de abajo. Comprobar siempre con pct list/qm list en ambos nodos antes de lanzar el rollback (ver sección "Replicación entre nodos").
  • vm-208-disk-0@pre-cohesion-20260519 ya no existe en ninguno de los dos nodos (los discos vm-208-disk-0/vm-208-disk-1 siguen ahí, pero sin ese snapshot) — el ejemplo de "Rollback de una VM" abajo es sólo ilustrativo de la sintaxis, no un comando ejecutable tal cual hoy. Listar con zfs list -t snapshot antes de usarlo.
# Listar todos los snapshots con el tag
ssh pmx-50 'zfs list -t snapshot -o name,creation | grep pre-cohesion'
ssh pmx-51 'zfs list -t snapshot -o name,creation | grep pre-cohesion'

Salida típica:

zfs-ha/subvol-200-disk-0@pre-cohesion-20260519   2026-5-19  3:14
zfs-ha/vm-208-disk-0@pre-cohesion-20260519   2026-5-19  3:14
...

Rollback de un LXC entero

1. Parar el container

ssh pmx-50 'pct stop 200'

2. Verificar que el snapshot existe en este nodo

ssh pmx-50 'zfs list -t snapshot zfs-ha/subvol-200-disk-0@pre-cohesion-20260519'

3. Rollback

ssh pmx-50 'zfs rollback zfs-ha/subvol-200-disk-0@pre-cohesion-20260519'

Si hay snapshots más recientes que el target, ZFS rehúsa por defecto. Forzar con -r (recursivo) elimina los intermedios:

ssh pmx-50 'zfs rollback -r zfs-ha/subvol-200-disk-0@pre-cohesion-20260519'

4. Re-arrancar

ssh pmx-50 'pct start 200'
ssh pmx-50 'pct status 200'

Rollback de una VM

Igual pero con qm y dataset distinto:

ssh pmx-50 'qm stop 208'
ssh pmx-50 'zfs rollback -r zfs-ha/vm-208-disk-0@pre-cohesion-20260519'
ssh pmx-50 'qm start 208'

VMs suelen tener varios discos (disk-0, disk-1, disk-2). Hay que rollback cada uno si quieres consistencia total.

Alternativa NO destructiva: clone + inspect

Si solo quieres ver el estado pasado sin perder el actual:

# Clonar snapshot a un dataset nuevo
ssh pmx-50 'zfs clone zfs-ha/subvol-200-disk-0@pre-cohesion-20260519 zfs-ha/subvol-200-disk-0-inspect'

# Montar y leer (el clone aparece como /zfs-ha/subvol-200-disk-0-inspect)
ssh pmx-50 'ls /zfs-ha/subvol-200-disk-0-inspect/'

# Cuando termines, destruir el clone
ssh pmx-50 'zfs destroy zfs-ha/subvol-200-disk-0-inspect'

Crear un snapshot ad-hoc antes de un cambio

ssh pmx-50 'zfs snapshot zfs-ha/subvol-200-disk-0@pre-change-$(date +%Y%m%d-%H%M)'

Replicación entre nodos

zfs-ha está replicado vía zfs send | zfs receive (cron en pmx-50 cada N min). Si haces rollback en pmx-50 y el LXC está pinned ahí, fine. Si está en pmx-51 (failover HA), rollback debe hacerse en pmx-51, no pmx-50.

Verificar dónde corre actualmente:

ssh pmx-50 'pct list | grep 200'
ssh pmx-51 'pct list | grep 200'

Limpieza de snapshots viejos

Tras confirmar que un cambio grande es estable (e.g. 30 días post F4):

# Listar candidatos
ssh pmx-50 'zfs list -t snapshot | grep pre-cohesion'

# Destruir uno
ssh pmx-50 'zfs destroy zfs-ha/subvol-200-disk-0@pre-cohesion-20260519'

No borres TODOS los pre-* a la vez

Hazlo por tandas (e.g. uno por nodo, verificar 24h, seguir).