Copias incrementales con Btrfs: snapshots y send/receive

·4 min de lectura·

Btrfs puede crear snapshots de subvolúmenes y transmitirlos a otro sistema de archivos con btrfs send y btrfs receive. Un envío completo transfiere un snapshot; los envíos incrementales transmiten los cambios desde un snapshot anterior que debe estar disponible tanto en el origen como en el destino [1].

Importante: esto no sustituye una estrategia de copias con retención y recuperación comprobada. Protege el destino y conserva los snapshots padre que necesites para futuras transferencias incrementales.

Requisitos

  • El origen de cada snapshot debe ser un subvolumen Btrfs.
  • El directorio donde guardes snapshots debe estar en el mismo sistema de archivos Btrfs que el subvolumen de origen.
  • El destino de btrfs receive debe estar en un sistema de archivos Btrfs montado.
  • Todos los snapshots que intervienen en btrfs send deben ser de solo lectura [1].
  • En un envío incremental, la copia padre debe existir en ambos extremos y mantenerse sin cambios [1].

Comprueba que el origen es un subvolumen y revisa su ubicación:

sudo btrfs subvolume show /mnt/btrfs/home
sudo btrfs filesystem show /mnt/btrfs/home

Los snapshots no atraviesan recursivamente otros subvolúmenes. Si /home contiene subvolúmenes anidados, planifica snapshots y envíos para cada uno que necesites proteger [2].

Crear el snapshot inicial

En este ejemplo, /mnt/btrfs es la raíz montada del sistema de archivos Btrfs y home es un subvolumen dentro de él. Crea la carpeta de snapshots en ese mismo sistema de archivos, pero fuera del subvolumen de origen:

sudo mkdir -p /mnt/btrfs/.snapshots

Crea un snapshot de solo lectura:

sudo btrfs subvolume snapshot -r \
  /mnt/btrfs/home \
  /mnt/btrfs/.snapshots/home-2016-01-08

El nombre con fecha es un ejemplo; usa un esquema que te permita identificar y ordenar tus copias. No cambies a lectura y escritura los snapshots que usarás como base de envíos incrementales [2].

Enviar la primera copia

Monta el sistema de archivos Btrfs de destino, crea un directorio receptor y envía el snapshot completo:

sudo mkdir -p /mnt/backup
sudo btrfs send /mnt/btrfs/.snapshots/home-2016-01-08 \
  | sudo btrfs receive /mnt/backup

btrfs send genera un flujo que btrfs receive reconstruye como un subvolumen en el destino. La copia recibida queda en solo lectura [1].

Enviar una copia incremental

Tras cambiar el contenido del subvolumen original, crea otro snapshot de solo lectura en el mismo sistema de archivos:

sudo btrfs subvolume snapshot -r \
  /mnt/btrfs/home \
  /mnt/btrfs/.snapshots/home-2016-01-09

Usa el snapshot anterior como padre del nuevo envío:

sudo btrfs send \
  -p /mnt/btrfs/.snapshots/home-2016-01-08 \
  /mnt/btrfs/.snapshots/home-2016-01-09 \
  | sudo btrfs receive /mnt/backup

El snapshot padre correspondiente debe seguir presente en el destino. Conserva tanto la copia base como los snapshots posteriores que formen parte de la cadena incremental; si falta el padre o se altera uno de los snapshots, el envío incremental puede fallar o dejar de corresponder al estado esperado [1][2].

Enviar a otro servidor por SSH

Si el servidor remoto tiene montado un destino Btrfs y la cuenta puede ejecutar btrfs receive, se puede canalizar el flujo por SSH:

sudo btrfs send /mnt/btrfs/.snapshots/home-2016-01-08 \
  | ssh backup@servidor 'sudo btrfs receive /mnt/backup'

Para el envío incremental, conserva la misma ruta para el padre en el origen y el directorio receptor que contiene la copia anterior en el servidor:

sudo btrfs send \
  -p /mnt/btrfs/.snapshots/home-2016-01-08 \
  /mnt/btrfs/.snapshots/home-2016-01-09 \
  | ssh backup@servidor 'sudo btrfs receive /mnt/backup'

Sustituye backup@servidor y las rutas por valores de tu entorno. Confirma que /mnt/btrfs/home es un subvolumen y que /mnt/btrfs/.snapshots queda fuera de él, pero en el mismo sistema de archivos. La cuenta remota necesita permisos adecuados para recibir subvolúmenes; no habilites privilegios amplios solo para facilitar la transferencia.

Verificar los snapshots recibidos

Lista los subvolúmenes del sistema de archivos receptor:

sudo btrfs subvolume list /mnt/backup

Puedes examinar un subvolumen recibido con:

sudo btrfs subvolume show /mnt/backup/home-2016-01-08

Comprueba que las copias esperadas existen y que el snapshot recibido permanece en solo lectura antes de depender de él para otro envío incremental [2].

En resumen

  • btrfs send y btrfs receive transfieren subvolúmenes entre sistemas de archivos Btrfs.
  • Los snapshots usados en el envío deben ser de solo lectura.
  • Cada envío incremental necesita su snapshot padre intacto en origen y destino.
  • Los subvolúmenes anidados requieren planificación aparte porque un snapshot no los incluye recursivamente.
  • Mantén el destino protegido y comprueba periódicamente que las copias recibidas pueden leerse.

Fuentes consultadas

  1. Documentación oficial de Btrfs: btrfs send y modo incremental
  2. Documentación oficial de Btrfs: snapshots y propiedades de subvolúmenes

btrfs

¿Te ha resultado útil?

Compártelo con tu red de contactos profesionales.

Comentarios (0)

Sé el primero en comentar.