Adrien's log

Yet Another Note Pad

Bacula : Disaster recovery complet

by adrien on 10 février 2014

Problème

La semaine dernière, le serveur hébergeant ce blog a lamentablement planté suite à une mise à jour automatique de Grub. J’utilisais apt-cron pour mettre à jour ma Debian testing. Après plusieurs tentatives de réparations infructueuses, j’ai dû me résoudre à réinstaller la machine.

Comme méthode de sauvegarde, j’utilise Bacula, qui fait très bien son job et me parait facile à utiliser. Pour restaurer ses fichiers, on passe par une interface texte genre minitel assez efficace. Mais voilà, Bacula s’appuie sur MySQL (dans mon cas) pour indexer les fichiers pour ne pas avoir à relire toutes les cassettes (dans mon cas, ce sont des fichiers). En faite, c’est pas compliqué (c’est juste long).

La restauration

Dans mon cas, j’aurai très bien pu récupérer la base de données mais j’ai voulu en profiter pour tester une restauration à partir de zéro et tester que je sauvegardais bien tout ce dont j’avais besoin.

Réinstallation de l’OS et de Bacula.

Utilisant  une Debian, j’ai réinstallé Bacula, après avoir réinstaller l’OS, simplement avec la commande apt-get les paquets suivant :

apt-get install bacula-common bacula-common-mysql bacula-console bacula-director-common bacula-director-mysql bacula-fd bacula-sd bacula-sd-mysql

Enfin, comme je n’ai pas encore accès à la sauvegarde, il va falloir configurer Bacula un minimum à la main pour que les outils que nous allons utiliser puisse fonctionner. Il faut simplement modifier le fichier du démon de stockage « bacula-sd.conf » pour renseigner le lecteur où Bacula va pouvoir trouver les sauvegardes.

Lister les jobs

Ensuite, il va falloir lister les jobs présents sur les cassettes pour pouvoir, dans la prochaine étape, construire un fichier « bootstrap ».

bls -j FileStorage -V "volume5"

Cette commande permet de lister le jobs (-j) en utilisant le lecteur « FileStorage » se trouvant dans les volumes 3 et 4. Nous aurons en sortie un truc comme ça :

End Job Session Record: File:blk=0:137710019 SessId=1 SessTime=1391717701 JobId=1
   Date=07-févr.-2014 16:48:24 Level=F Type=B Files=38,835 Bytes=26,959,622,819 Errors=2 Status=T
Begin Job Session Record: File:blk=0:137774531 SessId=2 SessTime=1391717701 JobId=2
   Job=sb2.2014-02-08_03.05.00_08 Date=08-févr.-2014 03:05:17 Level=I Type=B
End Job Session Record: File:blk=0:145464229 SessId=2 SessTime=1391717701 JobId=2
   Date=08-févr.-2014 03:05:37 Level=I Type=B Files=166 Bytes=7,732,784 Errors=0 Status=T
Begin Job Session Record: File:blk=0:145528741 SessId=3 SessTime=1391717701 JobId=3
   Job=sb2.2014-02-09_03.05.00_10 Date=09-févr.-2014 03:05:17 Level=I Type=B
End Job Session Record: File:blk=0:155366488 SessId=3 SessTime=1391717701 JobId=3
   Date=09-févr.-2014 03:05:42 Level=I Type=B Files=249 Bytes=9,879,249 Errors=0 Status=T

Ce qui nous intéresse, c’est le SessId, le SessTime et le JobId. Avec cela, on va construire notre fichier bootstrap. Évidement, suivant le nombre de volumes que vous avez scannés, le nombre de lignes sera bien plus important. Avant de passer à la prochaine étape, il convient de garder uniquement les jobs qui nous intéressent et de supprimer les données inutiles pour nous. Grep et Sed sont vos amis. Personnellement, J’ai voulu restaurer la sauvegarde la plus récente, ce qui incluait la dernière sauvegarde complète ainsi qu’une vingtaine de sauvegardes incrémentales.

Le fichier de bootstrap permet de lister les jobs qui seront restaurés et indique sur quel volume ils sont situés. Avec l’extrait ci dessus, il ressemblerait à ça :

Volume = volume5
VolSessionId = 1
VolSessionTime = 1391717701
 
Volume = volume5
VolSessionId = 2
VolSessionTime = 1391717701

Une liste de tous les jobs à restaurer.

Extraire les données

bextract -b bootstrap.bsr FileStorage /tmp/restore

Avec cette commande, nous précisons notre fichier bootstrap tout frais, le device Bacula (comme avec bls) et enfin le chemin où seront restaurés nos fichiers.

Une fois cette commande terminée, on peut récupérer nos précieux fichiers dans le répertoire spécifié.

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.