sinkronisasi dua arah dengan rsync


11

Saya mencoba mengatur sinkronisasi dua arah atau dua arah dengan rsync. Dalam kasus saya, saya hanya perlu menghapus file saat menyinkronkan dari B ke A. Jadi, saya berpikir untuk menjalankan rsync dua kali sebagai berikut:

rsync -rtuv ./A/ ./B/
rsync -rtuv --delete ./B/ ./A/

Masalah dengan solusi ini adalah ketika saya menjalankan rsync (B-> A) yang akan segera setelah menjalankan rsync (AB), setiap file baru yang dibuat di antara sinkronisasi juga akan dihapus.

Apakah ada cara saya dapat menentukan cap waktu sebagai syarat bahwa itu hanya menghapus file jika dibuat sebelum tanggal / waktu ini.

Diperbarui:

Saya mengerti ada solusi serempak tetapi masalah dengan serempak diperlukan untuk menginstal di kedua ujungnya. Saya menyinkronkan dengan server jarak jauh dan saya tidak dapat menginstal secara bersamaan di ujung jarak jauh.


Ada pertanyaan yang sangat mirip dengan beberapa jawaban di sini: stackoverflow.com/questions/2936627/two-way-sync-with-rsync
Thomas

Jawaban:


4

Anda dapat mencoba osync yang dirancang untuk tugas ini. Saya pernah mengatur urutan kompleks perintah rsync untuk melakukan pekerjaan itu, tetapi sekarang saya menggunakan osync.

https://github.com/deajan/osync

Ini menggunakan rsync secara internal, jadi itu harus cocok untuk situasi apa pun di mana Anda bisa menggunakan rsync.


1
Terima kasih, Mark. Saya baru saja akan menjawab pertanyaan saya sendiri. Saya menemukan skrip yang sangat mirip yang disebut bsync ( github.com/dooblem/bsync ) pada dasarnya ia menggunakan diff untuk mencari tahu apa yang perlu disinkronkan. Karena saya tidak mengharapkan konflik apa pun dalam sinkronisasi, saya juga sedikit memodifikasi skrip ini sehingga berjalan diam-diam saat dijalankan dengan tugas cron.
Raza

7

rsyncadalah alat yang salah untuk tugas ini, untuk alasan persis yang Anda temui. Sebagai gantinya, pertimbangkan untuk menggunakan unison:

unison A/ B/

Pertama kali Anda menjalankan ini, ia akan mengidentifikasi file yang unik A, dan yang unik B. Itu juga akan menandai yang ada di kedua tempat dan meminta Anda untuk mengidentifikasi mana yang akan ditimpa.

Lain kali Anda menjalankan ini, ia akan menyalin perubahan dari Ake Bdan juga Bke A, menandai semua file yang telah diubah di kedua tempat untuk resolusi manual.

mkdir A B
date > A/date
who > B/who
unison A/ B/
# Lots of output from unison, showing synchronisation

ls A
date    who
ls B
date    who

date > A/date
unison A/ B/
# Lots of output from unison, showing synchronisation

Ada sejumlah flag berguna yang tersedia unisonyang membantu mengotomatiskan proses dengan mendefinisikan asumsi dan dengan demikian mengurangi jumlah pertanyaan yang Anda tanyakan selama sinkronisasi.


3
Saya melihat solusi serempak tetapi masalah dengan itu adalah saya harus menginstal di kedua ujungnya. Saya menyinkronkan dengan remote dan saya tidak bisa menginstal secara bersamaan di ujung remote.
Raza

1
Itu tidak membantu OP, tapi saya mencari serempak . Saya melihat ada paket Debian dan mendukung transportasi ssh.
Ted

1
Ada kemungkinan menggunakan serempak tanpa memasangnya di server, lihat komentar di jawaban ini stackoverflow.com/a/2936711 yang menunjuk ke i3vi3v.wordpress.com/2013/01/09/…
Thomas

-1

Yang benar-benar Anda butuhkan adalah Rclone . Rclone adalah rsync untuk penyimpanan cloud (kotak, dropbox, nextcloud, ftp dll) dan penyimpanan lokal.


2
Bagaimana mereka menginstal dan menggunakan rclone untuk menyelesaikan masalah mereka?
Jeff Schaller

3
rclone belum memiliki sinkronisasi dua arah.
sean
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.