update exclude synchronization rsync

synchronization - exclude - ¿Ignora rsync las marcas de tiempo del archivo y sobrescribe automáticamente en el cliente si el archivo es diferente en el servidor?



rsync ubuntu (4)

Intento configurar dos computadoras para sincronizar un árbol de carpetas para que cada PC tenga una copia del árbol con las actualizaciones más recientes de cada archivo.

Consideré configurar Mercurial pero me di cuenta de que realmente no me importa el control de versiones (especialmente porque tengo poco espacio en disco), y esa rsync parece que hace más de lo que quiero, simplemente manteniendo los archivos actualizados, sin versiones.

Sin embargo, la página en http://www.linuxjournal.com/content/synchronizing-your-life dice lo siguiente:

Con rsync, no se transferirán los archivos que ya existen en el destino. Esto acelera el tiempo de transferencia considerablemente. Sin embargo, todavía existe el problema de hacer modificaciones en ambos lados. De forma predeterminada, el programa rsync solo busca ver si los archivos son diferentes en tamaño y fecha y hora. No importa qué archivo es más nuevo, si es diferente, se sobrescribe.

Puede pasar el indicador ''--update'' a rsync, lo que hará que omita archivos en el destino si son más nuevos que el archivo en el origen, pero siempre que sean del mismo tipo. Lo que esto significa es que, si, por ejemplo, el archivo fuente es un archivo normal y el destino es un enlace simbólico, se sobrescribirá el archivo de destino, independientemente de la marca de tiempo. Incluso mirando más allá de sus peculiaridades, la opción --update no resuelve el problema porque lo único que hace es omitir archivos en el destino si son más nuevos, no lleva esos cambios a la computadora de origen.

¿Es esto correcto?

Si es así, supongo que hace que rsync realmente solo sea útil para hacer una copia de seguridad de una máquina maestra ("fuente") en uno o más esclavos que obtendrán los cambios del maestro independientemente de las marcas de tiempo. Mientras que el problema que estoy tratando de resolver es tener dos máquinas para ser "iguales" e igualmente obtener los archivos actualizados más recientemente de la otra.

¿O crees que tendré que morder la bala y usar git o Mercurial a pesar del espacio extra en el disco para las versiones de seguimiento?

(Sí, sé de Dropbox; estoy muy por encima del límite de 2 GB de cuenta gratuita y no estoy realmente interesado en gastar entre 120 y 240 dólares al año cuando no necesito el almacenamiento en la nube y algo así debe haberse hecho antes con free & abrir herramientas.)

Las PC ejecutan XP, pero iba a usar Cygwin''s rsync y cualquier otra herramienta Unixy necesaria para hacer el trabajo.


Después de las pruebas, creo que la respuesta es sí.

En cuanto a por qué no solo probé esto en primer lugar antes de preguntar, había entendido mal la forma en que rsync funcionaba y pensé que siempre necesitabas configurar un daemon rsync en el servidor.

Sin embargo, si usa ssh como mecanismo de transferencia, no es necesario que haya un daemon rsync ejecutándose en el servidor, solo un daemon ssh, que es mucho más común.

En mis pruebas, un archivo más reciente y cambiado en mi máquina local fue sobrescrito por el archivo anterior en el servidor (aunque había usado la opción --actualizar).

Mi conclusión es que rsync es mejor para la copia / actualización maestro-esclavo, en lugar de la verdadera sincronización bidireccional basada en pares.

Tendré que buscar en Mercurial o posiblemente en Microsoft SyncToy (ya que ambas máquinas ejecutan XP); Probablemente vaya con esto último ya que es una red doméstica simple.


¿Has intentado ejecutar rsync --update dos veces? Podría estar equivocado, pero creo que el siguiente par de comandos lograría una sincronización bidireccional.

rsync -avz --stats --update geezer / merlin

rsync -avz --stats --update merlin / geezer

aquí solo está sincronizando 2 directorios geezer y merlin, pero creo que debería comportarse igual si el origen y el directorio fueran rutas completas, incluidos los nombres de las máquinas.


rsync av --update /loc1 /loc2

por lo tanto, solo los archivos que estén ACTUALIZADOS se sincronizarán desde loc1 a loc2. La lógica dicta que los archivos que están en NEWER en loc2 no se tocarán. Por lo tanto, todos los archivos desactualizados en loc2 estarán actualizados gracias a loc1

rsync av --update /loc2 /loc1

Ahora sabemos que todos los archivos que loc1 tenían que eran más nuevos se copiaron a loc2. Todos los archivos que eran más antiguos en loc1 (que tenían los más nuevos en loc2) se mantuvieron sin cambios. El segundo comando rsync ahora actualizará loc1 con archivos más nuevos en loc2

Et Voila! ambas ubicaciones están sincronizadas en este ejemplo.


Si tiene problemas con rsync y timestamps, tal vez necesite observar la precisión con la que se almacenan las marcas de tiempo en sus diversos sistemas de archivos implicados en la sincronización.

Utilice fstat para detectar esto: si sincroniza un archivo y el original tiene una marca de tiempo de 2012-01-10 23: 41: 04.348724000 y la fecha y hora del archivo sincronizado 2012-01-10 23: 41: 04.000000000, entonces este es un signo de una diferencia en precisión

Opción de rsync --modify-window=1 puede manejar esta diferencia de precisión al permitir una pequeña diferencia.