linux - servidores - ¿Cómo reanudar scp con archivos parcialmente copiados?
transferir archivos de windows a linux ssh (7)
Ayer tuve el mismo problema, transfiriendo un enorme volcado de sql a través de scp, tuve suerte con
wget --continue the_url
Esa publicación de blog lo explica bastante bien http://www.cyberciti.biz/tips/wget-resume-broken-download.html
Utilizo el comando scp shell para copiar una gran carpeta de archivos.
Pero en algún momento tuve que matar el comando en ejecución (por Ctrl + C o kill).
Según tengo entendido, scp copió los archivos secuencialmente, por lo que solo debería haber un archivo parcialmente copiado.
¿Cómo se puede reanudar el mismo comando scp para no sobrescribir los archivos copiados con éxito y manejar adecuadamente los archivos parcialmente copiados?
PD: Sé que puedo hacer este tipo de cosas en rsync, pero scp es más rápido para mí por alguna razón y lo uso en su lugar.
Cuando rsync también se detiene después de un par de segundos cuando inicialmente funciona bien, terminé con la siguiente solución de fuerza bruta:
cat run_me.sh
#!/bin/bash
while [ 1 ]
do
rsync --partial --progress --rsh=ssh user@host:/path/file.tgz file.tgz &
TASK_PID=$!
sleep 60
kill $TASK_PID
sleep 2
done
Deberías usar
rsync
sobre
ssh
rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path
La opción clave es
-P
, que es lo mismo que
--partial --progress
También se pueden usar otras opciones, como
-a
(para el modo de archivo) y
-z
(para habilitar la compresión).
Desde OpenSSH 6.3, puede usar el
comando
reget
en
sftp
.
Tiene la misma sintaxis que
get
, excepto que comienza una transferencia desde el final de un archivo local existente.
Otra posibilidad es tratar de salvar el scp que ya has comenzado cuando se detiene.
ctrl + z al fondo y detenerlo, luego ssh hacia el servidor receptor e inicie sesión, luego salga. ¡Ahora fg el proceso scp y mira cómo se reanuda desde ''estancado''!
Puede utilizar las opciones
-rsh
y
-P
de
rsync
.
-P
es para descarga parcial y
-rsh
indica que la transferencia se realizó por ssh procotol.
El comando completo sería:
rsync -P -rsh remoteuser@remotehost:/remote/path /local/path
Una alternativa a rsync:
Use
sftp
con la opción
-r
(copie recursivamente directorios completos) y la opción
-a
del comando
get
de
sftp
para reanudar transferencias parciales de archivos existentes.
Requisito previo:
su implementación de
sftp
ya tiene una opción
get
con
-a
.
Ejemplo:
Copie el directorio
/foo/bar
del servidor remoto a su directorio actual local.
La
bar
directorio se creará en su directorio local actual.
echo "get -a /foo/bar" | sftp -r server