ความแตกต่าง Rsync ระหว่าง --checksum และ --ignore-times ตัวเลือก


95

ทุกคนสามารถอธิบายความแตกต่างระหว่าง--checksumและ--ignore-timesตัวเลือกของ rsync ได้หรือไม่?

ความเข้าใจของฉันเป็นดังนี้:

--checksum
หากขนาดไฟล์และเวลาตรงกันจะทำการตรวจสอบที่ปลายทั้งสองเพื่อดูว่าไฟล์เหมือนกันจริงๆหรือไม่

--ignore-times
'ถ่ายโอน' ทุกไฟล์โดยไม่คำนึงว่าเวลาไฟล์จะเท่ากันที่ปลายทั้งสอง เนื่องจากมันจะยังคงใช้อัลกอริธึมการถ่ายโอนเดลต้าหากไฟล์นั้นเหมือนกันจริง ๆ จะไม่มีการถ่ายโอนใด ๆ

นั่นคือความแตกต่างทางเทคนิค แต่เท่าที่ฉันสามารถบอกได้พวกเขามีความหมายเหมือนกัน

ดังนั้นสิ่งที่ฉันสงสัยคือ:

  • ความแตกต่างระหว่างสองทางเลือกในทางปฏิบัติคืออะไร?
  • คุณจะใช้อันไหนดีกว่าอีกอันหนึ่ง?
  • มีความแตกต่างระหว่างการแสดงหรือไม่?

คำตอบ:


99

โดยปกติแล้วrsyncข้ามไฟล์เมื่อไฟล์มีขนาดและเวลาเท่ากันในด้านต้นทางและปลายทาง นี่คือฮิวริสติกซึ่งโดยปกติแล้วจะเป็นความคิดที่ดีเพราะจะช่วยป้องกันไม่rsyncให้ตรวจสอบเนื้อหาของไฟล์ที่มีความเหมือนกันมากในด้านต้นทางและปลายทาง

--ignore-timesบอกrsyncให้ปิดฮิวริสติกของไฟล์และขนาดดังนั้นจึงโอนไฟล์ทั้งหมดจากแหล่งหนึ่งไปยังปลายทางโดยไม่มีเงื่อนไข rsyncจะดำเนินการอ่านไฟล์ทุกไฟล์ที่ด้านแหล่งที่มาเนื่องจากจะต้องใช้อัลกอริทึมการถ่ายโอนเดลต้าหรือเพียงส่งไฟล์ทุกไฟล์อย่างครบถ้วนทั้งนี้ขึ้นอยู่กับ--whole-fileตัวเลือกที่ระบุ

--checksumนอกจากนี้ยังปรับเปลี่ยนการแก้ปัญหาของไฟล์ครั้งและขนาด แต่ที่นี่มันไม่สนใจเวลาและตรวจสอบขนาดเท่านั้น ไฟล์บนด้านต้นทางและปลายทางที่มีขนาดต่างกันจะถูกถ่ายโอนเนื่องจากไฟล์เหล่านั้นแตกต่างกันอย่างเห็นได้ชัด ไฟล์ที่มีขนาดเท่ากันจะถูกตรวจสอบ (ด้วย MD5 ในrsyncเวอร์ชัน 3.0.0+ หรือกับ MD4 ในเวอร์ชันก่อนหน้า) และไฟล์ที่พบว่ามีผลรวมต่างกันจะถูกถ่ายโอนเช่นกัน

ในกรณีที่ด้านข้างต้นทางและปลายทางส่วนใหญ่เหมือนกัน--checksumจะทำให้ไฟล์ส่วนใหญ่ถูกตรวจสอบทั้งสองด้าน สิ่งนี้อาจใช้เวลานาน แต่ผลที่สุดคือการถ่ายโอนข้อมูลขั้นต่ำที่น้อยที่สุดจริง ๆ โดยเฉพาะอย่างยิ่งหากใช้อัลกอริทึมการถ่ายโอนเดลต้า แน่นอนว่านี่เป็นเพียงการชนะถ้าคุณมีเครือข่ายที่ช้ามากและ / หรือ CPU ที่เร็วมาก

