Sự khác biệt của Rsync giữa các tùy chọn --checksum và --ignore-times


96

Bất cứ ai cũng có thể làm rõ sự khác biệt giữa --checksum--ignore-timescác tùy chọn của rsync?

Hiểu biết của tôi là như sau:

--checksum
Nếu kích thước tệp và thời gian khớp nhau, nó sẽ thực hiện kiểm tra ở cả hai đầu để xem các tệp có thực sự giống nhau không.

--ignore-times
'Chuyển' mọi tệp, bất kể thời gian tệp có giống nhau ở cả hai đầu hay không. Vì nó vẫn sẽ sử dụng thuật toán chuyển delta, nếu một tệp thực sự giống hệt nhau, không có gì được chuyển.

Đó là sự khác biệt về kỹ thuật, nhưng theo như tôi có thể nói, chúng giống nhau về mặt ngữ nghĩa.

Vì vậy, điều tôi đang tự hỏi là:

  • Sự khác biệt thực tế giữa hai lựa chọn là gì?
  • Trong trường hợp nào bạn sẽ sử dụng cái này hơn cái kia?
  • Có sự khác biệt hiệu suất giữa chúng?

Câu trả lời:


99

Thông thường, rsyncbỏ qua các tệp khi các tệp có kích thước và thời gian giống hệt nhau ở phía nguồn và đích. Đây là một heuristic thường là một ý tưởng tốt, vì nó ngăn không rsyncphải kiểm tra nội dung của các tệp rất giống nhau ở phía nguồn và đích.

--ignore-timesyêu rsynccầu tắt heuristic theo thời gian và kích thước tệp, và do đó chuyển vô điều kiện TẤT CẢ các tệp từ nguồn sang đích. rsyncsau đó sẽ tiến hành đọc mọi tệp ở phía nguồn, vì nó sẽ cần sử dụng thuật toán chuyển delta hoặc đơn giản là gửi toàn bộ tệp, tùy thuộc vào việc --whole-filetùy chọn có được chỉ định hay không.

--checksumcũng sửa đổi heuristic lần và kích thước tệp, nhưng ở đây nó bỏ qua thời gian và chỉ kiểm tra kích thước. Các tệp ở phía nguồn và đích khác nhau về kích thước được truyền đi, vì chúng rõ ràng là khác nhau. Các tệp có cùng kích thước được kiểm tra lại (với MD5 trong rsyncphiên bản 3.0.0+ hoặc với MD4 trong các phiên bản trước đó) và các tệp được tìm thấy có tổng tiền khác nhau cũng được chuyển.

Trong trường hợp các mặt nguồn và đích gần như giống nhau, --checksumsẽ dẫn đến hầu hết các tệp được kiểm tra ở cả hai phía. Điều này có thể mất nhiều thời gian, nhưng kết quả cuối cùng là dữ liệu tối thiểu nhất sẽ thực sự được truyền qua dây, đặc biệt là nếu thuật toán chuyển delta được sử dụng. Tất nhiên, đây chỉ là một chiến thắng nếu bạn có mạng rất chậm và / hoặc CPU rất nhanh.

--ignore-timesmặt khác, sẽ gửi thêm dữ liệu qua mạng và nó sẽ khiến tất cả các tệp nguồn được đọc, nhưng ít nhất nó sẽ không đặt thêm gánh nặng cho việc tính toán nhiều hàm băm mạnh về mật mã trên CPU nguồn và CPU đích. Tôi hy vọng tùy chọn này sẽ hoạt động tốt hơn so với --checksumkhi mạng của bạn nhanh và / hoặc CPU của bạn tương đối chậm.

Tôi nghĩ rằng tôi sẽ chỉ sử dụng --checksumhoặc --ignore-timesnếu tôi đang chuyển các tệp đến một nơi mà người ta nghi ngờ rằng nội dung của một số tệp bị hỏng, nhưng thời gian sửa đổi của chúng không bị thay đổi. Tôi thực sự không thể nghĩ ra bất kỳ lý do chính đáng nào khác để sử dụng một trong hai tùy chọn, mặc dù có thể có các trường hợp sử dụng khác.


12
Tôi đã thấy --checksumhữu ích cùng với --itemize-changesviệc xác minh các bản sao lưu. Thỉnh thoảng các tập lệnh sao lưu của tôi chạy một so sánh đầy đủ theo cách này sau khi cập nhật hàng ngày / hàng tuần hiện tại hoàn tất. Tôi bị đánh rơi một email được đánh dấu khẩn cấp nếu --itemize-changesxuất ra bất cứ điều gì bất ngờ, vì vậy tôi biết có một vấn đề tiềm ẩn mà tôi nên xem xét.
David Spillett

