การทำเครื่องหมาย `-C 'ทำอะไรใน` scp'


35

ฉันมักจะใช้อย่างใดอย่างหนึ่งrsyncหรือscpเพื่อคัดลอกไฟล์จาก / ไปยังเครื่องระยะไกล เมื่อเร็ว ๆ นี้ฉันค้นพบในคู่มือของscp( man scp) ธง-C

 -C      Compression enable.  Passes the -C flag to
         ssh(1) to enable compression.

ก่อนที่ผมค้นพบธงนี้ผมเคยมาก่อนแล้วzipscp

มันมีประสิทธิภาพหรือไม่ถ้าใช้แค่การ-Cซิปและการคลายซิป เมื่อใช้กระบวนการใดกระบวนการหนึ่งจะทำให้การโอนเร็วขึ้น?


2
วิธีที่ดีที่สุดที่ฉันคิดว่าเป็นเกณฑ์มาตรฐานด้วยตนเอง การใช้scp -rvและscp -Crvการเปรียบเทียบทรูพุต
cuonglm

3
นี่เป็นคำถามที่ไม่เกี่ยวข้องทั้งหมด แต่zipเป็นรูปแบบไฟล์ "windows" ที่ค่อนข้างมาก คุณแทบจะไม่เห็นหรือต้องการเมื่อใช้งานเครื่อง linux ด้วยซอฟต์แวร์ linux แบบดั้งเดิม tarถูกนำมาใช้สำหรับกลิ้งไดเรกทอรีเป็นหนึ่งไฟล์ในขณะที่รักษาสิทธิ์และชื่อและเช่นในขณะที่gzip, bzip2, xzฯลฯ จะใช้ในการบีบอัดไฟล์ tars มักจะถูกบีบอัดการสร้างtar.gzและtar.xzรูปแบบทั่วไปสำหรับการเก็บถาวรบน linux ผมเคยเห็นคนม้วนตัวเองscpworkalike tar cvz directory | ssh machine 'cd somewhere; tar xz'มีคำสั่งเช่น
Score_Under

2
@Score_Under - รูปแบบ zip ใช้โดยจาวาเพื่อจัดทำไฟล์. jar ดังนั้นจึงยังคงมีการใช้ zip อย่างกว้างขวางในเซิร์ฟเวอร์ Linux จำนวนมาก
Johnny

แทนที่จะใช้ตัวเลือกในการถ่ายโอนไฟล์แต่ละครั้งคุณสามารถใส่ไฟล์Compression yesของคุณ .ssh/config
Barmar

หากคุณต้องการความเร็วคุณสามารถหลีกเลี่ยง SSH: unix.stackexchange.com/questions/227951/…
rogerdpack

คำตอบ:


22

มันจะไม่สร้างความแตกต่างอย่างใหญ่หลวง แต่การซิปไฟล์ก่อนที่จะทำการคัดลอกมันควรจะมีประสิทธิภาพน้อยลงเล็กน้อยตั้งแต่ใช้รูปแบบคอนเทนเนอร์เช่นzipที่สามารถห่อหุ้มหลาย ๆ ไฟล์ (เช่นtar) ไม่จำเป็นและไม่สามารถสตรีมซิปได้ อินพุตและเอาต์พุต (ดังนั้นคุณต้องมีไฟล์ชั่วคราว)

ใช้gzipบนมืออื่น ๆ แทนzipควรจะเป็นเหมือนกันเพราะมันเป็นสิ่งที่ssh -Cไม่ภายใต้ประทุน ... ยกเว้นว่า gzipping ssh -Cตัวเองคือการทำงานมากขึ้นกว่าเพียงแค่ใช้


ตกลงฉันจะตรวจสอบสิ่งที่gzipเป็น คำตอบของคุณหมายความว่าscp -rCเป็นทางออกที่มีประสิทธิภาพที่สุดที่ฉันมีหรือไม่
Remi.b

1
คำตอบของคุณไม่ได้พิจารณาว่าจะ-Cบีบอัดสตรีมโปรโตคอลแบบโต้ตอบ คุณพิจารณาข้อมูลเท่านั้น ดังนั้นข้อสรุปของคุณผิด ดูคำตอบของฉัน
Martin Prikryl

