Czym różni się `scp` od` rsync`?

241

Artykuł na temat konfigurowania blogów Ghost mówi o używaniu scpdo kopiowania z mojego komputera lokalnego na zdalny serwer:

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

Jednak Railscast 339: Chef Solo Basics używa scpdo kopiowania w przeciwnym kierunku (z serwera zdalnego do komputera lokalnego):

scp -r [email protected]:/var/chef .

W tym samym Railscast, gdy autor chce skopiować pliki na zdalny serwer (w tym samym kierunku, co w pierwszym przykładzie), używa rsync:

rsync -r . [email protected]:/var/chef

Po co używać rsyncpolecenia, jeśli scpkopiuje się w obu kierunkach? Czym się scpróżni rsync?

Leahcim
źródło
poza tym, że jest prostszy i zawsze szyfrowany, nikt nie wskazał niczego, co scp może zrobić lepiej niż „rsync -aA”. Wolę „rsync -aAX - usuń źródło dest”. kasa bsync do synchronizacji dwukierunkowej.
Tomachi

Odpowiedzi:

345

Główną różnicą między tymi narzędziami jest sposób kopiowania plików.

scpw zasadzie czyta plik źródłowy i zapisuje go w miejscu docelowym. Wykonuje zwykłą liniową kopię, lokalnie lub przez sieć.

rsynckopiuje także pliki lokalnie lub przez sieć. Ale wykorzystuje specjalny algorytm transferu delta i kilka optymalizacji, aby znacznie przyspieszyć działanie. Rozważ połączenie.

rsync A host:B
  • rsyncsprawdzi rozmiary plików i znaczniki czasu modyfikacji zarówno A, jak i B , i pominie dalsze przetwarzanie, jeśli się zgadzają.

  • Jeśli plik docelowy B już istnieje, algorytm transferu delta upewni się, że tylko różnice między A i B zostaną przesłane przewodem.

  • rsyncbędzie zapisywać dane do pliku tymczasowego T , a następnie zastąpić plik docelowy B z T , aby wygląd update „atomowy” do procesów, które mogą być z wykorzystaniem B .

Kolejna różnica między nimi dotyczy inwokacji. rsyncma mnóstwo opcji wiersza poleceń, co pozwala użytkownikowi dokładnie dostosować jego zachowanie. Obsługuje złożone reguły filtrowania, działa w trybie wsadowym, w trybie demona itp. scpMa tylko kilka przełączników.

Podsumowując, używaj scpdo codziennych zadań. Polecenia, które wpisujesz raz na jakiś czas w interaktywnej powłoce. Jest prostszy w użyciu, a w takich przypadkach rsyncoptymalizacje niewiele pomogą.

Do powtarzających się zadań, takich jak cronzadania, użyj rsync. Jak wspomniano, przy wielu wywołaniach skorzysta z danych już przesłanych, działa bardzo szybko i oszczędza zasoby. Jest to doskonałe narzędzie do synchronizacji dwóch katalogów w sieci.

Również, gdy mamy do czynienia z dużymi plikami, korzystać rsyncz -Popcji. Jeśli transfer zostanie przerwany, możesz go wznowić w miejscu, w którym został zatrzymany, ponownie wydając polecenie. Zobacz Sid Kshatriya za odpowiedź .

Rafa
źródło
14
Mówisz, że używasz scp do codziennych zadań. Z twojego wyjaśnienia i OP wydaje się, że interfejs dwóch narzędzi, gdy są używane bez opcji, jest identyczny. Jeśli rsync ma lepszą implementację, a interfejsy są takie same, dlaczego nie zawsze używać rsync?
Alex
5
Ich interfejs nie jest taki sam, nawet bez opcji. Rsync ma specjalną interpretację ukośnika końcowego na argumencie źródłowym (zsynchronizuj sam katalog z jego zawartością). To może mieć inne problemy, nie jestem pewien.
Rafa
2
Sądzę też, że scpjest bardziej prawdopodobne, że będzie dostępny w systemie podobnym do Uniksa, więc od czasu do czasu zapobiegasz irytującemu poleceniu „nie znaleziono”.
Rafa
2
@ erikb85 rsync ma flagę -P, która wyświetli pasek postępu i umożliwi wznowienie z częściowo ukończonego transferu. digitalocean.com/community/tutorials/…
Ben
1
Kolejna różnica interfejsu między scpi rsync: rsync -aw scp -rpcelu zachowania czasów modyfikacji i uprawnień.
Rafa
71

rysnc może być przydatny do uruchamiania na wolnych i zawodnych połączeniach. Więc jeśli pobieranie zostanie przerwane w środku dużego pliku, rysnc będzie mógł kontynuować od miejsca, w którym przerwał po ponownym wywołaniu.

Posługiwać się rsync -vP username@host:/path/to/file .

Opcja -P zachowuje częściowo pobrane pliki, a także pokazuje postęp.

Jak zwykle sprawdź man rsync

Sid Kshatriya
źródło
32

Różnica b / w scp i rsync dla różnych parametrów

1. Wydajność w stosunku do opóźnienia

  • scp : scp jest stosunkowo mniej optymalizowany i szybszy

  • rsync : rsync jest stosunkowo bardziej zoptymalizowany i przyspiesza

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

2. Obsługa przerwań

  • scp : narzędzie wiersza polecenia scp nie może wznowić przerwanego pobierania z utraconych połączeń sieciowych

  • rsync: Jeśli powyższa sesja rsync zostanie przerwana, możesz ją wznowić tyle razy, ile chcesz, wpisując to samo polecenie. rsync automatycznie zrestartuje transfer w miejscu, w którym zostało przerwane.

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

3. Przykład polecenia

scp

$ scp source_file_path destination_file_path

rsync

$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh [email protected]:bigdata.tgz ./bigdata.tgz 

-POpcja jest taka sama jak --partial --progress, pozwalając rsync do pracy z częściowo pobranych plików. Ta --rsh=sshopcja mówi rsync, aby używała ssh jako zdalnej powłoki.

4. Bezpieczeństwo:

scp jest bezpieczniejszy. Musisz użyć, rsync --rsh=sshaby uczynić go tak bezpiecznym jak scp.

dokument, aby dowiedzieć się więcej:

wykres wydajności

Amitesh
źródło
Dzięki za tę nową odpowiedź, szczególnie za część dotyczącą bezpieczeństwa.
zhihong
w wielu systemach domyślnie używany jest ssh. serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
qwr
2
O bezpieczeństwie, z informacji o wydaniu 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

Jedną z głównych cech rsyncover scp(oprócz algorytmu delta i szyfrowania, jeśli jest używany w / ssh) jest to, że automatycznie weryfikuje, czy przesłany plik został poprawnie przesłany. Scp tego nie zrobi, co czasami może spowodować uszkodzenie podczas przesyłania większych plików. Ogólnie więc rsync jest kopią z gwarancją .

Strony Centos wspominają o tym na końcu --checksumopisu opcji:

Zauważ, że rsync zawsze sprawdza, czy każdy przesłany plik został poprawnie zrekonstruowany po stronie odbierającej, sprawdzając sumę kontrolną całego pliku, która jest generowana podczas przesyłania pliku, ale automatyczna weryfikacja po przesłaniu nie ma nic wspólnego z tą opcją przed- the-transfer „Czy ten plik wymaga aktualizacji?” czek.

liczyć 0
źródło
5

Jest dla mnie rozróżnienie, które scpzawsze jest szyfrowane za pomocą ssh (bezpieczna powłoka), ale rsyncniekoniecznie jest szyfrowane. Mówiąc dokładniej, rsyncsam nie wykonuje żadnego szyfrowania; nadal może korzystać z innych mechanizmów (na przykład ssh) do szyfrowania.

Oprócz bezpieczeństwa szyfrowanie ma również duży wpływ na szybkość przesyłania, a także na obciążenie procesora. (Moje doświadczenie jest takie, że rsyncmoże być znacznie szybsze niż scp.)

Sprawdź ten wpis, kiedy rsyncjest włączone szyfrowanie.

Samuel Li
źródło
1

scp jest najlepszy dla jednego pliku.
LUB połączenie tari kompresja dla mniejszych zestawów danych, takich jak drzewa kodu źródłowego z małymi zasobami ( np . Obrazy, sqlite itp .).


Jednak kiedy zaczynasz zajmować się większymi tomami, powiedz:

  • foldery multimedialne (40 GB)
  • kopie zapasowe bazy danych (28 GB)
  • biblioteki mp3 (100 GB)

Niepraktyczne staje się budowanie pliku zip / tar.gz , który w tym momencie zostanie przesłany za pomocą scp do fizycznych ograniczeń hostowanego serwera.

Jako ćwiczenie można zrobić kilka gimnastyka jak rurociągi tardo sshi przekierowanie wyników do zdalnego pliku. (oszczędzając konieczności zbudowania swapu lub tymczasowego klonowania, czyli zip lub tar.gz)

Jednakże ,

Proces rsync upraszcza ten proces i umożliwia przesyłanie danych bez zajmowania dodatkowego miejsca na dysku.

również ,

Ciągłe aktualizacje (cron?) Wykorzystują minimalne zmiany w porównaniu z pełnymi klonowanymi kopiami, które przyspieszają migrację dużych danych w czasie.

tl; dr
scp == mała skala (z miejscem na skompresowane pliki na tym samym dysku)
rsync== duża skala (z koniecznością tworzenia kopii zapasowych dużych danych i bez miejsca)

copremesis
źródło
-1

lepiej myśleć w praktycznym kontekście. W naszym zespole rsync -aPzastępujemy złego hosta Cassandra w naszym klastrze. Nie możemy tego zrobić za pomocą scp (powolne i bez zachowania postępu).

del Bao
źródło
Nie przynosząc niczego, co nie zostało jeszcze wspomniane w innych odpowiedziach. Ponadto nie powinniśmy nawet odpowiadać na pytania nie na temat.
Dan Cornilescu,
1
@ DanCornilescu opisuje to przypadek użycia w prawdziwym scenariuszu, co ułatwia innym zrozumienie różnicy. Nie widzę innych podobnych odpowiedzi
del bao,
2
Zobacz wyjaśnienia -P i uwagi dotyczące powolności / prędkości w odpowiedziach Sida i Rafy.
Dan Cornilescu