Чем `scp` отличается от` rsync`?


241

В статье о настройке блогов Ghost говорится, что нужно использовать scpдля копирования с моего локального компьютера на удаленный сервер:

scp -r ghost-0.3 root@*your-server-ip*:~/

Однако Railscast 339: Chef Solo Basics использует scpдля копирования в обратном направлении (с удаленного сервера на локальный компьютер):

scp -r root@178.xxx.xxx.xxx:/var/chef .

В том же Railscast, когда автор хочет скопировать файлы на удаленный сервер (в том же направлении, что и в первом примере), он использует rsync:

rsync -r . root@178.xxx.xxx.xxx:/var/chef

Зачем использовать rsyncкоманду, если scpбудет копировать в обоих направлениях? Чем scpотличается от rsync?


кроме того, что он прост и всегда зашифрован, никто не указал на то, что scp может сделать лучше, чем «rsync -aA». Я предпочитаю "rsync -aAX - удалить исходный адрес". Оформить заказ bsync для двусторонней синхронизации.
Tomachi

Ответы:


345

Основное различие между этими инструментами заключается в том, как они копируют файлы.

scpв основном читает исходный файл и записывает его в место назначения. Он выполняет обычное линейное копирование, локально или по сети.

rsyncтакже копирует файлы локально или по сети. Но он использует специальный алгоритм дельта-переноса и несколько оптимизаций, чтобы сделать операцию намного быстрее. Рассмотрим звонок.

rsync A host:B
  • rsyncпроверит размеры файлов и метки времени изменения как A, так и B , и пропустит любую дальнейшую обработку, если они совпадают.

  • Если целевой файл B уже существует, алгоритм дельта-передачи обеспечит передачу только различий между A и B по проводам.

  • rsyncбудет записывать данные во временный файл T , а затем замените файл назначения B с T , чтобы сделать обновление взгляд «атомным» для процессов , которые могли бы использовать B .

Другое различие между ними касается вызова. rsyncимеет множество параметров командной строки, что позволяет пользователю точно настроить его поведение. Он поддерживает сложные правила фильтрации, работает в пакетном режиме, в режиме демона и т. Д. scpИмеет всего несколько переключателей.

Таким образом, используйте scpдля ваших повседневных задач. Команды, которые вы вводите время от времени в своей интерактивной оболочке. Его проще использовать, и в этих случаях rsyncоптимизация не сильно поможет.

Для повторяющихся задач, таких как cronзадания, используйте rsync. Как уже упоминалось, при многократных вызовах будут использоваться преимущества уже переданных данных, которые выполняются очень быстро и экономят ресурсы. Это отличный инструмент для синхронизации двух каталогов по сети.

Кроме того , при работе с большими файлами, использовать rsyncс -Pопцией. Если передача прервана, вы можете возобновить ее с того места, где она была остановлена, повторно введя команду. Смотрите ответ Сид Кшатрия .


14
Вы говорите использовать scp для повседневных задач. Из вашего объяснения и ОП видно, что интерфейс для двух инструментов при использовании без опций идентичен. Если rsync имеет улучшенную реализацию и интерфейсы одинаковы, почему бы не всегда использовать rsync?
Алекс

5
Их интерфейс не такой, даже без опций. Rsync имеет специальную интерпретацию завершающего слеша исходного аргумента (синхронизирует сам каталог с его содержимым). Возможно, есть другие ошибки, я не уверен.
Рафа

2
Кроме того, я думаю, scpчто более вероятно, будет доступно в Unix-подобной системе, так что вы предотвращаете раздражающую «команду не найдена» время от времени.
Рафа

2
@ erikb85 rsync имеет флаг -P, который отображает индикатор выполнения и позволяет возобновить частично завершенную передачу. digitalocean.com/community/tutorials/…
Бен

1
Еще одно различие в интерфейсе между scpи rsync: по rsync -aсравнению scp -rpс сохранением времени модификации и разрешений.
Рафа

71

rysnc может быть полезен для работы на медленных и ненадежных соединениях. Таким образом, если ваша загрузка прерывается в середине большого файла, rysnc сможет продолжить с того места, на котором остановился, при повторном вызове.

использование rsync -vP username@host:/path/to/file .

Опция -P сохраняет частично загруженные файлы, а также показывает прогресс.

Как обычно проверить man rsync


32

Разница ч / б scp и rsync по разным параметрам

1. Производительность за время ожидания

  • scp : scp относительно менее оптимизирован и ускорен

  • rsync : rsync сравнительно более оптимизирован и быстр

https://www.disk91.com/2014/technology/networks/compare-performance-of-different-file-transfer-protocol-over-latency/

