Solía rsync
copiar una gran cantidad de archivos, pero mi sistema operativo (Ubuntu) se reinició inesperadamente.
Después de reiniciar, volví a ejecutar rsync
, pero desde la salida en el terminal, descubrí que rsync
todavía copiaba los que ya había copiado antes. Pero escuché que rsync
es capaz de encontrar diferencias entre el origen y el destino y, por lo tanto, simplemente copiar las diferencias. Entonces, me pregunto en mi caso si rsync
puedo reanudar lo que quedó la última vez.
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
. (3) La fuente y el destino son ambos NTFS, la fuente de compra es un HDD externo y el objetivo es un HDD interno. (3) Ahora se está ejecutando y aún no ha terminado.--modify-window
opción ayuda con eso).Respuestas:
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 casoTheFileYouAreSending
), 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 conrsync --version
. Si está en una Mac y no usarsync
desdehomebrew
, 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
enrsync
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 comobtrfs
ozfs
, 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!)
fuente
--partial
es suficiente.--partial-dir
mira la respuesta de Alexander a continuación sobre : parece que es la bala perfecta para esto. Puede que me haya perdido algo por completo;)--partial
: rsync copia el archivo en el nombre temporal, la conexión se interrumpe, el rsync remoto eventualmente mueve ese archivo al nombre normal y se cierra, luego Al volver a ejecutarse con--partial
y sin--append
, el nuevo archivo temporal se inicializa con una copia del archivo remoto parcialmente transferido, luego la copia continúa desde donde se cortó la conexión. (Ubuntu 14.04 / rsync 3.1)--checksum
? De acuerdo conman
esto, tiene más que ver con decidir qué archivos marcar para la transferencia que con delta-transfer (que, presumiblemente, esrsync
el comportamiento predeterminado).TL; DR:
Simplemente especifique un directorio parcial como lo recomiendan las páginas de manual de rsync:
Explicación más larga:
En realidad, hay una función incorporada para hacer esto usando la
--partial-dir
opción, que tiene varias ventajas sobre la--partial
y--append-verify
/--append
alternativa.Extracto de las páginas del manual de rsync:
De forma predeterminada, rsync usa un nombre de archivo temporal aleatorio que se elimina cuando falla una transferencia. Como se mencionó, el uso
--partial
puede hacer que rsync mantenga el archivo incompleto como si se hubiera transferido con éxito , para que luego sea posible agregarlo usando las opciones--append-verify
/--append
. Sin embargo, hay varias razones por las cuales esto es subóptimo.Es posible que sus archivos de copia de seguridad no estén completos y, sin verificar el archivo remoto que aún debe estar inalterado, no hay forma de saberlo.
Si está intentando usar
--backup
y--backup-dir
, acaba de agregar una nueva versión de este archivo que nunca antes había salido de su historial de versiones.Sin embargo, si usamos
--partial-dir
, rsync preservará el archivo parcial temporal y reanudará la descarga usando ese archivo parcial la próxima vez que lo ejecute, y no sufriremos los problemas anteriores.fuente
Es posible que desee agregar la
-P
opción a su comando.De la
man
página:Entonces en lugar de:
Hacer:
Por supuesto, si no desea las actualizaciones de progreso, simplemente puede usar
--partial
, es decir:fuente
rsync
. Sin embargo, es importante destacar que--partial
no se reanuda una transferencia fallida. Ver mi respuesta para más detalles :)-P
es suficiente en mi caso. Versiones: el cliente tiene 3.1.0 y el servidor tiene 3.1.1. Interrumpí la transferencia de un solo archivo grande con ctrl-c. Supongo que me estoy perdiendo algo.vv
? es decir,v
usado 2 veces?-azvvP
?Creo que está llamando a la fuerza
rsync
y, por lo tanto, todos los datos se descargan cuando los recupera nuevamente. use la--progress
opción para copiar solo aquellos archivos que no se copian y la--delete
opción para eliminar cualquier archivo si ya se copió y ahora no existe en la carpeta de origen ...Si está utilizando ssh para iniciar sesión en otro sistema y copiar los archivos,
avíseme si hay algún error en mi comprensión de este concepto ...
fuente
--delete
eliminará archivos en el destino que no existen en la fuente. La menos grave es que--progress
no modifica la forma en que se copian las cosas; solo le da un informe de progreso en cada archivo a medida que se copia. (Solucioné el error grave; lo reemplacé con--remove-source-files
.)Estoy usando este simple script. Siéntase libre de ajustar ciertas banderas y / o paramterizarlo.
fuente
Llegué tarde a esto, pero tenía la misma pregunta y encontré una respuesta diferente.
La
--partial
marca ("mantener archivos parcialmente transferidos" enrsync -h
) es útil para archivos grandes, como es--append
("agregar datos en archivos más cortos"), pero la pregunta es sobre una gran cantidad de archivos.Para evitar los archivos que ya se han copiado, use
-u
(o--update
: "omita los archivos que son más nuevos en el receptor").fuente