Base de connaissances / Knowledge base

Maintenir des copies de fichiers au travers d'Internet avec l'outil libre rsync (17.02.09)
L'outil libre rsync permet de ne transférer que les nouveaux fichiers et, pour les fichiers déjà existants, que les parties nouvelles des fichiers, au moins pour les fichiers textes. Voyons comment l'utiliser.
Pour un transfert entre deux machines au travers d'Internet, regardons les différentes options à disposition.

Nous ne parlons ici que de fichiers de type texte (mais c'est une grande famille, avec par exemple les dumps SQL), les fichiers binaires étant moins concernés par le fait de n'envoyer que les parties modifiées (une archive zip, par exemple, dans laquelle on aurait juste ajouté un petit fichier texte ne pourra profiter qu'à très faible échelle de l'envoi de différences car le fichier compressé est très différent malgré la toute petite différence interne).

Vaut-il mieux dès lors envoyer un fichier texte compressé en gzip ou envoyer le fichier en texte mais dans un canal rsync compressé par gzip? Nous avons mentionné ci-dessus que les archives sont de mauvaises candidates, cependant gzip a une option prévue (--rsyncable) qui doit permettre de garder des bouts du fichier compressé identiques, permettant un gain de temps en n'envoyant, comme pour les fichiers textes non-compressés, que les parties de fichiers modifiés.

Ajoutons enfin qu'activer la compression dans le canal rsync doit permettre des gains de bande passante, mais nécessitera plus de ressources sur les deux machines, étant entendu qu'il faut compresser sur l'une et décompresser sur l'autre. Une liaison compressée prendra donc plus de temps et moins de bande passante. On pourrait schématiquement dire que pour les transferts sur le réseau local (normalement plus rapide et non payant), il vaut mieux utiliser une liaison rsync non-compressés. Inversement, pour les transferts via Internet (plus lent et souvent payant selon l'utilisation de la bande passante), il vaudrait mieux utiliser un canal rsync compressé.

Après avoir testé toutes les solutions possibles, nous pouvons affirmer que cela dépend, justement, de la liaison :
  • Dans une liaison rsync compressée (avec l'option -z), il vaut mieux envoyer des fichiers textes non compressés. Il y aura environ 15 à 30 fois moins de données transférées qu'avec des fichiers compressés normalement. Et environ 4 fois moins de données transférées qu'en envoyant des fichiers compressés avec --rsyncable.
  • Dans une liaison rsync non-compressée, il vaut mieux envoyer les fichiers compressés avec l'option --rsyncable. Il y aura environ 1.5 fois moins de données transférées qu'avec des fichiers texte non-compressés. Et entre 3 et 6 fois moins de données transférées qu'en envoyant des fichiers compressés normalement.