scp interruptus

Categorie: 

Non so a voi, ma a me ultimamente è capitato! Una possente Smile copia sicura remota (scp) di un file non proprio smilzo si è interrotta per strada. Argggghhh… Come fare per completare la copia senza ricominciare da capo? Questa funzione viene spesso chiamata resume (p.e. nel protocollo FTP).

Ebbene sembra che un parametro specifico per il resume in scp non sia stato implementato (man scp).

Scavando velocemente in rete ho raggiunto codesta pagina:

che ci fornisce un efficace quanto furbo barbatrucco: usare il mitico rsync data la sua caratteristica di «appoggiarsi» a sshd e non solo a rsyncd (quando installato e se in ascolto) sulla macchina remota!

esempio

Quindi se stavamo per esempio copiando un file sulla macchina pippo con il comando

$ scp bigfile.iso pippo:/home/pluto/

e poi a causa di varii problemi il link è caduto (qualcuno ha detto alice ADSL???) Wink ,

il magico comando per completare la copia diventa

$ rsync --partial --progress -e ssh bigfile.iso pippo:/home/pluto/

Naturalmente l’opzione topica è --partial che dice a rsync che una parte del file è già stata trasferita.

alias

Può tornare comodo fare un alias di questo comando nella vostra shell preferita in modo da richiamarlo velocemente in caso di futuro bisogno. Per esempio per la bash la dichiarazione è

alias scpresume='rsync --partial --progress -e ssh'

(che nome di fantasia ehh!) e va messa in uno dei file letti all’avvio dalla shell (tipicamente ~/.bashrc o ~/.bash_aliases).