--ignore-timesในทางกลับกันจะส่งข้อมูลผ่านเครือข่ายมากขึ้นและจะทำให้ไฟล์ต้นฉบับทั้งหมดถูกอ่าน แต่อย่างน้อยมันก็ไม่ได้กำหนดภาระเพิ่มเติมในการคำนวณแฮชซัมที่มีการเข้ารหัสลับจำนวนมากบนซีพียูต้นทางและปลายทาง ฉันคาดหวังว่าตัวเลือกนี้จะทำงานได้ดีกว่า--checksumเมื่อเครือข่ายของคุณเร็วและ / หรือ CPU ของคุณค่อนข้างช้า

ฉันคิดว่าฉันจะใช้--checksumหรือ--ignore-timesเคยถ่ายโอนไฟล์ไปยังปลายทางที่สงสัยว่าเนื้อหาของไฟล์บางไฟล์เสียหาย แต่เวลาในการดัดแปลงไม่เปลี่ยนแปลง ฉันไม่สามารถนึกถึงเหตุผลที่ดีอื่นใดที่จะใช้ตัวเลือกอย่างใดอย่างหนึ่งถึงแม้ว่าอาจมีกรณีการใช้งานอื่น ๆ


12
ฉันพบว่า--checksumมีประโยชน์พร้อมกับ--itemize-changesการยืนยันการสำรองข้อมูล สคริปต์สำรองข้อมูลของฉันทำงานเป็นระยะ ๆ เปรียบเทียบกับวิธีนี้หลังจากการอัพเดตรายวัน / รายสัปดาห์ปัจจุบันเสร็จสมบูรณ์ ฉันได้รับอีเมลที่ทำเครื่องหมายว่าเร่งด่วนหากมี--itemize-changesสิ่งใดที่คาดไม่ถึงดังนั้นฉันรู้ว่ามีปัญหาที่อาจเกิดขึ้นฉันควรตรวจสอบ
David Spillett

10
- checksum มีประโยชน์เมื่อทำงานใน Git และสลับระหว่างสาขากับไฟล์ที่ถูกเปลี่ยนซึ่งจะเปลี่ยนเวลาอัปเดตของไฟล์ที่คุณไม่ต้องการส่งจากสาขาใดสาขาหนึ่ง
FriendlyDev

6
--ignore-timesและโดยเฉพาะอย่างยิ่ง--checksumมีความจำเป็นหากหนึ่งใน "ไฟล์" ของคุณเป็นที่เก็บไฟล์ Truecrypt เนื่องจากตามค่าเริ่มต้นการประทับเวลาของไฟล์จะไม่ถูกอัพเดต ดูproductforums.google.com/forum/#!topic/drive/gnmDp3UXEgsและask-leo.com/why_wont_my_truecrypt_volume_backup.html
มาร์คัส Junius บรูตัส

หมายเหตุ: ฉันทำการทดสอบอย่างรวดเร็วและไม่เปรียบเทียบ ctime เพียง mtime เท่านั้น บน Mac อย่างน้อย สิ่งนี้มีประโยชน์ที่จะรู้ นั่นเป็นสาเหตุที่ฉันมีปัญหามากมายเกี่ยวกับระบบไฟล์ Windows ซึ่งรายงานในเวลาเดียวกัน (ctime) สำหรับ atime, mtime และ ctime
Edward Falk

ไม่--checksumตรวจสอบแหล่งที่มาเพียงชื่อไฟล์บนเครื่องปลายทางหรือไฟล์ทั้งหมดในไดเรกทอรีปลายทาง?
เกร็ก

16

การตรวจสอบยังมีประโยชน์หากคุณใช้ระบบอื่นในการซิงค์ไฟล์ซึ่งไม่ได้บันทึกเวลาไว้ Checksum จะถ่ายโอนไฟล์ที่แตกต่างกันและอัปเดตเวลาทั้งหมดที่สิ้นสุดการรับเพื่อให้ตรงกัน


