Comment utiliser Rsync pour synchroniser les répertoires locaux et distants

Introduction

Rsync, qui signifie synchronisation à distance, est un outil de synchronisation de fichiers à distance et locaux. Il utilise un algorithme pour minimiser la quantité de données copiées en ne déplaçant que les parties des fichiers qui ont changé.

Dans ce tutoriel, nous allons définir Rsync, passer en revue la syntaxe lors de l’utilisation de rsync, expliquer comment utiliser Rsync pour synchroniser avec un système distant, et les autres options disponibles pour vous.

Déployez vos applications frontend depuis GitHub en utilisant la plateforme d’applications DigitalOcean. Laissez DigitalOcean se charger de mettre à l’échelle votre application.

Prérequis

Pour pratiquer l’utilisation de rsync pour synchroniser des fichiers entre un système local et un système distant, vous aurez besoin de deux machines pour agir comme votre ordinateur local et votre machine distante, respectivement. Ces deux machines peuvent être des serveurs privés virtuels, des machines virtuelles, des conteneurs ou des ordinateurs personnels, tant qu’elles ont été correctement configurées.

Si vous prévoyez de suivre ce guide en utilisant des serveurs, il serait prudent de les configurer avec des utilisateurs administratifs et de configurer un pare-feu sur chacun d’eux. Pour configurer ces serveurs, suivez notre Guide d’initialisation du serveur.

Quels que soient les types de machines que vous utilisez pour suivre ce tutoriel, vous devrez avoir créé des clés SSH sur les deux. Ensuite, copiez la clé publique de chaque serveur dans le fichier authorized_keys de l’autre serveur comme indiqué dans l’étape 2 de ce guide.

Ce guide a été validé sur des machines exécutant Ubuntu 20.04, bien qu’il devrait généralement fonctionner avec n’importe quel ordinateur exécutant un système d’exploitation Linux qui a rsync installé.

Définition de Rsync

Rsync est un outil de synchronisation très flexible et activé par le réseau. En raison de sa présence généralisée sur Linux et les systèmes de type Unix et de sa popularité en tant qu’outil pour les scripts système, il est inclus dans la plupart des distributions Linux par défaut.

Compréhension de la syntaxe de Rsync

La syntaxe de rsync fonctionne de manière similaire à d’autres outils, tels que ssh, scp et cp.

Tout d’abord, accédez à votre répertoire personnel en exécutant la commande suivante :

  1. cd ~

Ensuite, créez un répertoire de test :

  1. mkdir dir1

Créez un autre répertoire de test :

  1. mkdir dir2

À présent, ajoutez quelques fichiers de test :

  1. touch dir1/file{1..100}

Il y a maintenant un répertoire appelé dir1 avec 100 fichiers vides à l’intérieur. Confirmez en listant les fichiers :

  1. ls dir1
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99

Vous avez également un répertoire vide appelé dir2. Pour synchroniser le contenu de dir1 vers dir2 sur le même système, vous exécuterez rsync et utiliserez le drapeau -r, qui signifie « récursif » et est nécessaire pour la synchronisation des répertoires :

  1. rsync -r dir1/ dir2

Une autre option est d’utiliser le drapeau -a, qui est un drapeau de combinaison et signifie « archive ». Ce drapeau synchronise de manière récursive et préserve les liens symboliques, les fichiers spéciaux et de périphérique, les temps de modification, les groupes, les propriétaires et les autorisations. Il est plus couramment utilisé que -r et est le drapeau recommandé à utiliser. Exécutez la même commande que dans l’exemple précédent, cette fois en utilisant le drapeau -a :

  1. rsync -a dir1/ dir2

Veuillez noter qu’il y a un slash final (/) à la fin du premier argument dans la syntaxe des deux commandes précédentes et mis en évidence ici :

  1. rsync -a dir1/ dir2

Ce slash final signifie le contenu de dir1. Sans le slash final, dir1, y compris le répertoire, serait placé à l’intérieur de dir2. Le résultat créerait une hiérarchie comme suit :

~/dir2/dir1/[files]

Un autre conseil est de vérifier vos arguments avant d’exécuter une commande rsync. Rsync propose une méthode pour le faire en passant les options -n ou --dry-run. Le drapeau -v, qui signifie « verbeux », est également nécessaire pour obtenir la sortie appropriée. Vous combinerez les drapeaux a, n, et v dans la commande suivante :

  1. rsync -anv dir1/ dir2
Output
sending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .

Maintenant, comparez cette sortie à celle que vous recevez lorsque vous supprimez le slash final, comme dans ce qui suit :

  1. rsync -anv dir1 dir2
