Sincronice una carpeta entre 2 computadoras, con un observador del sistema de archivos para que cada vez que se modifique un archivo, se replique inmediatamente

20

Yo tengo:

  • un servidor Linux que conecto a través de SSH en el puerto IP 203.0.113.0 1234

  • una computadora doméstica (detrás de un enrutador), IP pública 198.51.100.17, que es Debian o Windows + Cygwin

¿Cuál es la forma más fácil de /home/inprogress/ sincronizar una carpeta (en ambas direcciones), un poco rsync, pero con un observador del sistema de archivos , de modo que cada vez que se modifica un archivo, se replica inmediatamente en el otro lado? (es decir, no es necesario llamar manualmente a un programa de sincronización)

Estoy buscando una solución de línea de comandos / sin GUI, ya que el servidor no tiene cabeza.

¿Existe una solución integrada para Linux / Debian?

Basj
fuente
77
Usted está describiendo syncthing.
Kusalananda
Hay lsync, pero no sé si funciona útilmente para la sincronización bidireccional.
Ulrich Schwarz
lsync, csync2, inotify + rsync, pero preferiría usarlos en una configuración de red local.
Rui F Ribeiro
2
A nivel del sistema de archivos, esto suena como OCFS2, o incluso RAID 1 sobre NBD
roaima
3
La sincronización unidireccional es fácil. La sincronización bidireccional implica la resolución de conflictos (sí, sucederá en algún momento), lo que a su vez significa algún tipo de interfaz de usuario (aunque no necesariamente una GUI).
jcaron

Respuestas:

23

Siguiendo el comentario de @ Kusalananda, finalmente pasé unas horas probando Syncthing para este caso de uso y funciona muy bien. Detecta automáticamente los cambios en ambos lados y la replicación es muy rápida.

Ejemplo: imagina que estás trabajando localmente server.pyen tu software de Bloc de notas favorito, presionas CTRL + S (Guardar). Unos segundos después, se replica automáticamente en el servidor distante (sin ningún cuadro de diálogo emergente).

Una gran cosa que he notado es que no tiene que pensar en la IP de la computadora y el servidor con Syncthing: cada "dispositivo" (computadora, servidor, teléfono, etc.) tiene un DeviceID único y si comparte la identificación con otro dispositivo, descubrirá automáticamente cómo deben conectarse entre sí.

Que hacer:

  • Lado del equipo doméstico (Windows o Linux):

    Use la herramienta de configuración normal del navegador Syncthing

  • Lado VPS:

    Primero conecte el VPS con un reenvío de puertos:

    ssh <user>@<VPS_IP> -L 8385:localhost:8384
    

    La última opción redirigirá la herramienta de configuración web Syncthing del VPS que escucha en el puerto 8384 al puerto 8385 de la computadora doméstica.

    Luego ejecute esto en VPS:

    wget https://github.com/syncthing/syncthing/releases/download/v0.14.52/syncthing-linux-amd64-v0.14.52.tar.gz 
    tar xvfz syncthing-linux-amd64-v0.14.52.tar.gz
    nohup syncthing-linux-amd64-v0.14.52/syncthing &
    

    Luego, en el navegador de la computadora doméstica, abra http: // localhost: 8385 : ¡esta será la configuración de sincronización del VPS!


Otra solución que probé:


Ventajas adicionales de la sincronización que acabo de notar:

  • se puede reducir fsWatcherDelaySen el config.xmlde 10a 2segundos de modo que después de hacer CTRL + S, 2 segundos después (+ el tiempo de carga, es decir, menos de 1 segundo para un pequeño archivo de texto) es en el otro equipo

  • Si sincroniza dos computadoras que están en la misma red local (simplemente entregándose el DeviceID entre sí, no es necesario preocuparse por las direcciones IP locales), automáticamente notará que no necesita transitar por Internet, pero puede tratar localmente. Esto es genial y permite una sincronización de transferencia de velocidad muy rápida (¡4 MB / s!) De phone <--> computerambos conectados al mismo enrutador doméstico a través de WiFi ... ... mientras que se atascaría a 100 KB / s en ADSL con una sincronización de Dropbox ! (mi ADSL está limitado a 100 KB / s en la carga)

Basj
fuente
@sudodus Un amigo ya me lo recomendó hace unas semanas, y lo había intentado para la sincronización de la computadora <-> teléfono, ¡pero no imaginé que funcionaría tan bien para un servidor de desarrollo también! Edite su código, presione guardar, 1 2 3 está en la otra computadora!
Basj
1
+1. Tuve el mismo problema durante bastante tiempo, usé rsync + algunos scripts durante años, y finalmente intenté sincronizar, csync, unison y algunos otros hace 2 meses. Funciona muy bien, con cualquier cantidad de computadoras, e incluso cuando algunas de ellas no tienen una conexión de red permanente. Se puede recomendar al 100%.
Guntram Blohm apoya a Monica el
1
¡Genial que hayas probado todas estas diferentes soluciones @GuntramBlohm! Si tiene unos minutos para publicar una respuesta para dar su opinión / comparación entre sincronización, rsync, csync, unison, etc., los pros / contras de cada uno, ¡sería súper interesante para futuras referencias!
Basj
16

Parece que Unison debería hacer el trabajo.

Unison es una herramienta de sincronización de archivos para OSX, Unix y Windows. Permite que dos réplicas de una colección de archivos y directorios se almacenen en diferentes hosts (o diferentes discos en el mismo host), se modifiquen por separado y luego se actualicen propagando los cambios en cada réplica a la otra.

Tiene una GUI opcional que puede hacer que la resolución de conflictos sea algo más fácil, pero también se puede hacer todo usando una interfaz de usuario basada en texto. También puede predefinir cómo resolver conflictos para una operación totalmente desatendida.

Hay un componente observador de archivos (fsmonitor) para activar una sincronización cuando sea necesario. Busque "repetir reloj" en el manual para más detalles.

Parece que Debian tiene la versión correcta (2.48+) empaquetada de fábrica .

TooTea
fuente
¡Gracias! ¿El archivo fsmonitor del observador de archivos está incluido de fábrica con Unison, o tenemos que instalar esta herramienta y conectarla con Unison manualmente?
Basj
1
@Basj Está incluido en versiones recientes y es realmente trivial de configurar. He agregado un enlace al manual.
TooTea
Lo usé en el pasado en una vieja Mac. Simplemente funciona con la mínima molestia. Sin embargo, no tengo idea si es apropiado para escenarios de servidor.
Rui F Ribeiro