¿Cómo sincronizar la carpeta de inicio entre varias computadoras?

117

Tengo tres computadoras en casa y me gustaría /home/sincronizar el árbol de carpetas entre las tres.
Todos los archivos / carpetas (excepto los ocultos) que se modifican / agregan / eliminan en una de las tres computadoras se actualizan en las otras dos.

¿Es rsyncsuficiente para hacer esto? ¿y cómo?

lamcro
fuente
99
El problema con la mayoría de las herramientas de 'sincronización' (incluida rsync si recuerdo correctamente) es que no tienen una noción de las acciones del usuario. Entonces, si elimina un archivo en la computadora X, la herramienta no sabe si (a) realmente eliminó el archivo en la computadora X, o (b) que agregó ese archivo en la computadora Y. La mayoría de las herramientas supondrán (b), entonces, al sincronizar, agregarán el archivo nuevamente en la computadora X (en lugar de eliminarlo en la computadora Y).
Rabarberski
55
@Rabarberski muchas herramientas de sincronización (incluidas Unison o Syncthing) mantienen una base de datos con referencias a los datos existentes (por este motivo). No le ayudará al sincronizar nuevas carpetas por primera vez, pero pueden eliminar archivos por usted (automáticamente). El verdadero problema con la mayoría de las herramientas de sincronización es cuando los archivos se han cambiado en dos ubicaciones antes de que ocurra la próxima sincronización; en este caso de conflicto, generalmente tiene que hacer una fusión manual o tal vez reemplazarla con la versión más nueva.
Chris
2
Sincronizar cuando los cambios no se pueden copiar instantáneamente en las otras máquinas es realmente complicado y nunca he visto que ningún programa lo haga a la perfección, así que prepárate para algunos errores, conflictos o la reaparición de archivos. Recomendaría sincronizar solo algunas carpetas específicas que sabe que serán manejables por el programa de sincronización.
Elzo

Respuestas:

90

Aquí hay una lista de cosas que podrían resolver este problema, cada una equilibra las compensaciones que tiene que hacer de manera diferente, por lo que tendrá que tomar sus propias decisiones y probar las cosas por sí mismo:

  • Unison : como lo mencionaron otros, esto se ejecuta manualmente, pero es muy rápido, confiable y efectivo. Requiere que ambas máquinas se sincronicen para estar encendidas al mismo tiempo. Tiene una interfaz de usuario agradable que le permite lidiar con los conflictos casi inevitables, y rastrea y propaga las eliminaciones correctamente. La aplicación / paquete gráfico se llama unison-gtk.

  • OwnCloud : el almacenamiento en la nube se ejecuta en su propio servidor. Necesitarás una máquina para dejar. Requiere una cantidad razonable de configuración. Ejecuta un servidor web Apache 2 completo y una base de datos SqlLite o MySQL en el servidor. Funciona de manera similar a Dropbox con un cliente de escritorio, pero el servidor está bajo su control. editar: OwnCloud recientemente ha experimentado algunos cambios en la forma en que se ejecuta el proyecto, y ahora tiene una nueva fuente de código abierto (es decir, no hay edición de 'empresa' de código cerrado) bajo el disfraz de NextCloud , (vea esta entrevista de YouTube con el desarrollador original de OwnCloud para más detalles).

  • SparkleShare : usa git para mantener los archivos sincronizados. Según la página de inicio: bueno para muchos archivos más pequeños, no es bueno para muchos archivos grandes como música o colección de fotos.

  • Seafile : proporciona un componente de servidor que puede instalar en una máquina local. Seafile utiliza un modelo de datos similar a git para rastrear cambios. Proporciona clientes de sincronización para computadoras de escritorio, tabletas y teléfonos inteligentes. Se puede encontrar una publicación de blog que describe la configuración en http://openswitch.org/blog/2013/07/18/installing-and-configuring-seafile-on-ubuntu-12-dot-04/

  • Osync - "... herramienta bidireccional de sincronización de archivos escrita en bash y basada en rsync. Funciona en directorios locales y / o remotos a través de túneles ssh. Está dirigida principalmente para ser lanzada como tarea cron" (texto del sitio web)

  • PowerFolder : proyecto GPL v2 basado en Java. El sitio web principal impulsa las ofertas comerciales, por lo que no está claro cómo usar el archivo .jar proporcionado.

  • Rsync : rápido y efectivo, y ha existido durante décadas, sin embargo, no mantiene un historial, por lo que debe elegir una dirección para decidir si un archivo es nuevo o eliminado. Las herramientas gráficas están disponibles, como gwRsync .

  • Lsyncd : monitorea carpetas / archivos para activar la replicación rsync

  • dvcs-autosync : escrito en python, usa git para almacenar y compartir cambios entre máquinas y XMPP para comunicar los cambios.

  • git-annex - herramienta de línea de comando para desviar archivos, basada en git. Aquí hay un tutorial ilustrativo: http://git-annex.branchable.com/walkthrough/

  • Tonido - freeware. Proporciona una aplicación de escritorio que compartirá archivos con otros dispositivos. También proporcione ofertas comerciales en la nube y la computadora de conexión TonidoPlug.

  • Sincronización de BitTorrent (freeware): sincronización de archivos punto a punto basada en BitTorrent. No sé mucho sobre esto, ya que no lo usaré debido a que no es de código abierto y no confío en que mantenga mis datos dentro de mi LAN, no dude en editar esta respuesta con mejor información / experiencias reales.

  • SyncThing : desarrollado como una alternativa de código abierto para BitTorrent Sync. Actualmente carece de algunas de las funciones avanzadas de BitTorrent Sync, como los pares no confiables. Está en desarrollo activo.

  • Los servicios comerciales alojados como Dropbox, Ubuntu One, Google Drive, Apple iCloud son rápidos, baratos y convenientes, sin embargo, todos requieren confiar en una empresa con todos sus datos y necesitan una conexión a Internet razonablemente rápida.

  • Git / subversion : use un sistema de control de fuente directamente. Completamente manual y puede ser un enfoque poco complejo pero popular con algunos usuarios familiarizados con estos sistemas al usarlos como herramientas de programación.

  • CloudFS : sincronice todo un sistema de archivos, basado en tecnología de clúster

  • Montaje NFS: básicamente su hogar vive en una máquina y usted accede a través de la red, no es bueno para las computadoras portátiles que lleva consigo. Más información: http://www.linuxjournal.com/article/4880


