Synchroniser des données avec rsync
rsync est un outil polyvalent qui simplifie le transfert de fichiers via des connexions réseau et accélère la synchronisation des répertoires locaux. Sa grande flexibilité fait de cet outil de synchronisation une excellente option pour une multitude d’opérations au niveau des fichiers.
Qu’est-ce que rsync ?
rsync, abréviation de « remote synchronization » (synchronisation à distance), est un outil de synchronisation flexible et compatible avec le réseau sous Linux. Ce programme open source permet de synchroniser des fichiers et des répertoires entre des systèmes locaux ou sur des réseaux. Pour ce faire, l’outil utilise une technique de transfert de données différentielle, dans laquelle seules les sections de données réellement modifiées sont transférées. Cela permet de minimiser l’échange de données et d’accélérer considérablement le processus de synchronisation. Grâce à une multitude d’options, rsync permet un contrôle précis du comportement de synchronisation. La syntaxe flexible permet aussi bien des copies locales simples que des synchronisations réseau complexes.
La syntaxe de rsync
La syntaxe de rsync est simple et ressemble à celle de SSH, SCP et CP. La structure de base est la suivante :
rsync [OPTION] source destination
bashLe chemin source à partir duquel les données doivent être synchronisées est saisi dans source
, tandis que le chemin cible est indiqué dans destination
. Pour cela, rsync propose une variété d’options qui permettent d’adapter le processus de synchronisation aux exigences respectives de la source ou de la destination. Les options les plus fréquemment utilisées sont :
-
-a
(archives) : conserve de manière récursive les permissions de fichiers, l’horodatage, les groupes, les propriétaires et les propriétés spéciales des fichiers. -
-v
(verbose) : affiche des informations détaillées sur le processus de synchronisation. -
-r
(recursive) : synchronise les répertoires et leur contenu de manière récursive. -
-u
(mise à jour) : ne transfère que les fichiers plus récents que ceux déjà présents dans le répertoire cible. -
-z
(compress) : réduit le trafic de données sur le réseau. -
-n --itemize-changes
: affiche une liste des modifications à effectuer. -
--delete
: supprime les fichiers du répertoire cible qui n’existent plus dans la source. -
--exclude
: exclut certains fichiers ou répertoires de la synchronisation. -
--dry-run
: simule le processus de synchronisation sans réellement transférer de fichiers. -
--progress
: affiche la progression du transfert de fichiers. -
--partial
: les fichiers qui ont été partiellement transférés restent dans le répertoire cible si le transfert est interrompu. Lors d’un nouveau transfert, le fichier reprendra à partir de son dernier état.
Exemple de syntaxe rsync
La syntaxe rsync peut être facilement reproduite à l’aide d’un exemple pratique. La commande suivante permet de créer le répertoire dir1
, comprenant 100 fichiers de test vides, et un deuxième répertoire vide dir2
:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bashLe contenu de dir1
peut être synchronisé sur le même système avec dir2
avec l’option -r
:
$ rsync -r dir1/ dir2
bashIl est également possible d’utiliser l’option -a
, qui synchronise de manière récursive et contient des liens symboliques, des fichiers de périphériques spéciaux, des temps de modification, des groupes, des propriétaires et des autorisations :
$ rsync -a dir1/ dir2
bashRemarque : la barre oblique (/) à la fin du répertoire source dans une commande rsync est importante, car elle indique que c’est le contenu du répertoire qui doit être synchronisé, et non le répertoire lui-même.
$ rsync -a dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bashSans la barre oblique finale au répertoire source, le contenu du répertoire « source » est copié dans le répertoire « cible » :
$ rsync -a 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
. . .
bashIl est donc utile d’utiliser la barre oblique à la fin du répertoire source pour s’assurer que le processus de synchronisation se déroule comme prévu et que le contenu du répertoire source arrive correctement dans le répertoire cible.
rsync : synchronisation avec un système distant
La synchronisation d’un système distant avec rsync n’est pas difficile, à condition d’avoir un accès SSH à l’ordinateur distant et de connaître les informations d’authentification nécessaires. rsync utilise souvent SSH (Secure Shell) pour la communication sécurisée avec les systèmes distants. Cet outil doit être installé des deux côtés.
Si l’accès SSH entre les deux ordinateurs est vérifié, le dossier dir1
peut être synchronisé sur un ordinateur distant. Dans ce cas, c’est le répertoire proprement dit qui doit être transféré, c’est pourquoi la barre oblique dans la commande suivante est supprimée :
$ rsync -a ~/dir1 username@remote_host:destination_directory
bashLorsqu’un répertoire est déplacé d’un système local vers un système distant, on parle d’opération « push ». Inversement, on parle d’opération « pull » lorsqu’un répertoire distant est synchronisé avec un système local. La syntaxe est la suivante :
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash- Virtualisation complète avec accès root
- Trafic illimité et jusqu'à 1 Gbit/s de bande passante
- Stockage SSD NVMe rapide et édition Plesk Web Host
Utilisation d’autres options dans rsync
Les options déjà présentées plus haut permettent de personnaliser davantage le comportement par défaut de rsync. En voici quelques-unes, expliquées plus en détails.
Transfert de fichiers non compressés avec rsync
La charge du réseau lors du transfert de fichiers non compressés peut être réduite avec l’option -z
comme suit :
$ rsync -az source destination
bashAfficher la progression et reprendre les transferts interrompus
Avec -P
, les options --progress
et --partial
peuvent être combinées. Vous obtenez ainsi un aperçu de la progression des transmissions et pouvez en même temps reprendre les transmissions interrompues :
$ 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)
file100
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)
file11
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101)
. . .
bashExécutez à nouveau la commande pour obtenir une sortie plus courte. Cela permet à rsync de déterminer si des modifications ont été effectuées en fonction du temps de modification.
$ 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
bashGarder les répertoires synchronisés avec rsync
Pour s’assurer que deux répertoires sont effectivement maintenus synchronisés, il est nécessaire de supprimer dans le répertoire cible les fichiers qui ont été supprimés de la source. Par défaut, rsync ne supprime cependant pas les fichiers du répertoire cible. Ce comportement peut être modifié avec l’option --delete
. Il est toutefois conseillé d’utiliser cette option avec prudence, car elle supprime dans le répertoire cible des fichiers qui n’existent plus dans la source.
Avant d’utiliser cette option, vous devriez utiliser l’option --dry-run
. Celle-ci vous permet d’effectuer une simulation du processus de synchronisation sans supprimer de fichiers réels. Vous pouvez ainsi vous assurer que seules les modifications souhaitées sont effectuées, sans perdre accidentellement des données importantes :
$ rsync -a --delete source destination
bashExclure des fichiers et des répertoires de la synchronisation avec rsync
Dans rsync, l’option --exclude
permet d’exclure certains fichiers et répertoires de la synchronisation. Ceci est utile lorsque des fichiers temporaires, des fichiers journaux ou d’autres contenus ne doivent pas être synchronisés.
$ rsync -a --exclude=pattern_to_exclude source destination
bashSi vous avez indiqué un modèle pour exclure des fichiers, vous pouvez remplacer cette exclusion pour les fichiers qui correspondent à un autre modèle avec l’option --include=
.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bashEnregistrer les sauvegardes avec rsync
L’option --backup
vous permet d’enregistrer des sauvegardes de fichiers importants. Elle est utilisée en combinaison avec l’option --backup-dir
. Celle-ci indique le répertoire dans lequel les fichiers de sauvegarde doivent être enregistrés :
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bashPour une vue d’ensemble précise des différents scénarios de sauvegarde, consultez notre article plus détaillé sur les sauvegardes de serveur avec rsync.