Sinkronisasi File Seperti Dropbox tanpa server pusat [ditutup]


22

Saya mencari cara untuk menyinkronkan drive sekunder di dua Mac saya di internet. Saya memiliki konektivitas VPN yang konsisten antara kedua mac, dan saya dapat mengaksesnya seolah-olah mereka duduk bersebelahan.

Saya mencari cara untuk mengimplementasikan pengalaman seperti Dropbox di mana jika saya memodifikasi file di satu Mac, file akan didorong ke Mac lain (dan sebaliknya). Saya juga membutuhkan kemampuan untuk membatasi bandwidth (jadi pipa unggahan 1 megabit kecil kami tidak kelebihan beban). Ada saran?

Oh, dan menggunakan dropbox agak keluar dari pertanyaan saat ini karena drive saya 500GB. Terima kasih!


Periksa port "rsync" yang merupakan alat Linux untuk hal itu. Itu dapat menyinkronkan file Anda di setiap kali; maka Anda hanya perlu cara untuk memicu ini setiap kali sg berubah.
dkellner

Apakah Anda ingin semua 500GB disinkronkan?
cubuspl42

5
Ini akan menjadi topik tentang Rekomendasi Perangkat Lunak. Lihat pertanyaan ini (tidak khusus untuk Mac): softwarerecs.stackexchange.com/questions/129/…
Nicolas Raoul

Apakah Anda memerlukan ini juga? "Jika saya menghapus file di salah satu mesin, itu juga harus dihapus dari mesin lain, bukannya dibuat ulang."
Patrick M

Jawaban:


30

Lihat Bittorrent Sync . Ini memiliki fungsi sinkronisasi seperti Dropbox, tetapi tanpa cloud.


Kelemahan: Kedua mesin harus online secara bersamaan untuk dapat melakukan sinkronisasi.
Gerald Schneider

18
@GeraldSchneider Apakah Anda tahu sesuatu yang tidak memiliki batasan ini?
Shelvacu

2
@shelvacu, tidak mungkin. Jika Anda ingin menyinkronkan tanpa memerlukan kedua mesin online, Anda memerlukan penyimpanan cloud (berlawanan dengan permintaan OP).
HalosGhost

5
Belum tentu penyimpanan cloud. Anda memerlukan satu simpul yang selalu online. Ini bisa berupa komputer, NAS, layanan cloud, instance OwnCloud yang di-host sendiri seperti yang diusulkan oleh Lawrence atau solusi serupa lainnya. Tetapi selama Anda tidak memiliki satu node selalu online, batasan ini selalu berlaku.
Gerald Schneider

3
Saya menggunakan BitTorrent Sync dan saya bisa sangat merekomendasikannya - Saya menggunakannya bersama dengan Dropbox untuk file yang terlalu besar dan tidak layak menghabiskan ruang di sana. Satu hal yang perlu dipertimbangkan adalah bahwa itu tidak menangani dengan baik pengeditan file secara simultan - tidak ada penanganan konflik seperti dengan Dropbox - file yang diedit terakhir hanya menang. Belum tentu masalah tetapi tergantung pada kebutuhan Anda.
zelanix

16

Jika Anda ingin menjadi hardcore, Anda dapat menggunakan perintah rsync secara native di OsX , seperti * nix staff.

Sebelum semuanya, Anda harus memiliki izin untuk mengakses host jarak jauh dengan ssh. Server OpenSSH sudah diinstal pada Mac OsX dan Anda tidak perlu menginstal paket tambahan apa pun. Hanya perlu melakukan beberapa pengaturan sistem. Untuk mengaktifkan server OpenSSH pada Mac OS X, buka System Preferences dan klik untuk Berbagi. Dan daripada itu, centang kotak Remote Login untuk mengaktifkan SSH, lalu pilih tombol radio berlabel Semua Pengguna dari bagian Perbolehkan Akses Untuk .

Anda sekarang dapat mengakses host jarak jauh dengan ssh.

Sekarang, Anda harus membuat kunci akses publik untuk akses tanpa kata sandi dari mesin tamu lokal ke host jarak jauh lewat ssh. Untuk itu Anda harus sedikit mengotori tangan Anda. :)

Pertama, tentukan apakah Anda sudah memiliki kunci otentikasi. Di Terminal , jalankan:

