วิธีเพิ่มความเร็ว rsync


44

ฉันใช้ rsync เพื่อซิงค์ไดเรกทอรีไปยัง USB HDD ภายนอกของฉัน มันมีข้อมูลประมาณ 150 กิกะไบต์ ฉันคาดเดาไฟล์มากกว่า 50,000 ไฟล์

มันกำลังทำการซิงค์ครั้งแรกในขณะนี้ แต่การคัดลอกไฟล์ในอัตราเพียง 1-5 MB / s ดูเหมือนจะช้ามากสำหรับกล่องหุ้ม USB 2.0 ไม่มีการถ่ายโอนอื่น ๆ ที่เกิดขึ้นบนไดรฟ์

นี่คือตัวเลือกที่ฉันใช้:

rsync -avz --progress /mysourcefolder /mytargetfolder

ฉันใช้เซิร์ฟเวอร์ Ubuntu 9.10


2
คุณแน่ใจหรือว่าคุณได้รับการเชื่อมต่อ USB2 คัดลอก (ไม่ใช่ rsync) หรือการดำเนินการเขียนอื่นทำงานที่ความเร็วปกติ? ถ้าไม่คุณลองใช้ copy / other write op ด้วยพอร์ต USB / สายเคเบิลอื่นหรือไม่?
ต้มตุ๋น quixote

ดูเพิ่มเติมserverfault.com/questions/43014/... - มีคนยังนำเสนอการใช้สองประปาคำสั่งหรือtar cpio
Blaisorblade

คำตอบ:


38

สำหรับการซิงค์ครั้งแรกใช้

cp -a  /mysourcefolder /mytargetfolder

rsync จะเพิ่มค่าใช้จ่ายเมื่อปลายทางว่างเปล่า

และ .. ตัวเลือก -z อาจทำให้ประสิทธิภาพของคุณแย่ลงคุณไม่ควรใช้มันหากคุณไม่ได้ถ่ายโอนข้อมูลผ่านลิงค์ช้า


3
rsync ถูกเรียกเช่นนี้เพราะมันใช้สำหรับการซิงโครไนซ์ระยะไกลและไม่เหมาะสำหรับปริมาณที่เชื่อมต่อในเครื่องด้วยเหตุผลนี้
msanford

6
มันควรจะใช้งานได้สำหรับการถ่ายโอนในท้องถิ่นและมีความยืดหยุ่นมากกว่า มันอาจเกินค่าจ้างสำหรับการซิงค์ครั้งแรกเท่านั้น
Blaisorblade

1
rsync เป็นการซิงค์ทางเดียว ดีมากสำหรับการสำรองข้อมูลไปยังเซิร์ฟเวอร์หรือจากเซิร์ฟเวอร์ อย่างไรก็ตามหากคุณต้องการซิงค์สองทางในท้องถิ่นไปยังไดรฟ์ที่ถอดออกได้คุณอาจต้องการตรวจสอบ csync csync.org/get-itเพื่อไม่ให้สับสนกับ csync2 ซึ่งเป็นโครงการที่แตกต่างอย่างสิ้นเชิง
Jesse the Wind Wanderer

3
rsync -avz --progress /mysourcefolder/ /mytargetfolderหรือคุณจะได้รับสำเนาmysourcefolderข้างในmytargetfolderแทนที่จะทำมิเรอร์เนื้อหา
บรรณาธิการ

2
คำตอบนี้ไม่ตอบคำถาม คำถามคือเกี่ยวกับวิธีเพิ่มประสิทธิภาพ rsync - ไม่แทนที่ด้วยคำสั่ง cp
oemb1905

38

หากคุณใช้ rsync กับเครือข่ายที่รวดเร็วหรือดิสก์ไปยังดิสก์ในเครื่องเดียวกัน

ไม่ได้ใช้การบีบอัด -z

และใช้ - แทนที่

เพิ่มความเร็วให้กับประสิทธิภาพของฮาร์ดไดรฟ์หรือเครือข่าย

การบีบอัดใช้ CPU จำนวนมาก

การไม่ใช้ inplace ทำให้ harddrive thrash เป็นจำนวนมาก (ใช้ไฟล์ temp ก่อนที่จะสร้างไฟล์สุดท้าย)

การบีบอัดและไม่ใช้ inplace จะดีกว่าสำหรับการทำผ่านอินเทอร์เน็ต (เครือข่ายช้า)

ใหม่: ระวังปลายทาง ... หากมีการเปิดใช้งาน "การบีบอัด" ของ NTFS ... การทำเช่นนี้จะทำให้ไฟล์ขนาดใหญ่ช้าลงอย่างมาก (ฉันจะบอกว่า 200MB +) rsync ดูเหมือนจะจนตรอกมันเกิดจากสิ่งนี้


การบีบอัดของระบบไฟล์ NTFS นั้นช้ามากในไฟล์ขนาดใหญ่
Scott Kramer

ฉันไม่เห็นอะไรเกี่ยวกับ '--inline' ในหน้า man
Anthony

1
It's '--inplace'
Scott Kramer

26

