Trước hết, liên quan đến phần "tiếp tục" trong câu hỏi của bạn, --partialchỉ cần nói với đầu nhận sẽ giữ các tệp được chuyển một phần nếu kết thúc gửi biến mất như thể chúng đã được chuyển hoàn toàn.
Trong khi truyền tệp, chúng được lưu tạm thời dưới dạng tệp ẩn trong các thư mục đích của chúng (ví dụ .TheFileYouAreSending.lRWzDC) hoặc thư mục được chọn cụ thể nếu bạn đặt công --partial-dirtắc. Khi chuyển không thành công và --partialkhông được đặt, tệp ẩn này sẽ vẫn còn trong thư mục đích dưới tên khó hiểu này, nhưng nếu --partialđược đặt, tệp sẽ được đổi tên thành tên tệp đích thực tế (trong trường hợp này TheFileYouAreSending), mặc dù tệp chưa hoàn thành Vấn đề là sau này bạn có thể hoàn thành việc chuyển bằng cách chạy lại rsync bằng --appendhoặc --append-verify.
Vì vậy, bản thân nó--partial không tiếp tục chuyển khoản thất bại hoặc bị hủy. Để tiếp tục, bạn sẽ phải sử dụng một trong những lá cờ nói trên trong lần chạy tiếp theo. Vì vậy, nếu bạn cần đảm bảo rằng mục tiêu sẽ không bao giờ chứa các tệp có vẻ ổn nhưng thực sự không đầy đủ, bạn không nên sử dụng . Ngược lại, nếu bạn muốn đảm bảo rằng bạn không bao giờ bỏ lại các tệp bị lỗi bị ẩn trong thư mục đích và bạn biết rằng bạn sẽ có thể hoàn tất việc chuyển tiền sau đó, có mặt để giúp bạn.--partial--partial
Liên quan đến công --appendtắc được đề cập ở trên, đây là công tắc "tiếp tục" thực tế và bạn có thể sử dụng nó cho dù bạn có đang sử dụng hay không --partial. Trên thực tế, khi bạn đang sử dụng --append, không có tệp tạm thời nào được tạo. Các tập tin được viết trực tiếp đến mục tiêu của họ. Về mặt này, --appendcho kết quả tương tự như khi --partialchuyển khoản không thành công, nhưng không tạo ra các tệp tạm thời bị ẩn đó.
Vì vậy, để tổng hợp, nếu bạn đang di chuyển các tệp lớn và bạn muốn tùy chọn tiếp tục hoạt động rsync bị hủy hoặc thất bại từ điểm chính xác rsyncđã dừng, bạn cần sử dụng --appendhoặc --append-verifybật lần thử tiếp theo.
Như @Alex chỉ ra bên dưới, vì phiên bản 3.0.0 rsynchiện có một tùy chọn mới --append-verify, hoạt động giống như --appendtrước khi công tắc đó tồn tại. Bạn có thể luôn muốn hành vi của --append-verify, vì vậy hãy kiểm tra phiên bản của bạn với rsync --version. Nếu bạn đang sử dụng máy Mac và không sử dụng rsynctừ homebrew, bạn sẽ (ít nhất là và bao gồm cả El Capitan) có phiên bản cũ hơn và cần sử dụng --appendhơn là --append-verify. Tại sao họ không tiếp tục hành vi --appendvà thay vào đó đặt tên cho người mới đến --append-no-verifylà một chút khó hiểu. Dù bằng cách nào, --appendtrên rsynctrước khi phiên bản 3 cũng giống như --append-verifytrên các phiên bản mới hơn.
--append-verifykhông nguy hiểm: Nó sẽ luôn đọc và so sánh dữ liệu ở cả hai đầu và không chỉ cho rằng chúng bằng nhau. Nó thực hiện việc này bằng cách sử dụng tổng kiểm tra, vì vậy nó dễ dàng trên mạng, nhưng nó yêu cầu đọc lượng dữ liệu được chia sẻ ở cả hai đầu của dây trước khi nó thực sự có thể tiếp tục chuyển bằng cách nối thêm vào mục tiêu.
Thứ hai, bạn nói rằng bạn "nghe nói rằng rsync có thể tìm thấy sự khác biệt giữa nguồn và đích, và do đó chỉ cần sao chép sự khác biệt."
Điều đó đúng, và nó được gọi là chuyển delta, nhưng đó là một điều khác. Để kích hoạt tính năng này, bạn thêm -choặc --checksumchuyển đổi. Khi công tắc này được sử dụng, rsync sẽ kiểm tra các tệp tồn tại ở cả hai đầu của dây. Nó thực hiện điều này trong các khối, so sánh tổng kiểm tra ở cả hai đầu và nếu chúng khác nhau, nó chỉ chuyển các phần khác nhau của tệp. Nhưng, như @Jonathan chỉ ra bên dưới, việc so sánh chỉ được thực hiện khi các tệp có cùng kích thước ở cả hai đầu - các kích thước khác nhau sẽ khiến rsync tải lên toàn bộ tệp, ghi đè lên mục tiêu có cùng tên.
Điều này đòi hỏi một chút tính toán ở cả hai đầu ban đầu, nhưng có thể cực kỳ hiệu quả trong việc giảm tải mạng nếu ví dụ bạn thường xuyên sao lưu các tệp có kích thước cố định rất lớn thường chứa các thay đổi nhỏ. Ví dụ xuất hiện trong tâm trí là các tệp hình ảnh ổ cứng ảo được sử dụng trong các máy ảo hoặc các mục tiêu iSCSI.
Đáng chú ý là nếu bạn sử dụng --checksumđể chuyển một loạt tệp hoàn toàn mới cho hệ thống đích, rsync vẫn sẽ tính toán tổng của chúng trên hệ thống nguồn trước khi chuyển chúng. Tại sao tôi không biết :)
Vì vậy, trong ngắn hạn:
Nếu bạn thường sử dụng rsync để chỉ "chuyển nội dung từ A sang B" và muốn tùy chọn hủy thao tác đó và sau đó tiếp tục lại, đừng sử dụng --checksum, nhưng hãy sử dụng --append-verify.
Nếu bạn đang sử dụng rsync để sao lưu công cụ thường xuyên, sử dụng --append-verifycó thể sẽ không giúp ích gì cho bạn, trừ khi bạn có thói quen gửi các tệp lớn liên tục tăng kích thước nhưng hiếm khi được sửa đổi sau khi viết. Là một mẹo bổ sung, nếu bạn đang sao lưu vào bộ lưu trữ hỗ trợ chụp nhanh , btrfshoặc zfsthêm công --inplacetắc sẽ giúp bạn giảm kích thước ảnh chụp do các tệp đã thay đổi không được tạo lại mà thay vào đó các khối thay đổi được ghi trực tiếp lên các khối cũ. Công tắc này cũng hữu ích nếu bạn muốn tránh rsync tạo các bản sao của tệp trên mục tiêu khi chỉ có những thay đổi nhỏ xảy ra.
Khi sử dụng --append-verify, rsync sẽ hoạt động giống như mọi khi trên tất cả các tệp có cùng kích thước. Nếu chúng khác nhau về sửa đổi hoặc dấu thời gian khác, nó sẽ ghi đè lên mục tiêu bằng nguồn mà không xem xét kỹ hơn các tệp đó. --checksumsẽ so sánh nội dung (tổng kiểm) của mỗi cặp tệp có cùng tên và kích cỡ.
CẬP NHẬT 2015-09-01 Thay đổi để phản ánh các điểm được tạo bởi @Alex (cảm ơn!)
CẬP NHẬT 2017-07-14 Thay đổi để phản ánh các điểm được tạo bởi @Jonathan (cảm ơn!)