Compresión y descompresión de archivos.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Por favor, siga los procedimientos al pie de la letra. En varios ejemplos utilizará el carácter ~ (tilde), que es una forma de abreviar el directorio de inicio del usuario utilizado.

Acerca de ZIP.

ZIP es un formato de archivo simple, creado originalmente por Phil Katz, fundador de PKWARE, el cual comprime cada uno de los archivos que contiene de forma separada, lo cual permite recuperar cada uno de los archvios almacenados sin tener que leer el resto del archivo ZIP que los contiene, lo que permite un mejor rendimiento. Cada archivo puede ser almacenado sin compresión o con una amplia variedad de algoritmos de compresión, aunque el más utilizado y práctico es el algoritmo original de Phil Katz.

Acerca de TAR.

El formato de almacenamiento de archivos conocido como TAR o Tape ARchiver (archivador en cinta), fue diseñado para el almacenamiento de archivos en cintas magnéticas. El formato se procesa de manera lineal, de modo que es necesario recorrer todo el archivo para poder poder extraer cualquier elemento que éste contenido en el archivo TAR. Actualmente está definido en los estándares POSIX.1-1998 y POSIX.1-2001

Acerca de GZIP.

El formato de compresión GZIP (GNU ZIP), creado por Mark Adler y Jean-loup Gailly, es una alternativa a los formatos LZW y otros algoritmos patentados que limitaban el uso del programa compress, hasta entonces lo más comúnmente utilizado en Unix. GZIP utiliza la biblioteca Zlib, la cual se basa sobre el algoritmo Deflate, que es una combinación del LZ77 y la codificación Huffman. Es importante señalar que GZIP sólo realiza la compresión de los archivos, el almacenamiento se realiza utilizando TAR o cualquier otro formato de almacenamiento de archivos.

Acerca de BZIP2

El formato de compresión BZIP2, desarrollado y mantenido por Julian Seward, utiliza los algoritmos de compresión de Burrows-Wheeler y el algoritmo de codificación de Huffman. Aunque el porcentaje de compresión de los archivos depende del contenido de éstos mismos, resulta una mejor alternativa a ZIP y GZIP, pero con un mayor consumo de memoria y recursos de sistema.

Acerca de XZ.

El formato de compresión XZ, creado y mantenido por Lasse Collin, utiliza el algoritmo de compresión LZMA2, a través de la biblioteca liblzma. Tiene un mejor rendimiento que BZIP2 (consume menos memoria y recursos de sistema) con mejores tasas de compresión. Es el formato utilizado hoy en día para la compresión de archivos TAR de códigos fuente, aunque GZIP aún es el formato más utilizado a la fecha para distribución de código fuente de Software Libre.

Procedimientos.

Ingrese al sistema como el usuario root y asegúrese que estén instalados los paquetes tar, zip, unzip, gzip, bzip2 y xz.

Ejecute lo siguiente si utiliza CentOS, Fedora™ o Red Hat™ Enterprise Linux:

yum -y install tar zip unzip gzip bzip2 xz

Ejecute lo siguiente si utiliza openSUSE™ o SUSE™ Linux Enterprise:

yast -i tar zip unzip gzip bzip2 xz

Al terminar, cierre la sesión del usuario root, ejecutando exit:

exit

Preparativos.

Ingrese nuevamente al sistema como usuario regular (fulano).

A fin de disponer de datos con los cuales experimentar, copie el directorio /usr/share/pixmaps dentro del directorio de inicio del usuario utilizado.

cp -a /usr/share/pixmaps ~/

Compresión y descompresión de archivos *.zip.

Consulte el manual de zip ejecutando lo siguiente:

man 1 zip

Consulte el manual de unzip ejecutando lo siguiente:

man 1 unzip

Genere un archivo .zip ejecutando lo siguiente:

zip -r foo.zip pixmaps/

Para mostrar la lista del contenido del archivo foo.zip, ejecute:

unzip -l foo.zip

Extraiga el contenido del archivo foo.zip dentro del directorio ~/ejemplos1/, ejecutando lo siguiente:

unzip foo.zip -d ~/ejemplos1/

Si la salida le pregunta si desea sobre-escribir los archivos existentes, responda que si a todo pulsando la letra A (sobre-escriir todo) y la tecla ENTER.

Extraiga el contenido del archivo foo.zip dentro del directorio ~/ejemplos1/, pero sólo extrayendo los archivos del primer nivel con extensión *.png, ejecutando lo siguiente:

