it-swarm-es.tech

Reanudar la transferencia de un solo archivo por rsync

En Ubuntu, quiero copiar un archivo grande de mi disco duro a una unidad extraíble por rsync. Por alguna otra razón, 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 del archivo desde donde se dejó la última vez.

Intenté usar la opción --partial O --inplace, Pero junto con --progress, Encontré rsync con --partial O --inplace En realidad comienza desde el principio en lugar de desde lo que quedó la última vez. Detener manualmente rsync antes y verificar el tamaño del archivo recibido también confirmó lo que encontré.

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

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

Además, si mv o cp dejó un archivo parcial, no rsync, ¿rsync --append Reanudará correctamente la copia del archivo?

52
Tim

Para reanudar una copia interrumpida, debe usar rsync --append. De la explicación de la página del manual de --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 . [...] Implica --inplace, [...]

La opción --inplace Hace que rsync (sobre) escriba el contenido del archivo de destino directamente; sin --inplace, rsync haría:

  1. crear un nuevo archivo con un nombre temporal,
  2. copiar contenido actualizado en él,
  3. cámbielo por el archivo de destino y finalmente
  4. elimine la copia anterior del archivo de destino.

El modo normal de operación evita principalmente conflictos con aplicaciones que pueden tener abierto el archivo de destino, y algunos otros percances que están debidamente enumerados en la página de manual rsync.

Tenga en cuenta que, si una operación de copia/actualización falla en los pasos 1.-3. arriba, rsync borrará el archivo de destino temporal; la opción --partial deshabilita este comportamiento y rsync dejará archivos temporales parcialmente transferidos en el sistema de archivos de destino. Por lo tanto, reanudar una operación de copia de un solo archivo no ganará mucho a menos que haya llamado al primer rsync con --partial O --partial-dir (¡El mismo efecto que --partial, Además indica a rsync que cree todos los archivos temporales en un directorio específico).

39
Riccardo Murri

Sé consciente de --append implica --inplace, lo que implica --partial.

  • Simplemente usando --partial debe hacer que rsync deje transferencias parciales y las reanude en intentos posteriores.

  • Mediante el uso --append debe hacer que rsync deje ambos archivos parciales y los reanude la próxima vez. Después de la transferencia rsync debe verificar la suma de comprobación de los datos transmitidos únicamente.

  • --append-verify incluye todo el archivo en la verificación de suma de verificación, incluida cualquier parte transferida en una transferencia anterior.

  • Con cualquiera --append o --append-verify una verificación de suma de comprobación fallida debería hacer que el archivo se retransmita por completo (utilizando --inplace)

Debería poder reanudar una operación mv o cp con rsync pero es posible que desee utilizar el --append-verify opción para la tranquilidad.

Tenga en cuenta que usando --append hace que rsync copie solo aquellos archivos que tienen un tamaño en el receptor más corto que el tamaño en el remitente (independientemente del tiempo sellos), o están ausentes en el receptor. Por documentación sobre esta opción:

Si un archivo necesita ser transferido y su tamaño en el receptor es igual o mayor que el tamaño en el remitente, se omite el archivo.

Más información en página del manual

21
TomG

David Schwartz tiene razón, --partial (o mejor, -P) hace lo que quieres. Verifiqué esto en un archivo 37G que se detuvo ~ 8g en él, a través de una red. rsync escaneó rápidamente las primeras partes del parcial (mostrando el progreso a medida que avanzaba gracias a -P), y luego reanudó la transferencia al final del archivo parcial.

6
Steve Byrne

Lo estabas haciendo bien --partial Hace lo que quieres. Parece estar comenzando desde el principio porque siempre comienza al principio de la lista de fragmentos de datos de archivo que necesita copiar. La opción --append Es peligrosa y resultará en un archivo corrupto si los datos no coinciden por alguna razón.

2
David Schwartz

Por defecto, rsync habilitará --whole-file si se transfiere del disco local al disco local. Esto reiniciará una transferencia interrumpida desde el principio, en lugar de verificar las partes que ya están allí.

Para deshabilitar esto, use:

--no-whole-file

Combinando esto con --inplace o --partial permitirá reanudar la transferencia más tarde.

Mi alias para usar rsync para copiar es:

rscp='rsync -ax --inplace --sparse --no-whole-file --protect-args'

Advertencia: tenga cuidado de usar --append-verify como lo hará omitir cualquier archivo de destino que sea del mismo tamaño o mayor.

1
Tom Hale