Cet article est le premier d'une série de trois. Nous allons voir comment installer et configurer une solution de sauvegarde réseau. Nous pourrons ainsi centraliser sur un serveur la sauvegarde des données de toutes les machines du réseau.

Introduction

Cahier des charges

J'ai récupéré il y a peu de temps un lecteur de bandes SCSI et quelques bandes DDS-3. Je me suis donc mis en recherche d'une solution de sauvegarde qui me permette de centraliser celle-ci sur le serveur pour toutes les machines du réseau. Mon cahier des charges était le suivant :

  • Présent empaqueté dans Ubuntu
  • Gestion automatique d'un catalogue
  • Sauvegarde centralisée sur un serveur de backup
  • Possibilité de gérer plusieurs clients indépendants
  • Gestion d'un lecteur de bandes mais aussi d'autres médias (disque dur, cdroms, dvds)
  • Si possible présence d'une inteface graphique pour gérer et suivre les sauvegardes

Après avoir étudié plusieurs logiciels, je me suis orienté vers Bacula qui répond à tous mes prés-requis. Il a l'avantage de disposer d'une documentation très bien faite et presque entièrement en Français. Par contre il semble très puissant et donc compliqué à mettre en place. Nous verrons qu'en fait un peu de rigueur et pas mal de lecture font qu'il ne l'est pas tant que ca.

Vue d'ensemble

Pour avoir une idée plus complète des composants de Bacula, je vous renvoi vers la documentation

Voici quand même une brève introduction des composants :

  • Director daemon : composant principal de Bacula, il va diriger tous les autres.
  • Storage daemon : c'est le service qui va s'occuper d'écrire les fichiers de sauvegarde. Dans notre cas il accèdera au lecteur de bandes
  • File daemon : c'est la partie client qui va lire les fichiers à sauvegarder sur chaque machine et les envoyer au Storage daemon. Il doit y en avoir un par machine à sauvegarder.
  • Bacula console : c'est l'interface utilisateur. Grâce à lui nous pourrons communiquer avec le Director et gérer nos sauvegardes (les lancer, voir les rapports ...)

Voyons aussi rapidement les termes employés dans la configuration de Bacula :

  • FileSet : Quels fichiers allons nous sauvegarder ? c'est le point d'entrée des File daemon
  • Client : Quelles machines devons nous sauvegarder ?
  • Schedule : Quand les sauvegardes doivent être executées ?
  • Pool : Ou ces sauvegardes seront-elles écrites ? Cela peut-être par exemple un ensemble de bandes.
  • service / daemon / démon : tous ces termes désignent un processus qui fonctionne en arrière plan sur votre ordinateur. Vous connaissez surement cron ou Xorg ou encore apache qui sont tous des démons.

Installer le lecteur de bandes

Cette partie est spécifique à ma configuration. Si le votre est déjà fonctionel ou que vous sauvegardez autrement vous pouvez passer au point suivant.

## module de la carte SCSI ISA
$ sudo modprobe aha1542  aha1542=0x230
## module du lecteur de bandes
$ sudo modprobe st
## Testons maintenant le fonctionnement
$ sudo mt -f /dev/st0 status
drive type = Generic SCSI-2 tape
drive status = 620756992
[...]
## Faire une sauvegarde The old way : avec tar
$ cd /tmp
$ cat > test
Bonjour, je suis un fichier de test.
^D
$ sudo mt -f /dev/st0 rewind
$ sudo tar cvzf /dev/st0 test
test
$ sudo rm test
$ sudo tar xvzf /dev/st0 test
test
$ cat test
Bonjour, je suis un fichier de test.

Si tout cela fonctionne, on peux alors ajouter les modules à /etc/modules.

Bacula sur le serveur

Note: Cette installation à été faite sur une Ubuntu Dapper. Si votre serveur est en Edgy[1] quelques différences peuvent apparaître.

Installer

Comme bacula est disponible en paquets, l'installation est très simple. Une seule chose à faire : choisir quelle base de donnée hébergera le catalogue des fichiers sauvegardés.
Vous avez le choix entre MySQL, PostgreSQL ou SQLite. Pour simplifier l'installation, nous choisirons SQLite qui ne nécessite pas de démon de BDD.

$ sudo apt-get install bacula-director-sqlite bacula-sd bacula-console bacula-fd

