Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
rsync [Le 16/06/2011, 17:11]
88.185.121.199 [Présentation]
rsync [Le 15/05/2025, 15:19] (Version actuelle)
krodelabestiole mise en forme / +rclone +rsnapshot / réorganisation / màj
Ligne 1: Ligne 1:
 {{tag>​sauvegarde synchronisation}} {{tag>​sauvegarde synchronisation}}
- 
----- 
  
 ====== rsync ====== ====== rsync ======
- 
  
 ===== Présentation ===== ===== Présentation =====
-rsync (**r**emote **sync**hronization ou synchronisation à distance) est un logiciel de synchronisation de fichiers. Il est fréquemment utilisé pour mettre en place des systèmes de sauvegarde distante. rsync travaille de manière unidirectionnelle c'​est-à-dire qu'il synchronise,​ copie les données d'une source vers une destination. 
  
-C'est un logiciel libre sous licence **[[wpfr>​Licence_publique_générale_GNU|GNU GPL]]**.+**[[wpfr>​rsync]]**(([[https://​github.com/​RsyncProject/​rsync|GitHub]])) (pour //​**r**emote **sync**hronization//​ ou synchronisation à distance) ​est une application ((sous licence **[[wpfr>​Licence_publique_générale_GNU|GNU GPL]]**)) de synchronisation de fichiers en [[:commande shell|ligne de commande]]. Il est parfois utilisé pour mettre en place des systèmes de [[:​sauvegarde|sauvegardes]] distantes ou des [[:​points_de_restauration_pour_un_systeme_linux|points de restauration]] du système (par exemple via l'​outil [[:​rsnapshot]] ou l'​interface [[:​Timeshift]]).
  
-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.+**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. 
 +<note help>La notion d’unidirectionnalité semble parfois mal comprise : elle signifie qu'en une commande, la synchronisation ne peut se faire que dans un sens. Rien n'​empêche ensuite ​de lancer une autre commande pour effectuer ​l'opération dans l'​autre sens !</​note>​ 
 + 
 +En particulier pour une 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 un particulier habitué à la [[:commande shell|ligne de commande]], 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 : //​[[:​tutoriel:​sauvegarder_home_avec_rsync|Sauvegarder "/​home"​ avec rsync]]//​. 
 + 
 +Pour les personnes qui n’aiment pas la ligne de commande, il existe des interfaces graphiques à **rsync**, telles que [[:Grsync]].
  
-Pour le particulier,​ il est intéressant (si vous avez plusieurs machines), d'​avoir une sauvegarde simple et rapide de son répertoire home. 
 ===== Utilisation ===== ===== Utilisation =====
 +
 Comme l'​indique le manuel : 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à."​+"//**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 : L'​appel de base :
-    ​rsync source/ destination/​+<code bash>rsync source/ destination/​</​code>​
  
-L'​intérêt est une utilisation à travers le réseau. ​**rsync** utilise ​[[ssh]] par défaut. Un exemple ​+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 -a sourcelogin@serveur.org:​/destination/+<code bash>rsync -av /home/$USER/Vidéos/ /​media/​$USER/​film_music/​Vidéos/</​code>​ 
 +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.
  
-D'après ​le manuel ​:+En **réseau**,​ **rsync** utilise [[SSH]] par défaut. Un exemple : 
 +<code bash>​rsync -az source/ login@serveur.org:/​destination/</​code>​ 
 +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)
  
--a--archive+<note important>​ 
 +Attentionil 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 :​ 
 +<code bash>​rsync source destination/​ 
 +rsync source/ destination/</​code>​
  
