Grazie alla meravigliosa risposta di Scott Pack (prima non sapevo come farlo con ssh), posso offrire questo miglioramento (se bash
è la tua shell). Ciò aggiungerà la compressione parallela, un indicatore di avanzamento e verificherà l'integrità attraverso il collegamento di rete:
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
è un bel programma di visualizzazione dei progressi per la tua pipe ed pigz
è un programma gzip parallelo che utilizza tutti i thread quanti la tua CPU ha di default (credo fino a 8 max). È possibile ottimizzare il livello di compressione per adattarsi meglio al rapporto tra CPU e banda di rete e scambiarlo con pxz -9e
e pxz -d
se si dispone di una CPU molto maggiore della larghezza di banda. Devi solo verificare che le due somme corrispondano al completamento.
Questa opzione è utile per grandi quantità di dati e reti ad alta latenza, ma non molto utile se il collegamento è instabile e si interrompe. In questi casi, rsync è probabilmente la scelta migliore in quanto può riprendere.
Uscita campione:
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e - ]
176MiB [9.36MiB/s] [9.36MiB/s] [ <=> ]
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e -
Per i dispositivi a blocchi:
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
'
Ovviamente, assicurati che abbiano la stessa dimensione o limite con count =, skip =, seek =, ecc.
Quando copio i filesystem in questo modo, spesso per prima dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
cosa azzererò la maggior parte dello spazio inutilizzato, il che accelera lo xfer.