วิธีการซิงค์ไฟล์ขนาดใหญ่โดยมีค่าใช้จ่าย CPU และแบนด์วิดธ์น้อยที่สุด


13

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

คำสั่งที่เหมาะสมสำหรับสิ่งนี้คืออะไร? สิ่งที่ฉันได้ลองทำที่โซฟาได้รับการตลอดไปหรือทำตัวแปลก ๆ

ตัวอย่างและผลลัพธ์:

rsync -cv --partial --inplace --no-whole-file /desktop/file1 myserver.com::module/file1 

ดูเหมือนว่าจะทำงาน แต่ถ้าฉันทำมันสองครั้ง (?!) นอกจากนี้ช้า

คำสั่งข้างต้นทำการตรวจสอบกับคอมพิวเตอร์ทั้งสองเครื่องหรือเฉพาะในเครื่องที่ส่งหรือไม่ มันถูกต้องเป็นอย่างอื่น?


ไฟล์ที่มีขนาดใหญ่ซึ่งเปลี่ยนแปลงบ่อย? คุณจะได้รับผลลัพธ์ที่น่าผิดหวังมาก ๆ ด้วย rsync ...
Ignacio Vazquez-Abrams

ข้อเสนอแนะอื่น ๆ ? ฉันควรจะใช้งานได้กับบางแอพลูกค้าที่เป็นกรรมสิทธิ์ของ Dropbox ทำได้ดีมาก ดูforums.dropbox.com/topic.php?id=17631
Johan Allgoth

- สถานที่หมายถึง - เห็นบางส่วน: linux.die.net/man/1/rsync
Ray Hulha

คำตอบ:


12

มันจะไม่เร็วอย่างนี้เพราะ rsync จะต้องอ่าน / ตรวจสอบไฟล์ทั้งหมดและการอ่าน 500GB จะใช้เวลานานยกเว้นว่าคุณเก็บไว้ใน SSD หรืออะไรก็ตาม

ลองrsync -vhz --partial --inplace <file/server stuff>ดู

-cหมายความว่าจะตรวจสอบไฟล์ทั้งหมดก่อนทำการถ่ายโอนใด ๆ แทนที่จะใช้การประทับเวลาเพื่อดูว่ามีการเปลี่ยนแปลงหรือไม่ซึ่งหมายถึงการอ่านไฟล์ทั้งหมดสองครั้ง หากการประทับเวลาไม่ได้รับการเปลี่ยนแปลง (ควร) จากนั้นคุณสามารถเพียงแค่touchไฟล์ก่อนที่จะใช้ rsync

หากนี่ไม่ใช่สคริปต์คุณสามารถเพิ่ม--progressเพื่อดูว่ามันทำงานอย่างไร


ใช่ฉันรู้ว่า 'ไฟล์ขนาดใหญ่ == การจัดการที่ยาวนาน' แต่ฉันรู้สึกว่าฉันขาดอะไรบางอย่างที่นี่ดูความคิดเห็นด้านบน ถ้า Dropbox สามารถทำได้เราทำได้! =) ฉันไม่ได้พูด แต่ฉันก็ลองโดยไม่ใช้ -c ยังช้าอยู่
Johan Allgoth

2
ยัง--inplaceหมายถึง--partial

2

แม้ว่าจะไม่ใช่ rsync ขึ้นอยู่กับสิ่งที่คุณพยายามทำสิ่งนี้อาจทำงานได้ดีขึ้น ฉันทำงานสำรองที่คล้ายกันและเร็วขึ้นแน่นอน

ใช้ netcat ในการทำท่อ tar จากเครื่องหนึ่งไปอีกเครื่องหนึ่ง

บนเครื่องต้นทางของคุณ:

tar -cpv --atime-preserve=system . | nc -q 10 -l -p 45454

คุณกำลังสร้าง tarball รักษาสิทธิ์และเวลาจากนั้นส่งไปยัง netcat บนพอร์ต 45454

บนเครื่องสำรองของคุณ

nc -w 10 X.X.X.X 45454 | tar -xpv

X.X.X.X = ที่อยู่ IP ท้องถิ่นของเครื่องต้นทางของคุณ

สำหรับฉันมันใช้งานได้ดี มันวิ่งที่ 25-30 MB / s ผ่าน LAN แบบมีสายเมื่อเทียบกับ 2-3 MB / s ด้วย rsync ข้อเสียคือ: มันไม่ซิงค์มันแค่ทำสำเนาสิ่งที่อยู่ในแหล่งของคุณ สำหรับการสำรองข้อมูลอย่างที่คุณกำลังอธิบาย - ไฟล์ 500GB หนึ่งไฟล์ - มันสามารถทำงานได้ดีมาก

คุณอาจต้องทำสิ่งนี้ในฐานะรูทเพื่อหลีกเลี่ยงปัญหาการอนุญาตหรือคุณอาจโชคดี

FWIW ฉันเริ่มเรียนรู้เกี่ยวกับสิ่งนี้ที่นี่: http://www.screenage.de/blog/2007/12/30/using-netcat-and-tar-for-network-file-transfer/


1
tarดีกว่าrsyncเมื่อคุณมีไฟล์ขนาดเล็กจำนวนมากที่จะถ่ายโอน การใช้ncยังช่วยปรับปรุงอัตราการถ่ายโอนเมื่อใช้การเชื่อมต่อที่รวดเร็วเนื่องจากคุณไม่มีค่าใช้จ่ายในการเข้ารหัส SSH (ซึ่งฉันไม่ต้องการใช้ในการเชื่อมต่อแบบ peer-to-peer)
jornane

0

เพื่อหลีกเลี่ยงค่าใช้จ่ายในเครือข่ายเพียงใช้โปรโตคอล rsync ไม่ใช่ SSH โดยค่าเริ่มต้น rsync จะใช้ SSH เมื่อระบุ URL เช่นชื่อโฮสต์: / path ใช้ rsync: // hostname / path แทนเพื่อใช้โปรโตคอล rsync ที่เร็วขึ้น ไม่ต้องใช้อุบายกับ tar / netcat ในวิธีนี้ อัลกอริทึมเดลตา rsync ควรเร็วขึ้นมาก

ดูเพิ่มเติมที่https://gergap.wordpress.com/tag/rsync/สำหรับข้อมูลเพิ่มเติม

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