Parte 1: Performance
Ecco un confronto tra due flussi di lavoro separati e ciò che fanno.
Hai un file su 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ò porterebbe a blah.tar
una semplice aggregazione della files ...
forma non compressa.
Quindi lo faresti
gzip blah.tar
Questo leggerebbe i contenuti di blah.tar
dal disco, li comprimerebbe attraverso l'algoritmo di compressione gzip, scrivere i contenuti su 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 di 1 GB di dati compressi di
blah.tar.gz
.
- ELABORA i dati compressi attraverso il
gzip
decompressore in memoria.
- Man mano che il buffer di memoria si riempie di "un blocco" di dati, SCRIVI i dati non compressi nel file
blah.tar
su disco e ripeti fino a quando non vengono letti tutti i dati compressi.
- Scollega (elimina) il file
blah.tar.gz
.
Ora, hai blah.tar
sul 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 più grande della somma di tutti i dati del file.
Tu corri:
tar xvf blah.tar
Questo sarà
- LEGGI i 2 GB di contenuto dei dati non compressi
blah.tar
e le tar
strutture dei dati del formato del file, comprese le informazioni sui permessi dei file, i nomi dei file, le directory, ecc.
- SCRIVI i 2 GB di dati più i metadati su disco. Ciò implica: tradurre la struttura dei dati / informazioni sui metadati nella creazione di nuovi file e directory su disco come appropriato, o riscrivere file e directory esistenti con nuovi contenuti di dati.
I dati totali che LEGGIAMO dal disco in questo processo erano 1 GB (per gunzip) + 2 GB (per tar) = 3 GB.
I dati totali che WROTE 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, in memoria.
- ELABORA i dati compressi attraverso il
gzip
decompressore in memoria.
- Man mano che il buffer di memoria si riempie, invia i dati, in memoria, al
tar
parser del formato file, che leggerà le informazioni sui metadati, ecc. E i dati del file non compresso.
- Man mano che il buffer di memoria si riempie nel
tar
parser di file, SCRIVERA 'i dati non compressi sul disco, creando file e directory e riempiendoli con il contenuto non compresso.
I dati totali che LEGGIAMO dal disco in questo processo erano 1 GB di dati compressi, punto.
I dati totali che WROTE su disco in questo processo erano 2 GB di dati non compressi + pochi byte per i metadati = circa 2 GB.
Se noti, la quantità di I / O del disco nel modo 2 è identica all'I / O del disco eseguita, per esempio, dai programmi Zip
o 7-Zip , adattandosi per 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 disponibile per 7-Zip :-)
Parte 2: Funzionalità
tar
memorizza i permessi Unix nei suoi metadati di file ed è molto conosciuto e testato per impacchettare con successo una directory con tutti i tipi di permessi, collegamenti simbolici, ecc. Ci sono più di alcuni casi in cui potrebbe essere necessario globare 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": proprio come la maggior parte degli utenti Windows ha accesso ai decompressori .zip o .rar, la maggior parte delle installazioni Linux , anche i più elementari, avranno accesso ad almeno catrame e gunzip, non importa quanti anni hanno o ridotto. Anche i firmware Android hanno accesso a questi strumenti.
I nuovi progetti rivolti al pubblico che esegue 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 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 dai negozi di download online in nuovi formati come Opus o dai video in WebM . Compatibilità con le persone che eseguono sistemi antichi o di base.
tar xvzf
sia più difficile di quanto7z -x
...