Unterabschnitte


Kurzanleitung

Diese Kapitel soll Ihnen helfen Bacula in Betrieb zu nehmen. Dazu wird vorrausgesetzt, dass Sie Bacula installiert aber noch keine Änderungen an den Konfigurations-Dateien (.conf) vorgenommen haben. Falls Sie schon Änderungen durchgeführt haben, deinstallieren Sie Bacula und installieren es erneut. Alle Beispiele in diesem Kapitel gehen von der Standard-Konfiguration nach der Installation aus. Wenn Sie Bacula in Ihrem Home-Verzeichnis installiert haben, sind keine root-Rechte notwendig um den Beispielen zu folgen. Alle Volumes werden in /tmp erstellt und es wird nur das Verzeichnis mit dem Bacula-Quelltext gesichert. Beachten Sie bitte, dass bei produktiven Installationen zumindest der Bacula-Client-Dienst (bacula-fd) als Benutzer root laufen muss. Mehr Informationen dazu finden Sie im Kapitel über Sicherheitsbelange im Bacula-Installations-Handbuch..

Der generelle Ablauf ist folgender:

  1. cd <Installations-Verzeichnis>
  2. starten Sie die Datenbank (falls Sie MySQL oder PostgreSQL benutzen)
  3. starten Sie die Bacula-Dienste mit ./bacula start
  4. starten Sie das Console-Programm um den Director-Dienst bedienen zu können
  5. starten Sie einen Backup-Job
  6. Wenn das Volume voll ist, müssen Sie es unmounten, falls es ein Tape ist, müssen Sie ein neues labeln. Allerdings wird in diesem Kapitel nur mit Festplatten-Volumes gearbeitet, so dass Sie sich im Moment noch keine Gedanken um Tape machen müssen.
  7. versuchen Sie einige der gerade gesicherten Dateien wiederherzustellen. Stellen Sie dabei sicher, dass die Dateien dabei korrekt verarbeitet werden. Es ist besser jetzt zu testen, als auf den Ernstfall zu warten.
  8. fügen Sie einen zweiten Client hinzu.

Jeder dieser Schritte wird im folgenden ausführlich erklärt.

Vor dem Start von Bacula

Bevor Sie Bacula das erste Mal in der Produktion einsetzen, empfehlen wir Ihnen das test-Kommando des btape-Programms auszuführen. Die Beschreibung dazu finden Sie im Kapitel btape des Handbuchs über die Bacula-Dienstprogramme. Dadurch können Sie sicherstellen, dass Bacula ordnungsgemäß mit Ihrem Bandlaufwerk zusammenarbeitet. Wenn Sie ein modernes HP, Quantum oder Sony DDS- oder DLT-Laufwerk unter Linux verwenden, können Sie diesen Test auslassen, da diese Kombination im Normalfall immer funktionieren. In allen anderen Fällen sollten Sie diesen Tests aber durchführen bevor Sie hier weitermachen. Innerhalb des btape-Programms können Sie auch mittels des fill-Kommandos das Vollschreiben eines Tapes simulieren, so dass Bacula ein neus Tape laden muss, um den Test fortzusetzen. Bedenken Sie aber, dass ein solcher Test mehrere Stunden dauern kann, abhängig von der Speicherkapazität Ihres Bandlaufwerks.


Starten der Datenbank

Wenn Sie MySQL oder PostgreSQL als Katalog-Datenbank benutzen, müssen Sie die Datenbank vor Bacula starten. Andernfalls werden Sie beim Start von Bacula Fehlermeldungen erhalten. Um Ihre lokale MySQL-Instanz zu starten oder zu stoppen, können Sie die Scripte startmysql und stopmysql aus dem Bacula-Quelltext verwenden. Im Falle von SQLite ist kein Start der Datenbank notwendig, dass wird beim Start von Bacula automatisch getan. In Produktionsumgebungen sollten Sie sicherstellen, dass Ihre Katalog-Datenbank im Falle eines Reboots vor dem Bacula-Diensten gestartet wird.


Starten der Bacula-Dienste

Wenn Sie Bacula aus dem Quelltext übersetzt oder die rpm-Pakete installiert haben, können Sie die drei Bacula-Dienste einfach durch Eingabe von:

./bacula start

im Installations-Verzeichnis starten.

Dieses Script starten den Storage-, File- und Director-Dienst, die danach im Hintergrund ausgeführt werden. Wenn Sie die Autostart-Scripte mitinstalliert haben, können Sie Bacula automatisch beim Rechnerstart oder auch gezielt über bacula-dir, bacula-fd und bacula-sd im Verzeichnis /etc/init.d, die einzelnen Dienste starten und stoppen.

Wie Sie die Dienste unter Windows starten und anhalten können, finden Sie im Kapitel ,,Die Windows-Version von Bacula`` in diesem Handbuch.

Bei der Installation der rpm-Pakete werden die Dienste so konfiguriert, dass sie unter der Gruppe bacula als Benutzer root ausgeführt werden. Die Gruppe bacula wird dabei, falls notwendig, automatisch erstellt. Alle Benutzer die der Gruppe bacula angehören haben Zugriff auf alle Dateien die die Dienste anlegen. Um das abzuändern, müssen Sie diese Start-Scripte entsprechend anpassen:

und Bacula, wie oben beschrieben, neu starten.

Im Bacula-Installations-Handbuch wird beschrieben, welche Schritte durchzuführen sind, um Bacula automatisch beim booten des Systems zu starten.

Starten der Console

Um den Status von Jobs abzufragen oder um neue Jobs zu starten müssen Sie , aus dem Installationsverzeichnis, das Console-Programm starten:

./bconsole

Alternativ zu diesem Kommando können Sie auch das Bacula-Administration-Tool verwenden. Das setzt vorraus, dass Sie Qt4 installiert und bei der Konfiguration des Bacula-Quelltextes die Option --enable-bat angegeben haben. Starten Sie bat mit:

./bat

bat bietet Ihnen eine graphische Benutzerschnittstelle zum Director-Dienst und wesentlich mehr Funktionen als die bconsole.

Weitere Möglichkeiten sind die GNOME-Konsole bgnome-console oder das wxWidgets-Programm bwx-console.

Der Einfachheit halber wird hier nur die bconsole beschrieben. Die meisten Kommandos können Sie aber in identischer Form auch mit bat, bgnome-console und der bwx-console ausführen.

