Saltar al contenido

¿Cuál es la diferencia entre diferentes sistemas de “compresión”?

Luego de de una extensa recopilación de datos pudimos resolver este dilema que suelen tener algunos los lectores. Te compartimos la solución y nuestro deseo es servirte de mucha ayuda.

Solución:

tar significa archivo de cinta. Todo lo que hace es empaquetar archivos y sus metadatos (permisos, propiedad, etc.) en un flujo de bytes que se pueden almacenar en una unidad de cinta (o un archivo) y restaurar más tarde. La compresión es un asunto completamente separado que solía tener que canalizar la salida a través de una utilidad externa para comprimir si lo deseaba. GNU tar fue lo suficientemente bueno como para agregar interruptores para decirle que filtre automáticamente la salida a través de la utilidad adecuada como un atajo.

Zip y 7z combinan el archivado y la compresión en su propio formato contenedor, y están diseñados para empaquetar archivos en un sistema DOS / Windows, por lo que no almacenan los permisos y la propiedad de Unix. Por lo tanto, si desea almacenar permisos para copias de seguridad adecuadas, debe seguir con tar. Si planea intercambiar archivos con usuarios de Windows, entonces zip o 7z es bueno. El uso real de los algoritmos de compresión zip y 7zip se puede utilizar con tar, usando gzip y lzma respectivamente.

lzma (también conocido como. * .xz) tiene una de las mejores relaciones de compresión y es bastante rápido en la descompresión, por lo que es una de las mejores opciones en estos días. Sin embargo, requiere una tonelada de tiempo de memoria RAM y CPU para comprimir. El venerable gzip es bastante más rápido en la compresión, por lo que puede usarse si no desea dedicar tanto tiempo de la CPU. También tiene una variante aún más rápida llamada lzop. bzip2 sigue siendo bastante popular, ya que reemplazó en gran medida a gzip durante un tiempo antes de que apareciera 7zip / lzma, ya que obtuvo mejores relaciones de compresión, pero está cayendo en desgracia en estos días ya que 7z / lzma es más rápido en la descompresión y obtiene mejores relaciones de compresión. los compress La utilidad, que normalmente nombra archivos * .Z, es antigua y olvidada hace mucho tiempo.

Una de las otras diferencias importantes entre zip y tar es que zip comprime los datos en pequeños fragmentos, mientras que cuando comprime un archivo tar, comprime todo de una vez. Este último ofrece mejores relaciones de compresión, pero para extraer un solo archivo al final del archivo, debe descomprimir todo para acceder a él. Por lo tanto, el formato zip es mejor para extraer uno o dos archivos de un archivo grande. 7z y dar le permite elegir comprimir todo (llamado modo “sólido”) o pequeños trozos para una fácil extracción por partes.

Los detalles de los algoritmos están fuera de tema aquí.1 ya que no son de ninguna manera específicos de Linux, y mucho menos de Ubuntu. Sin embargo, encontrará información interesante aquí.

Ahora a tar, como dijiste, tar no es y nunca ha sido un programa de compresión. En cambio, es un archivador; su objetivo principal es crear un archivo grande con muchos archivos pequeños. Históricamente, esto fue para facilitar el almacenamiento en unidades de cinta, de ahí el nombre: Tape ARchive.

Hoy, la principal razón para usar tar es disminuir la cantidad de archivos en su sistema. Cada archivo en un sistema de archivos Unix toma un inodo, cuantos más archivos tenga, menos inodos disponibles y cuando se quede sin inodos, ya no podrá crear nuevos archivos. En pocas palabras, la misma cantidad de datos almacenados que miles de archivos ocupará más de su disco duro que esos mismos archivos en un solo archivo tar.

Para ilustrar, dado que esto ha sido impugnado en los comentarios, en mi 68G / partición, tengo el siguiente número de inodos totales y usados ​​(tenga en cuenta que el recuento de inodos depende del tipo de sistema de archivos y el tamaño de la partición):

Inode count:              393216
Free inodes:              171421

Si ahora procedo a intentar crear más archivos de los que tengo inodos:

$ touch 1..171422
touch: cannot touch ‘171388’: No space left on device
touch: cannot touch ‘171389’: No space left on device
touch: cannot touch ‘171390’: No space left on device
touch: cannot touch ‘171391’: No space left on device
touch: cannot touch ‘171392’: No space left on device
touch: cannot touch ‘171393’: No space left on device
touch: cannot touch ‘171394’: No space left on device
touch: cannot touch ‘171395’: No space left on device
touch: cannot touch ‘171396’: No space left on device
touch: cannot touch ‘171397’: No space left on device

¿Sin espacio? Pero tengo mucho espacio:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       5,8G  4,3G  1,2G  79% /

Como puede ver arriba, la creación de unos cientos de miles de archivos vacíos agota rápidamente mis inodos y ya no puedo crear nuevos. Si tuviera que tar estos podría comenzar a crear archivos nuevamente.

Tener menos archivos también acelera enormemente la E / S del sistema de archivos, especialmente en sistemas de archivos montados en NFS. Siempre alquilo mis viejos directorios de trabajo cuando un proyecto está terminado, ya que cuantos menos archivos tengo, programas más rápidos como find trabajará.

Hay una gran respuesta sobre Superusuario que entra en muchos más detalles, pero además de lo anterior, las otras razones básicas por las que tar sigue siendo popular hoy en día son:

  1. Eficiencia: usando tar para canalizar a través de un programa de compresión como gzip es más eficiente ya que evita la creación de archivos intermedios.

  2. tar viene con todo tipo de campanas y silbatos, características que han sido diseñadas a lo largo de su larga historia que lo hacen particularmente útil para copias de seguridad * nix (piense en permisos, propiedad de archivos, la capacidad de canalizar datos directamente a STDOUT y a través de un enlace SSH … )

  3. Inercia. Estamos acostumbrados a tar. Es seguro asumir que estará disponible en cualquier * nix que pueda usar, lo que lo hace muy portátil y práctico para los archivos de código fuente.


