De vez en cuando descargo un archivo muy grande a través de scp y cada vez hay una pequeña posibilidad de que la conexión se caiga y corte la transferencia a mitad de camino.
¿Hay alguna manera de reanudarlo?
De vez en cuando descargo un archivo muy grande a través de scp y cada vez hay una pequeña posibilidad de que la conexión se caiga y corte la transferencia a mitad de camino.
¿Hay alguna manera de reanudarlo?
Puede probar la siguiente aproximación: en lugar de scp, use dd para omitir la parte descargada y agregar el resto al archivo.
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Posible optimización: trabajar con grandes bloques. Dejemos esto como tarea.
dd
con bloques pequeños puede ser lento (solo 350 kB / s aquí). Afortunadamente, lasscp
transferencias parecen venir en bloques de 1024 bytes. Si es así para su archivo (o de lo contrario, truncando al bloque más cercano 1024 bytes), que puede acelerar de esta manera:ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
. (¡Tenga en cuenta que$sofar
entonces debe ser el número de bloques de 1024 bytes para omitir!)rsys
en la segunda línea hay solo un nombre de host de ejemplo, no un argumento especial para ellossh
. Le sugiero que lo reemplaceuser@host
para evitar confusiones.Con
scp
no.Si ambos extremos lo tienen, puede usar
rsync -LvzP remoteserver:path/to/file localfile
para transferir un solo archivo.fuente
Sí, hay formas de reanudar desde el punto de interrupción, pero no es posible usar scp.
sftp reget filename
hace lo que necesitas Yarek y Grawity han proporcionado soluciones válidas que I +1 a ambos, pero para reanudar desde un punto de interrupción, me gusta rsync. Los comandos de ejemplo proporcionados suponen que está recuperando un archivo de un servidor remoto a su estación de trabajo local (descargando). Tenga en cuenta que los dos parámetros finales deben considerarse source_file y target_file en ese orden. La sintaxis del nombre de archivo varía en función de si el archivo de origen o de destino es local o remoto. Si estuviera enviando (cargando) archivos [de texto], volvería a escribir los ejemplos proporcionados como:Y a la solución rsync, agrego
-e ssh
. Debe considerar si necesita o no verbosidad, compresión, preservar la propiedad, permisos, marca de tiempo, directorios recurrentes, etc. Verifique las páginas man y google, con respecto al parámetro -L. Es posible que desee que los enlaces simbólicos permanezcan como enlaces en lugar de hacer referencia a ellos.rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
fuente
Hay otra solución (además de la
rsync
odd
las soluciones indicadas aquí), que me sorprende que nadie ha mencionado: es elreput
mando desftp
.fuente
Le permite especificar el tiempo de espera para una conexión. Puede evitar que su conexión se rompa.
fuente
Sí, si ambos extremos admiten sftp: después de un
scp remoteuser@remotehost:/absolute/filename .
error, puede continuar haciendosftp remoteuser@remotehost
y luegoreget /absolute/filename
reanudar la descarga.fuente