Das Befehl ./bconsole startet das Console-Programm das sich mit dem Bacula-Director-Dienst verbindet. Da Bacula ein netzwerkfähiges Programm ist, können Sie die Console auf einem beliebigen Computer starten. Meistens wird es aber auf derselben Maschine, auf der auch der Director-Dienst läuft, ausgeführt. Beim starten gibt die Console folgendes aus:

[kern@polymatou bin]$ ./bconsole
Connecting to Director lpmatou:9101
1000 OK: HeadMan Version: 2.1.8 (14 May 2007)
*

Der Stern ist das Console-Prompt.

Geben Sie help ein, um eine Liste der verfügbaren Kommandos zu erhalten:

*help
  Command    Description
  =======    ===========
  add        add media to a pool
  autodisplay autodisplay [on|off] -- console messages
  automount  automount [on|off] -- after label
  cancel     cancel [<jobid=nnn> | <job=name>] -- cancel a job
  create     create DB Pool from resource
  delete     delete [pool=<pool-name> | media volume=<volume-name>]
  disable    disable <job=name> -- disable a job
  enable     enable <job=name> -- enable a job
  estimate   performs FileSet estimate, listing gives full listing
  exit       exit = quit
  gui        gui [on|off] -- non-interactive gui mode
  help       print this command
  list       list [pools | jobs | jobtotals | media <pool=pool-name> |
files <jobid=nn>]; from catalog
  label      label a tape
  llist      full or long list like list command
  memory     print current memory usage
  messages   messages
  mount      mount <storage-name>
  prune      prune expired records from catalog
  purge      purge records from catalog
  python     python control commands
  quit       quit
  query      query catalog
  restore    restore files
  relabel    relabel a tape
  release    release <storage-name>
  reload     reload conf file
  run        run <job-name>
  status     status [[slots] storage=<name> | dir | client]=<name>
  setdebug   sets debug level
  setip      sets new client address -- if authorized
  show       show (resource records) [jobs | pools | ... | all]
  sqlquery   use SQL to query catalog
  time       print current time
  trace      turn on/off trace to file
  unmount    unmount <storage-name>
  umount     umount <storage-name> for old-time Unix guys
  update     update Volume, Pool or slots
  use        use catalog xxx
  var        does variable expansion
  version    print Director version
  wait       wait until no jobs are running [<jobname=name> | <jobid=nnn> | <ujobid=complete_name>]
*

Im Bacula-Console-und-Benutzer-Handbuch finden Sie eine detaillierte Beschreibung aller Kommandos.


Starten des ersten Jobs

An diesem Punkt gehen wir von folgenden Voraussetzungen aus:

Weiterhin nehmen wir an, dass Bacula mit der Standard-Konfiguration läuft.

Geben Sie das folgende Kommando in der Console ein:

show filesets

und Sie bekommen, in etwa, diese Ausgaben angezeigt:

FileSet: name=Full Set
      O M
      N
      I /home/bacula/regress/build
      N
      E /proc
      E /tmp
      E /.journal
      E /.fsck
      N
FileSet: name=Catalog
      O M
      N
      I /home/bacula/regress/working/bacula.sql
      N

Was Sie sehen ist ein vordefiniertes FileSet namens ,,Full Set``, dass das Verzeichnis mit Ihrem Bacula-Quelltext sichert. Der angeteigte Verzeichnisname ist abhängig von Ihrer Konfiguration. Zum Testen ist das ein gutes Verzeichnis, es ist von angemessener Größ und enthält genügend Dateien, ohne zu unübersichtlich zu sein. Das zweite angezeigte FileSet, namens ,,Catalog``, wird benutzt um die Katalog-Datenbank zu sichern, aber das ist im Moment noch nicht von Interesse. Alle Einträge mit I bezeichnen Verzeichnisse oder Dateien die vom Job ,,included``, also gesichert werden sollen. Die E-Einträge bezeichnen Dateien und Verzeichnisse die ,,excluded``, also nicht gesichert werden sollen. Einträge mit O geben FileSet-Optionen an. Die FileSet-Einträge können in der Konfigurations-Datei des Director-Dienstes angepasst werden. Das passiert innerhalb des FileSet-Eintrags bei den Zeilen die mit File= beginnen.

Jetzt können Sie Ihren ersten Backup-Job starten. Der Job wird das Verzeichnis mit dem Bacula-Quelltext auf ein Festplatten-Volume unterhalb von /tmp sichern. Geben Sie bitte folgendes Kommando ein:

status dir

und Sie erhalten diese Ausgaben:

rufus-dir Version: 1.30 (28 April 2003)
Daemon started 28-Apr-2003 14:03, 0 Jobs run.
Console connected at 28-Apr-2003 14:03
No jobs are running.
Level          Type     Scheduled          Name
=================================================================
Incremental    Backup   29-Apr-2003 01:05  Client1
Full           Backup   29-Apr-2003 01:10  BackupCatalog
====

wobei die Uhrzeiten, Director-Version und -Name bei Ihrer Installation wahrscheinlich abweichen. Die Ausgabe zeigt Ihnen, dass ein inkrementeller Backup-Job für den Client ,,Client1`` um 01:05 Uhr geplant ist. Danach, um 01:10 Uhr, wird ein Voll-Backup der Katalog-Datenbank ausgeführt. Bevor Sie später weitere Clients zu Ihrer Konfiguration hinzufügen, sollten Sie den Namen ,,Client1`` z.B. auf den Namen Ihres Computers setzen, ansonsten kann es mit mehreren Clients unübersichtlich werden.

Geben Sie jetzt

status client

ein um sich den Status Ihres Clients anzeigen zu lassen:

The defined Client resources are:
     1: rufus-fd
Item 1 selected automatically.
Connecting to Client rufus-fd at rufus:8102
rufus-fd Version: 1.30 (28 April 2003)
Daemon started 28-Apr-2003 14:03, 0 Jobs run.
Director connected at: 28-Apr-2003 14:14
No jobs running.
====

In diesem Beispiel heisst der Client ,,rufus-fd``. Da nur ein Client konfiguriert ist, wählt Bacula ihn automatisch aus und zeigt den Status an. Die Ausgaben ab der Zeile rufus-sd Version: ... stammen vom Client, so das Sie sicher sein können, dass der Bacula-Client-Dienst auf dieser Maschine korrekt ausgeführt wird.

