Qual è il vantaggio di usare 'tar' oggi?


209

So che è tarstato realizzato 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 le fasi di aggregazione / compressione / decompressione per l'utilizzo tarincapsulato in gzipo 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 tarformato file che altri formati file, come .7ze .zipnon hanno?

  • Poiché tarè un formato di file così vecchio, e oggi esistono formati di file più recenti, perché tar(sia incapsulato in gzip, bzip2sia anche il nuovo xz) è ancora così ampiamente usato oggi su GNU / Linux, Android, BSD e altri sistemi operativi UNIX, per file trasferimenti, sorgenti di programmi e download binari, e talvolta anche come formato di gestione pacchetti?


33
Non sono d'accordo sul fatto che "fa perdere tempo". Se intendi prestazioni, non vi è alcuna penalità effettiva per le prestazioni in quanto il formato è molto efficiente. Se vuoi dire spreca il vostro tempo, non vedo come tar xvzfsia più difficile di quanto 7z -x...
allquixotic

41
Sembra lamentarsi del fatto che tar non memorizzi un catalogo all'inizio, quindi gli strumenti di compressione gui che vogliono elencare il contenuto prima dell'estrazione devono decomprimere l'intero tar solo per elencare il contenuto, quindi lo decomprimono nuovamente durante l'estrazione .
psusi

10
@MarcusJ: pensi che 7z in qualche modo magicamente sappia dove ogni file inizia in un archivio? Inoltre, i soliti algoritmi di compressione (gzip, bzip2) funzionano con lo streaming del contenuto: non è necessario completare al 100% il primo stadio prima del prossimo.
unperson325680

11
Inoltre @MarcusJ sembra confondere due cose diverse: quando lo fai tar xvzf, i dati non compressi non vengono scritti sul disco rigido nel .tarformato! Hai ragione che se avessi eseguito gunzip blah.tar.gze poi tar xf blah.tar, avrebbe scritto i dati sul disco due volte (una volta come .tar e di nuovo come file nel filesystem), ma nessuno lo fa in quel modo. Gli tar xzfusi una pipe UNIX (sostanzialmente una copia della memoria) per trasferire i dati non compressi da gzip(o qualsiasi altra cosa compressore) per tar, quindi i dati sono non scritti su disco in .tarformato.
allquixotic

14
Una cosa che so è che tar(soprattutto compresso) si comporta in modo terribile quando si tratta di corruzione dei dati. I piccoli dati di ridondanza / recupero aggiunti dai formati moderni valgono oro
PPC

Risposte:


178

Parte 1: Performance

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

Hai un file su disco blah.tar.gzche è, 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.taruna semplice aggregazione della files ...forma non compressa.

Quindi lo faresti

gzip blah.tar

Questo leggerebbe i contenuti di blah.tardal 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 gzipdecompressore in memoria.
  • Man mano che il buffer di memoria si riempie di "un blocco" di dati, SCRIVI i dati non compressi nel file blah.tarsu disco e ripeti fino a quando non vengono letti tutti i dati compressi.
  • Scollega (elimina) il file blah.tar.gz.

Ora, hai blah.tarsul 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.tare le tarstrutture 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 gzipdecompressore in memoria.
  • Man mano che il buffer di memoria si riempie, invia i dati, in memoria, al tarparser 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 tarparser 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 Zipo 7-Zip , adattandosi per eventuali differenze nel rapporto di compressione.

E se il rapporto di compressione è la tua preoccupazione, usa il Xzcompressore per incapsulare tare 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.


Complimenti per un'ottima risposta con tutto il contenuto separato sotto tre intestazioni distinte.
JFW,

2
"Parte 3: Compatibilità" sembra essere stato copiato dalla risposta di @ Kruug.
titaniumdecoy

23
@titaniumdecoy Hai notato che è stato allquixotic che originariamente ha scritto quella parte e l'ha modificata nella risposta di Kruug?
Slhck

2
Grazie per averlo sottolineato, non me ne sono accorto. Tuttavia, mi sembra un po 'sciocco avere un blocco di testo identico in due diverse risposte in questa pagina.
titaniumdecoy

1
Ciò risponde al motivo per cui si tarinserisce nell'ecosistema di archiviazione (ovvero aggregare i file insieme, fornendo un aumento delle prestazioni e alcuni altri vantaggi come il salvataggio delle autorizzazioni), ma non affronta perché le alternative moderne come quelle darnon vengano utilizzate. In altre parole, questa risposta giustifica l'uso di aggregatori di file, ma non del tarsoftware in sé.
gaborous

101

È stata data una risposta su Stack Overflow .

bzip e gzip funzionano su singoli file, non su gruppi di file. I vecchi zip (e pkzip) semplici funzionano su gruppi di file e hanno il concetto di archivio integrato.

La filosofia * nix è uno dei piccoli strumenti che fanno molto bene lavori specifici e possono essere concatenati. Ecco perché ci sono due strumenti che hanno compiti specifici e sono progettati per adattarsi bene insieme. Significa anche che puoi usare tar per raggruppare i file e quindi hai una scelta di strumenti di compressione (bzip, gzip, ecc.).

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 il più elementare, avrà accesso almeno tare gunzip, non importa quanti anni o ridotto. Anche i firmware Android hanno accesso a questi strumenti.

