Parte 1: rendimiento
Aquí hay una comparación de dos flujos de trabajo separados y lo que hacen.
Tiene un archivo en el disco blah.tar.gz
que es, digamos, 1 GB de datos comprimidos con gzip que, cuando no está comprimido, ocupa 2 GB (por lo tanto, una relación de compresión del 50%).
La forma en que crearía esto, si hiciera el archivo y la compresión por separado, sería:
tar cf blah.tar files ...
Esto daría como resultado blah.tar
una mera agregación de la files ...
forma no comprimida.
Entonces harías
gzip blah.tar
Esto leería el contenido del blah.tar
disco, lo comprimiría a través del algoritmo de compresión gzip, escribiría el contenido y blah.tar.gz
luego desvincularía (eliminaría) el archivo blah.tar
.
¡Ahora, descomprimamos!
Camino 1
Tienes blah.tar.gz
, de una forma u otra.
Decides correr:
gunzip blah.tar.gz
Esta voluntad
- LEA el contenido de datos comprimidos de 1 GB de
blah.tar.gz
.
- PROCESE los datos comprimidos a través del
gzip
descompresor en la memoria.
- A medida que el búfer de memoria se llena con "un bloque" de datos, ESCRIBA los datos sin comprimir en el archivo
blah.tar
en el disco y repita hasta que se lean todos los datos comprimidos.
- Desvincular (eliminar) el archivo
blah.tar.gz
.
Ahora, tiene blah.tar
en el disco, que está descomprimido pero contiene uno o más archivos dentro, con una carga de estructura de datos muy baja. El tamaño del archivo es probablemente un par de bytes mayor que la suma de todos los datos del archivo.
Tu corres:
tar xvf blah.tar
Esta voluntad
- LEA los 2 GB de contenido de datos sin comprimir
blah.tar
y las tar
estructuras de datos del formato de archivo, incluida la información sobre permisos de archivos, nombres de archivos, directorios, etc.
- ESCRIBA los 2 GB de datos más los metadatos en el disco. Esto implica: traducir la estructura de datos / información de metadatos para crear nuevos archivos y directorios en el disco según corresponda, o reescribir archivos y directorios existentes con nuevos contenidos de datos.
El total de datos que LEIMOS del disco en este proceso fue de 1 GB (para gunzip) + 2 GB (para tar) = 3 GB.
El total de datos que escribimos en el disco en este proceso fue de 2 GB (para gunzip) + 2 GB (para tar) + unos pocos bytes para metadatos = aproximadamente 4 GB.
Camino 2
Tienes blah.tar.gz
, de una forma u otra.
Decides correr:
tar xvzf blah.tar.gz
Esta voluntad
- LEA el contenido de datos comprimidos de 1 GB de
blah.tar.gz
un bloque a la vez en la memoria.
- PROCESE los datos comprimidos a través del
gzip
descompresor en la memoria.
- A medida que el búfer de memoria se llena, canalizará esos datos, en la memoria, al
tar
analizador de formato de archivo, que leerá la información sobre metadatos, etc. y los datos del archivo sin comprimir.
- A medida que el búfer de memoria se llena en el
tar
analizador de archivos, ESCRIBIRÁ los datos sin comprimir en el disco, creando archivos y directorios y llenándolos con el contenido sin comprimir.
El total de datos que LEIMOS del disco en este proceso fue de 1 GB de datos comprimidos, punto.
El total de datos que escribimos en el disco en este proceso fue de 2 GB de datos sin comprimir + unos pocos bytes para metadatos = aproximadamente 2 GB.
Si observa, la cantidad de E / S de disco en Way 2 es idéntica a la E / S de disco realizada, por ejemplo, por los programas Zip
o 7-Zip , ajustando las diferencias en la relación de compresión.
Y si le preocupa la relación de compresión, use el Xz
compresor para encapsular tar
, y tiene el archivo TAR LZMA2 , que es tan eficiente como el algoritmo más avanzado disponible para 7-Zip :-)
Parte 2: características
tar
almacena los permisos de Unix dentro de sus metadatos de archivo, y es muy conocido y probado para empaquetar con éxito un directorio con todo tipo de permisos diferentes, enlaces simbólicos, etc. Hay más de unas pocas instancias en las que uno podría necesitar guardar un montón de archivos en un solo archivo o secuencia, pero no necesariamente comprimirlo (aunque la compresión es útil y de uso frecuente).
Parte 3: compatibilidad
Muchas herramientas se distribuyen en formato fuente o binario como .tar.gz o .tar.bz2, porque es un formato de archivo de "mínimo común denominador": al igual que la mayoría de los usuarios de Windows tienen acceso a descompresores .zip o .rar, la mayoría de las instalaciones de Linux , incluso los más básicos, tendrán acceso al menos a alquitrán y pistolas, sin importar la antigüedad o reducción. Incluso los firmwares de Android tienen acceso a estas herramientas.
Los nuevos proyectos dirigidos a audiencias que ejecutan distribuciones modernas pueden muy bien distribuir en un formato más moderno, como .tar.xz (usando el formato de compresión Xz (LZMA), que se comprime mejor que gzip o bzip2), o .7z, que es similar a los formatos de archivo ZIP o RAR en que ambos comprimen y especifican un diseño para encapsular múltiples archivos en un solo archivo.
No ves que .7z se usa con más frecuencia por la misma razón por la que la música no se vende en tiendas de descargas en línea en formatos nuevos como Opus o video en WebM . Compatibilidad con personas que ejecutan sistemas antiguos o muy básicos.
tar xvzf
es más difícil que7z -x
...