Abschließend lassen Sie sich noch den Status des Storage-Dienstes anzeigen. Geben Sie dazu folgendes Kommando ein:

status storage

und Sie sehen:

The defined Storage resources are:
     1: File
Item 1 selected automatically.
Connecting to Storage daemon File at rufus:8103
rufus-sd Version: 1.30 (28 April 2003)
Daemon started 28-Apr-2003 14:03, 0 Jobs run.
Device /tmp is not open.
No jobs running.
====

Da es nur einen Storage-Eintrag gibt, wird dieser wieder automatisch von Bacula ausgewählt. Momentan gibt es nur das Storage-Device /tmp, welches nicht geöffnet ist und es laufen aktuell keine Jobs.

Jetzt starten Sie den ersten Job:

run

die folgende Meldung erscheint:

Using default Catalog name=MyCatalog DB=bacula
A job name must be specified.
The defined Job resources are:
     1: Client1
     2: BackupCatalog
     3: RestoreFiles
Select Job resource (1-3):

Da es mehr als einen Job-Eintrag in der Director-Dienst-Konfiguration gibt, müssen Sie jetzt den gewünschten auswählen. Geben Sie bitte 1 ein und Bacula zeigt Ihnen die Job-Details an:

Run Backup job
JobName:  Client1
FileSet:  Full Set
Level:    Incremental
Client:   rufus-fd
Storage:  File
Pool:     Default
When:     2003-04-28 14:18:57
OK to run? (yes/mod/no):

Bevor Sie fortfahren und den Job starten, sollten Sie sich die Ausgaben genau ansehen und verstehen. Bacula fragt Sie, ob es OK ist den folgenden Job zu starten: Der Name des Jobs ist Client1, das FileSet heißt Full Set und der Job wird mit dem Level Incremental auf dem Client rufus-fd laufen. Die gesicherten Daten werden in den Pool Default auf dem Storage File abgelegt und der Job wird sofort gestartet, da unter When die aktuelle Uhrzeit angezeigt wird.

Sie haben nun die Wahl den Job durch Eingabe von yes zu starten oder mittels mod ein oder mehrere Job-Parameter anzupassen. Wenn Sie no eingeben wird der Job nicht gestartet. Geben Sie jetzt yes ein, danach sehen Sie sofort wieder die Eingabeaufforderung der Console, den Stern. Nachdem Sie einige Sekunden gewartet haben, geben Sie bitte messages ein und Sie erhalten in etwa folgende Ausgabe:

28-Apr-2003 14:22 rufus-dir: Last FULL backup time not found. Doing
                  FULL backup.
28-Apr-2003 14:22 rufus-dir: Start Backup JobId 1,
                  Job=Client1.2003-04-28_14.22.33
28-Apr-2003 14:22 rufus-sd: Job Client1.2003-04-28_14.22.33 waiting.
                  Cannot find any appendable volumes.
Please use the "label"  command to create a new Volume for:
    Storage:      FileStorage
    Media type:   File
    Pool:         Default

Die erste Zeile zeigt Ihnen, dass kein vorheriges Voll-Backup des Clients gefunden wurde, daher wird der Backup-Level des Jobs auf Full, statt Incremental, gesetzt. Die zweite Zeile gibt an, dass der Job mit der Job-ID 1 gestartet wurde und in der dritten Zeile sehen Sie die Meldung ,,Cannot find any appendable volumes.``. Das bedeutet, dass Bacula im Pool Default kein passendes Volume für diesen Job gefunden hat. Zusätzlich erscheint der Hinweis das Label-Kommando zu benutzen, um ein Volume zu erstellen. Da dieser Schritt noch nicht ausgeführt wurde, ist diese Meldung normal.

Der Job ist jetzt dadurch blockiert, dass er auf ein passendes Volume wartet. Das können Sie überprüfen, inden Sie das Kommando status director ausführen. Damit der Job laufen kann muss zuerst ein Volume erstellt werden. Dazu benutzen Sie das Kommando:

label

worauf Bacula folgendes ausgibt:

The defined Storage resources are:
     1: File
Item 1 selected automatically.
Enter new Volume name:

Sie müssen jetzt einen Namen für das zu erstellende Volume wählen. Volume-Namen sollten mit einem Buchstaben beginnen und dürfen Buchstaben, Zahlen sowie den Bindestrich, Unterstrich und den Punkt enthalten. In diesem Beispiel geben Sie bitte den Namen TestVolume001 ein:

Defined Pools:
     1: Default
Item 1 selected automatically.
Connecting to Storage daemon File at rufus:8103 ...
Sending label command for Volume "TestVolume001" Slot 0 ...
3000 OK label. Volume=TestVolume001 Device=/tmp
Catalog record for Volume "TestVolume002", Slot 0  successfully created.
Requesting mount FileStorage ...
3001 OK mount. Device=/tmp

Da nur ein Pool existiert, wird das neue Volume diesem automatisch zugeordnet. Im Hintergrund wird der Job jetzt gestartet. Mit den Kommandos status director und status client können Sie den Ablauf verfolgen. Wenn status director keine laufenden Jobs mehr auflistet können Sie sich mit dem Kommando messages die Ausgaben zu dem beendeten Job anzeigen lassen:

28-Apr-2003 14:30 rufus-sd: Wrote label to prelabeled Volume
   "TestVolume001" on device /tmp
28-Apr-2003 14:30 rufus-dir: Bacula 1.30 (28Apr03): 28-Apr-2003 14:30
JobId:                  1
Job:                    Client1.2003-04-28_14.22.33
FileSet:                Full Set
Backup Level:           Full
Client:                 rufus-fd
Start time:             28-Apr-2003 14:22
End time:               28-Apr-2003 14:30
Files Written:          1,444
Bytes Written:          38,988,877
Rate:                   81.2 KB/s
Software Compression:   None
Volume names(s):        TestVolume001
Volume Session Id:      1
Volume Session Time:    1051531381
Last Volume Bytes:      39,072,359
FD termination status:  OK
SD termination status:  OK
Termination:            Backup OK
28-Apr-2003 14:30 rufus-dir: Begin pruning Jobs.
28-Apr-2003 14:30 rufus-dir: No Jobs found to prune.
28-Apr-2003 14:30 rufus-dir: Begin pruning Files.
28-Apr-2003 14:30 rufus-dir: No Files found to prune.
28-Apr-2003 14:30 rufus-dir: End auto prune.

