Sauvegardes incrémentales avec « rsnapshot »

« rsnapshot » Est un outils de sauvegarde incrémentale locale ou sur le réseau, écrit en PERL et basé sur rsync et les liens hard. Il est disponible sur la plupart des distributions Linux ou directement sur le site d’rsnapshot : « http://rsnapshot.org » .

L’installation ce fait traditionnellement sous Gentoo Linux :

mafalda ~ # emerge -av rsnapshot

… ou sous Debian :

srv ~ # aptitude install rsnapshot

… et depuis les sources pour les distributions ne proposant pas le paquet (ici sur CentOS 5.3) :

[root@localhost ~]# cd /usr/src/
[root@localhost src]# wget -q wget http://rsnapshot.org/downloads/rsnapshot-1.3.1.tar.gz
[root@localhost src]# tar xf rsnapshot-1.3.1.tar.gz
[root@localhost src]# cd rsnapshot-1.3.1
[root@localhost rsnapshot-1.3.1]# ./configure --prefix=/opt/install/rsnapshot-1.3.1 --sysconfdir=/etc
...
Now type  "make test"    to run the regression test suite.
Then type "make install" to install the program.
 
After rsnapshot is installed, don't forget to copy
/etc/rsnapshot.conf.default to /etc/rsnapshot.conf
[root@localhost rsnapshot-1.3.1]# make test
...
All tests successful.
Files=4, Tests=5,  1 wallclock secs ( 0.49 cusr +  0.52 csys =  1.01 CPU)
[root@localhost rsnapshot-1.3.1]# make install
...
make[1]: Leaving directory `/usr/src/rsnapshot-1.3.1'
[root@localhost rsnapshot-1.3.1]# ln -s /opt/install/rsnapshot-1.3.1 /opt/rsnapshot
[root@localhost src]# /opt/rsnapshot/bin/rsnapshot
rsnapshot 1.3.1
Usage: rsnapshot [-vtxqVD] [-c cfgfile] [command] [args]

« rsnapshot » Exigeant très peu de dépendances, il n’est pas nécessaire d’installer de nombreuses bibliothèques pour son installation (perl, rsync, ssh, logger, GNU cp suffisent à exploiter toutes les fonctionnalités de l’outil).

« rsnaptshot » est prévu pour des sauvegardes incrémentales par :

  • heures ;
  • jours ;
  • semaines ;
  • mois ;

dans un répertoire d’une machine distante (par SSH ou samba par exemple) ou en local (sur un disque externe par exemple).

L’arborescence obtenue est du type :

srv sauvegardes # ls -lt
total 156
drwxr-xr-x 9 root root 4096 2009-09-18 01:16 daily.0
drwxr-xr-x 9 root root 4096 2009-09-17 01:16 daily.1
drwxr-xr-x 9 root root 4096 2009-09-16 01:14 daily.2
...
drwxr-xr-x 9 root root 4096 2009-08-15 01:14 weekly.0
drwxr-xr-x 9 root root 4096 2009-08-08 01:14 weekly.1
...
drwxr-xr-x 9 root root 4096 2009-07-11 01:14 monthly.0
drwxr-xr-x 9 root root 4096 2009-06-06 01:13 monthly.1
...

Chaque jour, « daily.0 » devient « daily.1 », « daily.1 » devient « daily.2 » et ainsi de suite… Seul les fichiers modifiés sont copiés, un lien hard est créé pour les autres (donc pas d’encombrement supplémentaire).

Si « rsnapshot » est lancé toutes les demi-heures pour une demande de sauvegarde « hourly », les snapshots « hourly.0,1,…,N » seront espacés de 30min seulement. La sauvegarde de niveau supérieure (« daily » pour une sauvegarde « hourly ») ne sera lancée que lorsque la profondeur demandée aura été atteinte.

Par exemple, si on souhaite sauvegarder tous les jours un système de fichier et garder une profondeur de sauvegarde de 31 jours, la première sauvegarde intitulée « weekly.0 » ne sera faite QUE quand la sauvegarde « daily.30 » aura été créée (« daily.30 » car la numérotation part de 0 bien sur).

Le fichier de configuration à utiliser est passé en argument à « rsnapshot » permettant de choisir le fichier adapté à la machine à sauvegarder. Sans cette précision, le fichier « /etc/rsnapshot.conf » sera utilisé. Le fichier de configuration se trouve sur le serveur de sauvegarde.

Détail de la configuration

Le fichier de configuration est très détaillé cependant, il est important de rappeler que LE SÉPARATEUR DANS LE FICHIER DE CONFIGURATION EST LA TABULATION et non l’espace ! Chaque valeur est initialisée ainsi :

variable    < valeur >    < valeur ou options >

… où chaque espace est UNE TABULATION (touche [Tab]).

Voici quelques variables du fichier de configuration :

  • snapshot_root <string> : Définit le répertoire de sauvegarde.
  • no_create_root <string> : Précise si le répertoire de sauvegarde doit être créé s’il n’existe pas ou si le programme doit s’arrêter dans ce cas.
  • cmd_* <string> : Précisent les chemins vers les différents utilitaires (cp, rm, rsync, ssh, logger, …).
  • cmd_rsnapshot_diff <string> : Précisent le chemin vers rsnapshot-diff (dans le cas de la compilation préparée ci dessus, cmd_rsnapshot_diff devra être définie à « /opt/rsnapshot/bin/rsnapshot-diff »).
  • cmd_pre/postexec <string> : Précisent les scripts à exécuter avant (pre) et après (post) la sauvegarde. Si cette valeur est commentée, rien ne sera exécuté.
  • interval <hourly,daily,weekly,monthly> <int> : Donnent le type et la profondeur de la sauvegarde. Une ligne est définie par type et profondeur de sauvegarde.
  • rsync_short_args/rsync_long_args <string>, ssh_args <string>, one_fs <booléen>, link_dest <booléen>, use_lazy_deletes <booléen> : Donnent respectivement les paramètres d' »rsync » au format courts ou longs, les arguments de « ssh » (utile pour spécifier une clé privée voir Restriction des commandes SSH sur clés publique /privée pour plus de sécurité), l’autorisation ou non de traverser les système de fichiers (0=Non par défaut), création des liens hard par rsync (évite la perte de certain type de fichier spéciaux -FIFOs, pipes ou sockets- nécéssite rsync >= 2.5.7), utilisation du passage pas interval.delete avant suppression du plus vieux snapshot.
  • backup <source> <destination> <paramètres spécifiques> : Définit les répertoire à sauvegarder et où le faire.
  • backup_script <scripts sur la machine à sauvegarder> <destination> : Définit un script a exécuter sur le serveur à sauvegarder.

RAPPEL : Les variables et leurs valeurs, sont séparées par des tabulations.

Il est à noter que « rsnapshot » permet d’utiliser les fonctionnalités de snapshot de LVM pour effectuer des sauvegardes.

Exemple de fichier de configuration de la sauvegarde d’un serveur WEB :

## Fichier de configuration de la sauvegarde du serveur WEBSERVER
#     (webserver.rez0.lan &lt; 10.0.2.100 &gt;)
#
# La totalité des sites internet est localisée dans le répertoire :
#  /websites/*
#
# Les utilisateurs disposent de comptes de très petites taille (quotas faible)
# ils seront sauvegardé. Localisation :
#  /users/*
#
# Le répertoire des scripts /opt/scripts ainsi que la configuration de la machine
# /etc/ seront sauvegardés également.
#
 
# Version de la config :
config_version  1.2
 
# La sauvegarde sera effectuée dans :
snapshot_root   /sauvegardes/webserver
 
# Si le répertoire n'existe pas, on le crée :
no_create_root  1
 
# Définition des utilitaires :
cmd_cp  /bin/cp
cmd_rm  /bin/rm
cmd_rsync       /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger      /usr/bin/logger
cmd_du  /bin/du
cmd_rsnapshot_diff      /opt/rsnapshot/bin/rsnapshot-diff
 
# Pas de script à executer sur le serveur de sauvegarde avant la sauvegarde :
#cmd_preexec    /path/to/preexec/script
 
# ... ni après :
#cmd_postexec   /path/to/postexec/script
 
# Sauvegardes journalières      : profondeur de 7 jours.
# Sauvegardes hebdomadaire      : profondeur de 4 semaines.
# Sauvegardes mensuelles        : profondeur de 6 mois.
interval        daily   7
interval        weekly  4
interval        monthly 6
 
# Mode d'affichage par défaut :
verbose 2
 
# Niveau de log standard :
loglevel        3
 
# Fichier de log :
logfile /var/log/rsnapshot
 
# Fichier de lock :
lockfile        /var/run/rsnapshot.pid
 
# Paramètres d'rsync :
rsync_short_args        -a
#rsync_long_args        --delete --numeric-ids --relative --delete-excluded
 
# Utilisation de la clé privée /root/.ssh/key.webserver
ssh_args        -i /root/.ssh/key.webserver
 
# Arguments de du :
du_args -csh
 
# Pas besoin de traverser des systèmes de fichier :
#one_fs 0
 
# rsync crée les liens hard :
link_dest       1
 
# Répertoires à sauvegarder :
backup  root@webserver.rez0.lan:/users/ ./
backup  root@webserver.rez0.lan:/websites/      ./
backup  root@webserver.rez0.lan:/etc/   ./
backup  root@webserver.rez0.lan:/boot/  ./
backup  root@webserver.rez0.lan:/opt/scripts/   ./
backup_script   /opt/scripts/backupdb   ./backupdb/
# Exemple de backup par rsync :
# backup        rsync://example.com/pub/        example.com/pub/

(Voir Restriction des commandes SSH sur clés publique /privée pour sécuriser l’échange SSH)

Télécharger le fichier d’exemple de configuration « rsnapshot ».

« /opt/scripts/backupdb » Est un script effectuant un dump brutal des bases de données.

La sauvegarde est enfin lancée par :

[root@localhost src]# /opt/rsnapshot/bin/rsnapshot -c /etc/rsnapshot/rsnapshot.webserver.conf daily
[root@localhost src]#

Bien évidement, la commande peut être plus ou moins longue à exécuter en fonction de la quantité de données à sauvegarder.

En production, la commande sera exécutée par cron, fcron ou vixie-cron à une heure donnée :

[root@localhost src]# fcrontab -e
...
30      1       *       *       *       /opt/rsnapshot/bin/rsnapshot -c /etc/rsnapshot/rsnapshot.webserver.conf daily
0        6       *       *       1       /opt/rsnapshot/bin/rsnapshot -c /etc/rsnapshot/rsnapshot.webserver.conf weekly
15      6       1       *       *       /opt/rsnapshot/bin/rsnapshot -c /etc/rsnapshot/rsnapshot.webserver.conf monthly
...

Dans cet exemple, tous les jours à 1H30, sauvegarde journalière, le première jour de la semaine, sauvegarde hebdomadaire à 6H00 (rotation de daily.0 en weekly.0) et à 6H15 rotation de weekly.0 en monthly.0.

2 réflexions au sujet de « Sauvegardes incrémentales avec « rsnapshot » »

  1. Quelques petites corrections orthographiques…

    “rsnapshot” Exigeant très peut de dépendances
    “rsnapshot” Exigeant très peu de dépendances

    Chaque jours, “daily.0?
    Chaque jour, “daily.0?

    Si “rsnapshot” est lancé toutes les demis heures
    Si “rsnapshot” est lancé toutes les demi-heures

    Le fichier de configuration ce trouve sur le serveur de sauvegarde.
    Le fichier de configuration se trouve sur le serveur de sauvegarde.

    cmd_* : Précisent les chemin vers les différents utilitaires
    cmd_* : Précisent les chemins vers les différents utilitaires

    Si cette valeur est commentée, rien ne sera exécute.
    Si cette valeur est commentée, rien ne sera exécuté.

    en fonction de la quantité de donnée
    en fonction de la quantité de données

    C’est pas grand chose en comparaison du temps que tu m’as fait gagné !!

    Merci encore
    A+

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *