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