next up previous contents index
Next: Librairies supportées Up: Bacula User's Guide Previous: Backup Strategies   Contents   Index

Subsections


Support des librairies

Généralités sur les librairies

Bacula supporte les librairies pour les opérations de lecture et écriture. Plusieurs conditions sont requises pour que Bacula puisse utiliser une librairie. Celles-ci sont expliquées en détail ci-dessous. Mais voyons d'abord la liste de ces conditions :

Dans les versions ultérieures à 1.37, la nouvelle directive Autochanger resource permet de grouper les ressources Device pour créer des librairies avec plusieurs lecteurs. Si vous avez une librairie, vous devez utiliser cette ressource.

Bacula utilise son propre script mtx-changer pour interagir avec un programme qui effectue réellement les changement de cartouches. Ainsi, mtx-changer peut être adapté pour fonctionner avec n'importe quel programme de prise en chgarge de librairie. La version actuelle de mtx-changer fonctionne avec le programme mtx . Cependant, des utilisateurs de FreeBSD ont réalisé un script, disponible dans le répertoire examples/autochangers, qui permet à Bacula de fonctionner avec le programme chio.

Bacula supporte aussi les librairies équipées de lecteurs de codes barres. Ce support inclut deux commandes de la console Bacula : label barcodes et update slots. Pour plus de détails au sujet de ces commandes, voyez la section "Support des lecteurs de codes barres" plus loin.

Le support des librairies dans Bacula n'inclue pas, pour le moment, la gestion du nettoyage des lecteurs, ni celle des bacs de cartouches ou des silos. Cependant, sous certaines conditions, vous pouvez parvenir à le faire fonctionner avec des stackers (tels que gravity feed et apparentés). (NDT : le dernier paragraphe n'est pas clair. Voici la vo : Current Bacula autochanger support does not include cleaning, stackers, or silos. However, under certain conditions, you may be able to make Bacula work with stackers (gravity feed and such).)

Le support des librairies à plusieurs lecteurs requiert la ressource Autochanger resource, qui est aussi recommandée pour les librairies à un seul lecteur.

En principe, si mtx fonctionne correctement avec votre librairie, ce n'est qu'une question d'avaptation du script mtx-changer pour que Bacula s'interface correctement avec la librairie. Vous pouvez trouver une liste des librairies supportées par mtx en suivant le lien suivant : http://mtx.badtux.net/compatibility.php. Le sit officiel du projet mtx se trouve ici : http://mtx.badtux.net/.

Si vous avez des difficultés, veuillez utiliser la commande auto du programme btape pour tester le fonctionnement de votre librairie avec Bacula. Lorsque Bacula fonctionne, souvenez vous que pour beaucoup de distributions (par exemple FreeBSD, Debian,...), le Storage Daemon est exécuté en tant que bacula.tape plutôt que root.root, aussi vous devrez vous assurer que le Storage Daemon dispose de droits suffisants pour accéder à la librairie.

Déterminer vos périphériques SCSI

Sous Linux, vous pouvez lire le fichier /proc/scsi/scsi :

cat /proc/scsi/scsi

pour connaître vos périphériques SCSI. Vous pouvez aussi examiner les fichiers /proc/scsi/sg/device_hdr et /proc/scsi/sg/devices :

footnotesize

cat /proc/scsi/sg/device_hdr /proc/scsi/sg/devices

pour déterminer comment spécifier leur nom de périphérique (/dev/sg0 pour le premier, /dev/sg1 pour le second, ...) au niveau de la directive Changer Device

Sous FreeBSD, vous disposez de la commande :

camcontrol devlist

pour afficher la liste des périphériques SCSI ainsi que le /dev/passn que vous utiliserez pour renseigner la directive Changer Device

Assurez-vous que votre Storage Daemon dispose bien des privilèges requis pour accéder à ce périphérique.

L'astuce suivante, destinée aux utilisateurs de FreeBSD, provient de Danny Butroyd. Au redémarrage, Bacula n'aura PLUS les permissions requises pour contrôler le périphérique /dev/pass0. Pour vous affanchir de cette difficulté, éditez le fichier /etc/devfs.conf et ajoutez lui ceci :

own     pass0   root:bacula
perm    pass0   0666
own     nsa0.0  root:bacula
perm    nsa0.0    0666

Nous avons ainsi donné au groupe Bacula la permission d'écrire sur le périphérique nsa0.0. Pour activer ces modifications, exécutez : /etc/rc.d/devfs restart