2. Обработка прерываний

  • scp : утилита командной строки scp не может возобновить прерванные загрузки из потерянных сетевых подключений

  • rsync: Если указанный выше сеанс rsync прерван, вы можете возобновить его столько раз, сколько захотите, введя одну и ту же команду. rsync автоматически перезапустит передачу с того места, где он остановился.

http://ask.xmodulo.com/resume-large-scp-file-transfer-linux.html

3. Пример команды

УПП

$ scp source_file_path destination_file_path

Rsync

$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh userid@remotehost.com:bigdata.tgz ./bigdata.tgz 

-PВариант такого же , как --partial --progress, что позволяет Rsync для работы с частично загруженными файлами. --rsh=sshОпция говорит Rsync для использования SSH в качестве удаленной оболочки.

4. Безопасность:

scp более безопасен. Вы должны использовать его, rsync --rsh=sshчтобы сделать его таким же безопасным, как scp.

человек документ, чтобы узнать больше:

график производительности


Спасибо за этот новый ответ, особенно за безопасность.
Чжихун

во многих системах ssh используется по умолчанию. serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
qwr

2
О безопасности, из примечаний к выпуску openSSH 8.0 : The scp protocol is outdated, inflexible and not readily fixed. We recommend the use of more modern protocols like sftp and rsync for file transfer instead.
downtheroad

6

Одной из основных особенностей rsyncover scp(помимо дельта-алгоритма и шифрования, если используется w / ssh) является то, что он автоматически проверяет, был ли переданный файл передан правильно. Scp не сделает этого, что иногда может привести к повреждению при передаче больших файлов. Так что в целом rsync это копия с гарантией .

Руководства Centos упоминают об этом в конце --checksumописания опции:

Обратите внимание, что rsync всегда проверяет, что каждый переданный файл был правильно восстановлен на принимающей стороне, проверяя контрольную сумму всего файла, которая генерируется при передаче файла, но эта автоматическая проверка после передачи не имеет ничего общего с этой опцией the-перевод «Нужно ли обновлять этот файл?» чек.


5

Для меня есть различие, scpкоторое всегда шифруется с помощью ssh (безопасная оболочка), хотя rsyncне обязательно шифруется. Более конкретно, rsyncне выполняет никакого шифрования само по себе; он все еще может использовать другие механизмы (например, ssh) для выполнения шифрования.

В дополнение к безопасности, шифрование также оказывает большое влияние на скорость передачи данных и нагрузку на процессор. (Мой опыт показывает, что это rsyncможет быть значительно быстрее, чем scp.)

Проверьте этот пост, когда rsyncшифрование включено.


1

scp лучше всего подходит для одного файла.
ИЛИ сочетание tar& сжатия для небольших наборов данных, таких как деревья исходного кода с небольшими ресурсами ( например, изображения, sqlite и т . Д. ).


Тем не менее , когда вы начинаете работать с большими объемами, говорите:

  • мультимедийные папки (40 ГБ)
  • резервные копии базы данных (28 ГБ)
  • mp3-библиотеки (100 ГБ)

На этом этапе нецелесообразно создавать файл zip / tar.gz для передачи с помощью scp в соответствии с физическими ограничениями размещаемого сервера.

В качестве упражнения, вы можете сделать некоторую гимнастику , как конвейер tarв sshи перенаправлять результаты в удаленный файл. (избавляя от необходимости создавать своп или временный клон aka zip или tar.gz)

Тем не менее ,

rsync упрощает этот процесс и позволяет передавать данные, не занимая дополнительного дискового пространства.

Кроме того ,

Непрерывные (cron?) Обновления используют минимальные изменения по сравнению с полными клонированными копиями, что ускоряет перенос больших объемов данных с течением времени.

tl; dr
scp == мелкомасштабный (с возможностью создания сжатых файлов на одном диске)
rsync== крупномасштабный (с необходимостью делать резервные копии больших данных и места не остается)


-1

лучше думать в практическом контексте. В нашей команде мы используем rsync -aPзамену плохого хоста кассандры в нашем кластере. Мы не можем сделать это с помощью scp (медленно и без сохранения прогресса).


На самом деле не принес ничего, что еще не упомянуто в других ответах. Кроме того, мы не должны даже отвечать на вопросы не по теме.
Дэн Корнилеску

1
@DanCornilescu описывает сценарий использования в реальном сценарии, который позволяет другим понять разницу. Я не вижу других подобных ответов
del bao

2
См -P объяснил и заметки о медлительности / скорости в ответах Сида и Рафы.
Дэн Корнилеску
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.