Unterabschnitte


Autochanger Unterstützung

Bacula unterstützt Autochanger zum Lesen und Schreiben von Tapes. Damit Bacula mit einem Autochanger arbeiten kann, müssen einige Voraussetzungen erfüllt sein, die Details werden im folgenden geklärt.

In Version 1.37 und später, gibt es eine neue Autochanger-Konfiguration die erlaubt, bestimmte Device-Einträge zu gruppieren um einen Autochanger mit mehreren Laufwerken zu konfigurieren. Diese Konfiguration müssen Sie benutzen, wenn Sie einen Autochanger verwenden wollen.

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

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

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

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

Anmerkung: wir haben Rückmeldungen von einigen Benutzern erhalten, die über gewisse Inkompatibilitä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ä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 auto Kommando im btape Programm, um die Funktionalitä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 root läuft, sonder als Benutzer bacula und Gruppe tape. In diesem Fall mü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ä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ür eine ganze Zeit (bis zu 7 Minuten bei langsamen Laufwerken) im Status BLOCKED verbleiben, während das Tape zurückgespult und entladen wird, erst danach kann ein anderes Tape in das Laufwerk geladen werden.

Zuordnung der SCSI Geräte

Unter Linux können Sie:

cat /proc/scsi/scsi

ausführen, um zu sehen welche SCSI-Geräte Sie haben. Zudem können Sie:

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

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

Falls verfügbar können Sie auch das Kommando lsscsi benutzen. Unten sehen Sie dazu ein Beispiel, das Changer-Device ist dabei mit mediumx bezeichnet und entspricht dem Device /dev/sg10.

$ lsscsi -g
 [1:0:2:0]    tape    SEAGATE  ULTRIUM06242-XXX 1619  /dev/st0  /dev/sg9
 [1:0:14:0]   mediumx STK      L180             0315  /dev/sch0 /dev/sg10
 [2:0:3:0]    tape    HP       Ultrium 3-SCSI   G24S  /dev/st1  /dev/sg11
 [3:0:0:0]    enclosu HP       A6255A           HP04  -         /dev/sg3
 [3:0:1:0]    disk    HP 36.4G ST336753FC       HP00  /dev/sdd  /dev/sg4

Für weiterführende Information über SCSI-Geräte, schauen Sie bitte in den Abschnitt Linux SCSI Tricks aus dem Tape-Testing-Kapitel des Handbuchs.

Unter FreeBSD können Sie:

camcontrol devlist

benutzen, um SCSI-Geräte und die Kontroll-Devices /dev/passn des Autochangers anzuzeigen, die Sie in der Konfiguration unter Changer Device = angeben müssen.

Bitte stellen Sie sicher, dass der Storage-Dienst auf diese Geräte zugreifen darf.

Der folgende Tipp fü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ügen unten diese Zeilen hinzu:

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

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

/etc/rc.d/devfs restart

ausführen. Danach brauchen Sie nie wieder die Berechtigungen von Hand zu setzen, wenn der Computer neu gestartet wurde.

Beispiel Scripte

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

Slots

Um den Autochanger richtig ansteuern zu kö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 über das Console-Programm eine Slot-Nummer zugewiesen werden. Diese Information wird im Katalog, zusammen mit anderen Informationen ü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ötigten Konfigurationsparameter richtig gesetzt sind. Wenn Sie das mount Console-Kommando ausführen, mü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 unmount Console-Kommando das Laufwerk leert.

Sie können die Slot-Nummer und die InChanger-Markierung überprüfen, indem Sie:

list Volumes
im Consolen-Programm ausführen.

mehrere Laufwerke

Einige Autochanger haben mehr als ein Laufwerk. Die in Version 1.37 vorgestellte Autochanger-Konfiguration, erlaubt Ihnen mehrere Geräte-Konfigurationen, die jeweils einem Laufwerk entsprechen, zu einem Autochanger zu gruppieren. Der Director-Dienst könnte trotzdem die Laufwerke direkt ansprechen, aber dies zu erlauben, würde die einwandfreie Zusammenarbeit der Laufwerke einschrä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 mtx-changer Script zugegriffen wird und nicht beide Laufwerke auf dasselbe Volume verweisen.

