Sauvegarde journalisée de votre machine avec RSnapShot

Date: 1/02/2011 | Catégories: Open-source,Planet-libre,Reseau,Systeme | Tags: ,,,,,

Suite à un commentaire de Xavier sur un de mes billets, je me suis penché sur l'utilisation de RSnapshot. Ce logiciel libre permet d'automatiser une sauvegarde journalisée de vos machines et ceci localement comme à distance.

RSnapShot est disponible dans la plupart des dépôts des distributions GNU/Linux et *BSD. Nous allons illustrer cet article avec une installation et une configuration de RSnapShot sur un serveur Gandi sous Ubuntu 10.04 LTS.

Installation de RSnapShot

On utilise la version disponible dans les dépôts officiel:

sudo aptitude install rsnapshot

Configuration de RSnapShot

L'ensemble de la configuration est centralisé dans le fichier /etc/rsnapshot.conf.

sudo vi /etc/rsnapshot.conf

Attention à la syntaxe dans ce fichier, RSnapShot est assez pointilleux. Il veut que tout les répertoires finissent par un / et des tabulations entre chaque variables.

Les variables importantes à configurer sont les suivantes:

snapshot_root   /.snapshots/

La variable snapshot_root permet de configurer le répertoire racine ou les sauvegardes seront stockées. Ce répertoire peut être sur le même disque que le disque système (c'est le cas de la configuration par défaut avec l'utilisation du répertoire /.snapshots/).

Je vous conseille pour ma part d'utiliser si possible un répertoire stocké sur un deuxième disque physique. Par exemple sur mon serveur Gandi, j'ai un deuxième disque qui est monté sur le répertoire /srv/backup. Je vais donc configurer la variable à /srv/backup/snapshots/ (noter le / à la fin du répertoire !).

Exemple: snapshot_root /srv/backup/snapshots/

cmd_ssh /path/to/ssh

Si vous voulez utiliser les fonctions de sauvegarde de serveur distant (en utilisant le protocole SSH), il faut dé-commenter la ligne précédente. Si vous avez besoin de passer des arguments spécifique à SSH, il faudra compléter la ligne ssh_args.

Exemple: cmd_ssh /usr/bin/ssh

interval monthly 3

Activation de la sauvegarde mensuelle (désactivé par défaut).

On passe ensuite aux variables permettant de configurer ce que l'on veut sauvegarder.

Sauvegardes locales

On parle ici d'une sauvegarde journalisée de répertoires de la machine ou RSnapShot est installé.

backup /home/ localhost/

Le répertoire /home/ sera sauvegardé dans le sous répertoire $snapshot_root/localhost/.

Exemple:

backup /home/ localhost/

backup /etc/ localhost/

backup /var/svn/ localhost/

Sauvegardes distantes

On peut également sauvegarder des répertoires de machines distantes. On utilise pour cela la configuration suivante:

backup root@example.com:/etc/  example.com/    +rsync_long_args=--bwlimit=1024,exclude=core

On va ainsi sauvegarder le répertoire /etc/ de la machine exemple.com en utilisant une connexion SSH avec l'utilisateur root (il faut bien sur que la connexion SSH entre votre machine exécutant RSnapShot et example.com soit automatisée). En bonus on demande à RSnapShot de ne pas sauvergarder les fichiers core (exclude=core) et de limiter la bande passante à 1 Mbps (--bwlimit=1024).

Sauvegardes en utilisant des scripts

Une autre fonctions intéressantes de RSnapShot est la possibilité d'utiliser des script shell pour automatiser des sauvegardes un peu plus complexes.

Par exemple imaginons que l'on veuillent sauvegarder les données de son serveur SVN. On commence par créer le script shell /usr/local/bin/backup-svn.sh:

#!/bin/sh

# Backup SVN


svnrepo="/var/svn/"

for i in `ls $svnrepo`

do

svnadmin -q dump $svnrepo/$i > $i.svndump

gzip -f $i.svndump

rm $i.svndump

done

Puis on le rend exécutable:

sudo chmod a+x  /usr/local/bin/backup-svn.sh

Enfin on configure RSnapShot:

backup_script /usr/local/bin/backup-svn.sh localhost/svn/

Le script backup-svn.sh va être lancé à partir du répertoire localhost/svn/

Il est bien sur possible de faire des scripts pour d'autres besoins: sauvegarde de bases de données MySQL par exemple.

Utilisation de RSnapShot

