¿Por qué usaría un solo archivo?


101

En mi empresa, descargamos una instantánea de la base de datos de desarrollo local como un db.dump.tar.gzarchivo. La compresión tiene sentido, pero el tarball solo contiene un único archivo ( db.dump).

¿Tiene algún sentido archivar un solo archivo, o es .tar.gzun idioma tan común? ¿Por qué no solo .gz?


55
Es solo una cuestión de convención en mi opinión. Cuando las personas ven un archivo con extensión gz, su pensamiento predeterminado es usar tar -zxvf. Pero para aquellos que miran el nombre del archivo y ven que no tiene una .tgzextensión, está perfectamente bien descomprimir el archivo de volcado db. Dado que no conozco los algoritmos de compresión en detalle, no estoy seguro de si tar hace alguna compresión en archivos dispersos como db dump, pero para archivos de texto sin formato, el gzip directo del archivo tiene una ventaja de tamaño muy pequeño sobre el taring primero y gzip ing el archivo
MelBurslan

3
Todo lo que hará un solo archivo es agregar algunos bloques de metadatos al inicio y al final del archivo. Los datos reales del archivo pasan a través del alquitrán al compresor sin tocar. Entonces, para un archivo grande, la diferencia de tamaño entre la compresión simple y el tarado será insignificante.
lavado el

En el pasado, cuando probaba varios métodos de compresión, descubrí .tar.gzque era superior a la mayoría de los otros métodos comunes. Recuerdo que era superior a solo .tarpero no puedo recordar si fue mejor que solo .gz. Irónicamente, el .cabformato de Windows fue el mejor de los métodos que probé, lo cual fue muy inesperado.
Pharap

@Pharap tarno es un algoritmo de compresión, es un formato de archivo
gardenhead

1
@gardenhead Bueno, eso explicaría por qué no funcionó muy bien.
Pharap

Respuestas:


163

Las ventajas de usar en .tar.gzlugar de .gzson que

  • taralmacena más metadatos (permisos UNIX, etc.) que gzip.
  • la configuración se puede ampliar más fácilmente para almacenar múltiples archivos
  • Los archivos .tar.gz son muy comunes, solo los archivos comprimidos pueden confundir a algunos usuarios. (cf. comentario de MelBurslans )

La sobrecarga de uso tartambién es muy pequeña.

Si realmente no es necesario, todavía no recomiendo tar un solo archivo. Hay muchas herramientas útiles que pueden acceder directamente a archivos individuales comprimidos (como zcat, zgrepetc., que también existen para bzip2y xz).


35
No consideré el aspecto de los metadatos. Muy buen punto
cabeza de jardín

55
Si veo un .gz, mi primer instinto es hacerlo tar -zxf foo.gz. Recordar que gzip es incluso un comando lleva unos segundos más.
bgStack15

2
@ bgStack15 FWIW no necesita z(o -para el caso), la mayoría de los modernos tardetectarán automáticamente que el archivo debe descomprimirse.
drewbenn el

2
Por defecto gzipalmacenará el nombre del archivo original y la marca de tiempo. Puede usar la -Nopción al descomprimir para restaurarlos.
Ross Ridge

@RossRidge gracias, eliminé nuevamente el texto sobre el nombre del archivo original.
jofel

63

En realidad solo hace la mitad de la pregunta. La otra pregunta es, "¿Por qué comprimiría un archivo tar con gzip?". Y la respuesta no es solo que gziphace que el archivo sea más pequeño (en la mayoría de los casos):

tar:

  • almacena el nombre de archivo y otros metadatos : modo, ID de propietario, ID de grupo, tamaño de archivo, hora de modificación
  • almacena una suma de comprobación (solo para el encabezado)

gzip:

  • puede almacenar el nombre de archivo original, pero eso es opcional
  • tiene una suma de comprobación CRC-32 sobre los datos originales
  • comprime el archivo

Con solo tarusted no puede estar seguro de que sus datos no están dañados. Con solo gzipusted no puede restaurar la identificación de usuario / grupo, el tiempo de modificación y posiblemente no el nombre de archivo original.

La combinación es más poderosa que la que proporcionan los comandos / formatos individuales, porque complementan las características de cada uno .


Gracias por aclarar eso! Cuando estaba leyendo la tarpágina de Wikipedia, entendí mal la descripción que significaba que la suma de comprobación era para todo el archivo.
cabeza de jardín

Esto me parece la respuesta correcta. También agregaría algunas razones más, que es posible que desee editar si está de acuerdo. 1) no hay costo adicional para el administrador por .tgz sobre .tar o .gz solo: todos son solo un comando 2) Los administradores hacen copias de seguridad, copian, reubican, mueven MUCHOS archivos, por muchas razones diferentes; Las copias de seguridad de DB son solo una de estas. Pueden usar el mismo flujo de trabajo, herramientas y comandos, ya sea haciendo una copia de seguridad de uno o varios archivos; Entonces, ¿por qué utilizar una sintaxis especial del comando gzip para el caso en el que hay un archivo?
Dewi Morgan

30

Hay una bastante grande ventaja de utilizar archivos de texto en formato gz-única - el contenido se puede acceder directamente con herramientas de línea de comandos como less, zgrep, zcat.


punto interesante, pero la pregunta es sobre una instantánea de la base de datos, es poco probable que sea un archivo de texto, y no solo comprimida.
underscore_d

