Estoy preguntando sobre un escenario de copiar un archivo grande a un servidor remoto.
Un caso más simple es:
tar c myfile | ssh myserver tar x
Si la conectividad de la red es rápida, entonces todo está bien.
En una red más lenta lo hago
tar c myfile | bzip2 -1 | ssh myserver tar xj
- hacer mi transferencia más rápida a costa del tiempo de CPU.
Por supuesto, puedo jugar con la relación de compresión, normalmente tratando de adivinar la correcta para que mi CPU no esté demasiado ocupada y la red esté saturada.
¿Existe una utilidad de compresión o un indicador de compresión que le indique a bzip2
/ xz
/... que comprima tanto como sea posible mientras el búfer de salida está ocupado?
Respuesta1
zstd --adapt
Elzstd
utilidad de compresióntiene una opción que activa la compresión adaptativa (la opción se agregó en zstd
v1.3.6). Esto ajustaría la compresión a "las condiciones de E/S percibidas actualmente".
Consulte el zstd
manual para obtener más información.
Una canalización completa puede verse así:
tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'cd /someplace && { zstd -d | tar -x -f -;}'
o
tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'zstd -d | tar -x -C /someplace -f -'
Si agrega -v
al primero zstd
en el proceso, obtendrá una línea indicadora de progreso que dice algo como
(L7) Buffered : 32 MB - Consumed : 192 MB - Compressed : 72 MB => 37.50%
donde (L7)
indica el nivel de compresión. Para cualquier cantidad de datos moderadamente grande, se esperaría que fluctuara con el tiempo, lo que demuestra que zstd
efectivamente se está adaptando a las condiciones de E/S (y presumiblemente también a los datos mismos).