RSYNC -- Utilisation
RSYNC -- Utilisation jmvUtilisation
La synchronisation entre deux répertoires appartenant au même ordinateur, par exemple d’un disque dur à un disque externe, n’a pas besoin de configuration. Il suffit simplement de donner la commande pour qu’elle s’exécute. La première fois que la commande est donnée, rsync ne fait que copier les fichiers et répertoires d’un dispositif à l’autre. Par la suite, il se contente de faire une synchronisation (ajout des nouveaux fichiers et répertoires, remplacement des fichiers qui ont changé, etc.)
La commande à exécuter est la suivante :
# rsync options source destination |
Quelques unes des options les plus utilisées :
- -v : mode « verbeux »
- -r : copie récursive (répertoires et sous répertoires, mais sans conserver les permissions et la date de création).
- -a : mode « archives » permettant la copie récursive et la préservation des liens symboliques, des permissions, des appartenances (utilisateur et groupe), ainsi que de la date de création.
- -z : compression des fichiers (pour ménager la bande passante, notamment).
- -h : affichage des chiffres dans un format lisible par les humains.
- --progress : pour voir l’avancement du transfert
Pour la liste complète des options : man rsync ou http://www.delafond.org/traducmanfr/man/man1/rsync.1.html (35 pages!!!)
Quelques exemples de copie locale
Transfert d’un fichier dans un répertoire local :
jmv@linux2 ~ $ rsync -zvh allo /tmp/sauvegarde/ created directory /tmp/sauvegarde allo
sent 145 bytes received 73 bytes 436.00 bytes/sec total size is 107 speedup is 0.49
|
Transfert d’un répertoire dans un autre répertoire local :
Ici, étant donné que le répertoire /tmp/sauvegarde existe déjà, il n’a pas besoin d’être créé par rsync
jmv@linux2 ~ $ rsync -azvh lecture /tmp/sauvegarde/ sending incremental file list lecture/ lecture/Hackers.epub lecture/Hackers.pdf lecture/La_Comédie_humaine.pdf lecture/La_Curée.epub lecture/La_Fortune_des_Rougon.epub lecture/buildingdrupal6.epub lecture/drupal7.epub lecture/files.txt lecture/learningdrupal6dev.epub
total size is 37.32M speedup is 1.02
|
Vérifions si tout s’est passé comme le programme le dit.
Copie entre ordis (linux) distants
Pour des ordis distants, le principe est un peu le même et la commande à donner est légèrement différente. Par exemple, d’un ordinateur local à un serveur :
# rsync -options source utilisateur@serveur:répertoire/ |
Par exemple, on veut faire une sauvegarde du répertoire « lecture » de tantôt vers le serveur de fichiers familial, qui s’appelle « sf » et dont l’adresse figure dans le fichiers /etc/hosts :
jmv@linux2 ~ $ rsync -azvh lecture jmv@sf: (jmv@sf) Password: sending incremental file list lecture/ lecture/Hackers.epub lecture/Hackers.pdf lecture/La_Comédie_humaine.pdf lecture/La_Curée.epub lecture/La_Fortune_des_Rougon.epub lecture/buildingdrupal6.epub lecture/drupal7.epub lecture/files.txt lecture/learningdrupal6dev.epub
total size is 37.32M speedup is 1.02
|
Comme on peut le voir, le serveur distant demande un mot de passe. La même opération peut également s’exécuter avec SSH pour assurer une sécurité de bout en bout. Il suffit d’ajouter l’option « e » et ssh à la commande :
jmv@linux2 ~ $ rsync -azvhe ssh lecture jmv@sf: (jmv@sf) Password: sending incremental file list lecture/ lecture/Hackers.epub lecture/Hackers.pdf lecture/La_Comédie_humaine.pdf lecture/La_Curée.epub lecture/La_Fortune_des_Rougon.epub lecture/buildingdrupal6.epub lecture/drupal7.epub lecture/files.txt lecture/learningdrupal6dev.epub
total size is 37.32M speedup is 1.02
|
Encore une fois, un mot de passe est demandé, à moins qu’un échange de clés ait déjà été effectué entre les deux ordis.
RSYNC --Options "delete" et "exclude"
RSYNC --Options "delete" et "exclude" jmv
Options --delete et --exclude
Les options --delete et --exclude (à noter le double tiret) sont très utiles dans les cas où il existe déjà une copie de sauvegarde sur l’ordi de destination et si l’on procède à une synchronisation à intervalles réguliers.
L’option --delete supprime sur l’ordi de destination les fichiers et répertoires qui n’existent plus sur l’ordi source. Donc, si on a effacé un fichier dans un répertoire de l’ordi source faisant l’objet d’une synchronisation, il sera automatiquement effacé de l’ordi de destination. Pratique, mais aussi dangereux, car si on efface un fichier ou un répertoire par accident, il finira aussi par être effacé sur l’ordi de destination, à moins de pouvoir le récupérer AVANT la synchronisation!
L’option --exclude permet d’exclure des fichiers ou des répertoires de la synchronisation. Elle doit être mentionnée pour chaque élément différent à exclure. Par exemple, si on veut exclure les répertoires « Documents » et « Musique » et le fichier « linux.txt », il faudra procéder ainsi :
# rsync -avz --exclude ‘linux.txt’ --exclude ‘Documents’ --exclude ‘Musique’ source/ destination/ |
Si les répertoires et fichiers sont trop nombreux, rendant ainsi la lecture de la commande à exécuter un peu difficile, on peut utiliser l’option --exclude-from qui renvoit rsync à une liste de répertoires et/ou fichiers à exclure. Pour reprendre l’exemple ci-dessus, on pourrait créer un fichier texte appelé exclusions.txt contenant un élément par ligne (ici, on suppose que la source est le répertoire de l’utilisateur) :
# exclusions.txt # Fichiers et répertoires à exclure de la synchronisation
linux.txt Documents Musique |
La commande sera donc la suivante :
# rsync -avz --exclude-from ‘exclusions.txt’ source/ destination/ |
Avec l’option --delete, cela donnera :
rsync -avz --exclude-from ‘exclusions.txt’ --delete source/ destination/ |
RSYNC --Synchronisation sans mot de passe
RSYNC --Synchronisation sans mot de passe jmvSynchronisation sans mot de passe
Comme on a pu le remarquer, chaque fois qu’on synchronise d’un ordinateur à l’autre, on se fait demander un mot de passe. Si l’on veut éviter de se faire demander le mot de passe à chaque exécution de la commande rsync, il faut recourir au fichier /etc/rsync.conf sur l’ordinateur source, qui, en quelque sorte, donne la permission à l’autre ordi de faire la synchronisation sans mot de passe. Cela peut également être pratique dans le cas de synchronisations à intervalles réguliers, comme on le verra plus loin.
Le contenu du fichier rsync.conf n’est pas très différent d’une distribution à l’autre. Certains offrent des commentaires ou des instructions de base, d’autres pas (mon serveur de courriel Ubuntu à Toronto, par exemple). Voici un fichier de base de Gentoo, la distribution que j’utilise à la maison :
# /etc/rsyncd.conf # Minimal configuration file for rsync daemon # See rsync(1) and rsyncd.conf(5) man pages for help # This line is required by the /etc/init.d/rsyncd script pid file = /run/rsyncd.pid use chroot = yes read only = yes
# Simple example for enabling your own local rsync server #[gentoo-portage] # path = /var/db/repos/gentoo # comment = Gentoo ebuild repository # exclude = /distfiles /packages
|
Et voici un extrait du fichier rsync.conf que j’utilise sur mon ordi principal (source) pour la synchronisation avec le serveur de fichier familial (destination) :
# /etc/rsyncd.conf # Minimal configuration file for rsync daemon # See rsync(1) and rsyncd.conf(5) man pages for help
# This line is required by the /etc/init.d/rsyncd script pid file = /run/rsyncd.pid use chroot = yes read only = yes log file = /var/log/rsync
# Simple example for enabling your own local rsync server #[gentoo-portage] # path = /var/db/repos/gentoo # comment = Gentoo ebuild repository # exclude = /distfiles /packages
# Autoriser la sauvegarde des répertoires banque, factures, # Antoine, Gabrielle et autres ############################################### (…) [gabrielle] path = /home/jmv/gabrielle comment = repertoire gabrielle uid = jmv gid = jmv
path = /home/jmv/antoine comment = repertoire antoine uid = jmv gid = jmv
path = /home/jmv/sauvegarde comment = repertoire sauvegarde qui se trouve sur le disque externe uid = jmv gid = jmv
|
Ceux qui ont l’oeil plus vif auront remarqué que j’ai ajouté la ligne « log file = /var/log/rsync » au fichier original, en plus des autres modules évidemment. Si jamais un problème de synchronisation survenait, j’aurai au moins une chance d’en retracer l’origine.
Le nom des modules est entre crochets […].
path = /chemin/du/répertoire/ou/du/fichier
comment = (facultatif)
uid = nom_de_l’utilisateur
gid = groupe_de_l’utilisateur
Les deux derniers éléments, uid et gid, permettent de conserver les permissions appartenant à l’utilisateur en question.
Donc, mon ordi principal (source) permet au serveur de fichiers familial (destination) de venir chercher les fichiers et répertoires à synchroniser et ce, sans mot de passe. La commande exécutée sur le serveur familial est la suivante pour le module [disque_externe] de mon ordi principal :
rsync -avh --delete 192.168.1.6::disque_externe /mnt/serveur/jmv/sauvegarde |
À noter que l’option « z » n’est pas utilisée étant donné que les deux ordis sont sur le réseau interne et que ça ne nuit pas à la bande passante. Si certains fichiers ont été modifiés sur le disque externe, ils remplaceront ceux qui existent déjà sur la cible, c’est-à-dire le serveur de fichiers. L’option --delete effacera sur la destination les fichiers et répertoires qui ne figurent plus sur le disque externe.
Mais en réalité, il y a sur le disque externe trois répertoires qui ne changent jamais et qui n’ont pas besoin d’être synchronisés à chaque fois. La commande est donc la suivante :
rsync -avh --exclude 'linux2' --exclude 'linux3' --exclude 'myth' --delete 192.168.1.6::disque_externe /mnt/serveur/jmv/sauvegarde |
Synchronisation à intervalles réguliers
Lorsqu’on veut procéder à une copie de sauvegarde automatisée de fichiers et de répertoires à intervalles réguliers, il est plus pratique de recourir à rsync avec le fichier rsync.conf et crontab, ce dernier permettant d’effectuer des tâches à des moments précis. Nous n’entrerons pas dans les détails de crontab, mais le petit tableau suivant donne une bonne idée de son utilisation :
# Exemple de définition d’une tâche à exécuter : # .---------------- minute (0 - 59) # | .------------- heure (0 - 23) # | | .---------- jour du mois (1 - 31) # | | | .------- mois (1 - 12) OU jan,feb,mar,apr ...(en anglais seulement) # | | | | .---- jour de la semaine (0 - 6) (dimanche=0 ou 7) OU sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * nom_d’utilisateur commande à exécuter |
À noter que si on laisse un astérisque (*) dans l’une des colonnes, cela signifie tous (toutes) les minutes, heures, jours, etc.
Pour revenir à l’exemple du disque externe de mon ordi principal, voici la commande que j’utilise dans crontab en tant que superutilisateur (crontab -e) :
7 0 * * * rsync -av --exclude 'linux2' --exclude 'linux3' --exclude 'myth' --delete 192.168.1.6::disque_externe /mnt/serveur/jmv/sauvegarde |
Explication : à minuit 7 minutes (7e minute de l’heure 0), tous les jours du mois, tous les mois et tous les jours de la semaine la commande s’exécute. Étant donné que mon disque externe est monté dans un répertoire appelé « sauvegarde », tous les fichiers et répertoires du disque en question sont sauvegardés dans un répertoire qui porte le même nom sur le serveur de fichier familial (/mnt/serveur/jmv/sauvegarde). De plus, comme il existe un fichier rsync.conf comprenant le module [disque_externe] sur l’ordinateur source, le serveur de fichiers destination n’a pas besoin de mot de passe pour accéder aux fichiers et répertoires de son vis-à-vis.
L’option « h » utilisée dans les précédentes commandes est devenue inutile puisque la commande s’exécute automatiquement et que personne ne « surveille » le déroulement de la synchronisation.
Conclusion
rsync est un outil très puissant et polyvalent. Il permet de faire la copie, la suppression et la synchronisation de fichiers et de répertoires localement et à distance, manuellement ou de manière automatisée. Avec une configuration adéquate, nul besoin d’un logiciel de sauvegarde!
Références :
Article de Techmint (en anglais) : https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/
Article de The Geek Stuff (en anglais) : https://www.thegeekstuff.com/2011/01/rsync-exclude-files-and-folders/
Page de manuel : http://www.delafond.org/traducmanfr/man/man1/rsync.1.html