rsync สามารถอัปเดตไฟล์ขนาดใหญ่ที่มีการเปลี่ยนแปลงเพียงบางส่วนเท่านั้นโดยไม่ต้องทำการส่งซ้ำอย่างสมบูรณ์หรือไม่


15

ฉันกำลังทำการเปลี่ยนแปลงเล็กน้อยในไฟล์รูปภาพขนาดใหญ่มาก (แตกต่างกันเพียงไม่กี่พิกเซล) ซึ่งใช้เวลานานในการถ่ายโอนผ่านเครือข่าย

มีวิธีการ rsync ในการระบุความแตกต่างในไฟล์และส่งความแตกต่างเล็ก ๆ ผ่านเครือข่ายหรือไม่?


3
เมื่อทำการคัดลอกผ่านเครือข่ายrsyncจะทำงานด้วยวิธีนี้ตามค่าเริ่มต้น ตราบใดที่การเปลี่ยนแปลงเล็กน้อยเป็นการเปลี่ยนแปลงเล็กน้อยของไฟล์และไฟล์นั้นมีอยู่แล้วทั้งสองด้านของลิงค์ในรุ่นใกล้เคียงกันข้อมูลที่ถ่ายโอนควรมีขนาดน้อยกว่าขนาดไฟล์ทั้งหมด จากย่อหน้าแรกใน man page: "มันมีชื่อเสียงสำหรับอัลกอริทึมการถ่ายโอนของเดลต้าซึ่งช่วยลดปริมาณข้อมูลที่ส่งผ่านเครือข่ายโดยการส่งความแตกต่างระหว่างไฟล์ต้นฉบับและไฟล์ที่มีอยู่ในปลายทาง"
user4556274

อาตกลงคุณควรโพสต์ว่าเป็นคำตอบมากกว่าความคิดเห็น ไม่ชัดเจนว่า rsync ทำงานแบบนี้ แต่ด้วยความคาดหวังนั้นฉันจะสันนิษฐานว่าไฟล์ของฉันเปลี่ยนไปมากกว่าที่ฉันคาดไว้และดูว่าทำไม กระบวนการบีบอัดภาพอาจเปลี่ยนค่าไบต์ดิบตลอดทั้งไฟล์
David Parks

คำตอบ:


11

rsyncอัลกอริทึมการถ่ายโอนเดลต้าทำสิ่งนี้ตามค่าเริ่มต้น การอ้างอิงrsync manpage :

รายละเอียด

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

หากคุณต้องการปิดการใช้งานคุณจะต้องใช้-Wหรือ--whole-fileตัวเลือก

-W, - ทั้งไฟล์

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

หากคุณรู้ว่าไฟล์ของคุณมีการเปลี่ยนแปลงมากน้อยเพียงใดคุณสามารถปรับพฤติกรรมการถ่ายโอนเดลต้านี้ได้โดยปรับขนาดบล็อกเดลต้าของคุณ:

-B, --block-size = BLOCKSIZE

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

และถ้าคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึมคุณสามารถค้นหาได้ที่นี่: อัลกอริทึม Rsync


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