sudo ls -la /var/root/.ssh

Jika Anda melihat "id_dsa" dan id_dsa.pub , maka Anda dapat melewati bagian ini.

Di mesin klien, jalankan yang berikut di Terminal:

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

Setelah membuat kunci akses di mesin tamu lokal, Anda perlu menyalin kunci publik tamu ke file host_keys resmi. Anda dapat melakukan ini dengan perintah Terminal sederhana yang menambahkan kunci publik ke daftar kunci resmi:

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

Perintah di bawah ini yang akan melakukan pencadangan tambahan sistem file root Anda di mesin guest lokal ke host jarak jauh Anda:

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

Anda dapat mengubah parameter rsync untuk mengubah perilaku sinkronisasi. Jika Anda menambahkan perintah ini ke crontab , sinkronisasi dapat dijalankan dalam siklus waktu apa pun. Sebagai contoh:

sudo crontab -e

tambahkan baris di bawah ini ke 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

Ini akan menjalankan sinkronisasi dalam setiap setengah jam.

Berikut ini contoh skrip Python:

#!/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: sencerhamarat@gmail.com
"""

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()

Saya telah mempertimbangkan menggunakan rsync, namun masalahnya ada di sini: "Bagaimana jika rsync tidak sepenuhnya selesai setelah 30 menit?" Saya tidak ingin dua rsync terjadi secara bersamaan. Apakah ada cara untuk mengatasi ini?
muncherelli

1
@muncherelli: relatif tidak sulit untuk menulis mekanisme "penguncian" kecil di sekitar rsync untuk mencegah sinkronisasi secara bersamaan. Pada dasarnya, bungkus panggilan rsync dalam skrip bash dan Anda bebas melakukan apa pun yang Anda inginkan.
unperson325680

Saya menambahkan skrip sampel. Saya harap ini akan membantu.
Sencer H.

Ini naskah yang bagus. Terima kasih banyak atas bantuannya. Saya memutuskan untuk menggunakan BitTorrent Sync karena kesederhanaan dan pelambatan bandwidth. (Saya tahu Anda dapat mengatur penggunaan bandwidth max dengan rsync, tetapi BTS jauh lebih intuitif).
muncherelli

8

Owncloud adalah solusi yang memungkinkan jika Anda menginginkan akses berbasis web.

Anda akan memerlukan server Anda sendiri untuk meng-host Owncloud, namun ini lebih merupakan solusi berbasis server di mana 2 klien Anda dapat mengakses apa yang mereka butuhkan sesuka hati, tetapi hanya akan ada 1 salinan file yang bersangkutan, yang akan ditempatkan pada Server owncloud.


Apakah masih demikian halnya bahwa Anda hanya dapat terhubung ke satu komputer sendiri? Misalnya saya tidak dapat memiliki yang saya sendiri dan berbagi yang lain dengan saudara saya?
Thomas Weller

Setidaknya klien sinkronisasi desktop sekarang mendukung beberapa koneksi cloud secara bersamaan. Tetapi juga dalam satu server, Anda hanya dapat berbagi file / direktori tertentu, belum tentu semuanya.
ojdo


2

Jika Windows, ada alat SyncToy yang melakukannya dalam tiga langkah. jika Mac, itu adalah tentang ChronSync alat atau tri-backup alat


Hai Ruslan, dapatkah Anda mengedit jawaban Anda untuk menjelaskan mengapa ChronSync atau Tri-Backup akan menjadi solusi ideal untuk OP? Sekarang, itu adalah jawaban yang berkualitas sangat rendah, dan tidak benar-benar menjawab dengan cara dari pertanyaan. Terima kasih
Luke Kanada REINSTATE MONICA

Hai, terima kasih atas pertanyaan Anda. Yah saya tidak mengatakan program-program ini adalah solusi yang ideal, tetapi saya pikir itu cukup mudah karena mereka memiliki GUI, itu juga berarti siapa pun dapat melakukannya tanpa pemahaman mendalam tentang sekelompok perintah baris sihir-ejaan. Saya juga percaya jika seseorang memiliki masalah dalam menggunakan program yang terdaftar itu harus ditanyakan dalam pertanyaan terpisah, seperti apa yang dia lakukan, apa yang salah \ aneh. Ini bukan menyalin di sini dokumentasi untuk mereka tanpa ditanyai pertanyaan khusus.
Ruslan Gerasimov

2

Pertimbangkan Serempak. Ini menangani sinkronisasi file dua arah. Anda dapat mengaturnya pada jadwal dengan cronatau beberapa aplikasi penjadwalan lainnya.

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

Unison adalah alat sinkronisasi file untuk Unix dan Windows. Ini memungkinkan dua replika kumpulan file dan direktori untuk disimpan pada host yang berbeda (atau disk berbeda pada host yang sama), dimodifikasi secara terpisah, dan kemudian dimutakhirkan dengan menyebarkan perubahan dalam setiap replika ke replika yang lain.

Unison membagikan sejumlah fitur dengan alat-alat seperti paket manajemen konfigurasi (CVS, PRCS, Subversion, BitKeeper, dll.), Sistem file terdistribusi (Coda, dll.), Utilitas mirroring satu arah (rsync, dll.), Dan sinkronisasi lainnya (Intellisync, Rekonsiliasi, dll). Namun, ada beberapa poin yang membedakannya:


1
+1: Ketika sinkronisasi dua arah diperlukan, ini jelas menang atas rsync, sambil memiliki semua fitur kerennya.
ojdo

1

Saya sudah beruntung dengan GoodSync dengan dua PC di LAN yang sama, tapi saya yakin itu akan tetap bekerja dengan baik dalam situasi Anda.

Berikut adalah deskripsi produk mereka:

  • GoodSync menyinkronkan file antara komputer Anda, perangkat seluler, FTP, SFTP, Amazon S3, Google Drive, SkyDrive, WebDAV, Azure.
  • GoodSync mencadangkan file ke drive portabel, perangkat seluler dan ke FTP, S3, GDocs, SkyDrive, DAV atau komputer lain.
  • Direct P2P Sync: GoodSync Connect menyinkronkan file secara langsung antara komputer Anda, tanpa kelambatan yang diperkenalkan dengan menyinkronkan melalui server pihak ke-3.
  • GoodSync sangat cepat dan menyinkronkan file pada perintah Anda, secara berkala, dengan jadwal atau waktu nyata (saat perubahan file).

Anda hanya perlu mengatur GoodSync di salah satu PC Anda; ini menangani sinkronisasi dua arah dan jenis sinkronisasi yang dikustomisasi. Juga, sangat direkomendasikan oleh CNet.


Hai Jon, bisakah Anda mengedit jawaban Anda untuk menjelaskan mengapa GoodSync akan menjadi solusi ideal untuk OP? Sekarang, itu adalah jawaban yang berkualitas sangat rendah, dan tidak benar-benar menjawab dengan cara dari pertanyaan. Terima kasih
Luke Kanada REINSTATE MONICA

1

Solusi lain yang mungkin adalah AeroFS .

AeroFS secara dua arah menyinkronkan data antara perangkat Anda sementara hanya pernah menyimpan data Anda di perangkat Anda - data Anda tidak pernah mendekati server mereka. AeroFS menyimpan riwayat revisi untuk file Anda sehingga Anda dapat kembali ke versi sebelumnya bila perlu dan menyediakan alat untuk menyelesaikan konflik.

AeroFS bekerja pada Windows, Mac, Linux, iOS, dan Android, jadi Anda harus membahasnya.


0

Jadi, jika Anda tidak menentang penyimpanan awan pada prinsipnya, ada dua solusi perangkat keras untuk drive eksternal:

Space monyet menggunakan paradigma yang menarik .. itu mengalokasikan bagian dari disk Anda untuk menyimpan potongan-potongan kecil data orang lain, dan juga menyimpan data Anda pada banyak drive orang lain (dienkripsi, tentu saja). Dengan begitu, ada banyak redundansi jika terjadi bencana, dan mesin Anda tidak perlu dapat melihat satu sama lain atau bahkan terhubung pada saat yang sama.

Pengangkut file sedikit lebih sederhana, karena data hanya disinkronkan pada drive pengangkut file lain yang Anda atur khusus untuk disinkronkan.

Kedua opsi bagus untuk data dalam jumlah besar, dan Anda hanya membeli perangkat keras sekali tanpa biaya berlangganan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.