Un cordonnier bien chaussé

Comme beaucoup vous avez déjà certainement perdu des données (un dd parti au paradis , une clé disparue) . Tous les jours toi aussi tu te dit qu’il faut que tu sauvegardes tes données . Voila ce moment il est enfin venu, il est tant de backuper 🙂 .

Avant de commencer ce qu’il faut savoir . Bacula repose sur certains services qu’il faut définir et comprendre avant tout .

  • Le Catalogue : Contient l’ensemble des fichiers qui ont été sauvegardés . Très utile pour la restauration étant donnée que nous allons devoir le parcourir . Il contient également les informations les jobs , les volumes etc . En somme c’est une brique très importante . Sans ce catalogue en gros c’est la merdouille.
  • Le Director : Vous le verrez aussi sous le nom de « dir » . Il s’agit d’une autre brique importante de notre usine. Elle permets de superviser l’ensemble des tâches backup , restauration , archivage .
  • Le Storage : Aussi appelé « SD » . Comme son nom l’indique est la section ou l’on configure tout ce qui concerne le stockage (emplacement) , les médias disque dur par exemple.
  • Le File : Aussi appelé « FD » . Il s’agit de la partie client qui doit être installé sur la machine à sauvegarder
  • La console : Nous permets de communiquer avec le director . Il existe 3 méthodes . Mais la plus complètes et plus simple est en ligne de commande .

Maintenant que vous connaissez les grands principes les fichiers qui gèrent tout ceci .

  • bacula-ctl-dir.conf = Fichier de configuration du “Bacula Director”.
  • bacula-ctl-fd.conf = Fichier de configuration du “Bacula Client”.
  • bacula-ctl-sd.conf = Fichier de configuration du “Bacula Storage”.
  • bconsole.conf = Fichier de configuration de la “Bacula Console”.

On récupère les derniers paquets de bacula

Comme d’habitude l’installation s’effectue à base de /

./configure --with-mysql --with-python
make
make install
  • –with-mysql : Pour la connexion à une base de donnée
  • –with-python : Pour le support , permet de scripter des actions directement dans bconsole

Il faut ensuite créer la base de donnée pour le stockage des événements

cd /etc/bacula/
./create_mysql_database -p
./make_mysql_tables -p
./grant_mysql_privileges -p

Pour ceux qui utilisent une base distante vous pouvez créer la bdd et le user à la main puis importer les tables à distance

mysql -h serveur_distant -u bacula -p bacula < bacula.sql

Le fichier bacula.sql est tout simplement le fichier « make_mysql_tables » ou j’ai laissé les données SQL .

On copie les fichiers nécessaires

# cp bacula-ctl-dir /etc/init.d/bacula-director
# cp bacula-ctl-fd /etc/init.d/bacula-fd
# cp bacula-ctl-sd /etc/init.d/bacula-sd
# cp bacula /etc/init.d/
chmod 755 /etc/init.d/bacula-sd
chmod 755 /etc/init.d/bacula-fd
chmod 755 /etc/init.d/bacula-director
chmod 755 /etc/init.d/bacula

En ouvrant le fichier bacula-dir.conf dans le répertoire /etc/bacula , ce fichier est complètement incompréhensible à mon sens. Ce fichier sera certainement ingérable si vous avez plusieurs serveurs ou une conf plutôt complexe. Déjà pour trois serveurs perso que je backup c’est déjà la merde.

Nous allons donc éclater la conf pour avoir quelques choses de plus potable 🙂 (le changement c’est maintenant).

Après ces belles paroles la configuration du director

Director {                            # define myself
  Name = ftp-01-dir
  DIRport = 9101                # where we listen for UA connections
  QueryFile = "/etc/bacula/query.sql"
  WorkingDirectory = "/var/bacula/working"
  PidDirectory = "/var/run"
  Maximum Concurrent Jobs = 10
  Password = "11a3e229084349bc25d97e29393ced1d"         # Console password
  Messages = Daemon
}

# Generic catalog service
Catalog {
  Name = MyCatalog
# Uncomment the following line if you want the dbi driver
  dbname = "db_name"; dbaddress = "host-mysql"; dbuser = "user_mysql"; dbpassword = "your_pass"
}

#
# Restricted console used by tray-monitor to get the status of the director
#
Console {
  Name = ftp-01-mon
  Password = "82c16692a7f9040f3a6eb6a6a3f3c141"
  CommandACL = status, .status
}
@/etc/bacula/conf.d/clients.conf
@/etc/bacula/conf.d/pools.conf
@/etc/bacula/conf.d/jobs.conf
@/etc/bacula/conf.d/fileset.conf
@/etc/bacula/conf.d/schedule.conf
@/etc/bacula/conf.d/storage.conf
@/etc/bacula/conf.d/messages.conf

