{{tag>sauvegarde synchronisation}}
----
====== rsync ======
===== Présentation =====
**rsync** (pour **r**emote **sync**hronization ou synchronisation à distance) est un logiciel ((sous licence **[[wpfr>Licence_publique_générale_GNU|GNU GPL]]**)) de synchronisation de fichiers. Il est fréquemment utilisé pour mettre en place des systèmes de [[:sauvegarde]] distante ou des [[points_de_restauration_pour_un_systeme_linux|points de restauration]] du système (via l'interface [[timeshift|Timeshift]]).
rsync travaille de manière unidirectionnelle c'est-à-dire qu'il synchronise, copie ou actualise les données d'une source (locale ou distante) vers une destination (locale ou distante) en ne transférant que les octets des fichiers qui ont été modifiés.
La notion d’unidirectionnalité semble souvent mal comprise : elle signifie qu'en une commande, la synchronisation ne peut se faire que dans un sens. Rien n'empêche ensuite de relancer la commande une seconde fois dans l'autre sens !
D'un point de vue de l'entreprise, un [[:tutoriel:serveur_de_synchronisation_avec_rsync|serveur de synchronisation]] est utile pour centraliser les sauvegardes sur une même machine équipée accessoirement d'un enregistreur de bande.
Pour le particulier, il est intéressant (si vous avez plusieurs machines), d'avoir une sauvegarde simple et rapide de son //Dossier Personnel//. \\
Ici nous verrons son utilisation basique. Pour plus de détails, allez voir ce [[tutoriel:sauvegarder_home_avec_rsync|tutoriel : "Sauvegarder "/home" avec rsync"]].
Pour les personnes qui n’aiment pas la ligne de commande, **il existe une interface graphique à rsync : [[grsync|Grsync]] !!**
===== Utilisation =====
Comme l'indique le manuel :
"rsync est un programme très similaire à rcp, mais possède bien plus d'options et utilise le protocole de mise à jour à distance rsync afin d'accélérer significativement le transfert de fichiers lorsque le fichier de destination existe déjà."
L'appel de base :
rsync source/ destination/
En __local__, pour une copie/synchro de votre répertoire vidéo vers un disque dur externe (de sauvegarde) [[montage|monté]] dans **/media/$USER/**, cela donne :
rsync -av /home/$USER/Vidéos/ /media/$USER/film_music/Vidéos/
L'option "**v**" affiche les fichiers sauvegardés au fur et à mesure. Pour l'option "**a**", voir plus bas.
//$USER// est la variable d’environnement système qui permet d'accéder au nom d’utilisateur de la session en cours.\\
Vous pouvez relancer cette commande à chaque nouvelle synchro, seuls les nouveaux fichiers seront synchronisés.
En __réseau__, **rsync** utilise [[SSH]] par défaut. Un exemple :
rsync -az source/ login@serveur.org:/destination/
où:
* //-a// ou //%%--%%archive// : est un moyen rapide de dire que vous voulez la récursivité et préserver pratiquement tout. La seule exception est que si //%%--%%files-from// a été spécifiée alors //-r// n'est pas utilisée. Ceci est équivalent à //-rlptgoD//.
* //-z// ou //%%--%%compress// : compresse les données lors du transfert. (Limite la bande passante mais augmente l'utilisation processeur et le temps de transfert : inutile en réseau local ou avec très bon débit)
Attention, il convient d'être vigilant dans l'utilisation ou non du slash (« / ») dans le chemin de la source. Ainsi, les deux commandes suivantes **ne sont pas** équivalentes :
rsync source destination/
rsync source/ destination/
En effet, la première commande va **_créer_** le dossier source dans le dossier destination en ajoutant donc un niveau dans l'arborescence. La deuxième commande copie le **_contenu_** du dossier source dans le dossier destination.
Autrement dit, les deux commandes suivantes sont, elles, équivalentes* :
rsync source destination/
rsync source/ destination/source/
Enfin, il faut noter que l'utilisation ou non d'un slash final dans le chemin de la destination n'a aucune incidence. Les deux commandes suivantes sont donc équivalentes :
rsync source destination/
rsync source destination
* Sauf dans le cas ou source est un lien symbolique vers un répertoire, la première commande ne copie que le lien, tandis que la seconde travaille bien à l'intérieur du répertoire
Pour une gestion du port ssh, utiliser la syntaxe suivante:
rsync -avz chemin/source/ -e "ssh -p port" user@ip:"/chemin/de destination avec espaces/"
==== Créer un dossier miroir ====
Voici un exemple d'une commande, utilisant le protocole [[SSH]], qui copie à l'identique le dossier