Hier sehen Sie verschiedene Angaben wie die Laufzeit, Datenrate, verwendete Volumes und unter ,,Termination`` das der Backup-Job erfolgreich gelaufen ist. Nach der Eingabe von autodisplay on gibt die Console wartende Benachrichtigungen auch ohne Eingabe von messages aus.

Wenn Sie sich den Inhalt des /tmp-Verzeichnisses mit ls -l anzeigen lassen, sehen Sie das, mit dem Label-Kommando erstellte Volume:

-rw-r-----    1 bacula     bacula     39072153 Apr 28 14:30 TestVolume001

In diesem Festplatten-Volume wurden die Daten aus dem eben gelaufenen Job geschrieben. Wenn Sie weitere Jobs starten, werden deren Daten an dieses Volume angehängt.

Eventuell fragen Sie sich jetzt, ob Sie jedes Volume das Bacula benutzen soll, auf die oben beschriebene Weise erstellen müssen. Bei Festplatten-Volumes, wie eben benutzt, ist das nicht der Fall. Es ist möglich Bacula so zu konfigurieren, dass es automatisch neue Volumes erzeugt (labelt), wenn sie benötigt werden. Bei Tape-Volumes ist das allerdings nicht der Fall, diese müssen einzelnd gelabelt werden, bevor Bacula sie verwenden kann.

An dieser Stelle können Sie das Console-Programm mit quit beenden und die Bacula-Dienste mit ./bacula stop anhalten. Fall Sie wieder von Vorne anfangen möchten, löschen Sie das angelegte Volume mit rm /tmp/TestVolume001 und reinitialisieren Sie Ihre Datenbank mit den Komandos:

./drop_bacula_tables
./make_bacula_tables

Dadurch werden alle Informationen zu allen gelaufenen Jobs endgültig gelöscht. Zum Testen ist das duraus hilfreich, später in einer produktiven Umgebung werden Sie das wahrscheinlich nicht ausführen wollen.

Wenn Sie versuchen wollen, die in diesem Beispiel gesicherten Daten wiederherzustellen, lesen Sie bitte den folgenden Abschnitt.


Wiederherstellung Ihrer Daten

Wenn Sie die standardmäßige Konfiguration benutzt und wie oben beschrieben, den Bacula-Quelltext gesichert haben, können Sie mit der Console diese Daten auf dem folgenden Weg wiederherstellen:

restore all

worauf diese Auswahlliste erscheint:

First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.

To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Cancel
Select item:  (1-12):

Wie Sie sehen können, haben Sie mehrere Optionen, aber in diesem Beispiel wählen Sie bitte die 5. Dadurch wird eine Wiederherstellung des letzten Voll-Backups für einen anzugebenen Client ausgewählt:

Defined Clients:
     1: rufus-fd
Item 1 selected automatically.
The defined FileSet resources are:
     1: 1  Full Set  2003-04-28 14:22:33
Item 1 selected automatically.
+-------+-------+----------+---------------------+---------------+
| JobId | Level | JobFiles | StartTime           | VolumeName    |
+-------+-------+----------+---------------------+---------------+
| 1     | F     | 1444     | 2003-04-28 14:22:33 | TestVolume002 |
+-------+-------+----------+---------------------+---------------+
You have selected the following JobId: 1
Building directory tree for JobId 1 ...
1 Job inserted into the tree and marked for extraction.
The defined Storage resources are:
     1: File
Item 1 selected automatically.
You are now entering file selection mode where you add and
remove files to be restored. All files are initially added.
Enter "done" to leave this mode.
cwd is: /
$

Das es momentan nur einen Client, ein FileSet und ein Storage-Device gibt, wählt Bacula automatisch die entsprechenden Einträge aus. Zudem wird aus allen Dateien des Jobs ein Verzeichnis-Baum aufgebaut, ein Abbild der gesicherten Verzeichnis- und Datei-Struktur. Sie können jetzt die Kommandos cd und ls oder dir benutzen, um das Verzeichnis zu wechseln oder sich den Inhalt auflisten zu lassen. Wenn Sie, zum Beispiel, erst cd /home/bacula/bacula-2.4.1 wechseln (Ihr Pfad wird anders lauten) und dann dir ausführen, erhalten Sie eine Liste aller Dateien und Verzeichnisse im Bacula-Quelltext-Verzeichnis. Für weiter Informationen lesen Sie bitte auch das Kapitel ,,Wiederherstellung von Daten`` in diesem Handbuch.

Um diesen Auswahl-Modus zu beenden, geben Sie

done

ein. Danach sehen Sie diese Ausgaben:

Bootstrap records written to
   /home/bacula/testbin/working/restore.bsr
The restore job will require the following Volumes:
   
   TestVolume001
1444 files selected to restore.
Run Restore job
JobName:         RestoreFiles
Bootstrap:      /home/bacula/testbin/working/restore.bsr
Where:          /tmp/bacula-restores
Replace:        always
FileSet:        Full Set
Backup Client:  rufus-fd
Restore Client: rufus-fd
Storage:        File
JobId:          *None*
When:           2005-04-28 14:53:54
OK to run? (yes/mod/no):

Wenn Sie jetzt yes eingeben, werden die Datein unterhalb von /tmp/bacula-restores wiederhergestellt. Dies ist der Standard für die Wiederherstellung und lässt sich über mod und Where anpassen. Um die Dateien an ihrem originalen Ort widerherzustellen, müssen Sie Where entweder leer lassen oder auf / setzen. In diesem Beispiel antworten Sie bitte einfach mit yes um die Wiederherstellung zu starten. Warten Sie inene kurzen Moment und geben Sie messages ein. Wenn der Wiederherstellungs-Job beendet ist, sehen Sie folgende Ausgaben:

28-Apr-2005 14:56 rufus-dir: Bacula 2.1.8 (08May07): 08-May-2007 14:56:06
Build OS:               i686-pc-linux-gnu suse 10.2
JobId:                  2
Job:                    RestoreFiles.2007-05-08_14.56.06
Restore Client:         rufus-fd
Start time:             08-May-2007 14:56
End time:               08-May-2007 14:56
Files Restored:         1,444
Bytes Restored:         38,816,381
Rate:                   9704.1 KB/s
FD Errors:              0
FD termination status:  OK
SD termination status:  OK
Termination:            Restore OK
08-May-2007 14:56 rufus-dir: Begin pruning Jobs.
08-May-2007 14:56 rufus-dir: No Jobs found to prune.
08-May-2007 14:56 rufus-dir: Begin pruning Files.
08-May-2007 14:56 rufus-dir: No Files found to prune.
08-May-2007 14:56 rufus-dir: End auto prune.

Nachdem Sie die Console verlassen haben, können Sie sich die wiederhergestellten Dateien untehlab von /tmp/bacula-restores ansehen. Um diese Dateien wieder zu löschen, führen Sie :

rm -rf /tmp/bacula-restore

aus.

Beenden des Console-Programms

Die Console wird durch Eingabe von quit beendet.


Hinzufügen eines zweiten Clients

Wenn Sie die oben beschriebenen Beispiele zur Sicherung und Wiederherstellung nachvollziehen konnten, können Sie jetzt einen zweiten Client hinzufügen. Dafür benötigen Sie einen zweiten Computer den Sie sichern wollen. Auf diesem Client müssen Sie nur den Bacula-Client-Dienst installieren, bacula-fd oder auf Windows bacula-fd.exe, sowie eine passende Konfigurations-Datei bacula-fd.conf. Sie können als Vorlage die bereits bestehende Konfigurations-Datei Ihresersten Clients benutzen. Ändern Sie einfach nur den Namen des Clients im Abschnitt ,,FileDaemon`` der Datei. Ein Beispiel, aus :

...
#
# "Global" File daemon configuration specifications
#
FileDaemon {                          # this is me
  Name = rufus-fd
  FDport = 9102                  # where we listen for the director
  WorkingDirectory = /home/bacula/working
  Pid Directory = /var/run
}
...

wird dabei:

...
#
# "Global" File daemon configuration specifications
#
FileDaemon {                          # this is me
  Name = matou-fd
  FDport = 9102                  # where we listen for the director
  WorkingDirectory = /home/bacula/working
  Pid Directory = /var/run
}
...

wobei nur der Ausschnitt der Datei dargestellt wird, in dem die Änderung von rufus-fd zu matou-fd gemacht wird. Alle anderen Einträge können im Moment so bleiben wie sie sind. Eventuell wollen Sie später noch ein anderes Passwort für den zweiten Client verwenden. Die angepasste Konfigurations-datei können Sie jetzt auf dem Client als bacula-fd.conf speichern. Des weiteren müssen Sie jetzt die Konfiguration des Bacula-Director-Dienstes um die Einträge für den neuen Client erweitern. Dazu kopieren Sie den Job- und Client-Eintrag des rufus-fd in der Director-Dienst-Konfiguration bacula-dir.conf und passen die Namen in den Einträgen entsprechend an:

