Découverte de rsync : Synchronisation de Fichiers Simplifiée
Rsync se présente comme un outil en ligne de commande gratuit, conçu pour la synchronisation de fichiers tant au niveau local qu’à distance. Il excelle dans le transfert de fichiers et de répertoires, ce qui en fait un allié précieux pour la migration de données, les sauvegardes et la mise en miroir. Les webmasters et administrateurs y trouveront un outil de choix pour leurs opérations régulières de transfert de données.
Dans cet article, nous allons explorer le fonctionnement de Rsync et illustrer son utilisation à travers quelques exemples concrets.
Fonctionnement de rsync
Rsync est un utilitaire de synchronisation à distance, spécialement conçu pour les systèmes de type Unix. Il offre aux utilisateurs la possibilité de transférer et de synchroniser des fichiers entre différentes machines ou hôtes, de manière transparente.
Au cœur de son fonctionnement, rsync utilise un algorithme de transfert delta. Cet algorithme compare les fichiers présents sur deux hôtes (la source et la destination) et ne copie que les différences entre eux. Cette méthode s’applique aussi bien aux transferts locaux que distants. La commande rsync offre deux modes de fonctionnement pour la copie et la synchronisation des données:
- Via SSH ou RSH pour synchroniser entre deux hôtes.
- Via le démon TCP rsync pour les copies ou synchronisations.
Conçu initialement pour les systèmes de type Unix, il est parfaitement fonctionnel sous Linux.
Le processus que rsync met en œuvre se déroule comme suit :
- Rsync établit une connexion SSH avec l’hôte distant, nécessitant un mot de passe.
- Une fois la connexion établie, le rsync de l’hôte distant communique avec la source.
- Ces programmes déterminent ensuite les fichiers et répertoires à synchroniser, en utilisant un algorithme de transfert delta pour identifier les modifications.
Si rsync détecte un fichier inexistant sur l’hôte distant, il le copie. Pour les fichiers déjà présents sur les deux systèmes, rsync ne copie que les parties modifiées. Les fichiers identiques sur les deux systèmes sont ignorés.
Rsync effectue des mises à jour incrémentales en stockant les différences dans un fichier temporaire avant de les appliquer à la destination.
Avant de commencer, assurez-vous que :
- Vous disposez des privilèges root ou sudo.
- Vous avez accès au terminal/ligne de commande.
- Vous avez un accès SSH pour exécuter les commandes rsync en toute sécurité.
- Vous avez deux machines disponibles pour réaliser des opérations rsync.
Pour ce tutoriel, nous utiliserons Linux Mint 21.1 Vera, mais les instructions peuvent être suivies sur n’importe quelle distribution Linux.
Rsync vs. Scp: Lequel Choisir?
Scp (Secure Copy) est un protocole couramment utilisé pour la copie de fichiers en ligne de commande. Il fonctionne de manière linéaire, copiant simplement les fichiers de la source vers la destination via une connexion SSH sécurisée.
La syntaxe de la commande scp est la suivante :
scp option SOURCE DESTINATION
Alors, pourquoi préférer rsync à scp?
Rsync présente plusieurs avantages significatifs par rapport à scp :
- Rapidité d’exécution : Rsync est plus rapide que scp car il utilise un protocole de mise à jour à distance, transférant uniquement les différences plutôt que la totalité du fichier. Cela est particulièrement avantageux lors de synchronisations régulières, où seule la copie initiale est complète.
- Moins de consommation de bande passante : Rsync réduit la consommation de bande passante en ne recopiant pas l’intégralité des fichiers. De plus, il utilise des algorithmes de compression et décompression pour minimiser la taille des fichiers lors des transferts.
- Plus d’options de ligne de commande : Rsync surpasse scp en termes de nombre d’options disponibles, offrant ainsi un contrôle plus précis sur le processus de synchronisation.
En résumé, rsync est un outil de synchronisation incrémentale puissant, tandis que scp est parfait pour des transferts simples. Dans la pratique, scp convient aux tâches quotidiennes si la simplicité est privilégiée, mais rsync est la solution pour les tâches récurrentes.
Syntaxe de la Commande rsync
La syntaxe de base de la commande rsync est :
rsync [OPTION] SOURCE DESTINATION
Où:
OPTION
: Ce sont les options spécifiques de rsync.SOURCE
: Le répertoire source des fichiers.DEST
: Le répertoire de destination.USER
: Le nom d’utilisateur distant.HOST
: Nom d’hôte ou adresse IP distante.
Les options sont des paramètres qui étendent les fonctionnalités de la commande. Par exemple, l’option -r
permet de synchroniser les données de manière récursive. Cependant, cette option ne conserve pas la propriété des groupes et des utilisateurs, les horodatages, les autorisations ou les liens symboliques. Pour ce faire, l’option -a
(mode archive) est préférable, car elle garantit la conservation de toutes les informations lors de la copie.
Parmi les autres options courantes de rsync, on trouve:
-z
: compresser les données pour économiser de l’espace.-h
: afficher les données dans un format lisible par l’humain.-b
: créer une sauvegarde pendant le processus de synchronisation.-e
: utiliser le protocole SSH pour les transferts de données distants.--progress
: afficher la progression de la synchronisation.-v
: demander à rsync d’afficher une sortie détaillée.--n
: effectuer un test pour valider les paramètres avant de lancer la synchronisation réelle.-q
: supprimer la sortie et les options de la commande.
Installation de rsync
La plupart des systèmes Unix et Linux incluent rsync par défaut. Si votre système ne le possède pas, vous pouvez l’installer à l’aide des commandes suivantes.
Pour Debian/Ubuntu et Mint:
sudo apt-get install rsync
Pour Arch Linux:
pacman -S rsync
Pour Gentoo:
emerge sys-apps/rsync
Pour CentOS/Fedora/REHL:
sudo yum install rsync
Pour openSUSE:
sudo zypper install rsync
Étant donné que nous utilisons Linux Mint, rsync est préinstallé. Vous pouvez vérifier cela en exécutant simplement la commande rsync
dans le terminal, qui vous donnera des informations sur ses capacités et options.
nitt ~
$ rsync
rsync version 3.2.3 protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
symtimes, prealloc, stop-at, no crtimes
Optimizations:
SIMD, no asm, openssl-crypto
Checksum list:
xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
zstd lz4 zlibx zlib none
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.
Maintenant, passons à des exemples d’utilisation.
Pour ce tutoriel, créons deux répertoires :
- répertoire-source
- dest-répertoire
Vous pouvez les créer avec les commandes suivantes :
mkdir source-directory
mkdir dest-directory
Nous allons également créer des fichiers de test :
touch source-directory/file{1..100}
Cela créera 100 fichiers vides dans le répertoire source. Vous pouvez confirmer leur création avec la commande suivante.
ls source-directory
Output:
nitt rsync-tutorial
$ ls
dest-directory source-directory
nitt rsync-tutorial
$ touch source-directory/file{1..100}
nitt rsync-tutorial
$ ls source-directory
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
Notez que le répertoire dest est vide.
Copie Récursive Locale de Répertoires
Bien que rsync soit principalement conçu pour les transferts entre serveurs locaux et distants, il est aussi très pratique pour la copie locale de fichiers.
Dans ce cas, nous allons utiliser la syntaxe suivante :
rsync option SOURCE DESTINATION
Copiez les fichiers de notre répertoire source dans le répertoire dest en exécutant la commande suivante :
rsync -r source-directory/ dest-directory
Cette commande copie récursivement les fichiers du répertoire source vers le répertoire dest.
nitt rsync-tutorial
$ ls
dest-directory source-directory
nitt rsync-tutorial
$ ls dest-directory
nitt rsync-tutorial
$ ls source-directory
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
nitt rsync-tutorial
$ rsync -r source-directory/ dest-directory
nitt rsync-tutorial
$ ls dest-directory
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
Cela copie tous les fichiers du répertoire source vers le répertoire dest.
Copie Locale d’un Seul Fichier
Nous allons maintenant apprendre à copier un seul fichier.
Pour cela, nous allons modifier le fichier vide file1
dans le répertoire source et le synchroniser avec le même fichier présent dans le répertoire dest.
Pour modifier un fichier, utilisez la commande suivante :
nano source-directory/file1
Copiez-collez le texte suivant dans l’éditeur nano :
We're updating file1 in the source-directory.
Once we update, we'll push the new update to the dest-directory.
rsync doesn't need to re-copy the file using the delta-transfer algorithm.
This algorithm checks the differences and then updates destination files
accordingly.
So, once you save file1 in the source-directory, open file1 in
the dest-directory. It'll be empty.
However, if we check it after running rsync, you'll see that file1 in dest-directory
is updated.
Ajouter du contenu à un fichier
Fermez et enregistrez le fichier.
Copions maintenant le fichier en utilisant rsync :
sudo rsync -v --existing source-directory/file1 dest-directory
#Output
nitt rsync-tutorial
$ sudo rsync -v --existing source-directory/file1 dest-directory
file1
sent 557 bytes received 35 bytes 1,184.00 bytes/sec
total size is 474 speedup is 0.80
nitt rsync-tutorial
$
L’option --existing
assure la mise à jour des fichiers existants. Sans cette option, le fichier ne serait pas mis à jour, même si la commande s’exécutait correctement.
Si le fichier que vous copiez n’existe pas dans le dossier de destination, utilisez la commande suivante :
rsync -v source-directory/newfile dest-directory
#Output
nitt rsync-tutorial
$ rsync -v source-directory/newfile dest-directory
newfile
sent 82 bytes received 35 bytes 234.00 bytes/sec
total size is 0 speedup is 0.00
Copie de Plusieurs Fichiers
Pour copier plusieurs fichiers, spécifiez leurs chemins sources, suivis du répertoire cible.
Pour ce faire, créons deux nouveaux fichiers, newfile2
et newfile3
, dans le répertoire source :
touch source-directory/newfile{2..3}
Puis, synchronisez-les avec la commande suivante :
rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output
nitt rsync-tutorial
$ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
newfile2
newfile3
sent 135 bytes received 54 bytes 378.00 bytes/sec
total size is 0 speedup is 0.00
nitt rsync-tutorial
$
Copie de Fichiers ou Répertoires de Local à Distance
La syntaxe rsync pour un transfert local vers distant est :
rsync option SOURCE [email protected]:DEST
Vous devez connaître l’adresse IP de la machine distante. L’adresse IP est à spécifier après le fichier source.
rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Le système vous demandera un mot de passe. Si l’utilisateur est différent sur la machine distante, mentionnez-le avant l’adresse IP, suivi de @
:
rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory
Pour copier plusieurs fichiers ou répertoires, listez les fichiers ou chemins de répertoires. La syntaxe est :
rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Spécification de Protocoles pour le Transfert Distant
Rsync permet de spécifier des protocoles de transfert spécifiques grâce à l’option -e
, suivie du protocole :
Par exemple, pour utiliser le protocole ssh :
rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Copie de Fichiers ou Répertoires de Distant à Local
La syntaxe rsync pour un transfert distant vers local est :
sync option [email protected]:SRC DEST
Pour récupérer les fichiers ou répertoires d’un serveur distant vers votre ordinateur local, utilisez :
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Cette commande extrait les fichiers du répertoire dest de la machine distante vers le répertoire source de la machine locale.
Pour extraire un fichier spécifique, indiquez son chemin complet :
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory
Pour copier plusieurs fichiers ou répertoires, spécifiez les chemins entre accolades (séparés par des virgules) après l’adresse IP du serveur:
rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory
De la même manière, vous pouvez indiquer des fichiers.
Affichage de la Progression en Direct
Pour les sauvegardes de données volumineuses, il est utile de visualiser la progression en direct. Utilisez l’indicateur --progress
pour afficher la vitesse de transfert, le temps restant et la quantité de données transférées :
rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Suppression des Fichiers Source Après le Transfert
L’option --remove-source-files
permet de supprimer les fichiers source après le transfert, ce qui peut être utile pour sécuriser vos fichiers ou libérer de l’espace.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Test d’Exécution avec rsync
Rsync permet d’effectuer des tests d’exécution pour éviter des erreurs. Utilisez l’option --dry-run
pour simuler la synchronisation :
sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial
$ sudo rsync -v --dry-run source-directory/file1 dest-directory
file1
sent 43 bytes received 19 bytes 124.00 bytes/sec
total size is 474 speedup is 7.65 (DRY RUN)
nitt rsync-tutorial
La sortie est identique à une exécution normale, mais elle contient l’indication (DRY RUN)
.
Définition de la Taille Minimale et Maximale des Fichiers
Rsync permet de définir une taille minimale ou maximale pour le transfert. Pour une taille minimale de 15 Ko, utilisez l’option --min-size=15k
:
rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Cette commande copiera seulement les fichiers dont la taille est d’au moins 15 Ko. De même, utilisez --max-size
pour définir une taille maximale :
rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Ici, rsync ignorera les fichiers de plus de 450 Ko.
Définition de la Limite de Bande Passante
Pour limiter la bande passante lors du transfert, utilisez le paramètre --bwlimit=KB/s
:
rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Dans cet exemple, nous limitons la bande passante à 100 Ko/s.
Conclusion
Ce guide vous a permis de découvrir l’utilisation de la commande rsync. Nous avons abordé de nombreux cas d’utilisation. Cependant, rsync offre encore plus de fonctionnalités. Pour approfondir le sujet, consultez la page de manuel de rsync.
N’hésitez pas à explorer également les feuilles de triche pour la ligne de commande pour Windows, Linux et macOS.