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?
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:
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).
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
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.
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.
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.