Đồng bộ hai chiều với rsync


95

Tôi có một thư mục a / và một thư mục từ xa A /. Bây giờ tôi chạy một cái gì đó như thế này trên Makefile:

get-music:
 rsync -avzru server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

khi tôi tạo nhạc đồng bộ, trước tiên nó nhận tất cả các khác biệt từ máy chủ đến cục bộ và sau đó ngược lại, gửi tất cả các khác biệt từ cục bộ đến máy chủ.

Điều này hoạt động rất tốt nếu chỉ có bản cập nhật hoặc tệp mới trong tương lai. Nếu có xóa, nó không làm bất cứ điều gì.

Trong rsync có các tùy chọn --delete và --delete-after để giúp thực hiện những gì tôi muốn nhưng điều là, nó không hoạt động trên đồng bộ hóa 2 chiều.

Nếu tôi muốn xóa các tệp máy chủ trên hệ thống, khi các tệp cục bộ đã bị xóa, nó sẽ hoạt động, nhưng nếu, vì một số lý do (giải thích sau), tôi có một số tệp không có trong máy chủ nhưng tồn tại cục bộ và chúng đã bị xóa, Tôi muốn xóa cục bộ chúng và không sao chép máy chủ (như nó xảy ra).

Có điều là tôi có 3 máy trong ngữ cảnh:

  1. máy tính để bàn
  2. sổ tay
  3. máy chủ gia đình

Vì vậy, đôi khi, máy chủ sẽ có các tệp đã bị xóa bằng đồng bộ hóa sổ ghi chép, chẳng hạn như sau đó, khi tôi chạy đồng bộ hóa với máy tính để bàn của mình (nơi các tệp máy chủ đã xóa vẫn tồn tại), tôi muốn các tệp này bị xóa và không bị được sao chép lại vào máy chủ.

Tôi đoán điều này chỉ có thể thực hiện được với cơ sở dữ liệu và theo dõi các hoạt động: P

Bất kỳ giải pháp đơn giản hơn? Cảm ơn bạn.


1
Tôi có cùng vấn đề này. Bạn đã tìm ra giải pháp chưa, mwm?
mouche

7
tôi thực sự đã làm bây giờ. tôi đã cố gắng đạt được trải nghiệm như một dropbox và đã đưa ra một giải pháp liên quan đến sự đồng bộ (sử dụng rsync) và lsyncd để theo dõi các thay đổi của tệp. tôi cũng tìm thấy những người khác với giải pháp này và nhiều hơn nữa thủ đoạn trên đầu trang » cerebralmastication.com/2011/04/fast-two-way-sync-in-ubuntu
MWM

ngày nay tôi đang sử dụng nextcloud cục bộ trên máy chủ gia đình của mình. hoàn hảo "dropbox" sollution do tôi quản lý 100%. có ứng dụng khách android / ios / win / macos / linux / web.
mwm 13/03/18

Câu trả lời:


63

Dùng thử Unison: http://www.cis.upenn.edu/~bcpierce/unison/

Cú pháp: unison dirA/ dirB/

Unison hỏi phải làm gì khi các tệp khác nhau, nhưng bạn có thể tự động hóa quá trình bằng cách sử dụng tùy chọn sau chấp nhận các tùy chọn mặc định (không xung đột):

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/ hoàn toàn không đặt câu hỏi và ghi để xuất ra bao nhiêu tệp đã bị bỏ qua (vì chúng xung đột).


7
Unison khá dễ sử dụng cho các thư mục nhỏ. Nhưng nó rất CHẬM đối với các thư mục có số lượng tệp lớn. Trong đó rsync sẽ bắt đầu sao chép gần như ngay lập tức, đồng thời, đôi khi mất hơn 12 giờ để bắt đầu sao chép, vì nó quét mọi tệp trước khi sao chép bất kỳ thứ gì.
Brent Faust

1
Nó rất tốt ở điều này? Ít nhất git cũng dễ sử dụng và vận chuyển nhanh chóng. Đối với blob có một phần mở rộng được phát triển bởi github có tên là Large File Storage .
wener

1
Các vấn đề chính của git là các tệp lớn và nó thực sự được thiết kế cho các cam kết rõ ràng. Cả hai đều có thể được cải thiện một cách hợp lý nhờ các tiện ích bổ sung như git-annex, lưu trữ tệp lớn, v.v.
alex

3
@wener Không dùng búa để vặn vít hoặc tuốc nơ vít để đóng đinh. :)
ADTC

2
sự đồng tâm là tuyệt vời - nhưng cũng rất không đáng tin cậy. Trong khoảng 50% trường hợp sử dụng của tôi, nó đơn giản đã không hoạt động. Nguyên nhân phổ biến nhất của điều này là khả năng liên phiên bản kém. Đôi khi tôi đồng bộ hóa với nội dung trên máy tính mà tôi không có đặc quyền. Nếu máy chủ đó có phiên bản khác với phiên bản tôi làm, thì không thành công. Ngoài ra, gần đây tôi đã gặp lỗi giữa các máy khách đồng nhất của cùng một phiên bản, vì họ đang sử dụng các phiên bản đã biên dịch khác nhau của một số thư viện (đây là giữa máy tính ubuntu và raspberry pi).
argentum2f


5