On commence par valider le fichier de configuration:

sudo rsnapshot configtest

Syntax OK

Simulation d'une sauvegarde journalière (cela va afficher ce que RSnapShot va faire mais sans le faire...):

sudo rsnapshot -t hourly

echo 3531 > /var/run/rsnapshot.pid

mkdir -m 0700 -p /srv/backup/snapshots/

mkdir -m 0755 -p /srv/backup/snapshots/hourly.0/

/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /home

/srv/backup/snapshots/hourly.0/localhost/

mkdir -m 0755 -p /srv/backup/snapshots/hourly.0/

/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc

/srv/backup/snapshots/hourly.0/localhost/

mkdir -m 0755 -p /srv/backup/snapshots/hourly.0/localhost/

mkdir -m 0755 -p /srv/backup/snapshots/tmp/

cd /srv/backup/snapshots/tmp/

/home/nicolargo/bin/backup-svn.sh

cd /home/nicolargo/

sync_if_different("/srv/backup/snapshots/tmp/",

"/srv/backup/snapshots/hourly.0/localhost/svn/")

mkdir -m 0755 -p /srv/backup/snapshots/hourly.0/

/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded

--exclude=core --bwlimit=1024 --rsh=/usr/bin/ssh

nicolargo@exemple.com:/home /srv/backup/snapshots/hourly.0/sam/

mkdir -m 0755 -p /srv/backup/snapshots/hourly.0/

/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded

--exclude=core --bwlimit=1024 --rsh=/usr/bin/ssh

nicolargo@exemple.com:/etc /srv/backup/snapshots/hourly.0/sam/

touch /srv/backup/snapshots/hourly.0/

Test en ligne de commande:

sudo rsnapshot hourly

Le répertoire contenant la première sauvegarde devrait être créé sous /srv/backup/snapshots/hourly.0.

Enfin on automatise le lancement en éditant la crontab système (root):

sudo crontab -e -u root

0 */4 * * * /usr/bin/rsnapshot hourly

30 23 * * * /usr/bin/rsnapshot daily

0 23 * * 0 /usr/bin/rsnapshot weekly

30 22 28 * * /usr/bin/rsnapshot monthly

Pour une liste exhaustive des fonctions proposées par RSnapShot, je vous conseille la lecture de la documentation officielle (en Anglais).

Et voili, merci encore à Xavier pour cette belle découverte.

  • http://sciunto.wordpress.com François

    Bonjour,

    Selon toi, quels sont les avantages et les inconvénients de cette solution. Quel comparaison avec rsync/rdiffbackup ?

    Merci.

  • Pingback: Tweets that mention Sauvegarde journalisée de votre machine avec RSnapShot -- Topsy.com

  • http://blog.loicg.net Chibani

    Comment se fait la “rotation” des sauvegardes ?
    Par exemple : je ne voudrai garder que les 5 dernières sauvegardes de ma machine (histoire de garder de la place pour d’autres choses sur mon serveur de backup …)

    Merci pour ce tuto/explicatif, je cherchais justement à me simplifier la vie pour sauvegarder différentes machines :)

    • http://www.nicolargo.com NicoLargo

      C’est dans la variable suivante:

      interval daily 5

      Qui va garder les 5 derniers jours. (tu peux faire de même avec les heures, les semaines, les mois…

      A noter qu’a partir de la version >1.2, le mot clés interval est à remplacer par retain.

      • http://blog.loicg.net Chibani

        Merci pour cette indication ;)

  • eol

    Pendant la sauvegarde est ce que le système est figé?
    En fait j’ai un cluster Nagios (distribution FAN) je voudrai faire un backup de l’esclave et ne pas perdre ma supervision sur le maitre.

    Pour le moment, le seul moyen que j’ai trouvé est de “figer” les 2 serveurs, faire une copie sur un des serveurs et relancer la synchronisation. L’inconvénient c’est que je perd la supervision pendant le processus de sauvegarde.

    Avez vous des idées?

    Merci beaucoup

  • Pingback: Sécuriser son blog Wordpress #4

  • http://www.letsgozik.org/ Olivier

    RSnapShot semble pas mal :)

    J’utilise BackupPC qui fait plus ou moins la même chose et permet également de sauvegarder des machines Windows. Il a aussi une interface web pour accéder facilement aux différentes versions des fichiers sauvegardés.

  • Pingback: La veille du week-end (seizième) - LoïcG