Existe um arquivador de arquivos paralelo (como tar)?

40

Existe algo lá para arquivamento paralelo de arquivos?

O Tar é ótimo, mas eu não uso arquivos de fita, e é mais importante para mim que o arquivamento ocorra rapidamente (com compressão como bzip2), pois eu tenho o smp.

supercheetah
fonte
7
o alcatrão é mais do que apenas fitas. O nome veio originalmente da fita, mas hoje em dia o vejo sendo usado principalmente para quando você deseja colocar as coisas em um único arquivo para redistribuição, mantendo as informações da estrutura de diretórios com compactação opcional.
Kevin M
há muito poucas ferramentas de compressão paralela aferido aqui vbtechsupport.com/1614 ainda no entanto tem que encontrar uma versão paralela de alcatrão
p4guru
Nenhuma das respostas fornecidas (incluindo a aceita) lida com diretórios , até onde eu sei - eles lidam com arquivos . Eu vejo apenas zipcomo capaz de lidar com diretórios: |
Warren
11
Na verdade, o que costumamos fazer é empacotar diretórios em tararquivos, e depois comprimir o pacote usando um compressor de ficheiros (como gzip, pigz, etc.). Você pode fazer isso em duas etapas, mas também em uma única etapa , pois eles podem trabalhar em fluxos de dados a partir de entrada / saída padrão. Os resultados são muito semelhantes zip, mas mais versáteis.
22616 Gerlos #

Respostas:

36

Eu acho que você está procurando pbzip2:

PBZIP2 é uma implementação paralela do compressor de arquivos de classificação de blocos bzip2 que usa pthreads e alcança uma aceleração quase linear em máquinas SMP.

Dê uma olhada na página inicial do projeto ou verifique seu repositório de pacotes favorito.

echox
fonte
11
Você também pode tentar pigze pxzpara implementações paralelas de gzipe xz. Você pode compactar usando um comando como tar c dir | pigz -c > dir.tar.gze descomprimir usando pigz -cd dir.tar.gz | tar xf -.
gerlos
3
Os comandos hoje seriam tar -cf dir.tar.gz -I pigz dire tar -xf dir.tar.gz -I pigz. Também xzestá encadeado: use XZ_OPT=-T0 tar -cJf dir.tar.gz dire XZ_OPT=-T0 tar -xJf dir.tar.gz.
Rich
21

O 7zip pode ser executado em vários threads quando recebe o -mmtsinalizador, mas apenas ao compactar em 7z-archives, que oferecem grande compactação, mas geralmente são mais lentos que o zip para criar arquivos. Faça algo parecido com isto:

7z a -mmt foo.7z /opt/myhugefile.dat
fschmitt
fonte
O 7z é um bom arquivador, com bom suporte para controlar as trocas entre taxa de compactação e tempo de comp / decomp, acesso aleatório vs. melhor compactação e coisas assim. No entanto, ele não armazena quase tantos metadados quanto o tar, você perde o proprietário / permissões.
22615 Peter Cordes
Parece que essas opções estão ativadas por padrão - pelo menos não tenho aumento de desempenho com ela e a saída 7z 'tem uma linha sobre a quantidade de núcleos da minha CPU nos dois casos.
Andrey Starodubtsev
14

O OP perguntou sobre arquivamento paralelo, não sobre compactação paralela.

Se o material de origem for proveniente de um sistema de arquivos em que diferentes diretórios / arquivos possam estar em discos diferentes, ou mesmo em um único disco rápido que exceda a velocidade de entrada da (s) ferramenta (s) de compactação, será realmente benéfico ter vários fluxos de entrada indo para as camadas de compressão.

A questão significativa se torna: como é a saída de um arquivo paralelo? Não é mais apenas um descritor de arquivo único / stdout, mas um descritor de arquivo por thread.

Um exemplo disso até agora é o modo de despejo paralelo do Postgresql pg_dump, em que despeja em um diretório, com threads trabalhando sobre o conjunto de tabelas para backup (fila de trabalho com vários threads consumindo a fila).

Não tenho certeza de nenhum real arquivador paralelo que seja mainstream. Houve uma invasão do Solaris Tar para uso no ZFS: http://www.maier-komor.de/mtwrite.html

Existem algumas ferramentas de backup dedicadas que executam com êxito vários encadeamentos, mas muito mais que apenas divide a carga de trabalho por diretório em um nível alto.

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

substitua pigzpelo seu programa de compressão paralela favorito. O motivo para usar taré porque ele pode armazenar permissões de proprietário, grupo, Esses metadados costumam ser úteis (por exemplo, restaurar uma árvore de diretórios em um sistema complexo).

uDude
fonte
4
tar -c --use-compress-program = pigz -f myDirectory.tar.gz myDirectory /
markusN
11
Todas as opções, AFAIK, para alcatrão podem ser usadas normalmente junto com a -Iopção, que é a mesma que --use-compress-program. Assim, por exemplo, tar cvzf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...."pode ser aplicado à opção multiencadeada usando pigzcomo tar -I pigz -cvf /some/dir/yournewarchive.tar.gz /directory/tobecompressed --exclude="/directo...". Esta é a melhor e mais adequada resposta, IMHO. Obrigado @uDude! :)
ILMostro_7
10

O pigz é uma implementação paralela do gzip, mas só pode realmente usar vários processadores para compactação, não descompactação.

Jay Hacker
fonte
2
Fiz algumas experiências e, pigzna verdade, parece capaz de usar vários threads também ao descompactar. Tente comparar a saída de time tar xf dir.tar.gze de time pigz -cd dir.tar.gz | tar xf -(na minha CPU de 4 núcleos, leva um pouco menos da metade do tempo).
gerlos
4
@gerlos O uso timeem um pipeline cronometrará apenas o primeiro comando. A partir da pigzdocumentação : "A descompressão não pode ser paralelizada, pelo menos não sem fluxos de esvaziamento especialmente preparados para esse fim. Como resultado, o pigz usa um único thread (o thread principal) para descompressão, mas criará outros três threads para leitura, escrever e verificar cálculos, o que pode acelerar a descompressão em algumas circunstâncias ".
augurar 31/08/16
11
Há também pixz .
Marc.2377
8

taré simplesmente um formato de arquivo muito bom para duplicar exatamente os arquivos e preservar a árvore de diretórios e os atributos do arquivo original. O TAR é muito bom para fazer backups, porque tudo é preservado. Eu uso pbzip2para compactar os arquivos tar usados ​​para backups do sistema com resultados muito bons.

este comando deve fazer o truque.

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

pbzip2 pode ser substituída por um utilitário de compactação diferente, mas esteja avisado, a compactação LZMA (como pxz) usa uma tonelada de RAM ao compactar / descompactar arquivos grandes (tentei executar 8 threads com 8 GB de RAM e o pxz começou a trocar para o disco).

amor
fonte
4

Outro candidato é lbzip2. É bem parecido com o pbzip2

Felipe Alvarez
fonte
1

No que diz respeito à compressão, xzuma vez que a versão 5.2 suporta a compressão paralela via -Topção.

peterph
fonte