Synchronisation avec `rsync`
Prérequis¶
Voici ce dont vous aurez besoin pour comprendre et suivre ce guide :
- Un ordinateur fonctionnant sous Rocky Linux
- Savoir modifier les fichiers de configuration à partir de la ligne de commande.
- Savoir utiliser un éditeur comme vi.
- Vous aurez besoin des droits d'accès
root
ou bien obtenir les privilèges nécessaires grâce àsudo
- Les paires de clés SSH publique et privée
- Pouvoir créer un script bash avec
vi
ou votre éditeur préféré et le tester. - Être capable d'utiliser
crontab
pour automatiser l'exécution du script
Introduction¶
L'utilisation de rsync
sur SSH n'est pas aussi efficace que lsyncd (qui vous permet de surveiller les modifications apportées à un répertoire ou à un fichier et de le maintenir synchronisé en temps réel), ni aussi flexible que rsnapshot (qui offre la possibilité de sauvegarder plusieurs cibles à partir d'un seul ordinateur). Cependant, il fournit la possibilité de tenir deux ordinateurs à jour selon un calendrier que vous pouvez définir vous-même.
Si vous avez besoin de garder à jour un ensemble de répertoires sur l'ordinateur cible, et vous ne vous souciez pas de la synchronisation en temps réel en tant que fonctionnalité, alors rsync
par l'intermédiaire de SSH est probablement la meilleure solution.
Pour cette procédure, vous aurez besoin de l'utilisateur root
. Connectez-vous en tant qu'utilisateur root
ou utilisez la commande sudo -s
pour passer à l'utilisateur root
dans votre terminal.
Installation de rsync
¶
Il est probable que rsync
soit déjà installé. Pour vous assurer que rsync
est à jour, procédez comme suit sur les deux ordinateurs :
dnf install rsync
Si le paquet n'est pas installé, dnf
vous demandera de confirmer l'installation. S'il est déjà installé, dnf
cherchera une mise à jour et vous demandera de l'installer.
Préparation de l’Environnement¶
Cet exemple utilisera rsync
sur l'ordinateur cible pour extraire de la source au lieu de transférer de la source vers la cible. Pour cela vous devez configurer une paire de clés SSH. Après avoir créé la paire de clés SSH, vérifiez l’accès sans mot de passe de l’ordinateur cible à l’ordinateur source.
rsync
— Paramètres et Configuration d'un Script¶
Avant de poursuivre la configuration du script, vous devez décider quels paramètres vous souhaitez utiliser avec rsync
. Il existe de nombreuses possibilités. Consultez le manuel de rsync pour une liste complète. La façon la plus courante d'utiliser rsync
est d'utiliser l'option -a
, car -a
, ou archive
, combine plusieurs options standard. Qu'est-ce que -a
inclus ?
-r
, parcoure les sous-répertoires-l
, maintiens les liens symboliques comme tels-p
, préserve les permissions-t
, préserve date et heure de modification-g
, conserve le groupe-o
, préserve le propriétaire-D
, préserve les fichiers de périphérique
Les seules options supplémentaires dont nous aurons besoin dans cet exemple sont les suivantes :
-e
, précise le shell distant à utiliser--delete
, qui indique que si le répertoire cible contient un fichier qui n'existe pas sur la source, il faut le supprimer
Ensuite, nous devons configurer un script en créant un fichier pour cela (encore une fois, utilisez votre éditeur préféré si vous n'êtes pas familier avec vi
). Pour créer le fichier, utilisez la commande suivante :
vi /usr/local/sbin/rsync_dirs
Ajoutez le contenu :
#!/usr/bin/env bash
/usr/bin/rsync -ae ssh --delete root@source.domain.com:/home/your_user /home
Remplacez source.domain.com
par votre propre nom de domaine, nom d’hôte ou adresse IP.
Rendez le script exécutable :
chmod +x /usr/local/sbin/rsync_dirs
Test¶
Les scripts vous permettent de tester sans souci.
Avertissement
Dans ce cas, nous partons du principe que votre répertoire personnel n'existe pas sur l'ordinateur cible. S'il existe déjà, vous devriez faire une copie de sécurité avant de lancer le script !
Exécutez le script :
/usr/local/sbin/rsync_dirs
Si tout se passe bien, vous obtiendrez une copie entièrement synchronisée de votre répertoire personnel sur l’ordinateur cible. Vérifiez pour être sûr que c'est bien le cas.
En supposant que tout a bien marché comme prévu, continuez en créant un nouveau fichier dans votre répertoire personnel sous /home/
de l'ordinateur source :
touch /home/your_user/testfile.txt
Relancez le script :
/usr/local/sbin/rsync_dirs
Ensuite vérifiez que la cible reçoit bien le nouveau fichier. Si oui, l'étape suivante consiste en la vérification de la bonne marche de l'effacement d'un fichier. Effacez le fichier créé précédemment sur l'ordinateur source :
rm -f /home/your_user/testfile.txt
Relancez le script :
/usr/local/sbin/rsync_dirs
Vérifiez que le fichier n'existe plus sur l'ordinateur cible.
Finalement créons sur l'ordinateur cible un fichier qui n'existe pas sur l'ordinateur source :
touch /home/your_user/a_different_file.txt
Relancez le script une dernière fois :
/usr/local/sbin/rsync_dirs
Le fichier qui vient d'être créé sur l'ordinateur de destination devrait disparaître, du fait qu'il n'existe pas sur l'ordinateur source.
En supposant que tout fonctionne correctement, modifiez le script pour synchroniser tous les répertoires requis.
Automatisation Complète¶
Vous ne souhaiterez probablement pas exécuter ce script chaque fois que vous voulez effectuer une synchronisation manuelle. Utilisez un crontab
pour effectuer cette opération automatiquement selon un calendrier précis. Supposons que vous désiriez lancer le script à 23: 00 chaque soir :
crontab -e
Cela s'affichera et ressemblera à ceci :
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
Info
L'exemple crontab
montre un fichier vide, mais commenté. Le commentaire n'apparaît pas sur chaque instance d'ordinateur et le fichier en question peut être un fichier vide. Sur un ordinateur en service vous pouvez voir d’autres entrées.
Le crontab
correspond à une horloge de 24 heures. Vous devrez insérer la ligne suivante au bas du fichier :
00 23 * * * /usr/local/sbin/rsync_dirs
Cela indique d'exécuter cette commande à minuit et à 23 h tous les jours, tous les mois et tous les jours de la semaine. Enregistrez votre entrée crontab
comme suit :
Shift+:+w+q+!
Paramètres facultatifs¶
-n: Dry-Run to see what files would be transferred
-v: list out all the files that are being transferred
-vvv: to provide debug info while transferring files
-z: to enable compression during the transfer
Conclusion¶
Bien que rsync
ne sois pas aussi sophistiqué que d'autres outils, il propose une solution simple de synchronisation de fichiers très utile.
Author: Steven Spencer
Contributors: Ezequiel Bruni, tianci li, Ganna Zhyrnova