%%
%%

\chapter{Support des librairies}
\label{AutochangersChapter}
\index[general]{Support!Librairies}
\index[general]{Autochanger Support }
\addcontentsline{toc}{section}{Support des librairies}

Bacula supporte les librairies pour les op\'erations de lecture et \'ecriture. 
Plusieurs conditions sont requises pour que Bacula puisse utiliser une librairie. 
Celles-ci sont expliqu\'ees en d\'etail ci-dessous.
Mais voyons d'abord la liste de ces conditions :

\begin{itemize}
\item Un script charg\'e de piloter la librairie en accord avec les commandes 
   envoy\'ees par Bacula est requis. Nous fournissons un tel script pr\'evu pour fonctionner 
   avec le programme {\bf mtx} disponible dans les paquets {\bf depkgs}. ce script ne 
   fonctionne qu'avec les librairies \`a un seul lecteur.
\item Chaque volume \`a utiliser doit \^etre d\'efini dans le catalogue et avoir 
  un num\'ero de slot (NDT : emplacement dans la librairie) assign\'e, de sorte 
  que Bacula puisse savoir o\`u se trouve le volume dans la librairie. Cet 
  enregistrement se fait la plupart du temps gr\^ace \`a la commande {\bf label}. 
  Voyez ci-dessous pour plus de d\'etails. Vous devez \'etiqueter manuellement 
  vos cartouches avant de pouvoir les utiliser.
\item Vous devez avoir modifi\'e le fichier de configuration de votre Storage 
  Daemon afin que la ressource Device identifie votre p\'eriph\'erique en tant 
  que librairie. Quelques autres param\`etres doivent \^etre d\'efinis.
\item Vous devriez aussi modifier la d\'efinition de ressource Storage dans le 
fichier de configuration du Director en sorte que le slot vous soit automatiquement 
demand\'e lorque vous \'etiquetez un volume.
\item Si vous n'ex\'ecutez pas le Storage Daemon en tant que root, vous devez 
  vous assurer qu'il d\'etient les droits requis pour acc\'eder au lecteur et au 
  bras robotis\'e de la librairie.
\item Vous devez placer la directive {\bf Autochanger = yes} dans la 
  ressource Storage de votre fichier bacula-dir.conf, de sorte que vous soyez 
  interrog\'e au sujet du slot \`a chaque \'etiquetage de cartouche.
\end{itemize}

Dans les versions ult\'erieures \`a 1.37, la nouvelle directive 
\ilink{Autochanger resource}{AutochangerRes} permet de grouper les ressources 
Device pour cr\'eer des librairies avec plusieurs lecteurs. Si vous avez une 
librairie, vous devez utiliser cette ressource.

Bacula utilise son propre script {\bf mtx-changer} pour interagir avec un 
programme qui effectue r\'eellement les changement de cartouches. Ainsi, 
{\bf mtx-changer} peut \^etre adapt\'e pour fonctionner avec n'importe quel 
programme de prise en chgarge de librairie. La version actuelle de 
{\bf mtx-changer} fonctionne avec le programme {\bf mtx} . Cependant, 
des utilisateurs de FreeBSD ont r\'ealis\'e un script, disponible dans 
le r\'epertoire {\bf examples/autochangers}, qui permet \`a Bacula de fonctionner 
avec le programme {\bf chio}.

Bacula supporte aussi les librairies \'equip\'ees de lecteurs de codes barres. 
Ce support inclut deux commandes de la console Bacula : {\bf label barcodes} 
et {\bf update slots}. Pour plus de d\'etails 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. 

Le support des librairies \`a un ou plusieurs lecteurs requiert la ressource 
\ilink{Autochanger resource}{AutochangerRes}.                          

En principe, si {\bf mtx} fonctionne correctement avec votre librairie, ce 
n'est qu'une question d'adaptation du script {\bf mtx-changer} pour que 
Bacula s'interface correctement avec la librairie. Vous pouvez trouver une 
liste des librairies support\'ees par  {\bf mtx}  en suivant le lien suivant : 
\elink{http://mtx.opensource-sw.net/compatibility.php}
{http://mtx.opensource-sw.net/compatibility.php}.
Le site officiel du projet  {\bf mtx} se trouve ici : 
\elink{http://mtx.opensource-sw.net/}{http://mtx.opensource-sw.net/}.

Si vous avez des difficult\'es, veuillez utiliser la commande  {\bf auto} du 
programme  {\bf 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\'ecut\'e en tant que {\bf bacula.tape}  plut\^ot que {\bf root.root}, aussi 
vous devrez vous assurer que le Storage Daemon dispose de droits suffisants pour 
acc\'eder \`a la librairie.

\label{SCSI devices}
\section*{D\'eterminer vos p\'eriph\'eriques SCSI}
\index[general]{D\'eterminer!p\'eriph\'eriques SCSI}
\index[general]{D\'eterminer vos p\'eriph\'eriques SCSI}
\index[general]{P\'eriph\'eriques}
\index[general]{p\'eriph\'eriques!SCSI}

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

\footnotesize
\begin{verbatim}
cat /proc/scsi/scsi
\end{verbatim}
\normalsize

pour conna\^itre vos p\'eriph\'eriques SCSI. Vous pouvez aussi examiner les fichiers 
/proc/scsi/sg/device\_hdr et /proc/scsi/sg/devices :

footnotesize
\begin{verbatim}
cat /proc/scsi/sg/device_hdr /proc/scsi/sg/devices
\end{verbatim}
\normalsize

pour d\'eterminer comment sp\'ecifier leur nom de p\'eriph\'erique ({\bf /dev/sg0} 
pour le premier, {\bf /dev/sg1} pour le second, ...) au niveau de 
la directive {\bf Changer Device}

Pour des informations plus d\'etaill\'ees sur le sujet, veuillez consulter la 
section \ilink{Linux SCSI Tricks}{SCSITricks} du chapitre sur les tests 
de lecteurs de ce manuel.

Sous FreeBSD, vous disposez de la commande :

\footnotesize
\begin{verbatim}
camcontrol devlist
\end{verbatim}
\normalsize

pour afficher la liste des p\'eriph\'eriques SCSI ainsi que le {\bf /dev/passn} 
que vous utiliserez pour renseigner la directive {\bf Changer Device} 

Assurez-vous que votre Storage Daemon dispose bien des privil\`eges requis 
pour acc\'eder \`a ce p\'eriph\'erique.

L'astuce suivante, destin\'ee aux utilisateurs de FreeBSD, provient de 
Danny Butroyd. Au red\'emarrage, Bacula n'aura PLUS les permissions 
requises pour contr\^oler le p\'eriph\'erique /dev/pass0. Pour vous 
affanchir de cette difficult\'e, \'editez le fichier /etc/devfs.conf  et 
ajoutez lui ceci :

\footnotesize
\begin{verbatim}
own     pass0   root:bacula
perm    pass0   0666
own     nsa0.0  root:bacula
perm    nsa0.0    0666
\end{verbatim}
\normalsize

Nous avons ainsi donn\'e au groupe Bacula la permission d'\'ecrire 
sur le p\'eriph\'erique nsa0.0. Pour activer ces modifications, ex\'ecutez : 
/etc/rc.d/devfs restart

Vous n'aurez plus \`a modifier les permissions sur ces p\'eriph\'eriques 
pour que Bacula continue d'utiliser la librairie apr\`es un red\'emarrage.

\label{scripts}

\section{Exemples de scripts}
\index[general]{Scripts!Exemples }
\index[general]{Exemples de scripts }

Veuillez lire les sections ci-dessous pour bien comprendre comment 
les librairies fonctionnent avec Bacula. Bien que nous fournissions 
un script {\bf mtx-changer} par d\'efaut, il se peut que votre librairie 
n\'ecessite quelques am\'enagements de ce script. Si vous voulez voir des 
exemples de fichiers de configuration et de scripts, jetez un oeil 
au r\'epertoire \lt{}bacula-src\gt{}/examples/devices o\`u vous 
trouverez un exemple de ressource Device Bacula : {\bf HP-autoloader.conf} 
ainsi que plusieurs scripts {\bf mtx-changer} modifi\'es pour fonctionner 
avec diverses librairies.

\label{Slots}

\section*{Slots}
\index[general]{Slots }

Pour utiliser convenablement une librairie, Bacula doit savoir quel volume 
se trouve dans quel {\bf slot} de la librairie. Les slots sont les 
emplacements o\`u sont rang\'ees les cartouches lorsqu'elles ne sont pas dans un 
lecteur. Bacula num\'erote ces slots de un jusqu'au nombre de cartouches 
contenues dans la librairie.

Bacula n'utilisera pas automatiquement une cartouche pr\'esente dans la librairie 
si elle ne porte pas d'\'etiquette (label) Bacula et si son num\'ero de slot n'est pas 
r\'ef\'erenc\'e dans le catalogue. Vous devez, \`a l'aide de la console, assigner un 
slot \`a chaque cartouche pr\'esente dans la librairie. Cette information est 
conserv\'ee dans le catalogue avec les autres donn\'ees relatives au volume. 
Si le slot n'est pas pr\'ecis\'e, ou s'il est \'egal \`a z\'ero, alors Bacula ne tentera 
pas d'utiliser la librairie, m\^eme si tous les enregistrements de configuration 
sont pr\'esents. De m\^eme, la commande {\bf mount} de la console Bacula ne 
provoque pas non plus l'utilisation de la librairie, mais se contente d'ordonner 
\`a Bacula de lire toute cartouche \'eventuellement pr\'esente dans le lecteur.

Vous pouvez contr\^oler le num\'ero de slot et le drapeau InChanger avec la commande :

\begin{verbatim}
list Volumes
\end{verbatim}

dans la console.

\label{mult}
\section*{Lecteurs multiples}
\index[general]{Lecteurs!Multiples }
\index[general]{Lecteurs ultiples}

Certaines librairies comportent plusieurs p\'eriph\'eriques de lecture/\'ectriture 
(lecteurs). La nouvelle \ilink{ressource Autochanger}{AutochangerRes} 
apparue avec la version 1.37 vous permet de grouper des ressources Devices 
(repr\'esentant 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\'ef\'erable 
que la Ressource Storage du Director d\'efinisse une ressource 
Autochanger, permettant ainsi au Storage Daemon de s'assurer qu'un seul 
lecteur \`a la fois utilise le script mtx-changer, et que deux lecteurs ne tentent 
pas de lire le m\^eme volume.

Les librairies \`a lecteurs multiples n\'ecessitent d'utiliser la directive 
{\bf Drive Index} dans la ressource Device du Storage Daemon. Les 
lecteurs sont num\'erot\'es \`a partir de z\'ero, ce qui constitue la valeur par 
d\'efaut. Pour utiliser un deuxi\`eme lecteur dans une librairie, vous devez 
d\'efinir une seconde ressource Device et lui attribuer le Drive Index 1. 
En g\'en\'eral, le second p\'eriph\'erique aura le m\^eme {\bf Changer Device} 
(canal de contr\^ole) que le premier, mais une {\bf Archive Device} diff\'erente. 

Par d\'efaut, les jobs Bacula pr\'ef\`erent \'ecrire sur un volume d\'ej\`a mont\'e. 
Si vous avez une librairie avec plusieurs lecteurs, et si vous souhaitez que 
Bacula \'ecrive sur plusieurs volumes du m\^eme pool en m\^eme temps, vous devez 
d\'esactiver la directive \ilink{Prefer Mounted Volumes} {PreferMountedVolumes} 
dans la ressource Job du Director. Ainsi le Storage Daemon pourra maximiser 
l'usage des lecteurs.

\label{ConfigRecords}
\subsection*{Directives de la ressource Device}
\index[general]{Directives!ressource Device}
\index[general]{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\'efinir l'usage de 
la librairie par Bacula : {\bf Autochanger}, {\bf Changer Device},
{\bf Changer Command} et {\bf Maximum Changer Wait} 

Ces quatre directives sont d\'ecrites en d\'etail ci-dessous. Notez cependant 
que les directives {\bf Changer Device} et {\bf Changer Command} ne sont pas 
requises dans la ressource Device si elles figurent dans la ressource 
{\bf Autochanger}.

\begin{description}

\item [Autochanger = {\it Yes|No} ]
   \index[sd]{Autochanger}
   La directive {\bf Autochanger} stipule que le p\'eriph\'erique ainsi d\'efini est, ou 
   n'est pas, une librairie. La valeur par d\'efaut est {\bf no}.

\item [Changer Device = \lt{}device-name\gt{}]
   \index[sd]{Changer Device}
   En plus du nom d'Archive Device, vous devez sp\'ecifier un nom de 
   librairie {\bf Changer Device}, ceci parce que la plupart des librairies 
   sont control\'ees via un pseudo-fichier diff\'erent de celui utilis\'e pour 
   lire et \'ecrire sur les cartouches. Par exemple, sur les syst\`emes Linux, 
   on utilise g\'en\'eralement l'interface SCSI g\'en\'erique pour contr\^oler le bras 
   de la librairie, soit {\bf Changer Device = /dev/sg0} et l'interface SCSI 
   standard pour lire et \'ecrire sur les bandes, soit {\bf Archive Device = /dev/nst0}.
   Notez que certaines librairies \'evolu\'ees localiseront le bras sur 
   {\bf /dev/sg1}. De telles librairies ont souvent plusieurs lecteurs et un 
   nombre important de cartouches.

   Sur FreeBSD, on sp\'ecifiera typiquement {\bf Changer Device = /dev/pass0} ou 
   {\bf Changer Device = /dev/passn}.

   Sur Solaris, ce sera {\bf Changer Device = /dev/rdsk}.

   Assurez vous que votre Storage Daemon poss\`ede les permissions d'acc\'eder \`a 
   ce p\'eriph\'erique.

\item [Changer Command = \lt{}command\gt{}]
   \index[sd]{Changer Command  }
   Cette directive est utilis\'ee pour sp\'ecifier le programme externe \`a appeler 
   et les arguments \`a lui fournir. La commande est suppos\'ee \^etre un programme 
   ou un script shell standard qui peut \^etre ex\'ecut\'e par le syst\`eme. cette 
   commande est invoqu\'ee chaque fois que Bacula manipule le bras de la librairie. 
   Les substitutions suivantes sont effectu\'ees dans la ligne {\bf command} 
   avant qu'elle ne soit envoy\'ee au syst\`eme d'exploitation pour ex\'ecution.

\footnotesize
\begin{verbatim}
      %% = %
      %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
\end{verbatim}
\normalsize

Voici un exemple d'utilisation de {\bf mtx} avec le script {\bf mtx-changer} :

\footnotesize
\begin{verbatim}
Changer Command = "/etc/bacula/mtx-changer %c %o %S %a %d"
\end{verbatim}
\normalsize

O\`u vous devrez adapter le chemin {\bf /etc/bacula} pour qu'il co\''incide \`a 
la r\'ealit\'e de votre installation. Les d\'etails des trois commandes (loaded, 
load, unload) utilis\'ees par Bacula ainsi que la sortie qui en est attendue 
sont donn\'es dans la section {\bf Interface entre Bacula et les librairies} 
ci-dessous.

\item [Maximum Changer Wait = \lt{}time\gt{}]
   \index[sd]{Maximum Changer Wait}
   Cette directive sert \`a d\'efinir le d\'elai maximal durant lequel Bacula 
   attendra la r\'eponse d'une librairie \`a une commande (par exemple, load). 
   La valeur par d\'efaut est 120 secondes. Si votre librairie est lente, vous 
   pouvez avoir int\'er\^et \`a allonger ce d\'elai.
   
   Au del\`a de ce d\'elai, le programme de chargement est tu\'e et Bacula 
   sollicite l'intervention d'un op\'erateur.

\item [Drive Index = \lt{}number\gt{}]
   \index[sd]{Drive Index}
   Cette directive vous permet d'indiquer \`a Bacula d'utiliser le second 
   lecteur et les \'eventuels suivants dans une librairie qui en contient 
   plusieurs. Etant donn\'e que les lecteurs sont num\'erot\'es \`a partir de 
   z\'ero, le second est d\'efini par :

\footnotesize
\begin{verbatim}
Device Index = 1
\end{verbatim}
\normalsize

Pour utiliser le second lecteur, vous devez avoir une seconde d\'efinition 
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.
\end{description}

De plus, pour un fonctionnement correct de la librairie, vous devez d\'efinir 
une ressource Autochanger.
\input{autochangerres}

\label{example}
\section{Un exemple de fichier de configuration}
\index[general]{exemple fichier configuration}
\index[general]{fichier!exemple configuration}

Les deux ressource suivantes impl\'ementent une librairie :

\footnotesize
\begin{verbatim}
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;
}
\end{verbatim}
\normalsize

o\`u vous adapterez les directives {\bf Archive Device}, {\bf Changer Device} et 
{\bf Changer Command} pour qu'elles conviennent \`a votre syst\`eme.

\section{Un exemple de fichier de configuration multi-lecteurs}
\index[general]{Multi-lecteurs exemple fichier de configuration}

Les ressources suivantes impl\'ementent une librairie multi-lecteurs :

\footnotesize
\begin{verbatim}
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;
}

\end{verbatim}
\normalsize

o\`u vous adapterez les directives {\bf Archive Device}, {\bf Changer Device} et
{\bf Changer Command} pour qu'elles conviennent \`a votre syst\`eme.

\label{SpecifyingSlots}
\section{Sp\'ecifier des slots lors de l'\'etiquetage}
\index[general]{Sp\'ecifier des slots lors de l'\'etiquetage}
\index[general]{Etiquetage!Sp\'ecifier des slots lors de}

Si vous utilisez la directive  {\bf Autochanger = yes} \`a la ressource Storage 
du fichier de configuration de votre Director, la console Bacula vous 
demandera automatiquement le num\'ero de slot lors de l'utilisation des 
commandes {\bf add} ou {\bf label} pour ce p\'eriph\'erique de stockage. Si 
votre script {\bf mtx-changer} est correctement install\'e, Bacula 
chargera la bonne cartouche \`a l'ex\'ecution de la commande {\bf label}.

Vous devez aussi sp\'ecifier {\bf Autochanger = yes} dans la ressource 
Device du Storage Daemon ainsi que nous l'avons d\'ecrit plus haut pour 
que la librairie soit utilis\'ee. Veuillez consulter la section 
\ilink{Ressource Storage}{Autochanger1} dans le chapitre sur la configuration 
du Director pour plus de d\'etails sur ce sujet.
  
Ainsi, toutes les phases de l'utilisation des cartouches peuvent \^etre 
int\'egralement automatis\'ees. Il est aussi possible de param\'etrer ou 
modifier la valeur du slot en utilisant le sous-menu {\bf Volume Parameters} 
de la commande {\bf update} de la console.

M\^eme si tous les param\`etres ci-dessus sont correctement sp\'ecifi\'es, Bacula ne 
tentera d'acc\'eder \`a la librairie que s'il existe un {\bf slot} non-nul parmi 
les volumes enregistr\'es dans le catalogue.

Si votre librairie est \'equip\'ee d'un lecteur de codes barres, vous pouvez 
\'etiqueter vos volumes l'un apr\`es l'autre en utilisant la commande 
{\bf label barcodes}. Bacula montera et \'etiquettera chaque cartouche porteuse 
d'un code barres contenue dans la librairie avec le nom sp\'ecifi\'e par le 
code barres. L'enregistrement apropri\'e sera aussi cr\'e\'e dans le catalogue. 
Toute cartouche dont le code barres commence par les caract\`eres sp\'ecifi\'es par 
la directive {\bf Cleaning Prefix} est consid\'er\'ee comme une cartouche de 
nettoyage, et ne sera pas \'etiquet\'ee. Par exemple, avec :

\footnotesize
\begin{verbatim}
Pool {
  Name ...
  Cleaning Prefix = "CLN"
}
\end{verbatim}
\normalsize

toute cartouche de code barres  CLNxxxx sera trait\'ee en tant que cartouche de 
nettoyage, et ne sera pas mont\'ee.

\section{Changer des cartouches}
\index[general]{Changer des cartouches}
Si vous voulez ins\'erer ou retirer des cartouches de votre librairie, ou encore 
ex\'ecuter manuellement le programme {\bf mtx}, vous devez "informer" Bacula de ces op\'erations :

\footnotesize
\begin{verbatim}
unmount
(changez vos cartouches et/ou ex\'ecutez mtx)
mount
\end{verbatim}
\normalsize

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\^eme cesser de fonctionner 
parce qu'il s'attend \`a avoir le contr\^ole exclusif de la librairie tandis quie le lecteur 
est mont\'e.

Notez que les volumes doivent \^etre pr\'e-\'etiquet\'es pour pouvoir \^etre utilis\'es 
automatiquement dans la librairie lors d'une sauvegarde. Si vous ne disposez 
pas d'un lecteur de code barres, ceci se fait manuellement, ou \`a l'aide d'un 
script.

\label{Magazines}
\section{Travailler avec plusieurs magasins}
\index[general]{Travailler avec plusieurs magasins}
\index[general]{magasins!Travailler avec plusieurs}

Si vous avez plusieurs magasins ou si vous ins\'erez ou retirez des 
cartouches d'un magasin, vous devriez en informer Bacula. Ainsi, Bacula 
sera en mesure d'utiliser pr\'ef\'erentiellement des cartouches qu'il sait \^etre 
dans la librairie, pr\'evenant ainsi des interventions humaines inutiles.

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

\footnotesize
\begin{verbatim}
unmount
(remove magazine)
(insert new magazine)
update slots
mount
\end{verbatim}
\normalsize

dans la console. Avec cette commande, Bacula se renseigne aupr\`es de la librairie 
pour conna\^itre les volumes qu'elle contient. Ceci ne n\'ecessite pas d'acc\'eder 
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\'esent dans la 
librairie est marqu\'e pr\'esent dans le catalogue et que tout volume absent de la 
librairie est marqu\'e absent dans le catalogue. En outre, les num\'eros de slots 
des volumes sont corrig\'es dans le catalogue s'ils sont inexacts.

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

\begin{enumerate}
\item Vous pouvez attribuer manuellement les num\'eros de slots et les drapeaux 
  InChanger \`a l'aide de la commande {\bf update volume} dans la console. Cette 
  m\'ethode est assez p\'enible.

\item Vous pouvez lancer la commande 

\footnotesize
\begin{verbatim}
update slots scan
\end{verbatim}
\normalsize
   
   qui ordonne \`a Bacula de lire l'\'etiquette (label) de chacune des cartouches 
   dans la librairie par montage successif, et de mettre \`a jour les informations 
   (Slot, drapeau InChanger) dans le catalogue. Cette m\'ethode est efficace, mais 
   prend du temps pour charger chaque cartouche et en lire l'\'etiquette.

\item Vous pouvez modifier le script  mtx-changer en sorte qu'il simule une 
  librairie \'equip\'ee d'un lecteur de codes barres. Voyez ce qui suit pour plus de 
  d\'etails 
\end{enumerate}

\label{simulating}
\section{Simuler un lecteur de codes barres dans votre librairie}
\index[general]{Librairie!Simuler un lecteur de codes barres dans votre}
\index[general]{Simuler un lecteur de codes barres dans votre}

Vous pouvez simuler un lecteur de codes barres dans votre librairie en faisant 
en sorte que le script {\bf 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 :

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

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

\footnotesize
\begin{verbatim}
cat /etc/bacula/changer.volumes
\end{verbatim}
\normalsize

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

\footnotesize
\begin{verbatim}
1:Volume1
2:Volume2
3:Volume3
...
\end{verbatim}
\normalsize

O\`u 1, 2, 3 sont les num\'eros de slots et Volume1, Volume2, Volume3 sont les 
noms de volumes dans ces slots. Vous pouvez utiliser plusieurs fichiers 
repr\'esentant les contenus de plusieurs magasins, ainsi, lorsque vous 
changez de magasin, contentez vous de copier le contenu du fichier associ\'e 
dans le fichier {\bf /etc/bacula/changer.volumes}. Il n'est pas utile de 
stopper et red\'emarrer Bacula lors d'un changement de magasins, mettez simplement 
les bonnes valeurs dans le fichier avant de lancer la commande {\bf update slots}.
Votre librairie appara\^itra \`a Bacula comme \'equip\'ee d'un lecteur de codes barres.

\label{updateslots}

\section{La forme compl\`ete de la commande Update Slots}
\index[general]{La forme compl\`ete de la commande Update Slots}
\index[general]{Command!La forme compl\`ete de la commande Update Slots}

Si vous ne changez qu'une cartouche, vous ne voulez peut-\^etre pas passer au crible 
tous vos volumes, c'est pourquoi la commande {\bf update slots} (de m\^eme que la 
commande {\bf update slots scan}) poss\`ede la forme additionnelle :

\footnotesize
\begin{verbatim}
update slots=n1,n2,n3-n4, ...
\end{verbatim}
\normalsize

o\`u le mot-clef {\bf scan} peut \'eventuellement \^etre ajout\'e. n1, n2, n3-n4
repr\'esentent respectivement les num\'eros et la plage de slots que vous souhaitez 
mettre \`a jour. 

Cette forme est particuli\`erement utile si vous voulez utiliser "scan" (couteux en temps) 
en restrignant l'op\'eration \`a quelques slots.

Par exemple, si vous lancez la commande :

\footnotesize
\begin{verbatim}
update slots=1,6 scan
\end{verbatim}
\normalsize

Bacula va charger le volume du slot 6, lire son \'etiquette logicielle (label) et 
mettre \`a jour le catalogue, avant de faire de m\^eme avec la cartouche du slot 6.
Avec la commande :

\footnotesize
\begin{verbatim}
update slots=1-3,6
\end{verbatim}
\normalsize

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

\label{FreeBSD}

\section{Sp\'ecificit\'es FreeBSD}
\index[general]{Sp\'ecificit\'es!FreeBSD }
\index[general]{Sp\'ecificit\'es FreeBSD}

Si vous rencontrez des probl\`emes sur FreeBSD lorsque Bacula tente de s\'electionner 
une cartouche, et si le message est {\bf Device not configured}, c'est 
parce que FreeBSD a fait dispara\^itre le fichier de p\'eriph\'erique {\bf /dev/nsa1} 
lorsqu'il n'y avait plus de cartouche mont\'ee dans le lecteur. Par cons\'equent, 
Bacula ne peut ouvrir le p\'eriph\'erique. Une solution consiste \`a charger une 
cartouche avant le lancement de Bacula. Ce probl\`eme est corrig\'e dans les 
versions de Bacula ult\'erieures \`a 1.32f-5.

Veuillez consulter le chapitre 
\ilink{Tester votre lecteur}{FreeBSDTapes} de ce manuel pour d'{\bf importantes} 
informations sur votre lecteur avant de passer au test de la librairie.
\label{AutochangerTesting}

\section{Tester la librairie et adapter le script mtx-changer}
\index[general]{Tester la librairie et adapter le script mtx-changer}
\index[general]{Script!Tester la librairie et adapter le script mtx-changer}

Avant d'essayer d'utiliser une librairie avec Bacula, il est pr\'ef\'erable de v\'erifier 
"\`a la main" que le bras robotis\'e fonctionne. Pour ce faire, utilisez les commandes 
suivantes (\`a supposer que le script {\bf mtx-changer} est install\'e dans 
{\bf /etc/bacula/mtx-changer}) :

\begin{description}

\item [Assurez vous que Bacula est stopp\'e]

\item [/etc/bacula/mtx-changer \ /dev/sg0 \ list \ 0 \ /dev/nst0 \ 0]
\index[sd]{mtx-changer list}

Cette commande devrait afficher :  

\footnotesize
\begin{verbatim}
   1:
   2:
   3:
   ...
   
\end{verbatim}
\normalsize

soit un num\'ero suivi de deux points pour chacun des slots occup\'e dans la librairie. 
Si votre librairie a un lecteur de codes barres, celui-ci sera affich\'e apr\`es les 
deux points. Si un message d'erreur s'affiche, vous devez r\'esoudre le probl\`eme 
(par exemple, essayez un autre nom de p\'eriph\'erique si {\bf /dev/sg0} n'est pas 
le bon. PAr exemple, sur FreeBSD c'est g\'en\'eralement {\bf /dev/pass2}).

\item [/etc/bacula/mtx-changer \ /dev/sg0 \ slots \ 0 \ /dev/nst0 \ 0]
\index[sd]{mtx-changer slots}

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

\item [/etc/bacula/mtx-changer \ /dev/sg0 \ unload \ ]
\index[sd]{mtx-changer unload}

Si une cartouche est charg\'ee, cette commande devrait la d\'echarger.

\item [/etc/bacula/mtx-changer \ /dev/sg0 \ load \ 3 \ /dev/nst0 \ 0 ]
\index[sd]{mtx-changer load}

Si vous avez une cartouche dans le slot 3, elle sera charg\'ee dans le slot 
de lecture (0).

\item [/etc/bacula/mtx-changer \ /dev/sg0 \ loaded \ 0 \ /dev/nst0 \ 0]
\index[sd]{mtx-changer loaded}

devrait afficher "3"

\item [/etc/bacula/mtx-changer \ /dev/sg0 \ unload]
\end{description}

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

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

\footnotesize
\begin{verbatim}
#!/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
\end{verbatim}
\normalsize

S'il fonctionne correctement, vous n'\^etes sans doute pas concern\'e par ce 
probl\`eme. Sinon, commencez par ajouter {\bf sleep 30}  voire {\bf sleep 60} 
juste apr\`es la commande "/etc/bacula/mtx-changer /dev/sg0 load 3". Si 
\c{c}a marche, vous pouvez alors int\'egrer cette pause dans le script 
{\bf mtx-changer} afin qu'elle soit effective lorsque Bacula est ex\'ecut\'e. 

Quelques rares librairies exigent l'\'ejection de la cartouche avant de pouvoir 
la d\'echarger. Dan ce cas, la commande /etc/bacula/mtx-changer /dev/sg0 load 3 
ne fonctionne jamais, quel que soit la dur\'ee de la pause. Si vous pensez 
avoir ce probl\`eme, ins\'erez une commande "eject" juste avant la commande 
/etc/bacula/mtx-changer /dev/sg0 unload :

\footnotesize
\begin{verbatim}
#!/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
\end{verbatim}
\normalsize

Naturellement, si vous avez besoin de la commande {\bf offline}, vous devriez 
l'int\'egrer au script mtx-changer, en n'oubliant pas de pr\'eserver le code de 
sortie du script par l'ajout de {\bf exit 0}.

Comme indiqu\'e pr\'ec\'edemment, plusieurs scripts qui impl\'ementent ces fonctions 
sont regroup\'es dans {\bf \lt{}bacula-source\gt{}/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\^itre la pause dans le script {\bf mtx-changer}

\label{using}

\section{Utiliser la librairie}
\index[general]{Utiliser la librairie}
\index[general]{Librairie!Utiliser la }

Supposons que vous ayez convenablement d\'efini les directives Device du 
Storage Daemon, et que vous ayez ajout\'e la directive {\bf 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\`ede \`a ces cartouches ?

Une strat\'egie consiste \`a pr\'e-\'etiqueter chacune des cartouches. Pour cela, 
d\'emarrez Bacula, puis utilisez la commande {\bf label} dans la console :

\footnotesize
\begin{verbatim}
./console
Connecting to Director rufus:8101
1000 OK: rufus-dir Version: 1.26 (4 October 2002)
*label
\end{verbatim}
\normalsize

l'affichage devrait \^etre :

\footnotesize
\begin{verbatim}
Using default Catalog name=BackupDB DB=bacula
The defined Storage resources are:
     1: Autochanger
     2: File
Select Storage resource (1-2): 1
\end{verbatim}
\normalsize

Choisissez la librairie (choix 1), vous obtenez :

\footnotesize
\begin{verbatim}
Enter new Volume name: TestVolume1
Enter slot (0 for none): 1
\end{verbatim}
\normalsize

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

\footnotesize
\begin{verbatim}
Defined Pools:
     1: Default
     2: File
Select the Pool (1-2): 1
\end{verbatim}
\normalsize

S\'electionnez le pool Default (ce qui est fait automatiquement si vous 
n'avez que celui-l\`a). Bacula poursuit en d\'echargeant toute cartouche 
charg\'ee, en chargeant celle du slot 1 et en l'\'etiquetant. Dans cet exemple, 
le lecteur \'etait vide, il en r\'esulte l'affichage :

\footnotesize
\begin{verbatim}
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.
*
\end{verbatim}
\normalsize

Vous pouvez continuer \`a \'etiqueter les autres volumes, les messages 
changeront l\'eg\`erement du fait qu'il y aura cette fois une cartouche 
\`a d\'echarger avant de charger la suivante.

Une fois que tous vos volumes sont \'etiquet\'es, Bacula est en mesure de les 
charger lorsqu'il en a besoin. 

Pour "voir" votre \'etiquetage, saisissez la commande {\bf list volumes}  dans 
la console, vous devriez obtenir quelque chose comme :

\footnotesize
\begin{verbatim}
*{\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    |
| ...                                                                            |
+-------+----------+--------+---------+-------+--------+----------+-------+------+
\end{verbatim}
\normalsize

\label{Barcodes}

\section{Support des codes barres}
\index[general]{Support!codes barres}
\index[general]{Support des codes barres}

Bacula utilise les codes barres \`a travers deux commandes de la console : 
{\bf label barcodes} et {\bf update slots}.

La commande  {\bf label barcodes} ordonne \`a Bacula de lire tous les codes 
barres de toutes les cartouches pr\'esentes dans la librairie \`a l'aide de la 
commande {\bf mtx-changer} {\bf list}. Les cartouches sont ensuite mont\'ees 
l'une apr\`es l'autre pour \^etre \'etiquet\'e du nom de leur code barres.

La commande {\bf update slots} commence par obtenir du script {\bf mtx-changer}
la liste des cartouches et de leurs codes barres. Ensuite, il confronte 
chacune des valeurs du catalogues \`a cette liste afin de le mettre \`a 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\'e de magasin ou d\'eplac\'e des cartouches.

La directive {\bf Cleaning Prefix} peut \^etre utilis\'ee dans la ressource Pool pour 
d\'efinir un pr\'efixe de nom de volume qui, s'il correspond au code barres d'un volume 
conf\`ere \`a ce volume le statut (VolStatus) {\bf Cleaning}. Ceci \'evite que Bacula 
tente d'\'ecrire sur une cartouche de nettoyage.

\label{interface}

\section{Interface entre Bacula et les librairies}
\index[general]{Interface!Bacula et les librairies}
\index[general]{Interface entre Bacula et les librairies}

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

\footnotesize
\begin{verbatim}
- 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.
\end{verbatim}
\normalsize

Bacula contr\^ole le code de sortie du programme appel\'e. Si ce code est 0, les 
informations sont accept\'ees. Dans le cas contraire, elles sont ignor\'ees 
et le lecteur est trait\'e comme s'il n'\'etait pas dans une librairie.
