Qual è il vantaggio dell'utilizzo del formato di file tar oggi?
Il formato di archiviazione di tar è, negli anni dell'informatica, un vero Matusalemme ma è ancora oggi in uso pesante. Ciò che rende il formato tar così utile a lungo dopo il suo inizio?
La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web 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:
So che tar è stato creato per gli archivi su nastro nel corso della giornata, ma oggi abbiamo formati di file di archivio che aggregano entrambi i file ed eseguono la compressione all'interno dello stesso formato di file logico.
Domande:
- Esiste una penalizzazione delle prestazioni durante le fasi di aggregazione / compressione / decompressione per l'utilizzo di tar incapsulato in gzip o bzip2, rispetto all'utilizzo di un formato file che fa aggregazione e compressione nella stessa struttura dati? Si supponga che il tempo di esecuzione del compressore da confrontare sia identico (ad esempio, gzip e Deflate sono simili).
- Ci sono funzionalità del formato di file tar che altri formati di file, come .7z e .zip non hanno?
- Dato che tar è un formato di file così vecchio, e oggi esistono formati di file più recenti, perché tar (sia incapsulato in gzip, bzip2 o anche il nuovo xz) ancora oggi ampiamente utilizzato su GNU / Linux, Android, BSD e altri UNIX simili sistemi operativi, per trasferimenti di file, download di sorgenti e download di programmi, e talvolta anche come formato di gestore di pacchetti?
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:
Parte 1: prestazioni
Ecco un confronto tra due flussi di lavoro separati e ciò che fanno.
Hai un file su disco
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:
file tar cf blah.tar ...
Ciò comporterebbe
blah.tar
che è una semplice aggregazione delFile…
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 inblah.tar.gz
, quindi scollegare (eliminare) il fileblah.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.- Mentre 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 è probabilmente un 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 ilcatrame
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 conversione delle informazioni sulla struttura dati / metadati nella creazione di nuovi file e directory sul 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 2 GB (per gunzip) + 2 GB (per tar) + pochi byte per i metadati = 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, nella memoria.- PROCESSI i dati compressi attraverso il
gzip
decompressore in memoria.- Come il buffer di memoria si riempie, lo farà tubo quei dati, in memoria, fino al
catrame
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
catrame
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
Cerniera lampo
o7-Zip
programmi, regolando eventuali differenze nel rapporto di compressione.E se il rapporto di compressione è la tua preoccupazione, usa il
xz
compressore per incapsularecatrame
, e hai l'archivio TAR di LZMA2, che è altrettanto efficiente dell'algoritmo più avanzato a disposizione7-Zip
:-)Parte 2: caratteristiche
catrame
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 gruppo 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 il più elementare, avrà accesso almeno a catrame e gunzip, non importa quanti anni ha o ridotto. 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 lo stesso motivo 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.