Categories
Informatique

Mise en place de sauvegardes via rdiff-backup

Allez, on commnence avec un vieux post concernant la sauvegarde de fichiers via l’outil rdiff-backup (que j’ai aujourd’hui remplacé par Duplicity).

Ancien utilisateur de backuppc et ayant rencontré quelques soucis de configuration et d’utilisation de l’outil, je cherchais un système de sauvegarde “plus simple” pour mon besoin (un serveur et plein de petits PCs dans la nature :-)).

Pourquoi ?

En suivant le conseil d’un collègue et ami, j’ai regardé du côté de rdiff-backup, un outil utilisable en ligne de commande… mais, rassurez-vous, grâce à l’esprit libre du projet, des interfaces graphiques (GUI) ont été écrites pour s’interfacer avec l’outil. Ces interfaces ne seront pas traitées dans ce post.

L’avantage de cet outil, comme je l’ai dit, c’est sa simplicité; pour sauvegarder un répertoire rep_src dans un autre répertoire res_dst, il suffit de taper:

rdiff-backup rep_src rep_dst

et voilà, une fois la main rendue, la sauvegarde est réalisée.

Bien sûr, rdiff-backup ne fait pas simplement une copie “bête” du répertoire à sauvegarder; il crée un répertoire rep_dst/.rdiff-backup dans lequel il stocke des informations comme la date de backup et d’autres informations utiles pour mémoriser ce qui a été modifié entre le moment où la sauvegarde est lancée et les différents backups existants (s’il en existe). Ce qui n’est pas modifié, n’est pas recopié une nouvelle fois. On gros, on appelle ça une sauvegarde incrémentale.

D’ailleurs, pour lister le contenu d’un répertoire de sauvegarde rdiff-backup:

rdiff-backup -l rep_dst

ou

rdiff-backup --list-increment-size rep_dst

Un autre avantage est que dans l’arborescence de sauvegarde, vous retrouvez des fichiers “classiques”, c’est à dire non modifiés par rdiff-backup. Par exemple, si vous modifiez un fichier texte, vous pouvez toujours visualier son fichier de sauvegarde correspondant dans ses différentes versions (bin oui, différents backups :-))) avec un simple éditeur comme vi 😉

Dernière option utile à connaître pour mettre en place rdiff-backup dans une configuration “simple”, la purge des anciennes sauvegardes devenus obsolettes. De temps en temps, c’est utile 😉

rdiff-backup --remove-older-than 1W rep_dst

Cette commande supprimera les sauvegardes vieilles d’une semaine et plus.

Installation

L’installation de l’outil s’est faite de manière toute simple sur ma Debian via un “classique”:

aptitude install rdiff-backup

Quoi ?! L’outil est déjà installé ? Trop fort !!! 😉

La configuration matérielle de mon serveur “central” est composé de 3 disques:

  • 1 disque IDE de 50Go qui contient tout le système (appartient au disk group LVM vg01);
  • 1 disque IDE de 200Go qui va servir de disque de sauvegarde (appartient au disk group LVM backupdg);
  • 1 disque SATA de 1To (soit disant ;-)) qui contient toutes les données supra-méga importantes donc à backuper 😉 (appartient au disk group LVM datadg);

Une volume logique LVM a été créé dans le DG backupdg et monté sous /mnt/backup/rdiff (utilisation de /mnt… comme à l’ancienne ;-)).

Sous ce point de montage, dont les droits ont été fixés à “rwx——” et appartenant à “root:sys”, j’ai recréé l’arborescence du système ou plutôt des parties d’arborescence du système qui vont être sauvegardées:

  • /mnt/backup/rdiff/etc
  • /mnt/backup/rdiff/home
  • /mnt/backup/rdiff/root
  • /mnt/backup/rdiff/var/lib/cyrus
  • /mnt/backup/rdiff/var/lib/ldap
  • /mnt/backup/rdiff/var/spool/cyrus