unzip foo.zip -d ~/ejemplos1/ *.png

Si la salida le pregunta si desea sobre-escribir los archivos existentes, responda que si a todo pulsando la letra A (sobre-escriir todo) y la tecla ENTER.

Extraiga el contenido del archivo foo.zip dentro del directorio ~/ejemplos1/, pero sólo extrayendo los archivos del segundo nivel con extensión *.png, ejecutando lo siguiente:

unzip foo.zip -d ~/ejemplos1/ */*.png

Si la salida le pregunta si desea sobre-escribir los archivos existentes, responda que si a todo pulsando la letra A (sobre-escriir todo) y la tecla ENTER.

Creación y extracción de archivos *.tar.

Consulte el manual de tar ejecutando lo siguiente:

man 1 tar

Genere un archivo .tar (sin compresión) ejecutando lo siguiente:

tar cf foo.tar pixmaps/

Para mostrar la lista del contenido del archivo foo.tar, ejecute:

tar tvf foo.tar

Extraiga el contenido del archivo foo.tar dentro del directorio ~/ejemplos1/, ejecutando lo siguiente:

tar xvf foo.tar -C ~/ejemplos1/

Extraiga el contenido del archivo foo.tar dentro del directorio ~/ejemplos1/, pero sólo extrayendo los archivos con extensión *.png, ejecutando lo siguiente:

tar xvf foo.tar -C ~/ejemplos1/ --wildcards '*.png'

Compresión y descompresión de archivos *.tar.gz.

Genere un archivo .tar.gz (con compresión GZIP) ejecutando lo siguiente:

tar zcf foo.tar.gz pixmaps/

Para mostrar la lista del contenido del archivo foo.tar.gz, ejecute:

tar ztvf foo.tar.gz

Extraiga el contenido del archivo foo.tar.gz dentro del directorio ~/ejemplos1/ ejecutando lo siguiente:

tar zxvf foo.tar.gz -C ~/ejemplos1/

Extraiga el contenido del archivo foo.tar.gz dentro del directorio ~/ejemplos1/, pero sólo extrayendo los archivos con extensión *.png, ejecutando lo siguiente:

tar zxvf foo.tar.gz -C ~/ejemplos1/ --wildcards '*.png'

Compresión y descompresión de archivos *.tar.bz2.

Genere un archivo .tar.bz2 (con compresión BZip2) ejecutando lo siguiente:

tar jcf foo.tar.bz2 pixmaps/

Para mostrar la lista del contenido del archivo foo.tar.bz2, ejecute:

tar jtvf foo.tar.bz2

Extraiga el contenido del archivo foo.tar.bz2 dentro del directorio ~/ejemplos1/, ejecutando lo siguiente:

tar jxvf foo.tar.bz2 -C ~/ejemplos1/

Extraiga el contenido del archivo foo.tar.bz2 dentro del directorio ~/ejemplos1/, pero sólo extrayendo los archivos con extensión *.png, ejecutando lo siguiente:

tar jxvf foo.tar.bz2 -C ~/ejemplos1/ --wildcards '*.png'

Compresión y descompresión de archivos *.tar.xz.

Genere un archivo .tar.xz (con compresión XZ) ejecutando lo siguiente:

tar Jcf foo.tar.xz pixmaps/

Para mostrar la lista del contenido del archivo foo.tar.xz, ejecute:

tar Jtvf foo.tar.xz

Extraiga el contenido del archivo foo.tar.xz dentro del directorio ~/ejemplos1/, ejecutando lo siguiente:

tar Jxvf foo.tar.xz -C ~/ejemplos1/

Extraiga el contenido del archivo foo.tar.xz dentro del directorio ~/ejemplos1/, pero sólo extrayendo los archivos con extensión *.png, ejecutando lo siguiente:

tar Jxvf foo.tar.xz -C ~/ejemplos1/ --wildcards '*.png'

Tipos de respaldos

Por lo general los respaldos se hacen sin compresión, a fin de que sean rápidos y consuman la menor cantidad de recursos de sistema posibles y sólo se utiliza compresión cuando se tiene un espacio muy limitado en el sistema de archivo, unidades de cinta u otras unidades de almacenamiento.

Hay tres tipos de respaldos:

Un respaldo completo se puede realizar con tar, con las opciones cpf (crear archivo, preservar permisos, definir nombre del archivo), el nombre del archivo *.tar a crear, la opción -g (definir crear un archivo incremental en el nuevo formato de GNU) y el nombre del archivo con extensión *.snar (que proviene de la contracción de snapshot archive). Éste último es utilizado por tar para almacenar la información respecto de qué fue lo que se respaldó. La opción p es importante para crear y restaurar los respaldos, pues permite preservar los permisos y atributos originales de los datos. Si se omite esta opción, todo el contenido almacenado y restaurado sería propiedad del usuario root.

Respaldo del sistema de archivos.

Cambie al usuario root. A partir de este paso sólo podrá realizar los procedimientos con privilegios de root.

su -l

Genere el directorio /var/respaldos ejecutando lo siguiente:

mkdir /var/respaldos

En el siguiente ejemplo se creará un respaldo completo del directorio /usr/share/pixmaps, guardando los archivos de datos e incremental dentro de /var/respaldos.

tar cpf /var/respaldos/completo.tar -g /var/respaldos/registro.snar /usr/share/pixmaps

Para crear un respaldo incremental, solo se define el nombre de un nuevo archivo, utilizando el mismo archivo *.snar.

tar cpf /var/respaldos/incremental-1.tar -g /var/respaldos/registro.snar /usr/share/pixmaps

Ejecute lo siguiente para crear un segundo respaldo incremental:

tar cpf /var/respaldos/incremental-2.tar -g /var/respaldos/registro.snar /usr/share/pixmaps

Ejecute lo siguiente para crear un tercer respaldo incremental:

tar cpf /var/respaldos/incremental-3.tar -g /var/respaldos/registro.snar /usr/share/pixmaps

Ejecute lo siguiente para restaurar los datos:

tar xpf /var/respaldos/completo.tar -g /var/respaldos/registro.snar -C /

tar xpf /var/respaldos/incremental-1.tar -g /var/respaldos/registro.snar -C /

tar xpf /var/respaldos/incremental-2.tar -g /var/respaldos/registro.snar -C /

tar xpf /var/respaldos/incremental-3.tar -g /var/respaldos/registro.snar -C /

Los respaldos también se pueden hacer en múltiples volúmenes cuando el espacio en las unidades de almacenamiento es limitado. Se hacen de modo similar a los respaldos completos, pero añadiendo la opción -M, para indicar que se realizará en múltiples volúmenes y la opción -L, para indicar el tamaño del volumen en bytes.

El siguiente ejemplo sólo es hipotético. Tiene poco sentido realizar éste sin una unidad de almacenamiento externo montada como /mnt/DISCO. Se muestra sólo con fines demostrativos.

En el siguiente ejemplo se creará un respaldo de /usr/share/pixmaps en una unidad de almacenamiento externa, en cuatro partes de 4 GiB (4194304 bytes) cada una, asumiendo que /usr/share/pixmaps ocupa menos de 16 GiB (16777216 bytes) de espacio en el sistema de archivos y que la unidad de almacenamiento externo está montada en el directorio /mnt/DISCO/:

tar cpf /mnt/DISCO/parte01.tar -g /mnt/DISCO/registro.snar -M -L 4194304 /usr/share/pixmaps

tar cpf /mnt/DISCO/parte02.tar -g /mnt/DISCO/registro.snar -M -L 4194304 /usr/share/pixmaps

tar cpf /mnt/DISCO/parte03.tar -g /mnt/DISCO/registro.snar -M -L 4194304 /usr/share/pixmaps

tar cpf /mnt/DISCO/parte04.tar -g /mnt/DISCO/registro.snar -M -L 4194304 /usr/share/pixmaps

La restauración de los datos se hace de modo similar a la de los respaldos incrementales, pero añadiendo la opción -M para indicar que se trata de un respaldo de varios volúmenes.

tar xpf /mnt/DISCO/parte01.tar \
    -g /mnt/DISCO/registro.snar -M -C /

tar xpf /mnt/DISCO/parte02.tar \
    -g /mnt/DISCO/registro.snar -M -C /

tar xpf /mnt/DISCO/parte03.tar \
    -g /mnt/DISCO/registro.snar -M -C /

tar xpf /mnt/DISCO/parte04.tar \
    -g /mnt/DISCO/registro.snar -M -L -C /

Al terminar los procedimientos, cierre la sesión de root.

exit

Continúe con el documento titulado «Gestión de procesos y trabajos».