Mehrere Laufwerke erfordern das Setzen des Drive Index in den Geräte-Einträgen der Storage-Dienst-Konfiguration. Laufwerks-Nummern bzw. der Drive Index beginnen standardmäßig bei Null. Um mit dem zweiten Laufwerk im Autochanger arbeiten zu können, muss ein weiterer Geräte-Eintrag erstellt werden, wobei der Drive Index dann Eins ist. Normalerweise wird das zweite Laufwerk dasselbe Changer Device verwenden, aber ein anderes 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 Prefer Mounted Volumes in der Director-Dienst-Konfiguration in den entsprechenden Job-Einträgen auf ,,no`` gesetzt werden. Der Storage-Dienst wird daraufhin so viele Volumes wie möglich in die Laufwerke laden.

Geräte-Konfigurations-Parameter

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

Diese vier Parameter der Device-Konfiguration, sind unten detailliert beschrieben. Changer Device und Changer Command werden in der Gräte-Konfiguration nicht benötigt, wenn sie in der Autochanger-Konfiguration stehen.

Autochanger = Yes|No
Der Autochanger-Parameter gibt an, ob der Geräte-Eintrag einen Autochanger beschreibt oder nicht. Der Standardwert ist Autochanger = No.

Changer Device = <device-name>
Zusätzlich zu dem Archive Device Eintrag, muss das Changer Device angegeben werden. Das ist notwendig, weil die meisten Autochanger über ein anderes Gerät gesteuert werden, als fü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ärend das standard SCSI-Interface für Lese- und Schreibvorgäge genutzt wird. Für das Archive Device = /dev/nst0 hat man dann typischerweise das Changer Device = /dev/sg0. Größere Autochanger, mit mehreren Laufwerken und vielen Slots, können das Kontroll-Device auch auf z.B. Changer Device = /dev/sg2 haben.

Unter FreeBSD liegt das Kontroll-Device zwischen /dev/pass0 und /dev/passn.

Unter Solaris finden Sie das Kontroll-Device im Verzeichnis /dev/rdsk.

Stellen Sie bitte sicher, dass der Storage-Dienst die notwendigen Rechte besitzt, um auf die entsprechenden Geräte zugreifen zu dürfen.

Changer Command = <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ührt werden kann. Dieses Kommando wird jedes mal aufgerufen, wenn Bacula das Autochanger-Kontroll-Device ansprechen möchte. Die folgenden Ersetzungen werden durchgeführt, bevor das command dem Betriebssystem zur Ausführung übergeben wird:

      %% = %
      %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

Hier ist ein Beispiel f[ur die Benutzung von mtx mit dem mtx-changer Script, dass in der Bacula-Distribution enthalten ist:

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

Falls das mtx-changer Script nicht in /etc/bacula liegt, mü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 mtx-changer Scripts, werden weiter unten im Abschnitt Bacula Autochanger Schnittstelle beschrieben..

Maximum Changer Wait = <time>
Dieser Parameter gibt an, wie lange Bacula maximal warten soll, bis der Autochanger auf ein Kommando (z.B. load) reagiert. Der Standardwert beträgt 120 Sekunden. Wenn Sie einen langsamen Autochanger haben, müssen Sie hier eventuell eine längere Zeit konfigurieren.

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

Drive Index = <number>
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:

Device Index = 1

Um das zweite Laufwerk nutzen zu kö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 mehrere Laufwerke

Damit der Autochanger zuverläßig funktioniert, muss zusätzlich ein Autochanger-Eintrag erstellt werden.


Autochanger-Konfiguration

In der Autochanger-Konfiguration können Autochanger mit einzelnen oder mehreren Laufwerken angelegt werden, indem eine oder mehrere Gerätekonfigurationen zu einer Einheit, die Bacula Autochanger nennt, gruppiert werden. (Autochangerherrsteller nennen so etwas auch ,,Tape Library``)

Damit Ihr Autochanger korrekt funktioniert, müssen Sie eine Autochanger-Konfiguration in der Konfigurationsdatei des Storage-Dienstes erstellen und in der Konfiguration des Director-Dienstes muss ein entsprechender Storage-Eintrag auf den Autochanger-Namen in der Storage-Dienst-Konfiguration verweisen. In früheren Bacula-Versionen verwies die Autochanger-Konfiguration des Director-Dienstes direkt auf Geräte-Konfigurationen des Storage-Dienstes. Seit Version 1.38.0 ist es nicht mehr möglich, aus einer Autochanger-Konfiguration des Director-Dienstes, direkt auf die Autochanger-Geräte zu verweisen.

Name = <Autochanger-Name>
die Angabe des Autochanger-Namens. Dieser Name wird in der Director-Storage-Definition benutzt um auf den Autochanger zu verweisen. Die Konfiguration des Namens ist zwingend erforderlich.

Device = <Device-name1, device-name2, ...>
die Angabe eines oder mehrerer Geräte-Namen, die den Device-Einträgen der Laufwerke des Autochangers entsprechen. Wenn Ihr Autochanger mehrere Laufwerke hat, müssen Sie auch mehrere Geräte-Namen angeben, jeweils einen für jede Geräte-Konfiguration, die einem Laufwerk des Autochangers entspricht. Sie können mehrere Geräte-Namen durch Kommas getrennt in einer Zeile, oder mehrere Device-Einträge angeben. Die Konfiguration der Geräte-Namen ist zwingend erforderlich.

Changer Device = Bezeichner
der angegebene Bezeichner entspricht dem Geräte-Namen des Autochangers (nicht der Laufwerke) der durch das Betriebssystem vergeben wird. Wenn der Geräte-Name hier konfiguriert wird, braucht er nicht mehr in den Device-Einträgen der Laufwerke angegeben werden. Wenn der Geräte-Name auch in den Device-Einträgen angegeben wird, hat der dortige Eintrag Vorrang vor der Angabe in der Autochanger-Konfiguration.

Changer Command = Bezeichner
der angegebene Bezeichner gibt das zu verwendende externe Programm an, dass Bacula aufruft, um automatisch Volumes zu wechseln. Meistens wird hier das mit Bacula zur Verfügung gestellte mtx-changer angegeben. Wenn der Kommando-Name hier konfiguriert wird, braucht er nicht mehr in den Device-Einträgen der Laufwerke angegeben werden. Wenn der Kommando-Name auch in den Device-Einträgen angegeben wird, hat der dortige Eintrag Vorrang vor der Angabe in der Autochanger-Konfiguration.

Das Folgende ist ein Beispiel einer gültigen Autochanger-Konfiguration:

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
  ...
}

