21Aug
Il formato di archiviazione tar è, negli anni dell'informatica, un vero Methuselah, ma è ancora oggi in uso pesante. Cosa rende il formato tar così utile a lungo dopo il suo inizio?
Today's Question &La sessione di risposta ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di Q & A basato su community.
La domanda
SuperUser reader 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 entrambiaggregare i file ed eseguire la compressione all'interno dello stesso formato di file logico. Domande
:
- Esiste una penalizzazione delle prestazioni durante gli stadi di decompressione dell'aggregazione /compression/ 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 caratteristiche del formato file tar che altri formati di file, come. 7z e. zip non hanno?
- Poiché 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 similiSistemi operativi UNIX, 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
SuperUser contributor 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 che è, per esempio, 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 dovresti creare questo, se dovessi fare l'archiviazione e la compressione separatamente, sarebbe:
tar cf blah.tar files. ..Ciò risulterebbe in blah.tar che è una semplice aggregazione dei file. .in forma non compressa
Quindi farei
gzip blah.tarQuesto leggerà il contenuto di blah.tar dal disco, li comprime attraverso l'algoritmo di compressione gzip, scriverà il contenuto in blah.tar.gz, quindi scollegherà( cancella) il file blah.catrame.
Ora, decomprimiamo!
Way 1
Hai blah.tar.gz, in un modo o nell'altro.
Decidi di eseguire:
gunzip blah.tar.gzQuesto
- LEGGERE i contenuti di dati compressi da 1GB di blah.tar.gz.
- ELABORA i dati compressi attraverso il decompressore gzip in memoria.
- Poiché il buffer di memoria si riempie di "un blocco" di dati, WRITE i dati non compressi nel fileblah.tar su disco e ripetere finché tutti i dati compressi non vengono letti.
- 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.
Esegui:
tar xvf blah.tarQuesto
- LEGGERE i 2 GB di contenuto di dati non compressi di blah.tar e le strutture di dati del formato di file tar, comprese le informazioni su permessi di file, nomi di file, directory, ecc.
- WRITE su discoi 2 GB di dati più i metadati. Ciò comporta: la conversione 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 che LEGGERE dal disco in questo processo era 1 GB( per gunzip) + 2 GB( per tar) = 3 GB.
I dati totali che WROTE su disco in questo processo era 2 GB( per gunzip) + 2 GB( per tar) + alcuni byte per metadata = circa 4 GB.
Way 2
Hai blah.tar.gz, in un modo o nell'altro.
Decidi di eseguire:
tar xvzf blah.tar.gzQuesto
- LEGGERE i contenuti di dati compressi da 1 GB di blah.tar.gz, un blocco alla volta, in memoria.
- ELABORA i dati compressi attraverso il decompressore gzip in memoria.
- Mentre il buffer di memoria si riempie, analizzerà i dati, in memoria, attraverso il parser del formato file tar, che leggerà le informazioni sui metadati, ecc. E i dati del file non compresso.
- Mentre il buffer di memoria si riempie nel parser del file tar, WRITE i dati non compressi su disco, creando file e directory e riempiendoli con i contenuti non compressi.
I dati totali che LEGGONO dal disco in questo processo era 1 GB di dati compressi, punto.
I dati totali che WROTE su disco in questo processo era di 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 Way 2 è identica all'I / O del disco eseguita, ad esempio, dai programmi Zip o7-Zip, regolando eventuali differenze nel rapporto di compressione.
E se il tuo rapporto di compressione è la tua preoccupazione, usa il compressore Xz per incapsulare tar, e hai l'archivio TAR di LZMA2'ed, che è altrettanto efficiente dell'algoritmo più avanzato disponibile per 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 compilare un gruppo di filein 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 a. zip o. rardecompressori, la maggior parte delle installazioni di Linux, anche le più elementari, avranno accesso almeno a tar e gunzip, non importa quanto vecchi o ridotti. Anche i firmware Android hanno accesso a questi strumenti.
I nuovi progetti rivolti ai 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 è simileai formati di file Zip o Rar in quanto entrambi comprime e specifica un layout per incapsulare più file in un singolo file.
Non vedi. 7z usato 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.