Accélérer rsync sur smb

8

Je sauvegarde une boîte Linux sur SMB sur un NAS. Je monte le NAS localement puis je rsync beaucoup de données (100 Go environ). Je pense que cela prend énormément de temps pour le faire: plus de 12 heures. Je m'attendrais à être beaucoup plus rapide une fois que tout est copié car presque rien n'est changé de jour en jour.

Y a-t-il un moyen d'accélérer cela?

Je pensais que peut-être rsync pense qu'il fonctionne avec des disques durs locaux et utilise une somme de contrôle au lieu de comparaisons temps / taille? Mais je n'ai pas trouvé de moyen de forcer les comparaisons d'heure et de date. Autre chose que je pourrais vérifier?

pupeno
la source
Je suggère également de regarder NFS à la place de SMB - j'ai remarqué (et c'est peut-être juste moi) qu'il est plus rapide que Samba
warren
Malheureusement, ce NAS n'a pas de NFS et pour l'instant, je suis coincé avec.
pupeno
Vérifiez les capacités du NAS à l'aide d'un mappeur de ports, comme nmap. J'ai rencontré plusieurs unités NAS qui exécutaient un service rsync natif, même s'il n'y avait aucune mention dans la documentation et aucune mention dans la configuration.
Kyle__
Veuillez également vérifier ce fil ["rsync to NAS copie tout à chaque fois"] [1] [1]: serverfault.com/questions/262411/…
dtoubelis
Veuillez également vérifier ce fil [rsync to NAS copie tout à chaque fois] [1] [1]: serverfault.com/questions/262411/…
dtoubelis

Réponses:

28

Je pense que vous avez une mauvaise compréhension de l'algorithme rsync et de la façon dont l'outil doit être appliqué.

L'avantage de performance de Rsync vient de faire des transferts delta, c'est-à-dire de déplacer uniquement les bits modifiés dans un fichier. Afin de déterminer les bits modifiés, le fichier doit être lu par les hôtes source et de destination et bloquer les sommes de contrôle par rapport à déterminer quels bits ont changé. C'est la partie "magique" de rsync - l'algorithme rsync lui-même.

Lorsque vous montez le volume de destination avec SMB et utilisez rsync pour copier des fichiers à partir de ce que Linux "voit" comme source locale et comme destination locale (tous deux montés sur cette machine), la plupart des versions rsync modernes passent en mode de copie "fichier entier" et désactivez l'algorithme de copie delta. Il s'agit d'une "victoire" car, avec l'algorithme de copie delta activé, rsync lirait le fichier de destination entier (via le câble du NAS) afin de déterminer quels bits du fichier ont changé.

La «bonne façon» d'utiliser rsync consiste à exécuter le serveur rsync sur une machine et le client rsync sur l'autre. Chaque machine lira les fichiers de son propre stockage local (qui devrait être très rapide), s'accordera sur les bits des fichiers modifiés et ne transférera que ces bits. De cette façon, vous utilisez des quantités rsync d'un «cp» forgé. Vous pourriez accomplir la même chose avec 'cp' et ce serait probablement plus rapide.

Si votre appareil NAS prend en charge l'exécution d'un serveur (ou client) rsync, alors vous êtes en affaires. Si vous allez simplement le monter sur la machine source via SMB, vous pouvez tout aussi bien utiliser 'cp' pour copier les fichiers.

Evan Anderson
la source
7
Oooh! Downvotes! Je serais curieux de savoir pourquoi vous avez rejeté la réponse, étant donné qu'elle est techniquement exacte.
Evan Anderson
Je ne peux pas exécuter le serveur rsync sur le NAS, sinon je le ferais. Lorsqu'il n'utilise pas de serveur rsync, rsync peut utiliser la somme de contrôle ou la taille et la date / heure pour savoir si un fichier a changé ou non. Selon la page de manuel, il utilisera la taille et le datetime par défaut, mais mon expérience est qu'il ne le fait pas et je ne vois pas de moyen de le forcer. Je ne vois qu'un moyen de forcer le total de contrôle. --checksum: Sans cette option, rsync utilise une "vérification rapide" qui (par défaut) vérifie si la taille et l'heure de la dernière modification de chaque fichier correspondent entre l'expéditeur et le destinataire.
pupeno
Evan, donnez-moi quelques minutes pour écrire mon commentaire.
pupeno
2
Quel comportement voyez-vous qui vous dit que c'est la somme de contrôle des fichiers? Le comportement de "vérification rapide" est le comportement par défaut, il n'y a donc aucun moyen de le "forcer". Si vous ne pouvez pas exécuter rsync sur le NAS, utilisez simplement 'cp'. Ce sera aussi rapide ou plus rapide.
Evan Anderson
Selon la façon dont je comprends le travail de rsync, il devrait vérifier la date et l'heure locales, la date et l'heure distantes et si elles correspondent, ne pas copier le fichier. Ce qui signifie qu'il ne devrait pas copier 99% des fichiers, mais le fait qu'il faut plus de 12 heures pour 60 Go ou plus me dit que c'est tout copier (ce qui semble être ce que vous impliquez en disant que cp sera plus rapide) ou qu'il s'agit en fait d'une somme de contrôle, ce qui signifie qu'il ne copie pas tout, mais qu'il télécharge tout.
pupeno
6

