- Btrfs y Snapper ofrecen snapshots instantáneos y restauración eficiente del sistema y archivos.
- Una estructura adecuada de subvolúmenes facilita backups selectivos y recuperaciones rápidas.
- Snapper automatiza snapshots en eventos, gestiona limpieza, y permite comparaciones y rollbacks precisos.
Btrfs se ha consolidado en los últimos años como uno de los sistemas de archivos más avanzados y flexibles del ecosistema Linux. Su capacidad para crear instantáneas (snapshots) eficientes y sus funciones de autogestión lo han colocado como elección predilecta en distribuciones como openSUSE, siduction o Arch Linux. Sin embargo, su potencial se multiplica cuando se combina con Snapper, una herramienta especializada para la gestión de snapshots, restauraciones y automatización de tareas de copia de seguridad en tiempo real.
Este artículo pretende desmenuzar exhaustivamente, de forma detallada y práctica, cómo funcionan los snapshots en Btrfs y cómo sacarles el máximo provecho con Snapper. Se abordarán desde los conceptos fundamentales hasta configuraciones avanzadas, ejemplos de recuperación, automatización, consejos, trucos y recomendaciones de rendimiento. Todo ello en español de España y con un vocabulario cercano, ilustrando tanto los beneficios como los posibles escollos que se pueden encontrar al desplegar esta solución en tu sistema o servidor Linux.
¿Qué es Btrfs y por qué importa para snapshots?
Btrfs, abreviatura de B-Tree File System, es un sistema de archivos moderno que introduce la filosofía copy-on-write (CoW) a la gestión de datos en Linux. El principal atractivo para usuarios avanzados y administradores reside en su capacidad de crear subvolúmenes y snapshots casi instantáneos y con ocupación mínima de espacio.
Al contrario que otros sistemas de archivos más tradicionales como ext4, Btrfs implementa:
- Subvolúmenes: Directorios que se comportan como particiones lógicas internas, permitiendo aislar y gestionar áreas específicas del sistema de archivos con independencia.
- Snapshots: Copias en un instante determinado de un subvolumen, que gracias al CoW sólo ocupan espacio cuando se modifican archivos respecto al original. Esto los convierte en ideales para recuperar estados anteriores del sistema, realizar backups eficientes o protegerse contra errores de actualización.
La estructura de Btrfs facilita que cada subvolumen tenga su propia jerarquía de archivos y configuración, apareciendo ante el usuario como directorios normales pero con gestión interna especial.
¿Por qué Snapper es el compañero perfecto de Btrfs?
Snapper es la herramienta estrella para sacar toda la chicha a los snapshots de Btrfs. No sólo permite crearlos y eliminarlos, sino que automatiza la toma de instantáneas en momentos críticos (como actualizaciones del sistema), compara diferencias entre estados y facilita la restauración tanto de archivos individuales como de todo el sistema. Además, soporta líneas de tiempo automáticas y limpiezas programadas para evitar llenar el disco.
Entre las razones por las que Snapper es casi imprescindible si usas Btrfs destacan:
- Automatización de snapshots en eventos clave (instalación de paquetes, actualizaciones, cambios administrativos…)
- Posibilidad de comparar y deshacer cambios entre dos puntos en el tiempo. Ideal para descubrir qué se ha roto tras una actualización, o qué archivos han sido tocados accidentalmente.
- Restauración granular, tanto a nivel de un archivo concreto como de todo el sistema operativo en caso de desastre.
- Soporte para limpieza automática según límites de espacio, antigüedad o número de snapshots.
- Interfaz CLI y módulos gráficos (por ejemplo, yast2-snapper o btrfs-assistant para usuarios que prefieran no lidiar con comandos).
Conceptos fundamentales: subvolúmenes y snapshots en Btrfs
Para comprender a fondo como Snapper gestiona los snapshots, conviene aclarar primero cómo organiza Btrfs su jerarquía interna.
Subvolumen en Btrfs
Un subvolumen es una especie de partición lógica dentro de Btrfs. Aparece como un directorio normal, pero se puede montar de forma independiente, tiene su propio espacio de nombres y se gestiona de manera separada a nivel de snapshots y cuotas.
Por defecto, muchas distros (openSUSE, siduction, Arch…) establecen subvolúmenes como:
- @ para root (/)
- @home para /home
- @snapshots para la carpeta /.snapshots
- @var_log para /var/log
Gracias a esto puedes tomar snapshots sólo del sistema, dejando user data o logs fuera si lo prefieres. A la hora de recuperar, por ejemplo, tu sistema operativo tras una actualización fallida, puedes dejar intactos tus archivos personales y sólo restaurar la raíz.
¿Qué es un snapshot en Btrfs?
En el contexto de Btrfs, un snapshot es un subvolumen especial que almacena el estado exacto de otro subvolumen en un momento concreto. Pero, gracias al modelo CoW, sólo ocupa espacio según vayan cambiando los archivos respecto al original.
Esto significa que puedes tener docenas de snapshots históricos ocupando sólo una fracción del espacio total, y restaurar cualquiera de ellos casi al instante.
Los snapshots no son recursivos: sólo capturan lo contenido en ese subvolumen, no los subvolúmenes anidados. Por eso es importante estructurar bien tu esquema de subvolúmenes para aislar datos críticos que no quieras perder nunca (por ejemplo, tus carpetas personales o los logs del sistema).
Tipos de snapshots: ¿Cuándo y cómo se crean?
Snapper permite distinguir entre varios tipos de snapshots, aunque internamente para Btrfs todos son técnicamente iguales. Las diferencias las impone Snapper por motivos de gestión, comparación y limpieza:
- Pre: Instantánea tomada antes de un cambio importante (por ejemplo, antes de instalar actualizaciones importantes).
- Post: Snapshot inmediatamente después del mismo cambio. Así puedes comparar fácilmente qué ha cambiado.
- Single: Snapshots manuales, automáticos de timeline, o cualquier otro no asociado a un evento pre/post concreto.
La mayoría de distribuciones que integran Snapper activan por defecto la creación automática de snapshots pre/post ante acciones de administración o instalación de paquetes. Por ejemplo, openSUSE crea snapshots antes y después de cada actualización con YaST. Siduction hace lo propio con cada operación de APT. Así siempre podrás volver a un estado anterior si algo sale mal.
Timeline Snapshots
Otra funcionalidad estrella es la línea temporal de snapshots automáticos. Puedes configurar Snapper para que cree instantáneas cada hora, día, semana, mes o año, manteniendo siempre sólo la cantidad de snapshots especificados y eliminando los antiguos según reglas de limpieza.
Por defecto, suele quedar activada en sistemas con suficiente espacio libre, y puedes ajustarla fácilmente en el fichero de configuración correspondiente.
Cómo instalar y configurar Snapper en tu sistema Btrfs
La instalación varía ligeramente según tu distribución, pero en la mayoría de sistemas basados en RPM (openSUSE, RHEL, siduction, Fedora…) es tan sencillo como ejecutar:
- openSUSE/SLE:
zypper install snapper
(opcionalmente yast2-snapper y snapper-zypp-plugin para integración total). - Arch Linux / Manjaro:
pacman -S snapper
y, para interfaz gráfica,yay -S btrfs-assistant snapper-gui-git
- Debian/siduction:
apt install snapper
Una vez instalado, el siguiente paso es crear la configuración para el subvolumen o partición que quieres proteger. Por lo general, para el sistema raíz:
# snapper -c root create-config /
Esto realiza varias acciones automáticas:
- Crea el fichero de configuración para Snapper en
/etc/snapper/configs/root
. - Prepara la carpeta
/.snapshots
dentro del subvolumen correspondiente para almacenar las instantáneas. - Actualiza la variable
SNAPPER_CONFIGS
en el fichero de ajustes globales.
Si quieres gestionar /home (o cualquier otro subvolumen), basta con repetir el proceso:
# snapper -c home create-config /home
Recuerda que tener una estructura de subvolúmenes adecuada es fundamental para proteger sólo lo que te interesa —si sólo te interesa proteger el sistema, aísla las carpetas de usuario y datos en subvolúmenes aparte para evitar revertirlas accidentalmente durante un rollback.
Parámetros principales y edición de la configuración
La magia de Snapper está en sus archivos de configuración, localizados en /etc/snapper/configs/
. Algunos ajustes clave que puedes personalizar según tus necesidades y espacio disponible:
- TIMELINE_CREATE: «yes» o «no». Activa o desactiva la línea temporal de snapshots automáticos.
- TIMELINE_LIMIT_HOURLY/DAILY/WEEKLY/MONTHLY/YEARLY: Cantidad máxima de snapshots a conservar de cada tipo.
- NUMBER_CLEANUP, NUMBER_LIMIT, NUMBER_MIN_AGE: Controlan la limpieza de snapshots manuales o numerados.
- FREE_LIMIT y SPACE_LIMIT: Define el espacio libre mínimo y el máximo de espacio reservado para snapshots.
- ALLOW_USERS y ALLOW_GROUPS: Lista de usuarios o grupos que pueden gestionar los snapshots de esa configuración.
- SYNC_ACL: Si «yes», Snapper sincroniza automáticamente los permisos ACL del directorio
.snapshots
según los usuarios/grupos permitidos.
Para cambios rápidos de límites o activación/desactivación de la línea temporal puedes editar directamente el fichero o usar el comando:
# snapper -c root set-config TIMELINE_CREATE=yes NUMBER_LIMIT=20
Por cierto, en la mayoría de sistemas modernos la limpieza de snapshots está gestionada por systemd mediante timers (snapper-timeline.timer
y snapper-cleanup.timer
), aunque en sistemas antiguos aún se puede usar cron.
Cómo se almacenan y acceden los snapshots
Cada snapshot que toma Snapper es en realidad un subvolumen hijo dentro de la carpeta /.snapshots
del subvolumen correspondiente. Por ejemplo, los snapshots del sistema raíz estarán en /.snapshots/X/snapshot/
, donde X es el número del snapshot.
Puedes explorarlos como directorios de sólo lectura. Si necesitas recuperar un archivo concreto, basta con copiarlo desde el snapshot adecuado a su ubicación original.
# cp /.snapshots/16/snapshot/etc/hosts /etc/hosts
Si necesitas modificar el snapshot (algo poco recomendable salvo casos especiales), puedes reconfigurar temporalmente el subvolumen snapshot como escribible usando:
# btrfs property set /.snapshots/<snapshot_num>/snapshot ro false
Asegúrate de devolverlo a sólo lectura tras la modificación para evitar inconsistencias.
Creación y gestión de snapshots: manual, automática y por eventos
Instantáneas manuales
Puedes crear un snapshot en cualquier momento con:
# snapper -c root create --description "mi snapshot manual" --cleanup-algorithm number
¡Ojo! Si no especificas el algoritmo de limpieza (--cleanup-algorithm
), el snapshot permanecerá indefinidamente hasta que lo borres a mano, lo cual puede llenar el disco si se abusa.
Instantáneas automáticas tipo timeline
Cuando la funcionalidad timeline está activa, Snapper crea snapshots de manera periódica (por ejemplo, cada hora, día, semana…). Los límites y frecuencia se controlan en la configuración (TIMELINE_LIMIT_*
).
La frecuencia se controla mediante systemd timers (consulta cómo modificar el tiempo de espera del menú de arranque). Puedes editar los timers para aumentar o reducir frecuencia cambiando el campo OnCalendar
.
Snapshots pre/post y wrapping de transacciones
Snapper es capaz de envolver cualquier acción importante (como un update de paquetes) con un snapshot antes y otro después. Así siempre puedes comparar qué ha cambiado y revertir si algo sale mal.
Por ejemplo, en openSUSE y SUSE esto se integra automáticamente al usar YaST o Zypper. En Arch Linux existen paquetes como snap-pac
, grub-btrfs
o herramientas como refind-btrfs
para añadir esta funcionalidad.
En sistemas basados en APT, como siduction, las acciones de apt pueden envolver las operaciones en snapshots pre/post (gracias a la integración por defecto).
Restauración y rollback: cómo recuperar tu sistema o un archivo a un estado anterior
Restaurar un archivo o carpeta específica
Si sólo quieres deshacer los cambios sobre un archivo concreto, puedes usar Snapper para comparar y restaurarlo:
# snapper status 42..45 /etc/hosts
Esto te mostrará qué ha cambiado entre los snapshots 42 y 45. Si decides restaurar el archivo:
# snapper diff 42..45 /etc/hosts
# snapper undochange 42..45 /etc/hosts
El comando undochange
revierte únicamente ese archivo, sin afectar al resto del sistema. Si necesitas comparar visualmente archivos, programas como Meld pueden ayudarte a visualizar y seleccionar sólo los cambios que te interesen.
Restaurar toda la raíz del sistema a un snapshot anterior (rollback)
En caso de desastre total tras una actualización problemática o una acción que ha dejado el sistema inestable, puedes deshacer por completo el estado del sistema con la función de rollback.
El procedimiento general es:
- Reinicia el sistema y accede al menú de arranque para iniciar desde el snapshot deseado (las herramientas como hacer arranque dual en Windows y Linux lo facilitan enormemente).
- Verifica que el sistema arranca correctamente en modo sólo lectura. Si todo está correcto, inicia la restauración completa:
# snapper --ambit classic rollback <Nº de snapshot objetivo>
- Snapper creará un nuevo snapshot de respaldo, copiará el estado deseado a una nueva subvolumen y lo establecerá como nuevo por defecto.
- Reinicia el sistema: arrancará directamente en el estado revertido.
¡Importante! Si usas una estructura de subvolúmenes (por ejemplo, @home
separado), sólo el sistema se restaurará, tus archivos personales permanecerán intactos.
Integración con el gestor de arranque y snapshots como opción de arranque
Herramientas como grub-btrfs permiten que cada snapshot de Snapper aparezca como entrada en GRUB, facilitando arrancar desde cualquier estado anterior del sistema de forma rápida y sencilla. Así, si tras una actualización el sistema deja de funcionar, puedes seleccionar directamente el snapshot previo desde el gestor de arranque.
Para que esto funcione, los snapshots deben estar montados como subvolúmenes y el directorio /.snapshots
debe ser legible. Algunos servicios requieren que el snapshot sea montado como writable, o emplear overlayfs para simular un entorno escribible sin modificar el snapshot base (ideal para recuperación temporal o diagnóstico).
Gestión de permisos y acceso por parte de usuarios no root
Por defecto, sólo el superusuario tiene derecho a crear, eliminar o listar snapshots. Si quieres que otros usuarios puedan gestionar snapshots de determinadas configuraciones, añade sus nombres a ALLOW_USERS
o sus grupos a ALLOW_GROUPS
en el fichero de configuración correspondiente.
Asegúrate de ajustar los permisos del directorio /.snapshots
para que el usuario/grupo tenga al menos lectura y ejecución (por ejemplo, cambiar el grupo propietario a «users»).
Recomendaciones de layout y estructura de subvolúmenes
Una planificación lógica de subvolúmenes y puntos de montaje es clave para gestionar los snapshots de forma eficiente y restaurar sólo lo necesario cuando haga falta.
Un esquema típico recomendado podría ser:
Subvolumen | Punto de montaje |
---|---|
@ | / |
@home | /home |
@snapshots | /.snapshots |
@var_log | /var/log |
Esto permite restaurar el sistema sin afectar a los datos de usuario o los registros, y mantener los snapshots fuera del subvolumen principal para evitar dependencias circulares. Es recomendable tener /.snapshots
como un subvolumen independiente montado, no como un simple directorio.
Algoritmos y limpieza de snapshots: evitando llenar el disco
El punto débil de los sistemas automáticos de snapshots es el llenado progresivo del disco si no se controlan. Snapper incluye varias opciones para limpiar snapshots antiguos según reglas predefinidas:
- Límites de cantidad (
NUMBER_LIMIT
para snapshots pre/post y manuales). - Límites de edad (
NUMBER_MIN_AGE
). - Límites de línea temporal (
TIMELINE_LIMIT_HOURLY
,TIMELINE_LIMIT_DAILY
…). - Espacio ocupado máximo (
SPACE_LIMIT
). - Porcentaje de disco libre mínimo (
FREE_LIMIT
).
El sistema de limpieza se ejecuta por defecto a diario mediante systemd (cómo actualizar la configuración de firmware UEFI desde Linux), pero puedes ajustarlo o forzarlo a mano en cualquier momento. El snapshot actual nunca se borra automáticamente.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.