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

De Get Docs
Aller à :navigation, rechercher

Introduction

Rsync, qui signifie remote sync, est un outil de synchronisation de fichiers distant et local. Il utilise un algorithme pour minimiser la quantité de données copiées en ne déplaçant que les portions de fichiers qui ont été modifiées.

Dans ce didacticiel, nous définirons Rsync, examinerons la syntaxe lors de l'utilisation de rsync, expliquerons comment utiliser Rsync pour synchroniser avec un système distant et d'autres options à votre disposition.

Conditions préalables

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

Si vous envisagez 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 de configuration initiale 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 É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 tous les ordinateurs exécutant un système d'exploitation basé sur Linux sur lequel rsync est installé.

Définir Rsync

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

Comprendre la syntaxe 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 :

cd ~

Créez ensuite un répertoire de test :

mkdir dir1

Créez un autre répertoire de test :

mkdir dir2

Ajoutez maintenant quelques fichiers de test :

touch dir1/file{1..100}

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

ls dir1
Outputfile1    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 avec 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 :

rsync -r dir1/ dir2

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

rsync -a dir1/ dir2

Veuillez noter qu'il y a une barre oblique finale (/) à la fin du premier argument dans la syntaxe des deux commandes précédentes et mis en évidence ici :

rsync -a dir1/ dir2

Cette barre oblique signifie le contenu de dir1. Sans la barre oblique finale, dir1, y compris le répertoire, serait placé dans dir2. Le résultat créerait une hiérarchie comme celle-ci :

~/dir2/dir1/[files]

Une autre astuce consiste à revérifier vos arguments avant d'exécuter une commande rsync. Rsync fournit une méthode pour ce 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 indicateurs a, n et v dans la commande suivante :

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

Comparez maintenant cette sortie à celle que vous recevez lorsque vous supprimez la barre oblique finale, comme dans ce qui suit :

rsync -anv dir1 dir2
Outputsending 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 montre maintenant que le répertoire lui-même a été transféré, plutôt que seulement les fichiers dans le répertoire.

Utilisation de Rsync pour synchroniser avec un système distant

Pour utiliser rsync pour synchroniser avec un système distant, vous n'avez besoin que d'un accès SSH configuré entre vos machines locales et distantes, ainsi que 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 sur une machine distante en utilisant la syntaxe suivante. Veuillez noter que dans ce cas, vous souhaitez transférer le répertoire réel, vous omettez donc la barre oblique finale :

rsync -a ~/dir1 [email protected]_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 se trouvait sur le système distant au lieu de votre système local, la syntaxe serait la suivante :

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

Comme cp et des outils similaires, la source est toujours le premier argument et la destination est toujours le second.

    1. Utilisation d'autres options Rsync

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

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

rsync -az source destination

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

rsync -azP source destination
Outputsending 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 car aucune modification n'a été apportée. Cela illustre la capacité de Rsync à utiliser les heures de modification pour déterminer si des modifications ont été apportées :

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

Supposons que vous deviez mettre à jour l'heure de modification de certains fichiers avec une commande comme celle-ci :

touch dir1/file{1..10}

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

rsync -azP source destination
Outputsending 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)
. . .

Afin de garder deux répertoires vraiment 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 afin d'éviter toute perte de données indésirable :

rsync -an --delete source destination

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

rsync -a --exclude=pattern_to_exclude source destination

Si vous avez un modèle spécifié à exclure, vous pouvez remplacer cette exclusion pour les fichiers qui correspondent à un modèle différent en utilisant l'option --include= :

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. Il est utilisé conjointement avec l'option --backup-dir, qui spécifie le répertoire dans lequel les fichiers de sauvegarde doivent être stockés :

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

Conclusion

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

Une maîtrise de Rsync vous permet de concevoir des opérations de sauvegarde complexes et d'obtenir un contrôle précis sur comment et ce qui est transféré.