Comme vous l’aurez compris, en enlevant “/mnt/backup/rdiff“, on retrouve les arborescences du système qui seront sauvegardées.

Reste la configuration… enfin plutôt le script qui va réaliser les sauvegardes.

Automatisation

Afin d’automatiser la sauvegarde des répertoires les plus importants et ce, toutes les nuits, une entrée est ajoutée dans la crontab de root:

35 4 * * * /root/etc/rdiff_bkp.sh

Le script:

#!/bin/sh
#
#set -x

# BACKUP
## HOMEDIR
nice -n 19 rdiff-backup /root /mnt/backup/rdiff/root
nice -n 19 rdiff-backup –exclude /home/binerf/.VirtualBox \
/home /mnt/backup/rdiff/home
## FILMS Perso
nice -n 19 rdiff-backup /mnt/films/Perso /mnt/backup/rdiff/films/Perso
## SYSTEM
nice -n 19 rdiff-backup /etc /mnt/backup/rdiff/etc
nice -n 19 rdiff-backup /var/lib/cyrus /mnt/backup/rdiff/var/lib/cyrus
nice -n 19 rdiff-backup /var/spool/cyrus /mnt/backup/rdiff/var/spool/cyrus
nice -n 19 rdiff-backup /var/spool/cyrus /mnt/backup/rdiff/var/lib/ldap
nice -n 19 rdiff-backup /var/lib/mysql /mnt/backup/rdiff/var/lib/mysql

# PURGE
## HOMEDIR
nice -n 19 rdiff-backup –remove-older-than 1W –force /mnt/backup/rdiff/home
nice -n 19 rdiff-backup –remove-older-than 1W –force /mnt/backup/rdiff/root
nice -n 19 rdiff-backup –remove-older-than 1W –force /mnt/backup/rdiff/films/Perso
nice -n 19 rdiff-backup –remove-older-than 1W –force /mnt/backup/rdiff/etc
nice -n 19 rdiff-backup –remove-older-than 1W –force /mnt/backup/rdiff/var/lib/cyrus
nice -n 19 rdiff-backup –remove-older-than 1W –force /mnt/backup/rdiff/var/spool/cyrus
nice -n 19 rdiff-backup –remove-older-than 1W –force /mnt/backup/rdiff/var/lib/ldap
nice -n 19 rdiff-backup –remove-older-than 1W –force /mnt/backup/rdiff/var/lib/mysql

# LISTE
## HOMEDIR
echo “/mnt/backup/rdiff/home”
rdiff-backup –list-increment-size /mnt/backup/rdiff/home
echo “/mnt/backup/rdiff/root”
rdiff-backup –list-increment-size /mnt/backup/rdiff/root
echo “/mnt/backup/rdiff/films/Perso”
rdiff-backup –list-increment-size /mnt/backup/rdiff/films/Perso
echo “/mnt/backup/rdiff/etc”
rdiff-backup –list-increment-size /mnt/backup/rdiff/etc
echo “/mnt/backup/rdiff/var/lib/cyrus”
rdiff-backup –list-increment-size /mnt/backup/rdiff/var/lib/cyrus
echo “/mnt/backup/rdiff/var/spool/cyrus”
rdiff-backup –list-increment-size /mnt/backup/rdiff/var/spool/cyrus
echo “/mnt/backup/rdiff/var/lib/ldap”
rdiff-backup –list-increment-size /mnt/backup/rdiff/var/lib/ldap
echo “/mnt/backup/rdiff/var/lib/mysql”
rdiff-backup –list-increment-size /mnt/backup/rdiff/var/lib/mysql

Le dernier paragraphe contenant les lignes “–list-increment-size” me permet juste de remonter l’information de la volumétrie occupée.

Bon, je l’admets, ce script pourrait être grandement amélioré par une boucle mais que voulez-vous, manque de temps diront certains 😉