Bitte beachten Sie dass es wichtig ist, dass Autochanger = yes in allen Device-Einträgen angegeben wird die zum Autochanger gehören. Ein Device-Eintrag darf nie zu mehr als einem Autochanger gehören. Außerdem darf die Storage-Konfiguration des Director-Dienstes nur auf die Autochanger-Konfiguration zeigen und nicht auf die Device-Einträge.

Wenn Sie ein Laufwerk des Autochangers nicht automatisch durch Bacula benutzen lassen wollen, z.B. um immer ein freies Laufwerk für Rücksicherungen zu haben, können Sie folgendes dem entsprechenden Device-Eintrag hinzufügen:

Autoselect = no

In diesem Fall wird Bacula das Laufwerk nicht mehr automatisch auswählen, wenn es auf den Autochanger zugreift. Sie können das Laufwerk weiterhin benutzen, indem Sie direkt den Device-Namen ansprechen, anstatt des Autochangers. Ein Beispiel einer solchen Konfiguration sehen Sie oben bei dem Device-Eintrag DDS-4-3. Diese Laufwerk wird nicht benutzt werden, wenn der Autochanger-Name DDS-4-changer als Storage-Definition genutzt wird, es lässt sich aber direkt, mit entsprechenden Storage-Konfigurations-Eintrag im Director-Dienst, als Storage DDS-4-3 ansprechen.

eine Beispiel-Konfigurationsdatei

Die folgenden beiden Konfigurations-Einträge realisieren einen Autochanger:

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;
}

Wobei Sie Archive Device, Changer Device und den Pfad zum Changer Command Ihrem System entsprechend anpassen müssen.

eine Beispiel-Konfigurationsdatei für mehrere Laufwerke

Die folgenden Konfigurations-Einträge realisieren einen Autochanger mit mehreren Laufwerken:

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;
}

Wobei Sie Archive Device, Changer Device und den Pfad zum Changer Command Ihrem System entsprechend anpassen müssen.

Festlegen der Slots beim Labeln

Wenn Sie einen Autochanger = yes Eintrag in Ihrer Storage-Konfiguration des Director-Dienstes hinzugefügt haben, wird die Bacula Console Sie bei diesen beiden Kommandos add und label automatisch nach einem Slot für die jeweilige Aktion fragen. Beim label Kommando wird Bacula automatisch das richtige Volume in ein Laufwerk laden.

