Die Bacula Console (manchmal auch die Benutzer-Schnittstelle genannt) ist ein Programm, dass es dem Anwender oder System Administrator erlaubt, den Bacula-Director-Dienst im laufenden Betrieb zu bedienen.
Momentan gibt es zwei Versionen des Console-Programms: eine Shell- (TTY) und eine GNOME GUI-Version. Beide erlauben es dem Administrator oder autorisierten Benutzern Bacula zu steuern. Sie können sich zum Beispiel den Status eines bestimmten Jobs oder den Inhalt des Katalogs anzeigen lassen, sowie bestimmte Aktionen mit Tapes und Autochangern durchführen.
Zusätzlich gibt es noch die bwx-Console, die auf wxWidgets aufbaut und eine Möglichkeit bietet, den Wiederherstellungsprozeß graphisch zu steuern. Die bwx-Console befindet sich in einem frühen Entwicklungsstadium und wurde leider seit einiger Zeit nicht weiterentwickelt. (Trotzdem kann sie sehr hilfreich sein.)
Da sich alle Bacula-Consolen über das Netzwerk mit dem Director-Dienst verbinden, ist es nicht notwendig, dass sie auf dem selben Computer laufen.
Ein gewisses, minimales Grundwissen über die Console ist schon dann notwendig, wenn Bacula auf mehr als einem Tape schreiben soll. Bacula wird nämlich nach einem leeren Band fragen, falls keines mehr verfügbar ist, und erst nach dem mounten eines neuen Tapes mittels der Console, wird Bacula weiterarbeiten können.
Wenn Sie die Bacula-Console starten, liest sie ihre Standard-Konfigurations-Datei namens bconsole.conf, bzw. bgnome-console.conf für die GNOME-Console, ein. Mittels der Kommandozeilen-Option -c können Sie aber auch eine eigene Konfigurations- Datei angeben. Im einfachsten Fall enthällt diese Datei nur den Namen und die Adresse des Director-Dienstes sowie das Passwort, dass für die Verbindung zum Director-Dienst benötigt wird. Für weitere Informationen zu dieser Datei, lesen Sie bitte das Kapitel über die Console-Konfiguration-Datei in diesem Handbuch.
Das Console-Programm kann mit den folgenden Optionen gestartet werden:
Usage: bconsole [-s] [-c Konfigurations-Datei] [-d Debug-Level]
-c <Datei> gibt die zu verwendene Konfigurations-Datei an
-dnn setzt den Debug-Level auf nn
-n kein conio
-s keine Signale (*)
-t test - liest die Konfigurations-Datei und beendet sich dann
-? gibt diese Hilfe aus.
(*) Signale
Nach dem Start des Console-Programms zeigt es durch sein Prompt (*) an, dass es auf Benutzereingaben wartet. (in der GNOME-Console gibt es kein Prompt, geben Sie die Befehle bitte einfach in der Textbox unten im Fenster ein.) Sie können in jeder Console einfach nur das Kommando eingeben, wenn weitere Parameter erforderlich sind, wird das Programm Sie danach fragen. Alternativ können Sie natürlich auch das komplette Kommando mit allen benötigten Parametern eingeben und ausführen. Das normale Befehlsformat ist dieses:
<Kommando> <Parameter1>[=<Argument1>] <Parameter2>[=<Argument2>] ...
wobei Kommando einer der unten aufgeführten Console-Befehle und Parameter eines der unten aufgelisteten Schlüsselwörter ist, dem dann meistens ein Argument folgt. Alle Befehle können in der kürzesten eindeutigen Form eingegeben werden. Falls zwei Befehle mit identischen Buchstaben anfangen, wird der ausgeführt, der in der Ausgabe des help-Kommandos am weitesten oben steht. Wenn Sie das andere Kommando ausführen möchten müssen Sie dementsprechend mehr Buchstaben eingeben, um es eindeutig anzugeben. Keiner der Parameter darf abgekürzt werden.
Ein Beispiel:
list files jobid=23
zeigt alle gesicherten Dateien mit der JobID 23 an.
show pools
zeigt alle Pool-Konfigurations-Einträge an.
Die maximale Länge der eingegebenen Befehle, mit Parametern, ist 511 Zeichen. Falls Sie die Console über ein Script ansprechen, denken Sie bitte daran, dass Sie dieses Limit nicht überschreiten.
Normalerweise beenden Sie das Console-Programm durch die Eingabe von quit oder exit. Allerdings wartet die Console bis der Director-Dienst das Kommando bestätigt. Wenn der Director bereits ein länger laufendes Kommando ausführt, kann es sein, dass das Beenden der Console einen Moment dauert. Falls Sie die Console sofort verlassen wollen, können Sie in dem Fall das Kommando .quit verwenden.
Momentan gibt es keinen Weg ein laufendes Kommando nach dem Starten abzubrechen (z.B. mit STRG+C). Allerdings können Sie jederzeit, wenn die Console Sie nach einer weiteren Eingabe fragt, das aktuelle Kommando beenden, indem Sie einen Punkt . eingeben. Nach der Eingabe des Punktes, werden Sie automatisch zum Hauptprompt oder bei verschachtelten Abfragen zum passenden letzten Prompt zurückgeleitet. Bei einigen Eingaben, wie zum Beispiel der Frage nach einem Volume-Namen, wird der Punkt als Eingabe gewertet und Sie haben beim nächsten Prompt die Möglichkeit, das Kommando abzubrechen.
jobid=536
Bitte beachten Sie, dass diese Liste durch die ständig weitergehende Entwicklung eventuell weder komplett, noch in der richtigen alphabetischen Reihenfolge sein kann.
Die folgenden Kommandos sind derzeit verfügbar:
Typischerweise wird das label-Kommando anstelle des add-Kommandos benutzt, da es außer dem labeln des physikalischen Volumes, die identischen Schritte wie das add-Kommando ausführt. Das add-Kommando ändert nur die Katalog-Einträge und nicht die physikalischen Volumes. Die physikalischen Volumes müssen vorhanden und gelabelt sein (normalerweise mit dem label-Kommando). Trotzdem kann das add-Kommando sinnvoll sein, wenn Sie zum Beispiel eine bestimmte Anzahl von Volumes einem Pool hinzufügen wollen, wobei die Volumes erst zu einem späteren Zeitpunkt gelabelt werden. Auch um ein Volume eines anderen Bacula-Systems (bzw. anderen Director-Dienstes) zu importieren, kann das add-Kommando benutzt werden. Die erlaubten Zeichen für einen Volume-Namen finden Sie weiter unten in der Beschreibung des label-Kommandos.
Wenn autodisplay auf off steht, müssen Sie neue Nachrichten mit dem messages-Kommando abrufen, um sie sich anzeigen zu lassen. Wenn autodisplay auf on steht, werden die Nachrichten angezeigt, sobald die Console sie empfangen hat.
Wenn ein Job als abzubrechen gekennzeichnet wurde, kann es einige Zeit dauern, bis er tatsächlich beendet wird (normalerweise innerhalb einer Minute). Diese Zeit ist aber abhängig davon, was der Job gerade tut.
Wenn ein Job gestartet wird und Bacula bemerkt, dass kein passender Pool-Eintrag im Katalog vorhanden ist, aber in den Konfigurations-Dateien, dann wird der Pool im Katalog automatisch angelegt. Wenn Sie möchten, dass der Pool-Eintrag sofort (ohne das ein Job mit diesem Pool gestartet wurde) im Katalog erscheint, können Sie einfach diese Kommando ausführen, um diesen Vorgang zu erzwingen.
Wenn der Parameter Volume angegeben wird, wird das entsprechende Volume aus dem Katalog gelöscht, wenn ein Pool angeben wird, der entsprechende Pool und bei Angabe des Parameters Job der entsprechende Job, sowie alle zu diesem Job gehöhrenden JobMedia- und Datei-Einträge. Das delete-Kommando kann folgendermaßen aufgerufen werden:
delete pool=<pool-name> oder
delete volume=<volume-name> pool=<pool-name> oder
delete JobId=<job-id> JobId=<job-id2> ... oder
delete Job JobId=n,m,o-r,t ...
Das erste Beispiel löscht einen Pool-Eintrag aus der Katalog-Datenbank. Das zweite löscht einen Volume-Eintrag aus dem angegebenen Pool und das dritte Beispiel löscht die genannten JobID-Einträge aus dem Katalog. Es werden die JobIDs n, m, o, p, q, r und t gelöscht, wobei die JobID's n, m, o ... natürlich Zahlen entsprechen müssen. Wie Sie sehen, kann das delete-Kommando Listen von JobIDs und auch Bereiche (z.B. o-r) verarbeiten.
Wahlweise können Sie noch den Parameter listing mit übergeben, dann wird eine Liste aller zu sichernden Dateien ausgegeben. Abhängig vom FileSet kann diese Liste sehr lang sein und es daher einige Zeit dauern, alle Dateien anzuzeigen. Das estimate-Kommando kann folgendermaßen aufgerufen werden:
estimate job=<job-name> listing client=<client-name>
fileset=<fileset-name> level=<level-name>
die Angabe des Jobs ist ausreichend, aber Sie können durch Angabe des Clients, FileSets und/oder des Backup-Levels die entsprechenden Werte überschreiben.
Zum Beispiel können Sie folgendes eingeben:
@output /tmp/listing
estimate job=NightlySave listing level=Incremental
@output
durch das erste Kommando wird die Ausgabe der Console in die Datei /tmp/listing umgeleitet. Dann wird durch das estimate-Kommando eine Liste aller Dateien erstellt, die beim nächsten inkrementellen Backup des Jobs NightlySave gesichert werden. Die Console gibt dabei keine Meldungen aus, da die Ausgabe ja auf die Datei /tmp/listing zeigt. Durch das dritte Kommando @output wird die Umleitung der Ausgabe wieder aufgehoben. Beachten Sie bitte, dass die angezeigten Bytes in der Ausgabe des estimate-Kommandos über die Angabe der Dateigröße im Verzeichnis-Eintrag bestimmt wird. Das kann zu großen Abweichungen bei der ermittelten Backup-Größe führen, falls im FileSet sparse-Dateien vorhanden sind. sparse-Dateien finden sich oft auf 64-Bit-Maschinen, wo sie für bestimmte Systemdateien benutzt werden. Die angezeigten Bytes sind die Gesammtgröße der gesicherten Dateien, wenn die FileSet-Option ,,sparse`` nicht gesetzt ist. Momentan gibt es keinen Weg, um mit dem estimate-Kommando die echte Backup-Größe für ein FileSet anzuzeigen, bei dem die sparse-Option gesetzt ist.
+
gui [on|off]
label storage=<storage-name> volume=<volume-name> slot=<slot>
Wenn Sie einen der Parameter storage, volume oder slot nicht angeben, werden Sie von der Console danach gefragt. Der Media-Typ wird automatisch anhand des Storage-Eintrags in der Director-Konfiguration gesetzt. Wenn alle benötigten Informationen vorliegen, kontaktiert die Console den angegebenen Storage-Dienst und sendet das label-Kommando. Wenn das labeln erfolgreich war, wird ein entsprechender Volume-Eintrag im passenden Pool erzeugt.
Im Volume-Name dürfen Buchstaben, Zahlen und folgende Sonderzeichen verwendet werden: Binde- (-) und Unterstrich (_), Doppelpunkt (:) und Punkt (.). Alle anderen Zeichen, einschließlich des Leerzeichens, sind nicht erlaubt. Durch diese Einschränkung soll sichergestellt werden, dass die Volume-Namen gut lesbar sind und es nicht zu Benutzerfehlern aufgrund von Sonderzeichen im Namen kommt.
Bitte beachten Sie, dass Bacula einen Ein-/Ausgabefehler meldet, wenn ein neues bzw. komplett leeres Volume gelabelt wird. Bacula versucht den ersten Block des Volumes zu lesen, um ein eventuell schon vorhandenes label nicht zu überschreiben, dieser Versuch erzeugt den oben genannten Fehler. Um diesen Fehler zu vermeiden, können Sie mit den folgenden Shell-Kommandos ein EOF am den Anfang des Volumes schreiben:
mt rewind
mt weof
Das label-Kommando kann aufgrund verschiedener Gründe fehlschlagen:
Es gibt zwei Möglichkeiten ein bestehendes Bacula-label zu überschreiben. Die brutale Methode ist es, einfach ein EOF an den Anfang des Volumes zu schreiben (dabei wird das bestehende label durch das EOF überschrieben). Mit dem Programm mt können Sie das zum Beispiel so tun:
[user@host]$ mt -f /dev/st0 rewind [user@host]$ mt -f /dev/st0 weof
Ein Festplatten-Volume können Sie auch manuell löschen.
Danach benutzten Sie das label-Kommando, um ein neues label zu erzeugen. Allerdings kann diese Vorgehensweise Spuren des alten Volumes in der Katalog-Datenbank hinterlassen.
Die bevorzugte Methode ein Volume neu zu labeln sollte es sein, zuerst das Volume als bereinigt (purged) zu markieren. Das passiert entweder automatisch, wenn die Aufbewahrungszeit (Volume-Retention) für das Volume abläuft, oder kann aber auch mit dem purge-Kommando erzwungen werden. Danach können Sie das relabel-Kommando, wie weiter unten beschrieben, verwenden.
Falls Ihr Autochanger Barcode-Labels unterstützt, können Sie alle Volumes im Autochanger, eins nach dem anderen, mit dem Kommando label barcodes labeln. Dabei wird jedes Tape mit Barcode nacheinander im Laufwerk gemountet und mit der auf dem Barcode enthaltenen Zeichenfolge als Namen gelabelt. Ein entsprechender Katalog-Eintrag wird automatisch mit erzeugt. Jedes Volume mit einem Barcode der mit den Zeichen beginnt, die im Pool-Eintrag als CleaningPrefix konfiguriert sind, wird wie ein Reinigungsband behandelt und nicht gelabelt. Allerdings wird dabei auch ein Katalog-Eintrag für das Reinigungsband erstellt.
Als Beispiel, mit dem Eintrag:
Pool {
Name ...
Cleaning Prefix = "CLN"
}
wird jedes Tape, dessen Barcode mit CLN beginnt, als Reinigungsband betrachtet und nicht automatisch gemountet. Das label-Kommando kann folgendermaßen aufgerufen werden:
label storage=xxx pool=yyy slots=1-5,10 barcodes
list jobs
list jobid=<id> (zeigt jobid <id> an)
list ujobid=<unique job name> (zeigt den job mit dem Namen <unique job name> an)
list job=<job-name> (zeigt alle Jobs mit dem Namen <job-name> an)
list jobname=<job-name> (identisch mit dem oberen)
Im oberen Beispiel kann auch den Parameter limit=nn angegeben
werden, um die Ausgabe des Kommandos auf nn Jobs zu begrenzen
list jobmedia
list jobmedia jobid=<id>
list jobmedia job=<job-name>
list files jobid=<id>
list files job=<job-name>
list pools
list clients
list jobtotals
list volumes
list volumes jobid=<id>
list volumes pool=<pool-name>
list volumes job=<job-name>
list volume=<volume-name>
list nextvolume job=<job-name>
list nextvol job=<job-name>
list nextvol job=<job-name> days=nnn
Die meisten der oben genannten Parameter sollten selbsterklärend sein. Üblicherweise werden Sie, falls Sie nicht genügend Parameter angeben, von der Console nach den fehlenden Informationen gefragt.
Das list nextvol-Kommando gibt den Volume-Namen aus, der von dem angegebenen Job beim nächsten Backup benutzt werden wird. Allerdings sollten Sie beachten, dass das tatsächlich benutzte Volume von einer Reihe von Faktoren, wie zum Beispiel von den vorher laufenden Jobs oder der Zeit, wann der Job läuft, abhängen kann. Eventuell wird ein Tape schon voll sein, das aber noch freien Platz hatte, als Sie das Kommando ausführten. Dieses Kommando gibt Ihnen also nur einen Hinweis darauf, welches Tape benutzt werden könnte, aber es kann keine definitive Aussage darüber treffen. Zusätzlich kann dieses Kommando mehrere Seiteneffekte haben, da es den selben Algorithmus durchläuft, wie ein echter Backup-Job. Das bedeutet, dass es dazu führen kann, dass aufgrund dieses Kommandos Volumes automatisch recycled oder gelöscht (purged) werden. Standardmäßig muss der angegebene Job innerhalb der nächsten zwei Tage laufen, ansonsten wird kein Volume für den Job gefunden. Allerdings können Sie durch Angabe des Parameters days=nnn bis zu 50 Tage in die Zukunft angeben, die das Kommando in die Berechnung mit einbeziehen soll. Falls Sie, zum Beispiel, Freitags sehen wollen, welches Volume am Montag voraussichtlich benutzt wird, können Sie folgendes Kommando benutzen: list nextvol job=MyJob days=3.
Wenn Sie bestimmte, von Ihnen öfter benötigte, eigene Kommandos anlegen wollen um sich bestimmte Inhalte der Katalog-Datenbank anzeigen zu lassen, können Sie diese der Datei query.sql hinzuügen. Allerdings erfordert das einiges an Wissen über SQL-Kommandos. Lesen Sie dazu bitte den Abschnitt über das query-Kommando in diesem Kapitel.
Weiter unten finden Sie auch eine Beispiel-Ausgabe des llist-Kommandos, das Ihnen den kompletten Inhalt des Katalogs zu einem bestimmten Konfigurations-Eintrag anzeigt.
Als ein Beispiel, kann Ihnen der Aufruf des Kommandos list pools die folgenden Ausgaben anzeigen:
+------+---------+---------+---------+----------+-------------+ | PoId | Name | NumVols | MaxVols | PoolType | LabelFormat | +------+---------+---------+---------+----------+-------------+ | 1 | Default | 0 | 0 | Backup | * | | 2 | Recycle | 0 | 8 | Backup | File | +------+---------+---------+---------+----------+-------------+
Wie oben schon angedeutet, zeigt das list-Kommando den Inhalt der Katalog-Datenbank an. Einige Konfigurations-Einträge, bzw. Änderungen an den Konfigurations-Einträgen, werden beim Start des Director-Dienstes in die Datenbank geschrieben. Die meisten Einstellungen und Änderungen werden hingegen erst im Katalog aktualisiert, wenn sie zum ersten Mal benutzt werden, so zum Beispiel die Client- und Job-Einträge.
Bacula erzeugt den Client-Eintrag also dann, wenn zum ersten Mal ein Job für diesen Client startet. Durch das status-Kommando wird die Katalog-Datenbank nicht aktualisiert, auch wenn Sie dort eventuell schon einen Eintrag für den neuen Client in der Liste der geplanten Jobs sehen. Der Client-Eintrag wird auf alle Fälle beim starten des ersten Jobs des Clients erzeugt, egal ob der Job erfolgreich lief oder nicht. Zusätzlich schreibt der Director-Dienst noch eine weitere Client-Information in die Katalog-Datenbank (die Ausgabe von ,,uname -a``).
Wenn Sie alle verfügbaren Client-Einträge der Datenbank (auch aus mehreren Katalog-Datenbanken, falls konfiguriert) sehen wollen, können Sie auch das show clients-Kommando verwenden, das zudem noch Informationen über die Adresse, den Port und den Katalog-Namen des Clients (sowie einige andere) ausgibt.
Wenn Sie anstelle des list pools, wie im oberen Beispiel, das Kommando llist pools verwenden, erhalten Sie diese Ausgabe:
PoolId: 1
Name: Default
NumVols: 0
MaxVols: 0
UseOnce: 0
UseCatalog: 1
AcceptAnyVolume: 1
VolRetention: 1,296,000
VolUseDuration: 86,400
MaxVolJobs: 0
MaxVolBytes: 0
AutoPrune: 0
Recycle: 1
PoolType: Backup
LabelFormat: *
PoolId: 2
Name: Recycle
NumVols: 0
MaxVols: 8
UseOnce: 0
UseCatalog: 1
AcceptAnyVolume: 1
VolRetention: 3,600
VolUseDuration: 3,600
MaxVolJobs: 1
MaxVolBytes: 0
AutoPrune: 0
Recycle: 1
PoolType: Backup
LabelFormat: File
Das mount-Kommando kann folgendermaßen aufgerufen werden
mount storage=<storage-name> [ slot=<num> ] [
drive=<num> ]
mount [ jobid=<id> | job=<job-name> ]
Wenn Sie in der Geräte-Konfiguration des Storage-Dienstes Automatic Mount = yes angegeben haben, wird Bacula automatisch auf das Gerät zugreifen, solange Sie es nicht explizit mit dem unmount-Kommando freigegeben haben.
python restart
dadurch wird der python-Interpreter des Director-Dienstes neu geladen. Das kann beim Testen hilfreich sein, da es der einzige Weg ist, den python-Interpreter nach dem Start des Director-Dienstes dazu zu veranlassen, seine Konfiguration in der Datei DirStartUp.py neu einzulesen. Für weiterführende Informationen zum Thema python-Scripting lesen Sie bitte das Kapitel PythonScripting.
prune files|jobs|volume|stats client=<client-name> volume=<volume-name>
Um die Katalog-Einträge eines Volumes zu löschen, muss der VolStatus entweder Full, Used oder Append sein, ansonsten werden keine Einträge entfernt.
purge files jobid=<jobid>|job=<job-name>|client=<client-name> purge jobs client=<client-name> (of all jobs) purge volume|volume=<vol-name> (of all jobs)
Damit das purge-Kommando Volume-Einträge aus der Katalog-Datenbank entfernen kann, muss der VolStatus entweder Full, Error, Used oder Append sein.
Die Daten auf den Volumes werden durch dieses Kommando nicht verändert.
Die folgenden Anweisungen sind momentan vordefiniert (Version 2.2.7):
Available queries: 1: List up to 20 places where a File is saved regardless of the directory 2: List where the most recent copies of a file are saved 3: List last 20 Full Backups for a Client 4: List all backups for a Client after a specified time 5: List all backups for a Client 6: List Volume Attributes for a selected Volume 7: List Volumes used by selected JobId 8: List Volumes to Restore All Files 9: List Pool Attributes for a selected Pool 10: List total files/bytes by Job 11: List total files/bytes by Volume 12: List Files for a selected JobId 13: List Jobs stored on a selected MediaId 14: List Jobs stored for a given Volume name 15: List Volumes Bacula thinks are in changer 16: List Volumes likely to need replacement from age or errors Choose a query (1-16):
relabel storage=<storage-name> oldvolume=<old-volume-name>
volume=<newvolume-name>
Wenn Sie einen Parameter nicht angeben, wird die Console Sie danach fragen. Damit der alte Volume-Name (das label) überschrieben werden kann, muss der VolStatus entweder Purged oder Recycle sein, was automatisch passiert, wenn die entsprechenden Aufbewahrungszeiträume abgelaufen sind (oder alle Datei- und Job-Einträge dieses Volumes mit dem purge-Kommando aus der Katalog-Datenbank entfernt wurden).
Wenn das Volume erfolgreich relabelt wurde, sind alle Daten auf dem Volume verloren und können nicht wiederhergestellt werden.
release storage=<storage-name>
Nach dem release-Kommando ist das Gerät weiterhin von Bacula geöffnet (außer Sie haben ,,Always Open`` in der Storage-Dienst-Konfiguration auf ,,No`` gesetzt), andere Prozeße/Programme können also nicht auf das Gerät zugreifen. Allerdings können Sie bei einigen Laufwerken, nach dem release-Kommando, das Tape gegen ein anderes austauschen, da Bacula weiss, dass es das label neu einlesen muss. Falls Sie mit anderen Programmen auf das Gerät zugreifen wollen, müssen Sie das unmount-Kommando verwenden, nur dann gibt Bacula das Gerät komplett frei.
Auch wenn es möglich ist, die Director-Konfiguration zur Laufzeit neu zu laden, und auch dann wenn Jobs laufen, sollten Sie bei der nächsten Gelegenheit den Director-Dienst neu starten um Seiteneffekte auszuschließen. Das neue Einlesen der Konfiguration ist ein sehr komplexer Vorgang und nur nach dem Neustart können Sie sicher sein, dass nur noch mit der neuen Konfiguration gearbeitet wird.
restore storage=<storage-name> client=<backup-client-name> where=<path> pool=<pool-name> fileset=<fileset-name> restoreclient=<restore-client-name> select current all done
Wobei current, falls angegeben, das restore-Kommando dazu veranlaßt, automatisch das aktuellste Backup zur Wiederherstellung auszuwählen. Das Schlüsselwort all wählt automatisch alle Dateien aus. Falls Sie einen benötigten Parameter nicht angeben, wird das restore-Kommando Sie danach fragen. Für weitere Informationen zum restore-Kommando lesen Sie bitte das Restore Kapitel dieses Handbuchs.
Das Schlüsselwort client gibt sowohl den Client an, auf dem das Backup gemacht wurde, als auch den Client auf dem das Backup widerhergestellt werden soll. Durch Angabe des restoreclient können Sie allerdings auch einen anderen Client wählen, auf dem das Backup statt dessen wiederhergestellt werden soll.
run job=<job-name> client=<client-name> fileset=<FileSet-name> level=<level-keyword> storage=<storage-name> where=<directory-prefix> when=<universal-time-specification> spooldata=yes|no yes
Jede benötigte Information, die nicht angegeben wurde, wird zur Auswahl aufgelistet. Bevor der Job in den Zeitplan des Directors eingefügt wird, werden Sie aufgefordert die Parameter zu bestätigen, zu ändern oder den Job abzubrechen. Falls Sie das Schlüsselwort yes angegeben haben, wird der Job ohne Nachfrage in den Zeitplan aufgenommen.
Ein Beispiel:
A job name must be specified.
The defined Job resources are:
1: Matou
2: Polymatou
3: Rufus
4: Minimatou
5: Minou
6: PmatouVerify
7: MatouVerify
8: RufusVerify
9: Watchdog
Select Job resource (1-9):
Nach der Auswahl der Nummer 5 erscheint:
Run Backup job JobName: Minou FileSet: Minou Full Set Level: Incremental Client: Minou Storage: DLTDrive Pool: Default When: 2003-04-23 17:08:18 OK to run? (yes/mod/no):
Wenn Sie jetzt yes eingeben, wird der Job gestartet, falls Sie mod auswählen, erscheint diese Liste der veränderbaren Parameter:
Parameters to modify:
1: Level
2: Storage
3: Job
4: FileSet
5: Client
6: When
7: Pool
Select parameter to modify (1-7):
Wenn Sie den Job zum Beispiel erst zu einem späteren Zeitpunkt starten wollen, können Sie über die Auswahl Nr. 6 ,,When``, die Startzeit anpassen. Die Zeit muss im Format YYYY-MM-DD HH:MM:SS angegeben werden.
Der Parameter spooldata kann nicht über diese Auswahlliste geändert werden. Er muss beim Starten des run-Kommandos auf der Kommandozeile mit angegeben werden. Wir er nicht gesetzt, übernimmt das run-Kommando die spooldata-Option aus der Job-, Storage- oder Schedule-Konfiguration.
setdebug level=nn [trace=0/1 client=<client-name> | dir | director | storage=<storage-name> | all]
Wenn trace=1 gesetzt wird, schreibt der gewählte Dienst alle Ausgaben in eine Datei (,,Dienst-Name``.trace) in seinem konfigurierten Arbeitsverzeichnis. Das ist vor allem bei Windows-Systemen nützlich, da sich dort die Programm-Ausgaben nicht über die Kommandozeile in Dateien umlenken lassen, bzw. keine Ausgaben im Terminal dargetestellt werden. Im Trace-Modus wird jede Programm-Ausgabe der Trace-Datei angehängt. Diese Datei muss von Hand durch den Benutzer gelöscht werden.
Mittels dieses Kommandos können Sie direkt die Katalog-Datenbank abfragen. Seihen Sie bitte vorsichtig, damit Sie nicht aus Versehen Datenbank-Einträge ändern oder löschen. Lesen Sie bitte auch die Beschreibung des query-Kommandos weiter unten, mit dem Sie einfacher und sicherer Datenbank-Abfragen durchführen können.
Abhängig von dem von Ihnen verwendeten Datenbank-Systems (MySQL, PostgreSQL oder SQLite) haben Sie mehr oder weniger Möglichkeiten direkte Datenbank-Abfragen durchzuführen. Mehr Informationen finden Sie in der Beschreibung Ihrer Datenbank.
status [all | dir=<dir-name> | director [days=nnn] | client=<client-name> | [slots] storage=<storage-name> ]
Wenn Sie das Kommando status dir ausführen, listet die Console die momentan laufenden Jobs, alle für die nächsten 24 Stunden geplanten Jobs und die letzten 10 beendeten Jobs, sowie deren Status auf. Die Liste der geplanten Jobs enthält auch den Namen des Volumes, das voraussichtlich benutzt wird. Beachten Sie dabei bitte diese beiden Punkte: 1. um das Volume zu ermitteln wird dieselbe Funktion benutzt wie in dem Moment wo der Backup-Job startet, allerdings werden die Ablaufzeiträume der Volumes nicht in Betracht gezogen; 2. das angezeigte Volume ist die nur bestmögliche Schätzung, da das Volume eventuell in der zwischenzeit andersweitig benutzt oder auch durch vorher laufende Jobs vollgeschrieben werden könnte.
In der Liste der laufenden Jobs finden Sie diese Informationen:
2507 Catalog MatouVerify.2004-03-13_05.05.02 is waiting execution
5349 Full CatalogBackup.2004-03-13_01.10.00 is waiting for higher
priority jobs to finish
5348 Differe Minou.2004-03-13_01.05.09 is waiting on max Storage jobs
5343 Full Rufus.2004-03-13_01.05.04 is running
Wenn Sie sich diese Ausgabe von unten nach oben anschauen, sehen Sie, dass JobId 5343 (Rufus) gerade läuft. JobId 5348 (Minou) wartet darauf, dass der Job 5343 beendet wird, da dieser momentan die Storage-Resource verwendet, daher die Meldung: ,,waiting on max Storage jobs``. JobId 5349 (CatalogBackup) hat eine geringere Priorität und wartet daher auf die Beendigung der Jobs mit höheren Prioritäten. Zuoberst steht die JobId 2507 (MatouVerify), die als letzte dieser JobIds geplant wurde, da schon andere wartende und laufende JobIds vorhanden sind, hat sie nur den Status ,,waiting execution``.
Das Kommando status dir zeigt standardmäßig nur die für heute und morgen geplanten Jobs an. Falls Sie die geplanten Jobs der nächsten drei Tage sehen möchten um, zum Beispiel am Freitag zu kontrollieren, welche Volumes am Freitag, am Wochenende und am Montag benutzt werden, können Sie die Option days=3 verwenden. days=0 zeigt nur die für heute geplanten Jobs an.
Falls Ihre Jobs also nicht wie gewünscht starten, können Sie sich mit dem Kommando status dir einen Überblick über die momentan laufenden und wartenden Jobs, sowie den Grund des wartens, verschaffen. Genauere Informationen bekommen Sie meistens, wenn Sie das Kommando status storage=xxx verwenden. Als Beispiel sind hier die Ausgaben die dieses Kommando auf einem Storage im Leerlauf anzeigt:
status storage=File
Connecting to Storage daemon File at 192.168.68.112:8103
rufus-sd Version: 1.39.6 (24 March 2006) i686-pc-linux-gnu redhat (Stentz)
Daemon started 26-Mar-06 11:06, 0 Jobs run since started.
Running Jobs:
No Jobs running.
====
Jobs waiting to reserve a drive:
====
Terminated Jobs:
JobId Level Files Bytes Status Finished Name
======================================================================
59 Full 234 4,417,599 OK 15-Jan-06 11:54 kernsave
====
Device status:
Autochanger "DDS-4-changer" with devices:
"DDS-4" (/dev/nst0)
Device "DDS-4" (/dev/nst0) is mounted with Volume="TestVolume002"
Pool="*unknown*"
Slot 2 is loaded in drive 0.
Total Bytes Read=0 Blocks Read=0 Bytes/block=0
Positioned at File=0 Block=0
Device "Dummy" is not open or does not exist.
No DEVICE structure.
Device "DVD-Writer" (/dev/hdc) is not open.
Device "File" (/tmp) is not open.
====
In Use Volume status:
====
Ganz oben sind unter ,,Running Jobs`` und ,,Jobs waiting ..`` keine Einträge, was bedeutet, dass momentan kein Job läuft und damit auch keine Geräte benutzt werden. Jetzt wird der Autochanger mit dem unmount-Kommando freigegeben und ein Job gestartet der das Gerät vom Typ ,,File (/tmp)`` benutzen soll. Daraufhin gibt das Kommando status storage=xxx diese Meldungen aus:
status storage=File
...
Device status:
Autochanger "DDS-4-changer" with devices:
"DDS-4" (/dev/nst0)
Device "DDS-4" (/dev/nst0) is not open.
Device is BLOCKED. User unmounted.
Drive 0 is not loaded.
Device "Dummy" is not open or does not exist.
No DEVICE structure.
Device "DVD-Writer" (/dev/hdc) is not open.
Device "File" (/tmp) is not open.
Device is BLOCKED waiting for media.
====
...
Der Autochanger ist, durch das unmount-Kommando, im Status ,,BLOCKED. User unmounted``. Das Device File, mit dem der Job gestartet wurde, ist im Status ,,BLOCKED waiting for media``, Bacula wartet jetzt darauf, dass Sie ein Volume labeln und mounten.
unmount storage=<storage-name> [ drive=<num> ] unmount [ jobid=<id> | job=<job-name> ]
Nachdem ein Gerät mit dem unmount-Kommando freigegeben wurde, kann Bacula es so lange nicht verwenden, bis es wieder mit dem mount-Kommando geöffnet wird. Falls Bacula das Gerät zwischenzeitlich für einen Job benötigt, wird Bacula in regelmäßigen Abständen den Benutzer informieren, dass Gerät zu mounten.
Wenn das Gerät ein Autochanger ist, wird das angebene Laufwerk zudem entladen. Wenn keine Laufwerk angegeben ist, wird Laufwerk 1 verwendet.
media, volume, pool, slots, stats
Falls Sie Volumes aktualisieren, werden Sie nach den zu ändernden Parametern gefragt. Folgende Volume-Parameter können angepasst werden:
Volume Status Volume Retention Period Volume Use Duration Maximum Volume Jobs Maximum Volume Files Maximum Volume Bytes Recycle Flag Recycle Pool Slot InChanger Flag Pool Volume Files Volume from Pool All Volumes from Pool All Volumes from all Pools
Bei Auswahl von Pool wird Bacula das gewählte Volume in den angegebenen Pool verschieben.
Bei Auswahl von Volume from Pool, All Volumes from Pool und All Volumes from all Pools werden alle Volumes im entsprechenden Pool so angepasst, wie es aktuell in der Konfiguration des Director-Dienstes steht. Das betrifft folgende Einträge: Recycle, RecyclePool, VolRetention, VolUseDuration, MaxVolJobs, MaxVolFiles, und MaxVolBytes. (RecyclePool ist erst ab Version >2.1.4 verfügbar.)
Durch das Kommando update slots holt sich Bacula eine aktuelle Liste der Volume-Barcodes in den Slots des Autochangers. Für jeden gefundenen Barcode wird automatisch der Slot des Volumes in der Katalog-Datenbank angepasst. Das ist nützlich, falls Sie Volumes in den Magazinen verschoben oder gewechselt haben. Beim aktualisieren der Slots wird auch das InChanger-Flag der Volumes im Katalog angepasst, dadurch weiss Bacula welche Volumes im Autochanger verfügbar sind.
Falls Ihr Autochanger keine Barcodes unterstützt, können Sie die Volumes im Autochanger mit dem Kommando update slots scan aktualisieren. Das Schlüsselwort scan teilt Bacula (nur Version >1.33) mit, dass es alle Volumes nacheinandern mounten soll, um das Tape-Label einzulesen.
Das update-Kommando kann wie folgt aufgerufen werden:
update volume=xxx pool=yyy slots volstatus=xxx VolRetention=ddd
VolUse=ddd MaxVolJobs=nnn MaxVolBytes=nnn Recycle=yes|no
slot=nnn enabled=n recyclepool=zzz
use <database-name>
wait [jobid=nn] [jobuid=unique id] [job=job name]Wenn eine der Optionen angegeben ist, wartet das wait-Kommando darauf, dass sich der spezifizierte Job beendet.
Es gibt eine Reihen von Kommandos die mit einem Punkt (.) beginnen. Diese Kommandos sind prinzipiell für die Verwendung in Batch-Programmen oder Benutzerschnittstellen gedacht. Sie werden normalerweise nicht durch einen Benutzer in der Console ausgeführt. Hier ist eine Übersicht:
.backups job=xxx zeigt die Backups des angegebenen Jobs an .clients listet alle Client-Namen auf .defaults client=xxx fileset=yyy zeigt die Defaults des angegebenen Clients an .die verursacht einen Segment-Fault des Directors (zur Fehlersuche) .dir im Datei-Auswahl-Modus des restore-Kommandos werden die Ausgaben durch ein Komma getrennt, statt durch Leerzeichen wie beim dir .exit quit .filesets zeigt alle FileSet-Namen an .help zeigt die Hilfe unformatiert an .jobs zeigt alle Job-Namen an .levels zeigt alle Backup-Level an .messages siehe messages .msgs zeigt die message-Konfigurations-Namen an .pools zeigt alle Pool-Namen an .quit quit .status holt Status-Ausgaben .storage zeigt die Namen der Storage-Einträge an .types zeigt die Job-Typen an
Normalerweise werden alle eingegebenen Kommandos direkt zur Ausführung an den Director-Dienst, welcher eventuell auf einem anderen Computer läuft, geschickt. Allerdings gibt es eine kleine Anzahl @-Kommandos, die mit einem @ beginnen, und die nicht durch den Director, sondern durch die Console selbst, ausgeführt werden. Diese Kommandos sind nur in der Terminal(tty)-Version der Console implementiert, aber nicht in der GNOME-Version. Diese Kommandos sind:
@output /dev/null
weitere Kommandos ...
@output
Sie können viele Console-Aufgaben durch Shell-Scripte vereinfachen. Wenn Sie zum Beispiel folgende Kommandos in ein Script schreiben:
./bconsole -c ./bconsole.conf <<END_OF_DATA unmount storage=DDS-4 quit END_OF_DATA
wird durch seine Ausführung das Gerät DDS-4 freigegeben und im Falle eines Autochangers auch entladen. Sie können solche Scripte auch in der Job-Konfiguration als RunBeforeJob oder RunAfterJob angeben.
Sie können die Console auch die Datei mit den Kommandos einlesen lassen, wenn Sie sie so starten:
./bconsole -c ./bconsole.conf <Dateiname
wobei die Datei Dateiname beliebige und beliebig viele Kommandos enthalten kann.
Als ein Beispiel, eine Datei die während Entwicklungstests von Bacula benutzt wird, es wird ein Festplatten-Volume gelabelt, ein Job gestartet und die gesicherten Dateien wiederhergestellt:
./bconsole -c ./bconsole.conf <<END_OF_DATA @output /dev/null messages @output /tmp/log1.out label volume=TestVolume001 run job=Client1 yes wait messages @# @# now do a restore @# @output /tmp/log2.out restore current all yes wait messages @output quit END_OF_DATA
Die Ausgaben des Jobs werden dabei zu /tmp/log1.out und die Ausgaben der Wiederherstellung zu /tmp/log2.out umgeleitet. Um automatisch zu überprüfen, ob beides erfolgreich war, werden die beiden Log-Dateien mit diesem Script kontrolliert:
grep "^Termination: *Backup OK" /tmp/log1.out backupstat=$? grep "^Termination: *Restore OK" /tmp/log2.out restorestat=$?
Fall Sie das label-Kommando zum labeln eines Volumes benutzt haben, wird es automatisch zu dem angegebenen Pool hinzugefügt. Alternativ können Sie aber auch Volumes zu einem Pool hinzufügen ohne sie zu labeln. Diese können dann später je nachdem gelabelt werden, wie Bacula sie benötigt.
Die folgenden Informationen müssen Sie vor dem hinzufügen haben:
Um die Volumes zu dem Pool hinzuzufügen, können Sie dann beispielweise folgende Kommandos ausführen:
*add Enter name of Pool to add Volumes to: Default Enter the Media Type: DLT8000 Enter number of Media volumes to create. Max=1000: 10 Enter base volume name: Save Enter the starting number: 1 10 Volumes created in pool Default *
Zur Kontrolle können Sie sich dann die neuen Volumes anzeigen lassen:
*list media pool=Default +-------+----------+---------+---------+-------+------------------+ | MedId | VolumeNa | MediaTyp| VolStat | Bytes | LastWritten | +-------+----------+---------+---------+-------+------------------+ | 11 | Save0001 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 12 | Save0002 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 13 | Save0003 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 14 | Save0004 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 15 | Save0005 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 16 | Save0006 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 17 | Save0007 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 18 | Save0008 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 19 | Save0009 | DLT8000 | Append | 0 | 0000-00-00 00:00 | | 20 | Save0010 | DLT8000 | Append | 0 | 0000-00-00 00:00 | +-------+----------+---------+---------+-------+------------------+ *
Bitte beachten Sie, dass die Console automatisch eine fortlaufende Nummer an den Volume-Namen (Save in diesem Beispiel) anhängt. Wenn Sie diese Nummern nicht angehängt haben möchten, müssen Sie auf die Frage ,,Enter number of Media volumes to create. Max=1000:`` mit 0 (Null) antworten. Dann wird nur ein einzelnes Volume, mit dem von Ihnen eingegebenen Namen, erzeugt.
Kern Sibbald 2009-08-20