@Celada Zip สามารถเขียนไปป์ไลน์ได้เนื่องจากไดเรกทอรีสมาชิกถูกวางไว้ที่ส่วนท้าย อย่างไรก็ตามในขณะที่คุณกล่าวว่าการขยายไฟล์ต้องการการดึงสมาชิกมากกว่าหนึ่งคนและไม่สามารถอ่านจากขั้นตอน
jrw32982 รองรับ Monica

20

-Cธงช่วยให้การบีบอัด gzip ของกระแส SSH

มันเทียบเท่ากับAccept-Encoding: gzipใน HTTP

การตั้งค่าสถานะนั้นขึ้นอยู่กับประเภทของข้อมูลที่คุณถ่ายโอน:

  • เมื่อทำการถ่ายโอนไฟล์ขนาดใหญ่ไฟล์เดียวประสิทธิภาพจะใกล้เคียงกับการซิปไฟล์ก่อนการถ่ายโอน

    แต่การใช้งาน-Cเป็นความพยายามที่น้อยลงสำหรับคุณในฐานะผู้ใช้

  • เมื่อถ่ายโอนไฟล์ขนาดเล็กจำนวนมากประสิทธิภาพการทำงานจะด้อยกว่าการซิปไฟล์ก่อนโอน

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

    เมื่อคุณถ่ายโอนไฟล์ซิปเดียวการสื่อสารนั้นจะเกิดขึ้นเพียงครั้งเดียว


8

มันช่วยให้การบีบอัด gzip ใน ssh (ภายใต้ scp)

ในการเชื่อมต่อที่ช้าสิ่งนี้จะช่วยเพิ่มความเร็วในการเชื่อมต่อที่รวดเร็วพอสมควร (100Mbit หรือเร็วกว่า) การบีบอัดมีแนวโน้มที่จะทำให้ช้าลง

มันจะมีประสิทธิภาพมากกว่าหรือน้อยกว่า zip โดยขึ้นอยู่กับว่า gzip (โดยเฉพาะ gzip -6) จะมีประสิทธิภาพมากกว่าหรือน้อยกว่าระดับการบีบอัด zip ที่คุณเลือก


1
ในกรณีเฉพาะของฉันฉันมีการเชื่อมต่อค่อนข้างดี (ฉันอยู่ในมหาวิทยาลัย) แต่โฟลเดอร์ที่ฉันต้องคัดลอกมีขนาดใหญ่มาก (~ 100GB มากกว่า 442 .binและ.txtไฟล์) ดังนั้นคุณจะแนะนำให้ใช้เพียงscp -rและไม่มี-Cธงและไม่มีzip, gzipไม่ได้tar?
Remi.b

2
@ Remi.b: คุณอาจต้องเปรียบเทียบทั้งสองวิธีและดู คำถามคือว่า CPU นั้นเร็วพอที่จะบีบอัดข้อมูลในอัตราที่เร็วกว่าที่จะส่งผ่านเครือข่ายที่ไม่มีการบีบอัดหรือไม่ ดังนั้นคำตอบจะขึ้นอยู่กับเครื่องและเครือข่ายของคุณโดยเฉพาะ
Nate Eldredge

ตกลงฉันได้รับจุด +1 ขอบคุณสำหรับความช่วยเหลือของคุณ
Remi.b

SSH นั้นดูเหมือนว่าจะใช้ CPU บางตัวที่ฉันสังเกตเห็นบางครั้งก็ขยายออกต่ำกว่าแบนด์วิดท์สูงสุดของคุณ ไม่แน่ใจว่าจะทำอย่างไรมี ...
rogerdpack

ประสิทธิภาพขึ้นอยู่กับข้อมูลเช่นกัน การคัดลอกไฟล์ที่เป็นศูนย์ทั้งหมดจะถูกบีบอัดสูง ฉันมีลิงก์ขนาด 500Mb ระหว่างเซิร์ฟเวอร์ระยะไกลสองตัวและเพิ่งคัดลอกไฟล์ 50G (VMWare VMDK) ที่มีศูนย์ทั้งหมดบนลิงก์นี้ที่ ~ 128-130MB / s (อาจมีข้อ จำกัด บัฟเฟอร์บัฟเฟอร์การบีบอัด scp) ใช้เวลาประมาณ 6-7 นาที หากไม่มีการบีบอัดนี่จะใช้เวลา 1:45 น. ระยะของคุณจะแตกต่างกันไปขึ้นอยู่กับความซับซ้อนของข้อมูลและความสามารถในการบีบอัด
Topher
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.