#
# Define the main nightly save backup job
#   By default, this job will back up to disk in /tmp
Job {
  Name = "Matou"
  Type = Backup
  Client = matou-fd
  FileSet = "Full Set"
  Schedule = "WeeklyCycle"
  Storage = File
  Messages = Standard
  Pool = Default
  Write Bootstrap = "/home/bacula/working/matou.bsr"
}
# Client (File Services) to backup
Client {
  Name = matou-fd
  Address = matou
  FDPort = 9102
  Catalog = MyCatalog
  Password = "xxxxx"                  # password for
  File Retention = 30d                # 30 days
  Job Retention = 180d                # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

Verwenden Sie bitte vollständige Hostnamen für den Parameter Address im Client-Eintrag, wenn Sie etwas wie ,,localhost`` verwenden, kann es zu Problem bei der Namensauflösung kommen. Teilweise werden diese Parameter vom Director-Dienst zu den Client- oder Storage-Diensten gesendet, wo die Auflösung von ,,localhost`` dann etwas anderes bewirkt als gewollt.

Damit sind alle notwendigen Schritte zur Definition des zweiten Clients abgeschlossen. Die bestehende Konfiguration des Clients rufus-fd wurde kopiert und angepasst, so dass die Einträge jetzt matou und matou-fd heißen. Ebenso wurden die Einträge in der Director-Dienst-Konfiguration kopiert und angepasst. Geädert haben sich nur der Job-Name, der Client-Name und die Client-Adresse sowie der Name der Bootstrap-Datei. Das bedeutet, dass der Client matou-fd zur selben Zeit in den selben Pool gesichert wird, wie der Client rufus-fd. Das können Sie später natürlich noch Ihren Bedürfnissen anpassen, aber für dieses Beispiel wollen wir die Konfiguration so einfach wie möglich belassen.

Damit der Director-Dienst die neue Konfiguration einliest, muss er entweder neue gestartet werden, oder Sie rufen in der Console das Kommando reload auf. Jetzt ist alles notwendige getan, damit der zweite Client gesichert werden kann.

Die grösten Unterschiede zu einer produktiven Bacula-Installation sind jetzt nur noch, dass alle (beiden) Clients in einen Pool und zur selben Zeit gesichert werden. Aber das könen Sie jederzeit entsprechend umkonfigurieren. Auf alle Fälle sollte aus Sicherheitsgründen das Passwort des zweiten Clients noch geändert werden.

Einige wichtige Tipps die die Namen und Passwörter betreffen, sowie ein Diagramm welche Namen und Passwörter übereinstimmen müssen, finden Sie im Kapitel ,,Autorisierungs-Probleme`` im Bacula-Fehlerdiagnose-Handbuch.


Der erste Tape-Wechsel

Wenn die geplanten Backup-Jobs laufen, typischerweise Nachts, wird irgendwann das Tape, beziehungsweise das Festplatten-Volume, vollgeschrieben sein. Bacula kann keine weiteren Daten auf dem Laufwerk schreiben und gibt eine Meldung, ähnlich der folgenden, aus:

rufus-sd: block.c:337 === Write error errno=28: ERR=No space left
          on device

Daran können Sie erkennen, dass ein Schreibfehler auf dem Gerät aufgetreten ist, die Fehlerbeschreibung lautet ,,kein freier Platz mehr auf dem Gerät. Bacula versucht jetzt im entsprechenden Pool ein Volume zu finden, auf dem das Backup weiterlaufen kann. Im besten Fall sind in dem Pool alte Volumes verfügbar, deren Aufbewahrungs-Zeitraum abgelaufen ist. Bacula wird dann das älteste Volume automatisch wiederverwenden und überschreiben. Weitere Informationen dazu finden Sie im Kapitel über automatisches Volume Recycling im Handbuch ``Bacula Konzepte und Überblick,,. Falls Ihre Volumes, eventuell durch einen Konfigurations-Fehler, nicht automatisch überschrieben werden, finden Sie im selben Kapitel unter ``manuelle Wiederverwendung der Volumes,, Hilfe.

Wenn Bacula kein Volume im Pool findet auf dem das Backup fortgesetzt werden kann, erhalten Sie folgende Benachrichtigung:

rufus-sd: Job kernsave.2002-09-19.10:50:48 waiting. Cannot find any
          appendable volumes.
Please use the "label"  command to create a new Volume for:
    Storage:      SDT-10000
    Media type:   DDS-4
    Pool:         Default

Solange Sie kein neues Volume erstellen, wiederholt Bacula diese Meldung erst stündlich, dann zwei-stündlich und so weiter, in immer doppelten Zeitabständen. Der maximale Interval beträgt dabei 24 Stunden.

Jetzt stellt sich natürlich die Frage: Was tun?

Die Antwort ist einfach: Starten Sie das Console-Programm und geben Sie das Laufwerk mit dem unmount-Kommando frei. Wenn Sie nur ein einzelnes Laufwerk haben, wird Bacula das automatisch auswählen, falls Sie mehrere Laufwerke haben, achten Sie darauf, dass Sie das freigegeben welches in der Benachrichtigung erwähnt ist. In diesem Beispiel SDT-10000.

Als nächtes entfernen Sie das volle Volume aus dem Gerät und legen ein Neues ein. Auf einigen älteren Laufwerken müssen Sie vorher eine ``EOF,,- (End of File) Markierung schreiben, damit das Band nicht losläuft, wenn Bacula versucht das Label zu lesen.

Anschließend benutzen Sie das label-Kommando um das neue Volume zu labeln. Das label-Kommando veranlaßt den Storage-Dienst eine Software-Markierung auf das Volume zu schreiben. Wenn das erfolgreich war, wird das neue Volume dem entsprechendem Pool zugeordnet und das Volume in das Laufwerk geladen. Weiter oben in diesem Kapitel finden Sie weitere Information bezüglich des label-Kommandos.

Das Ergebnis ist, dass Bacula den Backup-Job mit dem neuen Volume fortsetzen kann.

Wenn Sie einen Pool haben dessen Volumes periodisch wiederverwendet werden, kann statt der Meldung ``Cannot find any appendable volumes,, auch die Aufforderung kommen, ein bestimmtes Volume zu mounten. In diesem Fall solten Sie genau dies auch tun. Falls das angefragte Volume, aus welchen Gründen auch immer, nicht mehr zur Verfügung steht, können Sie auch ein anderes beschreibbares Volume aus dem entsprechenden Pool mounten. Im Console-Programm können Sie das Kommando list volumes verwenden, um ein passendes Volume zu suchen.

Falls, trotz korrekt konfigurierter Aufbewahrungszeiträume, für einen Pool kein freies Volume mehr zur Verfügung steht, können Sie ein Volume auf die folgende Art zur Wiederverwendung freigeben:

Wenn es notwendig ist, dem Volume ein neues Label zu verpassen, folgen Sie bitte diesen zusätzlichen Schritten:

andere nützliche Consolen-Kommandos

status dir
Gibt den Status des Director-Dienstes, mit allen laufenden und für die nächsten 24 Stunden geplanten Jobs, aus.
status
Gibte eine Liste aller Dienste aus, deren Status abfragbar ist.
status jobid=nn
Gibt den Status eines laufenden Jobs mit der entsprechenden Job-ID aus.
list pools
Gibt die Liste aller in der Katalog-Datenbank bekannten Pools aus.
list media
Gibt die Liste aller im Katalog definierten Volumes aus.
list jobs
Gibt die Liste aller gelaufenen Jobs aus.
list jobid=nn
Zeigt den Katalog-Eintrag der angegebenen Job-ID an.
list jobtotals
Gibt eine Liste mit Übersichtswerten für alle Jobs aus.
list files jobid=nn
Gibt die Liste der gesicherten Dateien und Verzeichnisse für die angegebene Job-ID aus.
list jobmedia
Zeigt die benutzten Volume-Namen für alle Jobs im Katalog an.
messages
Gibt die wartenden Benachrichtigungen in der Console aus.
unmount storage=storage-name
Gibt das angegebene Laufwerk, falls es nicht gerade benutzt wird. Diese Kommando kann benutzt werden um das Laufwerk zu leeren, wenn man ein freies Gerät zum Beispiel zum labeln von neuen Tapes benötigt.
mount storage=storage-name
Lädt ein anzugebenes Volume in das Laufwerk. Dieses Kommando wird ebenfalls nach einem Bandwechsel ausgeführt, nachdem Bacula die Meldung ``Please mount Volume xxx,, ausgegeben hat. Das Kommandos signalisiert Bacula das ein neues Volume im Laufwerk zur Verfügung steht.
quit
beendet das Console-Programm

Die meisten oben genannten Kommandos werden Sie nach weiteren benötigten Parameter fragen, wenn sie ohne welche aufgerufen werden.

Debug-Ausgaben der Dienste

Falls Sie die Debug-Ausgaben der Dienste im laufenden Betrieb sehen wollen, können Sie sie, aus dem Installationsverzeichnnis, wie folgt starten:

./bacula start -d100

Die Ausgaben können hilfreich sein, falls die Dienste nicht korrekt starten. Normalerweise werden diese Ausgaben auf /dev/null umgeleitet, erst bei einem Debug-Level größer als 0 werden sie auf dem Terminal ausgegeben.

Um alle drei Dienste wieder zu stoppen führen Sie :

./bacula stop

aus. Falls einer der Dienste nicht korrekt starten könnte, kann es sein, dass beim stoppen eine Fehlermeldung bezüglich nicht gefundener PIDs auftreten. Das ist aber ziemlich selten.

Um ein Systems komplett sichern zu können, muss der Client-Dienst als Benutzer root laufen damit er die Berechtigung hat auf alle Dateien zuzugreifen. Die anderen beiden Dienste, Storage- und Director-Dienst, benötigen diese Berechtigung nicht. Allerdings braucht der Storage-Dienst Lese- und Schreibrechte auf den Tape-Devices (zum Beispiel /dev/nstx). Auf vielen Systemen ist diser Zugriff nur dem Benutzer root gestattet, so dass der Storage-Dienst entweder als root laufen muss oder Sie müssen die Rechte auf den Devices so anpassen, dass auch normale Benutzer Zugriff haben. Auch die Katalog-Datenbank kann im Falle von MySQL oder PostgreSQL ohne root-Rechte laufen.

Geduld wenn die Dienste starten oder neue Tapes eingelesen werden

Wenn Sie die Dienste starten versucht der Storage-Dienst alle definierten Storage-Geräte zu öffnen und die enthaltenen Volumes zu prüfen. Bis diese Vorgänge abgeschlossen sind, nimmt der Storage-Dienst keine Verbindungen vom Console-Programm entgegen. Falls ein bereits beschriebenes Tape im Laufwerk ist, wird dieses zurückgespult, was bei einigen Laufwerken mehrere Minuten dauern kann. Daher brauchen Sie etwas Geduld wenn Sie nach dem starten der Dienste den Storage-Dienst kontaktieren wollen. Falls Sie Ihr Tape-Laufwerk sehen können, erkennen Sie an den Lichter wann das Laufwerk bereit ist.

Die selben Aspekte treffen zu, wenn Sie ein neues unbeschriebens Tape zum Beispiel in ein HP-DLT-Laufwerk einlegen. Es kann ein bis zwei Minuten dauern bis das Laufwerk erkennt, dass das Tape komplett leer ist. Wenn Sie schon innerhalb dieser Zeit versuchen das Volume mit dm mount-Kommando einzubinden, kann es sein das es zu Problemen mit dem SCSI-Treiber kommt. Haben Sie also auch in disem Fall Geduld und warten Sie ab bis das Laufwerk mit dem Einlesen des Tapes fertig ist, bevor Sie darauf zugreifen.

Verbindungsprobleme zwischen FD und SD

Wenn Ihre Client-Dienste Problem haben sich mit dem Storage-Dienst zu verbinden liegt das meistens daran, dass als Address des Storage-Dienstes kein vollständig qualifizierter Domain-Name angegeben ist. Der Rechner auf dem der Client-Dienst (nicht der Director-Dienst) läuft muss in der Lage sein diesen Namen in eine IP-Adresse aufzulösen. Ein Name der zum Beispiel auf dem Director-System funktionieren kann, aber garantiert nicht auf dem Client ist localhost. Die Angabe des Names ohne Domain, zum Beispiel megalon, kann funktionieren, besser ist es jedoch den Namen mit Domain anzugeben : megalon.ihredomain.de. Probleme mit Windows-Client-Systemen können Sie eventuell auch durch direkte Angabe der IP-Adresse als Address umgehen.

Falls die konfigurierte Address korrekt ist, aber trotzdem keine Verbindung zustande kommt, sollten Sie überprüfen ob andere Programme den vom Storage-Dienst benötigten Port 9103 benutzen. Die Bacula Port-Nummern sind zwar alle durch die IANA zugewiesen und kein anderes Progrtamm sollte sie benutzen, aber einige HP-Drucker benutzen sie zum Beispiel doch. Mittels netstat -a können Sie herrausfinden, welches Programm den Port 9103 geöffnet hat.

Kommandozeilen-Optionen der Dienste

Jedem der drei Dienste (Director, File/Client und Storage) können beim Start die folgenden Optionen, die auch beim Console-Programm funktionieren, übergeben werden:

-c <Datei>
gibt eine Datei an die als Konfigurations-Datei verwendet werden soll. Standardmäßig es ist der Dienst-Name gefolgt von .conf, also bacula-dir.conf für den Director-Dienst, sowie bacula-sd.conf und bacula-fd.conf für Storage- und Client/File-Dienst.

-d nn
Setzt den Debug-Level auf nn. Je höher der Level desto mehr Debug- Ausgaben werden erzeugt.

-f
Starte den Dienst im Vordergrund. Diese Option wird benötigt um die Dienste unter einem Debugger laufen zu lassen.

-g <Gruppenname>
Durch Angabe eines Gruppen-Namens können Sie den Dienst unter einem anderen Gruppen-Konto laufen lassen.

-s
Betriebssystem-Signale ignorieren. Diese Option wird benötigt um die Dienste unter einem Debugger laufen zu lassen.

-t
Liest die Konfigurations-Dateien ein und beendet den Dienst sofort wieder. Dient dazu die Konfiguration auf Fehler hin zu überprüfen.

-u <Benutzername>
Durch Angabe eines Benutzer-Namens können Sie den Dienst unter einem anderen Benutzer-Konto laufen lassen.

-v
Gibt genauere Fehler- und Informations-Meldungen aus. Sollte immer angegeben werden.

-?
Gibt die Version und die Liste der bekannten Optionen aus.


Einen Pool erstellen

Die Erstellung der Pools erfolgt automatisch aufgrund der Pool-Konfiguration wenn Bacula startet. Wenn Sie wissen was ein Pool ist, können Sie dieses Kapitel überspringen.

Eins der Dinge die Bacula wissen muss wenn ein Backup-Job startet ist, welches Volume zur Sicherung verwendet werden soll. Anstelle eines einzelnen Volumes wird in der Konfiguration ein Pool von Volumes angegeben, aus dem Bacula sich ein beschreibbares Volume für den Job aussucht. Bacula wird das erste verfügbare Volume aus dem Pool wählen das zu dem, in der Job-Konfiguration angegebenen, Storage-Device passt. Nachdem das Volume vollgeschrieben wurde, setzt Bacula den Volume-Status von Append auf Full, danach wird ein weiteres Volume aus dem Pool benutzt um den Job fortzusetzen. Wenn kein passendes Volume mehr im Pool verfügbar ist, wird der Director versuchen ein Volume zu finden dessen Daten bereits abgelaufen sind und das Volume recyclen. Wenn auch das fehlsclägt gibt Bacula eine Meldung aus mit dem Hinweis ein neues Volume in dem Pool zu erstellen

Bacula behält ständig die Übersicht über die Pools, die Volumes in den Pools und die verschiedenen Eigenschaften der Volumes.

Wenn Bacula startet wird sichergestellt, dass alle Pool-Einträge aus der Konfiguration auch in der Katalog-Datenbank vorhanden sind. Mit dem folgenden Console-Kommando können Sie das überprüfen:

list pools

in Abhängigkeit der konfigurierten Pools wird eine Liste wie diese angezeigt:

*list pools
Using default Catalog name=MySQL DB=bacula
+--------+---------+---------+---------+----------+-------------+
| PoolId | Name    | NumVols | MaxVols | PoolType | LabelFormat |
+--------+---------+---------+---------+----------+-------------+
| 1      | Default | 3       | 0       | Backup   | *           |
| 2      | File    | 12      | 12      | Backup   | File        |
+--------+---------+---------+---------+----------+-------------+
*

Wenn Sie versuchen einen bereits bestehenden Pool ein zweites Mal zu erstellen, wird Bacula folgende Meldung ausgeben:

Error: Pool Default already exists.
Once created, you may use the {\bf update} command to
modify many of the values in the Pool record.


Labeln der Volumes

Bacula benötigt auf jedem Volume ein Software-Label. Dabei gibt es verschiedene Möglichkeiten das Label auf ein Volume zu schreiben. Sie können die Volumes zum Beispiel labeln, wenn Bacula Sie mit einer entsprechenden Meldung dazu auffordert. Mittels des Console-Kommandos label erstellen Sie dann ein neues Volume im entsprechenden Pool. Alternativ können Sie auch das Console-Kommando relabel verwenden um ein bereits abgelaufenens Volume, im Status ``purged,,, wiederzuverwenden.

Eine weitere Methode ist es viele Volumes zu labeln und dann nach und nach zu benutzen, je nachdem wann Bacula ein neues Volume verlangt. Das wird meistens bei Tape-Volumes gemacht die dann in einem Autochanger verwendet werden können. Lesen Sie dazu auch das Kapitel ``automatisches Volume Wiederverwendung,, in diesem Handbuch.

Volumes mit dem Console-Programm labeln

Zum labeln der Volumes wird normalerweise das Console-Programm verwendet.

  1. ./bconsole
  2. label

Falls Bacula eine Meldung ausgibt, dass das Volume nicht gelabelt werden kann da es bereits ein Label enthält, müssen Sie ein ungelabeltes Volume in das Laufwerk einlegen.

Danach müssen Sie eins der konfigurierten Storage-Geräte auswählen in dem das zu labelnde Volume ist, zum Beispiel:

The defined Storage resources are:
     1: File
     2: 8mmDrive
     3: DLTDrive
     4: SDT-10000
Select Storage resource (1-4):

In dem Gerät das Sie jetzt auswählen sollte ein neues ungelabeltes Volume sein.

Bacula fragt Sie nun nach dem Namen für das Volume:

Enter new Volume name:

Falls Bacula diese Meldung ausgibt:

Media record for Volume xxxx already exists.

bedeutet es, dass der von Ihnen eingegebene Volume-Name schon in der Katalog-Datenbank existiert. Sie können sich alle definierten Volumes mit dem Kommando list media anzeigen lassen:

+---------------+---------+--------+----------------+-----/~/-+------------+-----+
| VolumeName    | MediaTyp| VolStat| VolBytes       | LastWri | VolReten   | Recy|
+---------------+---------+--------+----------------+---------+------------+-----+
| DLTVol0002    | DLT8000 | Purged | 56,128,042,217 | 2001-10 | 31,536,000 |   0 |
| DLT-07Oct2001 | DLT8000 | Full   | 56,172,030,586 | 2001-11 | 31,536,000 |   0 |
| DLT-08Nov2001 | DLT8000 | Full   | 55,691,684,216 | 2001-12 | 31,536,000 |   0 |
| DLT-01Dec2001 | DLT8000 | Full   | 55,162,215,866 | 2001-12 | 31,536,000 |   0 |
| DLT-28Dec2001 | DLT8000 | Full   | 57,888,007,042 | 2002-01 | 31,536,000 |   0 |
| DLT-20Jan2002 | DLT8000 | Full   | 57,003,507,308 | 2002-02 | 31,536,000 |   0 |
| DLT-16Feb2002 | DLT8000 | Full   | 55,772,630,824 | 2002-03 | 31,536,000 |   0 |
| DLT-12Mar2002 | DLT8000 | Full   | 50,666,320,453 | 1970-01 | 31,536,000 |   0 |
| DLT-27Mar2002 | DLT8000 | Full   | 57,592,952,309 | 2002-04 | 31,536,000 |   0 |
| DLT-15Apr2002 | DLT8000 | Full   | 57,190,864,185 | 2002-05 | 31,536,000 |   0 |
| DLT-04May2002 | DLT8000 | Full   | 60,486,677,724 | 2002-05 | 31,536,000 |   0 |
| DLT-26May02   | DLT8000 | Append |  1,336,699,620 | 2002-05 | 31,536,000 |   1 |
+---------------+---------+--------+----------------+-----/~/-+------------+-----+

Wenn Sie dann einen Namen eingegeben haben der noch nicht im Katalog vorhanden ist, wird Bacula Sie als nächstes nach dem Pool fragen in dem das neue Volume erstellt werden soll. Wenn es nur einen Pool gibt, wählt Bacula diesen automatisch aus.

Wenn das Volume dann erfolgreich gelabelt wurde, erstellt Bacula eine Katalog-Eintrag für das neue Volume. Darin wird der Name des Volumes sowie alle seine Parameter gespeichert. Zeitgleich wird das neue Volume auch für Backup-Jobs verfügbar.

Beimlabeln müssen Sie nur sehr wenige Daten eingeben, den Volume-Namen, den Pool und eventuell den Slot. Der Katalog-Eintrag für ein Volume enthält aber sehr viel mehr Werte. Die meisten davon werden aus der Pool-Konfiguration gesetzt, die für alle Volumes des Pools gilt.

Sie können Volumes auch zum Pool hinzufügen ohne sie physikalisch labeln zu müssen. Dazu kann das Console-Kommando add verwendet werden. Weitere Informationen darüber finden Sie im Kapitel ``Die Bacula Console,, des ``Bacula Console- und Benutzer-Handbuchs,,.

eric 2009-05-06