Output
sending incremental file list dir1/ dir1/file1 dir1/file10 dir1/file100 dir1/file11 dir1/file12 dir1/file13 dir1/file14 dir1/file15 dir1/file16 dir1/file17 dir1/file18 . . .

Cette sortie démontre maintenant que le répertoire lui-même a été transféré, plutôt que seulement les fichiers à l’intérieur du répertoire.

Utiliser Rsync pour synchroniser avec un système distant

Pour utiliser rsync pour synchroniser avec un système distant, vous avez seulement besoin d’un accès SSH configuré entre vos machines locales et distantes, ainsi que de rsync installé sur les deux systèmes. Une fois que vous avez vérifié l’accès SSH entre les deux machines, vous pouvez synchroniser le dossier dir1 de la section précédente vers une machine distante en utilisant la syntaxe suivante. Veuillez noter que dans ce cas, vous voulez transférer le répertoire réel, donc vous exclurez le slash final :

  1. rsync -a ~/dir1 username@remote_host:destination_directory

Ce processus est appelé une opération push car il « pousse » un répertoire du système local vers un système distant. L’opération opposée est pull et est utilisée pour synchroniser un répertoire distant avec le système local. Si le répertoire dir1 était sur le système distant plutôt que sur votre système local, la syntaxe serait la suivante :

  1. rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

Comme cp et d’autres outils similaires, la source est toujours le premier argument et la destination est toujours le deuxième.

Utilisation d’autres options Rsync

Rsync offre de nombreuses options pour modifier le comportement par défaut de l’utilitaire, telles que les options de drapeau que vous avez apprises dans la section précédente.

Si vous transférez des fichiers qui n’ont pas déjà été compressés, comme des fichiers texte, vous pouvez réduire le transfert réseau en ajoutant une compression avec l’option -z :

  1. rsync -az source destination

Le drapeau -P est également utile. Il combine les drapeaux --progress et --partial. Le premier drapeau fournit une barre de progression pour les transferts et le second drapeau vous permet de reprendre les transferts interrompus :

  1. rsync -azP source destination
Output
sending incremental file list created directory destination source/ source/file1 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=99/101) sourcefile10 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=98/101) source/file100 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=97/101) source/file11 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=96/101) source/file12 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=95/101) . . .

Si vous exécutez à nouveau la commande, vous recevrez une sortie raccourcie puisque aucun changement n’a été apporté. Cela illustre la capacité de Rsync à utiliser les horodatages de modification pour déterminer si des changements ont été apportés :

  1. rsync -azP source destination
Output
sending incremental file list sent 818 bytes received 12 bytes 1660.00 bytes/sec total size is 0 speedup is 0.00

Disons que vous deviez mettre à jour l’horodatage de modification sur certains des fichiers avec une commande comme celle-ci :

  1. touch dir1/file{1..10}

Ensuite, si vous lancez à nouveau rsync avec -azP, vous remarquerez dans la sortie comment Rsync recopie intelligemment uniquement les fichiers modifiés :

  1. rsync -azP source destination
Output
sending incremental file list file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101) file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101) file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101) file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101) . . .

Pour maintenir deux répertoires véritablement synchronisés, il est nécessaire de supprimer les fichiers du répertoire de destination s’ils sont supprimés de la source. Par défaut, rsync ne supprime rien du répertoire de destination.

Vous pouvez modifier ce comportement avec l’option --delete. Avant d’utiliser cette option, vous pouvez utiliser -n, l’option --dry-run, pour effectuer un test et éviter toute perte de données indésirable :

  1. rsync -an --delete source destination

Si vous préférez exclure certains fichiers ou répertoires situés à l’intérieur d’un répertoire que vous synchronisez, vous pouvez le faire en les spécifiant dans une liste séparée par des virgules après l’option --exclude= :

  1. rsync -a --exclude=pattern_to_exclude source destination

Si vous avez un motif spécifié à exclure, vous pouvez annuler cette exclusion pour les fichiers correspondant à un motif différent en utilisant l’option --include= :

  1. rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

Enfin, l’option --backup de Rsync peut être utilisée pour stocker des sauvegardes de fichiers importants. Elle est utilisée en conjonction avec l’option --backup-dir, qui spécifie le répertoire où les fichiers de sauvegarde doivent être stockés :

  1. rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

Conclusion

Rsync peut rationaliser les transferts de fichiers sur des connexions en réseau et ajouter de la robustesse à la synchronisation de répertoires locaux. La flexibilité de Rsync en fait une bonne option pour de nombreuses opérations de niveau fichier différentes.

A mastery of Rsync allows you to design complex backup operations and obtain fine-grained control over how and what is transferred.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories