Estou perguntando sobre um cenário de cópia de um arquivo grande para um servidor remoto.
Um caso mais simples é:
tar c myfile | ssh myserver tar x
Se a conectividade de rede for rápida, está tudo bem.
Em uma rede mais lenta eu faço
tar c myfile | bzip2 -1 | ssh myserver tar xj
- tornando minha transferência mais rápida ao custo do tempo de CPU.
É claro que posso brincar com a taxa de compactação, normalmente tentando adivinhar a correta para que minha CPU não fique muito ocupada e a rede fique saturada.
Existe um utilitário de compactação ou um sinalizador de compactação que diga bzip2
a / xz
/... para compactar o máximo possível enquanto o buffer de saída estiver ocupado?
Responder1
zstd --adapt
Ozstd
utilitário de compactaçãopossui uma opção que ativa a compactação adaptativa (a opção foi adicionada na zstd
v1.3.6). Isso ajustaria a compactação às "condições de E/S percebidas atualmente".
Consulte o zstd
manual para obter mais informações.
Um pipeline completo pode ser parecido com isto:
tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'cd /someplace && { zstd -d | tar -x -f -;}'
ou
tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'zstd -d | tar -x -C /someplace -f -'
Se você adicionar -v
ao primeiro zstd
no pipeline, obterá uma linha indicadora de progresso dizendo algo como
(L7) Buffered : 32 MB - Consumed : 192 MB - Compressed : 72 MB => 37.50%
onde (L7)
indica o nível de compactação. Para qualquer quantidade moderadamente grande de dados, seria de esperar que ela flutuasse ao longo do tempo, mostrando que zstd
está de fato se adaptando às condições de E/S (e presumivelmente também aos próprios dados).