Factores a considerar al tomar su decisión:

  • Servidor central: algunas soluciones requieren que una máquina esté encendida todo el tiempo (o al menos cuando necesita sincronizar) para que otras máquinas se sincronicen. Esta podría ser una de sus máquinas existentes, o una máquina separada como un NAS. Cuidado con el aumento de las facturas de energía.

  • Automático / Manual / Programado: la mejor manera de evitar tener que resolver conflictos en los que se cambia algo más que una máquina es tener un programa en cada máquina que esté atento a los cambios y se sincronice de inmediato, de esta manera reduce la oportunidad de terminar con múltiples versiones. Con los procesos manuales, siempre debe recordar ejecutar la sincronización.

  • Acceso remoto: si desea sincronizar lejos de su LAN (también conocido como hogar), piense en las implicaciones de seguridad de esto.

  • Seguridad: sus datos dejan su red encriptada o no, cuán segura es la transferencia entre máquinas. ¿Qué sucede si alguien captura sus datos en movimiento y luego se descubre que el cifrado tiene fallas? ¿Quién controla el servidor que mantiene sus datos? ¿Los datos están cifrados? ¿Puede confiar en terceros? ¿Tienes que hacer agujeros en tu enrutador para obtener acceso remoto? ¿Cuánto tiempo permanecen los archivos 'eliminados' y los metadatos relacionados en los dispositivos sincronizados y en el servidor central? ¿Estás sincronizando entre almacenamiento cifrado y no cifrado?

  • Mover carpetas grandes: todas las soluciones que he probado tienen el problema de que cuando mueve / cambia el nombre de un archivo o carpeta, la sincronización no comprende esto y lo carga nuevamente como nuevo y luego elimina la copia anterior. Por favor, ayude marcando las soluciones anteriores que sean capaces de lidiar con esto (sospecho que las soluciones basadas en git hacen lo que git no sufre debido a la dirección basada en contenido que usa, pero no lo sé con certeza ya que no tengo No los usé).

  • Capacidad de disco

  • Copias de seguridad: la sincronización no es una copia de seguridad. Elimine un archivo importante por error y muchos de los anteriores eliminarán alegremente todas sus otras copias. Recomiendo leer el artículo de Mat Honan sobre cómo ser hackeado para una buena explicación de lo que puede suceder si pones todos tus huevos digitales en una canasta digital, por así decirlo.


