Atelier sauvegarde de données
Formation COCSSI
25 mars 2014
Système de sauvegarde Bacula
Pierre Vincens
Bacula
Logiciel de sauvegarde en mode clientserveur
logiciel opensource
http://www.bacula.org
support par la société BaculaSystems
disponibilité
serveur: Linux, Freebsd et Solaris
client: Linux, FreeBSD, Solaris, Windows, MacOS
documentation
manuel sur le site
→ évolutions de versions incomplètement reportées dans le manuel
nombreux tutoriels
Contexte de déploiement ex 1: équipe isolée
Contexte
Quelques postes de travail Linux dont un fait office de serveur NFS
Volumétrie à sauvegarder environ 300Gio
Connexion en ADSL (bande passante limitée)
Solution de sauvegarde déployée
le poste de travail principal fait office de serveur de sauvegarde
1 serveur NAS comme support de backup
4 disques en RAID 5 monté sur le serveur en iSCSI
volumétrie disponible pour sauvegarde : 4 Tio
Contexte de déploiement:
ex 2: serveur d'applications
Contexte
Serveur sous Linux
hébergeur de machines virtuelles: mail, web, cloud,...
utilisation de LVM pour segmentation de l'espace
Solution de sauvegarde déployée
Sauvegarde assurée au niveau de l'hyperviseur
création d'un snapshot pour chaque disque à sauvegarder
Un volume LVM est utilisé comme espace de sauvegarde primaire
écriture sur montage ”fuse” d'un espace disponible sur serveur ftp non supporté
Le volume LVM de sauvegarde est dupliqué par synchronisation sur un serveur ftp distant (client lftp).
lftp ftp://user:password@host e ”mirror e R <source>/ <dest>/; quit”
Contexte de déploiement:
ex 3: unité de recherche
Contexte
~ 80 serveurs physiques Linux sauvegardés
Machines virtuelles, usage de LVM (snapshots), filesystem (ext4, xfs)
baies de stockage SANFC (snapshot interne), serveurs NAS
volumétrie à sauvegarder: ~ 400 Tio
Solution de sauvegarde déployée
Sauvegarde assurée par un serveur (1 CPU, 12Go mémoire)
accès réseau SAN (2 ports)
accès internet (aggrégation de lien: 4 x 1 Gb/s)
Support de sauvegarde sur bandes
1 robot (80 slots) comportant deux lecteurs LTO5 (connexion San FC)
1 robot (80 slots) comportant deux lecteurs LTO6 (connexion San FC)
Architecture de Bacula
Director
(chef d'orchestre)
File daemon
Storage
daemon
Installation du serveur
Prérequis :
un serveur de base de données fonctionnel:
PostgresSQL, MySQL ou SQLite
un (des) supports pour les sauvegardes
Installation
Compilation à partir des sources:
version stable, dépôt git
Binaires disponibles pour Debian, Ubuntu, FreeBSD,...
sur Ubuntu, les packages à installer sont (cas de PostgresSQL) :
Director: baculadirectorpgsql
Storage daemon: baculasdpgsql
File daemon: baculafd
Management: baculaconsole, baculaconsoleqt, baculatraymonitor
Configuration du serveur
Ouvrir les accès nécessaires
Bacula: 3 ports TCP: 9101 (director), 9102 (FD), 9103 (SD)
règles de firewall, tcpwrapper
Base de données (port dépendant du SGBD utilisé)
autorisation d'accès (pg_hba pour PostgresSQL,...)
Préparer la base de données (si non fait)
Création du compte de connexion, de la base de données
Créer les tables et index
Construire la configuration
Fichiers de configuration dans le répertoire /etc/bacula
1 fichier monolithique par composant: director, fd, sd, console,...
fichier composé de section définissant chacune une propriété
possibilité d'éclater ce fichier monolithique en plusieurs parties
Le «director»
(bacula-dir.conf)
Job
composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand
Client
informations pour accéder à un client et règles à
appliquer vis à vis de ce client
Storage
informations pour accéder à un périphérique de sauvegarde
et règles à appliquer vis à vis de ce périphérique
Pool
informations sur une collection de supports de sauvegarde
FileSet
information sur le contenu (fichiers, répertoires)
à inclure ou exclure
Schedule
informations sur un échéancier à appliquer
pour la sauvegarde
Jobdefs
modèle type de job
Director
informations générales
Catalogue
informations base de données
Messages
informations
Structure de bacula-dir.conf
Director { … }
@|"sh -c 'for f in /etc/bacula/JobDefs/*.jobdefs ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/Scheduling/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/Sets/*.set ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/Clients/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/VM/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/Storage/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/Pools/*.pool ; do echo @${f} ; done'"
Catalog { … }
@|"sh -c 'for f in /etc/bacula/Messages/*.conf ; do echo @${f} ; done'"
Console { … }
Section Director
(bacula-dir.conf)
Director {
Name = srv-dir
QueryFile = "/etc/bacula/scripts/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
Maximum Concurrent Jobs = 20
Password = "XXXX-PASS-DIRECTOR-XXXX"
Messages = Daemon DirAddresses = {
ip = { addr = 127.0.0.1 ; port = 9101}
ip = { addr = 192.168.1.1 ; port = 9101}
} }
Toute section porte un nom
Spécification des propriétés générales du Director
→ protéger le fichier en lecture (mot de passe)
Référence section correspondante Contrôle de l'accès
au processus Director
Où écoute le processus Parallèlisme Ajout de fonctionnalités d'interrogations de la BD
Section Messages (daemon)
(bacula-dir.conf)
Messages {
Name = Daemon
mailcommand = "/usr/lib/bacula/bsmtp -h mon_domain
-f \"\(Bacula\) \<%r\>\"
-s \"Bacula daemon message\" %r"
mail = bacula@mon_domain = all, !skipped console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped }
Suivre le fonctionnement du système de sauvegarde
Informations:
transmises par courriel
ajoutées dans les log
affichées sur la console
Section Messages (std)
(bacula-dir.conf)
Messages {
Name = Standard
mailcommand = "/usr/lib/bacula/bsmtp -h biologie.ens.fr
-f \"\(Bacula\) \<%r\>\"
-s \"Bacula: %t %e of %c %l [%n]\" %r"
operatorcommand = "/usr/lib/bacula/bsmtp -h biologie.ens.fr
-f \"\(Bacula\) \<%r\>\"
-s \"Bacula: Intervention needed for %j\" %r"
mail = bacula@biologie.ens.fr = all, !skipped operator = bacula@biologie.ens.fr = mount
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped catalog = all
}
Section Catalog
(bacula-dir.conf)
Catalog {
Name = MyCatalog dbname = "bacula";
dbaddress = "localhost";
dbuser = "bacula";
dbpassword = "XXXXX";
dbport = 5432 }
Spécification des accès à la base de données
Dépendant du SGBD utilisé: PostgresSQL, MySQL, SQLite
Base de données comportent 25 tables
Gestion des fichiers (tables file, filename, path,...)
Gestion des media (media, mediatype, pool,...)
Gestion des jobs (job, jobmedia, status,...)
Gestion des traces (log,...)
…
Volumétrie conséquente
~ 800Mo cas exemple 1
~ 1,5Go cas exemple 2
~600Go cas exemple 3
1,4 milliards d'entrées fichiers
90000 jobs
PostgresSQL
Base de données Bacula
Possibilité de construire ses propres interrogations de la base
Ajout de scripts locaux facilitant la gestion des sauvegardes
Ex: obtenir la liste des volumes utilisé par un job
Hors outils de gestion de la sauvegarde
Statistiques sur les données sauvegardées
Localisation de fichiers
→ peut nécessiter d'ajouter des index
#:List Volumes used by selected JobId
*Enter JobId:
SELECT DISTINCT Job.JobId,VolumeName FROM Job,JobMedia,Media
WHERE Job.JobId=%1
AND Job.JobId=JobMedia.JobId
Dans /etc/bacula/scripts/query.sql
Le «director»
(bacula-dir.conf)
Job
composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand
Client
informations pour accéder à un client et règles à
appliquer vis à vis de ce client
Storage
informations pour accéder à un périphérique de sauvegarde
et règles à appliquer vis à vis de ce périphérique
Pool
informations sur une collection de supports de sauvegarde
FileSet
information sur le contenu (fichiers, répertoires)
à inclure ou exclure
Schedule
informations sur un échéancier à appliquer
pour la sauvegarde
Jobdefs
modèle type de job
Director
informations générales
Catalogue
informations base de données
Messages
informations sur les notifications
section Schedule
(bacula-dir.conf)
Schedule {
Name = "MonthlyStartThe10"
Run = Full on 10 at 23:05
Run = Differential on 3,17,24,31 at 23:05 Run = Incremental Pool=IncPool
on 1,2,4,5,6,7,8,9,11,12,13,14,15,16, 18,19,20,21,22,23,25,26,27,28,29,30 at 23:05
}
Échéancier d'exécution d'un job
Spécifier quand et de quel niveau doivent être réalisées les sauvegardes
→ la durée du cycle est implicite (
Syntaxe assez souple permettant de spécifier heure, semaine, jour, mois
Possibilité de spécifier le support où doit se faire la sauvegarde (pool)
Le «director»
(bacula-dir.conf)
Job
composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand
Client
informations pour accéder à un client et règles à
appliquer vis à vis de ce client
Storage
informations pour accéder à un périphérique de sauvegarde
et règles à appliquer vis à vis de ce périphérique
Pool
informations sur une collection de supports de sauvegarde
FileSet
information sur le contenu (fichiers, répertoires)
à inclure ou exclure
Schedule
informations sur un échéancier à appliquer
pour la sauvegarde
Jobdefs
modèle type de job
Director
informations générales
Catalogue
informations base de données
Messages
informations sur les notifications
section Pool (bandes)
(bacula-dir.conf)
Pool {
Name = MegaBackup Pool Type = Backup Recycle = yes
AutoPrune = yes
Volume Retention = 6 months
Maximum Volumes = 0 Label Format = "MB"
}
Volume: un media (bande, fichier) dans lequel Bacula écrit des données.
Pour être utilisable, un volume doit être étiqueté (commande label)
Des informations sont associées à chaque volume (date accès, nombre de fichiers, nombre de montages,...)
Pool: collection de volumes
Produira des étiquettes MB0000, MB0001,...
Contrôle le cycle de vie de chacun des supports utilisés
Section Pool (Fichiers)
(bacula-dir.conf)
Pool {
Name = File
Pool Type = Backup Recycle = yes
AutoPrune = yes
Volume Retention = 180 days Maximum Volume Bytes = 10G Maximum Volumes = 100
}
Sauvegarde sur fichiers suit le même principe que bandes
Un fichier est équivalent à une bande
Tous les fichiers d'un même pool sont dans un même répertoire
Conseil: définir une taille «raisonnable» pour un fichier limite à 2Go sur machine 32bits
Pas de support pour les fonctions avancées de gestion de pool
Migration, clonage, ...
taille maximale des
données dans un volume
Pools, volumes, ...
Pourquoi plusieurs pools?
Support de type différents bandes LTO5, LTO6, fichiers,...
Durée de rétention des données différentes
Niveaux de sauvegarde différents (full, differential, incremental)
Lieu de stockage différents
Cycle d'un volume
Append Full
Recycled Purged
écriture
«prune»
recyclage première
écriture
«prune» : action qui consiste à déterminer si le contenu d'un volume peut être
«oublié» en confrontant date d'écriture et durée de rétention. Cette opération ne détruit pas de données.
(si recycle=1)
Recyclage d'un volume
Recherche limitée aux volumes en ligne
1.choix d'un volume avec statut «Append»
2.choix d'un volume avec statut «Recycle»
3.réalisation d'une étape de «prune» et choix d'un volume «purged»
4.recherche d'un volume dans le pool «Scratch»
Recherche étendue à tous les volumes
5.choix d'un volume avec statut «Append»
6.choix d'un volume avec statut «Recycle»
7.réalisation d'une étape de «prune» et choix d'un volume «purged»
8.tentative de création d'un nouveau volume (Python activé et nombre maximum de volumes non atteint)
9.«prune» le plus ancien volume si RecycleOldestVolume=yes, (volume ayant des écritures les plus anciennes et ayant un statut Full, Recycle, Purged, Used or Append)
10.«purge» le plus ancien volume si PurgeOldestVolume=yes (volume ayant des écritures les plus anciennes et ayant un statut Full, Recycle, Purged, Used or Append)
11.demander à l'opérateur
Le «director»
(bacula-dir.conf)
Job
composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand
Client
informations pour accéder à un client et règles à
appliquer vis à vis de ce client
Storage
informations pour accéder à un périphérique de sauvegarde
et règles à appliquer vis à vis de ce périphérique
Pool
informations sur une collection de supports de sauvegarde
FileSet
information sur le contenu (fichiers, répertoires)
à inclure ou exclure
Schedule
informations sur un échéancier à appliquer
pour la sauvegarde
Jobdefs
modèle type de job
Director
informations générales
Catalogue
informations base de données
Messages
informations
Section Storage (File)
(bacula-dir.conf)
Storage {
Name = BackupFile
Address = srv.domain.fr SDPort = 9103
Password = "XXX-PASS-STORAGE-XXX"
Device = FileStorage Media Type = File
}
La section «Storage» est le connecteur qui pointe vers le périphérique (device) géré par le «Storage daemon»
Le mot de passe à donner est celui du «Storage daemon»
L'adresse ne doit pas être «localhost», mais le nom de l'hôte
hébergeant le «Storage daemon»
Section Storage (Robot)
(bacula-dir.conf)
Storage {
Name = Scalar01-LTO5
Address = srv.domain.fr SDPort = 9103
Password = "XXXX-PASS-STORAGE-XXXX"
Device = LibraryScalar01 Media Type = LTO-5 Autochanger = yes
Maximum Concurrent Jobs = 20 }
Référence section device du SD
cas d'une robotique Parallèlisme
L'utilisation d'une robotique doit être spécifiée dans cette
section, la description précise intervenant dans le «Storage
daemon»
Architecture de Bacula
Director
(chef d'orchestre)
File daemon
Storage
daemon
Le «storage-daemon»
(bacula-sd.conf)
Device
information sur un périphérique (type de média, label utilisé,
taille des volumes, ...)
Director
informations pour accéder au
«director»
(authentification)
Messages
informations sur les notifications
à transmettre au «director»
Autochanger
informations sur un robot (périphériques qu'il gère, commandes de manipulation
des bandes,...)
Structure Storage Daemon
(bacula-sd.conf)
Storage {
Name = srv-sd
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
Maximum Concurrent Jobs = 20 SDAddresses = {
ip = { addr = 127.0.0.1 ; port = 9103}
ip = { addr = 192.168.1.1 ; port = 9103}
} }
…
Le Storage daemon gére les périphériques utilisées pour la sauvegarde.
Il peut être localisé sur un hôte identique ou différent du
«Director» et d'un «File daemon»
Structure Storage Daemon
(bacula-sd.conf)
…
Director {
Name = srv-dir
Password = "XXXX-PASS-DIRECTOR-XXXX"
}
Director {
Name = srv-mon
Password = "XXXX-PASS-MONITOR-XXXX"
Monitor = yes }
@|"sh -c 'for f in /etc/bacula/Devices/*.conf ; do echo @${f} ; done'"
Messages {
Name = Standard
director = srv-dir = all }
section Device (file)
(bacula-sd.conf)
Device {
Name = SrvFileStorage Media Type = File
Archive Device = /export/bacula/backup/pool01
LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes;
AutomaticMount = yes;# when device opened, read it RemovableMedia = no;
AlwaysOpen = no;
Maximum Volume Size = 10GB;
}
section Autochanger
(bacula-sd.conf)
Autochanger {
Name = LibraryScalar01 Device = Drive-Scalar01a Device = Drive-Scalar01b Changer Command =
"/etc/bacula/scripts/mtx-changer %c %o %S %a %d"
Changer Device =
/dev/tape/by-id/scsi-1QUANTUM_D1H0123456_LLA }
Bacula peut gérer des robotiques de sauvegarde. Par défaut, il utilise les commandes mtx*
→ valider le fonctionnement de ces commandes hors de Bacula
Le «Changer Device» est l'identifiant du robot et non des
lecteurs
Le «director»
(bacula-dir.conf)
Job
composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand
Client
informations pour accéder à un client et règles à
appliquer vis à vis de ce client
Storage
informations pour accéder à un périphérique de sauvegarde
et règles à appliquer vis à vis de ce périphérique
Pool
informations sur une collection de supports de sauvegarde
FileSet
information sur le contenu (fichiers, répertoires)
à inclure ou exclure
Schedule
informations sur un échéancier à appliquer
pour la sauvegarde
Jobdefs
modèle type de job
Director
informations générales
Catalogue
informations base de données
Messages
informations sur les notifications
section Client
(bacula-dir.conf)
Client {
Name = client01-fd
Address = 192.168.1.2 FDPort = 9102
Catalog = MyCatalog
Password = "XXXX-PASS-CLIENT01-XXXX"
Maximum Concurrent Jobs = 4 File Retention = 6 months Job Retention = 6 months AutoPrune = yes
}
La section «Client» est le connecteur qui pointe vers le poste à sauvegarder où est exécuté le «File daemon»
Le mot de passe à donner est celui du «File daemon»
Référence le client
durée de rétention Parallèlisme
Configurer le «file-daemon»
(bacula-fd.conf)
FileDaemon
définition du client (autorisation d'accès, parallélisme supporté, clés de chiffrement, ...)
Director
informations pour accéder au
«director»
(authentification)
Messages
informations sur les notifications
à transmettre au «director»
Structure «File daemon»
(bacula-fd.conf)
Director {
Name = srv-dir
Password = "XXXX-PASS-DIRECTOR-XXXX"
}
Director {
Name = src-mon
Password = "XXXX-PASS-MONITOR-XXXX"
Monitor = yes }
FileDaemon{…}
Messages {
Name = Standard
director = srv-dir = all, !skipped, !restored }
Le «File daemon» s'exécute sur lh'ôte contenant les données à
sauvegarder
section FileDaemon
(bacula-fd.conf)
FileDaemon {
Name = srv-fd
WorkingDirectory = /var/lib/bacula Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20 FDAddresses = {
ip = { addr = 127.0.0.1 ; port = 9102}
ip = { addr = 192.168.1.1 ; port = 9102}
}
PKI Signatures = Yes PKI Encryption = Yes
# Public and Private Keys
PKI Keypair = "/etc/bacula/Keys/srv-fd.pem"
# ONLY the Public Key
PKI Master Key = "/etc/bacula/Keys/bacula-master.cert"
}
les clés Activer la signature
des données
Parallèlisme
Activer le chiffrement des données
Le «director»
(bacula-dir.conf)
Job
composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand
Client
informations pour accéder à un client et règles à
appliquer vis à vis de ce client
Storage
informations pour accéder à un périphérique de sauvegarde
et règles à appliquer vis à vis de ce périphérique
Pool
informations sur une collection de supports de sauvegarde
FileSet
information sur le contenu (fichiers, répertoires)
à inclure ou exclure
Schedule
informations sur un échéancier à appliquer
pour la sauvegarde
Jobdefs
modèle type de job
Director
informations générales
Catalogue
informations base de données
Messages
informations
section FileSet
(bacula-dir.conf)
FileSet {
Name = "UnixSystemSet"
Include {
Options {
signature = MD5
compression = GZIP xattrsupport = yes }
File = / ...
File = /var }
Exclude {
File = /var/run File = /proc
...
} }
Options activées
répertoires à inclure
répertoires ou fichiers à exclure
Le «director»
(bacula-dir.conf)
Job
composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand
Client
informations pour accéder à un client et règles à
appliquer vis à vis de ce client
Storage
informations pour accéder à un périphérique de sauvegarde
et règles à appliquer vis à vis de ce périphérique
Pool
informations sur une collection de supports de sauvegarde
FileSet
information sur le contenu (fichiers, répertoires)
à inclure ou exclure
Schedule
informations sur un échéancier à appliquer
pour la sauvegarde
Jobdefs
modèle type de job
Director
informations générales
Catalogue
informations base de données
Messages
informations
section Jobdefs
(bacula-dir.conf)
JobDefs {
Name = "MegaJob"
Type = Backup
Level = Incremental Client = srv-fd
FileSet = "Full Set"
Schedule = "WeeklyCycle"
Messages = Standard
Storage = Scalar01-LTO5
Maximum Concurrent Jobs = 20 Pool = MegaBackup
Priority = 10
Write Bootstrap = "/var/lib/bacula/%c.bsr"
}
Cette section décrit les paramètres par défaut des jobs. Les
valeurs sont écrasées si redéfinies dans la section job.
Le «director»
(bacula-dir.conf)
Job
composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand
Client
informations pour accéder à un client et règles à
appliquer vis à vis de ce client
Storage
informations pour accéder à un périphérique de sauvegarde
et règles à appliquer vis à vis de ce périphérique
Pool
informations sur une collection de supports de sauvegarde
FileSet
information sur le contenu (fichiers, répertoires)
à inclure ou exclure
Schedule
informations sur un échéancier à appliquer
pour la sauvegarde
Jobdefs
modèle type de job
Director
informations générales
Catalogue
informations base de données
Messages
informations
section Job
(bacula-dir.conf)
Job {
Name = "BackupSystemClient01"
JobDefs = "MegaJob"
Client = client01-fd
FileSet = "UnixSystemSet"
Schedule = "MonthlyStartThe16"
Maximum Concurrent Jobs = 4 }
Job {
Name = "BackupHome01Client01"
JobDefs = "MegaJob"
Client = client01-fd
FileSet = "UnixHome01Set"
Schedule = "MonthlyStartThe17"
Maximum Concurrent Jobs = 4 }
client échéancier Parallèlisme JobDefs définit les paramètres par défaut
→ Jobid: identifiant d'un job en cours d'exécution
Gestion du parallèlisme
Objectif
Minimiser les durées globales de sauvegarde en utilisant le plus souvent possible le débit maximal d'écriture possible sur le(s) support(s)
Principe
Gérer plusieurs supports de sauvegarde simulatanément
Association de plusieurs flux de données à sauvegarder en un flux unique d'écriture sur un support de sauvegarde
Mise en œuvre
Spécifier au niveau des composants le niveau de parallélisme supporté. Par exemple:
globalement, 20 jobs peuvent s'exécuter
4 jobs peuvent être actifs simultanément pour un client donné
4 jobs peuvent être actifs simultanément en écriture sur un support de sauvegarde
section FileSet (snapshot)
(bacula-dir.conf)
FileSet {
Name = "SnapshotHome01Client02Set"
Include { Options {
signature = MD5
xattrsupport = yes }
File = /snapshot/sav_client02_hm01 }
}
Pour s'assurer que les données ne sont pas modifiées au cours de la sauvegarde, une technique consiste à créer une image instantanée
point de montage du snapshot
section Job (snapshot)
(bacula-dir.conf)
Job {
Name = "BackupHome01Client02"
JobDefs = "MegaJob"
Client = client02-fd
FileSet = "SnapshotHome01Client02Set"
Schedule = "MonthlyStartThe05"
Maximum Concurrent Jobs = 6 RunScript {
RunsWhen = Before
FailJobOnError = yes
Command = "/.../create-snapshot home01 ..."
}
RunScript {
RunsWhen = After
RunsOnFailure = yes
Command = "/.../destroy-snapshot home01 ..."
} }
script de création et de suppression
du snapshot
Sauvegarde du catalogue
La destruction où l'altération de la base de données neutralise le fonctionnement du logiciel.
En cas de désastre, la restauration des données est facilitée par la reconstitution de la base de données.
→ disposer de copies de secours de la base de données est impératif
Sauvegarde du catalogue
doit être fait avec une base de données dans un état stable (pas de modifications)
création d'un job spécifique
choix d'une priorité inférieure à tous les autres jobs afin qu'il ne soit exécuter que lorsque tous les autres jobs sont achevés.
cycle quotidien afin de minimiser la perte d'information
le fichier à sauvegarder est construit à chaque déclenchement du job
quand la base devient importante, le temps de sauvegarde
devient critique
Section Job (BackupCatalog)
(bacula-dir.conf)
Job {
Name = "BackupCatalog"
JobDefs = "DefaultJob"
Level = Full
FileSet="Catalog"
Schedule = "WeeklyCycle"
# This creates an ASCII copy of the catalog # Arguments to make_catalog_backup.pl are:
# make_catalog_backup.pl <catalog-name>
RunBeforeJob =
"/etc/bacula/scripts/make_catalog_backup.pl MyCatalog"
# This deletes the copy of the catalog
RunAfterJob = "/etc/bacula/scripts/delete_catalog_backup"
Write Bootstrap = "/var/lib/bacula/%n.bsr"
Priority = 11 # run after main backup }
Section Job (RestoreFiles)
(bacula-dir.conf)
Job {
Name = "RestoreFiles"
Type = Restore
Client = client01-fd FileSet = "Full Set"
Storage = Scalar01-LTO5 Pool = MegaBackup
Messages = Standard
Where = /export/bacula/bacula-restores }
La configuration doit inclure un job de type «Restore» qui définit les options par défaut qui seront utilisées lors d'une restauration de données.
Tous les paramètres sont modifiables lors de la procédure de
restauration.
section Device (bande)
(bacula-sd.conf)
Device {
Name = Drive-Scalar01a Drive Index = 0
Media Type = LTO-5
Archive Device = /dev/tape/by-id/scsi-12345678abcd01000-nst LabelMedia = yes;
AutomaticMount = yes;
AlwaysOpen = yes;
RemovableMedia = yes;
RandomAccess = no;
AutoChanger = yes
Maximum Concurrent Jobs = 4
Spool Directory = /var/spool/bacula/scalar01a Maximum Job Spool Size = 100GB
Alert Command = "sh -c 'smartctl -H -l error %c |
grep -v Error\\\ Counter\\\ logging\\\ not\\\ supported'"
}
identifiant du device du lecteur spécifier l'inclusion
dans une librairie Parallèlisme
Gestion de l'application
Mode CLI
Une console interactive donnant accès à l'ensemble des fonctions
Possibilité de scripter des commandes
Mode graphique
Une interface minimaliste «bat» (bacula admin tool)
Accès possible via des interfaces web (baculaweb)
Visualisation de l'état avec «TrayMonitor»
#!/bin/bash
echo "list media" | bconsole -n
bconsole
#bconsole
Connexion au Director 192.168.1.1:9101
1000 OK: srv-dir Version: 5.2.5 (26 January 2012) Tapez un point (.) pour annuler une commande.
*help
Command Description ======= ===========
add Add media to a pool
autodisplay Autodisplay console messages automount Automount after label
…
version Print Director version
wait Wait until no jobs are running
When at a prompt, entering a period cancels the command.
You have messages.
*
La console graphique: bat
Configuration de la console
(bconsole.conf, bat.conf)
Director {
Name = srv-dir DIRport = 9101
Address = 192.168.1.1
Password = "XXXX-PASS-DIRECTOR-XXXX"
}
Configuration en référençant le «Director»
Valable pour bconsole.conf (CLI) et bat.conf (graphique)
Plusieurs instances autorisées actives simultanément
Mise en œuvre
Director, FD et SD sont configurés
Une console est accessible
Run...
Labellisé les volumes
Lancer une sauvegarde avec les options par défaut
Où en eston?
Messages dans la console (via la commande message), dans les log, dans la base de données
La commande «status»
echo "label pool=File storage=File volume=BkpVol00" | bconsole
echo "run job=BackupHome01Client02 yes" | bconsole
Restaurer des données
Qui peut le faire?
Avec Bacula, c'est l'administrateur...
Retrouver ce qui doit être restaurer
Localiser le(s) fichier(s): quel client? Quel répertoire? Quelles versions?
Plusieurs approches proposées en standard.
Accès direct à une vision du système de fichiers
Etape intermédiaire de recherche afin d'identifier le jobid
Ajout de scripts d'interrogation de la base données
Ex: retrouver toutes les versions sauvegardées d'un fichier.
Cas des partitions complètes
Où restaurer?
Position originelle, ailleurs...
Restaurer des données
*restore
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
Select item: (1-13):
Gestion de désastre
Reconstituer le catalogue
Utilitaire bscan: lecture du volume et reconstitution des données de ce volume au sein du catalogue
En cas de dégradation du catalogue
→ la relecture de toutes les bandes peut être nécessaire sauf si sauvegarde du catalogue.
En cas de «prune» non souhaité
Relire le contenu d'un volume
Utilitaire bextract: extraire les fichiers du volume (à réserver au cas où restore est inutilisable
→ bls: permet de lister le contenu du volume
Et encore...
Quelques facilités de gestion
Modifier la configuration en ligne
Tester la configuration
Mettre à jour la configuration
Bien d'autres fonctionnalités...
Authentification «forte» entre clients et serveurs
Gestion des ACL
Bacula virtual file system (bvfs)
...
bacula-dir -t -c /etc/bacula/bacula-dir.conf echo "reload" | bconsole -n
Bilan de l'utilisation
Toutes les données devant être restaurées l'ont été!
→ Et il y en a eu!
Concernant l'exemple 1
Incident liés à une panne de disques sur serveur NAS (2 disques HS, 1h)
Concernant l'exemple 2
Problème de disponibilité du serveur FTP
Concernant l'exemple 3 (18 mois d'utilisation):
Incidents de fonctionnement liés ayant induit des retards de sauvegardes
à la robotique (panne d'un lecteur – intérêt d'en avoir 2 identiques)
à des problèmes de montage et démontage de snapshots
Limite liée à la taille de la base de données
→ transfert sur un support disque plus performant
→ revoir la manière dont est réalisée la sauvegarde
Optimisation des sauvegardes
→ révision régulière de la répartition des sauvegardes «Full»
→ ajustement du parallelisme pour ne pas saturer les serveurs