Чим `scp` відрізняється від` rsync`?


241

У статті про налаштування Ghost blogging йдеться про використання 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 - видалити dest джерело". каси bsync для двосторонньої синхронізації.
Томачі

Відповіді:


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опцією. Якщо передача перервана, ви можете відновити її там, де вона зупинилася, перезапустивши команду. Див Sid кшатріїв в відповідь .


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

Різниця b / w 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

$ 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
Про безпеку, від примітки до випуску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.
openSSH

6

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

Centos manpages згадує про це в кінці --checksumопису опції:

Зауважте, що rsync завжди перевіряє, що кожен переданий файл був реконструйований правильно на приймальній стороні, перевіряючи контрольну суму цілого файлу, що генерується під час передачі файлу, але автоматична перевірка після передачі не має нічого спільного з цим параметром перед the-transfer "Чи потрібно оновити цей файл?" перевірити.


5

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

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

Ознайомтеся з цією публікацією, коли rsyncввімкнено шифрування.


1

scp найкраще для одного файлу.
АБО комбінація tar& стиснення для менших наборів даних, таких як дерева вихідного коду з невеликими ресурсами ( тобто зображення, sqlite тощо ).


Однак , коли ви починаєте займатися більшими обсягами, скажіть:

  • папки медіа (40 Гб)
  • резервне копіювання бази даних (28 ГБ)
  • mp3-бібліотеки (100 ГБ)

Створювати zip / tar.gz файл для передачі за допомогою scp в цей момент стає недоцільним до фізичних обмежень розміщеного сервера.

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

Однак ,

rsync спрощує цей процес і дозволяє передавати дані, не витрачаючи додаткового місця на диску.

Також ,

Безперервне (cron?) Оновлення використовує мінімальні зміни порівняно з повними клонованими копіями, прискорюючи великі міграції даних з часом.

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


-1

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


Насправді не приносячи нічого, що ще не було зазначено в інших відповідях. Крім того, ми навіть не повинні відповідати на тематичні питання.
Дан Корнілеску

1
@DanCornilescu це описує випадок використання в реальному сценарії, що дозволяє іншим зрозуміти різницю. Я не бачу жодної іншої подібної відповіді
дель бао

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