Đồng bộ hóa xử lý di chuyển hợp lý


10

Tôi đã sử dụng thành công rsync để đồng bộ hóa các thư mục nhà giữa máy tính xách tay và netbook của tôi (cả hai đều sử dụng ext4 với Linux). Vấn đề duy nhất của tôi với nó là thỉnh thoảng tôi muốn tổ chức lại hoàn toàn một số thư mục nhất định và rsync coi đây là việc xóa và tạo các tệp mới, khiến nó rất chậm và không hiệu quả.

Có ai biết một phần mềm tốt xử lý tập tin di chuyển tốt không?

Tôi đã thấy rằng unison sẽ có khả năng này, nhưng nó dường như không hoạt động trong thực tế. Tôi đã kiểm tra unison bằng cách đồng bộ hóa hai thư mục cục bộ, mỗi thư mục chứa một tệp lớn và nó vẫn phát hiện ra động thái của tôi dưới dạng xóa + tạo và có hiệu lực thậm chí còn chậm hơn rsync .

Hơn nữa, nếu tôi nhớ chính xác từ việc tôi nhìn vào mã nguồn của unison vài tháng trước, nó đã cố gắng làm một việc gì đó như làm sha sums, và tôi không muốn giải pháp lý tưởng của mình để thực hiện một số tiền quá chậm tập tin / thư mục. Tôi muốn một cái gì đó thông báo những thứ như:

"Bản sao nguồn cuối cùng của tệp này dường như đã bị xóa và có một tệp mới ở nơi khác trong cây thư mục nguồn có cùng mdate, kích thước và số inode, vì vậy tôi sẽ giả sử rằng đây là một động thái và di chuyển đối tác mục tiêu của nó phù hợp thay vì thực hiện xóa + sao chép. "

Điều quan trọng với tôi là tôi có thể đồng bộ hóa các máy này một cách nhanh chóng.

Bất kỳ đề xuất?

Câu trả lời:


6

Bạn nên có một cái nhìn tại rdiff-sao lưursyncbên dưới, nhưng với trí thông minh bổ sung mà bạn yêu cầu (và nó làm backup có khả năng lăn trở lại, nhưng bạn có thể cấu hình để tắt đó).

Bản phát hành mới nhất đã cũ (2009), nhưng đó là dấu hiệu của sự ổn định.


2
Có ai đã thử chưa?
sương mù

3

Unison làm những gì bạn muốn, nhưng chỉ để đồng bộ hóa từ xa. Hãy thử sử dụng ssh://localhost/path/to/dirnhư một trong những rễ.

Unison không dựa trên quyết định của mình về nội dung tệp, nó không theo dõi các số inode.


1

Bạn có thể xử lý các tệp được di chuyển và đổi tên bằng rsync nếu các hệ thống tệp trên thư mục nguồn và đích có hỗ trợ cho các liên kết cứng. Ý tưởng là để cho rsync xây dựng lại các liên kết cứng trước khi chuyển giao thực sự. Bạn có thể tìm thấy một lời giải thích tốt ở đây

Chúng tôi đã kết thúc với một giải pháp đơn giản tạo ra một cây ẩn các liên kết cứng bên trong thư mục nguồn / đích, tập lệnh cơ bản có thể như sau:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

Tôi có một kịch bản ví dụ trên GitHub . Nhưng tôi khuyên bạn nên thực hiện một số lượng lớn thử nghiệm trước khi sử dụng phương pháp này vào sản xuất.


0

Nếu bạn muốn đồng bộ hóa các tệp giữa nhiều máy, thì bạn có thể chỉ muốn sử dụng hệ thống kiểm soát phiên bản tập trung như Subversion (hoặc FSVS, sử dụng SVN làm phụ trợ). Phần thú vị là mọi thứ trong / nhà của bạn (mà bạn thêm vào kiểm soát phiên bản) sau đó được phiên bản và có thể dễ dàng đồng bộ hóa với các máy khác hoặc quay ngược lại.


0

lsyncd cũng xử lý các tệp đã di chuyển với hành vi rsync + ssh, mặc dù có chút lỗi (tôi nhận được khoảng 15% di chuyển được xử lý như xóa / sao chép, nhưng vẫn chưa hiểu tại sao). Hầu hết thời gian nó làm việc.

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.