Reanudar la transferencia de un solo archivo por rsync

22

En Ubuntu, quiero copiar un archivo grande de mi disco duro a una unidad extraíble por rsync. Por alguna razón u otra, la operación no puede completarse en una sola ejecución. Así que estoy tratando de descubrir cómo usar rsync para reanudar la copia de archivos desde donde se dejó la última vez.

Intenté usar la opción --partial o --inplace, pero junto con --progress, encontré que rsync con --partial o --inplace en realidad comienza desde el principio en lugar de desde lo que quedó la última vez. La detención manual temprana de rsync y la comprobación del tamaño del archivo recibido también confirman lo que encontré.

Pero con --append, rsync comienza desde lo que quedó la última vez.

Estoy confundido, como vi en la página de manual --partial, --inplace o --append parecen relacionarse con la reanudación de la copia de lo que quedó la última vez. ¿Alguien puede explicar la diferencia? ¿Por qué --partial o --inplace no funcionan para reanudar una copia? ¿Es cierto que para reanudar una copia, rsync tiene que funcionar con la opción --append?

Además, si mv o cp dejaron un archivo parcial, no rsync, ¿rsync se aplicará correctamente?

¡Gracias y saludos!

Tim
fuente
Mi comprensión de cómo funciona rsync es limitada, pero para responder su última pregunta. Si un cp está incompleto, rsync debería reanudar la copia. Creo que los archivos hashs de rsync de una manera que encontraría la parte inicial del archivo de la misma manera, y copiaría la parte restante del archivo.
Scott McClenning

Respuestas:

25

Mirando algunas páginas para rsync:

--append
Esto hace que rsync actualice un archivo agregando datos al final del archivo, lo que supone que los datos que ya existen en el lado receptor son idénticos al inicio del archivo en el lado emisor.

--inplace
Esta opción cambia la forma en que rsync transfiere un archivo cuando es necesario actualizar sus datos: en lugar del método predeterminado de crear una nueva copia del archivo y colocarlo en su lugar cuando está completo, rsync escribe los datos actualizados directamente en el archivo de destino

--partial
Por defecto, rsync eliminará cualquier archivo parcialmente transferido si la transferencia se interrumpe. En algunas circunstancias, es más deseable mantener archivos parcialmente transferidos.

Parece que si el archivo es muy grande, querrás usarlo --partial --append. ( --appendimplica --inplace) Si este archivo grande cambia, suelte --appendy rsync verificará el comienzo del archivo para asegurarse de que también coincida con el archivo fuente. --inplacepara mí suena peligroso, excepto que si está sincronizando un archivo grande, no desea que rsync cree un nuevo archivo temporal de la parte inicial, continúe la transferencia y luego elimine el archivo antiguo para colocar el nuevo archivo en su lugar. La transferencia iría más rápido si pudiera usar el mismo archivo, sin mencionar que el espacio en disco necesario para la transferencia sería menor.

Además, descubrí que desde una base de transferencia de archivos completa una copia es más rápida que rsync. Sin embargo, si necesitaba actualizar un archivo, he tenido que sincronizar rsync el archivo más rápido que volver a transferir todo el archivo nuevamente. (como dije anteriormente) Rsync debería poder reanudar desde un cp.

Espero que esto ayude.

Scott McClenning
fuente
1
Es posible que desee echar un vistazo a este informe de error: lists.samba.org/archive/rsync/2012-June/027615.html
Stefan Schmidt
Buen punto sobre el uso del cp más rápido por defecto, y rsync para "reparar" un proceso cp roto. Neat :)
Samuel Lampa