ฉันพยายามถ่ายโอนไฟล์ขนาด 100k ประมาณ 90GB ตอนนี้ฉันกำลังใช้ rsync daemon แต่มันช้า 3.4mb / s และฉันต้องทำหลายครั้ง ฉันสงสัยว่าตัวเลือกใดที่ฉันมีซึ่งจะให้การเชื่อมต่อสูงสุด 100mbit ผ่านอินเทอร์เน็ตและเชื่อถือได้มาก
ฉันพยายามถ่ายโอนไฟล์ขนาด 100k ประมาณ 90GB ตอนนี้ฉันกำลังใช้ rsync daemon แต่มันช้า 3.4mb / s และฉันต้องทำหลายครั้ง ฉันสงสัยว่าตัวเลือกใดที่ฉันมีซึ่งจะให้การเชื่อมต่อสูงสุด 100mbit ผ่านอินเทอร์เน็ตและเชื่อถือได้มาก
คำตอบ:
คุณคิดว่าSneakernet เป็นไหม? ด้วยชุดข้อมูลขนาดใหญ่การจัดส่งในชั่วข้ามคืนจึงมักจะรวดเร็วและถูกกว่าการถ่ายโอนทางอินเทอร์เน็ต
วิธีที่เร็วที่สุดที่ฉันได้พบคือการรวมกันของtar
, และmbuffer
ssh
เช่น:
tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
การใช้สิ่งนี้ฉันได้ประสบความสำเร็จในการถ่ายโอนเครือข่ายท้องถิ่นมากกว่า 950 Mb / s ในลิงค์ 1Gb แทนที่พา ธ ในแต่ละคำสั่ง tar เพื่อให้เหมาะสมกับสิ่งที่คุณกำลังถ่ายโอน
คอขวดที่ใหญ่ที่สุดในการถ่ายโอนไฟล์ขนาดใหญ่ผ่านเครือข่ายก็คือดิสก์ I / O คำตอบที่เป็นหรือmbuffer
buffer
พวกเขาส่วนใหญ่คล้ายกัน แต่mbuffer
มีข้อได้เปรียบบางอย่าง ขนาดบัฟเฟอร์เริ่มต้นเป็น 2MB สำหรับmbuffer
และ 1MB buffer
สำหรับ บัฟเฟอร์ที่ใหญ่กว่ามักจะไม่มีวันว่างเปล่า การเลือกขนาดบล็อกซึ่งเป็นขนาดที่เล็กที่สุดร่วมกันของขนาดบล็อกเนทีฟทั้งในระบบไฟล์เป้าหมายและปลายทางจะให้ประสิทธิภาพที่ดีที่สุด
บัฟเฟอร์เป็นสิ่งที่ทำให้ทุกความแตกต่าง! ใช้มันหากคุณมีมัน! หากคุณไม่ได้รับมัน! การใช้(m}?buffer
สิ่งใด ๆ ย่อมดีกว่าสิ่งใด มันเกือบจะเป็นยาครอบจักรวาลสำหรับการถ่ายโอนไฟล์เครือข่ายที่ช้า
หากคุณถ่ายโอนไฟล์หลายไฟล์tar
ให้ใช้"ก้อน" เข้าด้วยกันในสตรีมข้อมูลเดียว หากเป็นไฟล์เดียวคุณสามารถใช้cat
หรือเปลี่ยนเส้นทาง I / O ค่าใช้จ่ายของการtar
เทียบcat
เป็นนัยสำคัญทางสถิติดังนั้นฉันมักจะใช้tar
(หรือzfs -send
ที่ฉันสามารถ) จนกว่าจะแล้วtarball ไม่รับประกันสิ่งเหล่านี้เพื่อให้ข้อมูลเมตาแก่คุณ (และโดยเฉพาะอย่างยิ่งcat
จะไม่) หากคุณต้องการข้อมูลเมตาฉันจะปล่อยให้มันเป็นแบบฝึกหัดให้คุณ
ในที่สุดการใช้ssh
กลไกการขนส่งก็มีความปลอดภัยและมีค่าใช้จ่ายน้อยมาก อีกครั้งค่าใช้จ่ายของssh
vs. nc
ไม่มีนัยสำคัญทางสถิติ
tar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | tar -xf -
ssh
ทำให้มันง่าย การใช้stunnel
, socat
หรือopenssl
ทำงานมากเกินไป แต่พวกเขากำลังที่ซับซ้อนมากขึ้นในการตั้งค่าสำหรับการถ่ายโอนง่าย
คุณพูดถึง "rsync" ดังนั้นฉันคิดว่าคุณใช้ Linux:
ทำไมคุณไม่สร้างไฟล์ tar หรือ tar.gz เวลาถ่ายโอนเครือข่ายของไฟล์ขนาดใหญ่หนึ่งไฟล์จะเร็วกว่าไฟล์ขนาดเล็ก คุณสามารถบีบอัดได้หากต้องการ ...
น้ำมันดินโดยไม่มีการบีบอัด:
บนเซิร์ฟเวอร์ต้นทาง:
tar -cf file.tar /path/to/files/
จากนั้นในตอนท้ายที่ได้รับ:
cd /path/to/files/
tar -xf /path/to/file.tar
น้ำมันดินด้วยการบีบอัด:
บนเซิร์ฟเวอร์ต้นทาง:
tar -czf file.tar.gz /path/to/files/
จากนั้นในตอนท้ายที่ได้รับ:
cd /path/to/files/
tar -xzf /path/to/file.tar.gz
คุณเพียงแค่ใช้ rsync เพื่อทำการถ่ายโอนไฟล์ (tar | tar.gz) ที่แท้จริง
คุณสามารถลองtar
และssh
เคล็ดลับที่อธิบายไว้ที่นี่ :
tar cvzf - /wwwdata | ssh root@192.168.1.201 "dd of=/backup/wwwdata.tar.gz"
นี้ควรจะเขียนทับได้ไปต่อไปนี้ :
tar cvzf - /wwwdata | ssh root@192.168.1.201 "tar xvf -"
แม้ว่าคุณจะสูญเสีย--partial
คุณสมบัติของrsync
ในกระบวนการ แต่ หากไฟล์ไม่เปลี่ยนแปลงบ่อยครั้งการใช้ชีวิตด้วยการเริ่มต้นช้าrsync
อาจมีค่าสูงในขณะที่มันจะเร็วขึ้นมากในอนาคต
คุณสามารถใช้ตัวเลือกการบีบอัดต่างๆของ rsync
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
--skip-compress=LIST skip compressing files with suffix in LIST
อัตราส่วนการบีบอัดสำหรับไฟล์ไบนารีอยู่ในระดับต่ำมากดังนั้นคุณสามารถข้ามไฟล์เหล่านั้นโดยใช้ --skip-compress เช่น iso, เก็บถาวรและบีบอัด tarballs เป็นต้น
ฉันเป็นแฟนตัวยงของ SFTP ฉันใช้ SFTP เพื่อถ่ายโอนสื่อจากคอมพิวเตอร์หลักไปยังเซิร์ฟเวอร์ของฉัน ฉันได้รับความเร็วที่ดีผ่าน LAN
SFTP มีความน่าเชื่อถือฉันจะให้ช็อตเนื่องจากมันง่ายในการติดตั้งและมันอาจเร็วขึ้นในบางกรณี