Comprimir y dividir archivos grandes

Introducción

En entornos Linux, gestionar archivos de gran tamaño puede presentar desafíos: limitaciones de sistemas de archivos, transferencias por red inestables o la necesidad de respaldos segmentados. Afortunadamente, comprimir y dividir archivos son operaciones sencillas que, combinadas, ofrecen una solución robusta y flexible.

¿Por qué comprimir y dividir archivos grandes

  • Reducción de espacio: Muchos ficheros (logs, bases de datos, backups) pueden reducirse considerablemente.
  • Compatibilidad: Sistemas de archivos con límite de tamaño (FAT32) aceptan fragmentos menores a 4 GB.
  • Transferencias seguras: En conexiones inestables, retransmitir un fragmento es más eficiente que todo el archivo.
  • Automatización: Scripts de backup aprovechan particiones serializadas.

Herramientas necesarias

Antes de empezar, asegúrate de tener instaladas las siguientes utilidades:

Comando Paquete Función
tar tar Agrupa y comprime
gzip / bzip2 / xz gzip / bzip2 / xz-utils Algoritmos de compresión
split coreutils Dividir archivos
md5sum / sha256sum coreutils Integridad de archivos

Paso 1: Comprimir con tar y gzip/bzip2/xz

El enfoque más habitual es empaquetar el contenido y aplicar compresión:

tar -cvf archivo.tar /ruta/al/directorio
tar -czvf archivo.tar.gz /ruta/al/directorio   ← gzip
tar -cjvf archivo.tar.bz2 /ruta/al/directorio  ← bzip2
tar -cJvf archivo.tar.xz /ruta/al/directorio  ← xz
  • -c: crear archivo.
  • -v: modo verboso (opcional).
  • -f: especificar nombre de fichero.
  • -z, -j, -J: elegir algoritmo de compresión.

Paso 2: Dividir con split

Una vez comprimido, divide el archivo en fragmentos de tamaño manejable. Por ejemplo, en trozos de 500 MB:

split -b 500M archivo.tar.gz parte_

Esto generará parte_aa, parte_ab, parte_ac, etc.

  • -b: tamaño de cada fragmento (k, M, G).
  • El prefijo parte_ puede personalizarse.

Uso alternativo con zip

El comando zip permite compresión y división en una sola instrucción:

zip -r --split-size 500m archivo.zip /ruta/al/directorio

Se crearán archivo.z01, archivo.z02, … y archivo.zip.

Verificación de integridad

Para asegurarte de que cada fragmento y el archivo original permanecen íntegros:

md5sum archivo.tar.gz > archivo.md5
md5sum parte_ gt partes.md5

En destino, repite md5sum -c para comprobar:

md5sum -c archivo.md5
md5sum -c partes.md5

Ejemplo práctico paso a paso

  1. Empaquetar y comprimir un directorio: tar -czf datos.tar.gz ./datos_importantes.
  2. Dividir en partes de 1 GB: split -b 1G datos.tar.gz datos_.
  3. Generar sumas de comprobación: md5sum datos.tar.gz gt datos.md5 y md5sum datos_ gt partes.md5.
  4. Transferir las partes (ver siguiente sección).
  5. En destino, verificar integridad y recomponer: split -f datos_ --merge datos.tar.gz o cat datos_ gt datos.tar.gz.
  6. Extraer: tar -xzf datos.tar.gz.

Transferencia segura: SSH y VPN

Para proteger la transferencia en redes públicas o corporativas, puedes usar scp o rsync sobre SSH. Además, recomiendo combinarlo con un servicio de VPN:

  • ProtonVPN: privacidad y ancho de banda robusto.
  • NordVPN: servidores globales y cifrado fuerte.

Ejemplo de envío con rsync:

rsync -avP datos_ usuario@servidor:/ruta/de/destino/

Recomponer y descomprimir

  • Reconstruir el archivo: cat parte_ gt archivo.tar.gz o split -f parte_ --merge archivo.tar.gz.
  • Verificar con md5sum -c archivo.md5.
  • Extraer contenido: tar -xzvf archivo.tar.gz.

Consejos y buenas prácticas

  • Alineación de tamaño: elige fragmentos menores al límite de tu sistema de archivos o cliente FTP.
  • Compresión óptima: xzip ofrece mayor ratio a costa de más CPU.
  • Automatización: integra estos pasos en cron o scripts de backup.
  • Registro de logs: guarda salidas de comandos para auditoría.

Enlaces de referencia

Artículo elaborado para profesionales Linux que requieren gestionar archivos de gran tamaño de forma eficiente, segura y automatizada.

  • Hola 👋 , soy la IA de Linuxmind.dev, te puedo ayudar a aprender.
Gathering thoughts ...

Leave a Reply

Your email address will not be published. Required fields are marked *