Esiste un archiviatore di file parallelo (come tar)?


40

Esiste qualcosa per l'archiviazione parallela dei file?

Tar è fantastico, ma non uso archivi su nastro ed è più importante per me che l'archiviazione avvenga rapidamente (con compressione come bzip2) poiché ho smp.


7
tar è per più di semplici nastri. Il nome originariamente proveniva dal nastro, ma in questi giorni lo vedo usato principalmente per quando vuoi mettere le cose in un singolo file per la ridistribuzione mantenendo le informazioni sulla struttura delle directory con compressione opzionale.
Kevin M,

ci sono alcuni strumenti di compressione parallela analizzati qui vbtechsupport.com/1614 tuttavia non è ancora stata trovata una versione parallela di tar
p4guru,

Nessuna delle risposte fornite (inclusa quella accettata) gestisce le directory , per quanto ne so - gestiscono i file . Vedo solo zipcome essere in grado di gestire le directory: |
Warren

1
In realtà, quello che facciamo di solito è di confezionare le directory in tararchivi, e quindi comprimere il pacchetto utilizzando un compressore di file (come gzip, pigze così via). Puoi farlo in due passaggi, ma anche in un solo passaggio , poiché possono lavorare su flussi di dati da input / output standard. I risultati sono molto simili zip, ma più versatili.
Gerlos,

Risposte:


36

Penso che tu stia cercando pbzip2:

PBZIP2 è un'implementazione parallela del compressore di file di ordinamento a blocchi bzip2 che utilizza pthreads e raggiunge una velocità quasi lineare sulle macchine SMP.

Dai un'occhiata alla homepage del progetto o controlla il tuo repository di pacchetti preferito.


1
Puoi anche provare pigze pxzper implementazioni parallele di gzipe xz. Puoi comprimere usando un comando come tar c dir | pigz -c > dir.tar.gze decomprimere usando pigz -cd dir.tar.gz | tar xf -.
gerlos,

3
I comandi oggi sarebbero tar -cf dir.tar.gz -I pigz dire tar -xf dir.tar.gz -I pigz. Inoltre xzè thread: usa XZ_OPT=-T0 tar -cJf dir.tar.gz dire XZ_OPT=-T0 tar -xJf dir.tar.gz.
Ricco

21

7zip può essere eseguito su più thread quando viene assegnato il -mmtflag, ma solo quando viene compresso in archivi 7z, che offrono una compressione eccezionale ma sono generalmente più lenti di zip per creare archivi. Fai qualcosa del genere:

7z a -mmt foo.7z /opt/myhugefile.dat

7z è un bel archiviatore, con un buon supporto per controllare i compromessi tra rapporto di compressione e tempo di comp / decomp, accesso casuale vs. compressione migliore e cose del genere. Tuttavia, non memorizza quasi tutti i metadati di tar, perdi il proprietario / autorizzazioni.
Peter Cordes,

Sembra che questa opzione sia attiva di default - almeno non ho avuto alcun aumento delle prestazioni con esso e l'output di 7z ha una linea sulla quantità di core della mia CPU in entrambi i casi.
Andrey Starodubtsev,

14

L'OP ha chiesto l'archiviazione parallela, non la compressione parallela.

Se il materiale di origine proviene da un filesystem in cui directory / file diversi potrebbero trovarsi su dischi diversi, o anche un singolo disco veloce che supera la velocità di input degli strumenti di compressione, allora potrebbe effettivamente essere utile avere più flussi di input andando negli strati di compressione.

La domanda significativa diventa: che aspetto ha l'output di un archivio parallelo? Non è più solo un singolo descrittore di file / stdout, ma un descrittore di file per thread.

Un esempio di questo finora è la modalità di dump parallela di Postgresql pg_dump, in cui esegue il dump in una directory, con i thread che lavorano sul set di tabelle per il backup (coda di lavoro con più thread che consumano la coda).

Non sono sicuro di nessun vero archiviatore parallelo che sia tradizionale. C'è stato un trucco per Solaris Tar da utilizzare su ZFS: http://www.maier-komor.de/mtwrite.html

Esistono alcuni strumenti di backup dedicati che eseguono correttamente più thread, ma molti altri che dividono il carico di lavoro per directory a un livello elevato.


11
tar --use-compress-program=pigz  ....

sostituisci pigzcon il tuo programma di compressione parallelo preferito. Il motivo da utilizzare tarè perché può memorizzare il proprietario, il gruppo, le autorizzazioni. Questi metadati sono spesso utili (ad esempio, ripristinare un albero dir in un sistema complesso).


4
tar -c --use-compress-program = pigz -f myDirectory.tar.gz myDirectory /
markusN

1
Tutte le opzioni, AFAIK, per tar possono essere utilizzate normalmente insieme -Iall'opzione, che è la stessa di --use-compress-program. Quindi, ad esempio, tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."può essere applicato all'opzione multi-thread usando pigzas tar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...". Questa è la risposta migliore e più appropriata, IMHO. Grazie @uDude! :)
ILMostro_7,

10

pigz è un'implementazione parallela di gzip, ma può davvero utilizzare più processori multipli per la compressione, non per la decompressione.


2
Ha fatto alcuni esperimenti e in pigzrealtà sembra essere in grado di utilizzare più thread anche durante la decompressione. Prova a confrontare l'output di time tar xf dir.tar.gze di time pigz -cd dir.tar.gz | tar xf -(sulla mia CPU a 4 core ci vuole un po 'meno della metà del tempo).
gerlos,

4
@gerlos L'utilizzo timesu una pipeline cronometrerà solo il primo comando. Dalla pigzdocumentazione : "La decompressione non può essere parallelizzata, almeno non senza flussi di deflazione appositamente predisposti a tale scopo. Di conseguenza, pigz utilizza un singolo thread (il thread principale) per la decompressione, ma creerà altri tre thread per la lettura, scrivere e controllare il calcolo, che può accelerare la decompressione in alcune circostanze. "
augurar

1
C'è anche pixz .
Marc.2377,

8

tarè semplicemente un formato di archivio che consente di duplicare esattamente i file e di preservare l'albero delle directory e gli attributi del file originale. TAR è molto buono per fare i backup, perché tutto è preservato. Uso pbzip2per comprimere gli archivi tar che utilizzo per i backup di sistema con ottimi risultati.

questo comando dovrebbe fare il trucco.

tar -cpS "infile" | pbzip2 > "outfile"

pbzip2 può essere sostituito con una diversa utility di compressione, ma attenzione, la compressione LZMA (come pxz) utilizza una tonnellata di RAM durante la compressione / decompressione di file di grandi dimensioni (ho provato a eseguire 8 thread con 8 GB di RAM e pxz ha iniziato a scambiare su disco).



1

Per quanto riguarda la compressione, xzpoiché circa la versione 5.2 supporta la compressione parallela tramite l' -Topzione.

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.