Para la subida o descarga de ficheros de gran tamaño es recomendable utilizar un método que permita reanudar la transferencia de ficheros en caso de pérdida de conectividad o cualquier otro fallo. Usando rsync sobre ssh, además de proporcionarnos un método seguro para la transferencia de datos podemos indicarle que en caso de fallo se permita la reanudación donde se había quedado.
Los siguientes parámetros nos ayudarán con esta tarea:
--partial keep partially transferred files --partial-dir=DIR put a partially transferred file into DIR -P same as --partial --progress --progress show progress during transfer --append append data onto shorter files --append-verify like --append, but with old data in file checksum
Básicamente especificando -P ó –partial y –progress activamos el soporte para la reanudación de transferencia de ficheros en el punto en el que nos hemos quedado. Por otro lado –append nos permite lo mismo pero para ficheros individuales. Después con -e especificaremos que utilizaremos ssh en lugar de rsh:
-e, --rsh=COMMAND specify the remote shell to use
Podríamos entonces construir el comando rsync con el siguiente ejemplo:
$ rsync -avz --append --progress --partial -e ssh test.tgz foo@192.168.1.129:/home/foo
foo@192.168.1.129's password: sending incremental file list test.tgz 97648640 6% 3.57MB/s 0:06:05 ^C rsync error: unexplained error (code 130) at rsync.c(549) [sender=3.0.9]
Como podéis ver, he parado con un Ctrl + c la subida, en el destino el fichero ha quedado prácticamente con el tamaño especificado:
-rw-------. 1 root root 97255424 Jan 4 18:08 test.tgz
Si ahora reanudamos la subida, veremos como continúa donde se había quedado en lugar de empezar desde el 0%:
$ rsync -avz --append --progress --partial -e ssh test.tgz foo@192.168.1.129:/home/foo foo@192.168.1.129's password: sending incremental file list test.tgz 134938624 9% 3.28MB/s 0:06:26
Núnca te acostarás sin aprender algo nuevo… No sabía que rsync resumiera ficheros parciales :)
Por otro lado, por lo visto, las versiones actuales de rsync ya usan ssh por defecto. De la man del mismo en la versión de Debian Testing:
For remote transfers, a modern rsync uses ssh for its communications, but it may have been configured to use a different remote shell by default, such as rsh or remsh. You can also specify any remote shell you like, either by using the -e command line option, or by setting the RSYNC_RSH environment variable.
Gracias por el aporte Jors!
Saludos