/ / Qual è il vantaggio di utilizzare il formato di file Tar oggi?

Qual è il vantaggio di utilizzare il formato di file Tar oggi?


Il formato di archiviazione tar è, negli anni dell'informatica, un vero Matusalemme, ma è ancora oggi ampiamente utilizzato. Cosa rende il formato tar così utile molto tempo dopo la sua nascita?

La sessione di domande e risposte di oggi ci viene fornita da SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web di domande e risposte guidato dalla community.

La domanda

Il lettore SuperUser MarcusJ è curioso del formato tar e del perché lo stiamo ancora usando 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 i file ed eseguono la compressione all'interno dello stesso formato di file logico.

Domande:

  • C'è una penalità di prestazione durante ilfasi di aggregazione / compressione / decompressione per l'utilizzo di tar incapsulato in gzip o bzip2, rispetto all'utilizzo di un formato di file che fa aggregazione e compressione nella stessa struttura di dati? Supponiamo che l'autonomia del compressore da confrontare sia identica (ad esempio gzip e Deflate sono simili).
  • Esistono funzionalità del formato di file tar che non hanno altri formati di file, come .7z e .zip?
  • Poiché tar è un formato file così vecchio e più recentei formati di file esistono oggi, perché tar (sia incapsulato in gzip, bzip2 o anche il nuovo xz) è ancora così ampiamente usato oggi su GNU / Linux, Android, BSD e altri sistemi operativi UNIX, per trasferimenti di file, sorgente di programmi e binari download e talvolta anche come formato di gestione pacchetti?

Questa è una domanda perfettamente ragionevole; sono cambiate così tante cose nel mondo dell'informatica negli ultimi trenta anni ma stiamo ancora utilizzando il formato tar. Qual è la storia?

La risposta

Collaboratore di SuperUser Allquixotic offre alcune informazioni sulla longevità e la funzionalità del formato tar:

Parte 1: Performance

Ecco un confronto tra due flussi di lavoro separati e ciò che fanno.

Hai un file sul disco blah.tar.gz che è, diciamo, 1 GB di dati compressi con gzip che, quando non compresso, 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 di files ... in forma non compressa.

Quindi lo faresti

gzip blah.tar

Questo leggerebbe il contenuto di blah.tar dal disco, comprimili attraverso l'algoritmo di compressione gzip, scrivi il contenuto su blah.tar.gz, quindi scollega (elimina) il file blah.tar.

Adesso 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 di dati compressi da 1 GB di blah.tar.gz.
  • ELABORA i dati compressi tramite il gzip decompressore in memoria.
  • Man mano che il buffer di memoria si riempie di dati "a blocco", SCRIVI i dati non compressi nel fileblah.tar su disco e ripetere fino a quando tutti i dati compressi non vengono letti.
  • Scollega (elimina) il file blah.tar.gz.

Adesso hai blah.tar su disco, che non è compresso ma contiene uno o più file al suo interno, con sovraccarico della struttura dati molto basso. La dimensione del file è probabilmente un paio di byte sarebbe maggiore della somma di tutti i dati del file.

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, comprese informazioni su autorizzazioni, nomi di file, directory, ecc.
  • SCRIVI su disco i 2 GB di dati più i metadati. Ciò comporta: la traduzione della struttura dei dati / informazioni sui 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 dal 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 erano 2 GB (per gunzip) + 2 GB (per tar) + pochi byte per metadati = circa 4 GB.

Modo 2

Hai blah.tar.gz, in un modo o nell'altro.

Decidi di eseguire:

tar xvzf blah.tar.gz

Questo sarà

  • LEGGI il contenuto di dati compressi da 1 GB di blah.tar.gz, un blocco alla volta, nella memoria.
  • ELABORA i dati compressi tramite il gzip decompressore in memoria.
  • Man mano che il buffer di memoria si riempie, lo farà tubo quei dati, in memoria, fino al tar parser di formato file, che leggerà le informazioni sui metadati, ecc. e i dati del file non compresso.
  • Mentre il buffer di memoria si riempie nel tar file parser, SCRIVERA 'i dati non compressi sul disco, creando file e directory e riempiendoli con i contenuti non compressi.

I dati totali noi LEGGERE dal disco in questo processo c'erano 1 GB di dati compressi, punto.

I dati totali noi SCRITTO su disco in questo processo c'erano 2 GB di dati non compressi + qualche byte per metadati = circa 2 GB.

Se noti, la quantità di I / O del disco in Modo 2 è identico sull'I / O del disco eseguito, ad esempio, dal Zip o7-Zip programmi, adattando eventuali differenze nel rapporto di compressione.

E se il rapporto di compressione è la tua preoccupazione, usa il Xz compressore da incapsulare tare disponi dell'archivio TAR di LZMA2, che è altrettanto efficiente dell'algoritmo più avanzato disponibile 7-Zip :-)

Parte 2: Funzionalità

tar memorizza le autorizzazioni UNIX nei suoi metadati di file,ed è molto noto e testato per impacchettare con successo una directory con tutti i tipi di permessi, collegamenti simbolici, ecc. Ci sono più di un paio di casi in cui potrebbe essere necessario raggruppare un gruppo di file in un singolo file o flusso, ma non necessariamente comprimerlo (sebbene la compressione sia utile e spesso usata).

Parte 3: compatibilità

Molti strumenti sono distribuiti in sorgente o binarioforma come .tar.gz o .tar.bz2 perché è un formato di file con il “minimo comune denominatore”: proprio come la maggior parte degli utenti Windows ha accesso ai decompressori .zip o .rar, la maggior parte delle installazioni Linux, anche le più elementari, avranno accesso almeno al catrame e al gunzip, non importa quanti anni hanno o ridotto. Anche i firmware Android hanno accesso a questi strumenti.

Nuovi progetti rivolti al pubblico in esecuzione modernale distribuzioni possono benissimo essere distribuite 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 ai formati di file Zip o Rar in quanto comprime e specifica un layout per incapsulare più file in un singolo file.

Non vedi.7z veniva usato più spesso per lo stesso motivo per cui la musica non veniva venduta dai negozi di download online in formati nuovissimi come Opus o dai video in WebM. Compatibilità con le persone che utilizzano sistemi antichi o di base.


Hai qualcosa da aggiungere alla spiegazione? Suona nei commenti. Vuoi leggere altre risposte da altri utenti esperti di Stack Exchange? Dai un'occhiata al thread completo di discussione qui.