Présentation de l'outil
rsync est une application essentielle pour la synchronisation de fichiers sur les systèmes de type UNIX. Son fonctionnement repose sur l'échange d'écarts entre la source et la destination, transférant uniquement les différences détectées, ce qui le rend extrêmement efficace pour les mises à jour répétées. Contrairement à une copie complète, il minimise la charge réseau et le temps d'exécution.
Installation
L'outil doit être présent sur les deux systèmes impliqués dans la synchronisation. Voici les commandes pour les distributions courantes :
# Pour les distributions basées sur Debian
sudo apt install rsync
# Pour les distributions basées sur Red Hat
sudo dnf install rsync
# Pour Arch Linux
sudo pacman -S rsync
Fonctionnalités de base
Synchronisation récursive
L'option -a (mode archive) est la méthode préconisée. Elle préserve les métadonnées comme les permissions, les horodatages et les liens symboliques.
rsync -a /chemin/source/ /chemin/destination
La présence du slash terminal dans le chemin source est cruciale. Avec le slash, le contenu du répertoire source est copié dans la destination. Sans le slash, le répertoire source lui-même est copié à l'intérieur de la destination.
Aperçu des modifications (mode simulation)
Pour prévisualiser les actions sans les exécuter, on combine les options -n (dry-run) et -v (verbose) :
rsync -anv /donnees/ /sauvegarde/
Miroir complet de répertoires
Pour que la destination devienne une copie exacte de la source, y compris en supprimant les fichiers absents de la source, on ajoute --delete :
rsync -av --delete /site-web/ /copie-miroir/
Filtrage des fichiers
Exclusion sélective
Les motifs d'exclusion permettent d'ignorer certains fichiers ou répertoires. On peut les spécifier directement :
rsync -av --exclude='*.log' --exclude='cache/' /projet/ /backup/
Ou les charger depuis un fichier dédié contenant une liste de motifs, un par ligne :
rsync -av --exclude-from='fichier-regles.txt' /projet/ /backup/
Inclusion conditionnelle
Pour n'inclure que certains fichiers dans un transfert, on peut combiner inclusion et exclusion globale :
rsync -av --include='*.html' --include='*.css' --exclude='*' /site/ /distant/
Synchronisation à distance
Transfert via SSH
rsync s'appuie par défaut sur le protocole SSH pour les transferts sécurisés. La syntaxe pour envoyer vers un serveur distant est :
rsync -av /donnees-locales/ utilisateur@hote:/repertoire-distant
Pour récupérer des fichiers depuis un serveur distant :
rsync -av utilisateur@hote:/repertoire-distant/ /repertoire-local
Pour utiliser un port SSH non standard, spécifiez-le via l'option -e :
rsync -av -e 'ssh -p 443' /fichier/ user@serveur:/chemin
Utilisation du daemon rsync
Lorsqu'un service rsync est actif sur un serveur (port 873), on peut utiliser le protocole natif avec la syntaxe à double deux-points :
rsync -av /donnees/ hote::module/chemin
Sauvegarde incrémentielle
L'une des forces de rsync est sa capacité à créer des sauvegardes incrémentielles efficaces en utilisant des liens physiques. L'option --link-dest pointe vers la sauvegarde précédente ; seuls les fichiers modifiés sont réellement copié, les autres sont liés physiquement.
#!/bin/bash
# Script de sauvegarde incrémentielle
SOURCE="${HOME}"
STOCKAGE="/backups"
HORODATAGE=$(date +%Y%m%d_%H%M%S)
CIBLE="${STOCKAGE}/${HORODATAGE}"
DERNIER="${STOCKAGE}/dernier"
mkdir -p "${STOCKAGE}"
rsync -a --delete \
--exclude=".cache" \
--link-dest="${DERNIER}" \
"${SOURCE}/" \
"${CIBLE}"
# Mise à jour du lien symbolique pointant vers la dernière sauvegarde
rm -f "${DERNIER}"
ln -s "${CIBLE}" "${DERNIER}"
Paramètres avancés courants
-z: Compresse les données pendant le transfert pour réduire la bande passante.--bwlimit=KO: Limite l'utilisation de la bande passante (ex:--bwlimit=5000).--partial: Conserve les fichiers partiellement transférés, utile pour reprendre un transfert interrompu.-c, --checksum: Force la vérification par somme de contrôle plutôt que par date/taille. Plus lent mais plus fiable.-u, --update: Ne remplace pas un ficheir existant à la destination si celui-ci est plus récent.--remove-source-files: Suprime les fichiers de la source après un transfert réussi.