Wie unterscheidet sich "scp" von "rsync"?

241

In einem Artikel zum Einrichten des Ghost-Bloggens heißt es, dass scpzum Kopieren von meinem lokalen Computer auf einen Remote-Server Folgendes verwendet werden soll:

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

Allerdings Railscast 339: Chef Solo Basics nutzt scpin der entgegengesetzten Richtung (von dem Remote - Server auf dem lokalen Rechner) zu kopieren:

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

Wenn der Autor im selben Railscast Dateien auf den Remote-Server kopieren möchte (dieselbe Richtung wie im ersten Beispiel), verwendet er rsync:

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

Warum den rsyncBefehl verwenden, wenn scpin beide Richtungen kopiert wird? Wie unterscheidet scpsich von rsync?

Leahcim
quelle
Abgesehen davon, dass es einfacher und immer verschlüsselt ist, hat niemand auf etwas hingewiesen, das scp besser kann als "rsync -aA". Ich bevorzuge "rsync -aAX --delete source dest". Kasse bsync für bidirektionale Synchronisierung.
Tomachi

Antworten:

344

Der Hauptunterschied zwischen diesen Tools besteht darin, wie sie Dateien kopieren.

scpliest im Grunde die Quelldatei und schreibt sie in das Ziel. Es führt eine einfache lineare Kopie lokal oder über ein Netzwerk durch.

rsynckopiert auch Dateien lokal oder über ein Netzwerk. Es verwendet jedoch einen speziellen Delta-Übertragungsalgorithmus und einige Optimierungen, um den Vorgang erheblich zu beschleunigen. Betrachten Sie den Anruf.

rsync A host:B
  • rsyncüberprüft die Dateigrößen und Änderungszeitstempel von A und B und überspringt jede weitere Verarbeitung, wenn sie übereinstimmen.

  • Wenn die Zieldatei B bereits vorhanden ist, stellt der Delta-Übertragungsalgorithmus sicher, dass nur Unterschiede zwischen A und B über die Leitung gesendet werden.

  • rsyncschreibt Daten in eine temporäre Datei T und ersetzt dann die Zieldatei B durch T , damit das Update für Prozesse, die möglicherweise B verwenden , "atomar" aussieht .

Ein weiterer Unterschied zwischen ihnen betrifft die Anrufung. rsyncverfügt über eine Vielzahl von Befehlszeilenoptionen, mit denen der Benutzer sein Verhalten optimieren kann. Es unterstützt komplexe Filterregeln, wird im Batch-Modus, Daemon-Modus usw. ausgeführt und scpverfügt nur über wenige Schalter.

Zusammenfassend können Sie es scpfür Ihre täglichen Aufgaben verwenden. Befehle, die Sie gelegentlich in Ihre interaktive Shell eingeben. Es ist einfacher zu bedienen und in diesen Fällen rsynchelfen Optimierungen nicht viel.

cronVerwenden Sie für wiederkehrende Aufgaben wie Jobs rsync. Wie bereits erwähnt, werden bei mehreren Aufrufen bereits übertragene Daten genutzt, was sehr schnell funktioniert und Ressourcen spart. Es ist ein hervorragendes Tool, um zwei Verzeichnisse über ein Netzwerk synchron zu halten.

Auch wenn mit großen Dateien, verwenden Sie den Umgang rsyncmit der -POption. Wenn die Übertragung unterbrochen wird, können Sie sie an der Stelle fortsetzen, an der sie gestoppt wurde, indem Sie den Befehl erneut ausgeben. Siehe Sid Kshatriyas Antwort .

Rafa
quelle
14
Sie sagen, Sie sollen scp für Ihre täglichen Aufgaben verwenden. Aus Ihrer Erklärung und dem OP geht hervor, dass die Schnittstelle für die beiden Tools bei Verwendung ohne Optionen identisch ist. Wenn rsync die überlegene Implementierung hat und die Schnittstellen identisch sind, warum nicht immer rsync verwenden?
Alex
5
Ihre Benutzeroberfläche ist auch ohne Optionen nicht dieselbe. Rsync hat eine spezielle Interpretation eines abschließenden Schrägstrichs im Quellargument (synchronisieren Sie das Verzeichnis selbst mit seinem Inhalt). Es könnte andere Fallstricke geben, da bin ich mir nicht sicher.
Rafa
2
Ich würde auch vermuten, dass scpes wahrscheinlicher ist, dass es auf einem Unix-ähnlichen System verfügbar ist, sodass Sie hin und wieder verhindern, dass ein nerviger "Befehl nicht gefunden" wird.
Rafa
2
@ erikb85 rsync hat das Flag -P, das einen Fortschrittsbalken anzeigt und die Wiederaufnahme einer teilweise abgeschlossenen Übertragung ermöglicht. digitalocean.com/community/tutorials/…
Ben
1
Ein weiterer Unterschied zwischen scpund rsync: rsync -agegenüber scp -rpder Beibehaltung von Änderungszeiten und Berechtigungen.
Rafa
71

rysnc kann nützlich sein, um langsame und unzuverlässige Verbindungen auszuführen. Wenn Ihr Download mitten in einer großen Datei abgebrochen wird, kann rysnc an der Stelle fortfahren, an der es beim erneuten Aufrufen aufgehört hat.

Verwenden rsync -vP username@host:/path/to/file .

Die Option -P behält teilweise heruntergeladene Dateien bei und zeigt auch den Fortschritt an.

Wie immer prüfen man rsync

Sid Kshatriya
quelle
32

Differenz s / w scp und rsync bei verschiedenen Parametern

