Tại sao rsync không sử dụng chuyển delta cho các tệp cục bộ?


23

Tôi có một hình ảnh iso lớn hiện đang được tải xuống bởi một khách hàng torrent khi bật chức năng đặt chỗ: có nghĩa là, kích thước tệp không thay đổi trong khi một số khối trong (4 Mib) liên tục thay đổi do tải xuống.

Khi tải xuống 90%, tôi thực hiện rsync ban đầu để tiết kiệm thời gian sau:

$ rsync -Ph DVD.iso /media/another-hdd/
sending incremental file list

DVD.iso
       2.60G 100%   40.23MB/s    0:01:01 (xfer#1, to-check=0/1)

sent 2.60G  bytes  received 73 bytes  34.59M bytes/sec
total size is 2.60G   speedup is 1.00

Sau đó, khi tệp được tải xuống đầy đủ, tôi rsync lại:

total size is 2.60G   speedup is 1.00

Speedup = 1 cho biết chuyển delta không được sử dụng, mặc dù 90% tệp không thay đổi, thư mục tiêu nằm trên một FS khác và việc sao chép mất vài phút. Tại sao nó không cố gắng tăng tốc chuyển tiền?! Làm thế nào tôi có thể ép buộc rsync sử dụng delta-transfer?


6
Những gì bạn đang làm không có ý nghĩa gì. Mục đích của rsync là tăng tốc độ truyền tệp qua mạng chứ không phải cục bộ. Để tìm ra sự khác biệt, nó phải đọc cả nguồn và đích. Trong thời gian cần thiết để đọc điểm đến cục bộ để tìm sự khác biệt, bạn cũng có thể chỉ cần làm một bản sao bình thường. Chỉ cần tải tệp đến đích ở vị trí đầu tiên thay vì sao chép nó.
psusi

1
Vì vậy, nó chỉ không sử dụng delta-xfer bởi vì, làm việc cục bộ, sao chép nhanh hơn so với tính toán băm? Nếu có - đăng câu trả lời plz :)
kolypto

9
Đọc có thể nhanh hơn ghi vào đĩa cục bộ trong một số trường hợp nhất định. Nó cũng có thể làm giảm sự hao mòn trên ổ SSD. Đây chắc chắn là một câu hỏi hợp lệ và câu trả lời là khá có giá trị với tôi.
HRJ

2
@psusi ngoài nhận xét của HRJ ở trên, cũng xem xét trường hợp khi tệp mục tiêu đã bị phản xạ (ví dụ: trên btrfs hoặc ocfs2). Giảm thiểu việc ghi trong quá trình đồng bộ hóa có thể tạo ra sự khác biệt lớn đối với việc sử dụng không gian tổng thể.
Jack Douglas

Câu trả lời:


19

Theo trang , psusi đã đúng:

-W, - tập tin :   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.


10
Ồ, cảm ơn bạn! Tôi đã bỏ lỡ dòng này :) Để bật delta-transfer, hãy sử dụng -no-W
kolypto

1
Trên hệ thống của tôi -no-W không chỉ hoạt động tùy chọn dài -no-whole-file. Lý do tôi cần chuyển đổi này là khi tôi thiết lập bản sao lưu và có các tệp lớn (ví dụ: hình ảnh) không có cùng thời gian sửa đổi. Nó nhanh hơn NHIỀU, tăng tốc là 163,26, để đồng bộ hóa các tệp này bằng cách sử dụng chuyển delta trên hệ thống tệp cục bộ của tôi.
Jesse the Wind Wanderer

6
@JessetheWindWanderer, tùy chọn dài là --no-whole-file (xin vui lòng, lưu ý gấp đôi -- lúc bắt đầu).
Eddie C.

Cảm ơn Eddie C. Tôi sẽ chỉnh sửa nhận xét của mình nếu tôi có thể tìm ra cách của chúng tôi :-(
Jesse the Wind Wanderer

17

Câu trả lời thẳng cho câu hỏi này là:

Sử dụng --no-W cờ để nén delta, không có vấn đề địa phương hoặc từ xa.

Cập nhật: Có vẻ như có nhiều câu chuyện hơn. Các delta compression dường như chỉ được kích hoạt giữa quá trình nhận và truyền rsync. Khi xuất tệp vào hệ thống tệp, rsync vẫn có thể ghi ra toàn bộ (các) tệp, ngay cả khi đã nén delta.

Xem cuộc điều tra "Wakan Tanka" đây .


2
--no-W luôn luôn chuyển toàn bộ tập tin trong trường hợp của tôi. Hãy kiểm tra unix.stackexchange.com/questions/291156/
Wakan Tanka

@WakanTanka Thật thú vị! Tôi đã cập nhật câu trả lời của tôi.
HRJ

2

Theo mặc định, trước tiên, rsync tạo một bản sao mới của tệp đích và sau đó thay thế nó, vì nhiều lý do an toàn. Bạn có thể ghi đè lên điều này bằng cách chỉ định --inplace cùng với --no-whole-file. Điều này yêu cầu rsync thực hiện chỉnh sửa tại chỗ tệp mục tiêu, chấp nhận các rủi ro khác nhau (thường là nhỏ đối với tình huống này) như được ghi trong trang hướng dẫn.

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.