ใช้-Wตัวเลือก สิ่งนี้ปิดใช้งานการเปรียบเทียบเดลต้า / ต่าง เมื่อเวลา / ขนาดไฟล์แตกต่างกัน rsync ก็อปปี้ไฟล์ทั้งหมด

ยังลบ-zตัวเลือก สิ่งนี้มีประโยชน์สำหรับการบีบอัดทราฟฟิกเครือข่ายเท่านั้น

ตอนนี้ควรจะเป็นอย่างรวดเร็วrsynccp


6
หมายเหตุเล็กน้อย: -zมีประโยชน์สำหรับเครือข่ายความเร็วต่ำเท่านั้น หากเครือข่ายของคุณเร็วพอมันจะช้าลงเนื่องจากคุณจะถูก จำกัด โดย CPU
WhyNotHugo

3
เคล็ดลับเหล่านี้ช่วยเร่งความเร็วการถ่ายโอนไฟล์ของฉันระหว่างอุปกรณ์ NAS สองเครื่องขอบคุณมาก!
djhworld

2
แต่โปรดทราบว่าตามหน้า man says for -W: "นี่เป็นค่าเริ่มต้นเมื่อทั้งต้นทางและปลายทางถูกระบุว่าเป็นเส้นทางในเครื่อง แต่ถ้าไม่มีตัวเลือกการเขียนแบทช์จะมีผล"
GuoLiang Oon

13

ก่อน - จำนวนไฟล์ในกรณีนี้จะเป็นปัจจัยสำคัญ มันมีขนาดเฉลี่ยละ 3MB อาจมีคอขวด io ที่มีอิทธิพลต่อความเร็วในกรณีของ OP เพิ่มเติมที่นี่ - เป็นหนังสือที่อ่านแล้วแห้ง แต่ภาพหน้าปกนั้นคุ้มค่า

ดังนั้นการใช้ rsync เพื่อคัดลอกไปยังไดเรกทอรีว่างเปล่า? ต่อไปนี้คือวิธีเพิ่มความเร็ว:

  1. No -z - ไม่ใช้ -z อย่างแน่นอนใน OP
  2. - ไม่บีบอัดอาจเร็วขึ้นคุณ สิ่งนี้อาจมีผลกระทบมากที่สุด ... การทดสอบของฉันคือ 13,000 ไฟล์ขนาดรวม 200MB และใช้ rsync 3.1.3 ฉันซิงค์กับพาร์ติชันที่แตกต่างกันในไดรฟ์ SSD ภายในเดียวกัน ด้วย - ไม่บีบอัดฉันได้รับ 18 เมกะบิตต่อวินาทีและถ้าไม่มีก็จะได้รับ 15 เมกะบิตต่อวินาที cp โดยวิธีได้รับ 16 MBps นั่นเป็นขนาดไฟล์เฉลี่ยที่เล็กกว่ามาก นอกจากนี้ - ฉันไม่พบเอกสารใด ๆ สำหรับ - ไม่มีการบีบอัด ฉันได้เรียนรู้เกี่ยวกับมันจากโพสต์นี้บน stackexchange.com
  3. -W เพื่อคัดลอกไฟล์ทั้งหมด - ใช้สิ่งนี้เสมอหากคุณไม่ต้องการเปรียบเทียบความแตกต่าง ไม่เป็นไรที่จุด rsync คือการเปรียบเทียบความแตกต่างและปรับปรุงการเปลี่ยนแปลงเท่านั้น
  4. -S เพื่อจัดการกับไฟล์ที่กระจัดกระจายได้ดี - ไม่เจ็บถ้าคุณไม่มีไฟล์ที่กระจัดกระจาย
  5. - แยกหรือจากสิ่งที่คล้ายกับการแยกไฟล์ที่คุณอาจไม่ต้องการจะช่วยลดเวลา แต่มันจะไม่เพิ่มความเร็วในการโอน
  6. เป็นไปได้ถ้าคุณส่งผลลัพธ์ไปยังไฟล์เช่นนี้rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err-> โดยทั่วไปแล้วพิมพ์ไฟล์พร้อมกับทุกสิ่งที่คุณเห็นตามปกติและ 2> หมายถึงข้อความแสดงข้อผิดพลาด
  7. ในที่สุดการเรียกใช้ rsync หลายอินสแตนซ์สำหรับส่วนต่างๆของการถ่ายโอนของคุณอาจเป็นความช่วยเหลือที่ยิ่งใหญ่

คำสั่งของฉันจะเป็น:

rsync -avAXEWSlHh /source /destination --no-compress --info=progress2 --dry-run

หากทุกอย่างดูดีฉันจะลบ "--dry-run" แล้วปล่อยไป A, X, และ E ครอบคลุมคุณสมบัติที่ขยายเพิ่มและการอนุญาตที่ไม่ครอบคลุมโดย -a, l สำหรับซอฟต์ลิงค์, H สำหรับฮาร์ดลิ้งค์และ h สำหรับการอ่านของมนุษย์

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

โบนัส - นี่คือหน้าคน rsyncและถ้าคุณต้องการที่จะทดสอบความเร็วฮาร์ดดิสก์ของคุณน่ารัก ++เป็นตัวเลือกที่ดีและความเร็วของเครือข่ายของคุณลองiperf