Außerdem muss, wie oben beschrieben, der Parameter Autochanger = yes in der Geräte-Konfiguration des Storage-Dienstes vorhanden sein, damit der Autochanger benutzt werden kann. Nähere Informationen zu diesen Parametern finden Sie in der Storage Konfiguration des Director-Kapitels und in Device Konfiguration des Storage-Kapitels.

Somit können alle Aktionen mit dem Autochanger komplett automatisiert werden. Zudem ist es möglich mit dem Menüpunkt Volume Parameters des Consolen-Kommandos update den Slot zu setzen und zu ä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äge im Katalog, die den Tapes im Autochanger entsprechenden, auch eine slot-Nummer zugewiesen ist.

Wenn Ihr Autochanger Barcodes unterstützt, können Sie alle Volumes im Autochanger, eins nach dem anderen, labeln indem Sie das Console-Kommando 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ür das Volume angelegt. Wenn der Barcode mit der Zeichenkette beginnt, die als CleaningPrefix= konfiguriert ist, wird Bacula das Tape für ein Reinigungsband halten und es wird nicht versucht das Tape zu labeln. Ein Beispiel:

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

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).

Tape-Wechsel

Wenn Sie Tapes dem Autochanger entnehmen oder hinzufügen wollen, oder das mtx Kommando von Hand aufrufen wollen, müssen Sie Bacula den Autochanger freigeben lassen, indem Sie folgendes Console-Kommando ausführen:

unmount
(wechseln der Tapes und/oder mtx ausf\"{u}hren
mount

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

Arbeiten mit mehreren Magazinen

Wenn Sie mehrere Magazine haben, oder wenn Sie Tapes in den Magazinen tauschen, müssen Sie Bacula darü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 über die im Autochanger verfügbaren Tapes zu informieren, sehr einfach. Jedes mal wenn Sie ein Magazin wechseln, oder Tapes aus dem Magazine entfernen bzw. hinzufügen, führen Sie einfach:

unmount
(Magazin/Tapes wechseln)
update slots
mount

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

Falls Sie keinen Barcode-Leser im Autochanger haben, gibt es mehrere andere Möglichkeiten.

  1. Sie können den Slot und das InChanger Flag manuell setzen, indem Sie das update volume Consolen-Kommando verwenden (sehr umständlich).

  2. Sie können das

    update slots scan
    

    Consolen-Kommando ausfü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.

  3. Sie können das mtx-changer Script anpassen, damit es die Barcodes im Autochanger simuliert (siehe unten).

Simulieren von Barcodes im Autochanger

Sie können die Barcodes im Autochanger simulieren, indem Sie das mtx-changer Script so anpassen, dass es die selben Informationen zurückgibt, die ein Autochanger mit Barcodes liefert. Dazu wird die folgende Zeile im mtx-changer Script:

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

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

cat /etc/bacula/changer.volumes

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:

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

Wobei die 1, 2 und 3 die Slot-Nummern und Volume1, Volume2 und Volume3 die Namen (bzw. Barcodes) sind. Sie kö]nnen mehrere Datei erstellen, die den Tapes in verschiedenen Magazinen entsprechen und beim Wechsel der Magazine einfach die für das Magazine gültige Datei in die /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 update slots ausführen, wird Ihr Autochanger für Bacula so erscheinen, als ob er Barcodes unterstützen würde.

Alle Parameter des Update Slots Kommandos

Wenn Sie ncht alle Slots überprüfen lassen wollen, nur weil Sie ein Tape im Magazin getauscht haben, können Sie das Consolen-Kommando update slots, genauso wie das Kommando update slots scan, mit zusätzlichen Parametern aufrufen:

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

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

Diese Parameter sind nützlich, wenn Sie update slots scan (sehr langsam) ausführen und dabei die Slots auf die mit gewechselten Tapes begrenzen können.

Als Beispiel, das Console-Kommando :

update slots=1,6 scan

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:

update slots=1-3,6

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 mtx changer Script nicht, wie oben beschrieben, angepasst haben, wird dieses Console-Kommando keine Tapes finden und folglich nichts tun.

FreeBSD Belange

Falls unter FreeBSD Probleme auftreten, wenn Bacula versucht auf ein Laufwerk zuzugreifen und folgende Fehlermeldung erscheint: Device not configured, passiert dass weil FreeBSD den Geräte-Eintrag /dev/nsa1 entfernt, wenn kein Tape im Laufwerk ist. Das hat zur Folge, dass Bacula das Gerät nicht öffnen kann. Die Lösung fü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äter behoben.

