เหตุใด scp ที่มีการบีบอัดช้ากว่าที่ไม่มี


11

ฉันต้องการถ่ายโอนไฟล์KVM vdisk ขนาด 20 GB จัดเก็บระบบไฟล์รูทของ CentOS 6.5 VM จากเซิร์ฟเวอร์ห้องปฏิบัติการหนึ่งไปยังอีกห้องหนึ่ง ขนาดไฟล์ขนาดใหญ่และความจริงที่ฉันเคยบีบอัดไฟล์ vdisk ไปหลายร้อยล้านไบต์ทำให้ฉันเปิดใช้งานการบีบอัดด้วยสัญชาตญาณscpแต่ฉันแปลกใจที่เห็นความเร็วในการถ่ายโอนค่อนข้างต่ำ จากนั้นฉันก็ลองใช้bzip2ร่วมกับsshและcatและก็ตกใจ นี่คือบทสรุปของวิธีการและปริมาณงานเฉลี่ย

  • scp -C vm1-root.img root@192.168.161.62:/mnt/vdisks/, 11 MB / s
  • bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img"5 MB / s แม้ผลลัพธ์ที่ต่ำกว่านี้จะได้รับการค้นหาบนอินเทอร์เน็ต
  • scp -c arcfour -C vm1-root.img root@192.168.161.62:/mnt/vdisks/, 13 MB / s คำแนะนำการใช้นี้-c arcfourให้เป็นหนึ่งในคำตอบบน serverfault มันช่วยไม่ได้เลย ในที่สุดฉันปิดการใช้งานการบีบอัด
  • scp vm1-root.img root@192.168.161.62:/mnt/vdisks/23 MB / s

ไม่ควรบีบอัดข้อมูลเร็วกว่านี้หรือ

แก้ไข: ฉันไม่รู้ว่าทำไมคำถามถูกลดระดับลง ฉันคิดว่ามีบางอย่างที่ต้องเรียนรู้ที่นี่

หลังจากได้รับssh(1)เคล็ดลับ man page จาก @sven ฉันได้ลองวิธีการถ่ายโอนไฟล์สองทางเลือกที่ไม่เกี่ยวข้องกับการบีบอัดทั้งสองด้วยผลลัพธ์ที่ดีกว่า

  • cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img"26 MB / s

  • nc -l 5678 > /mnt/vdisks/vm1-root.imgบนตัวรับและnc 192.168.161.62 5678 < vm1-root.imgตัวส่ง 40 MB / s พอร์ต5678นั้นเป็นพอร์ตที่ มีให้โดยพลการ

ใช้ncเป็นวิธีการคัดลอกที่เร็วที่สุด!

ในอดีตscp -Cทำงานได้ดีมากเมื่อใดก็ตามที่ฉันคิดว่ามันจะ ตัวอย่างเช่นเมื่อถ่ายโอน syslogs ( /var/log/messages*) ขนาดไม่กี่ GB อัตราการถ่ายโอนที่ไม่บีบอัดไม่กี่ร้อย KB / s จะเพิ่มขึ้นเป็น 1-2 MB / s ตัวอย่างนี้อยู่ในกรณีของการเชื่อมต่อที่ช้าตามที่ได้อธิบายไว้ใน man page

ฉันมีกรณีที่ภาพ vdisk ที่สร้างขึ้นใหม่สำหรับพาร์ติชัน 20 GB มีขนาดบีบอัดเพียง 200 MB ด้วยอัตราการถ่ายโอนประมาณ 25 MB / s เราสามารถทำสำเนาได้ในเวลาเพียง 8 วินาทีแทนที่จะใช้เวลามากกว่า 13 นาที! เห็นได้ชัดว่าscpไม่มีการบีบอัดจะไม่มีประสิทธิภาพในกรณีนี้และscp -Cยิ่งแย่ลง

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

คำตอบ:


9

Quoting man ssh(ซึ่งเป็นฐานที่ใช้โดยscp):

การบีบอัดเป็นที่ต้องการในสายโมเด็มและการเชื่อมต่อที่ช้าอื่น ๆ แต่จะช้าลงในเครือข่ายที่รวดเร็วเท่านั้น

ปัญหาคือการบีบอัดข้อมูลใช้เวลานานกว่านั้นเพียงแค่ส่งข้อมูลผ่านเครือข่าย


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

@Ernie: หากคุณสามารถส่งข้อมูลด้วยความเร็ว 20 MB / s และระบบสามารถส่งได้ด้วย 15 MB / s เท่านั้นเนื่องจากการบีบอัดข้อมูลช้ามากมันจะถูกส่งด้วยความเร็วเพียง 15 MB / s นั่นคือทั้งหมดที่มีให้มัน
สเวน

@Ernie: อัตราการถ่ายโอนที่พิมพ์โดยscpรวมเวลาที่ใช้ในการบีบอัด / คลายการบีบอัด ค่าที่รายงานจะน่าแปลกใจหากนี่ไม่ใช่กรณี
pdp

0

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

นอกจากนี้สำหรับการย้ายอิมเมจดิสก์คุณควรใช้เครื่องมือที่ตระหนักถึงระบบไฟล์เช่น ntfsclone / partclone เพราะแม้การบีบอัดจะไม่สามารถเอาชนะบล็อกธรรมดาที่ไม่ได้ปันส่วนได้แม้อัตราการถ่ายโอนของคุณจะไม่ จำกัด หากคุณไม่ต้องถ่ายโอนข้อมูลใด ๆ นอกจากนี้อย่าลืมที่จะทำลายไฟล์ swap และ hibernation บนพาร์ติชั่นของ windows หรือคุณกำลังคัดลอกขยะมันก็จะทิ้งและสร้างใหม่

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