* โพสต์นั้นมีอายุเกือบสิบปีแล้ว แต่เสิร์ชเอ็นจิ้นชอบและฉันก็เห็นมันต่อไป เป็นคำถามที่ดีและฉันไม่คิดว่าคำตอบที่ดีที่สุดสำหรับ "วิธีเพิ่มความเร็ว rsync" ควรเป็น "ใช้ cp แทน"


1
ในส่วนของรายการที่ 7) ฉันสามารถปรับปรุงประสิทธิภาพได้มากขึ้นโดยใช้ HDD แบบดั้งเดิมเป็นแหล่งข้อมูลโดยขยายบัฟเฟอร์ read-ahead โดยใช้ "blockdev --setra 8192 / dev / sdX" ดังนั้นฉันตั้งใจจะลดการค้นหาหัว
user2480144

2

คุณไม่ได้บอกว่าไฟล์ของคุณมีขนาดเท่าไหร่ หากมีไฟล์ขนาดเล็กจำนวนมากสิ่งนี้จะลดอัตราการถ่ายโอนโดยรวมโดยการเพิ่มเวลาแฝงในการเคลื่อนที่ของหัวหน้าในไดรฟ์ต้นทางและปลายทางเนื่องจากเครื่องมือจะเปิดไฟล์ใหม่และระบบปฏิบัติการจะเก็บรายการไดเรกทอรีและข้อมูลเมตาอื่น ๆ การทำเจอร์นัลข้อมูลเมตาเช่น ext3 / ext4 และ NTFS ทำตามค่าเริ่มต้น) เป็นข้อมูลล่าสุดในระหว่างการถ่ายโอน กระบวนการคัดลอกไฟล์จะ "เข้าสู่ก้าวย่าง" สำหรับวัตถุขนาดใหญ่เท่านั้นเมื่อมีการถ่ายโอนจำนวนมากอย่างง่าย ๆ เกิดขึ้น


0

แน่นอนคุณต้องการลองใช้rclone สิ่งนี้เร็วอย่างบ้าคลั่ง:

$ tree / usr [... ] 26105 ไดเรกทอรี, 293208 ไฟล์

$ sudo rclone sync / usr / home / fred / temp -P -L - การโอน 64

ถ่ายโอนแล้ว: 17.929G / 17.929 GBytes, 100%, 165.692 MBytes / s, ข้อผิดพลาด ETA 0 วินาที: 75 (ลองอีกครั้งอาจช่วยได้) การตรวจสอบ: 691078/691078, 100% เวลาโอน: 345539/345539, 100% เวลาที่ผ่านไป: 1m50.8s

นี่เป็นสำเนาในเครื่องจากและไปยัง LITEONIT LCS-256 (256GB) SSD

คุณสามารถเพิ่ม --ignore-checksum ในการเรียกใช้ครั้งแรกเพื่อให้เร็วยิ่งขึ้น


0

หลีกเลี่ยงการ

  • -z/ --compress: การบีบอัดจะโหลดเฉพาะ CPU เนื่องจากการถ่ายโอนไม่ได้อยู่ในเครือข่าย แต่ผ่าน RAM
  • --append-verify: ทำการถ่ายโอนต่อ นี่เป็นความคิดที่ดี แต่มีกรณีความล้มเหลวที่เป็นอันตราย: ไฟล์ปลายทางใด ๆ ที่มีขนาดเท่ากัน (หรือมากกว่า) กว่าแหล่งที่มาจะได้รับการละเว้น นอกจากนี้มันจะตรวจสอบไฟล์ทั้งหมดในตอนท้ายซึ่งหมายถึงไม่มีความเร็วเพิ่มขึ้นอย่างมาก--no-whole-fileในขณะที่เพิ่มกรณีความล้มเหลวอันตราย

ใช้

  • -S/ --sparse: เปลี่ยนลำดับ nulls เป็นบล็อกหร็อมแหร็ม
  • --partialหรือ-Pคือ--partial --progress: บันทึกไฟล์ที่ถูกถ่ายโอนบางส่วนเพื่อดำเนินการต่อในอนาคต หมายเหตุ: ไฟล์จะไม่มีชื่อชั่วคราวดังนั้นตรวจสอบให้แน่ใจว่าไม่มีสิ่งอื่นใดที่คาดว่าจะใช้ปลายทางจนกว่าสำเนาทั้งหมดจะเสร็จสมบูรณ์
  • --no-whole-fileเพื่อให้สิ่งที่จำเป็นต้องส่งใหม่ใช้การถ่ายโอนของเดลต้า การอ่านไฟล์ครึ่งหนึ่งที่ถ่ายโอนบางส่วนนั้นเร็วกว่าการเขียนอีกครั้ง
  • --inplace เพื่อหลีกเลี่ยงการคัดลอกไฟล์ (แต่หากไม่มีสิ่งใดที่อ่านปลายทางจนกว่าการถ่ายโอนทั้งหมดจะเสร็จสิ้น)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.