-Ceci est équivalent à -rlptgoDC'est un moyen rapide ​de dire que vous voulez ​la récursivité et préserver pratiquement toutLa seule exception ​est que si --files-from a été spécifiée alors -r n'est pas utilisée.+En effet, la première commande va **_créer_** le dossier source dans le dossier destination en ajoutant donc un niveau dans l'​arborescenceLa deuxième commande copie le **_contenu_** du dossier source dans le dossier destination. 
 +Autrement dit, les deux commandes suivantes sont, elles, équivalentes* :​ 
 +<code bash>​rsync source destination/​ 
 +rsync source/ destination/​source/</​code>​  
 + 
 +Enfin, il faut noter que l'​utilisation ou non d'​un ​slash final dans le chemin ​de la destination n'a aucune incidenceLes deux commandes suivantes sont donc équivalentes :​ 
 + 
 +<code bash>​rsync source destination/​ 
 +rsync source destination</​code>​  
 + 
 +* 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 
 +</​note>​ 
 +<​note>​ 
 +Pour une gestion du port ssh, utiliser la syntaxe suivante: 
 +<code bash> 
 +rsync -avz chemin/​source/ ​-e "​ssh ​-p port" user@ip:"/​chemin/​de destination avec espaces/"​ 
 +</​code>​ 
 +</​note>​
  
 ==== Créer un dossier miroir ==== ==== Créer un dossier miroir ====
-Voici un exemple d'une commande, utilisant le protocole ssh, qui copie à l'​identique le dossier <​source>​ vers le dossier <​destination>​. 
  
-Copie du dossier source vers le serveur:+Voici un exemple d'une commande, utilisant le protocole [[:SSH]], qui copie à l'​identique le dossier ​<sourcevers le dossier <​destination>​.
  
-<​code>​rsync -e ssh -avz --delete-after /​home/​mondossier_source user@ip_du_serveur:/​dossier/​destination/</​code>​+Copie du dossier ​source vers le serveur :
  
---delete-after:​ à la fin du transfert, supprime les fichiers dans le dossier de destination ne se trouvant pas dans le dossier source.+<code bash>​rsync -e ssh -avz --delete-after ​/​home/​source user@ip_du_serveur:/​dossier/​destination/</​code>​ 
 +où : 
 +  * ''​%%--%%delete-after'' ​: à la fin du transfert, supprime les fichiers dans le dossier de destination ne se trouvant pas dans le dossier source. 
 +  * ''​-z''​ : compresse les fichiers ​ (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) 
 +  * ''​-v''​ : verbeux 
 +  * ''​-e ssh''​ : utilise le protocole [[:SSH]]
  
--zcompresse les fichiers+Si les noms des chemins contiennent des espaces, on peut les écrire entre guillemet pour échapper les espaces : 
 +<code bash>​rsync ​-e ssh -avz --delete-after "/​home/​source avec espace/"​ user@ip_du_serveur:"/​dossier/​destination avec espace/"</​code>​
  
--vverbosité+<​note>​ 
 +Attention à partir de la version 3.0, d'​après le man, le caractère espace doivent être échappés pour être compris et le chemin doit être indiqué entre apostrophe. Donc l'​instruction précédente devient : 
 +<code bash> 
 +rsync -avz chemin/​source/​ -e "​ssh ​-p port" user@ip:'/​chemin/​de\ destination\ avec\ espaces/'​ 
 +</​code>​ 
 +</​note>​
  
--e ssh: utilise le protocole ssh+Avec l'​option ''​-n''​ la commande liste ce qu'​elle va faire sans l'​exécuter : 
 +<code bash>​rsync ​-e ssh -avzn --delete-after /​home/​mondossier_source user@ip_du_serveur:/​dossier/​destination/</​code>​
  
 +==== Exclure des fichiers ====
  
-Avec l'option -n la commande liste ce qu'elle va faire sans l'exécuter:+On peut exclure des fichiers/​dossiers selon beaucoup de schémas. C'est utile pour ne pas sauvegarder le cache, les fichiers temporaires,​ le répertoire ​''​.git'',​ la corbeille, etc…
  
