2010-09-22 27 views
13

Tôi đang cố gắng tìm hiểu xem liệu các tập tin rsyncing có phải là nguyên tử hay không. Tôi không thể tìm thấy bất kỳ xác nhận nào về nó. Do rsync chỉ có thể gửi các vùng đồng bằng, tôi đã có ấn tượng rằng nó cũng chỉ cập nhật các phần của tệp trực tiếp. Mặt khác, DJB khuyến nghị rsync để đồng bộ hóa các tệp .cdb trực tiếp và tôi đã tìm thấy bài đăng này (http://lists.samba.org/archive/rsync/2002-April/002210.html) mà cả hai sẽ ngụ ý rằng tệp mới được tạo, sau đó chuyển sang vị trí thích hợp.Các hoạt động rsync có nguyên tử ở cấp tệp không?

Ai đó có thể chỉ cho tôi một nguồn chính thức xác nhận một hoặc một nguồn khác không?

Trả lời

0

Có một kịch bản perl đó là nghĩa vụ để thêm chức năng này: http://www.opensource.apple.com/source/rsync/rsync-40/rsync/support/atomic-rsync

Vấn đề là tôi đã cố gắng để kiểm tra nó và nó không hoạt động. Ngoài ra có một cái gì đó strage vì từ URL nó trông giống như là một cái gì đó liên quan đến rsync 4.0 và phiên bản hiện tại của rsync là 2.6.9!

11

Rsync tạo một tệp tạm thời mới sẽ chứa các khối từ bản sao cục bộ (nhận) và bất kỳ khối nào nó yêu cầu từ bản sao gửi. Khi hoàn tất, tệp tạm thời được chuyển vào vị trí thay thế tệp gốc.

Chi tiết đầy đủ có tại đây;

http://rsync.samba.org/how-rsync-works.html

+0

Bạn không trả lời câu hỏi thực tế. - Điều này có nghĩa là việc cập nhật từng tệp riêng lẻ là nguyên tử? – zrajm

+0

Có nếu bạn xem xét thao tác di chuyển tệp trong cùng thư mục là nguyên tử. –

+1

"Hãy cân nhắc"? Nguyên tử và phi nguyên tử phải là vấn đề của thực tế, không phải là ý kiến, tôi nghĩ vậy? :) Bạn có nghĩa là để nói rằng có những trường hợp đổi tên của một tập tin trong một thư mục (trên một đĩa địa phương) là * không * nguyên tử? Nếu vậy, khi nào điều đó xảy ra? – zrajm

1

Không, rsync không ghi file nguyên tử.

Trong khi truyền, tệp tạm thời ẩn được tạo trong cùng một thư mục đích (.[original-filename].[6-random-characters]) chứa tệp được chuyển ở trạng thái hiện tại.

Nếu quý vị nên xảy ra mất kết nối trong quá trình chuyển hoặc rsync gặp bất kỳ vấn đề khác, làm cho kết nối được đóng lại, trước khi tiêu diệt quá trình rsync hãy chắc chắn để sao chép các tập tin tạm thời để giữ tất cả các gói đã chuyển . Bạn có thể chỉ cần đổi tên tệp tạm thời (loại bỏ hàng đầu "." Và dấu ".xxxxxx" để lấy tên tệp gốc).

Các vấn đề liên quan