Gracias a la maravillosa respuesta de Scott Pack (no sabía cómo hacer esto con ssh antes), puedo ofrecer esta mejora (si bash
es su shell). Esto agregará compresión paralela, un indicador de progreso y comprobará la integridad en el enlace de red:
tar c file_list |
tee >(sha512sum >&2) |
pv -prab |
pigz -9 |
ssh [user@]remote_host '
gunzip |
tee >(sha512sum >&2) |
tar xC /directory/to/extract/to
'
pv
es un buen programa visor de progreso para su canalización y pigz
es un programa gzip paralelo que usa tantos subprocesos como su CPU tiene por defecto (creo que hasta 8 máx.). Puede ajustar el nivel de compresión para ajustarse mejor a la relación de la CPU a la red de ancho de banda e intercambiarlo con pxz -9e
y pxz -d
si tiene mucha más CPU que el ancho de banda. Solo tiene que verificar que las dos sumas coincidan al finalizar.
Esta opción es útil para grandes cantidades de datos, así como para redes de alta latencia, pero no es muy útil si el enlace es inestable y se cae. En esos casos, rsync es probablemente la mejor opción, ya que puede reanudarse.
Salida de muestra:
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e - ]
176MiB [9.36MiB/s] [9.36MiB/s] [ <=> ]
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e -
Para dispositivos de bloque:
dd if=/dev/src_device bs=1024k |
tee >(sha512sum >&2) |
pv -prab |
pigz -9 |
ssh [user@]remote_host '
gunzip |
tee >(sha512sum >&2) |
dd of=/dev/src_device bs=1024k
'
Obviamente, asegúrese de que tengan el mismo tamaño o límite con count =, skip =, seek =, etc.
Cuando copio los sistemas de archivos de esta manera, a menudo primero pongo dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
a cero la mayor parte del espacio no utilizado, lo que acelera el xfer.