next up previous contents index
Next: Configuration du Client/File Daemon Up: Bacula User's Guide Previous: Adapter les fichiers de   Contents   Index

Subsections


Configurer le Director

Parmi tous les fichiers de configuration requis pour exécuter Bacula, celui du Director est le plus compliqué, et c'est celui que vous modifierez le plus souvent, en ajoutant des clients ou en modifiant les FileSets.

Pour une discussion générale concernant les fichiers et ressources ainsi que les types de données reconnus par Bacula, veuillez consulter le chapitre Configuration de ce manuel.

Les types de ressources du Director

Les types de ressources du Director sont :

Job, JobDefs, Client, Storage, Catalog, Schedule, FileSet, Pool, Director, et Messages. Nous les présentons ici dans l'ordre le plus logique (relativement au fichier de configuration du Director) :


La ressource Director

La ressource Director définit les attributs du Director exécuté sur le réseau. Dans l'implémentation actuelle, il n'y a qu'une ressource Director, mais la réalisation finale contiendra plusieurs Directors pour maintenir la redondance de la base des indexes et média.

Director
Début de la ressource Director. Une ressource Director et une seule doit être définie.

Name = <nom>
Le nom du Director utilisé par l'administrateur système. Cette directive est requise

Description = < texte>
Le champ texte contient une description du Director qui sera affichée dans l'interface graphique. Cette directive est optionnelle.

Password = <UA-password>
Spécifie le mot de passe qui doit être fourni par la Console Bacula par défaut pour être autorisée. Le même mot de passe doit apparaître dans la ressource Director du fichier de configuration de la console. Pour plus de sécurité, le mot de passe ne transite jamais sur le réseau, l'authentification se fait via un échange de type challenge-response d'un hash code créé avec le mot de passe. Cette directive est requise. Si vous disposez de /dev/random ou bc sur votre machine, Bacula génèrera un mot de passe aléatoire lors du processus d'installation, sinon il sera laissé blanc et vous devrez en définir un manuellement.

Messages = <Nom-de-ressource-Messages>
La ressource messages spécifie où doivent être délivrés les messages du Director qui ne sont pas associés à un job spécifique. La plupart des messages sont relatifs à un job et seront dirigés vers la ressource messages spécifiée par le job. Cependant, quelques messages peuvent être générés lorsque aucun job n'est actif. Cette directive est requise.

Working Directory = <Répertoire>
Cette directive spécifie un répertoire où le Director peut déposer ses fichiers d'états. Ce répertoire ne devrait être utilisé que par Bacula, mais il peut être partagé par d'autres daemons Bacula. Notez cependant que si ce répertoire est partagé avec d'autres daemons Bacula, vous devez vous assurer que le nom Name donné à chaque daemon est unique afin d'éviter des collisions entre les fichiers temporaires utilisés. Par défaut, le processus de configuration de Bacula créé des noms de daemons uniques en les postfixant avec -dir, -fd et -sd. Les substitutions shell standard sont effectuées à la lecture du fichier de configuration, de sorte que des valeurs telles que $HOME seront correctement substituées. Cette directive est requise.

Si vous avez spécifié un utilisateur et/ou un groupe pour le Director lors de la configuration avec les options --with-dir-user et/ou --with-dir-group de la commande ./configure, le répertoire de travail Working Directory doit appartenir doit appartenir à ce groupe et à cet utilisateur.

Pid Directory = <Répertoire>
Cette directive spécifie un répertoire où le Director peut déposer son fichier d'Id de processus. Ce fichier est utilisé pour stopper Bacula et prévenir l'exécution simultanée de plusieurs copies de Bacula. Les substitutions shell standard sont effectuées à la lecture du fichier de configuration, de sorte que des valeurs telles que $HOME seront correctement substituées.

Typiquement, sur les systèmes Linux, vous utiliserez ici /var/run. Si vous n'installez pas Bacula dans les répertoires système, vous pouvez utiliser le répertoire de travail Working Directory défini plus haut. Cette directive est requise.

Scripts Directory = <Directory>
Cette directive spécifie le répertoire dans lequel le Director devra rechercher le script Python de démarrage DirStartup.py. Ce répertoire peut être partagé par d'autres daemons Bacula.Les substitutions shell standard sont effectuées à la lecture du fichier de configuration, de sorte que des valeurs telles que $HOME seront correctement substituées. Cette directive est optionnelle.

QueryFile = <Path>
Cette directive spécifie un répertoire et un fichier dans lequel le Director peut trouver les requêtes SQL préétablies pour la commande Query de la Console. Les substitutions shell standard sont effectuées à la lecture du fichier de configuration, de sorte que des valeurs telles que $HOME seront correctement substituées. Cette directive est requise.

Maximum Concurrent Jobs = <nombre>

Où <nombre> est le nombre maximal de jobs qui peuvent être exécutés simultanément par le Director. La valeur par défaut est 1, mais vous pouvez utiliser une valeur plus grande. Notez que le format des volumes devient beaucoup plus compliqué avec plusieurs jobs exécutés simultanément. De ce fait, les restaurations peuvent prendre beaucoup plus de temps si Bacula doit faire le tri parmi les segments entremélés de ces jobs. Ceci peut être évité en s'arrangeant pour que chacun des jobs exécutés simultanément écrive sur un volume distinct. Une autre possibilité consiste à utiliser le data spooling : les données seront d'abord "spoolées" sur disque simultanément, ensuite les fichiers "spool" seront écrits séquentiellement sur le volume.

Dans certains cas, des directives telles que Maximum Volume Jobs ne sont pas correctement synchronisées avec le nombre de jobs simultanés, et des problèmes de synchronisation subtils peuvent survenir, aussi des tests minutieux sont recommandés.

Actuellement, il n'y a aucun paramètre de configuration pour régler ou limiter le nombre de connections par console. Un maximum de cinq connection simultanées est autorisé.

Pour plus de détails concernant l'exécution simultanée de plusieurs jobs, consultez la partie Exécution simultanée de plusieurs jobs du chapitre Astuces de ce manuel.

FD Connect Timeout = <durée>
durée est le délai durant lequel le Director tente de contacter le File Daemon pour démarrer un job. Une fois ce délai écoulé, le Director supprimera le job. La valeur par défaut est 30 minutes.

SD Connect Timeout = <durée>
durée est le délai durant lequel le Director tente de contacter le Storage Daemon pour démarrer un job. Une fois ce délai écoulé, le Director supprimera le job. La valeur par défaut est 30 minutes.

DirAddresses = <Spécification-adresses-IP>
Spécifie les ports et adresses sur lesquels le Director se met en attente de connections de Consoles Bacula. La meilleure explication est sans doute un exemple :

 DirAddresses  = { 
    ip = { addr = 1.2.3.4; port = 1205;}
    ipv4 = {
        addr = 1.2.3.4; port = http;}
    ipv6 = {
        addr = 1.2.3.4;
        port = 1205;
    }
    ip = {
        addr = 1.2.3.4
        port = 1205
    }
    ip = { addr = 1.2.3.4 }
    ip = { addr = 201:220:222::2 }
    ip = {
        addr = bluedot.thun.net
    }
 }

où "ip", "ip4", "ip6", "addr", et "port sont les mots clef. Notez que les adresses peuvent être spécifiées sous forme de quadruplets pointés, ou suivant la notation à doubles points IPv6, ou encore sous forme de nom symbolique (seulement pour la spécification ip). D'autre part, le port peut être spécifié par un nombre, ou par une valeur mnémonique du fichier /etc/services. Si un port n'est pas précisé, celui par défaut sera utilisé. Si une section ip est spécifiée, la résolution peut être faite soit par IPv4, soit par IPv6. Si ip4 est spécifié, seules les résolutions IPv4 seront permises. Il en va de même avec ip6.

Notez que si vous utilisez la directive DirAddresses, vous ne devez utiliser ni la directive DirPort, ni la directive DirAddress dans la même ressource.

DIRport = <numéro-de-port>
Spécifie le port (un entier positif) sur lequel le Director est à l'écoute de connections de Consoles Bacula. Ce même numéro de port doit être spécifié dans la ressource Director du fichier de configuration de la console. La valeur par défaut est 9101, aussi, il n'est en principe pas nécessaire de renseigner cette directive. Elle n'est pas requise si vous spécifiez des DirAdresses.

DirAddress = <Adresse-IP>
Cette directive est optionnelle. Lorsqu'elle est spécifiée, le Director n'accepte de connections Console que de l'adresse spécifiée Adresse-IP, qui peut être soit un nom de domaine, soit une adresse IP au format quadruplet pointé ou chaîne quotée. Si cette directive n'est pas spécifiée, le Director acceptera des connections de Console de toute adresse valide. Notez que contrairement à la spécification DirAdresses décrite plus haut, cette directive ne permet de spécifier qu'une seule adresse. Cette directive n'est pas requise si vous utilisez la directive DirAdresses.

Voici un exemple d'une ressource Director valide :

Director {
  Name = HeadMan
  WorkingDirectory = "$HOME/bacula/bin/working"
  Password = UA_password
  PidDirectory = "$HOME/bacula/bin/working"
  QueryFile = "$HOME/bacula/bin/query.sql"
  Messages = Standard
}


La ressource Job

La ressource Job définit un Job (sauvegarde, restauration,...) que Bacula doit exécuter. Chaque définition de ressource Job contient le nom d'un client, la liste des éléments à sauvegarder (FileSet), la planification (Schedule) pour ce Job, le lieu où sauvegarder ces données (Storage Device) et quel groupe de media utiliser (Pool). En effet, chaque ressource Job doit répondre aux questions : "Quoi ?", "Où ?", "Quand ?" et "Comment ?" soit, respectivement Fileset, Storage, Schedule, Type et Niveau (Sauvegarde/Restauration - Full/Differentielle/Incrémentale). Notez que le FileSet doit être spécifié lors des restaurations pour des raisons historiques, mais il n'est plus utilisé.

Un seul type (Backup, Restore, ...) peut être spécifié pour un Job donné. Si vous voulez sauvegarder plusieurs FileSets sur le même client, vous devez définir un Job pour chacun d'entre eux.

Job
Début de la ressource Job. Il faut définir au moins une ressource Job.

Name = <name>
Le nom du Job. Ce nom peut être utilisé avec la commande Run du programme Console pour lancer un Job. Si le nom contient des espaces, il doit être placé entre quotes. C'est généralement une bonne idée de nommer vos Jobs du nom du Client qu'ils sauvegardent, afin de les identifier aisément.

Lors de l'exécution d'un Job, son nom unique est composé du nom que vous avez spécifié ici suffixé avec la date et l'heure de sa planification. Cette directive est requise.

Enabled = <yes|no>
Cette directive permet d'activer ou désactiver l'exécution automatique d'un job par le planificateur.

Type = <job-type>
La directive Type spécifie le type de Job, qui peut être l'un des suivants : Backup, Restore, Verify, ou Admin. Cette directive est requise. Pour chaque type de Job, il existe différents niveaux, qui seront décrits dans les prochains paragraphes.

Backup
Définit une sauvegarde. En principe, vous aurez au moins un job de type Backup par client sauvegardé. A moins que vous ne désactiviez le catalogue, la plupart des données et statistiques concernant les fichiers sauvegardées seront écrites dans le catalogue.

Restore
Définit une restauration. En principe, vous ne créerez qu'un seul job de ce type, que vous utiliserez comme un prototype que vous modifierez à l'aide de la console lorsque vous devrez restaurer. Bien que certaines informations basiques soient conservées dans le catalogue lors de restaurations, leur quantité est infime en regard des informations stockées pour une sauvegarde -- par exemple, aucune entrée de nom de fichier n'est générée, puisqu'aucun fichier n'est sauvegardé.

Verify
Définit un Job de type Verify. Le Jobs de type verify permettent de comparer le catalogue au système de fichiers ou à ce qui a été sauvegardé. Vous pouvez l'utiliser pour vous assurer qu'une cartouche de données est lisible, mais aussi comme un système de détection d'intrusion à la fade Tripwire.

Admin
Définit un Job de type Admin. Un Admin peut s'utiliser pour "élaguer" périodiquement le catalogue, si vous ne souhaitez pas que ceci soit fait à la fin de chaque sauvegarde. Bien que les Jobs de type admin soient enregistrés dans le catalogue, la quantité de données générée est infime.

Level = <job-level>
La directive Level spécifie le niveau d'exécutiondu job par défaut. Chaque type de job a son propre jeu de niveaux qui peuvent être spécifiés. Le niveau d'exécution est en général surchargé par une valeur différente spécifiée dans la ressource Schedule. Cette directive n'est pas requise mais doit être spécifiée soit ici, soit en tant que surcharge dans la ressource Schedule.

Pour un job de type Backup le niveau doit être l'un des suivants :

Full
Tous les fichiers du FileSet, qu'ils aient été modifiés ou non.