I nuovi progetti rivolti al pubblico che esegue distribuzioni moderne potrebbero benissimo distribuire in un formato più moderno, come .tar.xz(utilizzando il formato di compressione Xz ( LZMA ), che comprime meglio di gzip o bzip2) o .7z, che è simile a ZIP o RAR formati di file 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 . La compatibilità con le persone che utilizzano sistemi antichi o di base è importante.


7
Ciao @Kruug, ho modificato il tuo post solo per dare una prospettiva pratica sul perché le persone scelgono ancora di usare questi formati quando hanno la scelta di usare qualcos'altro. Non ho cambiato il testo che avevi già. Questo è solo per garantire che quella che sembra essere la risposta canonica a questa domanda avrà un quadro completo. Sentiti libero di modificare la mia modifica se vuoi :)
allquixotic

5
@allquixotic inizio qualcuno? Modifica la modifica e modifica in modo da poter modificare una modifica ...
SnakeDoc

21
Questa risposta è sicuramente un caso di "A volte sono spazzato via da voti immeritati". Non affronta il problema principale della domanda che è con l'elenco dei contenuti di tar compresso e non è nemmeno una risposta originale!
Ярослав Рахматуллин,

5
-1 per grande giustizia. questo avrebbe dovuto essere un commento.
mercoledì

6
Non compro l'argomento legacy / minimo comune denominatore; Ricordo che su nuovi sistemi (sun) spesso dovevo scaricare gzip / gunzip (da sunfreeware) solo per installare altri software pacchettizzati tar.gz (oltre a gnu tar, dal momento che il catrame di sun veniva aspirato). Per il legacy / denominatore comune inferiore, hai avuto tar.Z(comprimi / decomprimi). La progressione delle utility è stata un flusso costante (nessun gioco di parole previsto) di cambiamento e miglioramento: Z => zip => gz => bz2 => 7z => xz (o qualunque ordine tu preferisca). Per quanto riguarda il ruolo di tar, alcuni programmi di utilità un / compress solo e richiedono ancora tar per raggruppare le gerarchie di file.
michael

63

Tar ha un ricco set di operazioni e modificatori che sanno tutto sui filesystem Unix. Conosce le autorizzazioni di Unix, i diversi tempi associati ai file, i collegamenti reali, i softlink (e la possibilità che i collegamenti simbolici possano introdurre cicli nel grafico del filesystem) e permetta di specificare diversi modi per gestire tutti questi dati .

  • Vuoi che i dati estratti mantengano i tempi di accesso ai file? Tar può farlo. Per conservare le autorizzazioni? Tar può farlo.

  • Vuoi conservare i collegamenti simbolici come collegamenti simbolici? Tar lo fa di default. Vuoi invece copiare la destinazione? Tar può farlo.

  • Vuoi essere sicuro che i dati hardlink siano archiviati una sola volta (ovvero, per fare la cosa giusta)? Tar lo fa.

  • Vuoi gestire bene i file sparsi? Tar può farlo.

  • Vuoi dati non compressi (perché?)? Tar può farlo. Comprimere con gzip? Tar può farlo. Con bzip2? Tar può farlo. Con programmi di compressione esterni arbitrari? Tar può farlo.

  • Vuoi scrivere o ripristinare su / da un dispositivo non elaborato? Il formato di Tar gestisce così bene.

  • Vuoi aggiungere file a un archivio esistente? Tar può farlo. Differire due archivi per vedere cosa è cambiato? Tar può farlo. Aggiornare solo quelle parti dell'archivio che sono state modificate? Tar può farlo.

  • Vuoi essere sicuro di non archiviare in più di un filesystem? Tar può farlo.

  • Vuoi prendere solo i file più recenti del tuo ultimo backup? Tar può farlo.

  • Vuoi conservare nomi o numeri di utenti e gruppi? Tar può fare uno dei due.

  • Devi preservare i nodi del dispositivo (come i file in /dev) in modo che dopo l'estrazione, il sistema funzionerà correttamente? Tar può farlo.

Tar si è evoluto per gestire un sacco di casi d'uso da decenni e sa davvero molto sulle cose che le persone vogliono fare con i filesystem Unix.


12
Non è necessario GNU tar per usare un compressore arbitrario: basta dire a tar di scrivere l'archivio con cui stdout f -e inviarlo al compressore.
Ilmari Karonen,

3
"Vuoi dati non compressi (perché?)?" Uso tarmolto spesso per copiare un albero di filesystem da un posto all'altro e preservare le autorizzazioni, ecc., E in questo caso la compressione richiede solo cicli di CPU aggiuntivi. Es tar cf - * | tar xf - -C /somewhere.
Steve,

1
Inoltre, si desidera un file .tar quando il filesystem di destinazione esegue la deduplicazione. La creazione di archivi compressi su un filesystem che esegue la deduplicazione ridurrà sostanzialmente il rapporto di deduplicazione. Esempio: una volta abbiamo eliminato un file tar.gz da $ 10.000,00; nel senso che occupava uno spazio di archiviazione di $ 10k perché qualcuno utilizzava la compressione.
Aaron,

I cicli CPU @Steve potrebbero essere più economici degli I / O del disco per algoritmi come LZ4 o LZO. Ecco perché vengono utilizzati in zram e nei file system di compressione trasparenti come NTFS, ZFS, Btrfs ... quindi a volte è effettivamente più veloce rispetto alla compressione poiché la quantità di I / O del disco è notevolmente ridotta
phuclv,

30

Confondi i due distinti processi di archiviazione e compressione .

Ragioni per l'utilizzo di un archiviatore

Un motivo per utilizzare l'archiviazione senza compressione è, ad esempio, se un gruppo di file viene copiato da un host a un altro. Un comando come il seguente

tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"

può accelerare notevolmente le cose. Se so che i file non possono essere compressi o se SSH è impostato con la compressione, può far risparmiare molto tempo alla CPU. Certo, si può usare uno strumento di compressione più moderno con una funzione di archiviazione e disattivare la compressione. Il vantaggio tarè che posso aspettarmi che sia disponibile su tutti i sistemi.

Motivi per l'utilizzo di un archiviatore con compressione gzip

Un motivo che uso tarcon gzipè: velocità! Se voglio trasferire alcuni GiB di file di testo da un posto all'altro, non mi interessa comprimere gli ultimi byte, poiché la compressione viene utilizzata solo per il transito, non per l'archiviazione a lungo termine. In quei casi che uso gzip, il che non massimizza la CPU (al contrario di 7-Zip , ad esempio), il che significa che sono di nuovo legato all'I / O e non alla CPU. E ancora: gzippuò essere considerato disponibile ovunque.

Motivi per l'utilizzo tara favore di scp, rsyncecc

È meglio scpse hai molti piccoli file da copiare (ad esempio, una directory di posta con centinaia di migliaia di file). rsync, fantastico com'è, potrebbe non essere disponibile ovunque. Inoltre, rsyncpaga davvero solo se parte dei file - o una versione precedente - è già presente sulla destinazione. Per la copia iniziale tarè il più veloce, con compressione o senza, a seconda dei dati effettivi.


1
Ma se hai intenzione di archiviare, perché non comprimere anche tu? Va bene, sì, può risparmiare tempo per i file che non sono facilmente compressi, ma probabilmente gli archivi dovrebbero sapere che la musica, ad esempio, non è molto comprimibile, tranne che per le intestazioni.
MarcusJ

2
Potrebbe non essere necessario o il contenuto potrebbe non essere comprimibile.
Hasturkun,

4
Per motivi di prestazioni è spesso più semplice utilizzare l'aggregazione di file non compressi quando si inviano dati su collegamenti di rete con larghezza di banda molto elevata che superano la velocità con cui il compressore può comprimere i dati. Ciò è possibile ad esempio con Gigabit Ethernet; solo alcuni algoritmi di compressione ben progettati, che hanno anche un rapporto di compressione molto scarso, possono comprimere i dati così velocemente anche su una grande CPU desktop. Su un dispositivo incorporato hai ancora meno tempo con cui lavorare la CPU.
allquixotic

3
questo non solo accelera le cose, ma consente anche di preservare la proprietà dei file, i timestamp e gli attributi (se i privilegi dell'utente lo consentono)
Andre Holzner

3
@AndreHolzner Right. Lo faccio spesso tar cf - . | (cd ~/somewhere; tar xvf -). È davvero utile non dover aspettare fino alla scrittura dell'indice centrale (come ad esempio in un file zip).
user239558

24

Aggiungendo alle altre buone risposte qui, preferisco la combinazione tar+ gzip|bzip2|xzprincipalmente perché questi file compressi sono come flussi e puoi eseguirli facilmente.

Devo decomprimere un file disponibile su Internet. Con uno zipo due rarformati devo prima scaricarlo e poi decomprimerlo. Con tar.{gz,bz2,xz}posso scaricare e decomprimere nello stesso passaggio, senza la necessità di avere fisicamente l'archivio compresso sul disco:

curl -s http://example.com/some_compressed_file.tar.gz | tar zx

Questo lascerà solo i file non compressi sul mio disco e accelererà l'intero processo, perché non sto perdendo tempo prima di scaricare l'intero file e dopo che il download termina lo decomprimo. Invece, lo sto decomprimendo mentre sta scaricando. Non puoi farlo con zipo rarfile.


2
Non conosco rar (è un programma terribile che sembra essere diventato popolare solo con i pirati a causa della sua capacità di dividere in più file più piccoli), ma puoi eseguire lo streaming di zip proprio bene. La pagina man lo menziona persino. Ha anche il vantaggio di essere in grado di estrarre o aggiornare i file nel mezzo di un archivio di grandi dimensioni in modo efficiente, anche se tar tende ad ottenere una compressione leggermente migliore. La compressione rispetto all'accesso casuale è un compromesso.
psusi

3
@psusi errato. Puoi fare hack in questo modo , ma quello che fa è scaricare tutto il file in memoria e quindi decomprimerlo, invece di decomprimerlo durante il download. Ed funzipestrae semplicemente il primo file nel file zip, non tutto.
Carlos Campderrós,

2
@Stu solo per chiarire, non è un problema, è solo ottimizzare il tuo tempo (non mi interessa lo spazio se è quello che pensavi)
Carlos Campderrós

1
Entrambe le parti funzionano: puoi scavare da una parte e sparire dall'altra:tar zc /some/folder | ssh user@host "cd /other/folder && tar zx"
Carlos Campderrós,

1
@psusi come ricordo dai vecchi tempi quando usavo pkzip per archiviare file su più floppy, zip store catalog alla fine dell'archivio. Richiede sempre l'ultimo floppy per avviare l'estrazione o mostrare il catalogo. Quindi en.wikipedia.org/wiki/File:ZIP-64_Internal_Layout.svg
Mikhail Moskalev

13

Esistono diversi motivi per rimanere con (GNU) Tar.

È:

  • Licenza GPL
  • buono nel senso della filosofia Unix
    • strumento unico, in grado di svolgere diverse attività
  • ben documentato e ha molte funzionalità affidabili
  • compatibile con numerosi algoritmi di compressione
  • facile da usare e le persone hanno sviluppato abitudini con esso
  • ampiamente disponibile
  • Mi sento caldo e confuso quando utilizzo il software avviato da RMS (escluso Emacs )

Se la tua particolare carne bovina consiste nel dover "decomprimere" un tarball prima di poter leggere il contenuto, allora probabilmente hai ragione. WinRAR e 7-Zip lo fanno automaticamente. Tuttavia, esistono semplici soluzioni a questo problema, come documentare il contenuto di un archivio in una forma non compressa.


1
È un software gratuito - Quindi ce ne sono molti È bravo in quello che fa - Difficilmente rispetto ad altre cose È ben documentato e ha molte caratteristiche - Le caratteristiche sono poco utilizzate e detestabilmente facili da usare. Supporta diversi algoritmi di compressione - non tanti come alcuni altri
Griffin

4
gli dei Unix l'hanno creato - quindi dobbiamo usarlo!
SnakeDoc

28
Tar memorizza anche le autorizzazioni UNIX in modo nativo ed è molto noto e testato. Ci sono più di un paio di casi in cui potrebbe essere necessario raggruppare un mucchio di file in un singolo file o flusso, ma non necessariamente comprimerlo.
LawrenceC

3
Fortunatamente tar non è limitato alle sole versioni GNU. Mentre GNU Tar è sicuramente un buon software, i front-end relativi a libarchive + sono molto più veloci e facili da integrare in altri progetti software. Puoi fare un argomento per tar senza trasformarlo in una lotta per le licenze.
Lucas Holt,

1
Non sono sarcastico. Mi piace RMS e il modo in cui svolge le sue convinzioni.
Ярослав Рахматуллин,

11

I formati di file come .zip richiedono che il software legga prima la fine del file, per leggere un catalogo di nomi di file. Al contrario, tar archivia tali informazioni con il flusso compresso.

Il vantaggio del modo tar è che puoi decomprimere i dati mentre li leggi da una pipe non ricercabile, come un socket di rete.

Il vantaggio del metodo zip è che, per un file statico su disco, è possibile sfogliare i contenuti e i metadati senza decomprimere prima l'intero archivio.

Entrambi hanno i loro usi, a seconda di cosa stai facendo.


5
No, puoi sia leggere che scrivere file zip come stream da e verso una pipe.
Mark Adler,

Questo potrebbe essere specifico per l'implementazione, quindi non è certamente supportato dal pkzip originale.
Xorsyst

1
Sì, il software deve essere scritto per supportarlo. Il formato zip lo supporta completamente, con descrittori di dati che possono seguire i dati compressi con le lunghezze e CRC.
Mark Adler,

@MarkAdler, quale software? Infozip non supporta la decompressione da una pipe.
psusi


11

Sembra esserci una certa riluttanza a rispondere direttamente a tutte le tue domande, con un'apparente preferenza a usare la tua domanda come punto di partenza per la pontificazione. Quindi ci proverò.

C'è una penalità di prestazione durante le fasi 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).

No. Infatti, dato che tar e gzip sono di solito due processi, si ottiene persino un vantaggio di velocità multi-core che un archiviatore come Zip di Info-ZIP non fornisce. In termini di rapporto di compressione, tar + gzip di solito è notevolmente migliore di zip con deflate poiché il primo può beneficiare della correlazione tra i file, mentre il secondo comprime i file separatamente. Tale vantaggio di compressione si traduce in un vantaggio di velocità durante l'estrazione, poiché un archivio più compresso si decomprime in meno tempo.

Esistono funzionalità del formato di file tar che non hanno altri formati di file, come .7z e .zip?

Sì, tar è stato progettato per Unix e si è evoluto nel corso degli anni per essere in grado di registrare e ripristinare esattamente ogni piccolo angolo di file system Unix, persino il file system Unix Mac OS X più rumoroso e più incisivo. zip è in grado di conservare gran parte dei metadati come permessi, orari, proprietari, gruppi e collegamenti simbolici, ma non tutto. Ad esempio, né zip né 7z sono in grado di riconoscere o sfruttare i file sparsi, né sono a conoscenza o in grado di ripristinare i collegamenti reali.

Poiché tar è un formato di file così vecchio, e oggi esistono formati di file più recenti, perché tar (sia incapsulato in gzip, bzip2 o persino il nuovo xz) è ancora così ampiamente usato oggi su GNU / Linux, Android, BSD e altri UNIX sistemi operativi, per trasferimenti di file, sorgenti di programmi e download binari, e talvolta anche come formato di gestione pacchetti?

Molte altre buone risposte qui a questo. La cosa migliore è che funziona e puoi continuare ad aggiornarlo con formati di compressione migliori (ad es. Xz) e continuare a usare lo stesso formato tar e persino la stessa utility tar compilata. Se vuoi solo impacchettare un sacco di cose e poi decomprimerlo tutto dall'altra parte, allora ci sono poche ragioni per usare qualsiasi cosa tranne uno dei software più vecchi, più completi e più debug là fuori.

Se desideri un accesso casuale, aggiornamenti parziali o altre cose che devono gestire i contenuti frammentariamente, o vuoi essere in grado di scoprire cosa c'è dentro senza leggere tutto, allora vorrai utilizzare un formato diverso.


CW sta per Community Wiki . Vedi anche Cosa sono i post "Community Wiki"? .
ctype.h,

Immagino sia CW perché la domanda ha più di 15 risposte. Quando hai pubblicato questa risposta, poiché è il 15, la domanda e tutte le risposte sono state contrassegnate come CW.
ctype.h,

Non riesco a vedere come questa risposta dica qualcosa che nessuna delle altre risposte fa, oltre a citare direttamente le domande (che ho scritto, BTW, perché la revisione originale della domanda era abbastanza orribile da essere chiusa come NARQ). Bel tentativo però.
allquixotic,

Ok Qualunque cosa tu voglia pensare va bene. La tua risposta né qualsiasi altra risposta sembra indirizzare se c'è una penalità di prestazione. La tua risposta non affronta la notevole differenza di compressione, sebbene altri lo facciano. Dal momento che la tua non si occupa effettivamente delle prestazioni (la sezione delle prestazioni riguarda in realtà il flusso di lavoro, nulla sulle prestazioni), nessun'altra risposta risponde a tutto in un unico posto. È interessante che tu abbia scritto la domanda sulla penalità di prestazione, ma non hai risposto! Vai a capire.
Mark Adler,

A proposito, la discussione sul flusso di lavoro riguarda qualcosa che nessuno fa mai, ovvero scrivere un file tar su un disco e comprimerlo. tar è sempre usato o chiamando direttamente il programma di compressione o direttamente in una pipe a un programma di compressione.
Mark Adler,

11

Prestazione

La grande differenza è nell'ordine in cui vengono eseguiti la compressione e l'archiviazione. tarArchivi, quindi possono facoltativamente inviare l'archivio a un compressore, zipcostruire l'archivio e comprimere i dati del file in blocchi da 32 KB mentre viene inserito nell'archivio. Rompendo i dati del file in piccoli blocchi e comprimendoli separatamente, ti consente di estrarre file specifici o parti di file senza dover decomprimere tutto nell'archivio prima di esso. Inoltre impedisce al compressore di creare un dizionario molto grande prima che venga riavviato. Ciò significa che la compressione andrà più veloce, ma non offrirà un buon rapporto quanto la compressione dell'intera cosa con una dimensione del dizionario più grande.

Puoi visualizzarlo pensando a due file, in cui i primi 500 byte del secondo file sono gli stessi degli ultimi 500 byte del primo file. Con il zipmetodo, il compressore viene riavviato per il secondo file, quindi non ricorda che il primo file è terminato con gli stessi dati, quindi non può rimuovere i dati duplicati dal secondo file.

Popolarità

Ci sono molti altri formati che presentano numerosi vantaggi tar. 7-Zip non memorizza le autorizzazioni dei file Unix, ma memorizza dare zippuò e tutti e tre memorizzano un indice, che consente una rapida navigazione, l'estrazione di un sottoinsieme di file e l'aggiornamento dei file all'interno dell'archivio. Possono anche utilizzare CPU multi-core per la compressione.

Il motivo per cui tutti usano ancora tarè lo stesso motivo per cui tutti usano ancora Windows e Flash : alle persone non piace il cambiamento. Senza una forte ragione per cambiare, le persone si limitano a ciò che sanno. darnon fornisce un vantaggio sufficiente per giustificare la pubblicazione di file nel formato quando la maggior parte delle persone ha già tarinstallato, e pochissimi lo sanno dar, quindi la semplice inerzia ci mantiene al vecchio standard.


2
zip può archiviare e ripristinare le autorizzazioni Unix. Lo fanno le utility zip e unzip di InfoZIP normalmente distribuite con il sistema Unix.
Mark Adler,

3
zip non comprime il file in blocchi da 32 KB. Stai confondendo la dimensione della finestra scorrevole di 32K con come viene eseguita la compressione.
Mark Adler,

1
gzip -9 non ha un dizionario da 900 kB. Tutti i livelli di gzip usano un dizionario 32K. Potresti pensare a bzip2.
Mark Adler,

Tanta disinformazione in una risposta.
Mark Adler,

1
È necessario apportare correzioni alla risposta o eliminare la risposta.
Mark Adler,

7

Tar è stato creato per eseguire backup di piena fedeltà del tuo filesystem, non solo per trasferire file in giro. Pertanto, l'utilità tar è l'utilità più completa per la creazione di un archivio che preserva tutto ciò che è importante sulla struttura del filesystem.

Ciò include tutte queste funzionalità che mancano in uno o più strumenti concorrenti:

  • proprietà del file
  • permessi sui file
  • permessi sui file meno comuni (es. setuid, sticky bit)
  • collegamenti simbolici
  • collegamenti duri
  • voci del dispositivo (ovvero dispositivi a caratteri e blocchi)
  • file sparsi
  • Voci ACL ( non supportate da tutte le versioni )
  • attributi estesi / utente ( non supportato da tutte le versioni )
  • Etichette SElinux ( non supportate da tutte le versioni )

Ha anche l' --one-file-systemopzione che è straordinariamente utile durante i backup.

Ogni volta che una nuova funzionalità viene aggiunta ai filesystem, il supporto viene aggiunto al tarprimo (o anche esclusivamente). Quindi continua ad essere il modo più compatibile per salvare i file.


Questa risposta è l'unica che ha senso. Grazie per averlo pubblicato.
gaborous

5

Abbiamo molti file compressi che fluttuano oggi, MP3, JPG, video, file tar.gz, pacchetti JAR, RPM, DEB e così via. Se è necessario raggruppare un gruppo di questi in un unico file per il trasferimento, è utile disporre di un'utilità "tar" che raggruppa solo i file senza tentare di comprimerli.

Non solo perde tempo ed elettricità nel tentativo di comprimere un file compresso, ma spesso si traduce in un file che è più grande dell'originale.

Un altro uso è quello di migliorare i tassi di compressione. Ad esempio, se si 'tar' un pacchetto di file di registro e quindi si decomprime il risultato, è probabile che si verifichi un file più piccolo che se si fosse compresso per primo, quindi in bundle con 'tar'. E ovviamente, usando tar, puoi scegliere qualsiasi algoritmo di compressione che desideri e specificare le opzioni per ottimizzare la compressione per il tuo caso d'uso specifico.

Trovo che tar 'sia molto rilevante oggi e preferisco che usi ZIP. Nel nostro ufficio, tutti con Windows hanno installato 7-zip, quindi, per noi, i file tar sono completamente compatibili tra piattaforme.


Praticamente non vedi mai tarfile non compressi e c'è una ragione per questo. tarutilizza blocchi molto grandi, il che significa che alla fine dei file si ottiene un sacco di riempimento. Per sbarazzarsi di tutti questi zeri, è quasi sempre utile utilizzarlo gzipsenza pensarci due volte.
Christian

Un'eccezione divertente è che il codice sorgente di gzip è disponibile come tar nudo, per ovvie ragioni.
Mark Adler,

4

Forse dovremmo chiederci perché tali "nuovi" formati di file che eseguono sia la compressione che l'aggregazione (e aggiungerei la crittografia) non sono stati costruiti su tar dall'inizio invece di strumenti completamente diversi.

A quanto ho capito, ci sono ragioni storiche (legate alla storia del sistema operativo, alla "protezione" dei brevetti, alla capacità del venditore di software di vendere strumenti, ecc.).

Ora, come indicato da altre risposte, anche adesso tar non è chiaramente inferiore ad altre soluzioni e potrebbe essere migliore su altri aspetti come la capacità di lavorare su flussi o la gestione dei diritti Unix.

Se leggi l'articolo di wikipedia su tar puoi vedere un altro fatto interessante. L'articolo riconosce alcune carenze di tar ... ma non suggerisce di utilizzare zip (il formato zip non risolve queste carenze) ma DAR.

Concluderò con un tocco personale. Qualche volta fa ho dovuto creare un formato file per la memorizzazione di dati crittografati. Usare tar come base è stato utile (altri hanno fatto la stessa scelta, ad esempio tar è il formato di aggregazione interno per i pacchetti .deb). Per me era ovvio che cercare di comprimere i dati dopo la crittografia era del tutto inutile, dovevo eseguire la compressione come passaggio indipendente prima della crittografia e non ero nemmeno pronto per usare la crittografia zip (volevo due crittografie con chiave pubblica e privata) . Usando il catrame ha funzionato come un gioco da ragazzi.


3

Sono sorpreso che nessuno l'abbia menzionato, ma uno dei motivi - non proprio un vantaggio, ma una necessità - è per la retrocompatibilità. Esistono molti sistemi che eseguono software da decenni che potrebbero richiedere l' tararchiviazione. Non è conveniente assumere qualcuno per "riparare" tutti i vecchi sistemi.


3

tar è UNIX come UNIX è tar

A mio avviso, la ragione per cui si utilizza ancoratar oggi è che è uno dei casi (probabilmente rari) in cui l'approccio UNIX lo ha reso perfettamente giusto fin dall'inizio.

Dando uno sguardo più da vicino alle fasi coinvolte nella creazione degli archivi, spero che sarete d'accordo sul fatto che il modo in cui avviene la separazione dei diversi compiti è la filosofia UNIX al suo meglio:

  • uno strumento ( tarper dargli un nome qui) specializzato nella trasformazione di qualsiasi selezione di file, directory e collegamenti simbolici inclusi tutti i metadati rilevanti come timestamp, proprietari e autorizzazioni in un flusso di byte.

  • e solo un altro strumento arbitrariamente intercambiabile ( gzip bz2 xzper nominare solo alcune opzioni) che trasforma qualsiasi flusso di input di byte in un altro (si spera) flusso di output più piccolo.

L'uso di tale approccio offre numerosi vantaggi sia all'utente che allo sviluppatore:

  • estensibilità Permette di accoppiarsi tarcon qualsiasi algoritmo di compressione già esistente o con qualsiasi algoritmo di compressione ancora da sviluppare senza dover cambiare nulla sul funzionamento interno di tar.

    Non appena esce il nuovissimo "hyper-zip-utra" o strumento di compressione whater, sei già pronto per usarlo abbracciando il tuo nuovo servitore con tutta la potenza di tar.

  • la stabilità tar è stata utilizzata intensamente fin dai primi anni '80 e testata su numerosi sistemi operativi e macchine.

    Prevenire la necessità di reinventare la ruota nell'implementazione dell'archiviazione di proprietà, autorizzazioni, timestamp e simili ancora e ancora per ogni nuovo strumento di archiviazione non solo consente di risparmiare molto tempo (altrimenti inutilmente speso) nello sviluppo, ma garantisce anche la stessa affidabilità per ogni nuova applicazione.

  • coerenza L'interfaccia utente rimane sempre la stessa.

    Non è necessario ricordare che per ripristinare i permessi usando lo strumento A devi passare l'opzione --i-hope-you-rember-this-onee usando lo strumento B devi usare --this-time-its-another-one mentre usi lo strumento C è `--hope-you-didnt-try-with-tool-as-switch.

    Mentre usando lo strumento D lo avresti davvero incasinato se non lo avessi usato --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.


3

Molte buone risposte, ma tutte trascurano un fatto importante. Tar ha un ecosistema consolidato di utenti e sviluppatori nel mondo simile a Unix. Questo lo fa andare avanti, così come ZIP è continuato dal suo ecosistema DOS / Windows. Avere un tale ecosistema è ciò che sostiene una tecnologia, non i suoi vantaggi tecnici.


Davvero un bel commento, non ci avevo nemmeno pensato, ed è davvero un bel punto da fare.
MarcusJ

3

Il motivo è "trincerarsi nella cultura". Ci sono numerose persone come me i cui occhi si velano se gli viene chiesto di elaborare qualcosa di diverso da un archivio tar compresso, o lo ZIP occasionale, se proviene dal mondo Windows.

Non voglio sapere di 7-Zip, RAR o altro. Se devo installare un programma per decomprimere il tuo file, funziona. Lo farò se mi viene pagato, o se il contenuto è qualcosa che "devo avere" e non è disponibile in nessun altro modo.

Un vantaggio di tar è che se si invia a qualcuno un tarball, viene immediatamente riconosciuto. Il destinatario può digitare i comandi di estrazione usando la memoria muscolare.

La vera domanda è: perché alcune persone sono così ossessionate dal risparmio di un altro byte di spazio che chiedono a tutti gli altri di perdere tempo a installare qualche utilità esotica e imparare a usarla? E poi ci sono gli stupidi usi della compressione esotica e dei formati di archivio. Un video H.264 con audio AAC deve davvero essere inserito in RAR in più parti?

Il formato tar potrebbe essere vecchio, ma memorizza tutto ciò che è rilevante: contenuto del file, percorsi, timestamp, autorizzazioni e proprietà. Memorizza non solo i collegamenti simbolici, ma può preservare la struttura dei collegamenti rigidi. Memorizza anche file speciali, quindi un archivio su nastro può essere utilizzato per cose come una /devdirectory in miniatura che viene utilizzata durante il bootstrap. È possibile mettere insieme una distribuzione Linux il cui formato di pacchetto binario sia costituito da nulla, ma tarball non compressi rispetto alla radice del filesystem.


Ri "Così ossessionato" ... immagina di essere bloccato nella warzone con un singolo laptop rinforzato, e il disco rigido da 20 G sottodimensionato è quasi pieno, forse un Gig lasciato, e sentendo gli spari da lontano, ti piacerebbe davvero navigare un manuale .PDF da 100 MB che mostra come riparare la jeep, ma il file è in un file .tgz da 2 Gig. E il laptop esegue uno strano sistema operativo proprietario di origine chiusa e non si dispone dell'accesso root per eliminare i file di sistema, non che sarebbe ovvio come eliminare 4G + senza rompere il ricercatore o il visualizzatore PDF. Se potessi semplicemente estrarre quel file da 100 MB ...
agc,

2

Rispondere direttamente alle domande specifiche che hai posto:

C'è una penalità di prestazione durante le fasi 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).

Vi è uno specifico miglioramento delle prestazioni, in casi generali, utilizzando in tarparticolare con la libreria di compressione integrata (le righe di comando tar xvzfo tar xvjfstyle, in cui viene utilizzata una libreria di compressione anziché un secondo processo). Ciò deriva da due cause principali:

  • quando si elabora un numero elevato di file relativamente piccoli, in particolare quelli comunemente usati nella distribuzione di software, si ha una ridondanza elevata. La compressione su molti file comporta una compressione complessiva più elevata rispetto alla compressione di singoli file. E il "dizionario" viene calcolato una volta per ogni blocco di input, non per ogni file.

  • tarcapisce i file system. È progettato per salvare e ripristinare un sistema operativo funzionante / funzionante. Comprende profondamente ciò che è importante in un file system UNIX e lo cattura e ripristina fedelmente. Altri strumenti ... non sempre, in particolare la famiglia zip, che è meglio progettata per condividere file tra una famiglia di sistemi operativi, in cui il documento è la cosa importante, non una fedele copia sensibile del sistema operativo.

Esistono funzionalità del formato di file tar che non hanno altri formati di file, come .7z e .zip?

Gestione dei file sparsi. Alcune delle librerie di database dirette si basano su file sparsi - file in cui i dati sono nominalmente GB, ma i dati effettivi scritti e memorizzati sono molto, molto meno, e in realtà vengono utilizzati solo pochi blocchi di disco. Se si utilizza uno strumento inconsapevole, quindi durante la decompressione, si finisce con un consumo massiccio di blocchi del disco, tutti contenenti zero. Trasformarlo in un file sparso è ... doloroso. Se hai anche la stanza per farlo. È necessario uno strumento che comprenda cosa sia un file sparse e lo rispetti.

Metadati. Unix ha evoluto alcune cose strane nel corso degli anni. 14 nomi di file di caratteri, nomi di file lunghi, collegamenti collegamenti simbolici, bit permanenti, bit di superutente, permessi di accesso al gruppo ereditati, ecc. Tar li capisce e li riproduce. Strumenti di condivisione file ... non così tanto. Molte persone non usano i collegamenti nel modo in cui potrebbero ... Se hai mai lavorato con un software che utilizza i collegamenti e quindi hai utilizzato uno strumento non consapevole per eseguire il backup e il ripristino, ora hai molti indipendenti file, anziché un singolo file con molti nomi. Dolore. Il software non funziona e il disco è gonfio.

Poiché tar è un formato di file così vecchio, e oggi esistono formati di file più recenti, perché tar (sia incapsulato in gzip, bzip2 o persino il nuovo xz) è ancora così ampiamente usato oggi su GNU / Linux, Android, BSD e altri UNIX sistemi operativi, per trasferimenti di file, sorgenti di programmi e download binari, e talvolta anche come formato di gestione pacchetti?

tarlavori. Fa il lavoro per cui è stato progettato, beh. Ci sono state altre sostituzioni propagandato ( cpio, pax, ecc, ecc). Ma tar è installato praticamente su tutto e le librerie di compressione che utilizza sono anche molto comuni per altri motivi. Non è successo nient'altro che batte sostanzialmente ciò che fa tar. Senza chiari vantaggi e un sacco di uso e conoscenza integrati nella comunità, non ci sarà sostituzione. Il catrame ha avuto molto uso nel corso degli anni. Se otteniamo grandi cambiamenti nel modo in cui pensiamo ai file system o file non di testo in qualche modo diventano il modo di trasferire il codice (al momento non riesco a immaginare come, ma ignoralo ...) allora potresti trovare un altro strumento. Ma allora non sarebbe il tipo di sistema operativo che ora utilizziamo. Sarebbe una cosa diversa, organizzata in modo diverso e avrebbe bisogno dei suoi 'strumenti.

La domanda più importante, penso, che non hai posto, è a quale 'tar' di posti di lavoro è inadatto.

tarcon la compressione è fragile. È necessario l'intero archivio, bit per bit. Nella mia esperienza, non è resistente. Ho avuto errori a bit singolo che hanno reso inutilizzabili gli archivi multiparte. Non introduce ridondanza per proteggere dagli errori (che eliminerebbe una delle domande poste sulla compressione dei dati). Se esiste la possibilità di corruzione dei dati, si desidera verificare gli errori con ridondanza in modo da poter ricostruire i dati. Ciò significa, per definizione, che non sei compresso al massimo. Non è possibile avere tutti i bit di dati richiesti e portare il suo massimo valore di significato (massima compressione) e avere tutti i bit di dati in grado di perdita e recupero (ridondanza e correzione degli errori). Quindi ... qual è lo scopo del tuo archivio?tarè eccezionale in ambienti ad alta affidabilità e quando l'archivio può essere nuovamente riprodotto dalla fonte. IME, in realtà è peggio della cosa originale che suggerisce i suoi nomi: l'archiviazione su nastro. Gli errori a bit singolo su un nastro (o peggio, errori a bit singolo in una testina di nastro, in cui si perde un bit in ogni byte di un intero nastro o archivio) rendono i dati inutilizzabili. Con sufficiente ridondanza e rilevamento e correzione degli errori, è possibile sopravvivere a uno di questi problemi.

Quindi ... quanto rumore e corruzione ci sono nell'ambiente che stai guardando e la fonte può essere usata per rigenerare un archivio fallito? La risposta, dagli indizi forniti, è che il sistema non è rumoroso e che la sorgente è in grado di rigenerare un archivio. Nel qual caso, tarè adeguato.

tarcon la compressione, inoltre, non funziona bene con i file precompressi. Se stai inviando dati già compressi ... usa semplicemente tar e non preoccuparti della fase di compressione: aggiunge solo cicli di CPU per non fare molto. Ciò significa che devi sapere cosa stai inviando in giro e perché. Se ti interessa. Se non si cura di questi casi particolari, quindi tar fedelmente copiare i dati in giro, e comprimere fedelmente non riuscire a fare molto utile per renderlo più piccolo. Nessun grosso problema, ad eccezione di alcuni cicli della CPU.


-3

TAR è l'archivio su nastro. È in circolazione da decenni ed è ampiamente utilizzato e supportato. È un prodotto maturo e si prende cura delle esigenze attuali e di quelle legacy.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.