Cờ `-C` chính xác làm gì trong` scp`?


35

Tôi luôn sử dụng một trong hai rsynchoặc scpđể sao chép tập tin từ / đến một máy từ xa. Gần đây, tôi phát hiện ra trong hướng dẫn của scp( man scp) cờ-C

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

Trước khi tôi phát hiện ra lá cờ này, tôi đã từng sử dụng ziptrước đó và sau đó scp.

Có hiệu quả không khi chỉ sử dụng việc -Cnén và giải nén? Khi nào sử dụng một hoặc một quá trình khác làm cho việc chuyển tiền nhanh hơn?


2
Cách tốt nhất tôi nghĩ là điểm chuẩn của chính bạn. Sử dụng scp -rvscp -Crvđể so sánh thông lượng.
cuonglm

3
Điều này hoàn toàn không liên quan đến câu hỏi, nhưng ziplà một định dạng tệp rất "cửa sổ". Bạn gần như sẽ không bao giờ nhìn thấy hoặc cần nó khi vận hành máy linux với phần mềm linux gốc. tarđược sử dụng cho cán lên thư mục vào một tập tin trong khi vẫn giữ quyền tên và như vậy, trong khi gzip, bzip2, xz, vv được sử dụng để file nén. tars thường được nén, tạo tar.gztar.xzđịnh dạng phổ biến cho tài liệu lưu trữ trên linux. Tôi đã thấy mọi người tự làm scpviệc giống nhau với các lệnh như thế nào tar cvz directory | ssh machine 'cd somewhere; tar xz'.
Score_Under

2
@Score_Under - Định dạng zip cũng được Java sử dụng để đóng gói các tệp .jar, do đó zip vẫn được sử dụng rộng rãi trên nhiều máy chủ Linux.
Johnny

Thay vì sử dụng tùy chọn trên mỗi lần chuyển tệp, bạn có thể đặt Compression yesvào .ssh/configtệp của mình .
Barmar

Nếu bạn thực sự muốn tốc độ, bạn có thể tránh SSH: unix.stackexchange.com/questions/227951/ Kẻ
rogerdpack

Câu trả lời:


22

Nó sẽ không bao giờ thực sự tạo ra bất kỳ sự khác biệt lớn nào, nhưng việc nén tệp trước khi sao chép nó sẽ kém hiệu quả hơn một chút vì sử dụng định dạng chứa như zipcó thể đóng gói nhiều tệp (như tar) là không cần thiết và không thể truyền phát zip đầu vào và đầu ra (vì vậy bạn cần một tập tin tạm thời).

gzipMặt khác, sử dụng , thay vì zipphải giống hệt nhau vì đó là những gì diễn ssh -Cra dưới mui xe ... ngoại trừ việc tự mình làm việc còn nhiều việc hơn là chỉ sử dụng ssh -C.


Ok, tôi sẽ kiểm tra xem nó gziplà gì . Câu trả lời của bạn có nghĩa là đó scp -rCcó lẽ là giải pháp hiệu quả nhất mà tôi có?
Remi.b

1
Câu trả lời của bạn không xem xét việc -Cnén một luồng giao thức tương tác. Bạn chỉ xem xét dữ liệu. Vì vậy, kết luận của bạn là sai. Xem câu trả lời của tôi
Martin Prikryl

@Celada Zip có thể ghi vào một đường ống vì thư mục thành viên được đặt ở cuối. Tuy nhiên, như bạn đã nói, giải nén yêu cầu tìm cách trích xuất nhiều hơn một thành viên và do đó không thể đọc từ một đường ống dẫn.
jrw32982 hỗ trợ Monica

20

Các -Clá cờ cho phép một nén gzip của một dòng SSH.

Nó tương đương với Accept-Encoding: gzipHTTP.

Cách cờ thực hiện tùy thuộc vào loại dữ liệu bạn chuyển:

  • Khi truyền một tệp lớn, hiệu suất sẽ gần giống với nén tệp trước khi truyền (bỏ qua hiệu quả của thuật toán zip so với gzip).

    Nhưng sử dụng -Clà một nỗ lực ít hơn cho bạn như một người dùng.

  • Khi chuyển nhiều tệp nhỏ, hiệu suất sẽ kém hơn so với nén các tệp trước khi chuyển.

    Một lý do đằng sau đó là, trước mỗi lần truyền tệp, có một giao tiếp tương tác giữa máy chủ SCP và máy khách (để trao đổi siêu dữ liệu tệp, như dấu thời gian và quyền). Vì vậy, cả hai bên phải chờ một chút để phía bên kia phản hồi (nén sẽ không giúp ích trong khi chờ đợi). Đó là một thời gian lãng phí cho mỗi tập tin được chuyển. Bao nhiêu thời gian bị lãng phí phụ thuộc vào độ trễ của kết nối. Cuối cùng, việc chuyển giao có thể có cường độ chậm hơn.

    Khi bạn chuyển một tệp nén, giao tiếp đó chỉ xảy ra một lần.


8

Nó cho phép nén gzip trong ssh (dưới scp).

Trên các kết nối chậm, điều này sẽ tăng tốc mọi thứ, trên bất kỳ kết nối nhanh hợp lý nào (100Mbit hoặc nhanh hơn), việc nén rất có thể làm mọi thứ chậm lại.

Nó sẽ hiệu quả hơn hoặc ít hơn so với zip dựa trên việc gzip (cụ thể là gzip -6) sẽ hiệu quả hơn hoặc thấp hơn mức nén zip đã chọn của bạn


1
Trong trường hợp cụ thể của tôi, tôi có một kết nối tương đối tốt (tôi đang ở trong khuôn viên trường) nhưng các thư mục tôi phải sao chép rất lớn (~ 100GB trên 442 .bin.txtcác tệp). Vì vậy, bạn sẽ đề nghị chỉ sử dụng scp -rvà không có -Ccờ và không zip, gzipkhông tar?
Remi.b

2
@ Remi.b: Bạn có thể phải điểm chuẩn cả hai cách và xem. Câu hỏi là, liệu CPU có đủ nhanh để nén dữ liệu với tốc độ nhanh hơn mức có thể được gửi qua mạng không nén. Vì vậy, câu trả lời sẽ phụ thuộc vào máy và mạng cụ thể của bạn.
Nate Eldredge

Ok tôi đã nhận được điểm +1. Nhờ sự giúp đỡ của bạn
Remi.b

Bản thân SSH dường như mất một số CPU mà tôi nhận thấy, đôi khi tối đa hóa ở mức thấp hơn nhiều so với băng thông tối đa của bạn. Không chắc chắn phải làm gì ở đó ...
rogerdpack

Hiệu suất phụ thuộc vào dữ liệu là tốt. Sao chép một tập tin về cơ bản là tất cả các số không sẽ được nén rất cao. Tôi có một liên kết 500Mb giữa hai máy chủ từ xa và chỉ sao chép tệp 50G (VMWare VMDK) chứa tất cả các số không qua liên kết này với tốc độ ~ 128-130MB / s (có thể là giới hạn bộ đệm nén scp), chỉ mất khoảng 6-7 phút. Nếu không nén thì sẽ mất 1:45 giờ. Số dặm của bạn sẽ thay đổi tùy thuộc vào độ phức tạp của dữ liệu và mức độ có thể nén của nó.
Topher
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.