Incremental
Tous les fichiers modifiés depuis la dernière sauvegarde valide du FileSet spécifié pour le même job. Si le Director ne peut trouver une sauvegarde Full antérieure, le niveau du job sera élevé en une sauvegarde Full. Lorsque le Director recherche une Full valide dans le catalogue, il recherche un job avec les caractéristiques suivantes :

  • le même nom de job ;
  • le même nom de client ;
  • le même FileSet (toute modification de la définition du FileSet telle que l'ajout ou la suppression de fichiers dans les sections Include ou Exclude constitue un changement de FileSet).
  • le niveau requis (Full, Differential ou Incremental)
  • le job s'est terminé normalement, c'est à dire un qu'il ne s'est pas terminé en échec, et n'a pas été effacé.

Si toutes les conditions ci-dessus ne sont pas réalisées, le Director augmentera la sauvegarde incrémentale en une sauvegarde Full. Dans le cas contraire, la sauvegarde incrémentale sera effectuée normalement.

Le File Daemon (Client) détermine les fichiers à sauvegarder pour une incrémentale par comparaison de l'heure de démarrage du Job précédent (Full, Différentiel ou Incrémental) avec les dates de dernière modification de chaque fichier (st_mtime) et de ses attributs (st_ctime). Si le fichier ou ses attributs ont changés depuis cette date de démarrage, alors le fichier sera sauvegardé.

Veuillez noter que certains logiciels anti-virus peuvent modifier la date st_time lors de leurs opérations de scan. Ainsi, si l'antivirus modifie la date d'accès (st_atime), qui n'est pas utilisée par Bacula, il provoquera une modification du st_ctime et conduira Bacula à sauvegarder les fichiers concernés lors des incrémentales et différentielles. Dans le cas de l'antivirus Sophos, vous pouvez éviter cet inconvénient en utilisant l'option --no-reset-atime. Pour les autres logiciels, voyez leurs manuels.

Lorsque Bacula effectue une sauvegarde incrémentale, tous les fichiers modifiés présents sur le système sont sauvegardés. Cependant, tout fichier supprimé depuis la dernière Full demeure dans le catalogue, ce qui signifie que si vous effectuez une restauration à partir de sauvegardes incrémentales (et de la Full associée), les fichiers supprimés depuis la dernière Full seront aussi restaurés. Ces fichiers n'apparaîtront plus dans le catalogue après avoir fait une nouvelle sauvegarde Full. Le processus pour supprimer ces fichiers du catalogue lors d'une incrémentale ralentirait fortement les sauvegardes incrémentales. Il n'est actuellement pas implémenté dans Bacula.

De plus, si vous déplacez un répertoire plutôt que de le copier, les fichiers qu'il contient voient leurs dates de dernière modification (st_mtime) et de dernier accès (st_ctime) inchangés. Par conséquent, ces fichiers ne seront probablement sauvegardés par aucune incrémentale ou différentielle, puisque ces dernières ne se réfèrent qu'à ces indicateurs. Aussi, il est préférable de copier un dossier avant de supprimer l'original plutôt que de le déplacer, si vous voulez qu'il soit correctement sauvegardé.

Differential
Tous les fichiers modifiés depuis la dernière sauvegarde Full valide du FileSet spécifié pour le même job. Si le Director ne peut trouver une sauvegarde Full antérieure, le niveau du job sera élevé en une sauvegarde Full. Lorsque le Director recherche une Full valide dans le catalogue, il recherche un job avec les caractéristiques suivantes :

  • le même nom de job ;
  • le même nom de client ;
  • le même FileSet (toute modification de la définition du FileSet telle que l'ajout ou la suppression de fichiers dans les sections Include ou Exclude constitue un changement de FileSet).
  • le Job était une sauvegarde FULL
  • le Job s'est terminé normalement, c'est à dire qu'il ne s'est pas terminé en échec, et n'a pas été effacé.

Si toutes les conditions ci-dessus ne sont pas réalisées, le Director augmentera la sauvegarde différentielle en une sauvegarde Full. Dans le cas contraire, la sauvegarde différentielle sera effectuée normalement.

Le File Daemon (Client) détermine les fichiers à sauvegarder pour une différentielle par comparaison de l'heure de démarrage de la dernière sauvegarde Full avec les dates de dernière modification de chaque fichier (st_mtime) et de ses attributs (st_ctime). Si le fichier ou ses attributs ont changés depuis cette date de démarrage, alors le fichier sera sauvegardé. La date de démarrage utilisée est affiché après le Since du rapport de Job. Dans de rares cas, certains fichiers sont sauvegardés deux fois à cause de l'utilisation de la date de démarrage de la sauvegarde précédente, mais ceci assure qu'aucun changement n'est perdu. Comme pour les incrémentales, vous devriez vous assurer que les horloges de votre serveur Bacula et de vos clients sont synchronisées, ou aussi proches que possible, pour éviter le risque d'omission d'un fichier. Notez qu'à partir de la version 1.33, Bacula effectue automatiquement ces ajustements de sorte que les horloges utilisées par Bacula soient synchrones.

Veuillez noter que certains logiciels anti-virus peuvent modifier la date st_time lors de leurs opérations de scan. Ainsi, si l'antivirus modifie la date d'accès (st_atime), qui n'est pas utilisée par Bacula, il provoquera une modification du st_ctime et conduira Bacula à sauvegarder les fichiers concernés lors des incrémentales et différentielles. Dans le cas de l'antivirus Sophos, vous pouvez éviter cet inconvénient en utilisant l'option --no-reset-atime. Pour les autres logiciels, voyez leurs manuels.

Lorsque Bacula effectue une sauvegarde différentielle, tous les fichiers modifiés présents sur le système sont sauvegardés. Cependant, tout fichier supprimé depuis la dernière Full demeure dans le catalogue, ce qui signifie que si vous effectuez une restauration à partir de sauvegardes différentielles (et de la Full associée), les fichiers supprimés depuis la dernière Full seront aussi restaurés. Ces fichiers n'apparaîtront plus dans le catalogue après avoir fait une nouvelle sauvegarde Full. Le processus pour supprimer ces fichiers du catalogue lors d'une incrémentale ralentirait fortement les sauvegardes différentielles. Il n'est actuellement pas implémenté dans Bacula, mais plannifié pour une future version de Bacula.

Comme noté ci-dessus, si vous déplacez un répertoire plutôt que de le copier, les fichiers qu'il contient voient leurs dates de dernière modification (st_mtime) et de dernier accès (st_ctime) inchangés. Par conséquent, ces fichiers ne seront probablement sauvegardés par aucune incrémentale ou différentielle, puisque ces dernières ne se réfèrent qu'à ces indicateurs. Aussi, il est préférable de copier un dossier avant de supprimer l'original plutôt que de le déplacer, si vous voulez qu'il soit correctement sauvegardé.

Régulièrement, quelqu'un demande à quoi servent les sauvegardes différentielles du moment que les incrémentales récupèrent tous les fichiers modifiés. Il existe plusieurs réponses à cette question, mais la plus importante à mes yeux est de combiner toutes les incrémentales et différentielles depuis la dernière full en une seule différentielle. Ceci a deux effets : 1. La redondance. 2. Plus important, la réduction du nombre de volumes requis pour faire une restauration en éliminant la nécessité de lire tous les volumes des précédentes incrémentales depuis la dernière full.

Pour un Job de type Restore, aucun niveau ne doit être spécifié.

Pour un Job de type Verify, le niveau peut être l'un des suivants :

InitCatalog
Examine le FileSet spécifié et stocke les attributs de fichiers dans le catalogue. Vous pouvez vous interroger sur l'intérêt d'un Job qui ne sauvegarde aucun fichier. La réponse est de pouvoir utiliser Bacula comme vous utiliseriez Tripwire, en d'autres termes, ce type de Jobs vous permet de sauvegarder l'état d'un ensemble de fichiers défini par un FileSet afin de pouvoir ultérieurement contrôler si rien n'a été modifié, supprimé ou ajouté. Ceci peut être utilisé pour détecter une intrusion. Typiquement, vous spécifiez un FileSet qui contient l'ensemble des fichiers qui ne devraient pas changer (par exemple /sbin, /boot, /lib, /bin, ...). Ensuite, vous exécutez le Job verify de niveau InitCatalog après l'installation de votre système, puis après chaque modification (mise à jour). Ensuite, lorsque vous souhaitez contrôler l'état de votre système de fichiers, vous utilisez un Job Verify, level = Catalog afin de comparer le résultat de votre InitCatalog avec l'état actuel de votre système de fichiers.

Catalog
Compare l'état actuel des fichiers et l'état précédemment sauvegardé lors d'un InitCatalog. Toutes les anomalies sont rapportées. Les objets du rapport sont déterminés par les options verify spécifiées dans la directive Include du FileSet spécifié (voyez la ressource FileSet ci-dessous pour plus de détails). Typiquement, cette commande sera exécutée quotidiennement pour contrôler toute modification de votre système de fichier.

Attention ! Si vous exécutez deux jobs Verify Catalog simultanément sur le même client, les résultats seront probablement erronnés. En effet, Verify Catalog modifie le catalogue lors de son exécution afin de détecter les nouveaux fichiers.

VolumeToCatalog
Ce niveau permet de lire les attributs de fichiers écrits sur le Volume lors du dernier Job. Les attributs de fichiers sont comparés aux valeurs sauvegardées dans le catalogue et toute différence est rapportée. Ceci est similaire au niveau Catalog, sauf que ce sont les attributs des fichiers du volume plutôt que ceux des fichiers du disque qui sont comparés aux attributs sauvegardés dans le catalogue. Bien que les attributs et signatures (MD5 ou SHA1) soient comparés, les données réelles ne le sont pas (elles ne figurent pas dans le catalogue).

Attention ! Si vous exécutez deux jobs Verify VolumeToCatalog simultanément sur le même client, les résultats seront probablement erronnés. En effet, Verify VolumeToCatalog modifie le catalogue lors de son exécution afin de détecter les nouveaux fichiers.

DiskToCatalog
Ce niveau permet de lire les fichiers tels qu'ils sont actuellement sur le disque et de comparer leurs attributs actuels avec ceux stockés dans le catalogue lors de la dernière sauvegarde pour le Job spécifié par la directive VerifyJob. Ce niveau diffère du niveau Catalog décrit plus haut en ce qu'il ne se réfère pas à un Job Verify antérieur, mais à la dernière sauvegarde. Lorsque vous utilisez ce niveau , vous devez renseigner les option Verify de la section Include. Ces options déterminent quels attributs seront comparés.

Cette commande peut se révéler très utile si vous avez des problèmes de disque car elle comparera l'état actuel de votre disque avec la dernière sauvegarde valide, qui peut remonter à plusieurs jobs.

Notez que l'implémentation actuelle (1.32c) n'identifie pas les fichiers qui ont été supprimés.

Verify Job = <Job-Resource-Name>
Si vous exécutez un job verify sans cette directive, le dernier job exécuté sera comparé avec le catalogue, ce qui signifie que votre commande verify doit succéder immédiatement à une sauvegarde. Si vous spécifiez un Verify Job, Bacula trouvera le dernier job exécuté avec ce nom. Ceci vous permet d'exécuter toutes vos sauvegardes, puis d'exécuter les jobs Verify sur les sauvegardes de votre choix (le plus souvent, un VolumeToCatalog de sorte que la cartouche qui vient juste d'être écrite est relue).

JobDefs = <JobDefs-Resource-Name>
Si un nom de JobDef est spécifié dans la définition d'un Job, toutes les valeurs définies dans la ressource JobDef concernée seront utilisées en tant que valeurs par défaut pour le Job. Toute valeur explicitement spécifiée dans la définition du Job outrepasse la valeur par défaut définie par le JobDef. L'utilisation de cette directive permet d'écrire des ressources Job plus compactes, où la majeure partie des directives sont définies dans un ou plusieurs JobDefs. C'est particulièrement pratique si vous avez de nombreux Jobs similaires avec des variations mineures telles que différents clients. Un exemple basique de l'utilisation d'un Jobdef est fourni dans le fichier bacula-dir.conf par défaut.

Bootstrap = <bootstrap-file>
La directive Bootstrap spécifie un fichier bootstrap qui, s'il est fourni, sera utilisé lors des restaurations et ignoré par tout les autres Jobs. Le fichier bootstrap contient la liste des cartouches nécessaires pour la restauration ainsi que les index des fichiers à restaurer (localisation sur la cartouche). Cette directive est optionnelle, et n'est utilisée que pour les restaurations. De plus, elle peut être modifiée lorsqu'une restauration est lancée depuis la console.

Si vous utilisez la commande Restore dans la console pour lancer une restauration, le fichier bootstrap sera créé automatiquement à partir des fichiers que vous avez sélectionnés pour la restauration.

Pour plus de détails concernant les fichiers bootstrap, veuillez consulter le chapitre Restaurer des fichiers avec le fichier Bootstrap de ce manuel.

Write Bootstrap = <bootstrap-file-specification>
La directive writebootstrap spécifie le de fichier Bootstrap où Bacula écrira lors de chaque sauvegarde. Ainsi, cette directive s'applique exclusivement aux jobs de type sauvegarde. Si la sauvegarde est une Full, Bacula écrase le contenu du fichier spécifié. Sinon, Bacula ajoute les nouveaux enregistrements Bootstrap à la fin du fichier.

En utilisant cette fonction, vous aurez constamment un fichier bootstrap capable de recouvrer l'état le plus récent de votre système. Le fichier bootstrap devrait être écrit sur un disque monté sur une autre machine, de sorte que vous puissiez en disposer immédiatement en cas de défaillance de votre disque dur. Une alternative consiste à copier le fichier sur une autre machine après chaque mise à jour.

Si la spécification de fichier bootstrap débute par une barre verticale (|), Bacula considère la spécification comme un nom de programme vers lequel les les enregistrement bootstrap seront redirigés. Ce peut être, par exemple, un script qui vous envoie par e-mail les enregistrements bootstrap.

A partir de la version 1.40, Bacula effectue des character substitution comme dans une directive RunScript. Pour gérer automatiquement vos fichiers bootstrap, vous pouvez utiliser ceci dans vos JobDefs :

JobDefs {
   Write Bootstrap = "%c_%n.bsr"
   ...
}

Pour plus de détails sur l'utilisation de fichiers bootstrap, veuillez consulter le chapitre intitulé Le Fichier Bootstrap de ce manuel.

Client = <client-resource-name>
La directive Client spécifie le Client (File Daemon) à utiliser dans le Job. Le client est exécuté sur la machine à sauvegarder. Il expédie les fichiers requis au Storage Daemon lors des sauvegardes, et reoit les fichiers du Storage Daemon lors des restaurations. Pour plus de détails, consultez la section Ressource Client de ce chapitre. Cette deirective est requise.

FileSet = <FileSet-resource-name>
La directive FileSet spécifie le FileSet à utiliser dans le Job concerné. Le FileSet définit les répertoires et fichiers à sauvegarder, ainsi que les options à utiliser pour les sauvegarder (par exemple la compression,...). Un Job ne peut contenir qu'un seul FileSet. Pour plus de détails, consultez la section Ressource FileSet de ce chapitre. Cette directive est requise.

Messages = <messages-resource-name>
La directive Messages définit la ressource Message qui doit être utilisée pour le job concerné. Ainsi, elle détermine le comment et où seront délivrés les différents messages de Bacula. Par exemple, vous pouvez diriger certains messages vers un fichier de logs, tandis que d'autres seront envoyés par e-mail. Pour plus de détails, consultez le chapitre Ressource Messages de ce manuel. Cette directive est requise.

Pool = <pool-resource-name>
La directive Pool spécifie le jeu de volumes qui doit être utilisé pour sauvegarder vos données. De nombreuses installations de Bacula n'utiliseront que le pool défini par défaut Default. Toutefois, si vous voulez spécifier différents jeux de volumes pou différents clients ou différents jobs, vous voudrez probablement utiliser les Pools. Pour plus de détails, consultez la section Ressource Pool de ce chapitre. Cette directive est requise

Full Backup Pool = <pool-resource-name>
La directive Full Backup Pool spécifie un Pool à utiliser pour les sauvegardes Full. Cette directive outrepasse toute autre spécification de Pool lors d'une sauvegarde Full. Cette directive est optionnelle.

Differential Backup Pool = <pool-resource-name>
La directive Differential Backup Pool spécifie un Pool à utiliser pour les sauvegardes Différentielles. Cette directive outrepasse toute autre spécification de Pool lors d'une sauvegarde Différentielle. Cette directive est optionnelle.

Incremental Backup Pool = <pool-resource-name>
La directive Incremental Backup Pool spécifie un Pool à utiliser pour les sauvegardes Incrémentales. Cette directive outrepasse toute autre spécification de Pool lors d'une sauvegarde Incrémentale. Cette directive est optionnelle.

Schedule = <schedule-name>
La directive Schedule définit la planification du job. Le schedule détermine la date et l'instant où le job doit être lancé automatiquement, et le niveau (Full, Différentiel, Incrémental...) du job en question. Cette directive est optionnelle. Si elle est omise, le job ne pourra être exécuté que manuellement via la Console. Bien que vous puissiez vous contenter d'une ressource Schedule simple pour tout job, vous pouvez aussi définir des ressources Schedule avec plusieurs directives Run, afin de lancer le job à différentes heures. Chacune de ces directives Run permet d'outrepasser les valeurs par défaut de Level, Pool, Storage et Messages ressources. Ceci autorise une grande souplesse d'utilisation d'un simple job. Pour plus de détails, consultez le chapitre. Ressource Schedule de ce manuel.

Storage = <storage-resource-name>
La directive Storage définit le nom du service storage que vous souhaitez utiliser pour sauvegarder les données du FileSet. Pour plus de détails, consultez le chapitre Ressource Storage de ce manuel. Cette directive est requise.

Max Start Delay = <time>
La directive Max Start Delay spécifie le délai maximal entre l'horaire planifié (dans le schedule) et l'horaire effectif de démarrage du job. Par exemple, un job peut être programmé pour démarrer à 1h, mais être mis en attente à cause d'autres jobs en cours d'exécution. Si le Max Start Delay a été réglé à 3600, le job sera supprimmé s'il n'a pas démarré à 2h. Ceci peut se révéler utile pour, par exemple, éviter qu'un job s'exécute duant les heures ouvrables. La valeur par défaut est 0 (pas de limite).

Max Run Time = <time>
La directive Max Run Time spécifie le délai alloué pour l'exécution complète d'un job depuis son lancement (pas nécessairement à l'heure de sa programmation) jusqu'à sa fin. Cette directive est implémentée depuis la version 1.33.

Max Wait Time = <time>
La directive Max Wait Time spécifie le délai maximum durant lequel un job peut rester bloqué en attente d'une ressource (par exemple, en attente du montage d'une cartouche ou encore en attente des Storage ou File Daemon occupés à d'autres tâches) depuis son lancement (pas nécessairement à l'heure de sa programmation) jusqu'à sa fin. Cette directive est implémentée depuis la version 1.33.

Incremental Max Wait Time = <time>
Cette directive spécifie le temps maximum durant lequel une sauvegarde incrémentale peut rester bloquée en attente d'une ressource (par exemple, en attente d'une cartouche ou des File ou Storage daemons), compté à partir du démarrage du job, (pas nécessairement l'heure à laquelle le job a été programmé). Notez que si un Max Wait Time a été spécifié, il peut aussi s'appliquer au job.

Differential Max Wait Time = <time>
Cette directive spécifie le temps maximum durant lequel une sauvegarde différentielle peut rester bloquée en attente d'une ressource (par exemple, en attente d'une cartouche ou des File ou Storage daemons), compté à partir du démarrage du job, (pas nécessairement l'heure à laquelle le job a été programmé). Notez que si un Max Wait Time a été spécifié, il peut aussi s'appliquer au job.

Prefer Mounted Volumes = <yes|no>
Si cette directive est activée (c'est le cas par défaut), le Director ordonne au Storage daemon de sélectionner de préférence soit une librairie, soit un lecteur avec un volume valide déjà monté, plutôt qu'un lecteur pas prèt. Si aucun lecteur n'est prèt, c'est le premier lecteur prèt qui sera sélectionné.

Si cette directive est désactivée, le Storage daemon privilégiera les lecteurs inutilisés. Ce mode de fonctionnement peut être très utile pour ces sites avec de nombreux lecteurs qui où il peut être préférable de maximiser le flux des sauvegardes au prix d'une utilisation d'un plus grand nombre de lecteurs et de cartouches. Afin d'optimiser l'utilisation de plusieurs lecteurs, vous voudrez probablement lancer chacun de vos jobs l'un après l'autre avec un intervalle de 5 secondes environ. Ceci aidera à assurer que chaque nuit, le même lecteur (volume) est sélectionné pour le même job. Autrement, lors d'une restauration, vous pourriez trouver vos fichiers dispersés sur beaucoup plus de volumes que nécessaire.

Prune Jobs = <yes|no>
En principe, l'élagage des jobs du catalogue est spécifié pour chaque client dans sa propre ressource Client par la directive AutoPrune. Si cette directive est spécifiée (normalement, non) et si la valeur est yes, elle outrepasse la valeur spécifiée dans la ressource Client. La valeur par défaut est no.

Prune Files = <yes|no>
En principe, l'élagage des fichiers du catalogue est spécifié pour chaque client dans sa propre ressource Client par la directive AutoPrune. Si cette directive est spécifiée (normalement, non) et si la valeur est yes, elle outrepasse la valeur spécifiée dans la ressource Client. La valeur par défaut est no.

Prune Volumes = <yes|no>
En principe, l'élagage des volumes du catalogue est spécifié pour chaque client dans sa propre ressource Client par la directive AutoPrune. Si cette directive est spécifiée (normalement, non) et si la valeur est yes, elle outrepasse la valeur spécifiée dans la ressource Client. La valeur par défaut est no.

RunScript {...}

La commande spécifiée est exécutée en tant que programme externe avant le lancement du job. Cette directive est optionnelle. Vous disposez des options suivantes :

Options Valeur Defaut Informations
Runs On Success Yes/No Yes La commande est exécutée si le job s'est terminé avec succès
Runs On Failure Yes/No No La commande est exécutée si le job a échoué
Runs On Client Yes/No Yes La commande est exécutée sur le client
Runs When Before|After|Always Never Le moment où la commande doit être exécutée
Abort Job On Error Yes/No Yes Abandonne le job si le script retourne un résultat non nul
Command     Le chemin vers votre script
Tout retour de la commande sur la sortie standard est incluse dans le rapport de job de Bacula. La chaîne bf command doit être un nom de programme valide ou un script shell

D'autre part, la chaîne bf command est parcourue puis envoyée vers la fonction execvp(), ce qui signifie que le chemin de la commande est recherché pour son exécution, mais qu'il n'y a aucune interprétation shell. Par conséquent, si vous voulez utiliser des commandes complexes ou toute fonctionnalité du shell telle que la redirection, vous devez appeler un script shell où vous mettrez vos commandes.

Avant de soumettre la commande spécifiée au système d'exploitation, Bacula effectue les substitutions suivantes :

    %% = %
    %c = Nom du client
    %d = Nom du Director
    %e = Statut de sortie du job
    %i = JobId
    %j = Nom unique du job
    %l = Niveau du job
    %n = Nom du job
    %s = Temps Depuis (NDT : Since Time)
    %t = Type de job (Backup,...)
    %v = Nom de volume

Le code de statut de fin de job peut prendre les valeurs suivantes :

Aussi, si vous l'utilisez dans une ligne de commande, il vous faudra l'encadrer de quotes.

Vous disposez des raccourcis suivants :
Mot clef RunsOnSuccess RunsOnFailure AbortJobOnError Runs On Client RunsWhen
Run Before Job     Yes No Before
Run After Job Yes No   No After
Run After Failed Job No Yes   No After
Client Run Before Job     Yes Yes Before
Client Run After Job Yes No   Yes After
Client Run After Failed Job No Yes   Yes After

Exemple :

RunScript {
    RunsWhen = Before
    AbortJobOnError = No
    Command = "/etc/init.d/apache stop"
}

RunScript {
    RunsWhen = After
    RunsOnFailure = yes
    Command = "/etc/init.d/apache start"
}

Considérations particulières à Windows D'autre part, pour les clients Windows à partir de la version 1.33, notez bien que vous devez fournir un chemin correct pour votre script, et que le script peut avoir l'extension .com, .exe, ou .bat. Si vous spécifiez un chemin, vous devez aussi spécifier l'extension complète. Les commandes à la façon d'Unix ne fonctionneront pas, à moins que vous n'ayez installé et correctement configuré Cygwin en plus (et séparément) de Bacula.

La commande peut être n'importe quel programme reconnu par cmd.exe ou command.com comme un fichier exécutable. Spécifier une extension de fichier exécutable est optionnel, à moins qu'il y ait une ambiguïté (par exemple ls.bat, ls.exe).

Bacula cherche la commande dans le répertoire "System %Path%" (Dans la boîte de dialogue des variables d'environnement vous avez les variables "système" et "utilisateurs". Si bacula-fd fonctionne en tant que service, seules les variables d'environnement systèmes sont accessibles.)

Les variables d'environnement système peuvent être invoquées avec la syntaxe %var% et utilisées comme portion du nom de la commande ou des arguments.

Lorsque la spécification du chemin absolu d'un exécutable ou le nom de l'exécutable contient des espaces ou des caractères spéciaux, ils doivent être quotés. Il en va de même pour les arguments.

ClientRunBeforeJob = "\"C:/Program Files/Software
     Vendor/Executable\" /arg1 /arg2 \"foo bar\""

Les caractères spéciaux &()[]{}^=;!'+,`~ devront être quotés s'ils font partie d'un nom de fichier ou d'un argument.

If someone is logged in a blank ``command'' window running the commands will be present during the execution of the command.

Quelques suggestions de Phil Stracchino pour l'exécution sur les machines Win32 avec le File Daemon Win32 natif :

  1. Vous pourriez utiliser la directive ClientRunBeforeJob pour spécifier un fichier .bat qui exécute les commandes coté client plutôt que d'essayer d'exécuter (par exemple) regedit /e directement.
  2. Le fichier batch devrait retourner explicitement 0 lors des exécutions correctes.
  3. Le chemin vers le fichier batch devrait être spécifié au format Unix :

    ClientRunBeforeJob = ``c:/bacula/bin/systemstate.bat''

    plutôt qu'au format DOS/Windows :

    ClientRunBeforeJob = ``c:\bacula\bin\systemstate.bat'' INCORRECT

L'exemple suivant d'utilisation de la directive Client Run Before Job a été soumis par un utilisateur :
Vous pourriez écrire un script shell pour sauvegarder une base DB2 dans un FIFO. Voici le script en question :

 #!/bin/sh
 # ===== backupdb.sh
 DIR=/u01/mercuryd

 mkfifo $DIR/dbpipe
 db2 BACKUP DATABASE mercuryd TO $DIR/dbpipe WITHOUT PROMPTING &
 sleep 1

La ligne suivante dans la ressource Job du fichier bacula-dir.conf :

 Client Run Before Job = "su - mercuryd -c \"/u01/mercuryd/backupdb.sh '%t'
'%l'\""

Lorsque le job est exécuté, vous obtiendrez un message de sortie du script annonçant que la sauvegarde a démarré. Même si la commande est exécutée en arrière plan avec &, le job bloquera jusqu'à la commande "db2 BACKUP DATABASE", et la sauvegarde se fige.

Pour remédier à cette situation, la ligne "db2 BACKUP DATABASE" devrait être modifiée en :

 db2 BACKUP DATABASE mercuryd TO $DIR/dbpipe WITHOUT PROMPTING > $DIR/backup.log
2>&1 < /dev/null &

Il est important de rediriger l'entrée et la sortie d'une commande en arrière plan vers /dev/null pour éviter le bloquage du script.

Run Before Job = <command>
La commande spécifiée est exécutée en tant que programme externe avant le lancement du job. Cette directive n'est pas requise,mais si elle est définie, et si le code retour d'exécution du programme est différent de zéro, le job qui a lancé le programme est effacé.

Run Before Job = "echo test"
est équivalent à :
RunScript {
 Command = "echo test"
 RunsOnClient = No
 RunsWhen = Before
}

Lutz Kittler a fait remarquer que ceci peut être un moyen aisé pour modifier vos schedules pour les vacances. Par exemple, supposons que vous fassiez habituellement des sauvegardes Full le vendredi, mais que jeudi et vendredi soient fériés. Pour éviter d'avoir à changer les cartouches entre jeudi et vendredi alors que personne n'est au bureau, vous pouvez créer un RunBeforeJob qui retourne un statut non nul jeudi et zéro les autres jours. Ainsi, le job de jeudi ne sera pas exécuté, et la cartouche que vous avez inséré mercredi sera disponible pour la Full de vendredi.

Run After Job = <command>
La commande spécifiée est exécutée en tant que programme externe après la fin du job. La chaîne bf command doit être un nom de programme valide ou un script shell. Cette directive n'est pas requise. Si le code de sortie du programme est non nul, Bacula affiche un message d'avertissement (warning). Avant de soumettre la commande spécifiée au système d'exploitation, Bacula effectue les substitutions de caractères décrites au paragraphe RunScript

Un exemple d'utilisation de cette directive est donné au chapitre Astuces de ce manuel. Lisez le paragraphe Run After Failed Job si vous voulez exécuter une commande lorqu'un job se termine avec un statut anormal.

Run After Failed Job = <command>
La commande spécifiée est exécutée en tant que programme externe après la fin du job lorqu'il se termine avec un statut d'erreur. Cette directive est optionnelle. La chaîne command doit être le nom d'un programme ou d'un script shell. Si le code de sortie du programme est non nul, Bacula affiche un mesage d'avertissement (warning). Avant de soumettre la commande spécifiée au système d'exploitation, Bacula effectue les substitutions de caractères décrites au paragraphe RunScript. Notez que vous pouvez, si vous souhaitez que votre programme soit exécuté quel que soit l'issue du job, utiliser une définition telle que :

RunScript Command = "echo test" RunsWhen = After RunsOnFailure = yes RunsOnClient = no RunsOnSuccess = yes # default, you can drop this line

Le chapitre Trucs et astuces de ce manuel propose un exemple d'utilisation de cette directive.

Client Run Before Job = <command>
Cette directive est similaire à Run Before Job excepté que la commande est exécutée sur la machine cliente. Les mêmes restrictions s'appliquent aux sytèmes Unix que celles signalées pour Run Before Job.

Client Run After Job = <command>
Cette directive est similaire à Run After Job sauf qu'elle est exécutée sur la machine cliente. Veuillez consulter les notes concernant les clients Windows dans le paragraphe RunScript ci-dessus.

Rerun Failed Levels = <yes|no>
Si la valeur de cette directive est yes (no par défaut), et si Bacula détecte qu'un job antérieur d'un niveau plus élevé (Full ou différentiel), alors le job est élevé au niveau le plus haut. Ceci est particulièrement utile pour sauvegarder les pc portables qui peuvent être fréquemment inaccessibles. En effet, après l'échec d'une Full, vous souhaiterez probablement que la prochaine sauvegarde soit de niveau Full plutôt qu'Incremental ou Différentiel.

Spool Data = <yes|no>
Si la valeur de cette directive est yes (no par défaut), le Storage Daemon aura pour consigne de stocker les données dans un fichier spoule sur disque plutôt que de les écrire directement sur bande. Lorsque toutes les données sont dans le spoule ou lorsque la taille maximale fixée pour le fichier spoule est atteinte, les données sont déchargées du spoule vers les bandes. Lorsque la valeur de cette directive est yes, la directive Spool Attributes est aussi automatiquement mise à la valeur yes. L'utilisation de cette fonctionnalité prévient les arrêts et redémarrage incessants lors des incrémentales. Elle ne doit pas être utilisée si vous sauvegardez sur disque.

Spool Attributes = <yes|no>
La valeur par défaut est no, ce qui signifie que le Storage Daemon envoie les attributs de fichiers au Director au moment où ils (les fichiers) sont ecrits sur la bande. Cependant, si vous souhaitez éviter le risque de ralentissement dû aux mises à jour du catalogue, vous pouvez régler cette directive à yes, dans ce cas, le Storage Daemon stockera les attributs de fichiers dans un fichier tampon du Working Directory pour ne les transmettre au Director qu'à la fin de l'écriture sur bande des données du job.

Where = <directory>
Cette directive ne concerne que les jobs de type Restauration. Elle permet de spécifier un préfixe au nom du répertoire où tous les fichiers sont restaurés. Ceci permet de restaurer les fichiers en un emplacement différent de celui où ils ont été sauvegardés. Si Where n'est pas renseigné, ou si sa valeur est backslash (/), les fichiers sont restaurés à leur emplacement d'origine. Par défaut, nous avons donné à Where la valeur /tmp/bacula-restores dans les fichiers de configuration fournis en exemple, ceci afin d'éviter l'écrasement accidentel de vos fichiers.

Replace = <replace-option>
Cette directive ne concerne que les jobs de type Restauration. Elle précise la conduite à adopter dans l'éventualité où Bacula serait conduit à restaurer un fichier ou un répertoire qui existe déjà. Les options suivantes sont disponibles :

always
Lorsque le fichier à restaurer existe déjà, il est supprimé et remplacé par la copie sauvegardée.

ifnewer
Si le fichier sauvegardé (sur bande) est plus récent que le fichier existant, le fichier existant est supprimé et remplacé par la copie sauvegardée.

ifolder
Si le fichier sauvegardé (sur bande) est plus ancien que le fichier existant, le fichier existant est supprimé et remplacé par la copie sauvegardée.

never
Si le fichier sauvegardé existe déjà, Bacula renonce à restaurer ce fichier.

Prefix Links=<yes|no>
Si la valeur de cette directive est Yes et si un préfixe de chemin Where est spécifié, alors ce dernier s'applique aussi aux liens absolus. La valeur par défaut est No. Lorsque cette directive est à Yes, tous les liens absolus seront aussi modifiés pour pointer vers le nouveau répertoire. En principe, c'est ce qui est souhaité : l'ensemble du répertoire restauré conserve sa cohérence interne. Cependant, si vous voulez replacer les fichiers ultérieurement à leurs emplacements d'origine, tous les liens absolus seront brisés.

Maximum Concurrent Jobs = <number>
Où <number> est le nombre maximum de jobs de la ressource Job courrante qui peuvent être exécutés simultanément. Notez que cette directive ne limite que les jobs avec le même nom que la ressource dans laquelle elle figure. Toute autre restriction du nombre maximum de jobs simultanés, que ce soit au niveau du Director, du Client ou de la ressource Storage, s'applique en plus de de la limite stipulée ici. La valeur par défaut est 1, mais vous pouvez utiliser une valeur plus grande. Nous vous recommandons fortement de lire attentivement le paragraphe WARNING sous Maximum Concurrent Jobs dans la section concernant la ressource Director.

Reschedule On Error = <yes|no>
Si cette directive est activée, alors si le job se termine en erreur, il sera reprogrammé en accord avec les directives Reschedule Interval et Reschedule Times. Si vous supprimez le job, il ne sera pas reprogrammé. La valeur par défaut est no.

Cette spécification peut se révéler utile pour les pc portables ainsi que pour toutes les machines qui ne sont pas connectées au réseau en permanence.

Reschedule Interval = <time-specification>
Si cette directive est activée, alors si le job se termine en erreur, il sera reprogrammé après l'intervalle de temps stipulé par time-specification. Consultez la section the time specification formats du chapitre Configurer Bacula pour plus de détails sur les spécifications de temps. Si aucun intervalle n'est spécifié, le job ne sera pas reprogrammé en cas d'erreur.

Reschedule Times = <count>
Cette directive précise le nombre maximal de tentatives d'exécution du job. S'il est fixé à zéro (valeur par défaut), le job sera reprogrammé indéfiniment.

Run = <job-name>
La directive Run (à ne pas confondre avec l'option Run dans un Schedule) vous permet de démarrer ou de cloner des jobs. En utilisant les mots-clef de clonage (voir ci dessous), vous pouvez sauvegarder les mêmes données (ou presque les mêmes) vers deux (ou plus) lecteurs en même temps. Le nom de job job-name est en principe le même que celui de la ressource job courante (créant ainsi un clone). Cependant, ce peut être n'importe quel nom de job, de sorte qu'un job peut démarrer d'autre jobs liés. La partie après le signe égale doit être encadrée de double quotes, et peut contenir toute chaîne ou jeu d'options (surcharges) qui pourraient être spécifiées à l'utilisation de la commande Run dans la Console. Par exemple, storage=DDS-4 .... De plus, deux mots-clef spéciaux vous permettent de cloner le job courant : level=%l et since=%s. le %l du mot clef level permet d'entrer le niveau réel du job courant et le %s du mot clef since permet d'imposer la même date pour la comparaison que celle utilisée par le job courant.a Notez que dans le cas du mot-clef since, le %s doit être encadré de double quotes, qui doivent être elles mêmes précédées de barres obliques arrières puisque elles sont déjà entre double quotes. Par exemple :

       run = "Nightly-backup level=%s since=\"%s\" storage=DDS-4"
    
Un job cloné ne démarrera pas de nouveaux clones, aussi il n'est pas possible de les cascader.

Priority = <number>
Cette directive vous permet de contrôler l'ordre d'exécution des jobs en spécifiant un entier positif non nul. Plus grand est ce nombre, plus basse est la priorité du job. En supposant que vous n'exécutiez pas de jobs simultanés, tous les jobs en file d'attente avec la priorité 1 seront exécutés avant ceux avec la priorité 2, et ainsi de suite, sans prise en compte de l'ordre original de planification.

La priorité affecte seulement les jobs en file d'attente, et non les jobs déja en cours d'exécution. Si un ou plusieurs jobs de priorité 2 sont déjà en cours d'exécution, et si un nouveau job est programmé avec la priorité 1, les jobs en cours d'exécution doivent se terminer pour que le job de priorité 1 puisse démarrer.

La priorité par défaut est 10.

Si vous voulez exécutez plusieurs jobs simultanés, vous devriez garder les points suivants à l'esprit :

Si vous avez plusieurs jobs de priorités différentes, il est préférable de ne pas les démarrer exactement à la même heure, car Bacula doit les examiner un à la fois. Si, par hazard, Bacula commence par traiter un job de priorité inférieure, il sera exécuté avant votre job de priorité élevé. Pour éviter cette situation, démarrez l'un quelconque des jobs de priorité élevée quelques secondes avant ceux de basse priorité. Ainsi, vous serez assuré que Bacula examine les jobs dans l'ordre voulu et que votre schéma de priorités sera respecté.

Write Part After Job = <yes|no>
Cette directive est implémentée depuis la version 1.37. Si la valeur de cette directive est yes (no par défaut), un nouveau "fichier partition" (ndt : part file) sera créé après la fin du job.

Cette directive devrait être activée lors de l'écriture sur des périphérique qui requièrent un montage (par exemple, les DVDs), afin de vous assurer que le fichier partition courant, celui qui contient les données de ce job, est envoyé vers le périphérique, et qu'aucune donnée n'est laissée dans le fichier temporaire sur le disque dur. Quoi qu'il en soit, avec certains supports tels que les DVD+R et DVD-R, beaucoup d'espace (environ 10 Mb) est perdu à chaque fois qu'un fichier partition est écrit. Aussi, si vous exécutez plusieurs jobs à la suite, vous devriez régler cette directive à no pour tous ces jobs sauf le dernier, pour éviter un gaspillage important d'espace, tout en ayant la certitude que les données sont bien écrites sur le médium lorsque tous les jobs sont achevés.

Cette directive est ignorée avec les bandes et les périphériques FIFO.

Voici un exemple de définition de ressource Job valide.

Job {
  Name = "Minou"
  Type = Backup
  Level = Incremental                 # default
  Client = Minou
  FileSet="Minou Full Set"
  Storage = DLTDrive
  Pool = Default
  Schedule = "MinouWeeklyCycle"
  Messages = Standard
}


La ressource JobDefs

La ressource Jobdefs admet toutes les directives qui peuvent apparaître dans une ressource Job. Une ressource Jobdefs ne créé en aucun cas un Job, son rôle est de pouvoir être désignée dans une ressource Job comme un ensemble de paramètres par défaut. Ceci permet de définir plusieurs jobs similaires avec concision, en ne mentionnant, pour chaque job, que les différences avec les valeurs par défaut spécifiées dans la ressource Jobdefs.


La ressource Schedule

La ressource Schedule offre un moyen pour planifier automatiquement un Job, mais aussi la possibilité de surcharger les paramètres par défaut de Level, Pool, Storage, et Messages ressources. Si une ressource Schedule n'est pas spécifiée dans un job, ce job ne peut être exécuté que manuellement. En général, vous spécifierez une action et le moment de son lancement.

Schedule
Début des directives Schedule. La ressource Schedule n'est pas requise, mais il vous en faudra au moins une si vous souhaitez que vos jobs soient exécutés automatiquement.

Name = <name>
Le nom du Schedule défini. Cette directive est requise.

Run = <Job-overrides> <Date-time-specification>
La directive Run définit quand un job doit être exécuté, et les éventuelles surcharges à appliquer. Il est possible de spécifier plusieurs directives run au sein d'une ressource Schedule, elles seront toutes appliquées. Si vous avez deux directives Run qui démarrent au même moment, deux jobs seront lancés simultanément (en fait, avec une seconde d'écart).

La directive Job-overrides permet d'outrepasser les spécifications de Level, Storage, Messages et Pool écrites dans la ressource Job. De plus, les spécifications FullPool, DifferentialPool et IncrementalPool permettent de passer outre les spécification de Pool, en accord avec le niveau (level) effectif d'exécution du job.

L'utilisation de surcharges permet de peaufiner le paramétrage d'un job particulier. Par exemple, vous pourriez surcharger une spécification Messages qui enverrait vos logs de backups vers un fichier, de faon à ce qu'ils vous soient envoyés par mails pour les Fulls hebdomadaires ou mensuelles.

Les directives Job-overrides sont spécifiées en tant que mot-clef=valeur où le mot-clef est l'un des suivants : Level, Storage, Messages, Pool, FullPool, DifferentialPool ou IncrementalPool, et la valeur est définie selon le format adapté à la directive. Vous pouvez spécifier plusieurs surcharges Job-overrides en une seule directive Run en les séparant par des espaces ou des trailing comas (traduction ?). Par exemple :

Level=Full
Tous les fichiers du FileSet qu'ils aient ou non changé.

Level=Incremental
Tous les fichiers qui ont changé depuis la dernière sauvegarde.

Pool=Weekly
Spécifie l'utilisation du Pool nommé Weekly.

Storage=DLT_Drive
Spécifie l'utilisation du lecteur DLT_Drive pour périphérique de stockage.

Messages=Verbose
Spécifie l'utilisation de la ressource messages Verbose pour le job.

FullPool=Full

Spécifie l'utilisation du Pool nommé Full si le job est une sauvegarde Full, ou s'il a été élevé en Full bien qu'ayant été lancé en tant que différentiel ou incrémental.

DifferentialPool=Differential
Spécifie l'utilisation du Pool nommé Differential si le job est une sauvegarde différentielle.

IncrementalPool=Incremental
Spécifie l'utilisation du Pool nommé Incremental si le job est une sauvegarde incrémentale.

SpoolData=yes|no
Indique à Bacula d'ordonner au Storage Daemon de placer les données sur un spool disque avant de les envoyer vers les cartouches.

WritePartAfterJob=yes|no
Indique à Bacula d'ordonner au Storage Daemon d'écrire le fichier partition courant vers le périphérique lorsque le job s'achève (voir la directive Write Part After Job dans la ressource Job).

Date-time-specification Détermine la planification d'exécution du job. La spécification est une répétition, et, par défaut, Bacula est paramétré pour exécuter un job au début de chaque heure de chaque jour de chaque semaine de chaque mois de chaque année. Ce n'est probablement pas ce que vous souhaitez, aussi vous devez préciser ou limiter les moments où vous souhaitez voir vos jobs exécutés. Toute spécification est supposée cyclique et servira à limiter le cycle par défaut. Ceci se fait en spécifiant des masques ou des horaires, jours de la semaine, jours du mois, semaines du mois, semaines de l'année et mois de l'année où vous voulez exécuter le job. En combinant ces possibilités, vous pouvez définir une planification qui se répète à presque n'importe quelle fréquence.

Concrètement, vous devez définir les mois, jour, heure et minute où le job est à exécuter. Parmis ces quatre objets, le jour est particulier en ce qu'il peut spécifier un jour du mois (1,2,...31) ou de la semaine (Monday, Tuesday,...Sunday). Enfin, vous pouvez aussi spécifier un jour de la semaine pour restreindre la planification à la première, deuxième, troisième, quatrième ou cinquième semaine du mois.

Par exemple, si vous spécifiez seulement un jour de la semaine, disons Mardi, le job sera exécuté toutes les heures de chaque mardi de chaque mois. La raison en est que les paramètres Mois et Heure sont restés à leurs valeurs par défaut : chaque mois et chaque heure.

Notez que, par défaut, sans autre spécification, votre job s'exécutera au début de chaque heure. Si vous souhaitez que votre job s'exécute plus souvent qu'une fois par heure, il vous faudra définir plusieurs spécifications run avec pour chacune une minut différente.

Les dates et horaires d'exécutions des jobs peuvent être spécifiés comme suit, en pseudo-BNF :

<void-keyword>    = on
<at-keyword>      = at
<week-keyword>    = 1st | 2nd | 3rd | 4th | 5th | first |
                    second | third | forth | fifth
<wday-keyword>    = sun | mon | tue | wed | thu | fri | sat |
                    sunday | monday | tuesday | wednesday |
                    thursday | friday | saturday
<week-of-year-keyword> = w00 | w01 | ... w52 | w53
<month-keyword>   = jan | feb | mar | apr | may | jun | jul |
                    aug | sep | oct | nov | dec | january |
                    february | ... | december
<daily-keyword>   = daily
<weekly-keyword>  = weekly
<monthly-keyword> = monthly
<hourly-keyword>  = hourly
<digit>           = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
<number>          = <digit> | <digit><number>
<12hour>          = 0 | 1 | 2 | ... 12
<hour>            = 0 | 1 | 2 | ... 23
<minute>          = 0 | 1 | 2 | ... 59
<day>             = 1 | 2 | ... 31
<time>            = <hour>:<minute> |
                    <12hour>:<minute>am |
                    <12hour>:<minute>pm
<time-spec>       = <at-keyword> <time> |
                    <hourly-keyword>
<date-keyword>    = <void-keyword>  <weekly-keyword>
<day-range>       = <day>-<day>
<month-range>     = <month-keyword>-<month-keyword>
<wday-range>      = <wday-keyword>-<wday-keyword>
<range>           = <day-range> | <month-range> |
                          <wday-range>
<date>            = <date-keyword> | <day> | <range>
<date-spec>       = <date> | <date-spec>
<day-spec>        = <day> | <wday-keyword> |
                    <day-range> | <wday-range> |
                    <week-keyword> <wday-keyword>
                    <day-range> | <wday-range> |
                    <daily-keyword>
<month-spec>      = <month-keyword> | <month-range> |
                    <monthly-keyword>
<date-time-spec>  = <month-spec> <day-spec> <time-spec>

Notez que les spécifications de semaine et d'année suivent les définitions ISO standard de semaine et année, où la semaine 1 est la semaine qui contient le premier jeudi de l'année, ou alternativement, la semaine qui contient le quatrième jour de janvier. Les semaines sont numérotées w01 à w53. w00 est pour Bacula la semaine qui précède la première semaine ISO (c'est à dire celle qui contient les quelques premiers jours de l'année si aucun n'est un jeudi). w00 n'est pas définie dans les spécifications ISO. Une semaine commence le Lundi et se termine le Dimanche.

Voici un exemple de ressource Schedule nommée WeeklyCycle qui exécute un job de niveau Full chaque Dimanche à 1h05 et un job de niveau incrémental du Lundi au Samedi à 1h05 :

Schedule {
  Name = "WeeklyCycle"
  Run = Level=Full sun at 1:05
  Run = Level=Incremental mon-sat at 1:05
}

Voici un exemple de cycle mensuel :

Schedule {
  Name = "MonthlyCycle"
  Run = Level=Full Pool=Monthly 1st sun at 1:05
  Run = Level=Differential 2nd-5th sun at 1:05
  Run = Level=Incremental Pool=Daily mon-sat at 1:05
}

Le premier de chaque mois :

Schedule {
  Name = "First"
  Run = Level=Full on 1 at 1:05
  Run = Level=Incremental on 2-31 at 1:05
}

Toutes les dix minutes :

Schedule {
  Name = "TenMinutes"
  Run = Level=Full hourly at 0:05
  Run = Level=Full hourly at 0:15
  Run = Level=Full hourly at 0:25
  Run = Level=Full hourly at 0:35
  Run = Level=Full hourly at 0:45
  Run = Level=Full hourly at 0:55
}

Notes techniques sur les Schedules

Au niveau interne, Bacula considère un schedule en tant que bit masque. Il y a six masques et un champ minute pour chaque schedule. Les masques sont heure, jour du mois (mday), jour de la semaine (wday), semaine du mois (wom), et semaine de l'année (woy). Le schedule est initialisé de faon à avoir les bits de chacun de ces masques positionnés, ce qui signifie qu'au début de chaque heure, le job sera exécuté. Quand vous spécifiez un mois pour la première fois, le masque est effacé et le bit correspondant au mois sélectionné est ajouté au masque. Si vous spécifiez un second mois, le bit correspondant est aussi ajouté. Ainsi, lorsque Bacula examine le masque pour voir si les bits placés correspondent à la date courante, votre job ne sera exécuté que pendant les deux mois que vous avez spécifiés. De même, si vous spécifiez un horaire, le masque Heure est effacé et le bit correspondant à l'heure que vous avez spécifiée est placé, les minutes sont quant à elles stockées dans le champ Minutes.

Pour chacun de vos schedules, vous pouvez visualiser le masque associé grâce à la commande show schedules du programme Console. Notez que le bit masque est "zero based", et que Dimanche est le premier jour de la semaine (bit 0)


La ressource FileSet

La ressource FileSet définit les fichiers à inclure dans une sauvegarde. Pour chaque job de type sauvegarde, il est nécessaire de définir au moins une ressource FileSet. Un FileSet consiste en une liste de fichiers ou répertoires à inclure, une liste de fichiers ou répertoires à exclure, et diverses options de sauvegardes telles que compression, chiffrement et signatures qui doivent être appliquées à chaque fichier.

Toute modification de la liste des fichiers inclus provoque la création par Bacula d'un nouveau FileSet (défini par le nom et la somme de contrôle MD5 du contenu du paragraphe Include). Chaque fois qu'un nouveau FileSet est créé, Bacula s'assure que la première sauvegarde est une Full.

FileSet
Début de la ressource FileSet. Au moins une ressource FileSet doit être définie.

Name = <name>
Le nom de la ressource FileSet. Cette directive est requise.

Ignore FileSet Changes = <yes|no>
Si cette directive est activée (yes), toute modification des listes d'inclusion ou d'exclusion du FileSet sera ignorée et Bacula n'élèvera pas la prochaine sauvegarde en Full. La valeur par défaut est no, ainsi, si vous modifiez une des listes d'inclusion ou d'exclusion du FileSet, Bacula forcera une sauvegarde Full pour assurer que tout soit bien sauvegardé proprement. Il n'est pas recommandé d'activer cette directive. Cette directive est disponible à partir de Bacula 1.35.4.

Include { [ Options {<file-options>} ...] <file-list> }

Options { <file-options> }

Exclude { <file-list> }
La ressource Include doit contenir une liste de répertoires et/ou fichiers à traiter lors de la sauvegarde. Normalement, tous les fichiers trouvés dans tous les sous-répertoires de tout répertoire de la liste d'inclusion des fichiers seront sauvegardés. La ressource Include peut aussi comporter une ou plusieurs ressources Options qui spécifient des paramètres tels que la compression à appliquer à tous les fichiers ou à n'importe quel sous ensemble de fichiers à sauvegarder.

Le nombre de ressources Include par FileSet n'est pas limité, chacune ayant sa propre liste de répertoires et/ou fichiers à sauvegarder et ses propres paramètres définis par une ou plusieurs ressources Options. La liste de fichiers file-list consiste en un nom de fichier ou répertoire par ligne. Les noms de répertoire doivent être spécifiés sans slash final.

Vous devez toujours spécifier des chemins absolus pour tout fichier ou répertoire que vous placez dans un FileSet. De plus, sur les machines Windows, vous devez toujours préfixer le répertoire ou nom de fichier d'une spécification de disque (par exemple : c:/xxx) en utilisant le séparateur de répertoire Unix (slash /).

Le comportement par défaut de Bacula en ce qui concerne le traitement des répertoires est de descendre récursivement dans chaque répertoire et de sauvegarder tous les fichiers et sous-répertoires. Par défaut, Bacula ne suit pas les systèmes de fichiers transverses (en terminologie Unix, les points de montage). Ceci signifie que si vous spécifiez la partition racine ( par exemple /), Bacula sauvegardera seulement la partition racine, et aucun des systèmes de fichiers montés. De faon analogue, sur les systèmes Windows, vous devez expliciter chacun des disques que vous souhaitez sauvegarder (par exemple c:/ et d:/...). De plus, au moins pour les systèmes Windows, il sera la plupart du temps nécessaire d'encadrer chaque spécification de doubles quotes, particulièrement si le nom du répertoire (ou du fichier) comporte des espaces. La commande df des systèmes Unix vous fournira la liste des répertoires qu'il vous faudra spécifier pour tout sauvegarder. Voyez ci-dessous pour un exemple.

Soyez attentif à ne pas inclure un répertoire deux fois, car il serait sauvegardé deux fois, ce qui gaspillerait l'espace sur votre périphérique de sauvegarde. Cette erreur est facile à commettre. Par exemple :

  Include {
    File = /
    File = /usr
    Options { compression=GZIP }
  }

Sur un système Unix où /usr est un sous répertoire (plutôt qu'un système de fichiers monté), cette ressource Include sauvegarderait /usr deux fois. Dans ce cas, sur les versions antérieures à 1.32f-5-09Mar04, en raison d'un bug, vous ne pourriez restaurer les fichiers liés physiquement sauvegardés deux fois.

Si vous avez utilisé des versions de Bacula antérieures à 1.34.3, vous noterez ces modifications dans la syntaxe des FileSets :

  1. il n'y a pas de signe égale (=) après le "include" et avant l'accolade ouvrante ({) ;
  2. chaque répertoire (ou nom de fichier) à sauvegarder est précédé de "File =" ;
  3. les options qui apparaissaient précédemmant sur la ligne Include doivent désormais être spécifiées dans leur propre ressource Options.

La ressource Options est optionnelle, mais lorsqu'elle est spécifiée, elle doit contenir une liste de lignes "mot-clef=valeur" relatives aux options à appliquer à la liste de fichiers/répertoires. Plusieurs ressources Options peuvent être spécifiées l'une après l'autre. Lorsqu'un fichier se trouve dans un dossier spécifié, les options sont appliquées au nom de fichier pour savoir s'il doit être sauvegardé, et comment. Les ressources Options sont appliquées dans l'ordre où elles apparaîssent dans le FileSet jusqu'à ce qu'il y en ait une qui corresponde. Une ressource Options qui ne contient pas de directive wild (spécification de caractère joker, voir ci-dessous) est considérée comme concernant tous les fichiers. Il est important de bien comprendre ceci, car une fois que Bacula a déterminé que des Options s'appliquent à un fichier donné, ce fichier sera sauvegardé sans tenir compte d'aucunes des éventuelles autres ressources Options. Ceci signifie que toute ressource Options avec caractères joker doit apparaître avant une ressource Options sans caractères joker.

Si, pour quelque raison, Bacula applique toutes les ressources Options à un fichier sans qu'aucune ne corresponde (en général à cause de caractères joker qui ne correspondent pas), par défaut Bacula sauvegardera le fichier. Ceci est assez logique si vous considérez la situation sans options, où vous souhaitez que tout soit sauvegardé. De plus, dans le cas ou aucune correspondance n'est trouvée, Bacula utilise les options de la dernière ressource Options. Par conséquent, si vous souhaitez définir un jeu d'options par défaut, vous devriez les placer dans la dernière ressource Options.

Les directives disponibles pour les ressources Options sont les suivantes :

compression=GZIP
Tous les fichiers sauvegardés sont compressés (NDT : compression logicielle, par opposition à la compression matérielle effectuée par le lecteur) au format GNU ZIP. Chaque fichier est compressé individuellement par le File Daemon. S'il y a un problème à la lecture d'une cartouche au niveau de l'enregistrement d'un fichier, il affectera tout au plus ce fichier et aucun des autres fichiers de la cartouche. La plupart du temps, cette option n'est pas nécessaire si vous avez un lecteur de bandes moderne qui applique sa propre compression. En fait, si vous activez les deux compressions simultanément, il se peut que vos fichiers occupent plus d'espace sur le volume qu'avec une seule.

La compression logicielle est particulièrement intéressante lorsque vous sauvegardez sur disque, et peut être d'un grand secours si vous avez un ordinateur rapide mais un réseau lent.

La spécification GZIP utilise le niveau de compression six par défaut (i.e. GZIP est équivalent à GZIP6). Si vous voulez utiliser un niveau différent (de 1 à 9), vous pouvez le spécifier en ajoutant le numéro du niveau voulu à la fin du mot GZIP, sans espace. Ainsi, compression=GZIP1 désigne la compression la moins efficace, mais l'algorithme le plus rapide, tandis que compression=GZIP9 est le niveau de compression le plus élevé, mais requière plus de puissance de calcul. Selon la documentation GZIP, les niveaux de compression supérieurs à 6 ne procurent généralement que peu de compression supplémentaire alors qu'ils sont plutôt exigeants en puissance de calcul.

signature=SHA1
La signature SHA1 est calculée pour tous les fichiers sauvegardés. L'algorithme SHA1 est réputé plus lent que MD5, mais bien meilleur d'un point de vue cryptographique (i.e. beaucoup moins de collisions et probabilité de piratage bien inférieure.). Nous recommandons fortement d'activer l'une ou l'autre des options SHA1 ou MD5 par défaut pour tous les fichiers. Notez que seule l'une de ces deux options peut être activée pour tout fichier.

signature=MD5
La signature MD5 est calculée pour tous les fichiers sauvegardés. Activer cette option résulte en une charge CPU supplémentaire de l'ordre de 5% pour chaque fichier sauvegardé. D'autre part, la signature MD5 ajoute 16 octets supplémentaires au catalogue pour chaque fichier sauvegardé. Nous recommandons fortement d'activer l'une ou l'autre des options SHA1 ou MD5 par défaut pour tous les fichiers.

verify=<options>
Les "options-lettres" sont utilisées lors de l'exécution de jobs de type Verify de niveau Level=Catalog et de niveau Level=DiskToCatalog. Les options peuvent être n'importe quelle combinaison de ces lettres.

i
compare les inodes

p
compare bits de permissions

n
compare le nombre de liens

u
compare les user ids

g
compare les group ids

s
compare les tailles

a
compare les date d'accès (access time)

m
compare les dates de modification (st_mtime)

c
compare les dates de changement (st_ctime)

s
signale tout fichier dont la taille a diminué

5
compare les signatures MD5

1
compare les signatures SHA1

Le jeu d'options pins5 (qui compare les bits de permissions, les inodes, les nombres de liens, la taille des fichiers et les signatures MD5) est très utile pour des jobs de type verify de niveaux Level=Catalog ou Level=DiskToCatalog.

onefs=yes|no
Si cette option est activée (valeur yes, par défaut), Bacula ne changera pas de système de fichiers. Autrement dit, il ne sauvegardera pas les systèmes de fichiers montés sur des sous-répertoires. Si vous souhaitez sauvegarder plusieurs systèmes de fichiers, vous pouvez les énumérer explicitement. Une autre possibilité consiste à désactiver l'option onefs (onefs=no) afin que Bacula sauvegarde les systèmes de fichiers montés trouvés dans les répertoires listés dans votre FileSet. Ainsi, si vous avez des systèmes de fichiers NFS ou Samba montés sur un répertoire listé dans le FileSet, ils seront aussi sauvegardés. En principe, il est préférable d'activer cette option et de nommer explicitement chaque système de fichier que vous voulez sauvegarder. Ce nommage explicite évite le risque de tomber dans une boucle infinie de systèmes de fichiers. Voyez l'exemple ci-dessous pour plus de détails.

portable=yes|no
Si cette option est activée (la valeur par défaut est no), le File Daemon sauvegarde les fichiers win32 dans un format portable, mais tous les attributs de fichiers win32 ne seront pas sauvegardés ni restaurables. La valeur par défaut est no, ce qui signifie que sur les systèmes Win32, les données sont sauvegardées en utilisant les appels Windows API et sur les WinNT/2k/XP, tous les attributs de sécurité et de propriété sont correctement sauvegardés et restaurés. Cependant, ce format n'est pas portable aux autres systèmes -- par exemple UNIX, Win95/98/Me. Lors de la sauvegarde de systèmes Unix, cette option est ignorée, et à moins que vous n'ayez un besoin spécifique de portabilité de vos sauvegardes, nous recommandons d'accepter la valeur par défaut (no) de sorte qu'un maximum d'informations concernant vos fichiers soit sauvegardé.

recurse=yes|no
Si cette option est activée (la valeur par défaut est yes), Bacula descend récursivement dans tout sous-répertoire trouvé, à moins qu'il ne soit explicitement exclu par une définition exclude. Si vous désactivez cette option (recurse=no), Bacula sauvegardera toutes les entrées de sous- répertoires, mais n'entrera pas dans ces sous-répertoires, et ainsi ne sauvegardera pas les fichiers ou épertoires contenus dans ces sous-répertoires. En principe, vous préfèrerez la valeur par défaut (yes).

sparse=yes|no
Cette option active un code spécial qui détecte les fichiers clairsemés tels ceux créés par ndbm. Elle est désactivée par défaut (sparse=no), de sorte qu'aucun contrôle n'est fait pour rechercher les fichiers clairsemés. Vous pouvez l'activer sans danger sur des fichiers non clairsemés, cependant elle entraîne une légère charge supplémentaire pour la détection de tampons remplis de zéros (buffers of all zero), et un léger surplus d'espace sur l'archive de sortie sera utilisé pour ssauver les adresses de recherche de chaque enregistrement non-nul trouvé.

Restrictions: Bacula lit les fichiers dans des tampons de 32K. Si le tampon entier est rempli de zéros, il sera traité en tant que bloc clairsemé, et ne sera pas écrit sur la cartouche. En revanche, si une partie quelconque du tampon est non-nulle, le tampon sera intégralement copié sur la cartouche, avec éventuellement des secteurs de disque (généralement 4098 octets) entièrement nuls. La détection par Bacula des blocs clairsemés a lieu sur des blocs de 32K plutôt que sur des blocs de taille déterminée par le système. Si quelqu'un considère ceci comme un réelle problème, merci d'envoyer une demande de modification en exposant les raisons. Ce code est apparu avec la version 1.27 de Bacula.

Si vous n'êtes pas familier avec les notions de fichiers clairsemés, prenons pour exemple un fichier où vous écrivez 512 octets à l'adresse 0, puis 512 octets à l'adresse 1 million. Le système d'exploitation n'allouera que deux blocs, et rien n'est alloué pour l'espace vide. Pourtant, lorsque vous lisez le fichier clairsemé, le système retourne tous les zéros comme si l'espace était alloué, et si vous sauvegardez un tel fichier, vous utiliserez beaucoup d'espace sur le volume pour écrire des zéros. Pire encore, lorsque vous restaurez ce fichier à son emplacement initial, tous les emplacements précédemment vides seront cette fois alloués, occupant ainsi beaucoup plus d'espace disque. En activant l'option sparse, Bacula recherchera spécifiquement l'espace vide dans les fichiers afin d'éviter ces inconvénients. Le prix à payer est que Bacula doit d'abord examiner chaque bloc lu avant de l'écrire. Sur un système lent, ceci peut-être important. Si vous suspectez certains de vos fichiers d'être clairsemés, vous devriez mesurer les performances et gains d'espace avec et sans l'options, ou ne l'activer que pour les fichiers effectivement clairsemés.

readfifo=yes|no
Cette option, si elle est activée, indique au client de lire les données (lors d'une sauvegarde) et de les écrire (lors d'une restauration) sur un FIFO (pipe) explicitement explicitement mentionné dans le FileSet. Dans ce cas, vous devez avoir un programme actif qui écrit sur ce FIFO dans le cas d'une sauvegarde, ou qui le lit dans le cas d'une restauration. (Ceci peut être accompli par la directive RunBeforeJob). Si cette condition n'est pas satisfaite, Bacula demeurera en suspens indéfiniment en lecture/écriture du FIFO. Lorsque cette option est désactivée (par défaut), le Client sauvegarde simplement l'entrée du répertoire pour le FIFO.

mtimeonly=yes|no
Cette option, si elle est activée, indique au client que la sélection de fichiers lors d'une sauvegarde incrémentale ou différentielle ne doit se référer qu'aux valeurs de st_mtime du paquet stat(). La valeur par défaut est no, ce qui signifie que la sélection de fichiers à sauvegarder se base sur les deux valeurs st_mtime et st_ctime. En général, il n'est pas recommandé d'activer cette option.

keepatime=yes|no
Avec cette option activée, Bacula rétablit le champ st_atime (date d'accès) des fichiers qu'il sauvegarde à leur valeur d'avant la sauvegarde. Cette option n'est généralement pas recommandée car il existe peu de programmes qui utilisent st_atime, et la charge de la sauvegarde se trouve augmentée par les appels systèmes nécessaires pour rétablir les dates. (Je ne suis pas sur que ceci fonctionne sous Win32).

wild=<string>
Spécifie une chaîne de caractères jokers à appliquer aux fichiers. Notez que si Exclude n'est pas activée, cette chaîne sélectionnera les fichiers à sauvegarder. Si au contraire Exclude=yes est spécifié, la chaîne sélectionnera les fichiers à exclure de la sauvegarde. Plusieurs directives wild-card peuvent être spécifiées et sont appliquées séquentiellement jusqu'à ce que l'une d'elles corresponde.

regex=<string>
Spécifie une expression régulière étendue POSIX à appliquer aux fichiers. Cette directive est disponible à partir de Bacula 1.35. Si Exclude n'est pas activée, cette expression régulière sélectionnera les fichiers à sauvegarder. Si au contraire Exclude=yes est spécifié, elle sélectionnera les fichiers à exclure de la sauvegarde. Plusieurs directives regex peuvent être spécifiées et sont appliquées séquentiellement jusqu'à ce que l'une d'elles corresponde.

exclude=yes|no
Lorsque cette option est activée, tout fichier qui correspond aux options est exclu de la sauvegarde. La valeur par défaut est no.

aclsupport=yes|no
Si cette option est activée, et si vous avez installé la librarie POSIX libacl sur votre système, Bacula sauvegardera Listes de Contrôles d'Accès (ACL) UNIX des fichiers et répertoires telles que définies dans IEEE Std 1003.1e version 17 et "POSIX.1e" (abandonné). Cette fonction n'est disponible que sur UNIX et dépend de la librairie ACL. Bacula est automatiquement compilé avec le support ACL si la librairie libacl est installée sur votre système (ceci est reporté dans le fichier config.out). Lors de la restauration, Bacula tentera de restaurer les ACLs. S'il n'y a pas de support ACL sur le système cible, Bacula ne restaurera que les fichiers et répertoires sans les informations ACL. Veuillez noter que si vous sauvegardez un système de fichiers EXT3 ou XFS avec le support des ACLs, et que vous restaurez vers un système de fichiers sans ACLs (tel , peut-être reiserfs), les ACLs seront ignorées.

<file-list> est une liste de répertoires et/ou noms de fichiers spécifiés avec la directive File =. Pour inclure des noms contenant des espaces, entourez-les de guillemets (doubles quotes).

Il existe quelques notations particulières pour spécifier des fichiers et répertoires dans une liste de fichiers file-list. Les voici :

Voici un exemple de définition de ressource FileSet valide. Notez que le premier Include insère le contenu du fichier /etc/backup.list lors du démarrage de Bacula (i.e. le @).

FileSet {
  Name = "Full Set"
  Include {
    Options {
      Compression=GZIP
      signature=SHA1
      Sparse = yes
    }
    File = @/etc/backup.list
  }
  Include {
     Options {
        wild = *.o
        Exclude = yes
     }
     File = /root/myfile
     File = /usr/lib/another_file
  }
}

Notez que dans l'exemple ci-dessus, tous les fichiers mentionnés dans /etc/backup.list seront compressé avec GZIP, qu'une signature SHA1 sera calculée sur le contenu des fichiers (leurs données), et que la prise en charge particulière des fichiers clairsemés (sparse) s'appliquera.

Les deux répertoires /root/myfile et /usr/lib/another_file seront aussi sauvegardés sans aucune option, mais tous les fichiers à extension .o de ces répertoires seront exlus de la sauvegarde.

Supposons que vous vouliez sauvegarder tout sauf /tmp sur votre système. La commande df vous fournit le résultat suivant :

[kern@rufus k]$ df
Filesystem      1k-blocks      Used Available Use% Mounted on
/dev/hda5         5044156    439232   4348692  10% /
/dev/hda1           62193      4935     54047   9% /boot
/dev/hda9        20161172   5524660  13612372  29% /home
/dev/hda2           62217      6843     52161  12% /rescue
/dev/hda8         5044156     42548   4745376   1% /tmp
/dev/hda6         5044156   2613132   2174792  55% /usr
none               127708         0    127708   0% /dev/shm
//minimatou/c$   14099200   9895424   4203776  71% /mnt/mmatou
lmatou:/          1554264    215884   1258056  15% /mnt/matou
lmatou:/home      2478140   1589952    760072  68% /mnt/matou/home
lmatou:/usr       1981000   1199960    678628  64% /mnt/matou/usr
lpmatou:/          995116    484112    459596  52% /mnt/pmatou
lpmatou:/home    19222656   2787880  15458228  16% /mnt/pmatou/home
lpmatou:/usr      2478140   2038764    311260  87% /mnt/pmatou/usr
deuter:/          4806936     97684   4465064   3% /mnt/deuter
deuter:/home      4806904    280100   4282620   7% /mnt/de