Différences entre rsync sur distant et rsync local sur sshfs montés?

12

Y a-t-il une différence si j'exécute rsync avec l'hôte distant (ssh: //) comme source / destination ou si j'utilise le chemin local pour partager le répertoire monté via sshfs?

Pourrait-il y avoir des différences en termes de sécurité ou de vitesse de copie sans utilisation de commutateurs, il suffit de piquer le mode d'archivage rsync et le chemin de l'hôte distant (ssh). De même avec le montage sshfs uniquement avec la source et la destination (pas de changement de chiffrement, juste par défaut).

galq
la source

Réponses:

17

SSHFS est pratique, mais il ne fonctionne pas bien avec rsync ou plus généralement avec les outils de synchronisation.

Le plus gros problème est que SSHFS tue largement les optimisations de performances de rsync. En particulier, pour les fichiers de taille moyenne à grande, lorsque rsync voit qu'un fichier a été modifié, il calcule les sommes de contrôle sur les parties du fichier de chaque côté afin de ne transférer que les parties qui ont été modifiées. Il s'agit d'une optimisation uniquement si la bande passante du réseau est nettement inférieure à la bande passante du disque, ce qui est généralement le cas. Mais avec SSHFS, la bande passante du «disque» est en fait la bande passante du réseau, donc rsync devrait lire le fichier entier afin de déterminer quoi copier. En fait, avec une copie locale (ce qui est le cas, en ce qui concerne rsync, même si l'un des côtés est sur SSHFS), rsync copie simplement tout le fichier.

SSHFS nuit également aux performances s'il existe de nombreux petits fichiers. Rsync doit vérifier au moins les métadonnées de chaque fichier pour déterminer s'il a été modifié. Avec SSHFS, cela nécessite un aller-retour réseau pour chaque fichier. Avec rsync sur SSH, les deux parties peuvent travailler en parallèle et transférer des informations en masse, ce qui est beaucoup plus rapide.

En termes de restrictions d'accès, SSHFS nécessite un accès SFTP, tandis que rsync nécessite la possibilité d'exécuter du code (en particulier, le programme rsync) via un shell. Si l'utilisateur n'a pas de compte shell, il est possible et courant de fournir un compte avec un shell spécial qui ne permet d'exécuter que quelques programmes, y compris sftp-serveret rsync. Voir Avez-vous besoin d'un shell pour SCP?

Si vous copiez uniquement de nouveaux fichiers et qu'il n'y a pas un très grand nombre de fichiers, il n'y a pas de différence de performances significative.

SSHFS établit une connexion SSH lorsque le système de fichiers est monté et conserve cette connexion jusqu'à ce qu'elle soit démontée. Rsync établit une nouvelle connexion chaque fois que vous l'exécutez, mais vous pouvez utiliser la fonction de multiplexage et la superposition sur une seule connexion principale pour éviter de vous authentifier à chaque fois.

SSHFS est un système de fichiers FUSE et ne prend donc en charge que les métadonnées Unix traditionnelles et ACL. Rsync peut transférer des attributs étendus (vous devez utiliser rsync -aAX, notez qu'un plain -ane conserve que les métadonnées Unix traditionnelles).

Gilles 'SO- arrête d'être méchant'
la source
Par exemple, j'ai un seul fichier compressé dans le répertoire SSHFS monté et ce fichier est copié dans mon répertoire local. Plus tard, ce fichier est mis à jour sur le répertoire monté et je souhaite copier uniquement sa section mise à jour dans mon répertoire local à l'aide rsync --no-whole-file /mounted/file.tar.gz /home/local/file.tar.gz. Lorsque j'utilise rsyncpour cette opération, lors du calcul de la somme de contrôle afin de ne transférer que les parties qui ont été modifiées, faut- rsyncil lire l'intégralité du fichier, ce qui entraînera le téléchargement des données complètes au lieu de seulement sa section mise à jour? @Gilles
alper
1
@alper Lorsque vous utilisez rsync sur sshfs, rsync doit lire l'intégralité du fichier. Il ne peut pas savoir ce qui doit être mis à jour autrement. Il n'y a aucun moyen d'optimiser en transférant uniquement des sommes de contrôle car il n'y a aucun moyen de calculer des sommes de contrôle sur le serveur.
Gilles 'SO- arrête d'être méchant'
Serait-ce la même chose si l'emplacement cible est un dossier monté plutôt qu'une sshfsconnexion? Veuillez consulter: unix.stackexchange.com/q/544404/198423 @Gilles
alper
4

Pour répondre à votre question principale: oui il y a des différences. Avec sshfsune connexion existante pour permettre l'accès aux fichiers distants sur un canal sécurisé et avec rsync sur ssh, ce canal sécurisé est configuré pour communiquer avec une instance rsync distante .

Pour répondre à votre question secondaire: Le rsync sur ssh sera plus rapide pour la plupart, sinon toutes les instances, car le rsync sur le système distant fournit plus d'intelligence pour trouver des fichiers qui n'ont pas besoin de synchronisation, mais principalement parce qu'il s'exécute en parallèle avec votre rsync local pour recueillir ces informations.

La sécurité des deux façons est la même, en supposant une configuration similaire des paramètres ssh (longueur de clé, algorithmes). Les valeurs par défaut pour votre système source et de destination dépendent des combinaisons de distributions sur ces systèmes.

Anthon
la source