Compressão rápida no formato 7z (como zip ou gzip)

1

Em suma: a compactação Deflate pode ser usada somente com o formato zip ( -tzip ) em 7zip?

Eu quero arquivar um diretório grande (centenas GiB) de um disco para outro, mantendo a velocidade de E / S igual ou melhor do que sem compactação.

Eu gosto do formato 7z por vários motivos, mas as compactações LZMA e Bzip2 são muito lentas, mesmo com -mx=1 . Eu tentei 7z a -mm=Zip -mx=1 -mmt=4 (e -mm=GZip que usa Deflate também), mas recebo um erro de argumento após a fase de verificação de arquivo. link

Minha solução típica seria o tar com .tar.lzo (LZOP), que facilmente alcança 100 MiB / s de thread único na taxa de compactação padrão; ou .tar.gz com GZIP=-1 . Um compressor muito rápido é o lbzip2 com multithreading, mas não pode ser executado a partir do próprio tar.

Meus discos de origem normalmente são lidos a 20 MiB / s, às vezes 100 (com vários arquivos MiB grandes); o alvo grava em até 80 MiB / s. Portanto, esta é a velocidade que o compressor deve ter, idealmente mesmo quando estiver usando um único thread. Até 8 núcleos e 16 GB de RAM estão disponíveis.

    
por Nemo 27.06.2017 / 12:06

2 respostas

4

Você pode experimentar a versão 7-Zip Zstandard . Este garfo suporta codecs adicionais que são muito rápidos para compressão e descompressão.

Aqui está um breve resumo dos codecs usados:

  1. LZ4 - compactação / descompactação mais rápida, mas sem muita taxa de compactação

  2. Lizard / LZ5 - melhor relação então LZ4 e frequentemente mais rápido na descompressão do que na LZ4 ... mas a compactação é um pouco mais lenta

  3. Brotli e Zstandard - zstd é frequentemente um pouco mais rápido que Brotli, mas para conteúdo de texto, Brotli talvez seja um pouco melhor;)

O encadeamento é suportado por todos os 5 codecs, até 256 encadeamentos atualmente.

Execute como:

7z a archiv.7z -m0=lz5 -mx1 -mmt=4

7z a archiv.7z -m0=zstd -mx1 -mmt=4

7z a archiv.7z -m0=brotli -mx1 -mmt=1 .. 7z a archiv.7z -m0=brotli -mx1 -mmt=256

E assim por diante ...

    
por 25.08.2017 / 00:20
2

A very fast compressor is lbzip2 with multithreading, but it cannot be run from tar itself.

No gnu tar você pode especificar qual compressor com um flag. Exemplos: tar -I "zstd -T0" ou tar --use-compress-program=pigz

Se você quer um compressor rápido de single-threaded, você pode usar lz4.

Mas você não tem que usar isso, você também pode canalizar a saída através de um compressor de sua escolha.

# create
tar -c /inputdir | pigz --fast > output.tar.gz
# decompress
pigz -d input.tar.gz | tar -x 

My source disks typically read at 20 MiB/s, sometimes 100

Isso soa como se você estivesse afunilado em leituras de acesso aleatório e não em compactação. Se você tiver arquivos grandes, deverá desfragmentá-los. Se você tiver muitos arquivos pequenos, certifique-se de que o disco esteja montado com relatime e você também pode tentar fastar que eu otimizei para o caso de muitos arquivos pequenos.

    
por 02.07.2017 / 14:56