ก่อนอื่นเกี่ยวกับคำถามที่ "ดำเนินการต่อ" ส่วนหนึ่งของคำถามของคุณ--partial
เพียงแค่บอกจุดสิ้นสุดการรับเพื่อเก็บไฟล์ที่ถ่ายโอนบางส่วนหากการส่งสิ้นสุดหายไปราวกับว่าพวกเขาถูกถ่ายโอนอย่างสมบูรณ์
ขณะถ่ายโอนไฟล์ไฟล์นั้นจะถูกบันทึกชั่วคราวเป็นไฟล์ที่ซ่อนอยู่ในโฟลเดอร์เป้าหมาย (เช่น.TheFileYouAreSending.lRWzDC
) หรือโฟลเดอร์ที่เลือกโดยเฉพาะหากคุณตั้ง--partial-dir
สวิตช์ เมื่อการถ่ายโอนล้มเหลวและ--partial
ไม่ได้ตั้งค่าไฟล์ที่ซ่อนอยู่นี้จะยังคงอยู่ในโฟลเดอร์ปลายทางภายใต้ชื่อที่เป็นความลับนี้ แต่หาก--partial
ตั้งไว้ไฟล์จะถูกเปลี่ยนชื่อเป็นชื่อไฟล์เป้าหมายที่แท้จริง (ในกรณีนี้TheFileYouAreSending
) แม้ว่าไฟล์ ไม่สมบูรณ์ ประเด็นก็คือว่าคุณหลังจากนั้นสามารถดำเนินการโอนโดยใช้ rsync อีกครั้งกับอย่างใดอย่างหนึ่งหรือ--append
--append-verify
ดังนั้น--partial
ไม่ได้ตัวเองกลับมาใช้บริการรถรับส่งที่ล้มเหลวหรือถูกยกเลิก ในการดำเนินการต่อคุณจะต้องใช้หนึ่งในธงดังกล่าวข้างต้นในการเรียกใช้ครั้งต่อไป ดังนั้นถ้าคุณต้องการที่จะทำให้แน่ใจว่าเป้าหมายจะไม่เคยมีไฟล์ที่ดูเหมือนจะดี --partial
แต่ไม่สมบูรณ์เป็นจริงคุณไม่ควรใช้ ตรงกันข้ามถ้าคุณต้องการที่จะให้แน่ใจว่าคุณไม่เคยทิ้งจรจัดไฟล์ที่ถูกซ่อนอยู่ในไดเรกทอรีเป้าหมายล้มเหลวและคุณรู้ว่าคุณจะสามารถที่จะดำเนินการโอนในภายหลัง--partial
จะมีการช่วยให้คุณ
สำหรับ--append
สวิตช์ที่กล่าวถึงข้างต้นนี้เป็นสวิตช์ "กลับสู่การทำงานจริง" และคุณสามารถใช้งานได้ไม่ว่าคุณจะใช้งานหรือไม่--partial
ก็ตาม ที่จริงแล้วเมื่อคุณใช้งานอยู่จะ--append
ไม่มีการสร้างไฟล์ชั่วคราว ไฟล์ถูกเขียนไปยังเป้าหมายโดยตรง ในส่วนนี้--append
ให้ผลเหมือนกับ--partial
การโอนล้มเหลว แต่ไม่สร้างไฟล์ชั่วคราวที่ซ่อนอยู่
ดังนั้นเพื่อสรุปหากคุณกำลังย้ายไฟล์ขนาดใหญ่และคุณต้องการให้ตัวเลือกดำเนินการ rsync ที่ยกเลิกหรือล้มเหลวจากจุดที่แน่นอนที่rsync
หยุดคุณต้องใช้--append
หรือ--append-verify
เปลี่ยนในความพยายามครั้งต่อไป
@Alex ตามที่ระบุไว้ด้านล่างเนื่องจากเวอร์ชั่น 3.0.0 rsync
มีตัวเลือกใหม่--append-verify
ซึ่งจะทำงานเหมือน--append
ก่อนที่จะมีสวิตช์นั้น คุณอาจเคยต้องการลักษณะการทำงานของเพื่อตรวจสอบรุ่นของคุณด้วย--append-verify
rsync --version
หากคุณอยู่ใน Mac และไม่ได้ใช้rsync
จากhomebrew
คุณจะ (อย่างน้อยและรวมถึง El Capitan) มีรุ่นเก่าและจำเป็นต้องใช้มากกว่า--append
--append-verify
ทำไมพวกเขาไม่ได้ให้พฤติกรรมบน--append
และตั้งชื่อแทนผู้มาใหม่--append-no-verify
เป็นบิตทำให้งง ไม่ว่าจะด้วยวิธีใด--append
บนrsync
ก่อนหน้าเวอร์ชัน 3 จะเหมือนกับ--append-verify
ในเวอร์ชันที่ใหม่กว่า
--append-verify
ไม่เป็นอันตราย: มันจะอ่านและเปรียบเทียบข้อมูลที่ปลายทั้งสองเสมอและไม่เพียง แต่คิดว่ามันเท่ากัน มันทำโดยใช้ checksums ดังนั้นมันจึงเป็นเรื่องง่ายในเครือข่าย แต่มันต้องการการอ่านจำนวนข้อมูลที่ใช้ร่วมกันที่ปลายทั้งสองของเส้นลวดก่อนที่มันจะสามารถทำการถ่ายโอนต่อได้จริงโดยผนวกเข้ากับเป้าหมาย
ประการที่สองคุณพูดว่า "ได้ยินว่า rsync สามารถค้นหาความแตกต่างระหว่างต้นทางและปลายทางได้ดังนั้นจึงต้องคัดลอกความแตกต่าง"
ถูกต้องและเรียกว่าการถ่ายโอนเดลต้า แต่เป็นสิ่งที่แตกต่าง หากต้องการเปิดใช้งานสิ่งนี้คุณเพิ่ม-c
หรือ--checksum
เปลี่ยน เมื่อใช้สวิตช์นี้ rsync จะตรวจสอบไฟล์ที่มีอยู่ที่ปลายทั้งสองของสาย มันทำสิ่งนี้ในกลุ่มเปรียบเทียบ checksums ที่ปลายทั้งสองและถ้าพวกเขาแตกต่างกันมันจะถ่ายโอนเฉพาะส่วนต่าง ๆ ของไฟล์ แต่เนื่องจาก @Jonathan ชี้ให้เห็นด้านล่างการเปรียบเทียบจะทำได้ก็ต่อเมื่อไฟล์มีขนาดเท่ากันทั้งสองด้านขนาดที่ต่างกันจะทำให้ rsync อัปโหลดไฟล์ทั้งหมดเขียนทับเป้าหมายด้วยชื่อเดียวกัน
สิ่งนี้ต้องการการคำนวณเล็กน้อยที่ปลายทั้งสองด้านในตอนแรก แต่อาจมีประสิทธิภาพอย่างมากในการลดโหลดเครือข่ายถ้าเช่นคุณมักจะสำรองไฟล์ขนาดใหญ่มากไฟล์ขนาดคงที่ซึ่งมักจะมีการเปลี่ยนแปลงเล็กน้อย ตัวอย่างที่นึกถึงคือไฟล์ภาพฮาร์ดไดรฟ์เสมือนที่ใช้ในเครื่องเสมือนหรือเป้าหมาย iSCSI
เป็นที่น่าสังเกตว่าถ้าคุณใช้--checksum
ในการถ่ายโอนแบทช์ของไฟล์ที่ยังใหม่กับระบบเป้าหมายสมบูรณ์ rsync จะยังคงคำนวณ checksums ของพวกเขาในระบบต้นทางก่อนที่จะทำการถ่ายโอน ทำไมฉันไม่รู้ :)
ดังนั้นในระยะสั้น:
หากคุณมักจะใช้ rsync จะเพียงแค่ "ย้ายสิ่งต่างๆจาก A ถึง B" และต้องการเลือกที่จะยกเลิกการดำเนินการนั้นและต่อมากลับมามันไม่ได้ใช้--checksum
แต่ทำ--append-verify
ใช้
หากคุณกำลังใช้ rsync เพื่อสำรองข้อมูลบ่อยครั้งการใช้--append-verify
อาจจะไม่ทำอะไรให้คุณมากนักเว้นแต่ว่าคุณจะติดนิสัยในการส่งไฟล์ขนาดใหญ่ที่มีขนาดใหญ่ขึ้นอย่างต่อเนื่อง เป็นเคล็ดลับโบนัสหากคุณสำรองข้อมูลไปยังพื้นที่เก็บข้อมูลที่รองรับสแนปชอตเช่นbtrfs
หรือzfs
การเพิ่ม--inplace
สวิตช์จะช่วยให้คุณลดขนาดสแน็ปช็อตเนื่องจากไฟล์ที่เปลี่ยนแปลงไม่ได้ถูกสร้างขึ้นใหม่ แต่บล็อกที่มีการเปลี่ยนแปลงจะถูกเขียนทับโดยตรง สวิตช์นี้ยังมีประโยชน์หากคุณต้องการหลีกเลี่ยง rsync ในการสร้างสำเนาไฟล์บนเป้าหมายเมื่อมีการเปลี่ยนแปลงเล็กน้อยเกิดขึ้น
เมื่อใช้--append-verify
งาน rsync จะทำงานเหมือนทุกครั้งที่ไฟล์มีขนาดเท่ากัน หากพวกเขาแตกต่างกันในการแก้ไขหรือการประทับเวลาอื่น ๆ มันจะเขียนทับเป้าหมายกับแหล่งที่มาโดยไม่ต้องพิจารณาไฟล์เหล่านั้นต่อไป --checksum
จะเปรียบเทียบเนื้อหา (เช็คซัม) ของไฟล์ทุกคู่ที่มีชื่อและขนาดเท่ากัน
อัปเดต 2015-09-01 มีการเปลี่ยนแปลงเพื่อให้สะท้อนถึงจุดที่ @Alex (ขอบคุณ!)
อัปเดต 2017-07-14 มีการเปลี่ยนแปลงเพื่อให้สะท้อนถึงจุดที่@Jonathan (ขอบคุณ!)