-<​code>​rsync -e ssh -avzn --delete-after /​home/​mondossier_source user@ip_du_serveur:/​dossier/​destination/</​code>​+L'​exclusion d'​un ​dossier ​est identique à l'​exclusion d'un fichier : il suffit d'​indiquer le chemin d'​accès relatif au répertoire source.
  
 +  * Liste dans la commande : <code bash>​rsync --exclude="​nom_de_dossier"​ --exclude="​- autre_nom_de_dossier"​ source/ destination/</​code>​
 +  * Liste  entre accolades. Les répertoires ou les fichiers sont traités de la même façon, par leur nom.  Ici, **.cache** est un répertoire,​ mais **.tmp** est l'​ensemble des fichiers temporaires (en cas d'​appel de ce script via l'​interpréteur,​ il faut ici utiliser **bash -c** au lieu de **sh -c**, car les accolades sont propres au bash) <code bash>​rsync -av --exclude={'​Musique','​Vidéos','​.cache','​flatpak','​Trash','​*.tmp','​Bureau'​} source/ destination/</​code>​
 +  * Un fichier de règles d'​exclusion <code bash>​rsync --exclude-from=ExclusionRSync source/ destination/​ </​code>​\\ Et le fichier ExclusionRSync dans le dossier courant sera de cette forme : <code bash>tmp
 +.Trash
 +.cache
 +.PlayOnLinux
 +</​code>​Vous pouvez consulter cette [[http://​programmersnotebook.wordpress.com/​2010/​03/​20/​rsync-and-exclude-from|page très intéressante sur le sujet]] de l'​exclusion par fichier de règles.
  
-==== Interface graphique : Grsync ​(Gnome) ​==== +==== Inclure des fichiers ==== 
-Dans les dépôts ​on trouvera ​notamment le logiciel [[grsync]] qui offre une interface graphique pour rsync[[:​tutoriel:​sauvegarder_home_avec_grsync|voir ce tutoriel ​sur Grsync]]. Voir aussi la page [[:​sauvegarde]] pour trouver d'​autres interfaces graphiques.+ 
 +Dès lors qu'on exclut, il peut être nécessaire d'​inclure. 
 + 
 +Attention, ''​%%--%%include''​ ne s'​utilise qu'​avec ''​%%--%%exclude'',​ et n'est qu'une exception à ce dernier (qui doit //​toujours//​ suivre le ''​%%--%%include''​).\\ 
 +Exemple, vous souhaitez ne synchroniser qu'un type de fichier, mettons des ''​.csv'',​ cela donne : 
 +<code bash>​rsync --include="​*.csv"​ --exclude="​*"​ source/ destination/</​code>​ 
 + 
 +Cette commande se lit ainsi : exclure **tout** (c'est le caractère ''​*''​) ce qui est dans ''​source/''​ //sauf// les fichiers ''​.csv'',​ qui seront donc les seuls à être copiés. 
 + 
 +La commande suivante copie 3 répertoires (et leur contenu) depuis le répertoire ''/​user/''​. les autres répertoires ou fichiers ne sont pas transférés. 
 +<code bash>​rsync -av --include={'​Documents/​***','​Images/​***','​snap/​***'​} --exclude=* /home/user/ destination/</​code>​ 
 + 
 +Le caractère générique ''​%%***%%''​ (3 étoiles) est fondamental pour les répertoires dans le ''​%%--%%include''​. Il indique que le ''​%%--%%include''​ ne vaut pas que pour le répertoire,​ mais aussi pour tout ce qu'il contient. Sans lui, c'est un répertoire vide qui est transféré. 
 + 
 +==== Quelques options ==== 
 + 
 +De nombreuses options existent (voir [[https://​www.delafond.org/​traducmanfr/​man/​man1/​rsync.1.html|ici]]),​ en voici quelques unes : 
 +  * ''​-a''​ : archive => préserve les dates, permissions,​ etc ... des fichiers. Inclut l'​option récursivité. Option à utiliser quand on veut transférer des répertoires entiers avec leurs sous-répertoires en préservant toutes les caractéristiques des fichiers. 
 +  * ''​-r''​ : la synchro est récursive (elle prend les sous-répertoires). Est inclus dans l'​option ''​-a''​ 
 +  * ''​-v''​ : verbeux (affichage de ce que fait la commande pendant qu'​elle le fait). 
 +  * ''​-l''​ : copie les liens symboliques comme liens symboliques. Est inclus dans l'​option ''​-a''​ 
 +  * ''​-L''​ : remplace les liens symboliques par les fichiers référencés. 
 +  * ''​%%--%%remove-sent-files''​ : les fichiers envoyés sont //​supprimés//​ de chez l'​émetteur. Il ne s'agit donc plus de faire une synchro mais bien de faire un //​transfert//​. 
 +  * ''​%%--%%delete''​ : efface sur la cible les fichiers qui ont disparu du répertoire de départ. Option très importante qui permet d'​être sûr que la copie est identique à l'​original. Mais si on se trompe sur l'​original,​ on perd la copie. 
 +  * ''​%%--%%delete-after''​ : idem option précédente,​ mais fait l'​effacement à la fin du transfert. Surtout intéressant avec l'​option ''​-v''​ ('​verbeux'​) : les fichiers effacés sont plus clairement affichés à la fin, et pas dispersés dans l'​ensemble des retours écran. 
 +  * ''​%%--%%exclude=MOTIF''​ : exclut de la synchro les fichiers correspondant au MOTIF (par exemple ''​*.txt''​ pour exclure les fichiers avec l'​extension ''​.txt''​). 
 +  * ''​-z''​ : compresse les fichiers pendant le transfert. N'a d’intérêt que pour des transferts à travers des réseaux, car sinon la compression / décompression fait perdre du temps. 
 + 
 +==== Sauvegarde distante du serveur web ==== 
 + 
 +Cas présenté : 
 +  * un serveur distant s'​exécutant sous le compte système ''​www-data''​. 
 +    * ce serveur est accessible via [[:SSH]] 
 +    * on a un compte utilisateur pour se connecter sur ce serveur 
 +    * ce compte (ou un autre) a les droits d'​administration de la machine 
 +  * une machine sur laquelle sauvegarder les données 
 +    * on a un compte utilisateur avec le droit [[:sudo]] 
 + 
 +Pour l'​exemple qui suit : 
 +  - sur la machine locale, on devient ''​www-data''​ pour travailler avec les droits de ce dernier 
 +  - ''​www-data''​ exécute la commande ''​rsync''​ qui va établir une connexion via [[:SSH]] au serveur distant avec le compte //​utilisateur//​ (on peut avoir besoin de saisir le mot de passe de l'​utilisateur distant si on n'a pas déposé de clef publique) 
 +  - sur le serveur distant, via [[:SSH]], //​utilisateur//​ va lancer ''​sudo''​ pour devenir ''​www-data''​ 
 +  - ''​www-data''​ exécute la commande ''​rsync''​ qui échange les informations avec la machine locale 
 + 
 +Sur le serveur distant : 
 +  * Autoriser l'​utilisateur à lancer la commande ''​rsync''​ sous le compte système ''​www-data''​ grâce à [[:sudo]], //sans mot de passe// :<code bash>​sudo visudo</​code><​file>​utilisateurssh ALL=(www-data) NOPASSWD: /​usr/​bin/​rsync</​file>​ 
 +  * Optionnel : déposer une clef publique [[:SSH]] au besoin pour l'​utilisateur 
 + 
 +Sur la machine locale : 
 +  * Lancer une synchronisation en tant qu'​utilisateur www-data grace à [[sudo]]<​code bash>​sudo -u www-data rsync -a --progress -e ssh --rsync-path "sudo -u www-data rsync" utilisateur@serveur_distant:/​var/​www/​ /​var/​www/</​code>​ 
 + 
 +==== Interface graphique : Grsync ​ou Timeshift ​==== 
 + 
 +Les logiciels graphiques utilisant **rsync** sont assez nombreux. Certains font plutôt de la sauvegarde du système, de la sauvegarde de données, de la pure synchronisation... 
 + 
 +  * Dans les [[:dépôts]] vous trouverez ​notamment le logiciel ​**[[:Grsync]]** qui offre une interface graphique pour **rsync**, plutôt dans une logique de synchronisation. Voir aussi [[:​tutoriel:​sauvegarder_home_avec_grsync|ce tutoriel]] pour sauvegarder tout son home avec **Grsync**. 
 +  * Depuis la version 20.04 d'​Ubuntu,​ on trouve aussi dans les dépôts le logiciel **[[:​Timeshift]]**, qui utilise **rsync** pour créer des [[points_de_restauration_pour_un_systeme_linux|points de restauration]] du système d'​exploitation et des logiciels, dans une logique similaire à celle du //​TimeMachine//​ de MacOs. 
 +  * **[[:​BackInTime]]** utilise aussi **rsync** pour prendre ses //​snapshots//​. 
 +  * **[[http://​luckybackup.sourceforge.net/​|LuckyBackup]]** utilise aussi **rsync** pour ses sauvegardes. 
 +  * Idem pour **[[https://​korben.info/​cronopete-clone-de-time-machine-linux.html|cronopete]]** (qui n'est pas dans les dépôts). 
 + 
 +Voir aussi les pages //​[[:​synchronisation]]//​ et //[[:​sauvegarde]]// pour trouver ​éventuellement ​d'​autres interfaces graphiques.\\ 
 +On peut aussi rechercher ''​rsync''​ dans le [[:snap store|Centre d'​applications]] ou sur [[:​gnome-software|GNOME Logiciels]],​ ainsi que sur [[https://​snapcraft.io/​store?​q=rsync|Snapcraft]] et [[https://​flathub.org/​apps/​search?​q=rsync|Flathub]]. 
 + 
 +===== Voir aussi ===== 
 + 
 +  * **(//​en//​)** [[https://​rsync.samba.org/​|Site officiel]] 
 +  * [[:Grsync]] : interface graphique à **rsync**. 
 +  * [[:​Timeshift]] : interface graphique à **rsync** - prend des [[points_de_restauration_pour_un_systeme_linux|points de restauration]] du système. 
 +  * [[:rclone]] : une alternative à **rsync** plus performante et plus versatile, présentée comme //**rsync** pour les services [[:​cloud]]//​. 
 +  * [[:​rsnapshot]] : étend les fonctionnalités de **rsync** pour faciliter la création d'​instantanés (//​snapshot//​) et de [[:​sauvegardes]]. 
 +  * **(fr)** [[https://​man.developpez.com/​man1/​rsync/​|Le man de rsync en français]]((« traduction de Denis Mertz, 2002. Mise à jour par Éric Piel <eric POINT piel AT tremplin-utc POINT net>, 2005. Relecture par Frédéric Delanoy et Julien Soula. » (extrait de développez.com,​ 2005) (Lien mort? [[https://​www.delafond.org/​traducmanfr/​man/​man1/​rsync.1.html|autre solution]], même contenu).)) 
 +  *  **(fr)** //​[[http://​www.it-connect.fr/​synchronisation-rsync-entre-windows-et-linux/​|Synchronisation Rsync entre Windows et Linux]]// sur IT-Connect.fr ainsi que //​[[https://​thedatafrog.com/​fr/​articles/​backup-rsync-windows-wsl/​|Backup sous Windows avec rsync (WSL)]]// 
 + 
 +==== Tutoriels ====
  
-===== Tutoriel ===== 
   * [[:​tutoriel:​sauvegarder_home_avec_rsync|Sauvegarde de "/​home"​ avec rsync]] ou avec l'​interface graphique [[:​tutoriel:​sauvegarder_home_avec_grsync|Grsync]]   * [[:​tutoriel:​sauvegarder_home_avec_rsync|Sauvegarde de "/​home"​ avec rsync]] ou avec l'​interface graphique [[:​tutoriel:​sauvegarder_home_avec_grsync|Grsync]]
   * [[:​tutoriel:​serveur_de_synchronisation_avec_rsync|Serveur de synchronisation avec rsync]]   * [[:​tutoriel:​serveur_de_synchronisation_avec_rsync|Serveur de synchronisation avec rsync]]
  
-===== Liens ===== +[[https://crashingdaily.wordpress.com/2007/06/29/rsync-and-sudo-over-ssh/|Source ​de ce tutoriel]], adaptée pour le cas présenté
-  * **(en)** ​[[http://rsync.samba.org/|Site officiel]] +
-  * **(fr)** [[http://man.developpez.com/​man1/rsync.1.php/|Le man de rsync en français]], « traduction de Denis Mertz, 2002. Mise à jour par Éric Piel <eric POINT piel AT tremplin-utc POINT net>, 2005. Relecture par Frédéric Delanoy et Julien Soula. » (extrait de développez.com,​ 2005) +
  
 ---- ----
  
 // Contributeur : [[utilisateurs:​ostaquet]],​ [[utilisateurs:​jahwork]]//​ // Contributeur : [[utilisateurs:​ostaquet]],​ [[utilisateurs:​jahwork]]//​
  • rsync.1308237074.txt.gz
  • Dernière modification: Le 15/12/2011, 15:20
  • (modification externe)