Beachten Sie bitte das Kapitel Laufwerk-Tests bevor Sie den Autochanger testen, dort finden Sie weitere wichtige Informationen die Laufwerke betreffend.

Autochanger-Test und 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ühren (wobei angenommen wird, dass das mtx-changer Script unter /etc/bacula/mtx-changer liegt):

Stellen Sie sicher, dass Bacula nicht läuft.

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

Das Kommando sollte diese Ausgabe erzeugen:

   1:
   2:
   3:
   ...

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

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

Das Kommando sollte die Anzahl der Slots im Autochanger anzeigen.

/etc/bacula/mtx-changer /dev/sg0 unload 1 /dev/nst0 0

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

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

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

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

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

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

wird das Laufwerk mit Drive Index = 0 in Slot 3 entladen.

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

Ob Sie eine sleep-Zeit im Script angeben müssen, können Sie mit folgenden Kommandos überprüfen, indem Sie sie in ein Script schreiben und ausführen.

#!/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

Wenn das Script funktioniert, haben Sie wahrscheinlich keine zeitlichen Probleme. Wenn es nicht funktioniert, tragen Sie, direkt hinter dem mtx-changer load Kommando, sleep 30 oder auch sleep 60 ein. Wenn es damit funktioniert, übernehmen Sie den passenden sleep-Eintrag in das mtx-changer Script, so wird diese Verzögerungszeit jedes mal angewendet, wenn Bacula das Script aufruft.

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

#!/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

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

Wie vorher schon angemerkt, sind im Verzeichnis <bacula-source>/examples/devices mehrere Scripte, die die oben genannten Kommandos bereits enthalten. Sie können eine Hilfe sein, um Ihr Script zum laufen zu bringen.

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

Arbeiten mit dem Autochanger

Angenommen, Sie haben alle notwendigen Storage-Dienst-Device-Einträge richtig konfiguriert und Sie haben einen Autochanger = yes Eintrag zu der Storage-Konfiguration im Director-Dienst hinzugeügt.

Jetzt füllen Sie Ihren Autochanger mit, zum Beispiel, 6 leeren Tapes.

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

Eine Möglichkeit ist, dass jedes Tape vorgelabelt wird. Starten Sie Bacula und führen Sie das Console-Programm aus, innerhalb des Console-Programms verwenden Sie das Kommando label:

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

wird etwas ähnliches wie hier ausgeben:

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

Wählen Sie den Autochanger und es erscheint:

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

geben Sie Testvolume1 für den Tape-Namen ein und 1 für den Slot. Bacula fragt:

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

Wählen Sie den Default Pool. Das wird automatisch gemacht, wenn Sie nur einen Pool haben. Nun wird Bacula damit beginnen, das benö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:

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.
*

Sie kö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ötigt werden.

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

*{\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    |
| ...                                                                            |
+-------+----------+--------+---------+-------+--------+----------+-------+------+

Barcode Unterstützung

Bacula unterstützt Barcodes mit zwei Console-Kommandos: label barcodes und update slots.

Das Kommando label barcodes bewirkt, dass Bacula mittels des mtx-changer 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ält.

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

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

Volumes im Autochanger anzeigen

Mit dem Console-Kommando status slots storage=xxx können Sie sich den Inhalt des angegebenen Autochangers anzeigen lassen:

 Slot |  Volume Name    |  Status  |      Type         |    Pool        |  Loaded |
------+-----------------+----------+-------------------+----------------+---------|
    1 |           00001 |   Append |  DiskChangerMedia |        Default |    0    |
    2 |           00002 |   Append |  DiskChangerMedia |        Default |    0    |
    3*|           00003 |   Append |  DiskChangerMedia |        Scratch |    0    |
    4 |                 |          |                   |                |    0    |

Falls ein * neben einer Slot-Nummer angezeigt wird bedeutet das, dass der Inhalt des Autochangers nicht synchron mit der Katalog-Datenbank ist. In diesem Fall müssen Sie das Console-Kommmando update slots ausführen, um die Volume-Einträge in der Katalog-Datenbank zu aktualisieren.

Bacula Autochanger Schnittstelle

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

- Die momentan benutzten Autochanger-Kommandos sind:
    loaded -- gibt, ab 1 beginnend, 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.

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

eric 2009-05-06