1. Leistung über Latenz

  • scp : scp ist relativ weniger optimiert und schneller

  • rsync : rsync ist vergleichsweise optimierter und schneller

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

2. Unterbrechungsbehandlung

  • scp : Das Befehlszeilentool scp kann abgebrochene Downloads von verlorenen Netzwerkverbindungen nicht fortsetzen

  • rsync: Wenn die obige rsync-Sitzung selbst unterbrochen wird, können Sie sie beliebig oft fortsetzen, indem Sie denselben Befehl eingeben. rsync startet die Übertragung automatisch dort neu, wo sie aufgehört hat.

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

3. Befehlsbeispiel

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 

Die -POption ist die gleiche wie --partial --progress, damit rsync mit teilweise heruntergeladenen Dateien arbeiten kann. Die --rsh=sshOption weist rsync an, ssh als Remote-Shell zu verwenden.

4. Sicherheit:

scp ist sicherer. Sie müssen es verwenden rsync --rsh=ssh, um es so sicher wie scp zu machen.

Mann Dokument, um mehr zu wissen:

Leistungsdiagramm

Amitesh
quelle
Vielen Dank für diese neue Antwort, insbesondere für den Sicherheitsteil.
Zhihong
Auf vielen Systemen wird standardmäßig ssh verwendet. serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
qwr
2
Über Sicherheit, aus openSSH 8.0 Versionshinweise : 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

Ein Hauptmerkmal von rsyncover scp(neben dem Delta-Algorithmus und der Verschlüsselung bei Verwendung mit ssh) ist, dass automatisch überprüft wird, ob die übertragene Datei korrekt übertragen wurde. Scp wird dies nicht tun, was gelegentlich zu einer Beschädigung beim Übertragen größerer Dateien führen kann. Im Allgemeinen ist rsync also eine Kopie mit Garantie .

Centos-Manpages erwähnen dies am Ende der --checksumOptionsbeschreibung:

Beachten Sie, dass rsync immer überprüft, ob jede übertragene Datei auf der Empfangsseite korrekt rekonstruiert wurde, indem eine Prüfsumme für die gesamte Datei überprüft wird, die beim Übertragen der Datei generiert wird. Die automatische Überprüfung nach der Übertragung hat jedoch nichts mit der vorherigen Option dieser Option zu tun. the-transfer "Muss diese Datei aktualisiert werden?" prüfen.

count0
quelle
5

Ich habe einen Unterschied, der scpimmer mit ssh (Secure Shell) rsyncverschlüsselt ist, aber nicht unbedingt verschlüsselt ist. Insbesondere rsyncführt keine Verschlüsselung selbst durch; Es kann weiterhin andere Mechanismen (z. B. ssh) verwenden, um die Verschlüsselung durchzuführen.

Neben der Sicherheit hat die Verschlüsselung auch einen großen Einfluss auf Ihre Übertragungsgeschwindigkeit sowie den CPU-Overhead. (Meine Erfahrung ist, dass rsyncdas deutlich schneller sein kann als scp.)

In diesem Beitrag erfahren Sie, wann rsyncdie Verschlüsselung aktiviert ist.

Samuel Li
quelle
1

scp ist am besten für eine Datei.
ODER eine Kombination aus tar& Komprimierung für kleinere Datensätze wie Quellcodebäume mit kleinen Ressourcen (z. B. Bilder, SQLite usw. ).


Und doch , wenn Sie mit beginnen Umgang größeren Mengen sagen:

  • Medienordner (40 GB)
  • Datenbanksicherungen (28 GB)
  • MP3-Bibliotheken (100 GB)

Es wird unpraktisch, eine zip / tar.gz- Datei zu erstellen, die an dieser Stelle mit scp an die physischen Grenzen des gehosteten Servers übertragen werden soll.

Als Übung können Sie einige tun Gymnastik wie Rohrleitungen tarin sshdie Ergebnisse in eine und Umleitung Remote - Datei. (Sie müssen keinen Swap oder temporären Klon erstellen, auch bekannt als zip oder tar.gz).

Allerdings ist

rsync vereinfacht diesen Vorgang und ermöglicht Ihnen das Übertragen von Daten, ohne zusätzlichen Speicherplatz zu beanspruchen.

auch ,

Kontinuierliche (cron?) Updates verwenden nur minimale Änderungen, während vollständig geklonte Kopien die Migration großer Datenmengen im Laufe der Zeit beschleunigen.

tl; dr
scp == kleiner Maßstab (mit Platz zum Erstellen komprimierter Dateien auf demselben Laufwerk)
rsync== großer Maßstab (mit der Notwendigkeit, große Datenmengen zu sichern und keinen Platz mehr zu haben)

Kopremesis
quelle
-1

Es ist besser, in einem praktischen Kontext zu denken. In unserem Team rsync -aPersetzen wir einen fehlerhaften Cassandra-Host in unserem Cluster. Wir können dies nicht mit scp tun (langsame und keine Fortschrittserhaltung).

del bao
quelle
Nicht wirklich etwas mitbringen, was in den anderen Antworten noch nicht erwähnt wurde. Außerdem sollten wir nicht einmal Fragen außerhalb des Themas beantworten.
Dan Cornilescu
1
@DanCornilescu Hier wird ein Anwendungsfall in einem realen Szenario beschrieben, der es anderen erleichtert, den Unterschied zu verstehen. Ich sehe keine ähnlichen Antworten
del bao
2
Siehe -P erklärte und langsame / geschwindigkeitsbezogene Hinweise in Sids und Rafas Antworten.
Dan Cornilescu