La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di domande e risposte basato sulla comunità.
La domanda
Il lettore SuperUser MarcusJ è curioso del formato tar e del motivo per cui lo stiamo ancora utilizzando dopo tutti questi anni:
I know that tar was made for tape archives back in the day, but today we have archive file formats that both aggregate files and perform compression within the same logical file format.
Questions:
- Is there a performance penalty during the aggregation/compression/decompression stages for using tar encapsulated in gzip or bzip2, when compared to using a file format that does aggregation and compression in the same data structure? Assume the runtime of the compressor being compared is identical (e.g. gzip and Deflate are similar).
- Are there features of the tar file format that other file formats, such as.7z and.zip do not have?
- Since tar is such an old file format, and newer file formats exist today, why is tar (whether encapsulated in gzip, bzip2 or even the new xz) still so widely used today on GNU/Linux, Android, BSD, and other such UNIX operating systems, for file transfers, program source and binary downloads, and sometimes even as a package manager format?
Questa è una domanda perfettamente ragionevole; così tanto è cambiato nel mondo informatico negli ultimi trent'anni, ma stiamo ancora usando il formato tar. Qual è la storia?
La risposta
Collaboratore SuperUser Allquixotic offre alcune informazioni sulla longevità e funzionalità del formato tar:
Part 1: Performance
Here is a comparison of two separate workflows and what they do.
You have a file on disk
blah.tar.gz
vale a dire 1 GB di dati compressi con gzip che, quando non compressi, occupa 2 GB (quindi un rapporto di compressione del 50%).
Il modo in cui lo creeresti, se dovessi eseguire l'archiviazione e la compressione separatamente, sarebbe:
tar cf blah.tar files …
Ciò comporterebbe
blah.tar
che è una semplice aggregazione del
files …
in forma non compressa.
Allora lo faresti
gzip blah.tar
Questo avrebbe letto il contenuto di
blah.tar
dal disco, comprimili tramite l'algoritmo di compressione gzip, scrivi i contenuti in
blah.tar.gz
quindi scollegare (eliminare) il file
blah.tar
Ora, decomprimiamo!
Modo 1
Hai
blah.tar.gz
in un modo o nell'altro.
Decidi di eseguire:
gunzip blah.tar.gz
Questo sarà
-
LEGGI il contenuto dei dati compressi da 1 GB di
blah.tar.gz
-
PROCESSI i dati compressi attraverso il
gzip
decompressore in memoria.
-
Poiché il buffer di memoria si riempie di "un blocco" di dati, WRITE i dati non compressi nel file
blah.tar
su disco e ripetere finché non vengono letti tutti i dati compressi.
-
Scollegare (eliminare) il file
blah.tar.gz
Ora, hai
blah.tar
su disco, che non è compresso ma contiene uno o più file al suo interno, con un sovraccarico di struttura dati molto basso. La dimensione del file è probabilmenteun paio di byte più grande della somma di tutti i dati del file sarebbe.
Tu corri:
tar xvf blah.tar
Questo sarà
-
LEGGI i 2 GB di contenuti di dati non compressi di
blah.tar
e il
tar
strutture di dati del formato di file, incluse informazioni su permessi di file, nomi di file, directory, ecc.
- SCRIVI su disco i 2 GB di dati più i metadati. Ciò comporta: la traduzione delle informazioni sulla struttura dati / metadati nella creazione di nuovi file e directory su disco, come appropriato, o la riscrittura di file e directory esistenti con nuovi contenuti di dati.
I dati totali noi LEGGERE da disco in questo processo era 1 GB (per gunzip) + 2 GB (per tar) = 3 GB.
I dati totali noi SCRITTO su disco in questo processo era 2GB (per gunzip) + 2 GB (per tar) + alcuni byte per metadata = circa 4 GB.
Via 2
Hai
blah.tar.gz
in un modo o nell'altro.
Decidi di eseguire:
tar xvzf blah.tar.gz
Questo sarà
-
LEGGI il contenuto dei dati compressi da 1 GB di
blah.tar.gz
un blocco alla volta, in memoria.
-
PROCESSI i dati compressi attraverso il
gzip
decompressore in memoria.
-
Come il buffer di memoria si riempie, lo farà tubo che i dati, in memoria, attraverso il
tar
parser del formato file, che leggerà le informazioni sui metadati, ecc. e i dati del file non compresso.
-
Come il buffer di memoria si riempie nel
tar
analizzatore di file, SCRIVE i dati non compressi su disco, creando file e directory e riempiendoli con i contenuti non compressi.
I dati totali noi LEGGERE dal disco in questo processo era 1 GB di dati compressi, punto.
I dati totali noi SCRITTO su disco in questo processo c'erano 2 GB di dati non compressi + pochi byte per i metadati = circa 2 GB.
Se si nota, la quantità di I / O del disco in Via 2 èidentico al disco I / O eseguito da, diciamo, il
Zip
o
7-Zip
programmi, regolando eventuali differenze nel rapporto di compressione.
E se il rapporto di compressione è la tua preoccupazione, usa il
Xz
compressore per incapsulare
tar
e hai l'archivio TAR di LZMA2, che è altrettanto efficiente dell'algoritmo più avanzato a disposizione
7-Zip
:-)
Parte 2: caratteristiche
tar
memorizza le autorizzazioni UNIX all'interno dei suoi metadati di file, ed è molto ben noto e testato per riempire con successo una directory con tutti i tipi di permessi, collegamenti simbolici, ecc. Ci sono più di un paio di casi in cui si potrebbe aver bisogno di inserire un mucchio di file in un singolo file o flusso, ma non necessariamente comprimerlo (sebbene la compressione sia utile e spesso utilizzata).
Parte 3: compatibilità
Molti strumenti sono distribuiti in formato sorgente o binario come.tar.gz o.tar.bz2 perché è un formato di file "minimo comune denominatore": molto simile alla maggior parte degli utenti Windows ha accesso ai decompressori.zip o.rar, la maggior parte delle installazioni Linux, anche i più basilari, avranno accesso almeno a catrame e gunzip, non importa quanti anni hanno o meno. Anche i firmware Android hanno accesso a questi strumenti.
Nuovi progetti rivolti a pubblici che eseguono distribuzioni moderne possono benissimo distribuire in un formato più moderno, come.tar.xz (usando il formato di compressione Xz (LZMA), che comprime meglio di gzip o bzip2) o.7z, che è simile a i formati di file Zip o Rar in quanto entrambi comprime e specifica un layout per incapsulare più file in un singolo file.
Non si vede.7z utilizzato più spesso per la stessa ragione per cui la musica non viene venduta da negozi di download online in formati nuovi come Opus o video in WebM. Compatibilità con le persone che eseguono sistemi antichi o di base.
Hai qualcosa da aggiungere alla spiegazione? Sound off nei commenti.Vuoi leggere più risposte dagli altri utenti di Stack Exchange esperti di tecnologia? Controlla la discussione completa qui.