Rsync que maneja los movimientos con sensatez


10

He estado usando rsync con éxito para sincronizar mis directorios personales entre mi computadora portátil y mi netbook (ambos usando ext4 con Linux). Mi único problema con esto es que de vez en cuando me gusta reorganizar completamente ciertos directorios, y rsync ve esto como eliminaciones y creación de nuevos archivos, lo que lo hace muy lento e ineficiente.

¿Alguien sabe de un buen software que maneja bien los movimientos de archivos?

Descubrí que el unísono debería ser capaz de esto, pero no parece funcionar en la práctica. Probé unísono mediante la sincronización de dos directorios locales, cada uno con un archivo grande en ella, y todavía detecté mi movimiento como una creación eliminación + y estaba en efecto aún más lento que rsync .

Por otra parte, si no recuerdo mal de mi mirando al unísono 's código fuente hace un par de meses, se trató de hacer algo como haciendo sha sumas-y yo no quiero que mi solución ideal para hacer sumas-que sha es demasiado lento en gran archivos / directorios. Me gustaría algo que note cosas como:

"La última contraparte de origen de este archivo parece haber sido eliminada y hay un nuevo archivo en otra parte del árbol del directorio de origen que tiene el mismo número de fecha, tamaño e inodo, así que voy a suponer que esto fue un movimiento y mover su contraparte objetivo en consecuencia en lugar de hacer una eliminación + copia ".

Para mí es importante poder sincronizar estas máquinas rápidamente.

¿Alguna sugerencia?

Respuestas:


6

Debería echar un vistazo a rdiff-backup que hace rsyncdebajo, pero con la inteligencia adicional que necesita (y hace que las copias de seguridad incrementales sean capaces de retroceder, pero puede configurarlo para desactivarlo).

La última versión es antigua (2009), pero eso es un signo de estabilidad.


2
Alguien ha intentado eso?
niebla

3

Unison hace lo que quiere, pero solo para la sincronización remota. Intenta usarlo ssh://localhost/path/to/dircomo una de las raíces.

Unison basa sus decisiones en el contenido del archivo, no realiza un seguimiento de los números de inodo.


1

Puede manejar archivos movidos y renombrados con rsync si los sistemas de archivos en el directorio de origen y destino tienen soporte para enlaces duros. La idea es dejar que rsync reconstruya enlaces duros antes de una transferencia real. Puedes encontrar una buena explicación aquí

Terminamos con una solución simple que crea un árbol oculto de enlaces duros dentro del directorio fuente / destino, el script básico podría ser así:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

Tengo un script de ejemplo en GitHub . Pero le aconsejo que haga una gran cantidad de pruebas antes de usar este método en la producción.


0

Si desea sincronizar archivos entre varias máquinas, entonces puede querer simplemente usar un sistema de control de versiones centralizado como Subversion (o FSVS, que usa SVN como back-end). Lo bueno es que todo en su / home (que agrega al control de versiones) se versiona y se puede sincronizar fácilmente con otras máquinas o revertir.


0

lsyncd también maneja los archivos movidos con el comportamiento rsync + ssh, aunque algo defectuoso (obtengo alrededor del 15% de los movimientos manejados como eliminar / copiar, aún para descubrir por qué). La mayoría de las veces funciona.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.