QU’EST CE QUE RSYNC ?

En termes simples, RSYNC est un outil qui copie des fichiers d’une machin vers une autre

En termes plus détaillés, rsync efefctue plus qu’une copie, il va lire les fichiers sources et les ficheirs destinations qui existeraient déjà et copiera uniquement les ficheirs sources qui n’ont pas été mis à jour sur la destination. Cela évite de consommer de la bande passante et optimise les sauvegardes.

 

On va voir maintenant comment faire en sorte que deux répertories sur 2 machines distantes restent synchronisés grâce à la crontab.

Installer rsync

Utiliser yum.

# yum install rsync

Créer une clé SSH

La clé SSH nous permettra de lacer des commandes de synchronisation sans devoir s’identifier.

L’exemple qui suit permettra au user « test-user » de faire de la synchronisation sur le serveur ssh distant sans s’authentifier, mais de manière sécurisée grâce à une clé.

$ su - testuser
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/data/web/testuser/.ssh/id_rsa): 
Created directory '/data/web/testuser/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /data/web/testuser/.ssh/id_rsa.
Your public key has been saved in /data/web/testuser/.ssh/id_rsa.pub.

Il fait maintenant copier la clé publique du user « test-user » qu’on vient de créer sur le serveur distant dans le fichier authorized_keys su répertoire .ssh du user de la machin distante.

Vérifier que l’utilisateur distant dispose d’un shell

Créer un utilisateur distant « testuser » et si il ne dispose pas de shelle, alors, il faut lui en créer un:

# usermod -s /bin/bash testuser

Créer le répertoire .ssh (pour le user distant) sur le serveur distant)

Sur le serveur distant:

$ mkdir .ssh
$ chmod 700 .ssh/

Et transférer la clé du serveur local sur le serveur distant

Depuis le serveur local:

$ scp .ssh/id_rsa.pub root@remote.example.com:~testuser/.ssh/authorized_keys

Le fichier authorized_keys du serveur distant doit appartenir à l'utilisateur distant

Tester la clé SSH

Cela se fait en ouvrant une connexion depuis le serveur local vers le serveur distant et en vérifiant que le serveur distant ne demande pas d’authentification.

Depuis le serveur local:

$ ssh remote.example.com
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-virtual x86_64)

Utiliser rsync

Maintenant qu’on peut se connecter sans authentification, on va tester rsync

Test de rsync avec l’option –dry-run

Avant de vraiment copier des fichiers, il vaut mieux tester rsync avec l’option –dry-run.

$ rsync -avzr --dry-run public_html remote.example.com:~/
< output truncated >
public_html/js/
public_html/js/bootstrap.js
public_html/js/jquery-1.10.2.js
sent 27035 bytes  received 2185 bytes  11688.00 bytes/sec
total size is 4059365  speedup is 138.92 (DRY RUN)

Avec l’option –dry-run, rsync a effectué toutes les opérations demandées mais en mode « test »: rien n’a été véritablement copié.

Lancement de rsync manuellement

Cette fois-ci, on enlève l’option –dry-run

$ rsync -avzr public_html remote.example.com:~/
public_html/2013/12/23/yum-plugins-verifying-packages-and-configurations-with-yum-verify/index.html
public_html/feed/index.xml
sent 85615 bytes  received 32456 bytes  33734.57 bytes/sec
total size is 4059365  speedup is 34.38

Voici l’explication des options, d’après le man de rsync

  • -a – The -a or --archive flag puts rsync into archive mode which makes it retain file attributes such as permissions and ownership similar to the tar command.
  • -v – The -v or --verbose flag puts rsync into a verbose mode, this will make rsync output status of the copy.
  • -z – The -z or --compress flag tells rsync to compress files during the copy, this will save time for slow network connections.
  • -r – The -r or --recursive flag tells rsync to recursively copy files and directories.

Utiliser l’option –delete pour effacer les fichiers

rsync peut supprimer des fichiers qui serainet présents dans le srveur distant mais qui n’existeraient plus dans le serveur local. Il faut pour cela utiliser l’option –delete.

$ rsync -avzr --delete public_html remote.example.com:~/
sending incremental file list
public_html/
deleting public_html/html
deleting public_html/1.txt
sent 25230 bytes  received 376 bytes  10242.40 bytes/sec
total size is 4059365  speedup is 158.53

rsync en crontab

éditer le fichier de crontab

$ crontab -e

Ajouter

*/0 * * * * /usr/bin/rsync -avzr --delete /data/web/testuser/public_html remote.example.com:/data/web/testuser/ > /dev/null 2>&1

 

Leave a Comment