%%
%%

\chapter{Grundlegendes Volume-Management}
\label{DiskChapter}
\index[general]{Grundlegendes Volume-Management}
\index[general]{Management!Grundlegendes Volume}
\index[general]{Disk/Festplatten Volumes}

In diesem Kapitel werden die grundlegenden Funktionen erkl\"{a}rt,
die zum Volume-Management ben\"{o}tigt werden. Die meisten dieser Konzepte
sind sowohl f\"{u}r Tape- als auch f\"{u}r Disk/Festplatten-Volumes g\"{u}ltig.
Allerdings wurde dieses Kapitel \"{u}rspr\"{u}nglich geschrieben,
um das Mangement von Disk-Volumes zu beschreiben. Sie werden diese
Tendenz sicher stellenweise bemerken, trotzdem gelten alle Konfigurations-
M\"{o}glichkeiten gleicherma{\ss}en f\"{u}r Tape- und Disk-Volumes.

Disk-Volumes werden normalerweise benutzt, wenn sowieso sehr viel Festplatten-
Platz verf\"{u}gbar ist, oder die Backup-Jobs innerhalb eines sehr kleinen
Zeitfensters laufen m\"{u}ssen, wo die Festplatten einen Geschwindigkeitsvorteil
gegen\"{u}ber den Bandlaufwerken haben.

