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 :
Ensuite, créez un répertoire de test :
Créez un autre répertoire de test :
À présent, ajoutez quelques fichiers de test :
Il y a maintenant un répertoire appelé dir1
avec 100 fichiers vides à l’intérieur. Confirmez en listant les fichiers :
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
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 :
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
:
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 :
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 :
Outputsending 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 :
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 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 :
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 :
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
:
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 :
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 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 :
Outputsending 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 :
Ensuite, si vous lancez à nouveau rsync
avec -azP
, vous remarquerez dans la sortie comment Rsync recopie intelligemment uniquement les fichiers modifiés :
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)
. . .
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 :
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=
:
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=
:
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 :
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.