Recomiendo no sincronizar toda la carpeta de inicio, sino elegir carpetas específicas para sincronizar como Documents/, Pictures/etc. Esto evitará el dolor de verse obligado a lidiar con los problemas de velocidad / rendimiento / espacio en disco de sincronizar automáticamente todo. También evita tener que mantener listas de exclusión.

A medida que continúe intentando encontrar algo que me funcione personalmente, intentaré mantener esta respuesta actualizada con información útil. He agregado la información de todas las otras respuestas en una respuesta completa.

Referencias

  • LinuxFormat - Febrero de 2014 LXF180 p31, "Resumen de almacenamiento alojado"

piratería / todo /

Tim Abell
fuente
Tengo un servidor sin acceso root (que es necesario para instalar al unísono, por ejemplo). ¿Hay algún script que pueda tener en mi máquina cliente que no necesite instalarse en mi servidor?
Ben Kushigian
He visto un software llamado freefilesync ( sourceforge.net/projects/freefilesync ) mencionado algunas veces aquí y allá. ¿Vale la pena mencionarlo en su lista?
YoungFrog
28

Unison podría ser un buen candidato:

Unison es una herramienta de sincronización de archivos para 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.

Ya hace sincronizaciones bidireccionales. Ver actualización a continuación.

Aprendí que hay muy pocas cosas que rsync no puede hacer, y probablemente puede proporcionar una solución igual o mejor, pero tendrá que esperar a que un experto en rsync aparezca para encontrar esa solución.

Actualización: Sí, Unison puede sincronizar más de 2 máquinas. De su manual de usuario :

Uso de Unison para sincronizar más de dos máquinas

Unison está diseñado para sincronizar pares de réplicas. Sin embargo, es posible usarlo para mantener sincronizados grupos más grandes de máquinas realizando múltiples sincronizaciones por pares.

Si necesita hacer esto, la forma más confiable de configurar las cosas es organizar las máquinas en una "topología en estrella", con una máquina designada como el "centro" y el resto como "radios", y con cada máquina de radios sincronizando solo con el hub. La gran ventaja de la topología de estrella es que elimina la posibilidad de confundir "conflictos espurios" derivados del hecho de que Unison mantiene un archivo separado para cada par de hosts que sincroniza.

nagul
fuente
Tengo algunas malas experiencias con el unísono, por alguna razón de vez en cuando en lugar de agregar los nuevos archivos de otras computadoras, los eliminó mientras que otras veces funcionó bien.
jhcaiced
1
Sugiero editar el ejemplo a / b / c para seguir la recomendación del manual de no crear bucles.
Tim Abell
En cuanto a su referencia a rsync. No, no puede hacer una sincronización bidireccional de manera confiable. Mire la siguiente respuesta para ver por qué Unison puede manejar un caso que rsync no puede: stackoverflow.com/questions/4504357/…
ndemou
19

¿Qué tal si coloca sus archivos en un sistema de control de versiones como SubVersion o git?

No versiono todo mi directorio de inicio, sino solo unos pocos subdirectores con algunas cosas importantes. Pero estoy pensando en convertirme a git, ya que parece ser mejor para este tipo de trabajo. ( una búsqueda rápida lo enviará en la dirección correcta ).

Buena suerte


Actualización : Un buen efecto secundario con git es que es fácil tener archivos específicos de la computadora, ya que solo necesitas tener una rama para esa computadora (y en git obtienes eso por defecto). Por lo tanto, no necesita tener exactamente los mismos archivos en toda la computadora, solo deben ser similares y tener una rama "principal" común con las cosas que desea en todas las diferentes computadoras.

Johan
fuente
Yikes La idea de usar el control de versiones para la sincronización de archivos realmente hace que mi piel se arrastre.
JohnD
Sí, la idea es extraña pero realmente útil. Piense en un directorio como ~ / bin / para scripts de ayuda privados, ese tipo de directorio es excelente en un sistema de control de versiones. Mientras que un directorio como .kde probablemente se comportará mal en el sistema de control de versiones y se colocará en una lista de ignorados para el archivo no manejado.
Johan
Esta es una excelente manera de mantener sus archivos sincronizados, debe acostumbrarse a la idea de usar "git add" y "git rm" para agregar / eliminar archivos, pero funciona muy bien.
jhcaiced
Me gusta esta idea porque tengo el control de qué parte de los archivos de basura que tengo en mi casa se compartirán. La única pregunta es cómo administrar las confirmaciones. es decir, algunos archivos deben entrar en la confirmación inicial y luego reflejar los cambios para mostrar que se basan en el sistema / etc / skel.
ony
¿Es realmente conveniente mantener un par de ramas separadas con sus archivos cuando intenta sincronizar directorios? Claro, funciona, pero no lo recomendaría (g) para esta tarea. En general, puede excluir archivos de la mayoría de las herramientas de sincronización (ya sea por nombre, carpeta, etc.) y por lo que está describiendo (usándolo solo para algunos subdirectorios importantes), no es realmente útil con respecto a la pregunta original.
Chris
6

Su principal problema al intentar hacer esto es decidir cómo combinar cambios, propagar eliminaciones y resolver conflictos. Esto es difícil de hacer de una manera completamente automatizada, especialmente si tiene una configuración de computadora 3 utilizada por varias personas.

Si separas a los usuarios, las cosas se vuelven mucho más simples. Debido a que un usuario no puede estar en dos lugares a la vez (y, por lo tanto, generar conflictos), puede configurar un trabajo rsync para que se ejecute al iniciar sesión para "obtener cambios" y cerrar sesión para "enviar cambios" ... a una de sus computadoras que sería el maestro ... así que a este nivel de granularidad estarías sincronizando / home / myuser cada vez en lugar de todo / home /. Un refinamiento adicional (en el caso de personas que no se desconectan) sería ejecutar el script push después de un corto período de inactividad.

Hay muchas otras posibles soluciones, pero ninguna que resuelva mágicamente este problema, que yo sepa. Probablemente, el primer paso es pensar en cómo usa las máquinas y elaborar una política de sincronización que se adapte al comportamiento de su usuario.

Ira Cooke
fuente
4

Esto no proporcionará por completo una solución, pero le dará un comienzo:

Configure un trabajo cron de vez en cuando para sincronizar los archivos. Yo uso un comando como el siguiente:

rsync -alhz --stats --progress --exclude-from '/etc/rsync_backup_excludes.conf' / -e ssh [email protected]:/path/to/home/

Esto usará rsync para copiar solo los cambios necesarios, no volver a copiar todo cada vez que se ejecute el comando.

--stats y --progress son opcionales y probablemente deberían excluirse de sus scripts

Los contenidos de mi archivo rsync_backup_excludes.conf son:

dev/*
proc/*
lost+found/*
mnt/*
sys/*
Matt Cofer
fuente
Anacron se sincronizará cuando la máquina esté encendida, evitando ranuras faltantes debido al tiempo de inactividad.
Tim Abell el
Esto copia toda su raíz local en la carpeta de inicio remota. Eso no es lo que pidió el OP, ni puedo imaginar por qué alguien querría eso ...
Cerin
4

Echa un vistazo a lsyncd

Lsyncd observa una interfaz de monitor de eventos de árboles de directorio local (inotify o fsevents). Agrega y combina eventos durante unos segundos y luego genera uno (o más) proceso (s) para sincronizar los cambios. Por defecto esto es rsync. Lsyncd es, por lo tanto, una solución liviana de espejo en vivo que es relativamente fácil de instalar, no requiere nuevos sistemas de archivos o dispositivos de bloqueo y no obstaculiza el rendimiento del sistema de archivos local.

Rsync + ssh es una configuración de acción avanzada que utiliza un SSH para actuar el archivo y el directorio se mueve directamente sobre el objetivo en lugar de retransmitir el destino del movimiento a través del cable.

La personalización de grano fino se puede lograr a través del archivo de configuración. Las configuraciones de acciones personalizadas incluso se pueden escribir desde cero en capas en cascada que van desde scripts de shell hasta código escrito en el lenguaje Lua.

eric
fuente
2

Echa un vistazo a dropbox http://www.getdropbox.com/ Multiplataforma Win / Linux / Mac

Boxdog
fuente
3
Gracias, pero no. Ya lo intenté. No es lo que estoy buscando.
lamcro
Dropbox es excelente y utilizo sus 2GB gratis para almacenar enlaces, fotos y otros datos que no son de misión crítica entre el hogar, el trabajo y mis computadoras portátiles. No es lo que necesitas en esta situación, pero en mi opinión, Dropbox definitivamente tiene su lugar.
Matt Cofer
2

Montar /homede una computadora a las otras dos. Automount funciona bastante bien para esto.

Xenoactive
fuente
1

Ubuntu One podría ser lo que estás buscando. Desafortunadamente, todavía está en fase beta, y no tengo experiencia con él, así que no estoy seguro de si funcionaría para usted.

Ilari Kajaste
fuente
Yo diría que todavía está en un gran desarrollo en este momento: hay actualizaciones cada pocos días a medida que el equipo de Ubuntu soluciona los problemas. Funciona, pero no lo recomendaría sobre Dropbox.
nagul
1

Si también desea sincronizar configuraciones, las herramientas mencionadas anteriormente son totalmente inútiles: las configuraciones a menudo se cambian y muchos archivos de registro generarán conflictos para que no se puedan fusionar.
Mi decepción es simple y estúpida :) Tengo una estación de trabajo Master, y todos los archivos de "~" se copian a la segunda "Slave". En el momento en que me doy cuenta de que necesito modificar algo, lo hago en Master, y Slave detecta estos cambios en la sincronización.

Además, algunos scripts de bash deberían ejecutarse de manera diferente en estas máquinas, así que edité mi /etc/bash.bashrc:

exportar OOHOST = Master

Ahora, los scripts saben a qué host sirven;)

Kolypto
fuente
1

Prueba dvcs-autosync .

Esto se basa en git, usa XMPP para notificar a los clientes conectados de los cambios de archivo y reacciona ante los eventos de cambio de archivo a través de cambios de inodo. Por lo tanto, siempre se informa inmediatamente después del cambio de archivo, en caso de conflictos, se basa en los métodos probados de git.

Lo he estado usando durante un tiempo como reemplazo de Dropbox a través de claves públicas SSH y realmente hace el trabajo.

Schlypel
fuente
0

PowerFolder : archivos de sincronización, carpetas de sincronización, almacenamiento remoto, copia de seguridad y uso compartido de archivos privados. Sincronice la PC del hogar y la oficina, comparta fotos de las vacaciones o trabajen juntos en documentos. La tecnología segura peer-to-peer de PowerFolder funciona a través de Internet o LAN.

Molly7244
fuente
0

Las soluciones alternativas que consideraría:

  • Dropbox
    Principales inconvenientes: no es gratuito para ninguna cantidad razonable de datos. De lo contrario, funciona perfectamente en mi humilde opinión

  • Un servidor NAS. Coloque sus archivos en un servidor NAS, se volvieron razonablemente asequibles últimamente (desde 150 $ más o menos) y uno bueno no consume mucha energía. Sin problemas de sincronización nunca.
    Principal inconveniente: más lento que una copia local

Rabarberski
fuente
Con el NAS, todavía no está abordando cómo ocurre la sincronización. Tener un NAS y dos computadoras no es, en principio, diferente de tener tres computadoras como OP pregunta. Si está sugiriendo que todo lo que necesita sincronizarse solo se almacena en el NAS, entonces eso generalmente no es posible, considere la sincronización de archivos de configuración, por ejemplo, deben estar en cada máquina.
kba
0

Utilizo SyncTwoFolders para Mac y Syncback para PC: el primero para mis tres Mac en casa (computadora portátil incluida) y el segundo para mi PC en el trabajo. Ambos programas tienen varias opciones de respaldo y sincronización, lo que hace que sea muy fácil una vez que se han configurado los preajustes. ¡Pan comido! Estoy seguro de que hay otras versiones de software similares disponibles para Linux y Ubuntu.

Henk el ThinkTank
fuente
0

Puede usar un script de sincronización como osync que puede propagar archivos eliminados y actualizar solo los modificados. http://www.netpower.fr/osync osync está basado en rsync pero puede manejar muchos escenarios de sincronización entre carpetas locales o remotas a través de ssh.

Orsiris de Jong
fuente