Comment utiliser rsync avec des exemples
- Mise à jour le 30 nov. 2025
rsync (remote synchronization) est un puissant outil en ligne de commande permettant de copier et de synchroniser des fichiers et des répertoires sur des systèmes aussi bien locaux que distants.
Il est idéal pour copier des données et sauvegarder des serveurs de fichiers. Toutefois, il n’est pas adapté aux fichiers en cours d’utilisation, comme les bases de données ou les machines virtuelles en fonctionnement, car cela entraîne généralement des copies corrompues ou inutilisables.
- Notes :
- Pour les transferts distants, rsync doit être installé à la fois sur la machine source et sur la machine de destination.
- Particulièrement adapté aux fichiers plats (textes, images, vidéos, archives, etc.).
- Non adapté aux données actives ou verrouillées, comme les bases de données ou les machines virtuelles en cours d’exécution.
Installer rsync
rsync n'est généralement pas préinstallé dans les distributions, donc la première chose à faire et de lancer l'installation.
- Debian/Ubuntu :
user@host:~$ sudo apt install rsync
- Arch Linux :
[root@host ~]# pacman -S rsync
Exemples
Copier un fichier
Commençons de façon simple, nous allons ici utiliser rsync pour copier un fichier présent dans le dossier /home/std/ vers /tmp/.
rsync -av.- Ligne de commande :
user@host:~$ rsync -av /home/std/myfile_source /tmp/myfile_dest
- Options :
-aou--archivequi inclut :-r: récursivité pour les répertoires-l: copie les liens symboliques comme liens symboliques-p: préserve les permissions-t: préserve les dates-g: préserve le groupe-o: préserve le propriétaire (root uniquement)-D(--devices)
-v: plus verbeux
Copier un dossier
On pourra aussi utiliser rsync pour récursivement copier un dossier. Ici on copiera le dossier /home/std vers /tmp/.
rsync -av.- Ligne de commande :
user@host:~$ rsync -av /home/std/ /tmp/folder_dest
- Options :
-aou--archivequi inclut :-r: récursivité pour les répertoires-l: copie les liens symboliques comme liens symboliques-p: préserve les permissions-t: préserve les dates-g: préserve le groupe-o: préserve le propriétaire (root uniquement)-D(--devices)
-v: plus verbeux
Copie à travers le réseau
Plus intéressant, nous pouvons utiliser rsync pour copier des fichiers ou dossiers à travers le réseau. Pour cela, rsync doit être installé sur les deux hôtes et un serveur ssh doit être fonctionnel sur l'hôte distant.
rsync -av -e 'ssh -p 22'.- Ligne de commande :
user@host:~$ rsync -av -e 'ssh -p 22' /home/std user@192.168.1.100:/data/
- Options :
-aou--archivequi inclut :-r: récursivité pour les répertoires-l: copie les liens symboliques comme liens symboliques-p: préserve les permissions-t: préserve les dates-g: préserve le groupe-o: préserve le propriétaire (root uniquement)-D(--devices)
-v: plus verbeux
-e: Spécifie le shell distant à utiliser, permet aussi de préciser leport ssh(utile si le serveur distant écoute sur un port spécifique)
Autres
- Copier les fichiers depuis l'hôte distant vers l'hôte local :
user@host:~$ rsync -av -e 'ssh -p 22' user@192.168.1.100:/data/std /home/
Les sauvegardes
Comme expliqué précédemment, rsync est particulièrement adapté à la sauvegarde des serveurs de fichiers. Nous allons voir ici comment réaliser une sauvegarde vers un disque USB, un hôte distant et également comment utiliser les sauvegardes incrémentales dans le but de réduire la consommation de l'espace disque de la destination.
Sauvegarder vers un disque USB
Nous allons ici réaliser une sauvegarde complète d'un système GNU/Linux. Nous exclurons de la sauvegarde les dossiers spéciaux ou inutiles (/dev, /mnt, /proc, /sys et /tmp). Le dossier de destination sur le disque USB sera automatiquement nommé avec la date du jour et aura le format suivant : back-YYYY-MM-dd.
rsync -av avec des répertoires exclus.- Ligne de commande (la source est
/et la destination/mnt/usb/) :
root@host:~# rsync -av --delete --delete-excluded --exclude=/tmp --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/mnt / /mnt/usb/back-$(date "+%Y-%m-%d")
- Options :
-aou--archivequi inclut :-r: récursivité pour les répertoires-l: copie les liens symboliques comme liens symboliques-p: préserve les permissions-t: préserve les dates-g: préserve le groupe-o: préserve le propriétaire (root uniquement)-D(--devices)
-v: plus verbeux
--exclude=MOTIF: exclut les fichiers correspondant au MOTIF.
--delete(optionnel ici) : efface les fichiers (sur la destination) qui n'existent pas chez l'émetteur
--delete-excluded(optionnel ici) : efface également les fichiers exclus côté réception (sur la destination)
Sauvegarde incrémentales
Une des fonctionnalités les plus intéressante de rsync est qu'il est capable de réaliser des sauvegardes incrémentales. Pour ce faire, il utilise les hardlinks. Pour chaque fichier à sauvegarder, rsync le comparera à celui de la dernière sauvegarde (le dossier pointé par le lien symbolique current sur le disque USB (cad la dernière sauvegarde)) : si le fichier est identique, il créera un hardlink et donc n'utilisera pas d'espace disque supplémentaire, dans le cas ou le fichier est nouveau ou est différent il créera un nouveau fichier.
Bien sûr le lien symbolique current devra initialement être créé manuellement et mis à jour après chaque sauvegarde dans le but de le faire pointer à chaque fois vers la dernière sauvegarde en date.
Comme on peut le voir sur le diagramme, la première sauvegarde fera office de complète et prendra le plus de place (10Go ici), puis les autres sauvegardes ne consommeront que la différence (1Go dans cet exemple).
Une dernière chose à savoir, dans le cas ou l'on souhaite libérer de la place sur le disque USB il faudra supprimer les sauvegardes de la plus ancienne à la plus récente (pour éviter de casser les hardlinks).
- Les trois phases pour réaliser des sauvegardes rsync incrémentales :
- PRE-BACKUP : le disque USB est monté sur
/mnt/usb/ - BACKUP : on lance la sauvegarde
rsync, rsync utilise le lien symboliquecurrentqui pointe sur la dernière sauvegarde qui est iciback-2025-11-28. - POST-BACKUP : une fois la sauvegarde rsync terminée, nous devons mettre à jour le lien symbolic
currentafin de le faire pointer vers notre dernière sauvegarde qui est iciback-2025-11-29.
- PRE-BACKUP : le disque USB est monté sur
rsync et --link-dest.Sauvegarde vers un disque USB avec incrémentales
C'est l'application détaillée de ce que nous avons vu juste au-dessus.
rsync et de --link-dest.- Options :
-aou--archivequi inclut :-r: récursivité pour les répertoires-l: copie les liens symboliques comme liens symboliques-p: préserve les permissions-t: préserve les dates-g: préserve le groupe-o: préserve le propriétaire (root uniquement)-D(--devices)
-v: plus verbeux
--exclude=MOTIF: exclut les fichiers correspondant au MOTIF.
--delete: efface les fichiers (sur la destination) qui n'existent pas chez l'émetteur
--delete-excluded: efface également les fichiers exclus côté réception (sur la destination)
- La ligne de commande pour la sauvegarde (la source est
/et la destination/mnt/usb/:
user@host:~$ rsync -av --delete --delete-excluded --exclude=/tmp --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/mnt --exclude=/media --link-dest=/mnt/usb/current / /mnt/usb/back-$(date "+%Y-%m-%d")
- Mettre à jour le lien symbolique
current:- Supprimer le lien symbolique
current:
- Supprimer le lien symbolique
user@host:~$ rm -f /mnt/usb/current
- Recréer le lien symbolique
current:
user@host:~$ ln -s /mnt/usb/back-$(date "+%Y-%m-%d") /mnt/usb/current
- Vérifier l'espace occupé par les sauvegardes incrémentales :
user@host:~$ du -sh /mnt/usb/back-*
10G back-2025-11-25
1G back-2025-11-26
1G back-2025-11-27
1G back-2025-11-28
Sauvegarde à travers le réseau avec incrémentales
Identique à ci-dessus mise à part que la destination est ici un serveur de backup sous GNU/Linux donc la sauvegarde passera par le réseau.
rsync et de --link-dest.- Options :
-aou--archivequi inclut :-r: récursivité pour les répertoires-l: copie les liens symboliques comme liens symboliques-p: préserve les permissions-t: préserve les dates-g: préserve le groupe-o: préserve le propriétaire (root uniquement)-D(--devices)
-v: plus verbeux
--exclude=MOTIF: exclut les fichiers correspondant au MOTIF.
--delete: efface les fichiers (sur la destination) qui n'existent pas chez l'émetteur
--delete-excluded: efface également les fichiers exclus côté réception (sur la destination)
- La ligne de commande pour la sauvegarde (la source est
/et la destination/backup/du serveur192.168.1.100) :
user@host:~$ rsync -av --delete --delete-excluded --exclude=/tmp --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/mnt --exclude=/media --link-dest=/backup/current / user@192.168.1.100:/backup/back-$(date "+%Y-%m-%d")
- Mettre à jour le lien symbolique
current:- Supprimer le lien symbolique
current:
- Supprimer le lien symbolique
user@host:~$ ssh -p 22 user@192.168.1.100 "rm /backup/current"
- Recréer le lien symbolique
current:
user@host:~$ ssh -p 22 user@192.168.1.100 "ln -s /backup/back-$(date "+%Y-%m-%d") /backup/current"
Autres
Voici quelques options supplémentaires que je trouve utiles.
- Afficher la progression pendant le transfert :
user@host:~$ rsync --progress -av /home/std/folder_source/ remoteuser@192.168.1.100:/tmp/folder_dest
- Afficher les stats à la fin du transfert :
user@host:~$ rsync --stats -av /home/std/folder_source/ remoteuser@192.168.1.100:/tmp/folder_dest
- Limiter la bande passante utilisé à une limite définie :
user@host:~$ rsync --progress -av --bwlimit=100k /home/std/folder_source/ remoteuser@192.168.1.100:/tmp/folder_dest
- Transférer seulement les fichiers dont la date de modification est de 3 jours maximum dans le dossier
/tmp/:
user@host:~$ rsync --progress -av remoteuser@192.168.1.100:/ --no-relative --files-from=<(ssh remoteuser@192.168.1.100 find /data/* -mtime -3 -type f) /tmp/
- Copie mirroir (
--delete: supprime les fichiers dans le répertoire de destination si non présents dans le dossier source) :
user@host:~$ rsync -av --progress --delete /home/std/ /tmp/folder_dest
Comment utiliser Rsync sur une machine distante avec les droits root
- Ajouter l'entrée
sudosur l'hôte distant :
root@host:~# visudo
user ALL=NOPASSWD:/usr/bin/rsync
- Rsync avec l'utilisation de
sudosi besoin d'avoir les droits root sur l'hôte distant :
user@host:~$ rsync -av -e 'ssh -p 22' --rsync-path='sudo rsync' /home/std user@192.168.1.100:/data/