Bạn có thể sử dụng Osync: http://www.netpower.fr/osync , là rsync dựa trên việc truyền xóa thông minh. nó cũng có nhiều tùy chọn như tiếp tục thực thi bị tạm dừng, xóa mềm và kiểm soát thời gian.


5

Vì câu hỏi ban đầu cũng liên quan đến máy tính để bàn và máy tính xách tay và ví dụ liên quan đến các tệp nhạc (do đó có thể anh ấy đang sử dụng GUI), tôi cũng muốn đề cập đến một trong những chương trình nguồn mở, đa nền tảng, miễn phí và hai chiều tốt nhất cho đến nay: FreeFileSync .

Nó dựa trên GUI, rất nhanh và trực quan, đi kèm với bộ lọc và nhiều tùy chọn khác, bao gồm khả năng kết nối từ xa, để xem và quản lý tương tác "va chạm" (ví dụ: các tệp có dấu thời gian tương tự) và chuyển đổi giữa truyền hai chiều, phản chiếu và Sớm.


4

Thử cái này,

get-music:
 rsync -avzru --delete-excluded server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru --delete-excluded /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

Tôi chỉ kiểm tra điều này và nó đã làm việc cho tôi. Tôi đang thực hiện đồng bộ hóa 2 chiều giữa Windows7 (sử dụng cygwin với gói rsync được cài đặt) và máy chủ tệp FreeNAS (FreeNAS chạy trên FreeBSD với gói rsync được cài đặt sẵn).


3
Điều này sẽ không xóa các tệp cục bộ mới? -ubỏ qua các tệp mới hơn trên đích, nhưng rsync không có cách theo dõi tuổi xóa, vì vậy, làm cách nào tập lệnh này có thể phân biệt khi nào tệp cục bộ là mới (và nên được giữ lại) hay cũ (và nên bị xóa) ? Hay tôi đang hiểu lầm?
Matthemattics

--delete-excludedxóa bất kỳ tệp nào tồn tại trên thư mục đích nhưng không phải là thư mục nguồn không? Tôi nghĩ bạn phải xác định --exclude=<filename>để không rsync chỉ xóa những loại trừ này? Hay rsync coi tất cả các tệp thư mục không phải nguồn là "loại trừ"?
Mr_Money Bags

2
Đã tìm thấy câu trả lời: Ngoài việc xóa các tệp ở phía nhận mà không phải ở phía gửi, điều này yêu cầu rsync cũng xóa bất kỳ tệp nào ở phía nhận bị loại trừ (xem --exclude) rsync.samba.org/ftp /rsync/rsync.html
Mr_Money Bags

2
Theo những gì tôi hiểu, nếu tôi tạo một tệp trên đích và sau đó thực hiện lệnh rsync để sao chép từ nguồn đến đích, nó sẽ xóa tệp tại đích, vì không có dấu thời gian nào được sử dụng. Đây không phải là những gì bạn muốn phải không?
elexhobby

10
@ Lübnah: Đúng; giải pháp này không phải là đồng bộ hóa 2 chiều đầy đủ : Bởi vì rsync with --delete-excludedđược chạy với máy chủ làm nguồn trước: các tệp được thêm cục bộ sẽ bị xóa trong quá trình chạy đó (trong khi các tệp được thêm vào máy chủ được sao chép vào đích cục bộ). Các tệp cục bộ duy nhất được đồng bộ hóa trở lại máy chủ là các tệp cũng tồn tại trên máy chủ và đã được sửa đổi cục bộ (gần đây hơn các phiên bản máy chủ) - điều này không có khả năng xảy ra trong trường hợp của OP. Như bạn đã gợi ý, không thể thực hiện đồng bộ hóa 2 chiều thực sự của methinks rsync, vì yêu cầu lưu trạng thái giữa các lần chạy.
mklement0


1

Tôi hiện đang sử dụng SparkleShare https://www.sparkleshare.org/

hoạt động trên mac, linux và windows.


thời gian trôi qua, tôi tiếp tục cập nhật giải pháp của mình. Tôi hiện đang sử dụng nextcloud trên máy chủ gia đình của mình. đồng bộ hóa với ứng dụng nextcloud trên linux, mac, windows, android và ios.
mwm

0

Tôi không chắc liệu nó có hoạt động với hai đồng bộ hay không nhưng để --delete hoạt động, bạn cũng cần phải thêm tham số --recursive.


1
Tương đương ngắn của tùy chọn --recurse-rOP đang sử dụng (được nhúng trong nhóm tùy chọn nén -avzru).
mklement0

0

Bạn có thể sử dụng cloudync để đồng bộ thư mục với điều khiển từ xa:

pip install cloudsync
pip install cloudsync-gdrive
cloudsync sync file:c:/users/me/documents gdrive:/mydocs

Nếu điều khiển từ xa là NFS, bạn có thể sử dụng:

cloudsync sync file:c:/users/me/documents/ file:/mnt/nfs/whatevs

-1

Rclone là thứ bạn đang tìm kiếm. Rclone ("rsync để lưu trữ đám mây") là một chương trình dòng lệnh để đồng bộ hóa các tệp và thư mục đến và từ các nhà cung cấp dịch vụ lưu trữ đám mây khác nhau bao gồm các hệ thống tệp cục bộ. Rclone trước đây được gọi là Swiftsync và đã có mặt từ năm 2013.


Nó không hỗ trợ đồng bộ hóa hai chiều: rclone.org/commands/rclone_sync
Martin Braun
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.