Eu normalmente comprimo usando tar zcvf
e descomprimo usando tar zxvf
(usando gzip devido ao hábito).
Recentemente, adquiri uma CPU quad core com hyperthreading, por isso tenho 8 núcleos lógicos e noto que muitos deles não são utilizados durante a compactação / descompactação.
Existe alguma maneira de utilizar os núcleos não utilizados para torná-lo mais rápido?
Respostas:
Você pode usar pigz em vez de gzip, o que compacta o gzip em vários núcleos. Em vez de usar a opção -z, você o canalizaria através do pigz:
Por padrão, o pigz usa o número de núcleos disponíveis, ou oito, se não puder consultá-lo. Você pode pedir mais com -pn, por exemplo, -p 32. pigz tem as mesmas opções que o gzip, para que você possa solicitar uma melhor compactação com -9. Por exemplo
fonte
Você também pode usar o sinalizador tar "--use-compress-program =" para informar ao tar qual programa de compactação usar.
Por exemplo, use:
fonte
tar - dir_to_zip | pv | pigz > tar.file
pv me ajuda a estimar, você pode pular isso. Mas ainda é mais fácil escrever e lembrar.man tar
diz isso, assim como isso .zstd
é a ferramenta mais rápida para fazer isso. Aceleração notável ao comprimir e descomprimir. Usetar -cf --use-compress-program=zstdmt
para fazer isso com multithreading.Abordagem comum
Há opção para o
tar
programa:Você pode usar a versão multithread do arquivador ou utilitário do compressor.
Os arquivadores multithread mais populares são pigz (em vez de gzip) e pbzip2 (em vez de bzip2). Por exemplo:
O arquivador deve aceitar -d. Se o seu utilitário de substituição não tiver esse parâmetro e / ou você precisar especificar parâmetros adicionais, use pipes (adicione parâmetros, se necessário):
A entrada e a saída de singlethread e multithread são compatíveis. Você pode compactar usando a versão multithread e descompactar usando a versão singlelethread e vice-versa.
p7zip
Para o p7zip para compactação, você precisa de um pequeno script de shell como o seguinte:
Salve-o como 7zhelper.sh. Aqui está o exemplo de uso:
xz
Em relação ao suporte XZ multithread. Se você estiver executando a versão 5.2.0 ou superior do XZ Utils, poderá utilizar vários núcleos para compactação, definindo
-T
ou--threads
com um valor apropriado por meio da variável de ambiente XZ_DEFAULTS (por exemploXZ_DEFAULTS="-T 0"
).Este é um fragmento do man para a versão 5.1.0alpha:
No entanto, isso não funcionará para descompactação de arquivos que também não foram compactados com o encadeamento ativado. Do man para a versão 5.2.2:
Recompilar com substituição
Se você criar tar a partir de fontes, poderá recompilar com parâmetros
Após recompilar o tar com essas opções, você pode verificar a saída da ajuda do tar:
fonte
pigz
) só é ativada quando se lê do arquivo. O processamento do STDIN pode, de fato, ser mais lento.xz
opção. É a abordagem mais simples, porém eficaz.export XZ_DEFAULTS="-T 0"
antes de chamartar
com a opção-J
de compactação xz funciona como um encanto.Você pode usar o atalho
-I
para o--use-compress-program
switch tar e chamarpbzip2
a compactação bzip2 em vários núcleos:fonte
tar: home/cc/ziptest: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
`Se você deseja ter mais flexibilidade com nomes de arquivos e opções de compactação, pode usar:
Passo 1:
find
find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec
Este comando procurará os arquivos que você deseja arquivar, neste caso
/my/path/*.sql
e/my/path/*.log
. Adicione quantas-o -name "pattern"
quiser.-exec
executará o próximo comando usando os resultados defind
:tar
Passo 2:
tar
tar -P --transform='s@/my/path/@@g' -cf - {} +
--transform
é um parâmetro simples de substituição de cadeia. Ele removerá o caminho dos arquivos do arquivo, para que a raiz do tarball se torne o diretório atual durante a extração. Observe que você não pode usar a-C
opção para alterar o diretório, pois perderá os benefícios defind
: todos os arquivos do diretório seriam incluídos.-P
diztar
para usar caminhos absolutos, para que ele não acione o aviso "Removendo` / 'principal dos nomes dos membros ". Os '/' iniciais são removidos de--transform
qualquer maneira.-cf -
diztar
para usar o nome tarball que especificaremos mais tarde{} +
usa todos os arquivosfind
encontrados anteriormenteEtapa 3:
pigz
pigz -9 -p 4
Use quantos parâmetros você desejar. Nesse caso,
-9
é o nível de compactação e-p 4
o número de núcleos dedicados à compactação. Se você executar isso em um servidor da Web carregado, provavelmente não desejará usar todos os núcleos disponíveis.Etapa 4: nome do arquivo
> myarchive.tar.gz
Finalmente.
fonte
Uma ferramenta (des) de compactação relativamente mais nova que você pode querer considerar é o zstandard . Ele faz um excelente trabalho na utilização de núcleos sobressalentes e ofereceu ótimas vantagens quando se trata de taxa de compactação vs. tempo de (des) compactação. Também é altamente adaptável, dependendo das necessidades de sua taxa de compactação.
fonte