rsync (pour remote synchronization ou synchronisation à distance), est un logiciel 1) 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 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.
D'un point de vue de l'entreprise, un 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".
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/
L'intérêt est une utilisation à travers le réseau. rsync utilise SSH par défaut. Un exemple :
rsync -az source/ login@serveur.org:/destination/
où:
rsync source destination/ rsync source/ destination/
En effet, la première commande copie le dossier source et ajoute donc un niveau dans l'arborescence. La deuxième commande ne copie que le contenu du dossier source. 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 alors que le lien tandis que la seconde travaille bien à l'intérieur du répertoire
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:
rsync -e ssh -avz --delete-after /home/source user@ip_du_serveur:/dossier/destination/
où :
Avec l'option -n la commande liste ce qu'elle va faire sans l'exécuter:
rsync -e ssh -avzn --delete-after /home/mondossier_source user@ip_du_serveur:/dossier/destination/
On peut exclure des fichiers/dossiers selon beaucoup de schémas. C'est utile pour ne pas sauvegarder le cache, les fichiers temporaires, la corbeille, etc…
rsync --exclude="nom_de_dossier" --exclude="- autre_nom_de_dossier" source/ destination/
rsync --exclude-from=ExclusionRSync source/ destination/
Et le fichier ExclusionRSync dans le dossier courant sera de cette forme :
tmp .Trash .cache .PlayOnLinux
Vous pouvez consulter cette page très intéressante sur le sujet de l'exclusion par fichier de règles.
Dans les dépôts vous trouverez notamment le logiciel Grsync qui offre une interface graphique pour rsync: voir ce tutoriel sur Grsync.
Voir aussi la page sauvegarde pour trouver d'autres interfaces graphiques.
Cas présenté :
Pour l'exemple qui suit :
Sur le serveur distant :
sudo visudo
utilisateurssh ALL=(www-data) NOPASSWD: /usr/bin/rsync
Sur la machine local :
sudo -u www-data rsync -a --progress -e ssh --rsync-path "sudo -u www-data rsync" utilisateur@serveur_distant:/var/www/ /var/www/
Source de ce tutoriel, adaptée pour le cas présenté