Unterschiede zwischen rsync auf remote und rsync local auf gemounteten sshfs?

12

Gibt es einen Unterschied, wenn ich rsync mit dem Remote-Host (ssh: //) als Quelle / Ziel ausführe oder den lokalen Pfad verwende, um das bereitgestellte Verzeichnis über sshfs freizugeben?

Könnte es Unterschiede in Bezug auf Sicherheit oder Kopiergeschwindigkeit ohne Verwendung von Switches geben, verwenden Sie einfach den rsync-Archivmodus und den Remote-Host-Pfad (ssh). Das gleiche gilt für sshfs mount nur mit Quelle und Ziel (keine Verschlüsselungsänderungen, nur Standard).

galq
quelle

Antworten:

17

SSHFS ist praktisch, passt aber nicht gut zu rsync oder allgemeiner zu Synchronisationstools.

Das größte Problem ist, dass SSHFS die Leistungsoptimierungen von rsync weitgehend zunichte macht. Insbesondere bei mittleren bis großen Dateien berechnet rsync, wenn es feststellt, dass eine Datei geändert wurde, Prüfsummen für Teile der Datei auf jeder Seite, um nur die Teile zu übertragen, die geändert wurden. Dies ist nur dann eine Optimierung, wenn die Netzwerkbandbreite erheblich kleiner als die Festplattenbandbreite ist, was normalerweise der Fall ist. Bei SSHFS ist die "Festplatten" -Bandbreite tatsächlich die Netzwerkbandbreite, sodass rsync die gesamte Datei lesen müsste, um zu bestimmen, was kopiert werden soll. Tatsächlich kopiert rsync mit einer lokalen Kopie (was rsync betrifft, selbst wenn sich eine der Seiten auf SSHFS befindet) nur die gesamte Datei.

SSHFS beeinträchtigt auch die Leistung, wenn viele kleine Dateien vorhanden sind. Rsync muss mindestens die Metadaten jeder Datei überprüfen, um festzustellen, ob sie geändert wurde. Bei SSHFS ist für jede Datei ein Netzwerk-Roundtrip erforderlich. Mit rsync über SSH können beide Seiten parallel arbeiten und Informationen in großen Mengen übertragen, was viel schneller ist.

In Bezug auf Zugriffsbeschränkungen erfordert SSHFS einen SFTP-Zugriff, während rsync die Fähigkeit erfordert, Code (insbesondere das rsync-Programm) über eine Shell auszuführen. Wenn der Benutzer kein Shell-Konto hat, ist es möglich und üblich, einem Konto eine spezielle Shell zur Verfügung zu stellen, mit der nur wenige Programme ausgeführt werden können, einschließlich sftp-serverund rsync. Siehe Benötigen Sie eine Shell für SCP?

Wenn Sie nur neue Dateien kopieren und nicht sehr viele Dateien vorhanden sind, gibt es keinen signifikanten Leistungsunterschied.

SSHFS stellt eine SSH-Verbindung her, wenn das Dateisystem bereitgestellt wird, und behält diese Verbindung bei, bis die Bereitstellung aufgehoben wird. Rsync stellt jedes Mal eine neue Verbindung her, wenn Sie sie ausführen. Sie können jedoch die Multiplexing-Funktion und das Huckepack für eine einzelne Hauptverbindung verwenden , um eine Authentifizierung jedes Mal zu vermeiden.

SSHFS ist ein FUSE-Dateisystem und unterstützt daher nur herkömmliche Unix-Metadaten und ACLs. Rsync kann erweiterte Attribute übertragen (Sie müssen verwenden rsync -aAX, beachten Sie, dass in einer Ebene -anur herkömmliche Unix-Metadaten erhalten bleiben).

Gilles 'SO - hör auf böse zu sein'
quelle
Zum Beispiel habe ich eine einzelne komprimierte Datei im bereitgestellten SSHFS-Verzeichnis und diese Datei wird in mein lokales Verzeichnis kopiert. Später wird diese Datei im bereitgestellten Verzeichnis aktualisiert und ich möchte nur den aktualisierten Abschnitt mit in mein lokales Verzeichnis kopieren rsync --no-whole-file /mounted/file.tar.gz /home/local/file.tar.gz. Wenn ich rsyncfür diesen Vorgang während der Berechnung der Prüfsumme verwende, um nur die geänderten Teile zu übertragen, rsyncsollte die gesamte Datei gelesen werden, wodurch die vollständigen Daten heruntergeladen werden und nicht nur der aktualisierte Abschnitt? @Gilles
Alper
1
@alper Wenn Sie rsync über sshfs verwenden, muss rsync die gesamte Datei lesen. Es kann nicht wissen, was sonst aktualisiert werden muss. Es gibt keine Möglichkeit zur Optimierung, indem nur Prüfsummen übertragen werden, da es keine Möglichkeit gibt, Prüfsummen auf dem Server zu berechnen.
Gilles 'SO - hör auf böse zu sein'
Wäre es dasselbe, wenn der Zielspeicherort eher ein bereitgestellter Ordner als eine sshfsVerbindung ist? Bitte sehen Sie: unix.stackexchange.com/q/544404/198423 @Gilles
alper
4

Um Ihre Hauptfrage zu beantworten: Ja, es gibt Unterschiede. Wenn sshfseine Verbindung besteht, die den Zugriff auf Remote-Dateien über einen sicheren Kanal ermöglicht, und mit rsync über ssh, ist dieser sichere Kanal so eingerichtet, dass er mit einer Remote-rsync-Instanz kommuniziert .

Um Ihre sekundäre Frage zu beantworten: Die rsync über ssh ist für die meisten, wenn nicht alle Instanzen schneller, da die rsync auf dem Remote-System mehr Intelligenz beim Auffinden von Dateien bietet, die nicht synchronisiert werden müssen, aber hauptsächlich, weil sie parallel zu Ihrer ausgeführt wird lokaler rsync, um diese Informationen zu sammeln.

Die Sicherheit beider Möglichkeiten ist unter der Annahme einer ähnlichen Konfiguration der ssh-Parameter (Schlüssellänge, Algorithmen) gleich. Welche Standardeinstellungen für Ihr Quell- und Zielsystem gelten, hängt von den Verteilungskombinationen auf diesen Systemen ab.

Anthon
quelle