10
--checksum rất hữu ích khi làm việc trong Git và chuyển đổi giữa các nhánh với các tệp đã thay đổi, giúp thay đổi thời gian cập nhật trên các tệp mà bạn không có ý định gửi từ một chi nhánh cụ thể.
FriendlyDev

6
--ignore-timesvà đặc biệt --checksumlà cần thiết nếu một trong các "tệp" của bạn là nơi chứa tệp Truecrypt do theo mặc định dấu thời gian của tệp không được cập nhật. Xem sản phẩmforums.google.com/forum/
Marcus Junius Brutus

Lưu ý: Tôi đã làm một thử nghiệm nhanh và thời gian không được so sánh, chỉ có thời gian. Trên Mac, ít nhất. Điều này có thể hữu ích để biết. Đó là lý do tại sao tôi có quá nhiều vấn đề với các hệ thống tệp Windows, báo cáo cùng một lúc (ctime) về thời gian, thời gian và thời gian.
Edward Falk

Có phải --checksumtổng kiểm tra chỉ tên tệp nguồn trên máy đích hoặc tất cả các tệp trong thư mục đích?
Greg

17

tổng kiểm tra cũng hữu ích nếu bạn đang sử dụng một hệ thống khác để đồng bộ hóa các tệp, không bảo toàn dấu thời gian. Checksum sẽ chỉ chuyển các tệp khác nhau VÀ cập nhật tất cả các dấu thời gian ở đầu nhận để chúng khớp


4

Một chi tiết: tùy chọn tổng kiểm tra kiểm tra toàn bộ tệp ở một đầu, sau đó toàn bộ tệp ở đầu kia. Nếu các tệp của bạn hơi lớn, loại này sẽ giết chết song song.

Ngoài ra, nếu bạn có các tệp lớn, rất có thể bạn sẽ hết thời gian chờ --checksum, như bạn không làm -I.


2

Từ info rsyncliên quan đến --checksumtùy chọn - "Vì toàn bộ tệp này kiểm tra tất cả các tệp ở cả hai phía của kết nối xảy ra cùng với xác minh tổng kiểm tra tự động xảy ra trong quá trình truyền tệp, tùy chọn này có thể khá chậm."


1
Câu đó dường như không có trong các trang người đàn ông của tôi ... vì vậy, điều đó có nghĩa là tùy chọn tổng kiểm tra sẽ sử dụng tổng kiểm tra để xác định xem các tệp có giống nhau không và nếu chúng không được chuyển, do đó sẽ tạo lại tổng kiểm tra một phần của việc chuyển nhượng? Tùy chọn --ignore-times chỉ bỏ qua kiểm tra và giả sử họ đã thay đổi? Vì vậy, hiệu suất-khôn ngoan - lần đầu tiên là một cách tốt hơn để đạt được điều tương tự? Tôi vẫn đang cố gắng để xem tại sao có 2 lựa chọn khác nhau (ngoài thực tế là --checksum minh bạch hơn)
Andy Madge

Bạn nên xem bản chỉnh sửa tài liệu mới nhất: gitweb.samba.org/ Kẻ
Aleksandr Levchuk

2

Các --ignore-timestùy chọn có thể sẽ dẫn đến tất cả các vùng đồng bằng file mã hóa và các thuật toán delta-chuyển giao (mã hóa đồng bằng) là ít nhất cũng chậm như checksumming.

Tôi không biết liệu rsync --ignore-timescó đủ thông minh để tránh "xác minh sau khi chuyển tự động" trong trường hợp thường xuyên khi chuyển delta sẽ không dẫn đến việc không được chuyển.

Dành cho --ignore-times:

  • Trong trường hợp rsync không thông minh (hoặc không tin tưởng mã hóa delta) thì việc kiểm tra (kiểm tra và mã hóa) sẽ được thực hiện hai lần.
  • Nó cũng có thể là trường hợp mã hóa delta chậm hơn nhiều so với kiểm tra MD4 128 bit.

Cả hai --checksum--ignore-timessẽ "khá chậm" nhưng --ignore-timesthậm chí có thể chậm hơn (do 2 khả năng ở trên).

Câu hỏi hay - xin vui lòng gửi nếu bạn tìm thấy bất kỳ sự khác biệt hiệu suất trong thực tế.


Tôi hiểu ý bạn là gì. Tôi sẽ chạy một số bài kiểm tra và gửi lại.
Andy Madge
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.