เหตุใด rsync จึงไม่ใช้การถ่ายโอนเดลต้าสำหรับไฟล์ในเครื่อง


25

ฉันมีอิมเมจ iso ขนาดใหญ่ซึ่งกำลังดาวน์โหลดโดยไคลเอนต์ฝนตกหนักที่เปิดใช้งานการสำรองพื้นที่: นั่นหมายความว่าขนาดไฟล์จะไม่เปลี่ยนแปลงในขณะที่บางชิ้นใน (4 Mib) มีการเปลี่ยนแปลงอยู่ตลอดเวลาเนื่องจากการดาวน์โหลด

ที่ 90% ดาวน์โหลดฉันทำ rsync เริ่มต้นเพื่อประหยัดเวลาในภายหลัง:

$ rsync -Ph DVD.iso / media / another-hdd /
ส่งรายชื่อไฟล์ที่เพิ่มขึ้น

DVD.iso
       2.60G 100% 40.23MB / วินาที 0:01:01 (xfer # 1, เพื่อตรวจสอบ = 0/1)

ส่ง 2.60G ไบต์รับ 73 ไบต์ 34.59M ไบต์ / วินาที
ขนาดทั้งหมดคือ 2.60G speedup คือ 1.00

จากนั้นเมื่อดาวน์โหลดไฟล์ทั้งหมดฉัน rsync อีกครั้ง:

total size is 2.60G   speedup is 1.00

Speedup = 1 กล่าวว่าไม่ได้ใช้การถ่ายโอนเดลต้าถึงแม้ว่า 90% ของไฟล์ไม่ได้เปลี่ยน dir เป้าหมายอยู่ใน FS อื่นและการคัดลอกใช้เวลาหลายนาที ทำไมจึงไม่พยายามเพิ่มความเร็วการโอน! ฉันrsyncจะบังคับให้ใช้การถ่ายโอนของเดลต้าได้อย่างไร


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

1
ดังนั้นมันจึงไม่ใช้ delta-xfer เพราะทำงานในพื้นที่มันจะคัดลอกเร็วกว่าการคำนวณแฮช ถ้าใช่ - โพสต์คำตอบนะ :)
kolypto

9
การอ่านอาจเร็วกว่าการเขียนไปยังดิสก์ภายในเครื่องในบางสถานการณ์ นอกจากนี้ยังสามารถลดการสึกหรอของ SSD นี่เป็นคำถามที่ถูกต้องแน่นอนและคำตอบนั้นค่อนข้างมีค่าสำหรับฉัน
HRJ

2
@psusi นอกเหนือจากความคิดเห็นของ HRJ ข้างต้นให้พิจารณากรณีเมื่อไฟล์เป้าหมายถูก reflinked (เช่นใน btrfs หรือ ocfs2) การย่อขนาดการเขียนระหว่างการซิงค์สามารถสร้างความแตกต่างอย่างมากต่อการใช้พื้นที่โดยรวม

คำตอบ:


20

ตามmanpage , psusi ถูกต้อง:

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


10
โอ้ขอบคุณ! ฉันเข้าใจผิดบรรทัดนี้ :) ในการเปิดใช้งานเดลต้าลองใช้-no-W
kolypto

1
ในระบบของฉันใช้งาน-no-Wไม่ได้กับตัวเลือกแบบยาว-no-whole-fileเท่านั้น เหตุผลที่ฉันต้องการสวิตช์นี้คือเมื่อฉันตั้งค่าการสำรองข้อมูลและมีไฟล์ขนาดใหญ่ (เช่นรูปภาพ) ที่ไม่มีเวลาในการปรับเปลี่ยนเท่ากัน มันเร็วกว่ามากเร็วขึ้นเป็น 163.26 เพื่อซิงค์ไฟล์เหล่านี้โดยใช้การถ่ายโอนเดลต้าบนระบบไฟล์ในเครื่องของฉัน
Jesse the Wind Wanderer

6
@ JessetheWindWanderer ตัวเลือกที่ยาวคือ--no-whole-file(โปรดจดบันทึก double --ไว้ที่จุดเริ่มต้น)
Eddie C.

ขอบคุณ Eddie C. ฉันจะแก้ไขความคิดเห็นของฉันถ้าฉันสามารถคิดวิธีของเรา :-(
Jesse the Wind Wanderer

17

คำตอบสำหรับคำถามนี้คือ:

ใช้การ--no-Wตั้งค่าสถานะเพื่อบังคับใช้การบีบอัดเดลต้าไม่ว่าท้องถิ่นหรือระยะไกล

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

โปรดดูที่ "Wakan Tanka ของ" การตรวจสอบที่นี่


2
--no-Wถ่ายโอนไฟล์ทั้งหมดในกรณีของฉันเสมอ โปรดตรวจสอบunix.stackexchange.com/questions/291156/…
Wakan Tanka

@WakanTanka นั่นน่าสนใจ! ฉันได้อัพเดตคำตอบแล้ว
HRJ

3

โดยค่าเริ่มต้น rsync จะสร้างสำเนาใหม่ของไฟล์เป้าหมายจากนั้นแทนที่ด้วยเหตุผลด้านความปลอดภัยต่างๆ คุณสามารถแทนที่นี้โดยระบุพร้อมกับ--inplace --no-whole-fileสิ่งนี้บอก rsync ให้ทำการแก้ไขไฟล์เป้าหมายแทนการยอมรับความเสี่ยงต่าง ๆ (โดยทั่วไปเล็กน้อยสำหรับสถานการณ์นี้) ตามที่ระบุไว้ใน man page


0

โดยค่าเริ่มต้นrsyncจะสร้างสำเนาของไฟล์ที่ปลายทางจากนั้นแทนที่อะตอมแบบต้นฉบับด้วยสำเนาใหม่ นี่คือเหตุผลด้านความปลอดภัย สิ่งที่คุณกำลังค้นหาคือ--inplaceตัวเลือกซึ่งจะทำให้rsyncการแก้ไขเฉพาะบางส่วนของไฟล์ปลายทางที่มีการเปลี่ยนแปลงสัมพันธ์กับแหล่งที่มา

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

หากต้องการคัดลอกไดเรกทอรีดาวน์โหลดของคุณอย่างกระจัดกระจายไปยังไดรฟ์ข้อมูลปลายทางฉันขอแนะนำการตั้งค่าสถานะและการดำเนินการเหล่านี้ตามลำดับนี้:

rsync --ignore-existing -vxaHAXS /source /destination
rsync --inplace -vxaHAX /source /destination

บัตรผ่านแรกจะคัดลอกไฟล์ใหม่อย่างกระจัดกระจายไปยังปลายทางบัตรผ่านชุดที่สองจะอัปเดตไฟล์ที่มีอยู่ในสถานที่คัดลอกเฉพาะการเปลี่ยนแปลง

เนื่องจากมันกำลังทำสำเนาเดลต้าและแบบแทนที่คุณจึงสามารถรันสิ่งนี้ซ้ำ ๆ ได้โดยไม่ต้องมี IO เพิ่มมากขึ้น แม้ว่าคุณจะมี 20 torrents ที่ทำงานพร้อมกัน แต่มันจะไม่ขยายการเขียนที่ปลายทางหรือฟาดระดับเสียงต้นฉบับ / ปลายทาง


คุณหมายถึงอะไร "กระจัดกระจาย" ที่นี่ใช่ไหม มันไม่ได้สะท้อนความหมายที่แท้จริงของคำเท่าที่ฉันสามารถบอกได้
Julius

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