rsync : synchroniser, copier des fichiers à distance ou locaux

Rsync (remote sync) est un utilitaire qui permet de synchroniser deux dossiers distants et même locaux.
Il utilise un algorithme qui minimise la quantité de données copiées en ne déplaçant que les parties des fichiers qui ont changé.
On peut donc aussi l'utiliser pour transférer et copier des fichiers vers une machine distante.

Les avantages offerts par rsync :

  • Il copie et synchronise efficacement les fichiers vers ou depuis un système distant.
  • Prend en charge la copie de liens, d'appareils, de propriétaires, de groupes et d'autorisations.
  • Il est plus rapide que scp (copie sécurisée) car rsync utilise un protocole de mise à jour à distance qui permet de transférer uniquement les différences entre deux ensembles de fichiers. La première fois, il copie tout le contenu d'un fichier ou d'un répertoire de la source vers la destination, mais la fois suivante, il ne copie que les blocs et octets modifiés vers la destination.
  • Rsync consomme moins de bande passante car il utilise la méthode de compression et de décompression lors de l'envoi et de la réception de données aux deux extrémités.

Rsync est disponible sur toutes les distributions Linux mais aussi les NAS (synology, QNAP, netgear, etc).
Enfin on trouve aussi des adaptations pour Windows.

rsync : synchroniser, copier des fichiers à distance ou locaux

rsync : synchroniser deux dossiers à distance ou locaux

Syntaxe de base

rsync fonctionne tout autant de local à local, que de local vers distant ou distant vers local.

La syntaxe est classique comme tout utilitaire de copie, on indique la source et la destination :

rsync dir1/ dir2

Ici ce sont des copies locales, ce qui peut s'avérer pratique par exemple pour transférer des données strictement identique d'un disque à l'autre.

La syntaxe pour synchroniser ou transférer des fichiers avec une machine distante :

rsync [source] [user]@[host]:[destination]

Ainsi pour transférer par rsync en mode push, c'est à dire d'un dossier local vers un dossier distant :

  • le dossier /home/malekalmorte
  • vers une machine distance serveur_ovh.domain.tld avec l'utilisateur Linux malekalmorte
  • et comme destination le dossier /sauvegarde/home/malekalmorte

Cela donne la syntaxe suivante :

rsync /home/malekalmorte [email protected][serveur_ovh.domain.tld:/sauvegarde/home/malekalmorte

Enfin l'inverse, c'est à dire rsync en mode pull, soit du dossier distant vers le dossier local :

rsync [email protected][serveur_ovh.domain.tld:/sauvegarde/home/malekalmorte /home/malekalmorte

Ainsi, c'est une syntaxe assez proche de celle de SCP (Secure Copy).

Les options de la commande rsync

Les OptionsDescriptions
-aMode archivage. Équivalent à -rlptgoD
-gPréserve le groupe
-DPréserve les périphériques. Nécessite d'être root
-lCopie les liens symboliques comme liens symboliques
-oPréserve le propriétaire. Nécessite d'être root
-pPréserve les permissions
-oPréserve le propriétaire. Nécessite d'être root
-PCombine les options --progress et --partial
-rCopie récursive des répertoires
-tPréserve les dates
-u Cela force rsync à ignorer tous les fichiers qui existent sur la destination et dont l'heure de modification est plus récente que le fichier source.
-vMode verbose pour afficher de nombreuses informations sont affichées lors du transfert.
-zCompresse le fichier pour un meilleur transfert par le réseau
–deleteSynchronisation et miroir parfaite, le fichier de destination sera supprimé, s'il n'est pas présent dans la source
--exclude=Exclure des fichiers de la sauvegarde
–max-sizeIndique une taille maximal de fichier à ne pas transférer
--partialPar défaut, rsync supprimera tout fichier partiellement transféré si le transfert est interrompu.
--partial indique à rsync de conserver le fichier partiel, ce qui devrait accélérer le transfert du reste du fichier.
--progressAffiche une barre de progression
Les options de la commande rsync

Copier et transferer des fichiers en récursif

Pour copier un dossier de manière récursive, on utilise l'option -r :

rsync -r dir1/ dir2

Mettre à jour le contenu d'un dossier

Afin d'économiser de la bande passante et du temps, nous pouvons éviter de copier les fichiers que nous avons déjà dans le dossier de destination qui n'ont pas été modifiés dans le dossier source.
Pour ce faire, nous pouvons ajouter le paramètre -u à rsync, cela synchronisera le dossier de destination avec le dossier source.

rsync -rtvu source_rep/ destination_rep/

Par défaut rsync se base sur la date de modification du fichier.
Mais avec le paramètre -c, on peut lui demander d'utiliser une somme de contrôle dans les fichiers à transférer.
Cela ignorera tout fichier où la somme de contrôle coïncide.

rsync -rtvuc source_rep/ destination_rep/

synchroniser deux dossiers avec rsync

Voici comment synchroniser deux dossiers sur un serveur distant :

rsync -artvu ~/dir1 [email protected]_distance:destination_rep
  • --delete-before recherche les fichiers manquants et les supprimer avant de procéder au transfert. Il s'agit du comportement par défaut et peut être défini avec
  • --delete-after recherche les fichiers manquants une fois le transfert terminé, avec le paramètre
  • --delete-during peut supprimer les fichiers effectués lors du transfert, lorsqu'un fichier est trouvé manquant, il est supprimé à ce moment-là.
  • --delete-delay effectue le transfert et trouver les fichiers manquants pendant ce processus, mais au lieu de supprimer les fichiers pendant ce processus, attend jusqu'à ce qu'il soit terminé et supprime les fichiers trouvés par la suite

Exclure des fichiers du transfert et synchronisation

On utilise --exclure= pour exclure des fichiers de la copie et du transfert distant.
Si vous devez exclure plusieurs dossiers, il faut alors les lister l'un après l'autre de cette manière :

 rsync -vrzlptD --stats --exclude=".zfs/" --exclude="sauvegardes" --exclude="*.svgA" --exclude "data/clients/" --exclude "data/nas/" --exclude='logs' --exclude 'temp' --delete [source] [user]@[host]:[destination]

Cela peut donc devenir vite illisible mais dans ce cas, on se rabat sur --exclude-from qui permet de faire appel à un fichier avec la liste des exclusions
Cela permet aussi de partager la liste entre machine.

Par exemple le fichier exclusion.txt avec :

repertoire
relative/chemin/vers/repertoire
fichier.txt
relative/chemin/vers/file.txt
/home/malekalmorte/repertoire
/home/malekalmorte/repertoire.txt
*.tmp
*.swp

Enfin on appelle ce dernier dans --exclude-from :

rsync -vrzlptD --stats --exclude-from 'exclusion.txt' --delete [source] [user]@[host]:[destination]

Limiter la bande passante

L’option –bwlimit permet de limiter la bande passante.
La valeur sera supposée être en unités de 1024 octets.

rsync --bwlimit=100 ~/dir1 [email protected]_distance:destination_rep

On peut aussi utiliser trickle de cette manière :

trickle -s -d 3000 -u 3000 rsync ~/dir1 [email protected]_distance:destination_rep

rsync Over SSH

Avec rsync, il est possible d'utiliser SSH (Secure Shell) pour le transfert de données, en utilisant le protocole SSH lors du transfert de nos données.
Vous pouvez être assuré que vos données sont transférées dans une connexion sécurisée à travers un chiffrement sûr et sécurisé.

De plus, lorsque nous utilisons rsync, nous devons fournir le mot de passe utilisateur / racine pour accomplir cette tâche particulière, donc l'utilisation de l'option SSH enverra vos connexions de manière chiffrée afin que votre mot de passe soit sécurisé.

Enfin si vous avez généré une paire de clés SSH , on peut s'authentifier à travers ces dernières sans mot de passe.

Pour cela, on utilise le paramètre -e ssh :

rsync -e ssh ~/dir1 [email protected]_distance:destination_rep

Tags: