%%
%%

\chapter{Autochanger Unterst\"{u}tzung}
\label{AutochangersChapter}
\index[general]{Unterst\"{u}tzung!Autochanger }
\index[general]{Autochanger Unterst\"{u}tzung }

Bacula unterst\"{u}tzt Autochanger zum Lesen und Schreiben von Tapes.
Damit Bacula mit einem Autochanger arbeiten kann, m\"{u}ssen einige Voraussetzungen erf\"{u}llt sein,
die Details werden im folgenden gekl\"{a}rt.

\begin{itemize}
\item Ein Script das den Autochanger, gem\"{a}{\ss} den von Bacula gesendeten Kommandos, steuert.
   Bacula stellt solch ein Script in der {\bf depkgs} Distribution zur Verf\"{u}gung.

\item Jedes Volume (Tape) das benutzt wird, muss sowohl im Katalog definiert sein,
   als auch eine Slotnummer zugeteilt sein, nur so kann Bacula wissen, welches Volume
   aktuell im Autochanger verf\"{u}gbar ist.
   Normalerweise wird das mittels des {\bf label} Kommandos erreicht,
   weiter unten wird genauer darauf eingegangen.
   Volumes m\"{u}ssen manuell gelabelt werden, bevor sie benutzt werden k\"{o}nnen.

\item Die Konfigurationsdateien des Storage-Dienstes m\"{u}ssen angepasst werden,
   damit Device-Eintr\"{a}ge Autochangern zugeordnet werden k\"{o}nnen,
   sowie einige Parameter mehr. 

\item Sie sollten auch die Storage-Definitionen in der Director-Dienst-Konfiguration anpassen,
   so dass automatisch nachgefragt wird, welcher Slot genutzt werden soll, wenn ein Volume gelabelt wird.

\item Sie m\"{u}ssen sicherstellen, dass der Storage-Dienst (wenn er nicht als root ausgef\"{u}hrt wird)
   Zugriffsrechte auf die Laufwerks- und auf das Autochanger-Kontroll-Device hat.

\item Sie m\"{u}ssen {\bf Autochanger = yes} in der Storage-Definitionen des Director-Dienstes setzen,
   damit nach dem Slot gefragt wird wenn Sie Volumes labeln.
\end{itemize}

In Version 1.37 und sp\"{a}ter, gibt es eine neue \ilink{Autochanger-Konfiguration}{AutochangerRes}
die erlaubt, bestimmte Device-Eintr\"{a}ge zu gruppieren um einen Autochanger mit mehreren Laufwerken
zu konfigurieren. Diese Konfiguration m\"{u}ssen Sie benutzen, wenn Sie einen Autochanger verwenden wollen.

Bacula benutzt sein eigenes {\bf mtx-changer} Script als Interface zu dem Programm,
dass die Steuerung des Autochangers \"{u}bernimmt. {\bf mtx-changer} kann im Prinzip so angepasst werden,
dass es mit jedem Steuerungsprogramm f\"{u}r beliebige Autochanger funktioniert.
Die derzeitige Version von {\bf mtx-changer} arbeitet mit {\bf mtx}.
FreeBSD-Benutzer haben ein Script zur Verf\"{u}gung gestellt (im Verzeichnis {\bf examples/autochangers}),
dass Bacula {\bf chio} benutzen l\"{a}sst.

Bacula unterst\"{u}tzt Autochanger mir Barcode-Lesern,
dieses beinhaltet zwei Consolen-Kommandos: {\bf label barcodes} und {\bf update slots}.
Im Abschnitt "Barcode Unterst\"{u}tzung" (siehe unten) erfolgt eine detaillierte Beschreibung dieser Kommandos.

Momentan beinhaltet die Autochanger-Unterst\"{u}tzung keine Stacker und Silos,
und auch keine Laufwerks-Reinigung (Cleaning). Stacker und Silos werden nicht unterst\"{u}tzt,
da sie keinen wahlfreien Zugriff auf ihre Slots erlauben.
Unter Umst\"{a}nden schaffen Sie es vielleicht, einen Stacker (GravityFeed o. \"{a}.)
mit Bacula zum laufen zu bringen, indem Sie Ihre Konfiguration soweit anpassen, dass auf
den Autochanger nur sequentiell zugegriffen wird.
Die Unterst\"{u}tzung f\"{u}r Autochanger mit mehreren Laufwerken erfordert eine
Konfiguration wie in \ilink{Autochanger resource}{AutochangerRes} beschrieben.
Diese Konfiguration ist aber auch f\"{u}r Autochanger mit nur einem Laufwerk zu benutzen.

Wenn {\bf mtx} korrekt mit Ihrem Autochanger zusammenarbeitet,
dann ist es nur eine Frage der Anpassung des {\bf mtx-changer} Scripts (falls n\"{o}tig)
um den Autochanger mit Bacula zu benutzen.
Eine Liste mit von {\bf mtx} unterst\"{u}zten Autochangern, finden Sie unter folgendem Link:
\elink{http://mtx.opensource-sw.net/compatibility.php}{http://mtx.opensource-sw.net/compatibility.php}.
Die Homepage des {\bf mtx} Projekts ist:
\elink{http://mtx.opensource-sw.net/}{http://mtx.opensource-sw.net/}.

Anmerkung: wir haben R\"{u}ckmeldungen von einigen Benutzern erhalten,
die \"{u}ber gewisse Inkompatibilit\"{a}ten zwischen dem Linux-Kernel und mtx berichten.
Zum Beispiel zwischen Kernel 2.6.18-8.1.8.el5 von CentOS und RedHat und Version 1.3.10
und 1.3.11 von mtx. Ein Umstieg auf Kernel-Version 2.6.22 hat diese Probleme behoben.

Zus\"{a}tzlich scheinen einige Versionen von mtx, z.B. 1.3.11, die maximale Anzahl der Slots auf 64
zu begrenzen, Abhilfe schafft die Benutzung von mtx-Version 1.3.10.

Wenn Sie Probleme haben, benutzen Sie bitte das {\bf auto} Kommando im {\bf btape} Programm,
um die Funktionalit\"{a}t des Autochangers mit Bacula zu testen.
Bitte bedenken Sie, dass bei vielen Distributionen (z.B. FreeBSD, Debian, ...) der Storage-Dienst
nicht als Benutzer und Gruppe {\bf root} l\"{a}ft, sonder als Benutzer {\bf bacula} und Gruppe {\bf tape}.
In diesem Fall m\"{u}ssen Sie sicherstellen, das der Benutzer oder die Gruppe entsprechende Rechte hat,
um auf den Autochanger und die Laufwerke zuzugreifen.

Manche Benutzer berichten, dass der Storage-Dienst unter Umst\"{a}nden
beim laden eines Tapes in das Laufwerk blockiert, falls schon ein Tape im Laufwerk ist.
Soweit wir das ermitteln konnten, ist es einfache eine Frage der Wartezeit:
Das Laufwerk hat vorher ein Tape beschrieben und wird f\"{u}r eine ganze Zeit
(bis zu 7 Minuten bei langsamen Laufwerken) im Status BLOCKED verbleiben,
w\"{a}hrend das Tape zur\"{u}ckgespult und entladen wird, erst danach kann ein anderes
Tape in das Laufwerk geladen werden.

\label{SCSI devices}
\section{Zuordnung der SCSI Ger\"{a}te}
\index[general]{Zuordnung der SCSI Ger\"{a}te}
\index[general]{SCSI Ger\"{a}te}
\index[general]{Ger\"{a}te!SCSI}

Unter Linux k\"{o}nnen Sie:
\footnotesize
\begin{verbatim}
cat /proc/scsi/scsi
\end{verbatim}
\normalsize

ausf\"{u}hren, um zu sehen welche SCSI-Ger\"{a}te Sie haben.
Zudem k\"{o}nnen Sie:
\footnotesize
\begin{verbatim}
cat /proc/scsi/sg/device_hdr /proc/scsi/sg/devices
\end{verbatim}
\normalsize

benutzen, um herauszufinden, welches das Autochanger-Kontroll-Device ist,
({\bf /dev/sg0} f\"{u}r die erste Zeile, {\bf /dev/sg1} f\"{u}r die zweite, ...)
das Sie in der Konfiguration unter {\bf Changer Device = } angeben m\"{u}ssen.

F\"{u}r weiterf\"{u}hrende Information \"{u}ber SCSI-Ger\"{a}te, schauen Sie bitte in den Abschnitt
\ilink{Linux SCSI Tricks}{SCSITricks} aus dem Tape-Testing-Kapitel des Handbuchs.

Unter FreeBSD k\"{o}nnen Sie: 

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

benutzen, um SCSI-Ger\"{a}te und die Kontroll-Devices {\bf /dev/passn} des Autochangers anzuzeigen,
die Sie in der Konfiguration unter {\bf Changer Device = } angeben m\"{u}ssen.

Bitte stellen Sie sicher, dass der Storage-Dienst auf diese Ger\"{a}te zugreifen darf.

Der folgende Tipp f\"{u}r FreeBSD-Benutzer kommt von Danny Butroyd:
beim Neustart des Computers hat Bacula keine Berechtigung auf das Autochanger-Kontroll-Device
(z.B. /dev/pass0) zuzugreifen,
Um dies zu umgehen, editieren Sie die Datei /etc/devfs.conf und f\"{u}gen unten diese Zeilen hinzu:

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

Das gibt der Gruppe bacula, nur um sicher zu gehen, auch die Schreib-Berechtigung f\"{u}r das Ger\"{a}t nsa0.0.
Damit die neue Konfiguration wirksam wird, m\"{u}ssen Sie:

/etc/rc.d/devfs restart

ausf\"{u}hren.
Danach brauchen Sie nie wieder die Berechtigungen von Hand zu setzen, wenn der Computer neu gestartet wurde.

\label{scripts}
\section{Beispiel Scripte}
\index[general]{Scripte!Beispiel }
\index[general]{Beispiel Scripte }

Lesen Sie bitte den nachfolgenden Abschnitt, damit Sie verstehen wie Bacula mit Autochangern arbeitet.
Auch wenn Bacula ein standard {\bf mtx-changer} Script installiert, ben\"{o}tigen Sie f\"{u}r Ihren Autochanger
eventuell einige Anpassungen. Falls Sie Beispiele sehen wollen, schauen Sie bitte in das Verzeichnis
{\bf\lt{}bacula-src\gt{}/examples/devices}, wo Sie eine {\bf HP-autoloader.conf} Bacula-Ger\"{a}te-Konfiguration,
sowie mehrere {\bf mtx-changer} Scripte finden werden, die schon f\"{u}r unterschiedliche Autochanger angepasst sind.

\label{Slots}

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

Um den Autochanger richtig ansteuern zu k\"{o}nnen, muss Bacula wissen
welches Volume in welchem Slot des Autochangers ist. In den Slots werden die Tapes aufbewahrt,
die nicht in einem Laufwerk geladen sind. Bacula nummeriert diese Slots von eins bis zur Anzahl der
vorhandenen Tapes im Autochanger.

Bacula benutzt niemals ein Volume im Autochanger, dass nicht gelabelt ist, dem keine Slotnummer im Katalog
zugewiesen ist oder wenn das Volume nicht als InChanger im Katalog markiert ist. Bacula muss wissen wo das
Volume/Tape ist, sonst kann es nicht geladen werden.
Jedem Volume im Autochanger muss \"{u}ber das Console-Programm eine Slot-Nummer zugewiesen werden.
Diese Information wird im Katalog, zusammen mit anderen Informationen \"{u}ber das Volume, gespeichert.
Wenn kein Slot angegeben, oder der Slot auf Null gesetzt ist, wird Bacula das Volume nicht benutzen,
auch wenn alle anderen ben\"{o}tigten Konfigurationsparameter richtig gesetzt sind.
Wenn Sie das {\bf mount} Console-Kommando ausf\"{u}hren, m\"{u}ssen Sie angeben welches Tape aus welchem Slot
in das Laufwerk geladen werden soll. Falls schon ein Tape im Laufwerk ist, wird es entladen und danach das
beim {bf\ mount} angegeben Tape geladen. Normalerweise wird kein anderes Tape im Laufwerk sein, da Bacula beim 
{\bf unmount} Console-Kommando das Laufwerk leert.

Sie k\"{o}nnen die Slot-Nummer und die InChanger-Markierung \"{u}berpr\"{u}fen, indem Sie:
\begin{verbatim}
list Volumes
\end{verbatim}
im Consolen-Programm ausf\"{u}hren.

\label{mult}
\section{mehrere Laufwerke}
\index[general]{Laufwerke!mehrere }
\index[general]{mehrere Laufwerke }

Einige Autochanger haben mehr als ein Laufwerk. Die in Version 1.37 vorgestellte \ilink{Autochanger-Konfiguration}{AutochangerRes}, erlaubt Ihnen mehrere Ger\"{a}te-Konfigurationen,
die jeweils einem Laufwerk entsprechen, zu einem Autochanger zu gruppieren. Der Director-Dienst k\"{o}nnte trotzdem
die Laufwerke direkt ansprechen, aber dies zu erlauben, w\"{u}rde die einwandfreie Zusammenarbeit der Laufwerke
einschr\"{a}nken. Anstelle dessen sollte dem Director-Dienst, in der Director-Storage-Konfiguration, eine Autochanger-Konfiguration zugewiesen werden. Dieses erlaubt dem Storage-Dienst sicherzustellen, dass nur auf
ein Laufwerk zur Zeit vom {\bf mtx-changer} Script zugegriffen wird und nicht beide Laufwerke auf dasselbe Volume verweisen.

Mehrere Laufwerke erfordern das Setzen des {\bf Drive Index} in den Ger\"{a}te-Eintr\"{a}gen der
Storage-Dienst-Konfiguration.
Laufwerks-Nummern bzw. der {\bf Drive Index} beginnen standardm\"{a}{\ss}ig bei Null.
Um mit dem zweiten Laufwerk im Autochanger arbeiten zu k\"{o}nnen, muss ein weiterer Ger\"{a}te-Eintrag
erstellt werden, wobei der {\bf Drive Index} dann Eins ist.
Normalerweise wird das zweite Laufwerk dasselbe {\bf Changer Device} verwenden,
aber ein anderes {\bf Archive Device}.

Bacula Jobs werden bevorzugt auf das Volume geschrieben, dass schon in einem Laufwerk geladen ist.
Wenn Sie mehrere Laufwerke haben und Bacula auf mehreren Laufwerke gleichzeitig Jobs,
die denselben Pool verwenden, schreiben soll, muss der Parameter \ilink{Prefer Mounted Volumes} {PreferMountedVolumes}
in der Director-Dienst-Konfiguration in den entsprechenden Job-Eintr\"{a}gen auf "no" gesetzt werden.
Der Storage-Dienst wird daraufhin so viele Volumes wie m\"{o}glich in die Laufwerke laden.

\label{ConfigRecords}
\section{Ger\"{a}te-Konfigurations-Parameter}
\index[general]{Parameter!Ger\"{a}te-Konfiguration }
\index[general]{Ger\"{a}te-Konfigurations-Parameter }

Bacula's Autochanger-Konfiguration wird in den Ger\"{a}te-Eintr\"{a}gen des Storage-Dienstes festgelegt.
Vier Parameter: {\bf Autochanger}, {\bf Changer Device},{\bf Changer Command}, und {\bf Maximum Changer Wait}
steuern wie Bacula den Autochanger benutzt.

Diese vier Parameter der {\bf Device}-Konfiguration, sind unten detailiert beschrieben.
{\bf Changer Device} und {\bf Changer Command} werden in der Gr\"{a}te-Konfiguration nicht ben\"{o}tigt,
wenn sie in der {\bf Autochanger}-Konfiguration stehen.

\begin{description}

\item [Autochanger = {\it Yes|No} ]
   \index[sd]{Autochanger  }
   Der {\bf Autochanger}-Parameter gibt an, ob der Ger\"{a}te-Eintrag einen Autochanger beschreibt oder nicht.
   Der Standardwert ist Autochanger = No.

\item [Changer Device = \lt{}device-name\gt{}]
   \index[sd]{Changer Device  }
   Zus\"{a}tzlich zu dem Archive Device Eintrag, muss das {\bf Changer Device} angegeben werden.
Das ist notwendig, weil die meisten Autochanger \"{u}ber ein anderes Ger\"{a}t gesteuert werden,
als f\"{u}r das Schreiben und Lesen der Volumes verwendet wird.
Ein Beispiel: unter Linux wird normalerweise das generische SCSI-Interface zum Steuern des Autochangers verwendet,
w\"{a}rend das standard SCSI-Interface f\"{u}r Lese- und Schreibvorg\"{a}ge genutzt wird.
F\"{u}r das {\bf Archive Device = /dev/nst0} hat man dann typischerweise das {\bf Changer Device = /dev/sg0}.
Gr\"{o}{\ss}ere Autochanger, mit mehreren Laufwerken und vielen Slots, k\"{o}nnen das Kontroll-Device
auch auf z.B. {\bf Changer Device = /dev/sg2} haben.

Unter FreeBSD liegt das Kontroll-Device zwischen {\bf /dev/pass0} und {\bf /dev/passn}.

Unter Solaris finden Sie das Kontroll-Device im Verzeichnis {\bf /dev/rdsk}.

Stellen Sie bitte sicher, dass der Storage-Dienst die notwendigen Rechte besitzt,
um auf die entsprechenden Ger\"{a}te zugreifen zu d\"{u}rfen.

\item [Changer Command = \lt{}command\gt{}]
   \index[sd]{Changer Command  }
   Dieser Parameter gibt an, welches externe Kommando und mit welchen Argumenten,
aufgerufen wird, um den Autochanger zu steuern.
Es wird vorausgesetzt, dass dieses Kommando ein normales Programm oder Shell-Script ist,
das vom betriebssystem ausgef\"{u}hrt werden kann.
Dieses Kommando wird jedesmal augerufen, wenn Bacula das Autochanger-Kontroll-Device ansprechen m\"{o}chte.
Die folgenden Ersetzungen werden durchgef\"{u}hrt, bevor das {\bf command} dem Betriebssystem zur
Ausf\"{u}hrung \"{u}bergeben wird:

\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

Hier ist ein Beispiel f\"[{u}r die Benutzung von {\bf mtx} mit dem {\bf mtx-changer} Script,
dass in der Bacula-Distribution enthalten ist:

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

Falls das {\bf mtx-changer} Script nicht in {\bf /etc/bacula} liegt,
m\"{u}ssen Sie den Pfad entsprechend anpassen,
Einzelheiten zu den drei von Bacula benutzten Kommandos (loaded, load, unload),
sowie zu den von Bacula erwarteten Ausgaben des {\bf mtx-changer} Scripts,
werden weiter unten im Abschnitt {\bf Bacula Autochanger Schnittstelle} beschrieben..

\item [Maximum Changer Wait = \lt{}time\gt{}]
   \index[sd]{Maximum Changer Wait  }
   Dieser Parameter gibt an, wie lange Bacula maximal warten soll,
bis der Autochanger auf ein Kommando (z.B. load) reagiert.
Der Standardwert betr\"{a}gt 120 Sekunden. Wenn Sie einen langsamen Autochanger haben,
m\"{u}ssen Sie hier eventuell eine l\"{ä}ngere Zeit konfigurieren.

Wenn der Autochanger nicht innerhalb der {\bf Maximum Changer Wait} Zeit antwortet,
wird das Kommando abgebrochen und Bacula wird das Eingreifen des Bedieners verlangen.

\item [Drive Index = \lt{}number\gt{}]
   \index[sd]{Drive Index  }
   Dieser Parameter gibt die Nummer des Laufwerks innerhalb des Autochangers an.
Da die Nummerierung bei Null beginnt, wird das zweite Laufwerk mit folgendem Eintrag angegeben:

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

Um das zweite Laufwerk nutzen zu k\"{o}nnen, muss ein zweiter Device-Eintrag in der Konfigurationsdatei des
Storage-Dienstes erstellt werden. Einzelheiten dazu stehen, weiter oben in diesem Kapitel, in dem Abschnitt
{\bf mehrere Laufwerke} 
\end{description}

Damit der Autochanger zuverl\"{a}{\ss}ig funktioniert, muss zus\"[a}tzlich ein Autochanger-Eintrag erstellt werden.
\input{autochangerres}

\label{example}
\section{eine Beispiel-Konfigurationsdatei}
\index[general]{Beispiel-Konfigurationsdatei}
\index[general]{Datei!Beispiel Konfiguration }

Die folgenden beiden Konfigurations-Eintr\"{a}ge realisieren einen Autochanger:

\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

Wobei Sie {\bf Archive Device}, {\bf Changer Device} und den Pfad zum
{\bf Changer Command} Ihrem System entsprechend anpassen m\"{u}ssen.

\section{eine Beispiel-Konfigurationsdatei f\"{u}r mehrere Laufwerke}
\index[general]{Beispiel-Konfigurationsdatei f\"{u}r mehrere Laufwerke}

Die folgenden Konfigurations-Eintr\"{a}ge realisieren einen Autochanger mit mehreren Laufwerken:

\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

Wobei Sie {\bf Archive Device}, {\bf Changer Device} und den Pfad zum
{\bf Changer Command} Ihrem System entsprechend anpassen m\"{u}ssen.

\label{SpecifyingSlots}
\section{Festlegen der Slots beim Labeln}
\index[general]{Festlegen der Slots beim Labeln }
\index[general]{Labeln!Festlegen der Slots }

Wenn Sie einen {\bf Autochanger = yes} Eintrag in Ihrer Storage-Konfiguration des
Director-Dienstes hinzugef\"{u}gt haben, wird die Bacula Console Sie bei diesen beiden Kommandos
{\bf add} und {\bf label} automatisch nach einem Slot f\"{u}r die jeweilige Aktion fragen.
Beim {\bf label} Kommando wird Bacula automatisch das richtige Volume in ein Laufwerk laden.
  
Au{\ss}erdem muss, wie oben beschrieben, der Parameter {\bf Autochanger = yes} in der Ger\"{a}te-Konfiguration
des Storage-Dienstes vorhanden sein, damit der Autochanger benutzt werden kann.
N\"{a}here Informationen zu diesen Parametern finden Sie in der \ilink{Storage Konfiguration}{Autochanger1}
des Director-Kapitels und in \ilink{Device Konfiguration}{Autochanger} des Storage-Kapitels.

Somit k\"{o}nnen alle Aktionen mit dem Autochanger komplett automatisiert werden.
Zudem ist es m\"{o}glich mit dem Men\"{u}punkt {\bf Volume Parameters} des Consolen-Kommandos {\bf update} den Slot
zu setzen und zu \"{a}ndern.

Selbst wenn alle oben genannten Konfigurationen und Parameter richtig angegeben sind,
wird Bacula nur dann korrekt mit den Volumes im Autochanger arbeiten, wenn
den Volume-Eintr\"{a}ge im Katalog, die den Tapes im Autochanger entsprechenden,
auch eine {\bf slot}-Nummer zugewiesen ist.

Wenn Ihr Autochanger Barcodes unterst\"{u}tzt, k\"{o}nnen Sie alle Volumes im Autochanger,
eins nach dem anderen, labeln indem Sie das Console-Kommando {\bf label barcodes} verwenden.
Jedes Tape mit Barcode, wird von Bacula in ein Laufwerk geladen und dann mit dem selben Namen gelabelt,
der auch auf dem Barcode steht. Gleichzeitig wird ein Katalog-Eintrag f\"{u}r das Volume angelegt.
Wenn der Barcode mit der Zeichenkette beginnt, die als {\bf CleaningPrefix= } konfiguriert ist,
wird Bacula das Tape f\"{u}r ein Reinigungsband halten und es wird nicht versucht das Tape zu labeln.
Ein Beispiel:

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

Jedes Volume mit einem Barcode wie CLNxxxxx wird als Reinigungsband behandelt und nicht gelabelt.

Bitte bedenken Sie, dass jedes Volume, dass der Autochanger automatisch benutzen soll, bereits vor-gelabelt sein muss.
Wenn Sie keinen Barcode-Leser haben, muss das von Hand geschehen (oder durch ein Script).

\section{Tape-Wechsel}
\index[general]{Tapewechsel }
Wenn Sie Tapes dem Autochanger entnehmen oder hinzuf\"{u}gen wollen,
oder das {\bf mtx} Kommando von Hand aufrufen wollen,
m\"{u}ssen Sie Bacula den Autochanger freigeben lassen,
indem Sie folgendes Console-Kommando ausf\"{u}hren:

\footnotesize
\begin{verbatim}
unmount
(wechseln der Tapes und/oder mtx ausf\"{u}hren
mount
\end{verbatim}
\normalsize

Wenn Sie den Autochanger nicht freigeben, weiss Bacula
nach dem Tapewechsel nicht mehr, welches Volume in welchen Slot des Autochanger ist
und wird nicht mehr korrekt mit dem Autochenger arbeiten k\"{o}nnen.
Bacula geht immer davon aus, dass es exklusiven Zugriff auf den Autochanger hat,
solange ein Laufwerk gemountet ist.


\label{Magazines}
\section{Arbeiten mit mehreren Magazinen}
\index[general]{Arbeiten mit mehreren Magazinen }
\index[general]{Magazine!Arbeiten mit mehreren }

Wenn Sie mehrere Magazine haben, oder wenn Sie Tapes in den Magazinen tauschen,
m\"{u}ssen Sie Bacula dar\"{u}ber informieren. Bacula wird immer die Tapes im Autochanger
bevorzugt vor anderen Tapes benutzen, somit werden Bedienereingriffe minimiert.

Wenn Ihr Autochanger mit Barcodes (maschinenlesbare Tape Labels) arbeitet,
ist der Schritt, Bacula \"{u}ber die im Autochanger verf\" {u}gbaren Tapes zu informieren, sehr einfach.
Jedesmal wenn Sie ein Magazin wechseln, oder Tapes aus dem Magazine entfernen bzw. hinzuf\"{u}gen,
f\"{u}hren Sie einfach:

\footnotesize
\begin{verbatim}
unmount
(Magazin/Tapes wechseln)
update slots
mount
\end{verbatim}
\normalsize

im Console-Programm aus. Daraufhin wird Bacula den Autochanger nach einer aktuellen Liste
der in den Magazinen verf\"{u}gbaren Tapes fragen. Bei diesem Vorgang werden keine Tapes gelesen,
diese Informationen werden vom Autochanger w\"{a}hrend des Inventory ermittelt.
Bacula aktualisiert die Volume-Eintr\"{a}ge im Katalog, so dass bei allen in den Magazinen vorhandenen Tapes
das {\bf InChanger} Flag und auch die Slot-Nummern richtig gesetzt werden.

Falls Sie keinen Barcode-Leser im Autochanger haben, gibt es mehrere andere M\"{o}glichkeiten.

\begin{enumerate}
\item Sie k\"{o}nnen den Slot und das {\bf InChanger} Flag manuell setzen, indem Sie das {\bf update volume}
Consolen-Kommando verwenden (sehr umst\"{a}ndlich).

\item Sie k\"{o}nnen das

\footnotesize
\begin{verbatim}
update slots scan
\end{verbatim}
\normalsize

   Consolen-Kommando ausf\"{u}hren. Daraufhin wird Bacula jedes Tape nacheinander in ein Laufwerk laden,
   das Tape Label lesen und den Katalog (Slot, InChanger-Flag) aktualisieren.
   Dieses Vorgehen ist zwar wirkungsvoll, aber auch sehr langsam.

\item Sie k\"{o}nnen das {\bf mtx-changer} Script anpassen, damit es die Barcodes im Autochanger simuliert (siehe unten).
\end{enumerate}

\label{simulating}
\section{Simulieren von Barcodes im Autochanger}
\index[general]{Autochanger!Simulieren von Barcodes im }
\index[general]{Simulieren von Barcodes im Autochanger }

Sie k\"{o}nnen die Barcodes im Autochanger simulieren, indem Sie das {\bf mtx-changer} Script so anpassen,
dass es die selben Informationen zur\"{u}ckgibt, die ein Autochanger mit Barcodes liefert.
Dazu wird die folgende Zeile im {\bf mtx-changer} Script:

\footnotesize
\begin{verbatim}
  ${MTX} -f $ctl status |
             grep " *Storage Element [0-9]*:.*Full" |
                   awk "{print \$3 \$4}" | sed "s/Full *\(:VolumeTag=\)*//"
\end{verbatim}
\normalsize
(Der Zeilenumbruch dient hier nur der Darstellung, im {\bf mtx-changer} Script ist es eine Zeile)

durch ein \# auskommentiert oder einfach gel\"{o}scht (Zeilennummer ist ungef\"{a}hr 99).
An ihrer Stelle wird eine neue Zeile erstellt, die den Inhalt einer Datei ausgibt.
Zum Beispiel:

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

Stellen Sie sicher, dass Sie den kompletten Pfad zur Datei angeben, Ort und Name der Datei sind egal.
Die Inhalt der Datei muss folgenden Beispiel entsprechen:

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

Wobei die 1, 2 und 3 die Slot-Nummern und Volume1, Volume2 und Volume3 die Namen (bzw. Barcodes) sind.
Sie k\"{o}]nnen mehrere Datei erstellen, die den Tapes in verschiedenen Magazinen entsprechen und beim Wechsel
der Magazine einfach die f\"{u}r das Magazine g\"{u}ltige Datei in die {\bf /etc/bacula/changer.volumes} kopieren.
Sie brauchen Bacula nicht neu zu starten, wenn Sie Magazine wechseln, nur die Datei muss den richtigen Inhalt haben.
Wenn Sie dann das Console-Kommando {\bf update slots} ausf\"{u}hren, wird Ihr Autochanger f\"{u}r Bacula so erscheinen,
als ob er Barcodes unterst\"{u}tzen w\"{u}rde.


\label{updateslots}
\section{Alle Parameter des Update Slots Kommandos}
\index[general]{Alle Parameter des Update Slots Kommandos }
\index[general]{Kommandos!alle Parameter des Update Slots }

Wenn Sie ncht alle Slots \"{u}berpr\"{u}fen lassen wollen, nur weil Sie ein Tape im Magazin getauscht haben,
k\"{o}nnen Sie das Consolen-Kommando {\bf update slots}, genauso wie das Kommando {\bf update slots scan},
mit zus\"{a}tzlichen Parametern aufrufen:

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

wobei der Parameter {\bf scan} optional ist. Die Parameter n1, n2, n3-n7... geben die Slots an,
wobei n1, n2 f\"{u}r einzelne Slots und n3-n7 f\"{u}r einen Bereich von Slots steht (n3 bis n7).

Diese Parameter sind n\"{u}tzlich, wenn Sie {\bf update slots scan} (sehr langsam) ausf\"{u}hren und dabei
die Slots auf die mit gewechselten Tapes begrenzen k\"{o}nnen.

Als Beispiel, das Console-Kommando :

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

veranlasst Bacula, das Tape im ersten Slot des Autochangers in ein Laufwerk zu laden, das Label zu lesen und den
Katalog entsprechend zu aktualisieren.
Danach passiert dasselbe mit dem Tape im sechsten Slot.
Das Console-Kommando:

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

liest die Barcodes der Tapes in den Slots 1, 2, 3 und 6 und aktualisiert den Katalog.
Wenn Ihr Autochanger keinen Barcode-Leser hat und Sie das {\bf mtx changer} Script nicht, wie oben beschrieben,
angepasst haben, wird dieses Console-Kommando keine Tapes finden und folglich nichts tun.

\label{FreeBSD}
\section{FreeBSD Belange}
\index[general]{Belange!FreeBSD }
\index[general]{FreeBSD Belange }

Falls unter FreeBSD Probleme auftreten, wenn Bacula versucht auf ein Laufwerk zuzugreifen 
und folgende Fehlermeldung erscheint: {\bf Device not configured},
passiert dass weil FreeBSD den Ger\"{a}te-Eintrag {\bf /dev/nsa1} entfernt, wenn kein Tape im Laufwerk ist.
Das hat zur Folge, dass Bacula das Ger\"{a}t nicht \"{o}ffnen kann. Die L\"{o}sung f\"{u}r dieses Problem ist es,
sicherzustellen, dass immer ein Tape im Laufwerk ist, wenn Bacula gestartet wird.
Diese Problem ist in den Bacula-Versionen 1.32f-5 und sp\"{a}ter behoben.

Beachten Sie bitte das Kapitel \ilink{Laufwerk-Tests}{FreeBSDTapes} bevor Sie den Autochanger testen,
dort finden Sie weitere {\bf wichtige} Informationen die Laufwerke betreffend.

\label{AutochangerTesting}
\section{Autochanger-Test und Anpassung des mtx-changer Scripts}
\index[general]{Autochanger-Test }
\index[general]{Anpassung des mtx-changer Scripts}


Bevor Sie den Autochanger gleich mit Bacula ausprobieren, ist es vorzuziehen, zuerst von Hand
zu testen ob er richtig funktioniert.
Um das zu tun, empfehlen wir, dass Sie die folgenden Kommandos ausf\"{u}hren (wobei angenommen wird,
dass das {\bf mtx-changer} Script unter {\bf /etc/bacula/mtx-changer} liegt):

\begin{description}

\item [Stellen Sie sicher, dass Bacula nicht l\"{a}uft.]

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

Das Kommando sollte diese Ausgabe erzeugen:

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

eine oder mehrere Zeilen f\"{u}r jeden belegten Slot im Autochanger,
wobei hinter jeder Zahl ein Doppelpunkt ({\bf :}) stehen muss.
Wenn Ihr Autochanger Barcodes unterst\"{u}tzt, steht hinter dem Doppelpunkt der Barcode.
Falls ein Fehler autritt, muss die Ursache gefunden werden
(versuchen Sie z.B. ein anderes Kontroll-Device zu verwenden, falls {\bf /dev/sg0} falsch ist).
Unter FreeBSD z.B. liegt das Kontroll-Device gew\"{o}hnlich auf {\bf /dev/pass2}.

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

Das Kommando sollte die Anzahl der Slots im Autochanger anzeigen.

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

   Falls das Tape aus Slot 1 in einem Laufwerk geladen ist, sollte es jetzt entladen werden.

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

Angenommen in Slot 3 ist ein Tape, dann wird es jetzt in das erste Laufwerk geladen (\bf Drive Index = 0)

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

Dieses Kommando sollte jetzt 3 ausgeben (Die Slot-Nummer des in Laufwerk 0 geladenen Tapes.).
Beachten Sie, dass wir im Kommando eine ung\"{u}ltige Slotnummer 0 verwendet haben.
In diesem Fall, wird sie einfach ignoriert, weil sie nicht ben\"{o}tigt wird.
Allerdings musste eine Slot-Nummer angegeben werden, weil der Laufwerksparameter
am Ende des Kommandos erforderlich war, um das richtige Laufwerk zu w\"{a}hlen.

\item [/etc/bacula/mtx-changer \ /dev/sg0 \ unload \ 3 /dev/nst0 \ 0]

wird das Laufwerk mit {\bf Drive Index = 0} in Slot 3 entladen.

\end{description}

Nachdem alle oben genannten Kommandos funktionieren und in der
Storage-Dienst-Konfiguration auch das richtige {\bf Changer Command} angegeben ist,
sollte Bacula jetzt mit Ihrem Autochanger arbeiten k\"{o}nnen.
Das letzte verbleibende Problem ist, dass der Autochanger einige Zeit ben\"{o}tigt,
das Tape zu laden, nachdem das entsprechende Kommando abgesetzt wurde.
Wenn sich das {\bf mtx-changer} Script nach dem load-Kommando beendet,
wird Bacula sofort versuchen das Tape zur\"{u}ckzuspulen und zu lesen.
Wenn Bacula Ein-/Ausgabe-Fehler nach dem Laden des Tapes meldet, werden Sie eventuell eine
Verz\"{o}gerungszeit (z.B. {\bf sleep 20}) im {\bf mtx changer} Script nach dem {\bf mtx} Kommando
einf\"{u}gen m\"{u}ssen. Bitte bedenken Sie, dass egal was Sie dem {\bf mtx changer} Script an Kommandos
hinzuf\"{u}gen, sich das Script immer mit {\bf exit 0} beendet.
Bacula \"{u}berpr\"{u}ft den R\"{u}ckgabewert des Script nach jedem Aufruf und er muss immer 0 sein,
wenn alles geklappt hat.

Ob Sie eine {\bf sleep}-Zeit im Script angeben m\"{u}ssen, k\"{o}nnen Sie mit folgenden
Kommandos \"{u}berpr\"{u}fen, indem Sie sie in ein Script schreiben und ausf\"{u}hren.

\footnotesize
\begin{verbatim}
#!/bin/sh
/etc/bacula/mtx-changer /dev/sg0 unload 1 /dev/nst0 0
/etc/bacula/mtx-changer /dev/sg0 load 3 /dev/nst0 0
mt -f /dev/st0 rewind
mt -f /dev/st0 weof
\end{verbatim}
\normalsize

Wenn das Script funktioniert, haben Sie wahrscheinlich keine zeitlichen Probleme.
Wenn es nicht funktioniert, tragen Sie, direkt hinter dem mtx-changer load Kommando,
{\bf sleep 30} oder auch {\bf sleep 60} ein. Wenn es damit funktioniert,
\"{u}bernehmen Sie den passenden {\bf sleep}-Eintrag in das {\bf mtx-changer} Script,
so wird diese Verz\"{o}gerungszeit jedesmal angewendet, wenn Bacula das Script aufruft.

Ein zweites Problem, dass einige Autochanger betrifft, ist dass die Laufwerke diese Autochanger das Tape
auswerfen m\"{u}ssen, bevor es aus dem Laufwerk entfernt werden kann. Falls das zutrifft, wird das Kommando
{\bf load 3} niemals erfolgreich beendet werden, egal wie lange Sie warten.
In diesem Fall, k\"{o}nnen Sie ein Auswurf-Kommando direkt hinter das {\bf unload} setzen,
so dass das Script dann so aussieht:

\footnotesize
\begin{verbatim}
#!/bin/sh
/etc/bacula/mtx-changer /dev/sg0 unload 1 /dev/nst0 0
mt -f /dev/st0 offline
/etc/bacula/mtx-changer /dev/sg0 load 3 /dev/nst0 0
mt -f /dev/st0 rewind
mt -f /dev/st0 weof
\end{verbatim}
\normalsize

Nat\"{u}rlich m\"{u}ssen Sie das {\bf offline} Kommando in das {\bf mtx changer} Script \"{u}bernehmen,
falls es das Problem behebt. Da Bacula den R\"{u}ckgabewert des {\bf mtx changer} Scripts \"{u}berpr\"{u}ft,
stellen sie wiederum sicher, dass er immer 0 ist, bzw. das der R\"{u}ckgabewert des {\bf mtx} Kommandos an
Bacula \"{u}bergeben wird.

Wie vorher schon angemerkt, sind im Verzeichnis {\bf \lt{}bacula-source\gt{}/examples/devices} mehrere
Scripte, die die oben genannten Kommandos bereits enthalten. Sie k\"{o}nnen eine Hilfe sein, um Ihr Script
zum laufen zu bringen.

Wenn Bacula den Fehler {\bf Rewind error on /dev/nst0. ERR=Input/output error.} ausgibt,
werden Sie in den meisten F\"{a}llen eine l\"{a}ngere {\bf sleep}-Zeit in Ihrem {\bf mtx-changer} Script
hinzuf\"{u}gen m\"{u}ssen, bevor es nach dem {\bf load} Kommando beendet wird.

\label{using}
\section{Arbeiten mit dem Autochanger}
\index[general]{Arbeiten mit dem Autochanger }
\index[general]{Autochanger!Arbeiten mit dem  }

Angenommen, Sie haben alle notwendigen Storage-Dienst-Device-Eintr\"{a}ge richtig konfiguriert
und Sie haben einen {\bf Autochanger = yes} Eintrag zu der Storage-Konfiguration im Director-Dienst
hinzuge\"{u}gt.

Jetzt f\"{u}llen Sie Ihren Autochanger mit, zum Beispiel, 6 leeren Tapes.

Was muss passieren, damit Bacula auf diese Tapes zugreifen kann?

Eine M\"{o}glichkeit ist, dass jedes Tape vorgelabelt wird. Starten Sie Bacula und
f\"{u}hren Sie das Console-Programm aus, innerhalb des Console-Programms verwenden Sie das Kommando {\bf label}:

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

wird etwas \"{a}hnliches wie hier ausgeben:

\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

W\"{a}hlen Sie den Autochanger und es erscheint:

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

geben Sie {\bf Testvolume1} f\"{u}r den Tape-Namen ein und {\bf 1} f\"{u}r den Slot.
Bacula fragt:

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

W\"{a}hlen Sie den Default Pool. Das wird automatisch gemacht, wenn Sie nur einen Pool haben.
Nun wird Bacula damit beginnen, das ben\"{o}tigte Laufwerk zu entladen und 
das Tape aus Slot 1 in das Laufwerk zu laden und als Testvolume1 zu labeln.
In diesem Beispiel war kein Tape im Laufwerk, die Ausgabe sieht dann so aus:

\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

Sie k\"{o}nnen dann damit fortfahren, die andern Tapes zu labeln.
Die Ausgaben werden etwas anders aussehen, weil Bacula dann erst das
vorherige, gerade gelabelte Tape, aus dem Laufwerk entladen muss,
bevor das neue Tape geladen werden kann.

Wenn Sie alle Tapes gelabelt haben, wird Bacula sie automatisch verwenden, wenn sie ben\"{o}tigt werden.

Um nachzusehen, wie die Tapes gelabelt sind, geben Sie einfach das Console-Kommando {\bf list volumes} ein,
das wird eine Liste, wie die folgende ausgeben:

\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{Barcode Unterst\"{u}tzung}
\index[general]{Unterst\"{u}tzung!Barcode }
\index[general]{Barcode Unterst\"{u}tzung }

Bacula unterst\"{u}tzt Barcodes mit zwei Console-Kommandos:
{\bf label barcodes} und {\bf update slots}.

Das Kommando {\bf label barcodes} bewirkt, dass Bacula mittels des {\bf mtx-changer} {\bf list}
Kommandos die Barcodes der Tapes in allen Slots einliest. Danach wird jedes Tape, eins nach dem anderen,
mit dem Namen gelabelt, den der Barcode enth\"{a}lt.

Das {\bf update slots} Kommando holt, \"{u}ber das {\bf mtx-changer} Script, zuerst eine Liste aller Tapes und deren Barcodes. Dann versucht es im Katalog die entsprechenden Tapes zu finden und aktualisiert
den {\bf Slot} und das {\bf InChanger} Flag. Falls das Tape nicht im Katalog gelistet ist, passiert nichts.
Diese Kommando wird ben\"{o}tigt, um die Volume-Eintr\"{a}ge im Katalog mit den tats\"{a}chlich im Autochanger
zur Verf\"{u}gung stehenden Tapes abzugleichen, nachdem Tapes gewechselt oder in andere Slots verschoben wurden.

Die Angabe des {\bf Cleaning Prefix} kann in der Pool-Konfiguration benutzt werden, um anzugeben welche
Tapes (Barcodes) im Katalog mit dem {\bf VolStatus} {\bf Cleaning} gekennzeichnet werden sollen.
Das verhindert, dass Bacula versucht auf dem Tape zu schreiben.

\label{interface}
\section{Bacula Autochanger Schnittstelle}
\index[general]{Schnittstelle!Bacula Autochanger }
\index[general]{Bacula Autochanger Schnittstelle }

Bacula ruft das Autochanger-Script auf, dass Sie als  {\bf Changer Command} angegeben haben.
Normalerweise ist es das von Bacula mitgelieferte {\bf mtx-changer} Script,
aber tats\"{a}chlich kann es auch jedes andere Programm sein.
Die einzige Anforderung ist, dass es die Kommandos die Bacula benutzt,
{\bf loaded}, {\bf load}, {\bf unload}, {\bf list} und {\bf slots}, unterst\"{u}tzt.
Ausserdem muss jedes dieser Kommandos genau diese R\"{u}ckgabewerte liefern:

\footnotesize
\begin{verbatim}
- Die momentan benutzten Autochanger-Kommandos sind:
    loaded -- gibt, ab 1 beginnet, die Nummer des im Laufwerk geladenen Slot zur\"{u}ck,
              bzw. 0 wenn das Laufwerk leer ist.
    load   -- l\"{a}dt das Tape aus dem angegebenen Slot in das Laufwerk (einige Autochanger
              ben\"{o}tigen eine 30-sek\"{u}ndige Pause nach diesem Kommando)
    unload -- entl\"{a}dt das Tape aus dem Laufwerk zur\"{u}ck in den Slot
    list   -- gibt eine Zeile pro Tape im Autochanger aus.
              Das Format ist: <Slot>:<Barcode>. Wobei
              der {\bf Slot} eine Zahl (nicht null) ist, die der Slot-Nummer entspricht,
	      und {\bf Barcode} ist, falls vorhanden, der Barcode des Tapes,
	      ansonsten ist {\bf Barcode} leer.
     slots -- gibt die absolute Anzahl der Slots im Autochanger zur\"{u}ck.
\end{verbatim}
\normalsize

Bacula \"{u}berpr\"{u}ft den R\"{u}ckgabewert des aufgerufenen Programms,
wenn er Null ist, werden die gelieferten Daten akzeptiert.
Wenn der R\"{u}ckgabewert nicht Null ist, wird eine entsprechende Fehlermeldung ausgegeben und
Bacula wird ein manuelles laden des Tapes in das laufwerk erwarten.