Ça pique moins les yeux non ?

  • Password : Il s’agit du mot de passe qui sera utilisé par le File Daemon et le Storage pour se connecter au Director . Pour générer un password
echo password |md5sum
286755fad04869ca523320acce0dc6a4
  • Les « @ » : Correspondent tout simplement à des include

Sinon pour le reste ce fichier n’est pas très compliqué à comprendre donc je vais pas trop m’éterniser dessus .

Le fichier clients.conf

# Client (File Services) to backup
Client {
  Name = ftp-01-fd
  Address = ftp-01
  FDPort = 9102
  Catalog = MyCatalog
  Password = "9b36b2e89df94bc458d629499d38cf86"          # password for FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}
  • Le nom du client suivi de fd en général (c’est la nomenclature par défaut)
  • Address : Ip ou Nom DNS
  • FDPort : Port de Communication
  • Catalog : Le nom de votre Catalogue
  • PAssword : Mot de passe du Director (obligatoire pour que le Filer puisse se connecter au Director).
  • File Retention : Il s’agit du temps pendant lequel les fichiers resteront dans le catalogue
  • Job Retention : Temps pendant lequel les Jobs resteront dans le Catalogue
  • AutoPrune : Nettoyage du Catalogue en supprimant les anciens Jobs

Le fichier pools.conf

# Default pool definition
Pool {
  Name = Default
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
}

# File Pool definition
Pool {
  Name = File
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 60 days         # one year
  Maximum Volume Bytes = 10G          # Limit Volume size to something reasonable
  Maximum Volumes = 100               # Limit number of Volumes in Pool
}

# Scratch pool definition
Pool {
  Name = Scratch
  Pool Type = Backup
}
  • Name : Nom du pool
  • Pool Type : Il s’agit du type de pool , dans ce cas il s’agit d’un type backup .
  • Recycle : Permet ou pas de recycler un volume sur lequel les données ont été supprimées du catalogue.
  • Volume Retention : Extrait de la doc « La directive Volume Retention définit la période durant laquelle Bacula conserve les enregistrements Job associés au volume dans le catalogue. Lors de l’expiration de cette période, si AutoPrune est activée, Bacula peut supprimer les enregistrements Job plus anciens que la période time-period-specification spécifiée s’il est nécessaire de libérer un volume. Tous les enregistrements de fichiers associés à des jobs supprimés sont aussi supprimés »
  • Max Volumes Bytes : La taille maximal d’un volume
  • Maximum Volumes : Le Nb maximal de volume qu’il peut y avoir dans ce pool

Le fichier jobs.conf

JobDefs {
  Name = "DefaultJob"
  Type = Backup
  Level = Incremental
  FileSet = "Full Set"
  Schedule = "WeeklyCycle"
  Storage = File
  Messages = Standard
  Pool = File
  Priority = 10
  Write Bootstrap = "/var/bacula/working/%c.bsr"
}

#
# Define the main nightly save backup job
#   By default, this job will back up to disk in /tmp
Job {
  Name = "BackupFTP-01"
  JobDefs = "DefaultJob"
  Client = ftp-01-fd 
}

# Backup the catalog database (after the nightly save)
Job {
  Name = "BackupCatalog"
  JobDefs = "DefaultJob"
  Level = Full
  FileSet="Catalog"
  Schedule = "WeeklyCycleAfterBackup"
  Client = ftp-01-fd 
  # This creates an ASCII copy of the catalog
  # Arguments to make_catalog_backup.pl are:
  #  make_catalog_backup.pl <catalog-name>
  RunBeforeJob = "/etc/bacula/make_catalog_backup.pl MyCatalog"
  # This deletes the copy of the catalog
  RunAfterJob  = "/etc/bacula/delete_catalog_backup"
  Write Bootstrap = "/var/bacula/working/%n.bsr"
  Priority = 11                   # run after main backup
}

#
# Standard Restore template, to be changed by Console program
#  Only one such job is needed for all Jobs/Clients/Storage ...
#
Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=ftp-01-fd                 
  FileSet="Full Set"                  
  Storage = File                      
  Pool = Default
  Messages = Standard
  Where = /tmp/bacula-restores
}
  • JobDefs : Il faut voir JobsDefs comme une sorte de fonction (script). Ce paramètre permets de définir un ensemble d’instruction
  • Jobs : Dans notre cas Job va utiliser la fonction JobDefs . Si nous avions un second Job qui doit aussi utiliser le « DefaultJob » . On peut l’écrire comme ceci.
