Tôi có một tệp lớn (2-3 GB, định dạng nhị phân, không có giấy tờ) mà tôi sử dụng trên hai máy tính khác nhau (thông thường tôi sử dụng nó trên hệ thống máy tính để bàn nhưng khi đi du lịch tôi đã đặt nó vào máy tính xách tay của mình). Tôi sử dụng rsync để chuyển tập tin này qua lại.
Thỉnh thoảng tôi thực hiện cập nhật nhỏ cho tệp này, thay đổi dưới 100 kB. Điều này xảy ra trên cả hai hệ thống.
Vấn đề với rsync theo tôi hiểu là nếu nó nghĩ rằng một tệp đã thay đổi giữa nguồn và đích thì nó sẽ chuyển tệp hoàn chỉnh. Trong tình huống của tôi, nó cảm thấy lãng phí thời gian khi chỉ một phần nhỏ của tệp có thay đổi. Tôi dự tính một giao thức trong đó các tác nhân chuyển giao trên nguồn và đích trước tiên kiểm tra toàn bộ tệp và sau đó so sánh kết quả. Khi họ nhận ra rằng tổng kiểm tra cho toàn bộ tệp là khác nhau, họ chia tệp thành hai phần, A và B và kiểm tra riêng chúng.
Aha, B giống hệt nhau trên cả hai máy, hãy bỏ qua một nửa. Bây giờ nó tách A thành A1 và A2. Ok, chỉ có A2 đã thay đổi. Tách A2 thành A2I và A2II và so sánh, v.v. Thực hiện điều này một cách đệ quy cho đến khi tìm thấy, ví dụ: ba phần mỗi phần 1 khác nhau giữa nguồn và đích và sau đó chuyển chỉ các phần này và chèn chúng vào đúng vị trí tại tệp đích. Ngày nay với SSD nhanh và CPU đa lõi như vậy song song nên rất hiệu quả.
Vì vậy, câu hỏi của tôi là, có công cụ nào hoạt động như thế này (hoặc theo cách khác mà tôi không thể tưởng tượng được nhưng với kết quả tương tự) có sẵn ngày hôm nay không?
Một yêu cầu làm rõ đã được đăng. Tôi chủ yếu sử dụng Mac nên hệ thống tập tin là HFS +. Thông thường tôi bắt đầu rsync như thế này
rsync -av --delete --progress --stats
- trong trường hợp này đôi khi tôi sử dụng SSH và đôi khi rsyncd. Khi tôi sử dụng rsyncd tôi bắt đầu như thế này rsync --daemon --verbose --no-detach
.
Làm rõ thứ hai: Tôi yêu cầu một công cụ chỉ chuyển delta cho một tệp tồn tại ở hai vị trí có thay đổi nhỏ và / hoặc nếu rsync thực sự cung cấp điều này. Kinh nghiệm của tôi với rsync là nó chuyển các tệp đầy đủ (nhưng bây giờ có một câu trả lời giải thích điều này: rsync cần một máy chủ rsync để có thể chuyển chỉ các deltas, nếu không (ví dụ: sử dụng ssh-shell), nó sẽ chuyển toàn bộ tập tin tuy nhiên đã thay đổi nhiều).
rsync -av --delete --progress --stats
. Đôi khi tôi sử dụng máy chủ rsync rsync --daemon --verbose --no-detach
. Nhưng kết quả luôn luôn như vậy.
rsync
là nó tìm thấy chỉ là phần mà đã thay đổi và chỉ họ gửi.
rsync
đã làm, vì vậy có thể đây là câu trả lời)