Linux / Commande rsync : synchroniser les fichiers et vérifier le plan

rsync copie et met à jour des fichiers entre deux emplacements, localement ou via un transport distant tel que SSH. Par défaut, il sélectionne les fichiers à transférer en comparant leur taille et leur date de modification. Vérifiez la source, la destination et le plan avec --dry-run avant l’exécution, surtout si une suppression est envisagée.

Comprendre le chemin source et préparer un essai isolé

La syntaxe habituelle place la source avant la destination. Vérifiez rsync --version et man rsync ; les fonctions dépendent des versions et des systèmes de fichiers.

rsync [OPTIONS] SOURCE DESTINATION

Quand la destination est un répertoire existant, source/ signifie copier le contenu de source, tandis que source ajoute normalement le répertoire nommé source dans la destination. Le tableau suppose que source contient notes.txt et que destination existe :

Source Destination Fichier obtenu
source/ destination/ destination/notes.txt
source destination/ destination/source/notes.txt

Pour observer cette différence sans reprendre vos vrais dossiers, créez un petit espace temporaire dans un shell Bash. Exécutez la suite seulement si toutes les commandes de préparation réussissent et conservez le même terminal :

demo=$(mktemp -d) &&
mkdir "$demo/source" "$demo/contents" "$demo/parent" &&
printf 'Notes de demonstration\n' > "$demo/source/notes.txt" &&
printf 'Repertoire de travail : %s\n' "$demo"

La variable demo désigne le nouveau répertoire affiché. Chaque chemin est cité pour conserver les espaces éventuels. Ces fichiers sont un exemple jetable ; ne remplacez pas ces chemins par un répertoire important pour apprendre la différence de structure.

Prévisualiser, copier puis vérifier

rsync -av --dry-run "$demo/source/" "$demo/contents/"
rsync -av --dry-run "$demo/source" "$demo/parent/"

Les plans doivent respectivement annoncer notes.txt sous contents et source/notes.txt sous parent. Les autres lignes de sortie dépendent de la version. --dry-run, ou -n, ne copie pas les données ; ses statistiques de volume ne représentent donc pas le coût d’un transfert réel.

Après avoir vérifié les deux chemins annoncés, appliquez les mêmes commandes en retirant seulement --dry-run :

rsync -av "$demo/source/" "$demo/contents/" && cmp "$demo/source/notes.txt" "$demo/contents/notes.txt"
rsync -av "$demo/source" "$demo/parent/" && cmp "$demo/source/notes.txt" "$demo/parent/source/notes.txt"

cmp ne produit normalement rien et renvoie 0 si les octets des deux petits fichiers correspondent. && évite de comparer après une copie en échec. Gardez l’espace d’essai tant que vous examinez sa structure ; il ne contient que les fichiers préparés pour cet exemple.

Pour répéter ce principe avec project/ vers backup/project/, confirmez que project est la bonne source et que le parent backup existe. Un dossier source vide parce qu’un volume n’est pas monté n’est pas la même chose qu’une source volontairement vide. Ne poursuivez pas une opération de miroir sans lever cette ambiguïté.

La sélection par taille et date ne compare pas tous les contenus avant chaque transfert. -c demande une comparaison préalable par somme de contrôle et impose davantage de lectures. Cette sélection est distincte de l’algorithme de transfert des différences ; les copies entièrement locales utilisent normalement le transfert de fichiers entiers. rsync ne signifie donc pas « seuls quelques blocs sont toujours écrits ».

Choisir les attributs et le transport distant

-a est le mode archive, généralement équivalent à -rlptgoD : récursion, liens symboliques et plusieurs attributs. Il ne comprend pas automatiquement la préservation des listes de contrôle d’accès ACL, attributs étendus ou relations de liens physiques. Les options -A, -X et -H répondent à ces besoins, sous réserve des droits et de la prise en charge des deux systèmes.

Archive ne signifie ni fichier compressé ni sauvegarde complète universelle. Les propriétaires et certains objets spéciaux demandent aussi des permissions adaptées. Définissez ce qui doit être restaurable avant de multiplier les options.

rsync -av --dry-run -e 'ssh -p 2222' project/ alice@server.example.com:/home/alice/project/

Ce plan distant suppose rsync installé des deux côtés, un compte et des chemins autorisés, ainsi qu’un service SSH au port indiqué. Remplacez toutes les valeurs d’exemple. Le transport SSH implique sa propre authentification et la vérification de la clé d’hôte ; --dry-run ne supprime pas cette connexion ni les éventuels effets de confiance du client SSH.

La forme hôte:chemin utilise un shell distant, normalement SSH. hôte::module et rsync:// désignent un accès à un démon rsync : ne supposez pas qu’ils offrent le même chiffrement que SSH. Après un plan correct, reprenez les mêmes paramètres pour la copie réelle ; une source modifiée entre-temps peut changer le résultat.

Comprendre les exclusions, suppressions et limites d’une sauvegarde

Option Utilité
-a Regrouper la récursion et plusieurs attributs, sans inclure tous les types de métadonnées.
-v Afficher les éléments traités.
-n, --dry-run Examiner un plan sans appliquer la copie et les suppressions rsync.
--exclude=motif Exclure les chemins correspondants selon les règles de filtre.
--delete Supprimer des éléments propres au récepteur dans le périmètre synchronisé.
-e commande Choisir la commande de shell distant et ses options.

Pour examiner seulement un projet de suppression dans l’espace d’essai, sans le réaliser :

rsync -av --dry-run --delete "$demo/source/" "$demo/contents/"

Dans cet essai inchangé, il ne devrait pas y avoir d’élément propre à contents à supprimer. Dans un vrai miroir, les lignes de suppression désignent les éléments qui existent au récepteur mais pas dans la source transférée. Confirmez les chemins résolus, le montage attendu et chaque règle avant toute exécution sans -n.

Une exclusion simple protège normalement aussi les fichiers correspondants contre les suppressions au récepteur ; --delete-excluded ou des filtres appliqués à un seul côté peuvent changer cet effet. Un motif d’exclusion n’est donc pas une règle de suppression à deviner. Le manuel officiel rsync décrit ces interactions.

Une synchronisation unique peut propager une erreur, un écrasement ou une corruption de la source. Conservez des versions ou copies indépendantes selon le besoin, puis vérifiez une restauration. Le cours sur les sauvegardes tar et leur restauration explique cette validation ; le cours sur l’automatisation des sauvegardes et les contrôles indépendants précise les conditions d’une exécution périodique.