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.

```bash

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/subvol-208-disk-0@pre-cohesion-20260519 2026-5-19 3:14 ...

Rollback de un LXC entero

1. Parar el container

bash ssh pmx-50 'pct stop 200'

2. Verificar que el snapshot existe en este nodo

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

3. Rollback

bash 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:

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

4. Re-arrancar

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

Rollback de una VM

Igual pero con qm y dataset distinto:

bash 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:

```bash

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

bash 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:

bash 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):

```bash

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).