En primer lugar, con respecto a la parte de "reanudar" de su pregunta, --partial
solo le dice al destinatario que mantenga los archivos transferidos parcialmente si el envío desaparece como si se hubieran transferido por completo.
Al transferir archivos, se guardan temporalmente como archivos ocultos en sus carpetas de destino (por ejemplo .TheFileYouAreSending.lRWzDC
), o en una carpeta elegida específicamente si configura el --partial-dir
interruptor. Cuando una transferencia falla y --partial
no se establece, este archivo oculto permanecerá en la carpeta de destino con este nombre críptico, pero si --partial
se establece, el archivo cambiará de nombre al nombre de archivo de destino real (en este caso TheFileYouAreSending
), aunque el archivo no está completo El punto es que luego puede completar la transferencia ejecutando rsync nuevamente con --append
o --append-verify
.
Por lo tanto, --partial
no significa en sí reanudar una transferencia fallida o cancelada. Para reanudarlo, tendrá que usar una de las banderas mencionadas en la próxima ejecución. Por lo tanto, si necesita asegurarse de que el destino nunca contendrá archivos que parecen estar bien pero que en realidad están incompletos, no debe usarlos --partial
. Por el contrario, si desea asegurarse de que nunca deja atrás archivos perdidos perdidos que están ocultos en el directorio de destino, y sabe que podrá completar la transferencia más tarde, --partial
está ahí para ayudarlo.
Con respecto al --append
conmutador mencionado anteriormente, este es el conmutador "reanudar" real, y puede usarlo ya sea que lo esté utilizando o no --partial
. En realidad, cuando está usando --append
, nunca se crean archivos temporales. Los archivos se escriben directamente en sus objetivos. A este respecto, --append
da el mismo resultado que --partial
en una transferencia fallida, pero sin crear esos archivos temporales ocultos.
En resumen, si está moviendo archivos grandes y desea la opción de reanudar una operación rsync cancelada o fallida desde el punto exacto que se rsync
detuvo, debe usar --append
o --append-verify
activar el siguiente intento.
Como @Alex señala a continuación, ya que la versión 3.0.0 rsync
ahora tiene una nueva opción --append-verify
, que se comporta como lo --append
hizo antes de que existiera ese cambio. Probablemente siempre desee el comportamiento de --append-verify
, así que verifique su versión con rsync --version
. Si está en una Mac y no usa rsync
desde homebrew
, tendrá (al menos hasta El Capitán incluido) una versión anterior y deberá usarla en --append
lugar de hacerlo --append-verify
. Por qué no mantuvieron el comportamiento --append
y nombraron al recién llegado --append-no-verify
es un poco desconcertante. De cualquier manera, --append
en rsync
antes de la versión 3 es la misma que --append-verify
en las versiones más recientes.
--append-verify
no es peligroso: siempre leerá y comparará los datos en ambos extremos y no solo asumirá que son iguales. Hace esto usando sumas de verificación, por lo que es fácil en la red, pero requiere leer la cantidad compartida de datos en ambos extremos del cable antes de que pueda reanudar la transferencia agregando al objetivo.
En segundo lugar, dijo que "escuchó que rsync puede encontrar diferencias entre el origen y el destino y, por lo tanto, simplemente copiar las diferencias".
Eso es correcto, y se llama transferencia delta, pero es algo diferente. Para habilitar esto, agregue -c
o --checksum
cambie. Una vez que se usa este interruptor, rsync examinará los archivos que existen en ambos extremos del cable. Lo hace en fragmentos, compara las sumas de verificación en ambos extremos y, si difieren, transfiere solo las diferentes partes del archivo. Pero, como señala @Jonathan a continuación, la comparación solo se realiza cuando los archivos tienen el mismo tamaño en ambos extremos: los diferentes tamaños harán que rsync cargue todo el archivo, sobrescribiendo el destino con el mismo nombre.
Esto requiere un poco de cómputo en ambos extremos inicialmente, pero puede ser extremadamente eficiente para reducir la carga de la red si, por ejemplo, con frecuencia realiza copias de seguridad de archivos muy grandes de tamaño fijo que a menudo contienen cambios menores. Los ejemplos que vienen a la mente son los archivos de imagen de disco duro virtual utilizados en máquinas virtuales u objetivos iSCSI.
Es notable que si utiliza --checksum
para transferir un lote de archivos que son completamente nuevos en el sistema de destino, rsync seguirá calculando sus sumas de comprobación en el sistema de origen antes de transferirlas. Por qué no lo sé :)
Entonces, en resumen:
Si a menudo usa rsync para simplemente "mover cosas de A a B" y desea la opción de cancelar esa operación y luego reanudarla, no la use --checksum
, pero sí la use --append-verify
.
Si usas rsync para hacer copias de seguridad de cosas a menudo, usar --append-verify
probablemente no hará mucho por ti, a menos que tengas la costumbre de enviar archivos grandes que crecen continuamente pero que rara vez se modifican una vez escritos. Como consejo adicional, si realiza una copia de seguridad en un almacenamiento que admite instantáneas como btrfs
o zfs
, agregar el --inplace
interruptor lo ayudará a reducir el tamaño de las instantáneas ya que los archivos modificados no se recrean, sino que los bloques modificados se escriben directamente sobre los antiguos. Este modificador también es útil si desea evitar que rsync cree copias de archivos en el destino cuando solo se hayan producido cambios menores.
Cuando se usa --append-verify
, rsync se comportará como siempre en todos los archivos del mismo tamaño. Si difieren en la modificación u otras marcas de tiempo, sobrescribirá el destino con la fuente sin examinar más a fondo esos archivos. --checksum
comparará el contenido (sumas de verificación) de cada par de archivos de nombre y tamaño idénticos.
ACTUALIZADO 2015-09-01 Cambiado para reflejar los puntos hechos por @Alex (¡gracias!)
ACTUALIZADO 2017-07-14 Cambiado para reflejar los puntos hechos por @Jonathan (¡gracias!)