Rsync có thể cập nhật một tệp lớn chỉ thay đổi một phần mà không truyền lại đầy đủ không?


15

Tôi đang thực hiện một thay đổi nhỏ đối với tệp hình ảnh tệp rất lớn (chỉ chênh lệch một vài pixel), mất nhiều thời gian để truyền qua mạng.

Có cách nào để rsync xác định sự khác biệt trong tệp và chỉ gửi khác biệt nhỏ qua mạng không?


3
Khi sao chép qua mạng, rsyncmặc định theo cách này. Miễn là thay đổi nhỏ là một thay đổi nhỏ đối với tệp và tệp đã tồn tại ở cả hai phía của liên kết trong các phiên bản gần giống nhau, dữ liệu được truyền phải nhỏ hơn nhiều so với tổng kích thước tệp. Từ đoạn đầu tiên trong trang man: "Nó nổi tiếng với thuật toán chuyển delta, giúp giảm lượng dữ liệu được gửi qua mạng bằng cách chỉ gửi sự khác biệt giữa các tệp nguồn và các tệp hiện có ở đích."
user4556274

Ah, ok, bạn nên đăng nó như một câu trả lời chứ không phải là một bình luận. Rõ ràng là rsync đã hành xử theo cách này, nhưng với kỳ vọng đó, tôi sẽ cho rằng tệp của tôi thay đổi nhiều hơn tôi mong đợi và xem xét lý do tại sao. Quá trình nén hình ảnh có thể thay đổi giá trị byte thô trong toàn bộ tệp.
David park

Câu trả lời:


11

rsyncthuật toán chuyển delta thực hiện điều này theo mặc định. Trích dẫn trang web rsync :

SỰ MIÊU TẢ

Rsync là một công cụ sao chép tập tin nhanh và cực kỳ linh hoạt. Nó có thể sao chép cục bộ, đến / từ một máy chủ khác trên bất kỳ shell từ xa nào hoặc đến / từ một daemon rsync từ xa. Nó cung cấp một số lượng lớn các tùy chọn kiểm soát mọi khía cạnh của hành vi của nó và cho phép đặc tả rất linh hoạt của tập hợp các tệp được sao chép. Nó nổi tiếng với thuật toán chuyển delta, giúp giảm lượng dữ liệu được gửi qua mạng bằng cách chỉ gửi sự khác biệt giữa các tệp nguồn và các tệp hiện có ở đích . Rsync được sử dụng rộng rãi để sao lưu và phản chiếu và như một lệnh sao chép được cải tiến để sử dụng hàng ngày.

Nếu bạn muốn tắt nó, bạn sẽ phải sử dụng tùy chọn -Whoặc --whole-file.

-W, - tập tin

Tùy chọn này vô hiệu hóa thuật toán chuyển delta của rsync, khiến cho tất cả các tệp được truyền được gửi toàn bộ. Việc truyền có thể nhanh hơn nếu tùy chọn này được sử dụng khi băng thông giữa máy nguồn và máy đích cao hơn băng thông vào đĩa (đặc biệt khi "đĩa" thực sự là một hệ thống tệp được nối mạng). Đây là mặc định khi cả nguồn và đích được chỉ định là đường dẫn cục bộ, nhưng chỉ khi không có tùy chọn ghi hàng loạt có hiệu lực.

Nếu bạn thực sự biết tập tin của bạn đã thay đổi bao nhiêu, bạn thậm chí có thể tối ưu hóa hành vi chuyển delta này bằng cách điều chỉnh kích thước khối delta của bạn:

-B, --block-size = BLOCKSIZE

Điều này buộc kích thước khối được sử dụng trong thuật toán chuyển delta của rsync thành một giá trị cố định. Nó thường được chọn dựa trên kích thước của mỗi tệp được cập nhật. Xem báo cáo kỹ thuật để biết chi tiết.

Và nếu bạn muốn biết thêm thông tin về chính thuật toán, bạn có thể tìm thấy nó ở đây: Thuật toán Rsync


Công bằng mà nói, dạng "tệp" số nhiều trong trang này không rõ ràng: "bằng cách chỉ gửi sự khác biệt giữa các tệp nguồn và các tệp hiện có ..." Tôi lấy "tệp" có nghĩa là một tập hợp các tệp riêng lẻ và đó là rsync sẽ gửi (toàn bộ) các tệp khác nhau. Điều này cần được làm rõ.
Nga
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.