Job {
  Name = "Client-xx"
  JobDefs = "DefaultJob"
  Client = Client-xx-fd 
}

Le fichier FileSet

FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
      compression=GZIP9
    }

    File = /
    File = /backup
  }

#
# If you backup the root directory, the following two excluded
#   files can be useful
#
  Exclude {
    File = /var/bacula/working
    File = /tmp
    File = /proc
    File = /tmp
    File = /.journal
    File = /.fsck
  }
}

# This is the backup of the catalog
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
    File = "/var/bacula/working/bacula.sql"
  }
}
  • Name : Nom du FileSet
  • Signature : Type de signature utilisée (SHA1 ou MD5)
  • Compression : Niveau de compression dans mon cas c’est le niveau le plus élevée . Par défaut vous pouvez mettre GZIP tout simplement.
  • File : Les path à sauvegarder ou exclure en fonction de la rubrique. Attention si vous avez un truc du genre.
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              11G  3.7G  6.7G  36% /
tmpfs                1008M     0 1008M   0% /lib/init/rw
udev                   10M  1.6M  8.5M  16% /dev
tmpfs                1008M  4.0K 1008M   1% /dev/shm
/dev/sda3            276G  247G   15G  95% /data

Pour sauvegarder /data . Il faudra définir

File = / 
File = /data

Le schedule d’une tâche

Schedule {
  Name = "WeeklyCycle"
  Run = Full 1st sun at 23:05
  Run = Differential 2nd-5th sun at 23:05
  Run = Incremental mon-sat at 23:05
}

# This schedule does the catalog. It starts after the WeeklyCycle
Schedule {
  Name = "WeeklyCycleAfterBackup"
  Run = Full sun-sat at 23:10
}

Fichier Storage

# Definition of file storage device
Storage {
  Name = File
# Do not use "localhost" here    
  Address = ftp-01                # N.B. Use a fully qualified name here
  SDPort = 9103
  Password = "4b4d85dc171597e02141842460c902ca"
  Device = FileStorage
  Media Type = File
}

Maintenant que nous avons terminé de configurer bacula et avoir relancé celui-ci. Biensur nous n’avons pas d’erreurs 🙂 .

Il faut maintenant tester que tout est fonctionnel .

Lancement de la première sauvegarde , en ligne de commande tapez « bconsole »

*run
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
A job name must be specified.
The defined Job resources are:
     1: BackupFTP-01
     2: BackupCatalog
     3: RestoreFiles
Select Job resource (1-3): 1
Run Backup job
JobName:  BackupFTP-01
Level:    Incremental
Client:   ftp-01-fd
FileSet:  Full Set
Pool:     File (From Job resource)
Storage:  File (From Job resource)
When:     2013-01-04 16:21:30
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=1
You have messages.
*
*
04-Jan 16:21 ftp-01-dir JobId 1: No prior Full backup Job record found.
04-Jan 16:21 ftp-01-dir JobId 1: No prior or suitable Full backup found in catalog. Doing FULL backup.
04-Jan 16:21 ftp-01-dir JobId 1: Start Backup JobId 1, Job=BackupFTP-01.2013-01-04_16.21.47_11
04-Jan 16:21 ftp-01-dir JobId 1: Using Device "FileStorage"
04-Jan 16:21 ftp-01-sd JobId 1: Job BackupFTP-01.2013-01-04_16.21.47_11 is waiting. Cannot find any appendable volumes.
Please use the "label" command to create a new Volume for:
    Storage:      "FileStorage" (/mnt/DATA/bacula)
    Pool:         File
    Media type:   File
*

On peut voir que le premier backup n’est pas fontionnel tout simplement car nous n’avons pas de label définit . Pour cela il suffit de taper la commande « label » puis suivre les instruction.

Ne faites pas comme moi donner à votre lab un nom de type LAB-001 par exemple et pas un nom de machine .

Une fois votre label crée celui-ci va être chargé et le premier backup va se lancer . A noter que le 1er backup sera une FULL 🙂

Job en attente

Running Jobs:
Console connected at 04-Jan-13 16:18
 JobId Level   Name                       Status
======================================================================
     1 Full    BackupFTP-01.2013-01-04_16.21.47_11 is waiting for an appendable Volume
====
No Terminated Jobs.
====

A la fin du backup vous devriez avoir ceci

2013-01-04 16:46:24   ftp-01-dir JobId 3: Bacula ftp-01-dir 5.2.12 (12Sep12):
  Build OS:               i686-pc-linux-gnu debian 6.0.6
  JobId:                  3
  Job:                    BackupFTP-01.2013-01-04_16.40.35_34
  Backup Level:           Full (upgraded from Incremental)
  Client:                 "ftp-01-fd" 5.2.12 (12Sep12) i686-pc-linux-gnu,debian,6.0.6
  FileSet:                "Full Set" 2013-01-04 16:21:47
  Pool:                   "File" (From Job resource)
  Catalog:                "MyCatalog" (From Client resource)
  Storage:                "File" (From Job resource)
  Scheduled time:         04-Jan-2013 16:40:29
  Start time:             04-Jan-2013 16:40:38
  End time:               04-Jan-2013 16:46:24
  Elapsed time:           5 mins 46 secs
  Priority:               10
  FD Files Written:       82,537
  SD Files Written:       82,537
  FD Bytes Written:       1,490,273,300 (1.490 GB)
  SD Bytes Written:       1,502,346,720 (1.502 GB)
  Rate:                   4307.1 KB/s
  Software Compression:   None
  VSS:                    no
  Encryption:             no
  Accurate:               no
  Volume name(s):         LB-FTP-01
  Volume Session Id:      3
  Volume Session Time:    1357311744
  Last Volume Bytes:      1,506,093,303 (1.506 GB)
  Non-fatal FD errors:    0
  SD Errors:              0
  FD termination status:  OK
  SD termination status:  OK
  Termination:            Backup OK
2013-01-04 16:46:24   ftp-01-dir JobId 3: Begin pruning Jobs older than 6 months .
2013-01-04 16:46:24   ftp-01-dir JobId 3: No Jobs found to prune.
2013-01-04 16:46:24   ftp-01-dir JobId 3: Begin pruning Files.
2013-01-04 16:46:24   ftp-01-dir JobId 3: No Files found to prune.
2013-01-04 16:46:24   ftp-01-dir JobId 3: End auto prune.

Voila les sauvegardes sont en places elle , les prochaines se lanceront aux heures que vous avez fixé.

C’est bien beau de backuper mais il faut aussi restaurer non ? Une tâche de restauration est plutôt simple à faire . En ligne de commande taper « bconsole »

Enter a period to cancel a command.
*restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"

First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.

To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel

Si vous connaissez pas l’id du Job que vous souhaitez restaurer , sélectionner l’option 1. Sinon l’option 3. Pour la suite je pars de l’option 3 .

Select item:  (1-13): 3
Enter JobId(s), comma separated, to restore: 29
You have selected the following JobId: 29

Building directory tree for JobId(s) 29 ...  +++++++++++++++++++++
43 files inserted into the tree.

You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.

cwd is: /

On se retrouve à la racine de notre backup , à cet instant vous pouvez naviguer dans votre arborescence . Pour selectionner un fichier à restaurer il faut utiliser la commande mark

$ mark .bash_history
1 file marked.

Pour commencer la restauration

$ done
Bootstrap records written to /var/bacula/working/ftp-01-dir.restore.1.bsr

The job will require the following
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================

    Vol-003                   File                      FileStorage              

Volumes marked with "*" are online.

1 file selected to be restored.

Defined Clients:
     1: ftp-01-fd
     2: trinite-01-fd
Select the Client (1-2): 1
Run Restore job
JobName:         RestoreFiles
Bootstrap:       /var/bacula/working/ftp-01-dir.restore.1.bsr
Where:           /tmp/bacula-restores
Replace:         always
FileSet:         Full Set
Backup Client:   ftp-01-fd
Restore Client:  ftp-01-fd
Storage:         File
When:            2013-01-12 11:03:39
Catalog:         MyCatalog
Priority:        10
Plugin Options:  *None*
OK to run? (yes/mod/no): yes
Job queued. JobId=32

A la fin de la restauration vous devriez avoir ceci .

12-Jan 11:03 ftp-01-dir JobId 32: Start Restore Job RestoreFiles.2013-01-12_11.03.45_07
12-Jan 11:03 ftp-01-dir JobId 32: Using Device "FileStorage"
12-Jan 11:03 ftp-01-sd JobId 32: Ready to read from volume "Vol-003" on device "FileStorage" (/mnt/DATA/bacula).
12-Jan 11:03 ftp-01-sd JobId 32: Forward spacing Volume "Vol-003" to file:block 0:1084260538.
12-Jan 11:03 ftp-01-dir JobId 32: Bacula ftp-01-dir 5.2.12 (12Sep12):
  Build OS:               i686-pc-linux-gnu debian 6.0.6
  JobId:                  32
  Job:                    RestoreFiles.2013-01-12_11.03.45_07
  Restore Client:         ftp-01-fd
  Start time:             12-Jan-2013 11:03:47
  End time:               12-Jan-2013 11:03:48
  Files Expected:         1
  Files Restored:         1
  Bytes Restored:         8,909
  Rate:                   8.9 KB/s
  FD Errors:              0
  FD termination status:  OK
  SD termination status:  OK
  Termination:            Restore OK