\section{Schl\"{u}sselkonzepte und Konfigurations-Parameter}
\label{Concepts}
\index[general]{Schl\"{u}sselkonzepte und Konfigurations-Parameter }
\index[general]{Records!Key Concepts and Resource }

Bacula dazu zu bringen, dass es auf Disk-Volumes statt auf Tapes schreibt
ist im einfachsten Fall sehr leicht zu bewerkstelligen. In der Konfiguration
des Storage-Dienstes geben Sie dazu als {\bf Archive Device} ein Verzeichnis an.
Wenn Sie, zum Beispiel, m\"{o}chten das Ihre Backups im Verzeichnis
{\bf /home/bacula/backups} gespeichert werden, k\"{o}nnen Sie folgende
Ger\"{a}te-Konfiguration verwenden:

\footnotesize
\begin{verbatim}
Device {
  Name = FileBackup
  Media Type = File
  Archive Device = /home/bacula/backups
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}
\end{verbatim}
\normalsize

Zus\"{a}tzlich muss der entsprechende {\bf Storage}-Eintrag in der Konfiguration
des Director-Dienstes vorhanden sein:

\footnotesize
\begin{verbatim}
Storage {
  Name = FileStorage
  Address = host.firma.de
  Password = xxxxx
  Device = FileBackup
  Media Type = File
}
\end{verbatim}
\normalsize

Bacula wird dann die Backup-Daten in die Datei
{\bf /home/bacula/backups/\lt{}Volume-Name\gt{}} schreiben.
\lt{}Volume-Name\gt{} ist dabei der Name eines vorher erstellten Volumes.
Falls Sie ein Volume namens {\bf Vol001} erstellt haben, wird Bacula also
in die Datei names {\bf /home/bacula/backups/Vol001} schreiben.
Obwohl Sie diese Datei sp\"{a}ter problemlos in ein anderes Verzeichnis
verschieben k\"{o}nnen, d\"{u}rfen Sie niemals den Namen der Datei \"{a}ndern.
Bacula verwendet den Datei-Namen des Volumes als Teil des internen Volume-Labels,
daher wird Bacula das Volume nicht mehr als korrekt erkennen, wenn der Dateiname
von Volume-Label abweicht.

Auch wenn bis jetzt alles sehr einfach aussieht gibt es doch ein paar Probleme
mit dieser Beispiel-Konfiguration. Das Erste ist, dass Bacula immer auf das
selbe Volume schreiben wird, so lange bis die Festplatte voll ist. Die
L\"{o}sung daf\"{u}r wird weiter unten beschrieben.

Zus\"{a}tzlich m\"{u}ssen Sie auch noch andere Details beachten, wenn Sie
zum Beispiel wollen, dass mehrere Backup-Jobs gleichzeitig laufen.
Eine Beispiel-Konfiguration f\"{u}r so ein Setup finden Sie am Ende
dieses Kapitels im Abschnitt \ilink{gleichzeitige Disk Jobs}{ConcurrentDiskJobs}.


\subsection{Pool-Konfigurations-Optionen zur Begrenzung der Volume-Benutzung}
\index[general]{Benutzung!Pool-Konfigurations-Optionen zur Begrenzung der Volume-}
\index[general]{Pool-Konfigurations-Optionen zur Begrenzung der Volume-Benutzung}

Hier ist eine Liste aller Optionen die Sie in der Pool-Konfiguration
angeben k\"{o}nnen, um die Benutzung der Volumes durch Bacula zu begrenzen:

\begin{itemize}
\item Um jedes Volume nur einmal zu benutzen (in diesem Beispiel nur f\"{u}r einen
Backup-Job pro Volume) k\"{o}nnen Sie 

   {\bf UseVolumeOnce = yes}

in der Pool-Konfiguration angeben.

\item Um nnn Backup-Jobs auf jedes Volume zu schreiben, benutzen Sie:

   {\bf Maximum Volume Jobs = nnn}.

\item Um die Gr\"{o}{\ss}e des Volumes zu begrenzen, konfigurieren Sie:

   {\bf Maximum Volume Bytes = mmmm}.

   Bitte beachten Sie, dass, wenn Sie Disk-Volumes mit Bacula-Version bis 
   1.39.28 verwenden, Sie die maximale Volume-Gr\"{o}{\ss}e auf einen
   sinnvollen Wert, wie zum Beispiel 5 GB, setzen. Das ist notwendig,
   weil Bacula w\"{a}hrend der Wiederherstellung das gesamte Volume
   lesen muss, bis an den Punkt wo die wiederherzustellenden Daten
   beginnen. Wenn Ihre Volumes 50GB gro{\ss} sind, dauert das
   nat\"{u}rlich entsprechend l\"{a}nger. Auch bei einer teilweise
   defekten Festplatte verlieren Sie wahrscheinlich weniger Volumes,
   wenn diese entsprechend kleiner sind.

\item Um die Zeit einzuschr\"{a}nken in der ein Volume beschrieben werden darf,
   k\"{o}nnen Sie diesen Parameter setzen:

{\bf Volume Use Duration = ttt}.
\end{itemize}

Obwohl Sie wahrscheinlich niemals die Anzahl der Bytes begrenzen wollen,
die auf ein Tape geschrieben werden d\"{u}rfen, k\"{o}nnen die anderen
genannten Konfigurations-Optionen auch bei Bandlaufwerken sehr n\"{u}tzlich
sein. Als Beispiel k\"{o}nnen Sie mit den oben beschriebenen Optionen
daf\"{u}r sorgen, dass Ihre B\"{a}nder in einer t\"{a}glichen Rotation
verwendet werden.

Wie schon erw\"{a}hnt, wird jede dieser Optionen innerhalb der Pool-
Konfiguration angegeben die f\"{u}r den Pool, in dem die Volumes sind,
gilt. Die Parameter {\bf Maximum Volume Job}, {\bf Maximum Volume Bytes}
und {\bf Volume Use Duration} k\"{o}nnen f\"{u}r jedes Volume einzelt
gesetzt werden. Dazu werden die Werte aus der Pool-Konfiguration beim
Labeln des Volumes in einen eigenen Datenbank-Eintrag, der nur f\"{u}r
das Volume g\"{u}ltig ist, \"{u}bernommen. Dieser Datenbank-Eintrag kann
dann mittels des Console-Kommandos {\bf update volume} seperat angepasst
werden. Dadurch das die Pool-Konfiguration als eigener Eintrag f\"{u}r
die Volumes in die Datenbank \"{u}bernommen wird, ist eine \"{A}nderung
in der Pool-Konfiguration nur f\"{u}r Volumes g\"{u}ltig die nachher
erstellt werden. Um die neue Pool-Konfiguration auch auf die
bereits bestehenden Volumes anzuwenden, muss in der Console bei dem
Kommando {bf update volume} die Funktion {bf All Volumes from Pool}
aufgrufen werden.

Als ein Beispiel f\"{u}r die Benutzung eines der oben genannten
Paramter, nehmen wir einmal an, Ihre Pool-Konfiguration sieht so aus:

\footnotesize
\begin{verbatim}
Pool {
  Name = File
  Pool Type = Backup
  Volume Use Duration = 23h
}
\end{verbatim}
\normalsize

Wenn Ihre Backup-Jobs dann einmal am Tag laufen (also alle 24 Stunden)
wird Bacula f\"{u}r jeden Backup-Lauf ein neues Volume verwenden, da f\"{u}r
die Volumes eine maximale Benutzungs-Zeit von 23 Stunden gesetzt ist.
Die Zeit gilt dabei ab dem ersten Schreibvorgang auf dem Volume.
Bedenken Sie, dass das Setzen einer Use-Duration f\"{u}r Tape-Volumes dazu
f\"{u}hren kann, dass eventuell auch am Wochenende neue leere Tapes in das Laufwerk
gelegt werden m\"{u}ssen (sofern Sie keinen Autochanger benutzen).

\subsection{Automatisches labeln der Volumes}
\label{AutomaticLabeling}
\index[general]{Automatisches labeln der Volumes}
\index[general]{Labeln!Volumes automatisch }

Wenn Sie die genannten Konfigurations-Parameter benutzen, sto{\ss}en
Sie wahrscheinlich auf das n\"{a}chste Problem: Sie m\"{u}ssen die
Volumes labeln. Sie k\"{o}nnen dabei zwischen zwei Varianten w\"{a}hlen,
entweder Sie labeln die Volumes manuell bevor Bacula sie ben\"{o}tigt,
oder Sie lassen Sie automatisch durch Bacula, in dem Moment wo sie
gebraucht werden, labeln. Beim automatischen Labeln der Volumes
k\"{o}nnen Sie auf eine vielzahl von Informationen, Umgebungsvariablen
und internen Z\"{a}hlern von Bacula zugreifen, um sinnvolle Volume-Label
erstellen zu lassen. Sie k\"{o}nnen auch mittels eines Python-Script
das Bacula-Event "`NewVolume"' auswerten und durch das Script ein
neues Volume erstellen lassen. Dabei haben Sie dann alle Freiheit was
den Namen des zu erstellenden Volumes angeht. Mehr Informationen
\"{u}ber die Verwendung von Python-Scripten finden Sie im Kapitel
\ilink{Python Scripte}{PythonChapter} dieses Handbuchs.

Das automatische Labeln von Volumes kann auch mit Tapes benutzt werden,
dabei ist allerdings zu bendeken, dass die Tapes daf\"{u}r gemountet
werden m\"{u}ssen, was eventuell menschliches Eingreifen erfordert.
Automatisches Labeln nach Templates (Vorlagen) funktioniert mit Autochangern
nicht, da Bacula niemals auf Slots zugreift, die unbekannte Tapes enthalten.
Im Kapitel \ilink{Autochanger}{AutochangersChapter} dieses Handbuchs
sind mehrere Methoden beschrieben, wie alle Tapes innerhalb des Autochangers
gelabelt werden k\"{o}nnen.

Automatisches Labeln der Volumes wird durch Anpassungen in der Pool-
(Director) und Ger\"{a}te- (Storage) Konfiguration, wie unten
beschrieben, aktiviert. In der Pool-Konfiguration m\"{u}ssen Sie Bacula
das Label-Format vorgeben. In diesem Format werden dann die neuen Volumes
benannt. In der einfachsten Form ist das Format nur der Volume-Name
an den Bacula dann eine vierstellige laufende Nummer anh\"{a}ngt.
Diese Nummer beginnt bei 0000 und wird pro Volume immer uns Eins erh\"{o}ht.
Wenn Sie Ihre Pool-Konfiguration also folgend anpassen:

\footnotesize
\begin{verbatim}
Pool {
  Name = File
  Pool Type = Backup
  Volume Use Duration = 23h
  LabelFormat = "Vol"
}
\end{verbatim}
\normalsize

wird Bacula Volumes names Vol0001, Vol0002 und so weiter immer dann erstellen
wenn sie ben\"{o}tigt werden. Weit komplexere und ausf\"{u}hrliche Namen
lassen sich mittels Variablen-Auswertung erstellen. Hilfe dazu finden Sie im
Kapitel \ilink{Variablen-Auswertung}{VarsChapter}.

N\"{a}here Angaben zum {\bf Label Format} finden Sie im Kapitel
"`Label Format"' des Bacula-Installations- und Konfigurations-Handbuchs.

Der zweite notwendige Schritt um das automatische Labeln zu aktivieren, ist es
dem Storage-Dienst das Labeln zu erlauben. Das tun Sie indem Sie {\bf LabelMedia = yes}
in der Ger\"{a}te-Konfiguration angeben:

\footnotesize
\begin{verbatim}
Device {
  Name = File
  Media Type = File
  Archive Device = /home/bacula/backups
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
  LabelMedia = yes
}
\end{verbatim}
\normalsize

\subsection{Wiederverwendung und Begrenzung der Anzahl der Volumes}
\label{Recycling1}
\index[general]{Wiederverwendung!Wiederverwendung und Begrenzung der Anzahl der Volumes}
\index[general]{Wiederverwendung und Begrenzung der Anzahl der Volumes}

Das oben beschriebene automatische Labeln der Volumes l\"{a}sst ein neues Problem
entstehen: es wird eine Art Volume-Management ben\"{o}tigt. Mit dem bisherigen
Schema wird jeden Tag ein neues Volume erstellt. Wenn Sie keine Aufbewarungszeitr\"{a}ume
konfiguriert haben, wird sich Ihre Katalog-Datenbank, zus\"{a}tzlich
zu den jeden Tag enstehenden Volumes, immer weiter mit den Informationen
\"{u}ber alle von Bacula gesicherten Dateien f\"{u}llen.

Bacula stellt folgende Konfigurations-Parameter zur Verf\"{u}gung
um diese Probleme automatisch handzuhaben:

\begin{enumerate}
\item der Aufbewarungszeitraum f\"{u}r Datei-Eintr\"{a}ge im Katalog, der
   \ilink{File Retention = ttt}{FileRetention} Eintrag in der Client-Konfiguration
\item der Aufbewarungszeitraum f\"{u}r Job-Eintr\"{a}ge im Katalog, der
   \ilink{Job Retention = ttt}{JobRetention} Eintrag in der Client-Konfiguration
\item Der
   \ilink{ AutoPrune = yes}{AutoPrune} Eintrag in der Client-Konfiguration
   erlaubt Bacula die beiden oberen Augbewarungszeitr\"{a}ume anzuwenden.
\item Der
   \ilink{ Volume Retention = ttt}{VolRetention} Eintrag in der Pool-Konfiguration
   bestimmt die Zeit, in der die Volumes nicht \"{u}berschrieben werden d\"{u}rfen.
\item Der
   \ilink{ AutoPrune = yes}{PoolAutoPrune} Eintrag in der Pool-Konfiguration
   um Bacula die automatische Anwendung der Volume Retention zu erlauben.
\item Der
   \ilink{ Recycle = yes}{PoolRecycle} Eintrag in der Pool-Konfiguration
   um Bacula zu erlauben, Volumes mit abgelaufener Aufbewarungzeit wiederzuverwenden.
\item Der
   \ilink{ Recycle Oldest Volume = yes}{RecycleOldest} Eintrag in der Pool-Konfiguration
   sagt Bacula, dass die Ablaufzeitr\"{a}ume nur auf das \"{a}lteste Volume im Pool
   angewendet werden sollen. Wenn alle enthaltenen Daten abgelaufen sind, wird das
   Volume wiederverwendet.
\item Der
   \ilink{ Recycle Current Volume = yes}{RecycleCurrent} Eintrag in der Pool-Konfiguration
   sagt Bacula, dass die Ablaufzeitr\"{a}ume nur auf das momentan gemountete Volume
   angewendet werden sollen. Wenn alle enthaltenen Daten abgelaufen sind, wird das
   Volume wiederverwendet.
\item Der
   \ilink{ Purge Oldest Volume = yes}{PurgeOldest} Eintrag in der Pool-Konfiguration
   erlaubt Bacula die Wiederverwendung des \"{a}ltesten Volumes im Pool
   zu erzwingen, wenn ein leeres Volume ben\"{o}tigt wird. 
   {\bf Achtung! Dabei werden keine Ablaufzeitr\"{a}ume beachtet. Das \"{a}lteste
   vorhandene Volume wird einfach widerverwendet. Normalerweise sollte
   "`Recycle Oldest Volume"' anstelle dieses Eintrags verwendet werden.}
\item Der
   \ilink{ Maximum Volumes = nnn}{MaxVolumes} Eintrag in der Pool-Konfiguration
   begrenzt die maximale Anzahl von Volumes die Bacula f\"{u}r diesen Pool erstellen darf.
\end{enumerate}

Die ersten drei Konfigurations-Eintr\"{a}ge (File Retention, Job Retention und AutoPrune)
bestimmen die Zeit, die die Job- und Datei-Eintr\"{a}ge in der Katalog-Datenbank
aufbewart werden. Eine genaue Beschreibung dieser Parameter finden Sie im Kapitel
\ilink{automatische Volume Wiederverwendung}{RecyclingChapter} in diesem Handbuch.

Volume Retention, AutoPrune und Recycle bestimmen, wie lange Bacula die Volumes
vor dem Wiederbeschreiben aufbewart. Auch das wird im Kapitel
\ilink{automatische Volume Wiederverwendung}{RecyclingChapter} n\"{a}her beschrieben.

Der Parameter "`Maximum Volumes"' kann in Verbindung mit der "`Volume Retention
Period"' dazu verwendet werden, die maximale Anzahl der Volumes zu begrenzen
die Bacula verwendet. Wenn eine angemessene Aufbewarungszeit f\"{u}r die Volumes
gesetzt ist, werden die Volumes, kurz bevor wieder ein neues Volume
ben\"{o}tigt wird, automatisch ablaufen. Das periodische Wiederverwenden einer
festen Anzahl von Volumes kann auch durch setzen von {\bf Recycle Oldest Volume = yes}
oder {\bf Recycle Current Volume = yes} erreicht werden. In diesem Fall wird Bacula,
wenn ein neues Volume ben\"{o}tigt wird, das enstsprechende Volume wiederverwenden.

\label{ConcurrentDiskJobs}
\section{parallele Festplatten-Jobs}
\index[general]{parallele Festplatten-Jobs}

Oberhalb wurde beschrieben, wie Sie ein einzelnes Storage-Ger\"{a}t
namens {\bf FileBackup} benutzen k\"{o}nnen, um die zu sichernden Daten
auf Volumes im Verzeichnis {\bf /home/bacula/backups} zu schreiben.
Nat\"{u}rlich ist es auch m\"{o}glich mehrere Jobs gleichzeitig auf
diesem einen Storage-Ger\"{a}t laufen zu lassen. Alle Jobs werden
dann parallel auf das Volume geschrieben.


Falls Sie mehrere Pools, was auch bedeutet mehrere Volumes,
verwenden wollen, oder m\"{o}chten das jeder Backup-Client
auf ein eigenes Volume gesichert wird, oder in ein seperates
Verzeichnis wie etwa {\bf /home/bacula/client1} und 
{\bf /home/bacula/client2}, dann werden Sie das mit der bisherigen
Konfiguration nicht bewerkstelligen k\"{o}nnen. Das liegt daran,
dass Bacula Festplatten-Volumes nach den gleichen Regeln
behandelt wie Bandlaufwerke. Ein Storage-Ger\"{a}t kann zu
jeden beliebigen Zeitpunkt nur ein einziges Volume enthalten.
Wenn Sie also gleichzeitig auf mehreren Volumes schreiben
m\"{o}chten, m\"{u}ssen Sie auch mehrere Storage-Ger\"{a}te
in der Konfiguration des Storage-Dienstes und des Director-Dienstes
angeben.

Mehrere Ger\"{a}te-Definitionen sind also notwendig, wenn auf mehr als
ein Storage-Ger\"{a}t oder in verschiedene Verzeichnisse gesichert werden soll.
Weiterhin m\"{u}ssen Sie wissen, dass in der Katalog-Datenbank nur die
Informationen \"{u}ber den "`Media-Type"' und nicht das spezielle 
Storage-Ger\"{a}t gespeichert werden. Dadurch wird es m\"{o}glich,
dass, zum Beispiel ein Tape, in jedem anderen kompatiblen Storage-Ger\"{a}t
gemounted werden kann. Diese Kompitabilit\"{a}t wird durch einen identischen
Media-Type der verschiedene Storage-Ger\"{a}te erreicht. Das ist auch
f\"{u}r Festplatten-Volumes g\"{u}ltig. Da ein Volume, das vom Storage-
Ger\"{a}t in dem Verzeichnis {\bf /home/bacula/backups} beschrieben
wurde, nicht von einem Storage-Ger\"{a}t gelesen werden kann, dass
{\bf /home/bacula/client1} als "`ArchiveDevice"' konfiguriert hat,
werden Sie Probleme bei der Wiederherstellung von Daten bekommen,
falls beide Ger\"{a}te mit {Media Type = File} angegeben sind.
Bei der Wiederherstellung von Daten wird Bacula das erste zur Verf\"{u}gung
stehende Laufwerk mit dem passenden "`Media Type"' w\"{a}hlen,
unabh\"{a}hngig davon, ob es das Richtige ist. Falls das verwirrend klingt,
erinnern Sie sich daran, dass der Director-Dienst nur den Volume-Namen
und den Media-Type kennt. Auf welchen Ger\"{a}t das Volume beschrieben wurde,
und unter welchem Verzeichnis, ist zu diesem Zeitpunkt unbekannt. Daher
m\"{u}ssen Sie Ihre Volumes, mittels des Media Types, den korrekten
Ger\"{a}ten zuordnen.

Das folgende Beispiel zeigt eine Konfiguration, bei der zwei Clients
zwei verschiedene Pools und Verzeichnisse zum speichern ihrer Daten
benutzen.

\label{Example2}
\section{Ein Beispiel}
\index[general]{Example }
%%TODO index => Example ..... for what??

Das folgende Beispiel ist nicht sehr praxisnah, aber es reicht aus, um in kurzer
Zeit, den Ablauf zu demonstrieren. In diesem Beispiel gibt es zwei Clients
die auf je einen Satz von 12 Volumes und in zwei verschiedene Verzeichnisse
gesichert werden. Jedes Volume wird nur einmal benutzt und innerhalb einer
Stunden werden vier Vollbackups gestartet. Damit dauert der komplette Lauf
\"{u}ber alle 12 Volumes pro Client nur 3 Stunden.

Der Schl\"{u}ssel hierbei ist, dass die beiden physikalischen Storage-
Ger\"{a}te unterschiedliche Media Types benutzen. Das erm\"{o}glicht
dem Director-Dienst, bei der Wiederherstellung von Daten, das richtige
Gera\"{a}t auszuw\"{a}hlen.

Die Director-Dienst-Konfiguration sind wie folgend aus:

\footnotesize
\begin{verbatim}
Director {
  Name = my-dir
  QueryFile = "~/bacula/bin/query.sql"
  PidDirectory = "~/bacula/working"
  WorkingDirectory = "~/bacula/working"
  Password = dir_password
}
Schedule {
  Name = "FourPerHour"
  Run = Level=Full hourly at 0:05
  Run = Level=Full hourly at 0:20
  Run = Level=Full hourly at 0:35
  Run = Level=Full hourly at 0:50
}
Job {
  Name = "RecycleExample"
  Type = Backup
  Level = Full
  Client = Rufus
  FileSet= "Example FileSet"
  Messages = Standard
  Storage = FileStorage
  Pool = Recycle
  Schedule = FourPerHour
}

Job {
  Name = "RecycleExample2"
  Type = Backup
  Level = Full
  Client = Roxie
  FileSet= "Example FileSet"
  Messages = Standard
  Storage = FileStorage1
  Pool = Recycle1
  Schedule = FourPerHour
}

FileSet {
  Name = "Example FileSet"
  Include {
	Options {
	compression=GZIP
	signature=SHA1 
		}
    File = /home/kern/bacula/bin
	  }
}
Client {
  Name = Rufus
  Address = rufus
  Catalog = BackupDB
  Password = client_password
}

Client {
  Name = Roxie
  Address = roxie
  Catalog = BackupDB
  Password = client1_password
}

Storage {
  Name = FileStorage
  Address = rufus
  Password = local_storage_password
  Device = RecycleDir
  Media Type = File
}

Storage {
  Name = FileStorage1
  Address = rufus
  Password = local_storage_password
  Device = RecycleDir1
  Media Type = File1
}

Catalog {
  Name = BackupDB
  dbname = bacula; user = bacula; password = ""
}
Messages {
  Name = Standard
  ...
}
Pool {
  Name = Recycle
  Use Volume Once = yes
  Pool Type = Backup
  LabelFormat = "Recycle-"
  AutoPrune = yes
  VolumeRetention = 2h
  Maximum Volumes = 12
  Recycle = yes
}

Pool {
  Name = Recycle1
  Use Volume Once = yes
  Pool Type = Backup
  LabelFormat = "Recycle1-"
  AutoPrune = yes
  VolumeRetention = 2h
  Maximum Volumes = 12
  Recycle = yes
}

\end{verbatim}
\normalsize

und die Konfiguration des Storage-Dienstes: 

\footnotesize
\begin{verbatim}
Storage {
  Name = my-sd
  WorkingDirectory = "~/bacula/working"
  Pid Directory = "~/bacula/working"
  MaximumConcurrentJobs = 10
}
Director {
  Name = my-dir
  Password = local_storage_password
}
Device {
  Name = RecycleDir
  Media Type = File
  Archive Device = /home/bacula/backups
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}

Device {
  Name = RecycleDir1
  Media Type = File1
  Archive Device = /home/bacula/backups1
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}

Messages {
  Name = Standard
  director = my-dir = all
}
\end{verbatim}
\normalsize

Mit ein wenig Anpassung k\"{o}nnen Sie dieses Beispiel als Grundlage
f\"{u}r einen w\"{o}chentlichen oder monatlichen Backup-Ablauf
verwenden. Beacht6en Sie dabei aber den zur Verf\"{u}gung stehenden
Festplattenplatz.

\label{MultipleDisks}
\section{Backup auf mehrere Festplatten}
\index[general]{Festplatten!Backup auf mehrere }
\index[general]{Backup auf mehrere Festplatten }

Bacula kann nat\"{u}rlich auch auf mehrere Festplatten sichern, dabei muss
aber jede Festplatte in der Storage-Dienst-Konfiguration als eigenes Ger\"{a}t
angegeben werden. Dann kann \"{u}ber die Client-Konfiguration das zu
benutzende Ger\"{a}t, also die Festplatte, ausgew\"{a}hlt werden. Zus\"{a}tzlich
muss jedes Storage-Ger\"{a}t einen anderen Media Type benutzen, damit Bacula
bei der Wiederherstellung von Daten das richtige Ger\"{a}t ausw\"{a}hlen kann.

Wenn Sie zwei Festplatten oder Partitionen als ein logisches Storage-Ger\"{a}t
verwenden wollen, wird es etwas komplizierter, da Bacula so ein vorgehen nicht
direkt unterst\"{u}tzt. Trotzdem ist es m\"{o}glich zwei Festplatten als ein
Ger\"{a}t anzusprechen, indem Sie die Volume-Dateien auf den Festplatten
verlinken.

Angenommen Sie haben zwei Festplatten namens {\bf /disk1} und {\bf/disk2}.
Wenn Sie jetzt die Standard-Konfiguration f\"{u}r ein Backup auf die erste
Festplatte anlegen, sieht Ihre Storage-Dienst-Konfiguration wie folgt aus:

\footnotesize
\begin{verbatim}
Device {
  Name = client1
  Media Type = File
  Archive Device = /disk1
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}
\end{verbatim}
\normalsize

Da es keinen Weg gibt diese Ger\"{a}te-Konfiguration auf beide Festplatten zeigen
zu lassen, m\"{u}ssen Sie die Volumes auf /disk2 auf folgende Weise von Hand erstellen:

\footnotesize
\begin{verbatim}
ln -s /disk2/Disk2-vol001 /disk1/Disk2-vol001
ln -s /disk2/Disk2-vol002 /disk1/Disk2-vol002
ln -s /disk2/Disk2-vol003 /disk1/Disk2-vol003
...
\end{verbatim}
\normalsize

An diesem Punkt k\"{o}nnen Sie die Volumes mit den folgenden Namen labeln:
{\bf Disk2-vol001}, {\bf Disk2-vol002}, ... . Bacula wird sie dann so benutzen
als w\"{a}ren sie auf /disk1, aber die Daten werden in Wirklichkeit auf /disk2
geschrieben. Die einzigen Unbequemlichkeit dabei sind, dass Sie die Namen
der Volumes ausdr\"{u}cklich angeben m\"{u}ssen und dass das automatische
Labeln der Volumes nur noch funktioniert, wenn die Label der Volumes
genau den Namen der Links entsprechen, die Sie angelegt haben.

Wichtig zu wissen ist, dass Bacula Volumes auf Festplatten, soweit wie
m\"{o}glich, als Bandlaufwerke zu behandelen zu versucht. Das bedeutet,
dass immer nur ein einziges Festplatten-Volume zur Zeit in einem,
in der Storage-Dienst-Konfiguration angebenen Ger\"{a}t, gemounted sein
kann. Sie k\"{o}nnen mehrere Backup-Jobs parallel auf das gerade
gemountete Volume schreiben lassen, aber wenn Sie die Jobs gleichzeitig
auf unterschiedliche Volumes schreiben lassen wollen, m\"{u}ssen Sie
mehrere Ger\"{a}te-Konfiguration, eine f\"{u}r jeden gleichzeitigen Job,
anlegen. Das ist dasselbe Vorgehen, wie es bei zwei Bandlaufwerken
erforderlich ist. Allerdings gibt es einen gro{\ss}en Unterschied,
die Volumes die Sie auf Festplatten erstellen k\"{o}nnen nicht so
ohne weiteres gegen einander ausgetauscht werden, wie es bei Bandlaufwerken
m\"{o}glich ist. Daher muss jedes Festplatten-Volume/-Ger\"{a}t einen
anderen Media Type verwenden, nur so kann sichergestellt werden,
dass Bacula bei der Wiederherstellung das korrekte Ger\"{a}t
ausw\"{a}hlt.

Ein Beispiel daf\"{u}r:

\footnotesize
\begin{verbatim}
Device {
  Name = Disk1
  Media Type = File1
  Archive Device = /disk1
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}

Device {
  Name = Disk2
  Media Type = File2
  Archive Device = /disk2
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}
\end{verbatim}
\normalsize

Mit den oben genannten Ger\"{a}te-Konfigurationen k\"{o}nnen Sie
zwei Backup-Jobs parallel auf zwei veschiedene Ger\"{a}te schreiben,
eine Job auf {\bf /disk1} und einen Job auf {\bf /disk2}. Durch den
unterschiedlichen Media Type kann Bacula das richtige Ger\"{a}tzur
Wiederherstellung von Daten bestimmen.

\label{MultipleClients}
\section{\"{U}berlegungen bez\"{u}glich mehrerer Clients}
\index[general]{Clients!\"{U}berlegungen bez\"{u}glich mehrerer }
\index[general]{mehrere Clients}

Bevor wir dem obigen Beispiel einen weiteren Client hinzuf\"{u}gen,
sollten, sollten folgende Aspekte bedacht werden:

\begin{itemize}
\item auch wenn der zweite Client auf den gleichen Satz Volumes gesichert werden kann,
   wollen Sie eventuell einen eigene Satz Volumes f\"{u}r ihn verwenden.
\item Sie k\"{o}nnen die Daten auf anderen Volumes sichern, indem Sie einen zweiten
   Pool anlegen, der einen anderen Namen hat und ein anderes {\bf LabelFormat} verwendet.
\item Wenn Sie die Volumes f\"{u}r den zweiten Client in einem anderen Verzeichnis,
   oder zur Lastverteilung auf einer anderen Festplatte, speichern m\"{o}chten,
   m\"{u}ssen Sie ein zweites Storage-Ger\"{a}t in der Storage-Dienst-Konfiguration
   anlegen. Dabei muss der Ger\"{a}te-Name anders sein und das {\bf ArchiveDevice}
   darf anders sein. Um sicherzustellen, dass sich die Volumes eindeutig den
   Ger\"{a}ten und Pools zuordnen lassen, verwenden Sie unterschiedliche Media Types.
\end{itemize}

Hier ein Beispiel f\"{u}r zwei Backup-Clients die jeder in einen anderen
Pool und auf unterschiedlich viele Volumes gesichert werden. Zus\"{a}tzlich
schreiben sie in unterschiedliche Verzeichnisse mit unterschiedlich gelabelten
Volumes.

Hier die Konfiguration des Director-Dienstes: 

\footnotesize
\begin{verbatim}
Director {
  Name = my-dir
  QueryFile = "~/bacula/bin/query.sql"
  PidDirectory = "~/bacula/working"
  WorkingDirectory = "~/bacula/working"
  Password = dir_password
}
# Basic weekly schedule
Schedule {
  Name = "WeeklySchedule"
  Run = Level=Full fri at 1:30
  Run = Level=Incremental sat-thu at 1:30
}
FileSet {
  Name = "Example FileSet"
  Include {
        Options {
        compression=GZIP
        signature=SHA1
                }
    File = /home/kern/bacula/bin
          }
}
Job {
  Name = "Backup-client1"
  Type = Backup
  Level = Full
  Client = client1
  FileSet= "Example FileSet"
  Messages = Standard
  Storage = File1
  Pool = client1
  Schedule = "WeeklySchedule"
}
Job {
  Name = "Backup-client2"
  Type = Backup
  Level = Full
  Client = client2
  FileSet= "Example FileSet"
  Messages = Standard
  Storage = File2
  Pool = client2
  Schedule = "WeeklySchedule"
}
Client {
  Name = client1
  Address = client1
  Catalog = BackupDB
  Password = client1_password
  File Retention = 7d
}
Client {
  Name = client2
  Address = client2
  Catalog = BackupDB
  Password = client2_password
}
# Two Storage definitions with different Media Types
#  permits different directories
Storage {
  Name = File1
  Address = rufus
  Password = local_storage_password
  Device = client1
  Media Type = File1
}
Storage {
  Name = File2
  Address = rufus
  Password = local_storage_password
  Device = client2
  Media Type = File2
}
Catalog {
  Name = BackupDB
  dbname = bacula; user = bacula; password = ""
}
Messages {
  Name = Standard
  ...
}
# Two pools permits different cycling periods and Volume names
# Cycle through 15 Volumes (two weeks)
Pool {
  Name = client1
  Use Volume Once = yes
  Pool Type = Backup
  LabelFormat = "Client1-"
  AutoPrune = yes
  VolumeRetention = 13d
  Maximum Volumes = 15
  Recycle = yes
}
# Cycle through 8 Volumes (1 week)
Pool {
  Name = client2
  Use Volume Once = yes
  Pool Type = Backup
  LabelFormat = "Client2-"
  AutoPrune = yes
  VolumeRetention = 6d
  Maximum Volumes = 8
  Recycle = yes
}
\end{verbatim}
\normalsize

und die Storage-Dienst-Konfiguration:

\footnotesize
\begin{verbatim}
Storage {
  Name = my-sd
  WorkingDirectory = "~/bacula/working"
  Pid Directory = "~/bacula/working"
  MaximumConcurrentJobs = 10
}
Director {
  Name = my-dir
  Password = local_storage_password
}
# Archive directory for Client1
Device {
  Name = client1
  Media Type = File1
  Archive Device = /home/bacula/client1
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}
# Archive directory for Client2
Device {
  Name = client2
  Media Type = File2
  Archive Device = /home/bacula/client2
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}
Messages {
  Name = Standard
  director = my-dir = all
}
\end{verbatim}
\normalsize