4

รายละเอียดหนึ่ง: ตัวเลือก checksum ตรวจสอบไฟล์ทั้งหมดที่ปลายด้านหนึ่งจากนั้นทั้งไฟล์ที่ปลายอีกด้าน หากไฟล์ของคุณมีขนาดค่อนข้างใหญ่การฆ่าแบบคู่ขนานนี้

นอกจากนี้ถ้าคุณมีไฟล์ใหญ่คุณมักจะวิ่งเข้าไปหมดเวลากับที่คุณทำไม่ได้ด้วย--checksum-I


2

จากinfo rsyncการไปถึง--checksumตัวเลือก - "เนื่องจากการตรวจสอบทั้งไฟล์นี้ของไฟล์ทั้งหมดในทั้งสองด้านของการเชื่อมต่อเกิดขึ้นนอกเหนือจากการตรวจสอบการตรวจสอบอัตโนมัติที่เกิดขึ้นระหว่างการถ่ายโอนไฟล์ตัวเลือกนี้จึงค่อนข้างช้า"


1
ประโยคนั้นดูเหมือนจะไม่อยู่ใน man page ของฉัน ... ดังนั้นนั่นหมายความว่าตัวเลือก checksum จะใช้ checksums เพื่อระบุว่าไฟล์นั้นเหมือนกันหรือไม่และถ้าพวกมันไม่ได้มันก็จะถ่ายโอนซึ่งจะทำให้ checksums อีกครั้งเป็น เป็นส่วนหนึ่งของการถ่ายโอน? ตัวเลือก --ignore-times เพียงข้ามการตรวจสอบและถือว่าพวกเขาเปลี่ยนไปหรือไม่ ดังนั้นประสิทธิภาพที่ชาญฉลาด - บางครั้งเป็นวิธีที่ดีกว่าในการบรรลุสิ่งเดียวกัน? ฉันยังคงดิ้นรนเพื่อดูว่าทำไมมี 2 ตัวเลือกที่แตกต่างกัน (นอกเหนือจากความจริงที่ว่า - checksum โปร่งใสมากขึ้น)
Andy Madge

คุณควรดูการแก้ไขเอกสารล่าสุด: gitweb.samba.org/…
Aleksandr Levchuk

2

--ignore-timesตัวเลือกที่อาจจะส่งผลให้ไฟล์ทั้งหมดเดลต้าเข้ารหัสและขั้นตอนวิธีการถ่ายโอนเดลต้า (Delta เข้ารหัส) เป็นอย่างน้อยเป็นช้าเป็น Checksumming

ฉันไม่ทราบว่า rsync --ignore-timesฉลาดพอที่จะหลีกเลี่ยง "การตรวจสอบอัตโนมัติหลังการโอน" ในกรณีที่เกิดขึ้นบ่อยครั้งหรือไม่เมื่อเดลต้าโอนจะทำให้ไม่มีการถ่ายโอน

สำหรับ--ignore-times:

  • ในกรณีที่ rsync ไม่ใช่สมาร์ท (หรือไม่เชื่อถือการเข้ารหัสเดลต้า) จากนั้นการตรวจสอบ (การตรวจสอบและการเข้ารหัส) จะทำสองครั้ง
  • อาจเป็นกรณีที่การเข้ารหัสเดลตานั้นช้ากว่าการตรวจสอบ MD4 แบบ 128 บิต

ทั้งสอง--checksumและ--ignore-timesจะ "ค่อนข้างช้า" แต่--ignore-timesมีแนวโน้มที่จะช้าลง (เนื่องจากความเป็นไปได้ 2 ประการข้างต้น)

คำถามที่ดี - กรุณาโพสต์หากคุณพบความแตกต่างในการปฏิบัติในทางปฏิบัติ


ฉันเห็นสิ่งที่คุณหมายถึง ฉันจะทำการทดสอบและโพสต์กลับ
Andy Madge
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.