Sincronización de archivos tipo Dropbox sin un servidor central [cerrado]

22

Estoy buscando una manera de sincronizar las unidades secundarias en mis dos Mac a través de Internet. Tengo una conectividad VPN constante entre los dos Mac, y puedo acceder a ellos como si estuvieran sentados uno al lado del otro.

Estoy buscando una manera de implementar una experiencia similar a Dropbox donde si modifico un archivo en una Mac, el archivo se enviaría a la otra Mac (y viceversa). También necesito la capacidad de reducir el ancho de banda (para que nuestra pequeña tubería de carga de 1 megabit no se sobrecargue). ¿Alguna sugerencia?

Ah, y usar Dropbox está fuera de lugar en este momento, ya que mi disco es de 500 GB. ¡Gracias!

muncherelli
fuente
Busque un puerto de "rsync", que es una herramienta de Linux para eso. Puede sincronizar sus archivos en cada ejecución; entonces solo necesita una forma de activar esto cada vez que sg cambia.
dkellner
¿Quieres sincronizar todos los 500 GB?
cubuspl42
55
Esto sería sobre el tema de las Recomendaciones de software. Vea esta pregunta (no específica para Mac): softwarerecs.stackexchange.com/questions/129/…
Nicolas Raoul
¿Necesitas esto también? "Si elimino el archivo en cualquiera de las máquinas, también debería eliminarse de la otra máquina, en lugar de volver a crearlo".
Patrick M
¿No es esto para lo que es iCloud? hints.macworld.com/article.php?story=20120803092156975
Blazemonger

Respuestas:

30

Echa un vistazo a Bittorrent Sync . Tiene la funcionalidad de sincronización como Dropbox, pero sin la nube.

Oskar Persson
fuente
Desventaja: Ambas máquinas deben estar en línea simultáneamente para poder sincronizarse.
Gerald Schneider
18
@GeraldSchneider ¿Conoces algo que no tenga esta limitación?
Shelvacu
2
@shelvacu, no es posible. Si desea que se sincronice sin necesidad de ambas máquinas en línea, necesita almacenamiento en la nube (en contra de la solicitud de OP).
HalosGhost
55
No necesariamente un almacenamiento en la nube. Necesita un nodo que siempre esté en línea. Puede ser una computadora, un NAS, un servicio en la nube, su propia instancia de OwnCloud alojada según lo propuesto por Lawrence o cualquier solución similar. Pero siempre que no tenga un nodo siempre en línea, esta limitación siempre se aplica.
Gerald Schneider
3
Uso BitTorrent Sync y lo recomiendo encarecidamente: lo uso junto con Dropbox para archivos que son demasiado grandes y que no vale la pena ocupar espacio allí. Sin embargo, una cosa a tener en cuenta es que no trata bien con las ediciones simultáneas de archivos (no hay manejo de conflictos como con Dropbox), el último archivo editado simplemente gana. No necesariamente es un problema, pero depende de sus requisitos.
zelanix
16

Si quieres ir al hardcore, puedes usar el comando rsync de forma nativa en OsX , como * nix staff.

Antes de todo, debe tener permiso para acceder al host remoto mediante ssh. El servidor OpenSSH está preinstalado en Mac OsX y no necesita instalar ningún paquete adicional. Solo necesito hacer algunas configuraciones del sistema. Para habilitar el servidor OpenSSH en Mac OS X, abra Preferencias del sistema y haga clic en Compartir. Y luego, marque la casilla Inicio de sesión remoto para habilitar SSH, luego seleccione el botón de radio etiquetado Todos los usuarios en la sección Permitir acceso para .

Ahora puede acceder al host remoto mediante ssh.

Ahora, debe crear una clave de acceso público para acceso sin contraseña desde la máquina local invitada al host remoto a través de ssh. Para eso debes ensuciarte un poco la mano. :)

Primero, determine si ya tiene claves de autenticación. En la Terminal , ejecuta:

sudo ls -la /var/root/.ssh

Si ve "id_dsa" e id_dsa.pub , puede omitir el resto de esta sección.

En la máquina cliente, ejecute lo siguiente en la Terminal:

sudo ssh-keygen -t dsa -f /private/var/root/.ssh/id_dsa -C "comment about this key"

Después de crear la clave de acceso en la máquina local invitada, debe copiar la clave pública del invitado en el archivo autorizado de claves del host. Puede hacer esto con un simple comando de Terminal que agrega la clave pública a la lista de claves autorizadas:

