Restauración del sistema en ext4 usando rsync y enlaces físicos: Una implementación práctica
Las instalaciones estándar de Linux en ext4 carecen de soporte integrado para instantáneas, lo que dificulta las restauraciones rápidas a estados anteriores. Herramientas de copia de seguridad como borg o restic se centran en el almacenamiento de datos a largo plazo más que en la restauración local. Restaurar desde una copia de seguridad completa lleva horas e implica procesar grandes volúmenes de datos, lo que resulta ineficiente para corregir errores de configuración local o problemas posteriores a actualizaciones.
La solución minimiza las dependencias: no es necesario cambiar el sistema de archivos, usar LVM o adoptar sistemas de archivos especializados como Btrfs/ZFS. El enfoque se basa en rsync con soporte de enlaces físicos para la deduplicación.
Cómo funciona: rsync + Enlaces físicos
rsync sincroniza directorios copiando solo los cambios. La opción --link-dest permite hacer referencia a una instantánea anterior: los archivos sin cambios se reutilizan mediante enlaces físicos, minimizando el uso de almacenamiento. Un enlace físico es un nombre adicional para el mismo inodo, garantizando cero sobrecarga para los datos sin cambios.
Comando básico para crear una instantánea:
rsync -aHAX --numeric-ids --delete --link-dest="$PREV" "$SRC" "$DEST_TMP/"
-a: Modo archivo (recursivo, preserva permisos, marcas de tiempo).-H: Preserva enlaces físicos.-A: Preserva ACLs.-X: Preserva atributos extendidos.--numeric-ids: Usa UID/GID numéricos.--delete: Elimina archivos adicionales en el directorio de destino.
Esto lleva el estado actual a una instantánea, copiando solo el delta.
Estructura de almacenamiento de instantáneas
Las instantáneas se almacenan en .infra_snapshots/ como directorios regulares con marcas de tiempo:
.infra_snapshots/
├── system/
│ ├── 2026-03-01_00-30-00/
│ ├── 2026-03-02_00-30-00/
│ └── LATEST -> 2026-03-02_00-30-00/
├── docker/
│ ├── 2026-03-01_23-30-00/
│ └── LATEST -> 2026-03-01_23-30-00/
El enlace simbólico LATEST apunta a la instantánea más reciente para automatización. Separar system y docker aísla los archivos del sistema de los datos de contenedores: los volúmenes de Docker se excluyen para evitar problemas con datos mutables.
Proceso de creación:
- Crear un directorio temporal
.tmp-AAAA-MM-DD_HH-MM-SS. - Ejecutar rsync en él.
- Renombrar atómicamente:
mv -T "$TMP_DEST" "$FINAL_DEST". - Actualizar
LATEST:ln -sfn "$FINAL_DEST" "$LATEST_LINK".
Esto garantiza atomicidad: la instantánea está completa o ausente.
Restaurando el estado
La restauración implica sincronización inversa con una ejecución de prueba para vista previa:
rsync -aHAX --numeric-ids --delete --dry-run "$SNAP/" "/"
Después de la verificación, eliminar --dry-run para aplicar. rsync llevará el sistema raíz al estado de la instantánea, eliminando archivos nuevos y restaurando los antiguos mediante enlaces físicos.
Para Docker: similarmente, pero solo en directorios de contenedores, excluyendo volúmenes.
Limitaciones del enfoque
- Falta de atomicidad del sistema: rsync lee archivos secuencialmente; el sistema puede cambiar durante la creación. Las instantáneas son consistentes a nivel de archivo pero no instantáneas.
- Datos mutables: Registros, bases de datos y archivos temporales pueden estar en un estado intermedio. Excluirlos de rsync usando
--exclude. - Espacio en disco: Las nuevas versiones de archivos ocupan espacio; limpiar periódicamente instantáneas antiguas.
- No para producción de alta carga: Adecuado para servidores/escritorios con baja actividad durante la creación de instantáneas.
| Escenario | Tiempo de creación (aprox.) | Uso de disco |
|-----------|-----------------------------|--------------|
| Sistema diario | 2-5 min | 100-500 MB |
| Docker después de actualizaciones | 1-3 min | 50-200 MB |
Automatización
Integrar en cron para instantáneas diarias:
- 00:30: sistema.
- 23:30: docker.
El script debe registrar la salida de rsync, verificar códigos de salida y notificar errores.
Puntos clave:
- rsync con
--link-destemula instantáneas en ext4 sin cambiar el sistema de archivos. - Los enlaces físicos proporcionan deduplicación: los archivos sin cambios no se duplican.
- Atomicidad mediante directorios temporales evita instantáneas parciales.
- Separar sistema/docker mejora la precisión de la restauración.
- La ejecución de prueba es esencial antes de restaurar por seguridad.
El enfoque es transparente, usa solo utilidades estándar de Linux y se escala a cualquier sistema ext4.
— Editorial Team
Aún no hay comentarios.