Що прапор `-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це дуже файловий формат файлу "windows". Ви майже ніколи не побачите або не будете потрібні під час роботи машини Linux з вбудованою програмою Linux. tarвикористовується для згортання каталогів в один файл, зберігаючи при цьому права доступу і імена і такі, в той час як gzip, bzip2, xzі т.д. використовуються для стиснення файлів. tars часто стискаються, створюючи 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робиться під кришкою ... за винятком того, що gzipping себе - це більше роботи, ніж просто використання ssh -C.


Гаразд, я перевірю, що gzipтаке. Чи означає ваша відповідь, що scp -rCце, мабуть, найефективніше рішення у мене?
Remi.b

1
Ваша відповідь не враховує, що -Cстискає інтерактивний потік протоколів. Ви враховуєте лише дані. Тож ваші висновки помилкові. Дивіться мою відповідь
Мартін Прикрил

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

20

-CПрапор забезпечує стиснення GZIP з потоку SSH.

Це еквівалент Accept-Encoding: gzipHTTP.

Дія прапора залежить від типу даних, які ви передаєте:

  • При перенесенні одного великого файлу продуктивність буде майже такою ж, як і в zip-файлі перед передачею (нехтування ефективністю алгоритму zip проти gzip).

    Але використання -C- це менше зусиль для вас як користувача.

  • При передачі безлічі невеликих файлів продуктивність буде нижчою від завантаження файлів перед передачею.

    Причиною тому є те, що перед кожною передачею файлів існує інтерактивна комунікація між сервером SCP та клієнтом (для обміну метаданими файлів, як часова мітка та дозволи). Тому обидві сторони повинні трохи зачекати, щоб відповіла інша сторона (стиснення не допоможе під час очікування). Це витрачений час для кожного переданого файлу. Скільки витрачається часу, залежить від затримки з'єднання. Зрештою, передача може бути на величину повільнішою.

    Коли ви передаєте один заархівований файл, це повідомлення відбувається лише один раз.


8

Це дозволяє стиснути gzip в ssh (під scp).

На повільних з'єднаннях це пришвидшить роботу, при будь-якому досить швидкому з'єднанні (100 Мбіт або швидше) стиснення, швидше за все, сповільнить роботу.

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


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

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

Гаразд, я отримав бал +1. Дякуємо за вашу допомогу
Remi.b

Сам SSH, здається, займає деякий процесор, який я помічаю, іноді максимум значно нижче вашої пропускної здатності. Не впевнений, що там робити ...
rogerdpack

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