Что именно флаг `-C` делает в` scp`?


35

Я всегда использую либо rsyncили scpдля того, чтобы скопировать файл с / на удаленную машину. Недавно я обнаружил в руководстве scp( man scp) флаг-C

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

До того, как я обнаружил этот флаг, zipраньше и потом scp.

Это так же эффективно, как просто использовать -Cчем застегивать и расстегивать молнию? Когда используется тот или иной процесс, сделать перевод быстрее?


2
На мой взгляд, лучший способ - это эталонный тест. Использование scp -rvи scp -Crvдля сравнения пропускной способности.
cuonglm

3
Это совершенно не имеет отношения к вопросу, но zipэто очень "оконный" формат файла. Вы почти никогда не увидите или не нуждаетесь в этом при работе на машине Linux с собственным программным обеспечением Linux. tarиспользуется для сворачивания каталогов в один файл, сохраняя при этом права доступа и имена и такие, в то время как gzip, bzip2, xzи т.д. используются для сжатия файлов. tarОни часто сжимаются, создавая tar.gzи tar.xzраспространенные форматы для архивов в Linux. Я видел, как люди scpкатались по своему усмотрению с такими командами, как tar cvz directory | ssh machine 'cd somewhere; tar xz'.
Score_Under

2
@Score_Under - формат zip также используется Java для упаковки файлов .jar, поэтому zip по-прежнему широко используется на многих серверах Linux.
Джонни

Вместо того, чтобы использовать опцию для каждой передачи файла, вы можете поместить Compression yesв свой .ssh/configфайл.
Бармар

Если вы действительно хотите скорость, вы можете избежать SSH: unix.stackexchange.com/questions/227951/…
rogerdpack

Ответы:


22

На самом деле это никогда не будет иметь большого значения, но архивирование файла перед копированием должно быть немного менее эффективным, поскольку использование формата контейнера, такого как, zipкоторый может инкапсулировать несколько файлов (например tar), не является необходимым, и это не возможно для потоковой передачи ZIP ввод и вывод (вам нужен временный файл).

Использование gzipс другой стороны, вместо того, zipчтобы быть точно таким же, поскольку это то, что ssh -Cпроисходит под капотом ... за исключением того, что взломать себя - это больше работы, чем просто использовать ssh -C.


Хорошо, я проверю, что gzipесть. Означает ли ваш ответ, что scp -rCэто, вероятно, самое эффективное решение, которое у меня есть?
Remi.b

1
Ваш ответ не считает, что -Cсжимает поток интерактивного протокола. Вы рассматриваете только данные. Так что ваши выводы неверны. Смотрите мой ответ
Мартин Прикрыл

@Celada Zip может писать в конвейер, так как каталог членов находится в конце. Однако, как вы сказали, для распаковки требуется попытаться извлечь более одного члена, и поэтому он не может читать из конвейера.
jrw32982 поддерживает Монику

20

-CФлаг обеспечивает сжатие GZIP из потока SSH.

Это эквивалент Accept-Encoding: gzipв HTTP.

Как работает флаг, зависит от типа передаваемых вами данных:

  • При передаче одного большого файла производительность будет примерно такой же, как при архивировании файла перед передачей (без учета эффективности алгоритма zip vs. gzip).

    Но -Cдля вас, как пользователя, вам потребуется меньше усилий.

  • При передаче большого количества небольших файлов производительность будет ниже, чем при архивировании перед передачей.

    Причиной этого является то, что перед каждой передачей файлов существует интерактивная связь между сервером SCP и клиентом (для обмена метаданными файла, такими как отметка времени и разрешения). Поэтому обеим сторонам придется немного подождать, пока другая сторона ответит (сжатие не поможет во время ожидания). Это потерянное время для каждого переданного файла. Сколько тратится времени, зависит от времени ожидания соединения. В конце концов, передача может быть на несколько медленнее.

    При передаче одного заархивированного файла это общение происходит только один раз.


8

Включает сжатие gzip в ssh (под scp).

При медленном соединении это ускорит процесс, при любом достаточно быстром соединении (100 Мбит или быстрее) сжатие, скорее всего, замедлит процесс.

Это будет более или менее эффективно, чем zip, в зависимости от того, будет ли gzip (в частности, gzip -6) более или менее эффективным, чем выбранный вами уровень сжатия zip.


1
В моем конкретном случае у меня относительно хорошее соединение (я нахожусь в кампусе), но папки, которые мне нужно скопировать, очень большие (~ 100 ГБ на 442 .binи .txtфайлы). Так вы бы предложили просто использовать scp -rи без -Cфлажка, и без zip, gzipнет tar?
Remi.b

2
@ Remi.b: Вы, вероятно, должны сравнить его в обоих направлениях и посмотреть. Вопрос заключается в том, достаточно ли быстродействует ЦП, чтобы сжимать данные с большей скоростью, чем это может быть отправлено по сети без сжатия. Таким образом, ответ будет зависеть от вашей конкретной машины и сети.
Нейт Элдредж,

Хорошо, я получил очко +1. Спасибо за вашу помощь
Remi.b

Сам SSH, похоже, потребляет некоторый процессор, который я замечаю, иногда его максимальная скорость намного ниже максимальной пропускной способности. Не уверен, что там делать ...
rogerdpack

Производительность также зависит от данных. Копирование файла, который по существу состоит из всех нулей, будет сильно сжатым. У меня есть связь 500 Мб между двумя удаленными серверами, и я просто скопировал файл 50G (VMWare VMDK), содержащий все нули по этой ссылке со скоростью ~ 128-130 МБ / с (вероятно, с некоторым ограничением буфера сжатия scp), что заняло всего около 6-7 минут. Без сжатия это заняло бы 1:45 часа. Ваш пробег будет варьироваться в зависимости от сложности данных и от того, насколько хорошо они могут быть сжаты.
Topher
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.