Acelera el archivado con 'tar' usando compresión zstd y LZ4
El archivado de archivos es esencial en los flujos de trabajo de desarrollo para copias de seguridad, despliegues y transferencia de datos. El comando 'tar', una herramienta fundamental en los sistemas tipo Unix, se usa habitualmente para archivar archivos. Aunque los métodos de compresión tradicionales como gzip o bzip2 pueden ser lentos con archivos grandes, los algoritmos de compresión modernos ofrecen mejoras de rendimiento significativas. Esta guía explora técnicas avanzadas de 'tar' centradas en la optimización de la velocidad con Zstd y LZ4.
Instalación de las herramientas de compresión
Antes de usar Zstd y LZ4, instálalos en tu sistema:
# Ubuntu/Debian
sudo apt-get install zstd lz4
# Centos/rhel
sudo yum install zstd lz4
# macOS
brew install zstd lz4
Comandos básicos de 'tar' para archivar y extraer archivos
Revisa los comandos fundamentales de 'tar' para archivar y extraer.
Crear un archivo contenedor
tar -cf archive.tar /path/to/directory
Explicación:
-c: Crea un archivo contenedor nuevo-f: Especifica el nombre del archivo contenedor
Extraer un archivo contenedor
tar -xf archive.tar
Explicación:
-x: Extrae los archivos de un archivo contenedor-f: Especifica el nombre del archivo contenedor
Comparación de algoritmos de compresión
Los distintos métodos de compresión ofrecen diferentes ventajas y desventajas:
- Zstd: Ofrece el mejor equilibrio entre velocidad y tasa de compresión
- LZ4: Proporciona la compresión y la descompresión más rápidas, aunque con una tasa de compresión menor
- Gzip: Brinda una buena compresión, pero es más lento que Zstd o LZ4
- Bzip2: Logra una compresión alta, pero es significativamente más lento
Usar compresión moderna con 'tar'
El soporte de compresión depende de la implementación de 'tar', no solo de su versión. GNU tar
admite --zstd, mientras que bsdtar también admite --lz4. Revisa tar --help; usa los ejemplos con
tuberías cuando una opción de compresión no esté disponible. En Bash, activa set -o pipefail para que
una etapa fallida haga fallar todo el pipeline.
Usar compresión zstd
Para versiones más recientes de tar con soporte directo de Zstd:
tar --zstd -cf archive.tar.zst /path/to/directory
Para versiones más antiguas de tar:
tar -cf - /path/to/directory | zstd > archive.tar.zst
Para extraer:
# For newer Tar versions
tar --zstd -xf archive.tar.zst
# For older Tar versions
zstd -dc archive.tar.zst | tar -xf -
Usar compresión LZ4
Para bsdtar con soporte directo de LZ4:
tar --lz4 -cf archive.tar.lz4 /path/to/directory
Para versiones más antiguas de tar:
tar -cf - /path/to/directory | lz4 > archive.tar.lz4
Para extraer:
# For bsdtar with LZ4 support
tar --lz4 -xf archive.tar.lz4
# For older Tar versions
lz4 -dc archive.tar.lz4 | tar -xf -
Excluir archivos y directorios
Excluye archivos o patrones específicos durante el archivado:
tar -cf archive.tar \
--exclude='*.log' \
--exclude='tmp/*' \
--exclude='node_modules' \
/path/to/directory
Copias de seguridad incrementales
Realiza copias de seguridad incrementales usando archivos de instantánea. El archivo de instantánea
(por ejemplo, backup.snar) registra los cambios entre copias de seguridad, donde una copia de
seguridad de nivel 0 es una copia completa y los niveles posteriores almacenan los cambios
incrementales.
# Level 0 (full) backup
tar --create \
--file=backup-0.tar \
--listed-incremental=backup.snar \
/path/to/directory
# Level 1 (incremental) backup
tar --create \
--file=backup-1.tar \
--listed-incremental=backup.snar \
/path/to/directory
Archivado selectivo con 'find'
Archiva de forma segura los archivos que cumplen criterios específicos usando entradas terminadas en null para manejar nombres de archivo con espacios y caracteres especiales:
# Archive files modified in the last 7 days
find /path/to/directory -type f -mtime -7 -print0 | \
tar --null -cf archive.tar --files-from=-
Manejo de errores y verificación
Verifica la integridad del archivo contenedor y maneja los errores:
# Test archive integrity
tar -tf archive.tar.zst
# Extract with error checking
tar --extract \
--file=archive.tar.zst \
--warning=no-timestamp
Archivado remoto con SSH
Crea y extrae archivos contenedores a través de SSH:
# Create remote archive
ssh user@remotehost "tar -cf - /path/to/directory" | \
zstd > archive.tar.zst
# Extract remote archive
ssh user@remotehost "zstd -dc archive.tar.zst" | \
tar -xf -
Dividir archivos contenedores grandes
Maneja archivos contenedores grandes dividiéndolos en fragmentos manejables:
# Create and split archive (100MB chunks)
tar -cf - /path/to/directory | \
zstd | \
split -b 100M - archive.tar.zst.part-
# Reassemble and extract
cat archive.tar.zst.part-* | \
zstd -d | \
tar -xf -
Automatizar las copias de seguridad
Crea un script de copia de seguridad con manejo de errores:
#!/bin/bash
set -euo pipefail
DATE=$(date +%F)
BACKUP_DIR="/path/to/directory"
ARCHIVE_DIR="/path/to/backup"
ARCHIVE_NAME="backup-$DATE.tar.zst"
LOG_FILE="$ARCHIVE_DIR/backup-$DATE.log"
# Create backup with logging
tar --create \
--file=- "$BACKUP_DIR" | \
zstd > "$ARCHIVE_DIR/$ARCHIVE_NAME" 2>> "$LOG_FILE"
# Verify archive
tar -tf "$ARCHIVE_DIR/$ARCHIVE_NAME" >> "$LOG_FILE" 2>&1
Prográmalo con cron:
0 0 * * * /path/to/backup.sh
Conclusión
Los algoritmos de compresión modernos como Zstd y LZ4 mejoran significativamente el rendimiento del archivado con 'tar'. Combinar estas herramientas con un manejo de errores adecuado, verificación y automatización puede ayudarte a construir soluciones de copia de seguridad robustas y eficientes para tu flujo de trabajo de desarrollo.
En Transloadit, aprovechamos el archivado eficiente de archivos y los métodos de compresión modernos en nuestro servicio de Compresión de archivos para manejar grandes volúmenes de datos de forma eficaz.
