|
| 1 | +--- |
| 2 | +title: Synchronisation avec `rsync` |
| 3 | +author: Steven Spencer |
| 4 | +contributors: Ezequiel Bruni, tianci li, Ganna Zhyrnova |
| 5 | +tags: |
| 6 | + - synchronisation |
| 7 | + - rsync |
| 8 | +--- |
| 9 | + |
| 10 | +## Prérequis |
| 11 | + |
| 12 | +Voici ce dont vous aurez besoin pour comprendre et suivre ce guide : |
| 13 | + |
| 14 | +- Un ordinateur fonctionnant sous Rocky Linux |
| 15 | +- Savoir modifier les fichiers de configuration à partir de la ligne de commande. |
| 16 | +- Savoir utiliser un éditeur comme _vi_. |
| 17 | +- Vous aurez besoin des droits d'accès `root` ou bien obtenir les privilèges nécessaires grâce à `sudo` |
| 18 | +- Les paires de clés SSH publique et privée |
| 19 | +- Pouvoir créer un script bash avec `vi` ou votre éditeur préféré et le tester. |
| 20 | +- Être capable d'utiliser `crontab` pour automatiser l'exécution du script |
| 21 | + |
| 22 | +## Introduction |
| 23 | + |
| 24 | +L'utilisation de `rsync` sur SSH n'est pas aussi efficace que [lsyncd](../backup/mirroring_lsyncd.md) (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](../backup/rsnapshot_backup.md) (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. |
| 25 | + |
| 26 | +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. |
| 27 | + |
| 28 | +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. |
| 29 | + |
| 30 | +### Installation de `rsync` |
| 31 | + |
| 32 | +Il est probable que `rsync` soit déjà installé. Pour vous assurer que `rsync` est à jour, procédez comme suit sur les deux ordinateurs : |
| 33 | + |
| 34 | +```bash |
| 35 | +dnf install rsync |
| 36 | +``` |
| 37 | + |
| 38 | +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. |
| 39 | + |
| 40 | +### Préparation de l’Environnement |
| 41 | + |
| 42 | +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](../security/ssh_public_private_keys.md). 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. |
| 43 | + |
| 44 | +### `rsync` — Paramètres et Configuration d'un Script |
| 45 | + |
| 46 | +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](https://linux.die.net/man/1/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 ? |
| 47 | + |
| 48 | +- `-r`, parcoure les sous-répertoires |
| 49 | +- `-l`, maintiens les liens symboliques comme tels |
| 50 | +- `-p`, préserve les permissions |
| 51 | +- `-t`, préserve date et heure de modification |
| 52 | +- `-g`, conserve le groupe |
| 53 | +- `-o`, préserve le propriétaire |
| 54 | +- `-D`, préserve les fichiers de périphérique |
| 55 | + |
| 56 | +Les seules options supplémentaires dont nous aurons besoin dans cet exemple sont les suivantes : |
| 57 | + |
| 58 | +- `-e`, précise le shell distant à utiliser |
| 59 | +- `--delete`, qui indique que si le répertoire cible contient un fichier qui n'existe pas sur la source, il faut le supprimer |
| 60 | + |
| 61 | +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 : |
| 62 | + |
| 63 | +```bash |
| 64 | +vi /usr/local/sbin/rsync_dirs |
| 65 | +``` |
| 66 | + |
| 67 | +Ajoutez le contenu : |
| 68 | + |
| 69 | +```bash |
| 70 | +#!/usr/bin/env bash |
| 71 | +/usr/bin/rsync -ae ssh --delete [email protected]:/home/your_user /home |
| 72 | +``` |
| 73 | + |
| 74 | +Remplacez `source.domain.com` par votre propre nom de domaine, nom d’hôte ou adresse IP. |
| 75 | + |
| 76 | +Rendez le script exécutable : |
| 77 | + |
| 78 | +```bash |
| 79 | +chmod +x /usr/local/sbin/rsync_dirs |
| 80 | +``` |
| 81 | + |
| 82 | +## Test |
| 83 | + |
| 84 | +Les scripts vous permettent de tester sans souci. |
| 85 | + |
| 86 | +!!! warning "Avertissement" |
| 87 | + |
| 88 | + 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 !** |
| 89 | + |
| 90 | +Exécutez le script : |
| 91 | + |
| 92 | +```bash |
| 93 | +/usr/local/sbin/rsync_dirs |
| 94 | +``` |
| 95 | + |
| 96 | +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. |
| 97 | + |
| 98 | +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 : |
| 99 | + |
| 100 | +```bash |
| 101 | +touch /home/your_user/testfile.txt |
| 102 | +``` |
| 103 | + |
| 104 | +Relancez le script : |
| 105 | + |
| 106 | +```bash |
| 107 | +/usr/local/sbin/rsync_dirs |
| 108 | +``` |
| 109 | + |
| 110 | +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 : |
| 111 | + |
| 112 | +```bash |
| 113 | +rm -f /home/your_user/testfile.txt |
| 114 | +``` |
| 115 | + |
| 116 | +Relancez le script : |
| 117 | + |
| 118 | +```bash |
| 119 | +/usr/local/sbin/rsync_dirs |
| 120 | +``` |
| 121 | + |
| 122 | +Vérifiez que le fichier n'existe plus sur l'ordinateur cible. |
| 123 | + |
| 124 | +Finalement créons sur l'ordinateur cible un fichier qui n'existe pas sur l'ordinateur source : |
| 125 | + |
| 126 | +```bash |
| 127 | +touch /home/your_user/a_different_file.txt |
| 128 | +``` |
| 129 | + |
| 130 | +Relancez le script une dernière fois : |
| 131 | + |
| 132 | +```bash |
| 133 | +/usr/local/sbin/rsync_dirs |
| 134 | +``` |
| 135 | + |
| 136 | +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. |
| 137 | + |
| 138 | +En supposant que tout fonctionne correctement, modifiez le script pour synchroniser tous les répertoires requis. |
| 139 | + |
| 140 | +## Automatisation Complète |
| 141 | + |
| 142 | +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 : |
| 143 | + |
| 144 | +```bash |
| 145 | +crontab -e |
| 146 | +``` |
| 147 | + |
| 148 | +Cela s'affichera et ressemblera à ceci : |
| 149 | + |
| 150 | +```bash |
| 151 | +# Edit this file to introduce tasks to be run by cron. |
| 152 | +# |
| 153 | +# Each task to run has to be defined through a single line |
| 154 | +# indicating with different fields when the task will be run |
| 155 | +# and what command to run for the task |
| 156 | +# |
| 157 | +# To define the time you can provide concrete values for |
| 158 | +# minute (m), hour (h), day of month (dom), month (mon), |
| 159 | +# and day of week (dow) or use '*' in these fields (for 'any'). |
| 160 | +# |
| 161 | +# Notice that tasks will be started based on the cron's system |
| 162 | +# daemon's notion of time and timezones. |
| 163 | +# |
| 164 | +# Output of the crontab jobs (including errors) is sent through |
| 165 | +# email to the user the crontab file belongs to (unless redirected). |
| 166 | +# |
| 167 | +# For example, you can run a backup of all your user accounts |
| 168 | +# at 5 a.m every week with: |
| 169 | +# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ |
| 170 | +# |
| 171 | +# For more information see the manual pages of crontab(5) and cron(8) |
| 172 | +# |
| 173 | +# m h dom mon dow command |
| 174 | +``` |
| 175 | + |
| 176 | +!!! info "Info" |
| 177 | + |
| 178 | + 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. |
| 179 | + |
| 180 | +Le `crontab` correspond à une horloge de 24 heures. Vous devrez insérer la ligne suivante au bas du fichier : |
| 181 | + |
| 182 | +```crontab |
| 183 | +00 23 * * * /usr/local/sbin/rsync_dirs |
| 184 | +``` |
| 185 | + |
| 186 | +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 : |
| 187 | + |
| 188 | +++shift+colon+"w"+"q"+exclam++ |
| 189 | + |
| 190 | +## Paramètres facultatifs |
| 191 | + |
| 192 | +```bash |
| 193 | +-n: Dry-Run to see what files would be transferred |
| 194 | +-v: list out all the files that are being transferred |
| 195 | +-vvv: to provide debug info while transferring files |
| 196 | +-z: to enable compression during the transfer |
| 197 | +``` |
| 198 | +
|
| 199 | +## Conclusion |
| 200 | +
|
| 201 | +Bien que `rsync` ne sois pas aussi sophistiqué que d'autres outils, il propose une solution simple de synchronisation de fichiers très utile. |
0 commit comments