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


11

Tôi đang cố gắng thiết lập đồng bộ hai chiều hoặc hai chiều với rsync. Trong trường hợp của tôi, tôi chỉ cần xóa các tệp khi đồng bộ hóa từ B sang A. Vì vậy, tôi đã nghĩ đến việc chạy rsync hai lần như sau:

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

Vấn đề với giải pháp này là khi tôi chạy rsync (B-> A) sẽ đúng sau khi chạy rsync (AB), bất kỳ tệp mới nào được tạo ở giữa đồng bộ hóa cũng sẽ bị xóa.

Có cách nào để tôi có thể chỉ định dấu thời gian với điều kiện là nó chỉ xóa tệp nếu nó được tạo trước ngày / giờ này.

Cập nhật:

Tôi hiểu có một giải pháp unison nhưng vấn đề với unison là cần thiết để cài đặt trên cả hai đầu. Tôi đang đồng bộ hóa với một máy chủ từ xa và tôi không thể cài đặt unison ở đầu xa.


Có một câu hỏi rất giống với một số câu trả lời khác ở đây: stackoverflow.com/questions/2936627/two-way-sync-with-rsync
Thomas

Câu trả lời:


4

Bạn có thể thử osync được thiết kế cho chính xác nhiệm vụ này. Tôi đã từng thiết lập một chuỗi các lệnh rsync phức tạp để thực hiện công việc, nhưng bây giờ tôi sử dụng osync.

https://github.com/deajan/osync

Nó sử dụng rsync trong nội bộ, vì vậy nó phù hợp với mọi tình huống mà bạn có thể sử dụng rsync.


1
Cảm ơn, Mark. Tôi chỉ định trả lời câu hỏi của riêng tôi. Tôi đã tìm thấy tập lệnh rất giống nhau được gọi là bsync ( github.com/doobols/bsync ) về cơ bản, nó sử dụng diff để tìm ra những gì cần phải được đồng bộ hóa. Vì tôi không mong đợi bất kỳ xung đột nào trong đồng bộ hóa, tôi cũng sửa đổi tập lệnh này một chút để nó chạy âm thầm khi chạy với công việc định kỳ.
Raza

7

rsynclà công cụ sai cho nhiệm vụ này, vì chính xác những lý do mà bạn đã gặp phải. Thay vào đó, hãy cân nhắc sử dụng unison:

unison A/ B/

Lần đầu tiên bạn chạy nó, nó sẽ xác định các tệp duy nhất Avà các tệp duy nhất trong đó B. Nó cũng sẽ gắn cờ những cái ở cả hai nơi và yêu cầu bạn xác định cái nào sẽ được ghi đè.

Lần tới khi bạn chạy nó, nó sẽ sao chép các thay đổi từ Asang Bvà cũng Bsang A, gắn cờ bất kỳ tệp nào đã được thay đổi ở cả hai vị trí để giải quyết thủ công.

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

Có một số cờ hữu ích có sẵn để unisongiúp tự động hóa quy trình bằng cách xác định các giả định và do đó giảm số lượng câu hỏi bạn đã hỏi trong quá trình đồng bộ hóa.


3
Tôi đã thấy giải pháp unison nhưng vấn đề với điều đó là tôi bắt buộc phải cài đặt ở cả hai đầu. Tôi đang đồng bộ hóa với một điều khiển từ xa và tôi không thể cài đặt unison trên đầu xa.
Raza

1
Nó không giúp OP, nhưng tôi đang tìm kiếm sự đồng nhất . Tôi thấy có các gói Debian và nó hỗ trợ truyền tải ssh.
Ted

1
Có khả năng sử dụng unison mà không cần cài đặt nó trên máy chủ, xem các bình luận trong câu trả lời này stackoverflow.com/a/2936711 trỏ đến i3vi3v.wordpress.com/2013/01/09/ Kẻ
Thomas

-1

Những gì bạn thực sự cần là Rclone . Rclone là rsync cho lưu trữ đám mây (hộp, dropbox, nextcloud, ftp, v.v.) và lưu trữ cục bộ.


2
Làm thế nào họ sẽ cài đặt và sử dụng rclone để giải quyết vấn đề của họ?
Jeff Schaller

3
rclone chưa có đồng bộ hai chiều.
sean
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.