Il semble que les horodatages soient votre problème, car cette page se rapporte:

http://www.goodjobsucking.com/?p=16

La solution proposée consiste à ajouter

--modify-window=1

aux paramètres rsync.

Bob
la source
4

Oui, vous pouvez l'accélérer. Vous devez faire ressembler la source ou la destination à une machine distante, par exemple en l'adressant comme " localhost:".

Vous avez indiqué que vous montez le partage SMB localement. Cela fait que la source ou la destination ressemble à un chemin local vers rsync. La page de manuel rsync indique que les copies où la source et la destination sont des chemins locaux copieront le fichier entier. Ceci est indiqué dans le paragraphe de l'option "--whole-file" de la page de manuel. Par conséquent, l'algorithme delta n'est pas utilisé. L'utilisation de la localhost:solution de contournement " " restaurera la fonctionnalité de l'algorithme delta et accélérera les transferts.

Étoile de mer
la source
1
Je me demande quel sens cela devrait avoir ... rsyncutilise l'heure et la date pour vérifier si un fichier doit être mis à jour ou non. S'il a besoin d'une mise à jour, rsync divisera le fichier en morceaux et comparera les sommes de contrôle. Cela signifie qu'il lira tout le fichier pour pouvoir le faire. Donc, si vous n'avez pas de démon rsync exécuté à distance, vous devrez de toute façon transférer le fichier entier pour effectuer la segmentation et la somme de contrôle afin que vous puissiez tout aussi bien le transférer immédiatement. Ainsi, la «solution de contournement» décrite ici ne vous achète en fait rien dans ce scénario.
TylerDurden
3

Je pensais que je jetterais mon 2p ici.

Mon frère vient d'installer un NAS Buffalo sur son réseau de bureau. Il examine maintenant des sauvegardes hors site, de sorte qu'en cas d'incendie du bureau, au moins il a toujours tous ses documents commerciaux ailleurs (à plusieurs centaines de kilomètres).

Mon premier obstacle a été d'obtenir le VPS qu'il a (un petit serveur privé virtuel Linux, rien de trop costaud) pour se connecter en tant qu'utilisateur VPN à son routeur à large bande (il utilise un DrayTek pour cela) afin qu'il puisse lui-même faire partie de son VPN, et ainsi il peut alors accéder directement au NAS, de manière sécurisée. Je l'ai trié et je travaille parfaitement.

Le problème suivant était alors de transférer les fichiers du NAS vers le serveur VPS. J'ai commencé par faire un montage Samba et j'ai rencontré exactement le même problème (ou pire encore) que vous avez décrit. J'ai fait un rsync à sec et cela a pris plus d'une heure 30 minutes juste pour déterminer quels fichiers il allait transférer, car comme Evan le dit, avec cette méthode, l'autre extrémité n'est pas rsync, donc il doit faire beaucoup de dépôts le système appelle / lit sur le support Samba (via une connexion PPTP / tunnelée, avec un temps d'aller-retour d'environ 40 ms). Complètement impraticable.

Je ne savais pas que le Buffalo exécute en fait un démon rsync donc, en l'utilisant à la place, l'ensemble du dry-run ne prend que 1 minute 30 secondes pour 87k fichiers totalisant 50 Go. Évidemment, le transfert de 50 Go de fichiers (à partir d'un NAS qui est sur une liaison haut débit avec seulement 100 k / s de bande passante sortante) est une tout autre affaire (cela prendra plusieurs jours) mais, une fois la synchronisation initiale terminée, toutes les sauvegardes incrémentielles doivent être éclaircissement de la graisse (ses données ne changeront pas beaucoup au quotidien).

Ma suggestion est d'utiliser un NAS décent, qui prend en charge rsync, pour les raisons évoquées ci-dessus par Evan. Cela résoudra tous vos problèmes.

parkamark
la source
+1 pour m'avoir informé que les NAS Buffalo exécutent rsync - merci!
Michael
0

Ça sent comme vous avez un NAS moins cher. Cela peut aussi provenir de la bande passante de votre réseau ...

Les NAS grand public "standard" sont très faibles en ce qui concerne les E / S lourdes, ce que vous essayez de faire ici. Il pourrait également s'agir d'un commutateur bon marché reliant votre PC et votre NAS qui n'est pas assez fort pour gérer correctement tous les paquets.

Antoine Benkemoun
la source
Le même NAS, le même commutateur, un autre ordinateur, exécutant Windows, sauvegardez-le, beaucoup plus d'informations, en moins de quatre heures.
pupeno
0

Il y a deux sources potentielles de problème - soit vous utilisez des options de ligne de communication incorrectes, soit votre NAS a des problèmes d'horodatage (ou les deux :-). Veuillez vérifier ce fil "rsync to NAS copie tout à chaque fois" pour plus d'informations.

dtoubelis
la source