Vous n'aurez plus à modifier les permissions sur ces périphériques pour que Bacula continue d'utiliser la librairie après un redémarrage.

Exemples de scripts

Veuillez lire les sections ci-dessous pour bien comprendre comment les librairies fonctionnent avec Bacula. Bien que nous fournissions un script mtx-changer par défaut, il se peut que votre librairie nécessite quelques aménagements de ce script. Si vous voulez voir des exemples de fichiers de configuration et de scripts, jetez un oeil au répertoire <bacula-src>/examples/devices où vous trouverez un exemple de ressource Device Bacula : HP-autoloader.conf ainsi que plusieurs scripts mtx-changer modifiés pour fonctionner avec diverses librairies.

Slots

Pour utiliser convenablement une librairie, Bacula doit savoir quel volume se trouve dans quel slot de la librairie. Les slots sont les emplacements où sont rangées les cartouches lorsqu'elles ne sont pas dans un lecteur. Bacula numérote ces slots de un jusqu'au nombre de cartouches contenues dans la librairie.

Bacula n'utilisera pas automatiquement une cartouche présente dans la librairie si elle ne porte pas d'étiquette (label) Bacula et si son numéro de slot n'est pas référencé dans le catalogue. Vous devez, à l'aide de la console, assigner un slot à chaque cartouche présente dans la librairie. Cette information est conservée dans le catalogue avec les autres données relatives au volume. Si le slot n'est pas précisé, ou s'il est égal à zéro, alors Bacula ne tentera pas d'utiliser la librairie, même si tous les enregistrements de configuration sont présents. De même, la commande mount de la console Bacula ne provoque pas non plus l'utilisation de la librairie, mais se contente d'ordonner à Bacula de lire toute cartouche éventuellement présente dans le lecteur.

Vous pouvez contrôler le numéro de slot et le drapeau InChanger avec la commande :

list Volumes

dans la console.

Lecteurs multiples

Certaines librairies comportent plusieurs périphériques de lecture/éctriture (lecteurs). La nouvelle ressource Autochanger apparue avec la version 1.37 vous permet de grouper des ressources Devices (représentant chacune un lecteur). Le Director est toujours en mesure d'adresser directement un lecteur, mais ce faisant, il outrepasse le fonctionnement propre aux groupements de lecteurs. Il est préférable que la Ressource Storage du Director définisse une ressource Autochanger, permettant ainsi au Storage Daemon de s'assurer qu'un seul lecteur à la fois utilise le script mtx-changer, et que deux lecteurs ne tentent pas de lire le même volume.

Les librairies à lecteurs multiples nécessitent d'utiliser la directive Drive Index dans la ressource Device du Storage Daemon. Les lecteurs sont numérotés à partir de zéro, ce qui constitue la valeur par défaut. Pour utiliser un deuxième lecteur dans une librairie, vous devez définir une seconde ressource Device et lui attribuer le Drive Index 1. En général, le second périphérique aura le même Changer Device (canal de contrôle) que le premier, mais une Archive Device différente.

Directives de la ressource Device

La configuration des librairies s'effectue dans Bacula au niveau de le ressource Device du Storage Daemon. Quatre directives permettent de définir l'usage de la librairie par Bacula : Autochanger, Changer Device, Changer Command et Maximum Changer Wait

Ces quatre directives sont décrites en détail ci-dessous. Notez cependant que les directives Changer Device et Changer Command ne sont pas requises dans la ressource Device si elles figurent dans la ressource Autochanger.

Autochanger = Yes|No
La directive Autochanger stipule que le périphérique ainsi défini est, ou n'est pas, une librairie. La valeur par défaut est no.

Changer Device = <device-name>
En plus du nom d'Archive Device, vous devez spécifier un nom de librairie Changer Device, ceci parce que la plupart des librairies sont controlées via un pseudo-fichier différent de celui utilisé pour lire et écrire sur les cartouches. Par exemple, sur les systèmes Linux, on utilise généralement l'interface SCSI générique pour contrôler le bras de la librairie, soit Changer Device = /dev/sg0 et l'interface SCSI standard pour lire et écrire sur les bandes, soit Archive Device = /dev/nst0. Notez que certaines librairies évoluées localiseront le bras sur /dev/sg1. De telles librairies ont souvent plusieurs lecteurs et un nombre important de cartouches.

Sur FreeBSD, on spécifiera typiquement Changer Device = /dev/pass0 ou Changer Device = /dev/passn.

Sur Solaris, ce sera Changer Device = /dev/rdsk.

Assurez vous que votre Storage Daemon possède les permissions d'accéder à ce périphérique.

Changer Command = <command>
Cette directive est utilisée pour spécifier le programme externe à appeler et les arguments à lui fournir. La commande est supposée être un programme ou un script shell standard qui peut être exécuté par le système. cette commande est invoquée chaque fois que Bacula manipule le bras de la librairie. Les substitutions suivantes sont effectuées dans la ligne command avant qu'elle ne soit envoyée au système d'exploitation pour exécution.

      %% = %
      %a = archive device name
      %c = changer device name
      %d = changer drive index base 0
      %f = Client's name
      %j = Job name
      %o = command  (loaded, load, or unload)
      %s = Slot base 0
      %S = Slot base 1
      %v = Volume name

Voici un exemple d'utilisation de mtx avec le script mtx-changer :

Changer Command = "/etc/bacula/mtx-changer %c %o %S %a %d"

Où vous devrez adapter le chemin /etc/bacula pour qu'il co'incide à la réalité de votre installation. Les détails des trois commandes (loaded, load, unload) utilisées par Bacula ainsi que la sortie qui en est attendue sont donnés dans la section Interface entre Bacula et les librairies ci-dessous.

Maximum Changer Wait = <time>
Cette directive sert à définir le délai maximal durant lequel Bacula attendra la réponse d'une librairie à une commande (par exemple, load). La valeur par défaut est 120 secondes. Si votre librairie est lente, vous pouvez avoir intérêt à allonger ce délai.

Au delà de ce délai, le programme de chargement est tué et Bacula sollicite l'intervention d'un opérateur.

Drive Index = <number>
Cette directive vous permet d'indiquer à Bacula d'utiliser le second lecteur et les éventuels suivants dans une librairie qui en contient plusieurs. Etant donné que les lecteurs sont numérotés à partir de zéro, le second est défini par :

Device Index = 1

Pour utiliser le second lecteur, vous devez avoir une seconde définition de ressource Device dans le fichier bacula-sd.conf. Voyez la section concernant les lecteurs multiples plus haut dans ce chapitre pour plus de plus amples informations.

De plus, pour un fonctionnement correct de la librairie, vous devez définir une ressource Autochanger.

La ressource Autochanger

La ressource Autochanger supporte les librairies à un ou plusieurs lecteurs en regroupant une ou plusieurs ressources Device en une unité nommée Autochanger dans Bacula (souvent désignée en tant que librairie de bandes par les constructeurs). Si vous possédez une librairie, et si vous voulez qu'elle fonctionne correctement, vous devez avoir une ressource Autochanger dans le fichier de configuration de votre Storage Daemon, et les directives Storage de votre Director doivent se référer au nom de la ressource Autochanger si elles sont supposées utiliser la librairie. Dans les versions antérieures à 1.38.0, les directives Storage du Director se référaient directement aux ressources Device qui étaient des librairies. Désormais, ce type de référence directe ne fonctionne plus avec les librairies.

Name = <Autochanger-Name>
Spécifie le nom de la librairie. Ce nom est utilisé dans la la définition de ressource Storage du Director afin de désigner la librairie. Cette directive est requise.

Device = <Device-name1, device-name2, ...>
Spécifie le nom de la (ou des) ressource(s) Device associées à la librairie. Si votre librairie contient plusieurs lecteurs, vous devez spécifier plusieurs noms de ressources Device, chacun désignant une ressource Device distincte qui comporte un Drive Index correspondant au numéro de lecteur. Vous pouvez spécifier plusieurs noms en une seule ligne séparés par des virgules ou/et utiliser plusieurs fois la directive Device. Cette directive est requise.

Changer Device = name-string
La chaîne name-string spécifiée indique le nom du fichier système désignant la librairie. S'il est spécifié dans cette ressource, ce nom n'est pas requis dans la ressource Device. Le nom éventuellement spécifié dans la ressource Device prend le pas sur celui spécifié dans la ressource Autochanger.