Dans la suite de ces articles, nous allons créer une configuration pour sauvegarder

  • le répertoire /etc du serveur FortCigogne
  • le Catalogue des fichiers sauvegardés (en fait c'est déjà configuré par défaut)
  • le répertoire /etc d'une autre machine : Penfret

Configurer

La configuration est centralisée dans le répertoire /etc/bacula.

Storage Daemon

Ce service s'occupe d'ecrire les fichiers sur le media choisi. Dans notre exemple, un lecteur de bandes. Pour les autres médias, voir sur le site de Bacula

$ sudo vi /etc/bacula/bacula-sd.conf

Beaucoup d'exemples sont présents dans ce fichier. Pour mon lecteur de bandes :

Device {
Name = "HP C1537A"
Media Type = DDS-3
Archive Device = /dev/st0
AutomaticMount = yes; # when device opened, read it
AlwaysOpen = yes;
RemovableMedia = yes;
RandomAccess = no;
}

Vous pouvez vérifiez la syntaxe du fichier de configuration avec cette commande :

$ sudo bacula-sd -t -c /etc/bacula/bacula-sd.conf

puis redémarrez le daemon.

$ sudo invoke-rc.d bacula-sd restart
Director Daemon

Ce service controle et commande tout le processus de backup. Sa configuration est la plus ardue. Voir la documentation pour tous les détails

$ sudo vi /etc/bacula/bacula-dir.conf

Modifiez la configuration par defaut (commentaires en ajoutant un # devant la ligne) :

  • dans JobDefs
    • commentez uniquement la ligne FileSet = "Full Set"
    • Changez le Storage pour le votre, voir la directive Storage ci-dessous
  • pour les Job
    • commentez entièrement le Job correspondant à Client1
  • pour les FileSet
    • commentez entièrement le FileSet correspndant à Full Set[2]
  • pour les Storage
    • si vous sauvegardez autrement que sur fichiers, commentez le Storage File

Ajoutez alors votre propre configuration.

D'abord quelle couple Machine / Fichiers allons nous sauvegarder ?

# Configuration de FortCigogne
# Sauvegarder les fichiers de /etc pour Fortcigogne
Job {
Name = "FortCigogne_config"
FileSet = "Config" # doit correspondre à la directive FileSet ci-dessous
JobDefs = "DefaultJob" # paramètres non spécifiques à ce Job
Write Bootstrap = "/var/lib/bacula/FortCigogne.bsr"
}

Définissons maintenant les fichiers à sauvegarder :

# Fichiers de /etc
FileSet {
Name = "Config" # utilisé dans Job/FileSet
Include { # Fichiers à inclure dans la sauvegarde
Options {
signature = MD5
compression = GZIP
}
File = /etc # Une ou plusieurs ligne correspondant aux repertoires à sauver
}
}

Enfin définissons le lieu de sauvegarde (ici aussi beaucoup d'exemples sont présents) :

# Sauvegarde sur bandes
Storage {
Name = DDS-3 # Le nom utilisé dans JobDef ci-dessus
Address = FortCigogne # le serveur hébergant le Storage daemon
SDPort = 9103
Password = ""
Device = "HP C1537A" # doit correspondre au Device définit dans bacula-sd.conf
Media Type = DDS-3
}

Pour la restauration, pensez à changer les lignes Storage et FileSet du Job RestoreFile pour coller à votre media/fileset. Dans mon exemple ce sera DDS-3 et Config

Notes sur les mails:

  • Vous pouvez aller voir la première partie de ce billet pour configurer l'envoi de mails locaux.
  • Les rapports seront envoyés par email à l'utilisateur root. Pour changez cela, modifiez mail et operator dans les diretives Messages
  • Si votre FAI necessite une adresse email valide dans le from, remplacer le -f des mailcommand et operatorcommand par l'email voulu, par exemple :

... -f \"\(Bacula\) root@domain.tld\" ...

Testez la syntaxe de votre fichier :

$ sudo bacula-dir -t -c /etc/bacula/bacula-dir.conf

et redemarrez le daemon director

$ sudo invoke-rc.d bacula-director restart

Voila, dans le prochain article, nous verrons comment Sauvegarder puis restaurer des fichiers. Ensuite nous ajouterons une nouvelle machine à notre processus de sauvegarde.

Edit du 03/12: typo et ajout des liens vers la suite

Notes

[1] quelle drole d'idée ! ;)

[2] profitez en pour lire les commentaires très instructifs