Atelier sauvegarde de données Formation COCSSI 25 mars 2014 Système de sauvegarde Bacula Pierre Vincens
Bacula Logiciel de sauvegarde en mode client serveur logiciel opensource http://www.bacula.org support par la société Bacula Systems 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 SAN FC (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: bacula director pgsql Storage daemon: bacula sd pgsql File daemon: bacula fd Management: bacula console, bacula console qt, bacula traymonitor Documentation: bacula doc
Configuration du serveur Ouvrir les accès nécessaires Bacula: 3 ports TCP: 9101 (director), 9102 (FD), 9103 (SD) règles de firewall, tcp wrapper 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) Client informations pour accéder à un client et règles à appliquer vis à vis de ce client Director informations générales FileSet information sur le contenu (fichiers, répertoires) à inclure ou exclure Pool informations sur une collection de supports de sauvegarde Job composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand Jobdefs modèle type de job Storage informations pour accéder à un périphérique de sauvegarde et règles à appliquer vis à vis de ce périphérique Catalogue informations base de données Messages informations sur les notifications Schedule informations sur un échéancier à appliquer pour la sauvegarde
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) 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) 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 Ajout de fonctionnalités d'interrogations de la BD Parallèlisme Contrôle de l'accès au processus Director Référence section correspondante Où écoute le processus
Section Messages (daemon) (bacula-dir.conf) Suivre le fonctionnement du système de sauvegarde Informations: transmises par courriel ajoutées dans les log affichées sur la console 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
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) 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 Catalog { PostgresSQL Name = MyCatalog dbname = "bacula"; dbaddress = "localhost"; dbuser = "bacula"; dbpassword = "XXXXX"; dbport = 5432
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 #: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 Statistiques sur les données sauvegardées Localisation de fichiers peut nécessiter d'ajouter des index Dans /etc/bacula/scripts/query.sql
Le «director» (bacula-dir.conf) Client informations pour accéder à un client et règles à appliquer vis à vis de ce client Director informations générales FileSet information sur le contenu (fichiers, répertoires) à inclure ou exclure Pool informations sur une collection de supports de sauvegarde Job composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand Jobdefs modèle type de job Storage informations pour accéder à un périphérique de sauvegarde et règles à appliquer vis à vis de ce périphérique Catalogue informations base de données Messages informations sur les notifications Schedule informations sur un échéancier à appliquer pour la sauvegarde
section Schedule (bacula-dir.conf) É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) 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
Le «director» (bacula-dir.conf) Client informations pour accéder à un client et règles à appliquer vis à vis de ce client Director informations générales FileSet information sur le contenu (fichiers, répertoires) à inclure ou exclure Pool informations sur une collection de supports de sauvegarde Job composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand Jobdefs modèle type de job Storage informations pour accéder à un périphérique de sauvegarde et règles à appliquer vis à vis de ce périphérique Catalogue informations base de données Messages informations sur les notifications Schedule informations sur un échéancier à appliquer pour la sauvegarde
section Pool (bandes) (bacula-dir.conf) 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 Pool { Name = MegaBackup Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 6 months Maximum Volumes = 0 Label Format = "MB" Contrôle le cycle de vie de chacun des supports utilisés Produira des étiquettes MB0000, MB0001,...
Section Pool (Fichiers) (bacula-dir.conf) 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,... Pool { Name = File Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 180 days Maximum Volume Bytes = 10G Maximum Volumes = 100 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 écriture Full première écriture Recycled recyclage (si recycle=1) Purged «prune» «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.
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) Client informations pour accéder à un client et règles à appliquer vis à vis de ce client Director informations générales FileSet information sur le contenu (fichiers, répertoires) à inclure ou exclure Pool informations sur une collection de supports de sauvegarde Job composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand Jobdefs modèle type de job Storage informations pour accéder à un périphérique de sauvegarde et règles à appliquer vis à vis de ce périphérique Catalogue informations base de données Messages informations sur les notifications Schedule informations sur un échéancier à appliquer pour la sauvegarde
Section Storage (File) (bacula-dir.conf) 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» Storage { Name = BackupFile Address = srv.domain.fr SDPort = 9103 Password = "XXX-PASS-STORAGE-XXX" Device = FileStorage Media Type = File
Section Storage (Robot) (bacula-dir.conf) L'utilisation d'une robotique doit être spécifiée dans cette section, la description précise intervenant dans le «Storage daemon» 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
Architecture de Bacula Director (chef d'orchestre) File daemon Storage daemon
Le «storage-daemon» (bacula-sd.conf) Messages informations sur les notifications à transmettre au «director» Director informations pour accéder au «director» (authentification) Device information sur un périphérique (type de média, label utilisé, taille des volumes,...) Autochanger informations sur un robot (périphériques qu'il gère, commandes de manipulation des bandes,...)
Structure Storage Daemon (bacula-sd.conf) 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» 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
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) 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 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
Le «director» (bacula-dir.conf) Client informations pour accéder à un client et règles à appliquer vis à vis de ce client Director informations générales FileSet information sur le contenu (fichiers, répertoires) à inclure ou exclure Pool informations sur une collection de supports de sauvegarde Job composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand Jobdefs modèle type de job Storage informations pour accéder à un périphérique de sauvegarde et règles à appliquer vis à vis de ce périphérique Catalogue informations base de données Messages informations sur les notifications Schedule informations sur un échéancier à appliquer pour la sauvegarde
section Client (bacula-dir.conf) 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» 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 Référence le client Parallèlisme durée de rétention
Configurer le «file-daemon» (bacula-fd.conf) Director informations pour accéder au «director» (authentification) Messages informations sur les notifications à transmettre au «director» FileDaemon définition du client (autorisation d'accès, parallélisme supporté, clés de chiffrement,...)
Structure «File daemon» (bacula-fd.conf) Le «File daemon» s'exécute sur lh'ôte contenant les données à sauvegarder 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
section FileDaemon (bacula-fd.conf) FileDaemon { Name = srv-fd WorkingDirectory = /var/lib/bacula Pid Directory = /var/run/bacula Parallèlisme Maximum Concurrent Jobs = 20 FDAddresses = { ip = { addr = 127.0.0.1 ; port = 9102 ip = { addr = 192.168.1.1 ; port = 9102 Activer la signature des données PKI Signatures = Yes Activer le chiffrement PKI Encryption = Yes des données # Public and Private Keys PKI Keypair = "/etc/bacula/keys/srv-fd.pem" # ONLY the Public Key les clés PKI Master Key = "/etc/bacula/keys/bacula-master.cert"
Le «director» (bacula-dir.conf) Client informations pour accéder à un client et règles à appliquer vis à vis de ce client Director informations générales FileSet information sur le contenu (fichiers, répertoires) à inclure ou exclure Pool informations sur une collection de supports de sauvegarde Job composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand Jobdefs modèle type de job Storage informations pour accéder à un périphérique de sauvegarde et règles à appliquer vis à vis de ce périphérique Catalogue informations base de données Messages informations sur les notifications Schedule informations sur un échéancier à appliquer pour la sauvegarde
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) Client informations pour accéder à un client et règles à appliquer vis à vis de ce client Director informations générales FileSet information sur le contenu (fichiers, répertoires) à inclure ou exclure Pool informations sur une collection de supports de sauvegarde Job composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand Jobdefs modèle type de job Storage informations pour accéder à un périphérique de sauvegarde et règles à appliquer vis à vis de ce périphérique Catalogue informations base de données Messages informations sur les notifications Schedule informations sur un échéancier à appliquer pour la sauvegarde
section Jobdefs (bacula-dir.conf) Cette section décrit les paramètres par défaut des jobs. Les valeurs sont écrasées si redéfinies dans la section job. 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"
Le «director» (bacula-dir.conf) Client informations pour accéder à un client et règles à appliquer vis à vis de ce client Director informations générales FileSet information sur le contenu (fichiers, répertoires) à inclure ou exclure Pool informations sur une collection de supports de sauvegarde Job composant unitaire spécifiant ce qui doit être sauvegardé ou restauré, comment, où et quand Jobdefs modèle type de job Storage informations pour accéder à un périphérique de sauvegarde et règles à appliquer vis à vis de ce périphérique Catalogue informations base de données Messages informations sur les notifications Schedule informations sur un échéancier à appliquer pour la sauvegarde
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 JobDefs définit les paramètres par défaut client échéancier Parallèlisme Jobid: identifiant d'un job en cours d'exécution
Gestion du parallèlisme Objectif Principe 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) 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) 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 FileSet { Name = "SnapshotHome01Client02Set" Include { Options { signature = MD5 xattrsupport = yes File = /snapshot/sav_client02_hm01 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) 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. Job { Name = "RestoreFiles" Type = Restore Client = client01-fd FileSet = "Full Set" Storage = Scalar01-LTO5 Pool = MegaBackup Messages = Standard Where = /export/bacula/bacula-restores
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; identifiant du AlwaysOpen = yes; device du lecteur RemovableMedia = yes; spécifier l'inclusion RandomAccess = no; dans une librairie AutoChanger = yes Maximum Concurrent Jobs = 4 Parallèlisme 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'"
Gestion de l'application Mode CLI Une console interactive donnant accès à l'ensemble des fonctions Possibilité de scripter des commandes Mode graphique #!/bin/bash echo "list media" bconsole -n Une interface minimaliste «bat» (bacula admin tool) Accès possible via des interfaces web (bacula web) Visualisation de l'état avec «Tray Monitor»
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) Configuration en référençant le «Director» Valable pour bconsole.conf (CLI) et bat.conf (graphique) Plusieurs instances autorisées actives simultanément Director { Name = srv-dir DIRport = 9101 Address = 192.168.1.1 Password = "XXXX-PASS-DIRECTOR-XXXX"
Mise en œuvre Run... Director, FD et SD sont configurés Une console est accessible Labellisé les volumes echo "label pool=file storage=file volume=bkpvol00" bconsole Lancer une sauvegarde avec les options par défaut echo "run job=backuphome01client02 yes" bconsole Où en est on? Messages dans la console (via la commande message), dans les log, dans la base de données La commande «status»
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 bacula-dir -t -c /etc/bacula/bacula-dir.conf Mettre à jour la configuration echo "reload" bconsole -n Bien d'autres fonctionnalités... Authentification «forte» entre clients et serveurs Gestion des ACL Bacula virtual file system (bvfs)...
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