| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| rsync [Le 03/08/2025, 11:04] – [Quelques options] 92.143.31.216 | rsync [Le 03/09/2026, 01:52] (Version actuelle) – [Utilisation] dossier -> répertoire | mise en forme krodelabestiole |
|---|
| {{tag>sauvegarde synchronisation}} | {{tag>fichier synchronisation}} |
| |
| ====== rsync ====== | ====== rsync ====== |
| |
| Il sert à copier ou déplacer des répertoires, à l'instar de ''[[:tutoriel:console_ligne_de_commande#mv]]'' ou ''[[:tutoriel:console_ligne_de_commande#cp]]'', mais fournit en plus des fonctionnalités complètes de synchronisation et de transfert distant (reposant sur [[:SSH]]). Ainsi il peut aussi être utilisé de manière plus avancée pour maintenir un double d'un espace de stockage, pour mettre en place des systèmes rudimentaires de [[:sauvegarde]] distante, ou pour créer des [[:points_de_restauration_pour_un_systeme_linux|points de restauration]] du système (par exemple via l'outil **[[:rsnapshot]]** ou l'interface **[[:Timeshift]]** avec lesquels il est utilisé comme "moteur" en arrière-plan). | Il sert à copier ou déplacer des répertoires, à l'instar de ''[[:tutoriel:console_ligne_de_commande#mv]]'' ou ''[[:tutoriel:console_ligne_de_commande#cp]]'', mais fournit en plus des fonctionnalités complètes de synchronisation et de transfert distant (reposant sur [[:SSH]]). Ainsi il peut aussi être utilisé de manière plus avancée pour maintenir un double d'un espace de stockage, pour mettre en place des systèmes rudimentaires de [[:sauvegarde]] distante, ou pour créer des [[:points_de_restauration_pour_un_systeme_linux|points de restauration]] du système (par exemple via l'outil **[[:rsnapshot]]** ou l'interface **[[:Timeshift]]** avec lesquels il est utilisé comme "moteur" en arrière-plan). |
| | |
| | <note important> |
| | Il arrive encore souvent qu'on recommande, au détour d'une page web, **rsync** pour effectuer des sauvegardes. |
| | |
| | Or **rsync** est un outil relativement trivial, et la mise en place d'une solution complète de sauvegarde à l'aide de divers scripts basés sur **rsync**, en plus d'être une solution franchement complexe et peu performante, consiste en réalité à la "réinvention de la roue" par chaque utilisateur... éternellement ! |
| | |
| | Aujourd'hui il existe des outils tout aussi fiables que **rsync** mais beaucoup plus complets et performants pour sauvegarder ses données. Voir la page //[[:Sauvegarde]]// et en particulier les applications **[[:deja-dup|Déjà Dup]]**, simplissime et installée par défaut avec Ubuntu, ou **[[:restic]]** pour une sauvegarde gérée -- //a priori// -- en ligne de commande (qui disposent toutes les deux de toutes les fonctionnalités modernes attendues pour sauvegarder ses données ou son système) ! |
| | |
| | Pour mettre en place une politique de sauvegardes ordinaire, **rsync** n'est aujourd'hui plus aussi pertinent qu'il l'était il y a 20 ans et plus. |
| | </note> |
| |
| **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 fichiers qui ont été modifiés. Il offre la possibilité de supprimer sur la destination les fichiers n'existant pas sur la source. | **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 fichiers qui ont été modifiés. Il offre la possibilité de supprimer sur la destination les fichiers n'existant pas sur la source. |
| En particulier pour une entreprise, un [[:tutoriel:serveur_de_synchronisation_avec_rsync|serveur de synchronisation]] peut être utile pour centraliser les données sur une même machine. | En particulier pour une entreprise, un [[:tutoriel:serveur_de_synchronisation_avec_rsync|serveur de synchronisation]] peut être utile pour centraliser les données sur une même machine. |
| |
| Pour un particulier habitué à la [[:commande shell|ligne de commande]], il est intéressant (si vous avez plusieurs machines), d'avoir une copie de son //Dossier Personnel//, même si il existe aujourd'hui des outils bien plus complet et performants.\\ | Pour un particulier habitué à la [[:commande shell|ligne de commande]], il est intéressant (si vous avez plusieurs machines), d'avoir une copie de son //Dossier Personnel//, même si il existe aujourd'hui des outils bien plus complet et performants. |
| Pour plus de détails sur ce type d'utilisation, voir ce tutoriel : //[[:tutoriel:sauvegarder_home_avec_rsync|Sauvegarder "/home" avec rsync]]//. | |
| |
| Si on préfère éviter la ligne de commande, il existe des interfaces graphiques à **rsync**, telles que **[[:Grsync]]**. | Si on préfère éviter la ligne de commande, il existe des interfaces graphiques à **rsync**, telles que **[[:Grsync]]**. |
| ===== Utilisation ===== | ===== Utilisation ===== |
| |
| Comme l'indique le manuel : | Comme l'indique le [[man>rsync|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 de la commande ''[[man>rsync]]''\_: |
| <code bash>rsync source/ destination/</code> | <code bash>rsync source/ destination/</code> |
| |
| 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 : | En **local**, pour une copie/synchro de votre répertoire vidéo vers un disque dur externe [[:montage|monté]] dans ''/media/$USER/'', cela donne\_: |
| <code bash>rsync -av /home/$USER/Vidéos/ /media/$USER/film_music/Vidéos/</code> | <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. | L'option ''-v'' affiche les fichiers copié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.\\ | ''$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. | 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 : | En **[[:réseau]]**, **rsync** utilise [[:SSH]] par défaut. Un exemple\_: |
| <code bash>rsync -az source/ login@serveur.org:/destination/</code> | <code bash>rsync -az source/ login@serveur.org:/destination/</code> |
| où: | 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''. | * ''-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) | * ''-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) |
| |
| <note important> | <note important> |
| 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 : | Attention, il convient d'être vigilant dans l'utilisation ou non du dernier slash ''/'' dans le [[:chemins|chemin]] de la source. |
| | |
| | Ainsi, les deux commandes suivantes ne sont //pas// équivalentes\_: |
| <code bash>rsync source destination/ | <code bash>rsync source destination/ |
| rsync source/ destination/</code> | rsync source/ destination/</code> |
| |
| 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. | * En effet, la première commande va //créer le répertoire source// dans le répertoire destination en ajoutant donc un niveau dans l'arborescence de destination. |
| Autrement dit, les deux commandes suivantes sont, elles, équivalentes* : | * La deuxième commande copie le //contenu// du répertoire source dans le répertoire destination. |
| | Autrement dit, les deux commandes suivantes sont, elles, équivalentes*\_: |
| <code bash>rsync source destination/ | <code bash>rsync source destination/ |
| rsync source/ destination/source/</code> | 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 incidence. Les deux commandes suivantes sont donc équivalentes : | 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\_: |
| |
| <code bash>rsync source destination/ | <code bash>rsync source destination/ |
| rsync source destination</code> | rsync source destination</code> |
| |
| * Sauf dans le cas où 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 | * Sauf dans le cas où source est un [[:lien_physique_et_symbolique|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> |
| <note> | <note> |
| </code> | </code> |
| </note> | </note> |
| | |
| | ==== Simuler avant d'opérer ==== |
| | |
| | L'option ''%%--%%dry-run'' (ou ''-n'') de ''[[man>rsync]]'' permet de tester sa commande sans rien modifier : la sortie affiche ce qui serait fait, sans toucher aux fichiers. |
| | |
| | Il est donc très chaudement recommandé d'utiliser cette option, en particulier lorsqu'on supprime des fichiers avec l'option ''%%--%%delete'' et consorts. |
| |
| ==== Créer un dossier miroir ==== | ==== Créer un dossier miroir ==== |
| </note> | </note> |
| |
| Avec l'option ''-n'' la commande liste ce qu'elle va faire sans l'exécuter : | Avec l'option ''-n'', la commande liste ce qu'elle va faire sans l'exécuter (voir //[[#Simuler avant d'opérer]]//) : |
| <code bash>rsync -e ssh -avzn --delete-after /home/mondossier_source user@ip_du_serveur:/dossier/destination/</code> | <code bash>rsync -e ssh -avzn --delete-after /home/mondossier_source user@ip_du_serveur:/dossier/destination/</code> |
| |
| ==== Exclure des fichiers ==== | ==== Exclure des fichiers ==== |
| |
| 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… | On peut exclure des fichiers/dossiers selon beaucoup de schémas. C'est utile pour ne pas copier le cache, les fichiers temporaires, le répertoire ''.git'', la corbeille, etc… |
| |
| 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. | 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. |
| * ''%%--%%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. | * ''%%--%%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''). | * ''%%--%%exclude=MOTIF'' : exclut de la synchro les fichiers correspondant au MOTIF (par exemple ''*.txt'' pour exclure les fichiers avec l'extension ''.txt''). |
| | * ''%%--%%ignore-existing'' : ignore les fichiers déjà transférés. Intéressant pour des fichiers qui n'évolueront pas, ce qui peut faire une sécurité de ne pas récupérer des fichiers chiffrés par un attaquant ! |
| | * ''%%--%%chowm=$USER'' : change le compte propriétaire des fichiers/répertoires vers $USER (à adapter si besoin), notamment utile si rsync est exécuté avec les droits administrateur. |
| * ''-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. | * ''-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 ==== | ==== Copie distante d'un serveur web ==== |
| |
| Cas présenté : | Cas présenté : |
| * un serveur distant s'exécutant sous le compte système ''www-data''. | * un [[:serveur]] distant s'exécutant sous le compte système ''www-data''. |
| * ce serveur est accessible via [[:SSH]] | * ce serveur est accessible via [[:SSH]] |
| * on a un compte utilisateur pour se connecter sur ce serveur | * on a un compte utilisateur pour se connecter sur ce serveur |
| * ce compte (ou un autre) a les droits d'administration de la machine | * ce compte (ou un autre) a les droits d'administration de la machine |
| * une machine sur laquelle sauvegarder les données | * une machine sur laquelle copier les données |
| * on a un compte utilisateur avec le droit [[:sudo]] | * on a un compte utilisateur avec le droit [[:sudo]] |
| |
| ==== Interface graphique : Grsync ou Timeshift ==== | ==== 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... | Les logiciels graphiques utilisant **rsync** sont assez nombreux. Certains font plutôt des instantanés (//snapshots// ou points de restauration) du système, de la [[:sauvegarde]] de données, ou 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**. | * 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. |
| * 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. | * 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//. | * **[[:BackInTime]]** utilise aussi **rsync** pour prendre ses //snapshots//. |
| |
| Voir aussi les pages //[[:synchronisation]]// et //[[:sauvegarde]]// pour trouver éventuellement d'autres interfaces graphiques.\\ | 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]]. | 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/fr/apps/search?q=rsync|Flathub]]. |
| |
| ===== Voir aussi ===== | ===== Voir aussi ===== |
| |
| * **(//en//)** [[https://rsync.samba.org/|Site officiel]] | * **(//en//)** [[https://rsync.samba.org/|Site officiel]] |
| * [[:Grsync]] : interface graphique à **rsync**. | * **[[:Grsync]]** : interface graphique à **rsync**. |
| * [[:Timeshift]] : interface graphique à **rsync** - prend des [[points_de_restauration_pour_un_systeme_linux|points de restauration]] du système. | * **[[: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]]//. | * **[[: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]]. | * **[[:rsnapshot]]** : étend les fonctionnalités de **rsync** pour faciliter la création d'instantanés (//snapshot//). |
| * **(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).)) | * [[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)]]// | * //[[http://www.it-connect.fr/synchronisation-rsync-entre-windows-et-linux/|Synchronisation Rsync entre Windows et Linux]]// sur IT-Connect.fr. |
| |
| ==== Tutoriels ==== | ==== Tutoriels ==== |
| |
| * [[: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]] |
| |
| |
| ---- | ---- |
| | //[[:Contributeurs]] : [[:utilisateurs:ostaquet]], [[:utilisateurs:jahwork]].// |
| // Contributeur : [[utilisateurs:ostaquet]], [[utilisateurs:jahwork]]// | |