Gestión de Snapshots con LVM y Btrfs
Los snapshots representan una de las características más poderosas de los sistemas de archivos modernos y gestores de volúmenes, habilitando captura de datos de punto en tiempo con gastos generales mínimos. Tanto LVM (Logical Volume Manager) como Btrfs proporcionan capacidades de snapshot, aunque con diferentes implementaciones y características. Esta guía cubre configuración y gestión de snapshots usando ambas tecnologías para escenarios de copia de seguridad, pruebas y recuperación de datos.
Tabla de Contenidos
- Conceptos y Casos de Uso de Snapshots
- Descripción General de Snapshots de LVM
- Crear Snapshots de LVM
- Aprovisionamiento Thin de LVM
- Subvolúmenes y Snapshots de Btrfs
- Operaciones de Snapshot de Btrfs
- Snapper para Gestión Automatizada
- Fusión y Limpieza de Snapshots
- Conclusión
Conceptos y Casos de Uso de Snapshots
Los snapshots capturan el estado del sistema de archivos en momentos específicos sin duplicar datos inmediatamente:
- Puntos de Copia de Seguridad: Crear puntos de control de recuperación antes de cambios del sistema
- Pruebas: Snapshot antes de actualizaciones y retroceso si es necesario
- Desarrollo: Cada desarrollador obtiene clon aislado de copia en escritura
- Migración: Capturar estado consistente durante transiciones de infraestructura
- Archivado: Preservar estado de datos para requisitos de cumplimiento
LVM utiliza snapshots de copia en escritura (CoW) con espacio dedicado, mientras que Btrfs emplea clonación eficiente de subvolumen con CoW transparente.
Descripción General de Snapshots de LVM
Revisión de Arquitectura de LVM
# Revisar estructura de LVM
pvdisplay # Mostrar volúmenes físicos
vgdisplay # Mostrar grupos de volumen
lvdisplay # Mostrar volúmenes lógicos
# Verificar espacio disponible
df -h
# Monitorear estado de LVM
lvm fullreport
Planificación de Espacio para Snapshots
# Determinar espacio requerido para snapshot
# Fórmula: (Tasa de cambio esperada) × (Tiempo de retención del snapshot)
# Para base de datos con tasa de cambio diaria del 50%, retención de 7 días:
# 50% × 7 días = 350% del tamaño de LV mínimo
# Verificar uso actual de LV
df -h /path/to/lv
du -sh /path/to/lv
# Ver metadatos de LVM
vgdisplay | grep -E "VG Name|VG Status|Total PE"
lvdisplay | grep -E "LV Name|LV Size|Allocated to snapshot"
# Calcular espacio requerido
# Si LV es 100GB con uso de 50GB: necesita 50-150GB para snapshots
Crear Snapshots de LVM
Creación Básica de Snapshot de LVM
# Crear snapshot de LV activo
sudo lvcreate -L50G -s -n backup-snapshot /dev/vg0/data
# Parámetros explicados:
# -L50G: Tamaño del snapshot
# -s: Crear snapshot
# -n: Nombre del snapshot
# /dev/vg0/data: LV de origen
# Verificar creación del snapshot
sudo lvs
# Listar detalles del snapshot
sudo lvdisplay /dev/vg0/backup-snapshot
# Verificar uso del snapshot
sudo lvs -o lv_name,size,data_percent /dev/vg0
# Monitorear snapshot en tiempo real
sudo watch -n 1 'lvs -o lv_name,size,data_percent /dev/vg0'
Usar Snapshots para Copia de Seguridad
# Crear snapshot para copia de seguridad
sudo lvcreate -L100G -s -n backup-snap /dev/vg0/database
# Montar snapshot solo lectura
sudo mkdir -p /mnt/backup
sudo mount -o ro /dev/vg0/backup-snap /mnt/backup
# Realizar copia de seguridad
sudo tar czf /backup/database-$(date +%Y%m%d).tar.gz /mnt/backup/
# O usar rsync
sudo rsync -av --delete /mnt/backup/ /backup/database-copy/
# Desmontar después de copia de seguridad
sudo umount /mnt/backup
# Eliminar snapshot cuando se complete
sudo lvremove -f /dev/vg0/backup-snap
Snapshot para Pruebas de Cambios Riesgosos
# Crear snapshot antes de actualización del sistema
sudo lvcreate -L80G -s -n pre-update-snap /dev/vg0/root
# Montar snapshot alternativo para pruebas
sudo mkdir -p /mnt/test
sudo mount /dev/vg0/pre-update-snap /mnt/test
# Probar cambios de aplicación en entorno aislado
# Sin riesgo para datos de producción
# Desmontar y eliminar cuando se complete la prueba
sudo umount /mnt/test
sudo lvremove -f /dev/vg0/pre-update-snap
Retroceso de Snapshot
# Fusionar snapshot de vuelta al original (perder cambios actuales)
sudo lvconvert --merge /dev/vg0/backup-snap
# El sistema de archivos debe estar desmontado
sudo umount /dev/vg0/data || true
# La fusión se completará en el próximo reinicio o inmediatamente
sudo lvs -o lv_name,snap_percent
# Después de que se complete la fusión
sudo mount /dev/vg0/data /
Aprovisionamiento Thin de LVM
El aprovisionamiento thin habilita gestión eficiente de snapshots con asignación dinámica de espacio:
Configuración de Grupos Thin
# Crear grupo thin para snapshots
sudo lvcreate -L200G -T /dev/vg0/thin-pool
# Crear LV thin desde el grupo
sudo lvcreate -V100G -T /dev/vg0/thin-pool -n thin-lv
# Formatear sistema de archivos
sudo mkfs.ext4 /dev/vg0/thin-lv
# Montar volumen thin
sudo mount /dev/vg0/thin-lv /data
# Verificar grupo thin
sudo lvs -o lv_name,pool_lv,size,data_percent
# Monitorear uso de grupo thin
sudo watch -n 2 'lvs -o lv_name,pool_lv,size,data_percent /dev/vg0'
Snapshots de Volumen Thin
# Crear snapshot de volumen thin (usa espacio del grupo)
sudo lvcreate -k n -K n -s -n thin-snap /dev/vg0/thin-lv
# Parámetros de snapshot:
# -k n: No activar snapshot inmediatamente
# -K n: Sin relleno cero de salto
# -s: Snapshot
# -n: Nombre del snapshot
# Verificar snapshot
sudo lvs -o lv_name,pool_lv,size /dev/vg0
# Montar snapshot (solo lectura recomendado)
sudo mount -o ro /dev/vg0/thin-snap /mnt/snapshot
# Crear múltiples snapshots desde el mismo LV thin
sudo lvcreate -k n -s -n snap-$(date +%Y%m%d-%H%M%S) /dev/vg0/thin-lv
# Listar todos los snapshots
sudo lvs -s
Expansión de Grupo Thin
# Monitorear agotamiento del grupo thin
sudo lvs -o lv_name,pool_lv,size,data_percent | grep thin-pool
# Extender grupo thin cuando se aproxime a capacidad
sudo lvextend -L+100G /dev/vg0/thin-pool
# Verificar expansión
sudo lvs /dev/vg0/thin-pool
# Extender PV subyacente si es necesario
sudo pvextend /dev/sdc /dev/sdd
sudo vgextend /dev/vg0 /dev/sdd
Subvolúmenes y Snapshots de Btrfs
Preparación del Sistema de Archivos Btrfs
# Crear sistema de archivos Btrfs
sudo mkfs.btrfs -L data /dev/sda
# Montar sistema de archivos
sudo mount /dev/sda /mnt/btrfs
# Crear subvolúmenes (similar a LVs de LVM)
sudo btrfs subvolume create /mnt/btrfs/home
sudo btrfs subvolume create /mnt/btrfs/www
sudo btrfs subvolume create /mnt/btrfs/database
# Listar subvolúmenes
sudo btrfs subvolume list /mnt/btrfs
# Obtener información detallada del subvolumen
sudo btrfs subvolume show /mnt/btrfs/home
# Estado del sistema de archivos
sudo btrfs filesystem show /mnt/btrfs
Crear Snapshots de Btrfs
# Crear snapshot de solo lectura
sudo btrfs subvolume snapshot -r /mnt/btrfs/database /mnt/btrfs/database-backup-$(date +%Y%m%d)
# Crear snapshot de lectura-escritura (para clonación)
sudo btrfs subvolume snapshot /mnt/btrfs/www /mnt/btrfs/www-test
# Listar snapshots
sudo btrfs subvolume list -s /mnt/btrfs
# Verificar información del snapshot
sudo btrfs subvolume show /mnt/btrfs/database-backup-20240115
# Montar snapshot en ubicación diferente
sudo mkdir -p /mnt/recovered
sudo mount -o subvol=database-backup-20240115 /dev/sda /mnt/recovered
# Tomar snapshot de snapshot (multinivel)
sudo btrfs subvolume snapshot -r /mnt/btrfs/database-backup-20240115 \
/mnt/btrfs/database-backup-20240115-archived
Operaciones de Snapshot de Btrfs
Programación de Snapshots con Btrfs
# Crear script para snapshots automatizados
cat > /usr/local/bin/btrfs-snapshot.sh <<'EOF'
#!/bin/bash
MOUNT_POINT="/mnt/btrfs"
SUBVOL="database"
DATE=$(date +%Y%m%d_%H%M%S)
# Crear snapshot de solo lectura
btrfs subvolume snapshot -r \
${MOUNT_POINT}/${SUBVOL} \
${MOUNT_POINT}/${SUBVOL}-backup-${DATE}
# Eliminar snapshots más antiguos que 7 días
find ${MOUNT_POINT} -maxdepth 1 -type d -name "${SUBVOL}-backup-*" -mtime +7 -exec btrfs subvolume delete {} \;
echo "Snapshot ${SUBVOL}-backup-${DATE} creado exitosamente"
EOF
chmod +x /usr/local/bin/btrfs-snapshot.sh
# Programar a través de cron
echo "0 1 * * * /usr/local/bin/btrfs-snapshot.sh" | sudo tee -a /etc/crontab
Copias de Seguridad Incrementales de Btrfs
# Crear snapshot completo inicial
sudo btrfs subvolume snapshot -r /mnt/btrfs/data /mnt/btrfs/data-full-20240101
# Enviar snapshot a ubicación de copia de seguridad
sudo btrfs send /mnt/btrfs/data-full-20240101 | sudo tee /backup/data-full-20240101.btrfs > /dev/null
# Crear snapshot incremental
sudo btrfs subvolume snapshot -r /mnt/btrfs/data /mnt/btrfs/data-incr-20240102
# Enviar incremental (solo cambios)
sudo btrfs send -p /mnt/btrfs/data-full-20240101 /mnt/btrfs/data-incr-20240102 | \
sudo tee /backup/data-incr-20240102.btrfs > /dev/null
# Recibir y restaurar snapshots
sudo btrfs receive -f /backup/data-full-20240101.btrfs /mnt/restore/
# Restaurar incremental
sudo btrfs receive -f /backup/data-incr-20240102.btrfs /mnt/restore/
Conclusión
Los snapshots representan capacidades de infraestructura esenciales para gestión moderna del sistema. Los snapshots de LVM proporcionan compatibilidad con entornos tradicionales mientras que Btrfs ofrece eficiencia superior y características avanzadas. Implementando políticas automatizadas de snapshot, manteniendo espacio libre adecuado y probando regularmente procedimientos de recuperación, las organizaciones establecen estrategias resilientes de protección de datos. Comprender ambas tecnologías habilita decisiones informadas sobre selección de sistema de archivos y arquitectura de recuperación. Ya sea protegiendo bases de datos, probando configuraciones o manteniendo requisitos de cumplimiento, la gestión de snapshots proporciona valor crítico para operaciones del centro de datos empresarial.