99
@underscore_d todos los volcados de mi base de datos (principalmente mysql y pgsql) son volcados de texto, en parte porque son más recuperables si sucede que algo corrompe parcialmente el volcado, y en parte porque puedo preprocesar cualquier restauración con las herramientas habituales (sed , awk, perl, etc.) si es necesario. es decir, más confiable y más útil que los volcados binarios. La compensación es que los volcados de texto tienden a ser más grandes (¿a quién le importa? El espacio en disco es barato y tenemos una buena compresión) y las restauraciones son significativamente más lentas (pero menos si ajusta la restauración en una transacción).
cas

1
¿Cuál es la ventaja de estas herramientas sobre simplemente conectar la salida de un descompresor a las herramientas simples?
CodesInChaos

21

Diría que es probable que las personas simplemente no se den cuenta de que pueden usar gzip / bzip2 / xz sin tar. Posiblemente porque provienen de un fondo de DOS / Windows donde es normal que la compresión y el archivo se integren en un solo formato ( ZIP , RAR , etc.).

Si bien puede haber ligeras ventajas al usar tar en algunas situaciones debido al almacenamiento de metadatos o la capacidad de agregar archivos adicionales, también hay desventajas. Con un archivo gzip / bzip2 / xz simple, puede descomprimirlo y canalizar los datos descomprimidos directamente a otra herramienta (como su base de datos) sin tener que almacenar los datos descomprimidos como un archivo en el disco. Con un tarball esto es más difícil.


2
Con GNU tar, solo se necesita -O cambiar a salida a stdout, ¡así que no diría que es mucho más difícil!
hyde

55
El primer párrafo parece bastante plausible para los archivos que usan la tgzextensión. Sin embargo, el caso del OP utiliza tar.gz, y si estos hipotéticos ex usuarios de Win / DOS son algo como yo, lo primero que dicen al mirar dicho archivo es: '¿Por qué tiene 2 extensiones?'. Luego lo buscan en Google y obtienen rápidamente la respuesta, lo que explica específicamente que la tarcompresión es distinta. ;-)
underscore_d

17

Hay una diferencia importante que podría hacer que el uso sea tarimportante en algunas circunstancias: además de los "metadatos" que @jofel mencionó en su respuesta, tar registra el nombre del archivo en el archivo. Cuando lo extrae, obtiene el nombre de archivo original independientemente de cómo se llame el archivo.

En su caso, el archivo tar y el archivo que contiene tienen los nombres relacionados db.dump.tar.gzy db.tar, pero suponga que cambia el nombre del archivo tar a 20-Apr-16.dump.tgz, o lo que sea. Untar esto con tar xvfz, y lo tienes db.dump. Para comparar, descomprimir 20-Apr-16.dump.gzy ya tienes 20-Apr-16.dump. (Editar: como se señala en los comentarios, gzip también registra el nombre del archivo; pero normalmente no se usa al descomprimir). Un tararchivo también puede contener un nombre de ruta relativo que coloca el archivo extraído en un subdirectorio.

Su caso de uso determinará si este tipo de persistencia de nombre de archivo es necesaria, o incluso deseada , o realmente no es deseable. Pero ciertamente, independientemente de la compresión, un tararchivo viaja de manera diferente a un archivo normal.


66
gzip también registra el nombre del archivo original.
psusi

8
Sip. El nombre es opcional en el encabezado gzip (obviamente no habrá uno si comprime la salida de transmisión de un comando) y la mayoría de las herramientas no lo restaurarán de manera predeterminada (por ejemplo, debe usarlo gzip --nameexplícitamente al descomprimir), pero no tiene que usar tar para obtener la persistencia del nombre de archivo.
Miles

Gracias por señalar esto, no lo sabía. Aún así, dado que ese no es el comportamiento predeterminado, el punto se destaca: la distribución de un archivo en formato tar conserva el nombre de archivo original (y posiblemente la ruta relativa), sin intervención del destinatario. Distribuir un archivo comprimido (g) no lo hace.
alexis

8

Además de todas las otras respuestas, recientemente me encontré con una situación de secuencias de comandos en la que solo se esperaba un archivo, pero un empleado anterior escribió las secuencias de comandos con la posibilidad de generar más de un archivo. Por lo tanto, los archivos fueron alquilados y comprimidos, luego transferidos y expandidos.

Cuando el proceso creció hasta el punto de que creó un archivo de 4,3 GB, se dio la vuelta e hizo un archivo .dump.001 además de un archivo .dump. Todos los guiones siguieron funcionando.

Esa es la pereza sysadmin proactiva definida!


2

Me gustaría tar un solo archivo, para copiarlo conservando la marca de tiempo (que se pasa por alto fácilmente en las descargas). Los permisos y la propiedad de los archivos son menos importantes: la descarga es un término que se aplica a los sistemas que no están bien integrados.

Ya sea tar'd o no, es una práctica estándar comprimir el archivo para acelerar las descargas y evitar quedarse sin espacio en disco.


-1

Tar es especialmente útil para múltiples archivos no escritos en un sistema de archivos formal, siempre lo ha sido. Si por alguna razón hay alguna ocasión, solo se debe escribir 1 archivo, no tiene ninguna consecuencia real. Puedo dd mi .tar.gz directamente a / dev / sdx sin tener en cuenta la partición o el sistema de archivos. También puede ser cinta.

Generalmente se hace porque el script o proceso se ha copiado del código de herencia. Por supuesto, no hay necesidad de tar si solo hay un archivo, pero deja espacio para la mejora de múltiples archivos ......

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.