sudo cat /private/var/root/.ssh/id_dsa.pub | ssh root@remote_host_address 'cat - >> ~/.ssh/authorized_keys'

El siguiente comando realizará una copia de seguridad incremental de su sistema de archivos raíz en la máquina invitada local en su host remoto:

/usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine

Puede cambiar los parámetros de rsync para cambiar los comportamientos de sincronización. Si agrega este comando en crontab , la sincronización se puede ejecutar en cualquier ciclo de tiempo. Por ejemplo:

sudo crontab -e

agregue la línea a continuación a crontab:

*/30 * * * * /usr/local/bin/rsync -aNHAXx --protect-args --fileflags --force-change --rsync-path="/usr/local/bin/rsync" / root@remote_host_address:/Volumes/Backup/GuestMachine

Esto se ejecutará sincronización en cada media hora.

Aquí está el script de Python de muestra:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Cron automated synchronization script.

Desc: Synchronize remote folder into local machine. Duplicate processes 
      are disallowed until running process finished.

Usage:
    :: Change required variables as _user, _password, _domain etc.
    :: Edit crontab 
    # crontab -e

    :: Append line below.
    */30 * * * * python synchronizator.py 2>&1 &

Author: Sencer HAMARAT (RecNes)
E-Mail: [email protected]
"""

import shlex
from subprocess import Popen, PIPE
import logging as log
import sys

__author__ = "Sencer HAMARAT"

_user = 'username'
_password = 'password'
_domain = 'example.com'

_expectation = "Enter passphrase for key \'/home/%s/.ssh/id_rsa\':" % _user
_rsync = '/usr/bin/rsync --partial --progress -avvz -e'
_pub_key = '/home/%s/.ssh/id_rsa.pub' % _user
_ssh = '/usr/bin/ssh -i %s' % _pub_key
_remoteDir = '/home/%s/backup/' % _user
_localDir = '/home/%s/backup/' % _user
_command = '%s %s %s@%s:%s %s' % (_rsync, _ssh, _user, _domain, _remoteDir, _localDir)
run_command = shlex.split(_command)

_logFile = "logfile.log"
_logFormat = "%(asctime)s %(levelname)s %(name)s %(process)d %(threadName)s %(module)s:%(lineno)d %(funcName)s() " \
             "%(message)s\n"
log.basicConfig(filename=_logFile, level=log.DEBUG, format=_logFormat)

log.debug(u'Command will run: %s' % _command)

try:
    running_command = Popen(run_command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    if running_command.poll():
        log.debug(repr(running_command.poll()))
        sys.exit()
    if _expectation in running_command.communicate():
        running_command.communicate(_password)
    print running_command.communicate()
except Exception as e:
    log.debug(repr(e))
finally:
    sys.exit()
Senor H.
fuente
Había considerado usar rsync, sin embargo, el problema radica aquí: "¿Qué pasa si rsync no está completamente terminado después de los 30 minutos?" No quiero que ocurran dos rsyncs al mismo tiempo. ¿Hay alguna forma de evitar esto?
muncherelli
1
@muncherelli: es relativamente sencillo escribir un pequeño mecanismo de "bloqueo" alrededor del rsync para evitar sincronizaciones simultáneas. Básicamente, envuelva la llamada rsync en un script bash y podrá hacer lo que quiera.
unperson325680
Agregué un script de muestra. Espero que sea de ayuda.
Sencer H.
Este es un gran guión. Muchísimas gracias por la ayuda. Decidí ir con BitTorrent Sync debido a la simplicidad y la limitación del ancho de banda. (Sé que puede establecer el uso máximo de ancho de banda con rsync, pero BTS es mucho más intuitivo).
muncherelli
8

Owncloud es una posible solución si desea acceso basado en la web.

Necesitará su propio servidor para alojar Owncloud, sin embargo, es más una solución basada en servidor donde sus 2 clientes pueden acceder a lo que necesitan a voluntad, pero solo habrá 1 copia del archivo en cuestión, que se ubicará en el Servidor Owncloud.

Lawrence
fuente
¿Sigue siendo el caso de que solo puedes conectarte a una propia nube? Por ejemplo, ¿no puedo tener el mío y compartir otro con mi hermano?
Thomas Weller
Al menos los clientes de sincronización de escritorio ahora admiten múltiples conexiones simultáneas en la nube. Pero también dentro de un servidor, puede compartir solo archivos / directorios específicos, no necesariamente todo.
ojdo
2

Si es Windows, hay una herramienta SyncToy que lo hace en tres pasos. Si Mac, se trata de ChronSync herramienta o tri-copia de seguridad de herramientas

Ruslan Gerasimov
fuente
Hola Ruslan, ¿puedes editar tu respuesta para explicar por qué ChronSync o Tri-Backup serían la solución ideal para el OP? En este momento, es una respuesta de muy baja calidad, y en realidad no responde el cómo de la pregunta. Gracias
Canadian Luke REINSTATE MONICA
Hola, gracias por tu pregunta. Bueno, no estoy diciendo que estos programas sean la solución ideal, pero creo que es bastante fácil porque tienen GUI, eso también significa que cualquiera puede hacerlo sin un profundo conocimiento de un montón de ortografía mágica de líneas de comando. También creo que si uno tiene un problema con el uso de los programas enumerados, debe hacerse en una pregunta separada, como lo que ha hecho, lo que está mal \ extraño. Es más que copiar aquí la documentación para ellos sin que se les haga ninguna pregunta en particular.
Ruslan Gerasimov
2

Considera Unison. Maneja la sincronización bidireccional de archivos. Puede configurarlo en un horario con crono alguna otra aplicación de programación.

http://www.cis.upenn.edu/~bcpierce/unison/

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.

Unison comparte una serie de características con herramientas como paquetes de administración de configuración (CVS, PRCS, Subversion, BitKeeper, etc.), sistemas de archivos distribuidos (Coda, etc.), utilidades de duplicación unidireccionales (rsync, etc.) y otros sincronizadores (Intellisync, Conciliar, etc.). Sin embargo, hay varios puntos en los que difiere:

Chloe
fuente
1
+1: Cuando se requiere sincronización bidireccional, esto claramente gana sobre rsync, mientras tiene todas sus características interesantes.
Ojdo
1

He tenido buena suerte con GoodSync con dos PC en la misma LAN, pero apuesto a que aún funcionaría bien en su situación.

Aquí está la descripción de su producto:

  • GoodSync sincroniza archivos entre su computadora, dispositivos móviles, FTP, SFTP, Amazon S3, Google Drive, SkyDrive, WebDAV, Azure.
  • GoodSync realiza copias de seguridad de archivos en unidades portátiles, dispositivos móviles y FTP, S3, GDocs, SkyDrive, DAV u otra computadora.
  • Sincronización directa P2P: GoodSync Connect sincroniza archivos directamente entre sus computadoras, sin la lentitud introducida por la sincronización a través de servidores de terceros.
  • GoodSync es muy rápido y sincroniza archivos en su comando, periódicamente, por un horario o en tiempo real (en el cambio de archivo).

Solo necesita que GoodSync esté configurado en una de sus PC; maneja la sincronización bidireccional y el tipo de sincronización que hace es personalizable. Además, es altamente recomendado por CNet.

Jon Onstott
fuente
Hola Jon, ¿puedes editar tu respuesta para explicar por qué GoodSync sería la solución ideal para el OP? En este momento, es una respuesta de muy baja calidad, y en realidad no responde el cómo de la pregunta. Gracias
Canadian Luke REINSTATE MONICA
1

Otra posible solución es AeroFS .

AeroFS sincroniza bidireccionalmente datos entre sus dispositivos mientras solo almacena sus datos en sus dispositivos; sus datos nunca se acercan a sus servidores. AeroFS mantiene un historial de revisiones para sus archivos para que pueda volver a versiones anteriores cuando sea necesario y proporciona una herramienta para resolver conflictos.

AeroFS funciona en Windows, Mac, Linux, iOS y Android, por lo que debería tenerlo cubierto.

chritohnida
fuente
0

Entonces, si no se opone al almacenamiento en la nube por principio, hay dos soluciones de hardware para unidades externas:

Space monkey utiliza un paradigma interesante ... asigna parte de su disco para almacenar pequeñas piezas de datos de otras personas, y también almacena sus datos en muchas unidades de otras personas (encriptadas, por supuesto). De esa manera, hay mucha redundancia en caso de desastre, y sus máquinas no necesitan poder verse o incluso estar conectadas al mismo tiempo.

El transportador de archivos es un poco más simple, ya que los datos solo se sincronizan en otras unidades de transporte de archivos que configuró específicamente para sincronizar.

Ambas opciones son buenas para grandes cantidades de datos, y solo compra el hardware una vez sin una tarifa de suscripción.

tfinniga
fuente