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.
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.
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.
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 Volumesim Consolen-Programm ausführen.
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.
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.
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.
%% = % %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..
Wenn der Autochanger nicht innerhalb der Maximum Changer Wait Zeit antwortet, wird das Kommando abgebrochen und Bacula wird das Eingreifen des Bedieners verlangen.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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):
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.
Das Kommando sollte die Anzahl der Slots im Autochanger anzeigen.
Falls das Tape aus Slot 1 in einem Laufwerk geladen ist, sollte es jetzt entladen werden.
Angenommen in Slot 3 ist ein Tape, dann wird es jetzt in das erste Laufwerk geladen (Drive Index = 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.
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.
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 | | ... | +-------+----------+--------+---------+-------+--------+----------+-------+------+
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.
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 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