Changer Command = name-string
La chaîne name-string spécifie un programme externe appelé pour changer de volume automatiquement à la demande de Bacula. La plupart du temps, vous renseignerez ce champ avec le script fourni mtx-changer comme suit. Si cette commande est spécifiée ici, elle n'a pas besoin de l'être dans la ressource Device. Dans le cas où elle le serait dans les deux ressources, la spécification de la ressource Device prendrait le pas sur celle de la ressource Autochanger.

Voici un exemple de définition de ressource Autochanger valide :

Autochanger {
  Name = "DDS-4-changer"
  Device = DDS-4-1, DDS-4-2, DDS-4-3
  Changer Device = /dev/sg0
  Changer Command = "/etc/bacula/mtx-changer %c %o %S %a %d"
}
Device {
  Name = "DDS-4-1"
  Drive Index = 0
  Autochanger = yes
  ...
}
Device {
  Name = "DDS-4-2"
  Drive Index = 1
  Autochanger = yes
  ...
Device {
  Name = "DDS-4-3"
  Drive Index = 2
  Autochanger = yes
  Autoselect = no
  ...
}

Notez l'importance de la directive Autochanger = yes dans chaque définition de périphérique appartenant à une librairie. Un périphérique ne devrait pas être défini comme appartenant à plusieurs librairies. Aussi, votre directive Device dans la ressource Storage du Director devrait comporter le nom de la ressource Autochanger plutôt que le nom de l'un des lecteurs.

Si vous avez un lecteur qui appartient physiquement à une librairie mais que vous ne souhaitez pas que Bacula puisse l'utiliser automatiquement (par exemple, si vous voulez le réserver pour les restaurations) vous pouvez utiliser la directive :

Autoselect = no

à la ressource Device de ce lecteur. Dans ce cas, Bacula ne le sélectionnera pas automatiquement en accédant à la librairie. Vous pouvez encore utiliser le lecteur en le désignant par son nom de ressource device plutôt que par celui de la ressource Autochanger. Un exemple d'une telle définition est montré ci-dessus pour le lecteur DDS-4-3, qui ne sera pas sélectionné si le nom DDS-4-changer est utilisé dans une ressource Storage, mais le sera si DDS-4-3 est utilisé.

Un exemple de fichier de configuration

Les deux ressource suivantes implémentent une librairie :

Autochanger {
  Name = "Autochanger"
  Device = DDS-4
  Changer Device = /dev/sg0
  Changer Command = "/etc/bacula/mtx-changer %c %o %S %a %d"
}

Device {
  Name = DDS-4
  Media Type = DDS-4
  Archive Device = /dev/nst0    # Normal archive device
  Autochanger = yes
  LabelMedia = no;
  AutomaticMount = yes;
  AlwaysOpen = yes;
}

où vous adapterez les directives Archive Device, Changer Device et Changer Command pour qu'elles conviennent à votre système.

Un exemple de fichier de configuration multi-lecteurs

Les ressources suivantes implémentent une librairie multi-lecteurs :

Autochanger {
  Name = "Autochanger"
  Device = Drive-1, Drive-2
  Changer Device = /dev/sg0
  Changer Command = "/etc/bacula/mtx-changer %c %o %S %a %d"
}

Device {
  Name = Drive-1
  Drive Index = 0
  Media Type = DDS-4
  Archive Device = /dev/nst0    # Normal archive device
  Autochanger = yes
  LabelMedia = no;
  AutomaticMount = yes;
  AlwaysOpen = yes;
}

Device {
  Name = Drive-2
  Drive Index = 1
  Media Type = DDS-4
  Archive Device = /dev/nst1    # Normal archive device
  Autochanger = yes
  LabelMedia = no;
  AutomaticMount = yes;
  AlwaysOpen = yes;
}

où vous adapterez les directives Archive Device, Changer Device et Changer Command pour qu'elles conviennent à votre système.

Spécifier des slots lors de l'étiquetage

Si vous utilisez la directive Autochanger = yes à la ressource Storage du fichier de configuration de votre Director, la console Bacula vous demandera automatiquement le numéro de slot lors de l'utilisation des commandes add ou label pour ce périphérique de stockage. Si votre script mtx-changer est correctement installé, Bacula chargera la bonne cartouche à l'exécution de la commande label.

Vous devez aussi spécifier Autochanger = yes dans la ressource Device du Storage Daemon ainsi que nous l'avons décrit plus haut pour que la librairie soit utilisée. Veuillez consulter la section Ressource Storage dans le chapitre sur la configuration du Director pour plus de détails sur ce sujet.

Ainsi, toutes les phases de l'utilisation des cartouches peuvent être intégralement automatisées. Il est aussi possible de paramétrer ou modifier la valeur du slot en utilisant le sous-menu Volume Parameters de la commande update de la console.

Même si tous les paramètres ci-dessus sont correctement spécifiés, Bacula ne tentera d'accéder à la librairie que s'il existe un slot non-nul parmi les volumes enregistrés dans le catalogue.

Si votre librairie est équipée d'un lecteur de codes barres, vous pouvez étiqueter vos volumes l'un après l'autre en utilisant la commande label barcodes. Bacula montera et étiquettera chaque cartouche porteuse d'un code barres contenue dans la librairie avec le nom spécifié par le code barres. L'enregistrement aproprié sera aussi créé dans le catalogue. Toute cartouche dont le code barres commence par les caractères spécifiés par la directive Cleaning Prefix est considérée comme une cartouche de nettoyage, et ne sera pas étiquetée. Par exemple, avec :

Pool {
  Name ...
  Cleaning Prefix = "CLN"
}

toute cartouche de code barres CLNxxxx sera traitée en tant que cartouche de nettoyage, et ne sera pas montée.

Changer des cartouches

tocsubsectionChanger des cartouches Si vous voulez insérer ou retirer des cartouches de votre librairie, ou encore exécuter manuellement le programme mtx, vous devez "informer" Bacula de ces opérations :

unmount
(changez vos cartouches et/ou exécutez mtx)
mount

Si vous omettez de faire "unmount" avant de telles changements, Bacula ne saura plus ce qui est dans la librairie, et ce qui n'y est pas, et peut même cesser de fonctionner parce qu'il s'attend à avoir le contrôle exclusif de la librairie tandis quie le lecteur est monté.

Notez que les volumes doivent être pré-étiquetés pour pouvoir être utilisés automatiquement dans la librairie lors d'une sauvegarde. Si vous ne disposez pas d'un lecteur de code barres, ceci se fait manuellement, ou à l'aide d'un script.

Travailler avec plusieurs magasins

Si vous avez plusieurs magasins ou si vous insérez ou retirez des cartouches d'un magasin, vous devriez en informer Bacula. Ainsi, Bacula sera en mesure d'utiliser préférentiellement des cartouches qu'il sait être dans la librairie, prévenant ainsi des interventions humaines inutiles.

Si votre librairie est équipée d'un lecteur de codes barres, il est aisé de tenir Bacula informé : chaque fois que vous changez un magasin, ajoutez ou prélevez une cartouche, faites simplement :

unmount
(remove magazine)
(insert new magazine)
update slots
mount

dans la console. Avec cette commande, Bacula se renseigne auprès de la librairie pour connaître les volumes qu'elle contient. Ceci ne nécessite pas d'accéder aux volumes car la librairie se charge de faire son inventaire lors de sa mise sous tension. Bacula s'assure alors que tout volume présent dans la librairie est marqué présent dans le catalogue et que tout volume absent de la librairie est marqué absent dans le catalogue. En outre, les numéros de slots des volumes sont corrigés dans le catalogue s'ils sont inexacts.

Si vous ne disposez pas d'un lecteur de codes barres, vous avez plusieurs alternatives :

  1. Vous pouvez attribuer manuellement les numéros de slots et les drapeaux InChanger à l'aide de la commande update volume dans la console. Cette méthode est assez pénible.

  2. Vous pouvez lancer la commande

    update slots scan
    

    qui ordonne à Bacula de lire l'étiquette (label) de chacune des cartouches dans la librairie par montage successif, et de mettre à jour les informations (Slot, drapeau InChanger) dans le catalogue. Cette méthode est efficace, mais prend du temps pour charger chaque cartouche et en lire l'étiquette.

  3. Vous pouvez modifier le script mtx-changer en sorte qu'il simule une librairie équipée d'un lecteur de codes barres. Voyez ce qui suit pour plus de détails

Simuler un lecteur de codes barres dans votre librairie

Vous pouvez simuler un lecteur de codes barres dans votre librairie en faisant en sorte que le script mtx-changer retourne les informations que retournerait une librairie avec lecteur de codes barres. Pour cela, commentez la ligne ci-dessous dans le "case" aux alentours de la ligne 99 :

  ${MTX} -f $ctl status | grep " *Storage Element [0-9]*:.*Full" | awk "{print \$3 \$4}" | sed "s/Full *\(:VolumeTag=\)*//"

en ajoutant un # au début de cette ligne (vous pouvez aussi supprimer la ligne). A sa place, ajoutez une nouvelle ligne dont le rôle est d'imprimer le contenu d'un fichier. Par exemple :

cat /etc/bacula/changer.volumes

Le nom du fichier est libre, mais assurez vous d'utiliser un chemin absolu. Le contenu du fichier doit avoir le format :

1:Volume1
2:Volume2
3:Volume3
...

Où 1, 2, 3 sont les numéros de slots et Volume1, Volume2, Volume3 sont les noms de volumes dans ces slots. Vous pouvez utiliser plusieurs fichiers représentant les contenus de plusieurs magasins, ainsi, lorsque vous changez de magasin, contentez vous de copier le contenu du fichier associé dans le fichier /etc/bacula/changer.volumes. Il n'est pas utile de stopper et redémarrer Bacula lors d'un changement de magasins, mettez simplement les bonnes valeurs dans le fichier avant de lancer la commande update slots. Votre librairie apparaîtra à Bacula comme équipée d'un lecteur de codes barres.

La forme complète de la commande Update Slots

Si vous ne changez qu'une cartouche, vous ne voulez peut-être pas passer au crible tous vos volumes, c'est pourquoi la commande update slots (de même que la commande update slots scan) possède la forme additionnelle :

update slots=n1,n2,n3-n4, ...

où le mot-clef scan peut éventuellement être ajouté. n1, n2, n3-n4 représentent respectivement les numéros et la plage de slots que vous souhaitez mettre à jour.

Cette forme est particulièrement utile si vous voulez utiliser "scan" (couteux en temps) en restrignant l'opération à quelques slots.

Par exemple, si vous lancez la commande :

update slots=1,6 scan

Bacula va charger le volume du slot 6, lire son étiquette logicielle (label) et mettre à jour le catalogue, avant de faire de même avec la cartouche du slot 6. Avec la commande :

update slots=1-3,6

il va lire les codes barres des volumes dans les slots 1,2,3 et 6, et faire les mises à jour approriées dans le catalogue. Si vous n'avez pas de lecteur de codes barres, ni n'en simulez comme décrit plus haut, la commande ci-dessus ne trouvera aucun nom de volume et ne fera donc rien.

Spécificités FreeBSD

Si vous rencontrez des problèmes sur FreeBSD lorsque Bacula tente de sélectionner une cartouche, et si le message est Device not configured, c'est parce que FreeBSD a fait disparaître le fichier de périphérique /dev/nsa1 lorsqu'il n'y avait plus de cartouche montée dans le lecteur. Par conséquent, Bacula ne peut ouvrir le périphérique. Une solution consiste à charger une cartouche avant le lancement de Bacula. Ce problème est corrigé dans les versions de Bacula ultérieures à 1.32f-5.

Veuillez consulter le chapitre Tester votre lecteur de ce manuel pour d'importantes informations sur votre lecteur avant de passer au test de la librairie.

Tester la librairie et adapter le script mtx-changer

Avant d'essayer d'utiliser une librairie avec Bacula, il est préférable de vérifier "à la main" que le bras robotisé fonctionne. Pour ce faire, utilisez les commandes suivantes (à supposer que le script mtx-changer est installé dans /etc/bacula/mtx-changer) :

Assurez vous que Bacula est stoppé

/etc/bacula/mtx-changer /dev/sg0 list 0 /dev/nst0 0

Cette commande devrait afficher :

   1:
   2:
   3:
   ...

soit un numéro suivi de deux points pour chacun des slots occupé dans la librairie. Si votre librairie a un lecteur de codes barres, celui-ci sera affiché après les deux points. Si un message d'erreur s'affiche, vous devez résoudre le problème (par exemple, essayez un autre nom de périphérique si /dev/sg0 n'est pas le bon. PAr exemple, sur FreeBSD c'est généralement /dev/pass2).

/etc/bacula/mtx-changer /dev/sg0 slots 0 /dev/nst0 0

Cette commande devrait retourner le nombre de slots de votre librairie.

/etc/bacula/mtx-changer /dev/sg0 unload

Si une cartouche est chargée, cette commande devrait la décharger.

/etc/bacula/mtx-changer /dev/sg0 load 3 /dev/nst0 0

Si vous avez une cartouche dans le slot 3, elle sera chargée dans le slot de lecture (0).

/etc/bacula/mtx-changer /dev/sg0 loaded 0 /dev/nst0 0

devrait afficher "3"

/etc/bacula/mtx-changer /dev/sg0 unload

Une fois que toutes les commandes ci-dessus fonctionnent correctement, Bacula devrait être capable d'utiliser la librairie, pourvu que votre configuration comporte la bonne commande Changer Command. A ce stade, il ne peut subsister qu'un problème : si votre librairie requiert un certain délai pour charger la cartouche après l'exécution de la commande. Immédiatement après avoir obtenu le retour du script mtx-changer, Bacula commande le rembobinage et la lecture de la bande. S'il obtient une erreur I/O, vous devriez probablement insérer une pause (sleep 20) après la commande mtx, mais prenez soin de terminer le script avec un code de sortie 0 en ajoutant exit 0 après toute commande que vous ajoutez au script, car Bacula contrôle le code de sortie du script qui devrait être 0 si tout s'est bien passé.

Vous pouvez tester si vous avez ou non besoin d'une telle pause en exécutant le script suivant :

#!/bin/sh
/etc/bacula/mtx-changer /dev/sg0 unload
/etc/bacula/mtx-changer /dev/sg0 load 3
mt -f /dev/st0 rewind
mt -f /dev/st0 weof

S'il fonctionne correctement, vous n'êtes sans doute pas concerné par ce problème. Sinon, commencez par ajouter sleep 30 voire sleep 60 juste après la commande "/etc/bacula/mtx-changer /dev/sg0 load 3". Si ça marche, vous pouvez alors intégrer cette pause dans le script mtx-changer afin qu'elle soit effective lorsque Bacula est exécuté.

Quelques rares librairies exigent l'éjection de la cartouche avant de pouvoir la décharger. Dan ce cas, la commande /etc/bacula/mtx-changer /dev/sg0 load 3 ne fonctionne jamais, quel que soit la durée de la pause. Si vous pensez avoir ce problème, insérez une commande "eject" juste avant la commande /etc/bacula/mtx-changer /dev/sg0 unload :

#!/bin/sh
/etc/bacula/mtx-changer /dev/sg0 unload
mt -f /dev/st0 offline
/etc/bacula/mtx-changer /dev/sg0 load 3
mt -f /dev/st0 rewind
mt -f /dev/st0 weof

Naturellement, si vous avez besoin de la commande offline, vous devriez l'intégrer au script mtx-changer, en n'oubliant pas de préserver le code de sortie du script par l'ajout de exit 0.

Comme indiqué précédemment, plusieurs scripts qui implémentent ces fonctions sont regroupés dans <bacula-source>/examples/devices, ils peuvent vous inspirer pour faire en sorte que le votre fonctionne.

Si Bacula affiche "Rewind error on /dev/nst0. ERR=Input/output error." vous avez probablement besoin d'accroître la pause dans le script mtx-changer

Utiliser la librairie

Supposons que vous ayez convenablement défini les directives Device du Storage Daemon, et que vous ayez ajouté la directive Autochanger = yes dans la ressource Storage de votre fichier bacula-dir.conf.

Maintenant, alimentez votre librairie avec quelques cartouches vierges.

Que faire pour que Bacula accède à ces cartouches ?

Une stratégie consiste à pré-étiqueter chacune des cartouches. Pour cela, démarrez Bacula, puis utilisez la commande label dans la console :

./console
Connecting to Director rufus:8101
1000 OK: rufus-dir Version: 1.26 (4 October 2002)
*label

l'affichage devrait être :

Using default Catalog name=BackupDB DB=bacula
The defined Storage resources are:
     1: Autochanger
     2: File
Select Storage resource (1-2): 1

Choisissez la librairie (choix 1), vous obtenez :

Enter new Volume name: TestVolume1
Enter slot (0 for none): 1

Ici saisissez TestVolume1 en guise de nom, et 1 pour le slot. On vous demande alors :

Defined Pools:
     1: Default
     2: File
Select the Pool (1-2): 1

Sélectionnez le pool Default (ce qui est fait automatiquement si vous n'avez que celui-là). Bacula poursuit en déchargeant toute cartouche chargée, en chargeant celle du slot 1 et en l'étiquetant. Dans cet exemple, le lecteur était vide, il en résulte l'affichage :

Connecting to Storage daemon Autochanger at localhost:9103 ...
Sending label command ...
3903 Issuing autochanger "load slot 1" command.
3000 OK label. Volume=TestVolume1 Device=/dev/nst0
Media record for Volume=TestVolume1 successfully created.
Requesting mount Autochanger ...
3001 Device /dev/nst0 is mounted with Volume TestVolume1
You have messages.
*

Vous pouvez continuer à étiqueter les autres volumes, les messages changeront légèrement du fait qu'il y aura cette fois une cartouche à décharger avant de charger la suivante.

Une fois que tous vos volumes sont étiquetés, Bacula est en mesure de les charger lorsqu'il en a besoin.

Pour "voir" votre étiquetage, saisissez la commande list volumes dans la console, vous devriez obtenir quelque chose comme :

*{\bf list volumes}
Using default Catalog name=BackupDB DB=bacula
Defined Pools:
     1: Default
     2: File
Select the Pool (1-2): 1
+-------+----------+--------+---------+-------+--------+----------+-------+------+
| MedId | VolName  | MedTyp | VolStat | Bites | LstWrt | VolReten | Recyc | Slot |
+-------+----------+--------+---------+-------+--------+----------+-------+------+
| 1     | TestVol1 | DDS-4  | Append  | 0     | 0      | 30672000 | 0     | 1    |
| 2     | TestVol2 | DDS-4  | Append  | 0     | 0      | 30672000 | 0     | 2    |
| 3     | TestVol3 | DDS-4  | Append  | 0     | 0      | 30672000 | 0     | 3    |
| ...                                                                            |
+-------+----------+--------+---------+-------+--------+----------+-------+------+

Support des codes barres

Bacula utilise les codes barres à travers deux commandes de la console : label barcodes et update slots.

La commande label barcodes ordonne à Bacula de lire tous les codes barres de toutes les cartouches présentes dans la librairie à l'aide de la commande mtx-changer list. Les cartouches sont ensuite montées l'une après l'autre pour être étiqueté du nom de leur code barres.

La commande update slots commence par obtenir du script mtx-changer la liste des cartouches et de leurs codes barres. Ensuite, il confronte chacune des valeurs du catalogues à cette liste afin de le mettre à jour. Notez que si un volume ne figure pas dans le catalogue, il n'y a rien a faire. Cette commande est utile pour synchroniser Bacula avec le contenu de la librairie si vous avez changé de magasin ou déplacé des cartouches.

La directive Cleaning Prefix peut être utilisée dans la ressource Pool pour définir un préfixe de nom de volume qui, s'il correspond au code barres d'un volume confère à ce volume le statut (VolStatus) Cleaning. Ceci évite que Bacula tente d'écrire sur une cartouche de nettoyage.

Interface entre Bacula et les librairies

Bacula appelle le script mtx-changer que vous spécifiez au niveau de la directive Changer Command. En principe, ce sera le script mtx-changer que nous fournissons, mais ce pourrait être n'importe quel programme qui implémente les commandes loaded, load, unload, list, et slots qu'utilise Bacula. Voici le format sous lequel ces commandes doivent retourner les informations :

- Currently the changer commands used are:
    loaded -- retourne le num\'ero du slot d'origine de la cartouche charg\'ee, 
              avec pour base 1 et 0 pour le lecteur.
    load   -- charge la cartouche du slot sp\'ecifi\'e dans le lecteur.(notez que certains 
              mat\'eriels requi\`erent une pause de 30 secondes apr\`es cette commande)
    unload -- d\'echarge le lecteur (la cartouche retourne dans son slot d'origine).
    list   -- retourne une ligne par cartouche pr\'esente dans la librairie 
              au format <slot>:<barcode> o\`u {\bf slot} est un entier non-nul 
              repr\'esentant le num\'ero du slot, et {\bf barcode} est le code barres, 
	      s'il existe et si la librairie le prend en charge, associ\'e \`a la cartouche 
	      (dans le cas contraire, le champ "barcode" est laiss\'e blanc.
    slots  -- retourne le nombre total de slots dans la librairie.

Bacula contrôle le code de sortie du programme appelé. Si ce code est 0, les informations sont acceptées. Dans le cas contraire, elles sont ignorées et le lecteur est traité comme s'il n'était pas dans une librairie.


next up previous contents index
Next: Librairies supportées Up: Bacula User's Guide Previous: Backup Strategies   Contents   Index
Kern Sibbald 2007-04-02