1 Esto es absolutamente true y no tiene nada que ver con el hecho de que no sé lo suficiente sobre ellos para explicar 🙂

Hay dos tareas distintas pero relacionadas. Empaquetar un árbol de archivos (incluidos los nombres de archivo, la estructura de directorios, los permisos del sistema de archivos, la propiedad y cualquier otro metadato) en una secuencia de bytes se llama
archivar. La eliminación de la redundancia en un flujo de bytes para producir un flujo de bytes más pequeño se denomina compresión.

En Unix, las dos operaciones están separadas, con distintas herramientas para cada una. En la mayoría de las otras plataformas (actuales e históricas), las herramientas combinadas realizan tanto el archivo como la compresión.

(gzip y otros programas que imitan la interfaz de gzip a menudo tienen la opción de almacenar el nombre del archivo original en la salida comprimida, pero esto, junto con un CRC u otra verificación para detectar daños, son los únicos metadatos que pueden almacenar).

Hay ventajas en separar la compresión del archivo. El archivado es específico de la plataforma (los metadatos del sistema de archivos que deben conservarse varían ampliamente), pero la implementación es sencilla, en gran parte vinculada a E / S y cambia poco con el tiempo. La compresión es independiente de la plataforma, pero las implementaciones están vinculadas a la CPU y los algoritmos mejoran constantemente para aprovechar los mayores recursos que el hardware moderno puede aportar al problema.

El archivador Unix más popular es tar, aunque existen otros como cpio y ar. (Los paquetes Debian son ar archivos, mientras
cpio se utiliza a menudo para discos RAM iniciales). tar es o se ha combinado a menudo con herramientas de compresión como compress (.Z), gzip (.gz),
bzip2 (.bz2) y xz (.xz), de mayor a menor y no por coincidencia de peor a mejor compresión.

Haciendo un tar archivarlo y comprimirlo son pasos distintos: el compresor no sabe nada sobre el tar formato de archivo. Esto significa que extraer un solo archivo de un archivo comprimido tar El archivo requiere descomprimir todos los archivos anteriores. Esto a menudo se denomina archivo “sólido”.

Del mismo modo, dado que tar es un formato de “transmisión”, necesario para que sea útil en una canalización, no hay un índice global en un archivo tar, y enumerar el contenido de un archivo tar es tan caro como extraerlo.

Por el contrario, Zip, RAR y 7-zip (los archivadores más populares en las plataformas modernas de Windows) suelen comprimir cada archivo por separado y, si es que lo hacen, comprimen los metadatos a la ligera. Esto permite una lista económica de los archivos en un archivo y la extracción de archivos individuales, pero significa que la redundancia entre varios archivos en el mismo archivo no se puede aprovechar para aumentar la compresión. Si bien, en general, la compresión de un archivo ya comprimido no reduce más el tamaño del archivo, en ocasiones es posible que vea un archivo zip dentro de un archivo zip: la primera compresión convirtió muchos archivos pequeños en un archivo grande (probablemente con la compresión desactivada), que el segundo zip y luego comprimido como una sola entidad.

Existe una polinización cruzada entre las diferentes plataformas y filosofías: gzip Es esencial zipel compresor sin su archivador, y xz Es esencial 7-zipCompresor sin su archivador.

Hay otros compresores especializados. Variantes de PPM y su sucesor ZPAQ están optimizados para una compresión máxima sin tener en cuenta el consumo de recursos. Pueden consumir fácilmente tanta CPU y RAM como puedas arrojarles, y la descompresión es tan exigente como la compresión (por contraste, las herramientas de compresión más utilizadas son
asimétrico: descomprimir es más barato que comprimir).

En el otro extremo del espectro, lzo, snappy y LZ4 son compresores “ligeros” diseñados para la máxima velocidad y el mínimo consumo de recursos, a costa de la compresión. Se utilizan ampliamente en sistemas de archivos y otros almacenes de objetos, pero menos como herramientas independientes.


Entonces, ¿cuál deberías elegir?

Archivado:

Como estás en Ubuntu, no hay ninguna razón real para usar otra cosa que no sea tar para archivar, a menos que esté intentando crear archivos que se puedan leer fácilmente en otro lugar.

zip es difícil de superar por su ubicuidad, pero no está centrado en Unix y no mantendrá los permisos de su sistema de archivos y la información de propiedad, y su compresión incorporada es anticuada. 7-zip y RAR (y ZPAQ) tienen una compresión más moderna, pero son igualmente inadecuados para archivar sistemas de archivos Unix (aunque no hay nada que le impida usarlos solo como compresores); RAR también es propietario.

Compresión:

Para una compresión máxima, puede echar un vistazo a un punto de referencia, como el enorme en http://mattmahoney.net/dc/text.html. Esto debería darle una mejor idea de las compensaciones involucradas.

Sin embargo, probablemente no quieras la máxima compresión. Es demasiado caro.

xz es la herramienta de compresión de uso general más popular en los sistemas Unix modernos. Creo que 7-zip también puede leer archivos xz, ya que están estrechamente relacionados.

Finalmente: si está archivando datos para cualquier otra cosa que no sea el almacenamiento a corto plazo, debe elegir algo de código abierto y preferiblemente generalizado, para minimizar los dolores de cabeza más adelante.

valoraciones y comentarios

Más adelante puedes encontrar las críticas de otros gestores de proyectos, tú todavía eres capaz mostrar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *