Perché dovrei tarare un singolo file?


101

Nella mia azienda, scarichiamo un'istantanea del database di sviluppo locale come db.dump.tar.gzfile. La compressione ha senso, ma il tarball contiene solo un singolo file ( db.dump).

È utile archiviare un singolo file o è .tar.gzun linguaggio così comune? Perché non solo .gz?


5
È solo una questione di convenzioni secondo me. Quando le persone vedono un file con estensione gz, il loro pensiero predefinito è, usando tar -zxvf. Ma per coloro che guardano il nome del file e vedono che non ha .tgzestensione, va benissimo decomprimere il file dump del db. Dal momento che non conosco gli algoritmi di compressione in dettaglio, non sono sicuro se tar esegua alcuna compressione su file sparsi come db dump, ma per i file di testo semplice, gzip diretto del file ha un vantaggio di dimensioni molto ridotte rispetto al tarare prima e gzip ing il file
MelBurslan

3
Tutto ciò che farà un singolo file è aggiungere alcuni blocchi di metadati all'inizio e alla fine del file. I dati del file effettivo passano attraverso tar al compressore non toccato. Quindi per un file di grandi dimensioni la differenza di dimensioni tra compressione normale e taring sarà trascurabile.
lavaggio:

In passato, quando provavo vari metodi di compressione, ho scoperto .tar.gzdi essere superiore alla maggior parte degli altri metodi comuni. Ricordo che era superiore al giusto .tarma non ricordo se fosse meglio del semplice .gz. Ironicamente, il .cabformato di Windows era il migliore dei metodi che ho provato, il che è stato molto inaspettato.
Pharap,

@Pharap tarnon è un algoritmo di compressione, è un formato di archiviazione
gardenhead

1
@gardenhead Bene, questo spiegherebbe perché non ha funzionato molto bene.
Pharap,

Risposte:


163

I vantaggi di utilizzare al .tar.gzposto di .gzsono quelli

  • tarmemorizza più metadati (permessi UNIX ecc.) di gzip.
  • l'installazione può essere espansa più facilmente per memorizzare più file
  • I file .tar.gz sono molto comuni, i file solo compressi con gzip possono confondere alcuni utenti. (cfr. commento di MelBurslans )

Anche il sovraccarico dell'uso tarè molto piccolo.

Se non proprio necessario, ancora non consiglio di tarare un singolo file. Esistono molti strumenti utili che possono accedere direttamente ai singoli file compressi (come zcat, zgrepecc. , Esistenti anche per bzip2e xz).


35
Non ho considerato l'aspetto dei metadati. Ottimo punto
gardenhead

5
Se vedo un .gz, il mio primo istinto è quello di tar -zxf foo.gz. Ricordare che gzip è persino un comando richiede qualche secondo in più.
bgStack15,

2
@ bgStack15 FWIW non è necessario il z(o il -per quello), la maggior parte dei moderni tarrileverà automaticamente il file deve essere decompresso.
Drewbenn,

2
Di default gzipmemorizzerà il nome del file originale e il timestamp. È possibile utilizzare l' -Nopzione durante la decompressione per ripristinarli.
Ross Ridge,

@RossRidge grazie, ho rimosso di nuovo il testo sul nome del file originale.
Jofel,

63

In realtà stai solo ponendo metà della domanda. L'altra domanda è "Perché dovrei comprimere un file tar con gzip?". E la risposta non è solo quella che gziprende il file più piccolo (nella maggior parte dei casi):

tar:

  • memorizza nome file e altri metadati : modalità, ID proprietario, ID gruppo, dimensione file, tempo di modifica
  • memorizza un checksum (solo per l'intestazione)

gzip:

  • può memorizzare il nome file originale, ma è facoltativo
  • ha un checksum CRC-32 sui dati originali
  • comprime il file

Solo con tarte non puoi essere sicuro che i tuoi dati non siano stati danneggiati. Con solo gzipnon è possibile ripristinare l'ID utente / gruppo, l'ora di modifica e possibilmente il nome file originale.

La combinazione è più potente di quella fornita dai singoli comandi / formati, poiché si completano a vicenda .


Grazie per averlo chiarito! Quando stavo leggendo la tarpagina di Wikipedia, ho frainteso la descrizione per indicare che il checksum era per l'intero file.
gardenhead

Mi sembra la risposta corretta. Aggiungerei anche alcuni altri motivi, che potresti voler modificare se sei d'accordo. 1) non ci sono costi aggiuntivi per l'amministratore per .tgz su .tar o .gz da soli: sono tutti solo un comando 2) Gli amministratori eseguono il backup, copiano, riposizionano, spostano MOLTI file, per molte ragioni diverse; I backup del database sono solo uno di questi. Possono utilizzare lo stesso flusso di lavoro, strumenti e comandi sia per il backup di uno o più file; allora perché specialcase usa la sintassi del comando gzip, nel caso in cui ci sia un file?
Dewi Morgan,

30

C'è una abbastanza grande vantaggio di utilizzare i file di testo solo-gzippati - il contenuto può accedere direttamente con gli strumenti della riga di comando, come less, zgrep, zcat.


punto interessante, ma la domanda riguarda un'istantanea del database, che probabilmente non è un file di testo e non solo decompressa.
underscore_d

9
@underscore_d tutti i miei dump del database (principalmente mysql e pgsql) sono dei dump di testo, in parte perché sono più salvabili se succede qualcosa che corrompe parzialmente il dump, e in parte perché posso pre-elaborare qualsiasi ripristino con i soliti strumenti (sed , awk, perl, ecc.) se necessario. cioè più affidabile e più utile dei dump binari. Il compromesso è che i dump del testo tendono ad essere più grandi (chi se ne frega? Lo spazio su disco è economico e abbiamo una buona compressione) e i ripristini sono significativamente più lenti (ma meno se si avvolge il ripristino in una transazione).
Cas

1
Qual è il vantaggio di questi strumenti rispetto alla semplice connessione dell'output di un decompressore agli strumenti semplici?
CodesInChaos,

21

Direi che è probabile che le persone non si rendano conto che possono usare gzip / bzip2 / xz senza tar. Forse perché provengono da uno sfondo DOS / Windows in cui è normale che la compressione e l'archiviazione siano integrate in un unico formato ( ZIP , RAR , ecc.).

Sebbene in alcune situazioni possano esserci lievi vantaggi nell'utilizzo di tar a causa della memorizzazione dei metadati o della possibilità di aggiungere file extra, ci sono anche degli svantaggi. Con un semplice file gzip / bzip2 / xz è possibile decomprimerlo e reindirizzare i dati decompressi direttamente a un altro strumento (come il database) senza mai dover archiviare i dati decompressi come file sul disco. Con un tarball questo è più difficile.


2
Con GNU tar, basta passare da -O all'output su stdout, quindi non direi che è molto più difficile!
hyde,

5
Il primo paragrafo sembra abbastanza plausibile per i file che usano l' tgzestensione. Tuttavia, il caso del PO utilizza tar.gz- e se questi ipotetici utenti ex-Win / DOS sono qualcosa come me, la prima cosa che dicono quando guardano un file del genere è: "Perché ha 2 estensioni?". Quindi lo google e ottengono rapidamente la risposta, il che spiega specificamente che tare la compressione sono distinti. ;-)
underscore_d

17

Esiste una differenza importante che potrebbe rendere tarimportante l' utilizzo in alcune circostanze: oltre ai "metadati" che @jofel ha menzionato nella sua risposta, tar registra il nome del file nell'archivio. Quando lo estrai, ottieni il nome file originale indipendentemente da come viene chiamato l'archivio.

Nel tuo caso, l'archivio tar e il file che contiene hanno i nomi correlati db.dump.tar.gze db.tar, ma supponiamo che tu rinomini il file tar in 20-Apr-16.dump.tgzo altro. Decolla questo con tar xvfze ottieni db.dump. Per il confronto, decomprimere 20-Apr-16.dump.gze il gioco è fatto 20-Apr-16.dump. (Modifica: come sottolineato nei commenti, gzip registra anche il nome del file; ma normalmente non viene usato durante la decompressione). Un tararchivio può anche contenere un percorso relativo che mette il file estratto in una sottodirectory.

Il tuo caso d'uso determinerà se questo tipo di persistenza del nome file è necessario, o addirittura voluto , o è effettivamente indesiderabile. Ma certamente, indipendentemente dalla compressione, un tararchivio viaggia in modo diverso da un file normale.


6
gzip registra anche il nome file originale.
psusi,

8
Sì. Il nome è facoltativo nell'intestazione gzip - ovviamente non ce ne sarà uno se hai compresso l'output di streaming di un comando - e la maggior parte degli strumenti non lo ripristinerà di default (ad esempio, devi usare gzip --nameesplicitamente durante la decompressione), ma non è necessario utilizzare tar per ottenere la persistenza del nome file.
Miglia

Grazie per averlo segnalato, non lo sapevo. Tuttavia, poiché questo non è il comportamento predefinito, il punto è valido: la distribuzione di un file in formato tar conserva il nome file originale (e possibilmente il percorso relativo), senza l'intervento del destinatario. La distribuzione di un file zippato (g) no.
alexis,

8

Oltre a tutte le altre risposte, recentemente ho riscontrato una situazione di scripting in cui era previsto un solo file, ma un precedente dipendente ha scritto gli script con la possibilità di generare più di un file. Quindi i file sono stati tarati e compressi, quindi trasferiti ed espansi.

Quando il processo è cresciuto al punto da creare un file da 4,3 GB, si è spostato e ha creato un file .dump.001 oltre a un file .dump. Tutti gli script hanno continuato a funzionare.

Questa è la pigrizia proattiva del sysadmin definita!


2

Vorrei tarare un singolo file, per copiarlo preservando il timestamp (che è facilmente trascurato nei download). Le autorizzazioni e la proprietà dei file sono meno importanti: download è un termine che si applica a sistemi che non sono ben integrati.

Che sia tar o meno, è prassi normale comprimere il file per velocizzare i download ed evitare di esaurire lo spazio su disco.


-1

Tar è particolarmente utile per più file non scritti in un file system formale, lo è sempre stato. Se per qualche motivo c'è qualche occasione, solo 1 file da scrivere non ha alcuna reale conseguenza. Posso dd il mio .tar.gz direttamente su / dev / sdx indipendentemente dalla partizione o dal file system. Potrebbe anche essere un nastro.

Generalmente viene eseguito perché lo script o il processo sono stati copiati dal codice di eredità. Naturalmente non è necessario eseguire il tar se esiste un solo file, ma lascia spazio per il miglioramento di più file ......

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.