Si vous souhaitez tout sauvegarder il faut faire un « mark * »

Et si nous avions une petite interface web pour voir un peu tout ca . Alors oui elle existe et elle s’appelle webacula

Les pré-requis

Bacula 3.0 or later
Supported MySQL, PostgreSQL and Sqlite databases
Zend Framework version 1.8.3 or later
Zend Framework is built with object-oriented PHP 5 and requires PHP 5.2.4 or later with PDO extension active. Please see the system requirements appendix for more detailed information
Apache and mod_rewrite
Installed php-gd package
Create separate database "webacula" (script in install/ directory) for use Logbook and Restore Job features

Installation de Webacula
Avant tout installer zend

 apt-get install zendframework

Récupérer webacula et déposer les sources dans le document root de votre choix. Qui dit document root dit serveur Web donc je vous laisse également installer celui de votre choix .

  • http://webacula.sourceforge.net/#downloads

Afin de fonctionner Webacula va créer de nouvelle table dans la base de bacula que vous avez créer au tout début . Pour cela il existe un script . Editer le fichier db.conf

  • install/db.conf
# See also application/config.ini

# bacula settings
db_name="Nom BDD Bacula"
# for Sqlite only
db_name_sqlite="/var/bacula/working/bacula.db"
db_user="User name Bacula"

# CHANGE_THIS
db_pwd="Mot de Passe BDD"

# Webacula web interface settings
#
# Built-in superuser login is 'root'
#
# CHANGE_THIS
webacula_root_pwd="Mot de passe de l'interface Webacula"

Une fois ce fichier configuré vous pouvez lancer les 2 scripts qui sont dans

  • install/MySql

Attention si vous base de donnée n’est pas sur la même machine . Il faut modifier les 2 fichiers comme suit :

#if mysql $* -u $db_user $pwd  $db_name -f <<END-OF-DATA
if mysql -h "ServeurBDD_Distant" -u $db_user $pwd  $db_name -f <<END-OF-DATA

Vérifier que votre système est prêt à recevoir webacula

/var/www/webacula/install# php5 check_system_requirements.php 

Webacula check System Requirements...

sh: psql: not found
sh: sqlite3: not found
Current MySQL version = 5  OK

Current PHP version = 5 OK

php pdo installed.      OK
php gd installed.       OK
php xml installed.      OK
php dom installed.      OK

php pdo_mysql installed.        OK
Warning. PHP extension pdo_pgsql not installed.
Warning. PHP extension pdo_sqlite not installed.
php-dom, php-xml installed.     OK

Pour ceux qui seront sur apache un fichier de conf est disponible dans le path .

  • install/apache/webacula.conf

Aller sur l’interface d’adiministration . Vous obtiendrez certainement l’erreur ci-dessous.

0. PHP Fatal error: Uncaught exception ‘Zend_Exception’ with message ‘Bacula version mismatch for the Catalog database. Wanted 12, got 14
Workaround.

Pour corriger rien de plus simple . Editer le fichier

vi /var/www/webacula/html/index.php

Puis remplacer comme ceci .

change line from
define(‘BACULA_VERSION’, 12); // Conf incorrecte 
define(‘BACULA_VERSION’, 14); // OK Conf correcte

Les plus

  • Souplesse
  • Gestion en ligne de commande
  • Restauration rapide
  • Gère le backup sur bande
  • Client Multi Plateforme

Les moins

  • Lenteur de l’interface Web pour la restauration .
  • La prise en main

Je ne vous dirais pas que saymieu que tel ou tel produit je ne les connaît  pas mis à part netbackup mais le prix n’est pas le même 🙂 .

Je tiens cependant à vous préciser que ceci est ma première install de bacula , pas mal de paramètres sont par défaut . La sauvegarde étant un sujet relativement sensible je vous conseil de lire la documentation officielle 😀

Depuis l’écriture de ce billet ma configuration à déjà évoluée car la volumétrie commençait à être énorme . Bref je pense qu’avec le temps votre configuration évoluera en fonction de vos attentes .

SOURCE
http://wiki.goldzoneweb.info/bacula

 

Cet article Un cordonnier bien chaussé est apparu en premier sur Guest Blog.

Vus : 3671
Publié par lmns972 : 24