%%
%%

\chapter{Die Bootstrap-Datei}
\label{BootstrapChapter}
\index[general]{Datei!Bootstrap }
\index[general]{Bootstrap-Datei }

Die Informationen in diesem Kapitel sollen Ihnen helfen, entweder eigene Bootstrap-Dateien
zu erstellen, oder die von Bacula erzeugten zu editieren. Da die Bootstrap-Datei automatisch beim ausf\"{u}hren des
\ilink{restore}{_ConsoleChapter} Console-Kommandos, oder wenn Sie \ilink{ Write Bootstrap}{writebootstrap}
in den Job-Eintr\"{a}gen der Director-Dienst-Konfiguration angeben, erzeugt wird,
brauchen Sie das genaue Format eigentlich nicht wissen.

Die Bootstrap-Datei enth\"{a}lt Informationen im ASCII-Format,
die pr\"{a}zise angeben, welche Dateien wiederhergestellt werden sollen, auf welchem Volume sie liegen
und wo auf dem Volume. Es ist ein relativ kompaktes Format diese Informationen anzugeben, aber es ist
lesbar f\"{u}r Menschen und kann mit einem Texteditor ge\"{a}ndert werden.

\section{Bootstrap-Datei Format}
\index[general]{Format!Bootstrap}
\index[general]{Bootstrap-Datei Format }

Das generelle Format der Bootstrap-Datei ist:

{\bf \lt{}Schl\"{u}sselwort\gt{} = \lt{}Wert\gt{}} 

Wobei jedes Schl\"{u}sselwort und sein Wert angeben, welche Dateien wiederhergestellt werden.
Genauer gesagt, das Schl\"{u}sselwort und sein Wert dienen dazu, zu limitieren welche
Dateien wiederhergestellt werden, sie verhalten sich wie ein Filter.
Das Fehlen eines Schl\"{u}sselwort bedeutet, dass alle Dateien angenommen werden.

In der Bootstrap-Datei werden Leerzeilen und Zeilen beginnent mit {\#} ignoriert.

Es existieren Schl\"{u}sselw\"{o}rter, die die Filterung nach Volume, Client, Job, Fileindex, Session ID,
Session Time usw. erlauben.

Je mehr Schl\"{u}sselw\"{o}rter Sie angeben, desto genauer ist die Auswahl der Dateien, die wiederhergestellt werden.
Alle Schl\"{u}sselw\"{o}rter werden \"{u}ber {\bf UND} verkn\"{u}pft.

Ein Beispiel:

\footnotesize
\begin{verbatim}
Volume = Test-001
VolSessionId = 1
VolSessionTime = 108927638
\end{verbatim}
\normalsize

veranlasst den Storage-Dienst (oder das {\bf bextract} Programm), nur die Dateien wiederherzustellen, die
auf dem Volume Test-001 vorhanden sind {\bf UND} eine VolumeSessionID mit 1 haben {\bf UND} deren VolumeSessionTime
gleich 108927638 ist.

Hier ist eine Liste aller erlaubten Schl\"{u}sselw\"{o}rter in der Reihenfolge in der sie auf
die auf dem Volume befindlichen Daten angewendet werden:

\begin{description}

\item [Volume]
   \index[general]{Volume }
   Dieser Wert gibt an, auf welches Volume die folgenden Schl\"{u}sselw\"{o}rter angewendet werden sollen.
   Falls in der Bootstrap-Datei ein zweites Volume angegeben wird, beziehen sich die darauf folgenden
   Schl\"{u}sselw\"{o}rter auf dieses Volume.
   Wenn der Name des Volumes Leerzeichen enth\"{a}lt, muss er in Anf\"{u}hrungszeichen gesetzt werden.
   Mindestens ein Volume muss angegeben werden.

\item [Count]
   \index[general]{Count}
   Dieser Wert ist die Gesamtanzahl der Dateien, die von dem Volume gelesen werden sollen.
   Daran erkennt der Storage-Dienst, wann er das Lesen beenden soll.
   Dieser Wert ist optional.

\item [VolFile]
   \index[general]{VolFile}
   Dieser Wert gibt eine Dateinummer oder eine Liste bzw. einen Bereich von Dateinummern an,
   die auf dem aktuellen Volume gefunden werden soll. Die Dateinummer stellt die physikalische
   Datei auf dem Volume da, wo die Daten gespeichert sind. Bei einem Tape wird dieser Wert benutzt,
   um das Band richtig zu positionieren und wenn das Laufwerk die letzte angegebene Datei gelesen hat,
   wird der Lesevorgang gestoppt.

\item [VolBlock]
   \index[general]{VolBlock}
   Dieser Wert gibt eine Blocknummer oder eine Liste bzw. einen Bereich von Blocknummern an,
   die auf dem aktuellen Volume gefunden werden soll. Die Blocknummer stellt die physikalischen
   Bl\"{o}cke auf dem Volume da, wo die Daten gespeichert sind.

\item [VolSessionTime]
   \index[general]{VolSessionTime }
   Dieser Wert gibt die Volume-Session-Zeit an, die auf dem aktuellen Volume gefunden werden soll.

\item [VolSessionId]
   \index[general]{VolSessionId }
   Dieser Wert gibt eine Volume-Session-ID oder eine Liste bzw. einen Bereich von Volume-Sesion-IDs an,
   die auf dem aktuellen Volume gefunden werden soll. Jedes Paar aus Volume-Session-ID und Volume-Session-Zeit,
   stimmt mit einem einzelnen Job \"{u}berein, der auf dem Volume gespeichert ist.

\item [JobId]
   \index[general]{JobId }
   Dieser Wert gibt eine Job-ID oder eine Liste bzw. einen Bereich von Job-Ids an,
   die auf dem aktuellen Volume gefunden werden soll. Beachten Sie bitte, dass die Job-ID
   eventuell nicht eindeutig ist, falls Sie mehrere Director-Dienste haben, oder falls Sie
   Ihre Datenbank neu initialisiert haben sollten. Der Job-ID-Filter funktioniert nicht, wenn
   Sie mehrere Jobs gleichzeitig haben laufen lassen.
   Dieser Wert ist optional und wird von Bacula nicht zum zur\"{u}cksichern ben\"{o}tigt.

\item [Job]
   \index[general]{Job }
   Dieser Wert gibt einen Job-Namen oder eine Liste von Job-Namen an, die auf dem aktuellen
   Volume gefunden werden sollen. Der Job-Name stimmt mit einem einzigartigen Paar aus Volume-Session-Zeit
   und VolumeSessionID \"{u}berein, allerdings ist er f\"{u}r Menschen ein bischen leichter zu lesen.
   Gew\"{o}hnliche regul\"{a}re Ausdr\"{u}cke k\"{o}nnen benutzt werden, um einen entsprechenden Job-Namen zu finden.
   Der Job-Name-Filter funktioniert nicht, wenn Sie mehrere Jobs gleichzeitig haben laufen lassen.
   Dieser Wert ist optional und wird von Bacula nicht zum zur\"{u}cksichern ben\"{o}tigt.

\item [Client]
   \index[general]{Client }
   Dieser Wert gibt einen Client-Namen oder eine Liste von Client-Namen an, dia auf dem aktuellen
   Volume gefunden werden soll. Gew\"{o}hnliche regul\"{a}re Ausdr\"{u}cke k\"{o}nnen benutzt werden,
   um einen entsprechenden Job-Namen zu finden. Der Client-Filter funktioniert nicht,
   wenn Sie mehrere Jobs gleichzeitig haben laufen lassen.
   Dieser Wert ist optional und wird von Bacula nicht zum zur\"{u}cksichern ben\"{o}tigt.

\item [FileIndex]
   \index[general]{FileIndex }
   Dieser Wert gibt einen File-Index oder eine Liste bzw. einen Bereich von File-Indexen an,
   die auf dem aktuellen Volume gefunden werden soll. Jedes File (Datei) das auf einem Volume gespeichert ist,
   hat f\"{u}r seine Session einen einzigartigen File-Index. Bei jeder Session wird f\"{u}r das erste
   gespeicherte File der File-Index auf eins gesetzt und dann mit jedem weiteren File um eins erh\"{o}ht.

   F\"{u}r ein beliebiges Volume bedeutet das, dass die drei Werte von Volume-Session-ID, Volume-Session-Time
   und File-Index zusammen eine einzelne einzigartige Datei auf einem Volume angeben. Diese Datei ist eventuell
   mehrfach auf dem Volume vorhanden, aber f\"{u}r jedes Vorkommen gibt es eine einzigartige Kombination
   dieser drei Werte. Diese drei Werte sind f\"{u}r jede Datei in der Katalog-Datenbank gespeichert.

   Um eine einzelne Datei wiederherzustellen, ist die Angabe eines Wertes (oder einer Liste von File-Indexen)
   erforderlich.

\item [FileRegex]
   \index[general]{FileRegex }
   Hier k\"{o}nnen Sie einen regul\"{a}ren Ausdruck angeben, um nur Dateien wiederherzustellen,
   auf die diesen Ausdruck passt.

\item [Slot]
   \index[general]{Slot }
   Dieser Wert gibt den Autochanger-Slot an. F\"{u}r jedes Volume darf nur ein Slot angegeben werden.

\item [Stream]
   \index[general]{Stream }
   Dieser Wert gibt einen Stream (Strom) oder eine Liste bzw. einen Bereich von Streams an.
   Solange Sie nicht wirklich wissen, was Sie tun, (wenn Sie das interne Arbeiten von Bacula kennen),
   sollten Sie auf diese Angabe verzichten.
   Dieser Wert ist optional und wird von Bacula nicht zum zur\"{u}cksichern ben\"{o}tigt.

\item [*JobType]
   \index[general]{*JobType }
   Noch nicht implementiert.

\item [*JobLevel]
   \index[general]{*JobLevel }
   Noch nicht implementiert.
\end{description}

Bei der Angabe des Volume ist zu bedenken, dass dies der erste Parameter sein muss.
Alle anderen Parameter k\"{o}nnen in beliebiger Reihenfolge und Anzahl hinter einem
Volume-Eintrag angegeben werden.

Mehrere Volume-Eintr\"{a}ge k\"{o}nnen in der selben Bootstrap-Datei vorkommen,
aber mit jedem Vorkommen beginnt ein neuer Satz an Filter, g\"{u}ltig f\"{u}r
das abgegebene Volume.

Beim verarbeiten der Bootstrap-Datei werden alle Schl\"{u}sselw\"{o}rter
unterhalb eines Volume-Eintrags mit {\bf UND} verkn\"{u}pft.
Also wird:

\footnotesize
\begin{verbatim}
Volume = Test-01
Client = "My machine"
FileIndex = 1
\end{verbatim}
\normalsize

auf alle Dateien auf dem Volume Test-01 {\bf UND} von Client My machine
{\bf UND} mit dem Fileindex 1 passen.

Mehrfach angegebene Schl\"{u}sselw\"{o}rter werden mit {\bf ODER} verkn\"{u}pft.
Also wird:

\footnotesize
\begin{verbatim}
Volume = Test-01
Client = "My machine"
Client = "Backup machine"
FileIndex = 1
\end{verbatim}
\normalsize

auf alle Dateien auf dem Volume Test-01 {\bf UND} von Client My machine
{\bf ODER} vom Client Backup machine {\bf UND} mit dem Fileindex 1 passen.

F\"{u}r Zahlenwerte k\"{o}nnen Sie einen Bereich oder eine Liste angeben,
f\"{u}r alle anderen Parameter, bis auf Volumes, nur eine Liste.
Eine Liste ist gleichbedeutend mit mehrfachen Angaben eines Parameters.
Ein Beispiel 

\footnotesize
\begin{verbatim}
Volume = Test-01
Client = "My machine", "Backup machine"
FileIndex = 1-20, 35
\end{verbatim}
\normalsize

passt auf alle Dateien auf dem Volume Test-01 {\bf UND} von Client My machine
{\bf ODER} vom Client Backup machine {\bf UND} mit dem Fileindex 1 {\bf ODER}
2 {\bf ODER} 3 ... {\bf ODER} 20 {\bf ODER} 35.

Wie oben erw\"{a}hnt, k\"{o}nnen mehrere Volume-Eintr\"{a}ge in der selben
Bootstrap-Datei stehen. Jedes Vorkommen eines Volume-Eintrags beginnt einen neuen
Satz an Filterregeln der auf dem angegebenen Volume angewendet wird und mit weiteren
Volume-Eintr\"{a}gen \"{u}ber {\bf ODER} verkn\"{u}pft wird.

Als ein Beispiel nehmen wir an, dass wir, mit dem Console-Kommando {\bf query} ,
nach dem Satz Volumes fragen, die ben\"{o}tigt werden, um alle Dateien des Clients Rufus
wiederherstellen zu k\"{o}nnen:

\footnotesize
\begin{verbatim}
Using default Catalog name=MySQL DB=bacula
*query
Available queries:
     1: List Job totals:
     2: List where a file is saved:
     3: List where the most recent copies of a file are saved:
     4: List total files/bytes by Job:
     5: List total files/bytes by Volume:
     6: List last 10 Full Backups for a Client:
     7: List Volumes used by selected JobId:
     8: List Volumes to Restore All Files:
Choose a query (1-8): 8
Enter Client Name: Rufus
+-------+------------------+------------+-----------+----------+------------+
| JobId | StartTime        | VolumeName | StartFile | VolSesId | VolSesTime |
+-------+------------------+------------+-----------+----------+------------+
| 154   | 2002-05-30 12:08 | test-02    | 0         | 1        | 1022753312 |
| 202   | 2002-06-15 10:16 | test-02    | 0         | 2        | 1024128917 |
| 203   | 2002-06-15 11:12 | test-02    | 3         | 1        | 1024132350 |
| 204   | 2002-06-18 08:11 | test-02    | 4         | 1        | 1024380678 |
+-------+------------------+------------+-----------+----------+------------+
\end{verbatim}
\normalsize

Die Ausgabe zeigt uns, dass wir vier Jobs wiederherstellen m\"{u}ssen.
Der erste ist eine vollst\"{a}ndige Sicherung, und die drei folgenden sind inkrementelle Sicherungen.

Die folgende Bootstrap-Datei wird ben\"{o}tigt um alle Dateien wiederherzustellen:

\footnotesize
\begin{verbatim}
Volume=test-02
VolSessionId=1
VolSessionTime=1022753312
Volume=test-02
VolSessionId=2
VolSessionTime=1024128917
Volume=test-02
VolSessionId=1
VolSessionTime=1024132350
Volume=test-02
VolSessionId=1
VolSessionTime=1024380678
\end{verbatim}
\normalsize

Als letztes Beispiel nehmen wir an, dass die erste vollst\"{a}ndige Sicherung sich
\"{u}ber zwei verschiedene Volumes erstreckt. Die Ausgabe des Console-Kommandos
{\bf query} sieht eventuell so aus:

\footnotesize
\begin{verbatim}
+-------+------------------+------------+-----------+----------+------------+
| JobId | StartTime        | VolumeName | StartFile | VolSesId | VolSesTime |
+-------+------------------+------------+-----------+----------+------------+
| 242   | 2002-06-25 16:50 | File0003   | 0         | 1        | 1025016612 |
| 242   | 2002-06-25 16:50 | File0004   | 0         | 1        | 1025016612 |
| 243   | 2002-06-25 16:52 | File0005   | 0         | 2        | 1025016612 |
| 246   | 2002-06-25 19:19 | File0006   | 0         | 2        | 1025025494 |
+-------+------------------+------------+-----------+----------+------------+
\end{verbatim}
\normalsize

und die folgende Bootstrap-Datei wird ben\"{o}tigt, um diese Dateien wiederherzustellen:

\footnotesize
\begin{verbatim}
Volume=File0003
VolSessionId=1
VolSessionTime=1025016612
Volume=File0004
VolSessionId=1
VolSessionTime=1025016612
Volume=File0005
VolSessionId=2
VolSessionTime=1025016612
Volume=File0006
VolSessionId=2
VolSessionTime=1025025494
\end{verbatim}
\normalsize

\section{automatische Erzeugung der Bootstrap-Datei}
\index[general]{Datei!automatische Erzeugung der Bootstrap-}
\index[general]{automatische Erzeugung der Bootstrap-Datei }


Eine Sache ist vermutlich wissenswert: die Bootstrap-Dateien die automatisch
am Ende eines jeden Jobs erzeugt werden, sind nicht so optimiert wie die, die
durch das Console-Kommando {\bf restore} erzeugt werden.
Das ist so, weil die Bootstrap-Dateien, die am Ende des Jobs erstellt werden,
alle Dateien enthalten, die f\"{u}r diesen Job auf das Volume geschrieben wurden.
Die Konsequenz ist, dass alle Dateien die w\"{a}rend eines inkrementellen oder differenziellen
Jobs geschrieben wurden, beim Wiederherstellen zun\"{a}chst von der vollst\"{a}ndigen Sicherung
wiederhergestellt werden und dann von der inkrementellen oder differenziellen Sicherung.

Wenn die Bootstrap-Datei f\"{u}r die Wiederherstellung erstellt wird,
wird immer nur eine Version der Datei (die aktuellste) zur Wiederherstellung aufgelistet.

Falls Ihr Rechner noch ein bischen Zeit \"{u}brig hat, k\"{o}nnen Sie Ihre
Bootstrap-Dateien optimieren, indem Sie das folgende tun:

\footnotesize
\begin{verbatim}
   ./bconsole
   restore client=xxx select all
   done
   no
   quit
   Backup bootstrap file.
\end{verbatim}
\normalsize

Das wird allerdings nicht funktionieren, wenn Ihr Client mehrere Filesets hat,
denn dann wird noch eine weitere Eingabe erforderlich.
Das Console-Kommando {\bf restore client=xxx select all} erstellt den Restore-Dateibaum
und w\"{a}hlt alle Dateien aus, {\bf done} beendet den Auswahlmodus, dann wird die Bootstrap-Datei f\"{u}r diesen
Wiederherstellungs-Job geschrieben.
Das {\bf no} beantwortet die Frage {\bf Do you want to run this (yes/mod/no)}.
{\bf quit} beendet das Console-Programm, danach kann die neu erstellte Bootstrap-Datei gesichert werden.

\label{bscanBootstrap}
\section{Bootstrap-Datei f\"{u}r bscan}
\index[general]{bscan}
\index[general]{bscan!Bootstrap-Datei}
\index[general]{bscan Bootstrap-Datei}
Wenn Sie mit dem bscan-Programm sehr viele Volumes abfragen m\"{u}ssen,
wird Ihr Kommando eventuell das Limit der Kommandozeilel\"{a}nge \"{u}berschreiten (511 Zeichen).
In dem Fall, k\"{o}nnen Sie eine einfache Bootstrap-Datei erzeugen, die nur Volume-Namen enth\"{a}lt.
Ein Beispiel:

\footnotesize
\begin{verbatim}
Volume="Vol001"
Volume="Vol002"
Volume="Vol003"
Volume="Vol004"
Volume="Vol005"
\end{verbatim}
\normalsize


\section{ein weiteres Beispiel der Bootstrap-Datei}
\index[general]{Beispiel ein weiteres!Bootstrap-Datei }
\index[general]{ein weiteres Beispiel der Bootstrap-Datei }

Wenn Sie nur einen einzigen Job vom Volume lesen wollen, k\"{o}nnen Sie das
durch ausw\"{a}hlen der Job-Id tun (Funktion nicht getestet), oder besser noch,
Sie geben die VolumeSessionTime und VolumeSessionID an, falls Sie sie wissen.
(Die beiden Werte werden auf dem Job-Report ausgegeben und sind in der Katalog-Datenbank
zu finden.)
Die VolumeSessionTime und VolumeSessionID anzugeben ist auch die Art,
wie Bacula Wiederherstellungen durchf\"{u}hrt.
Eine Bootstrap-Datei kann dann wie folgt aussehen:

\footnotesize
\begin{verbatim}
Volume="Vol001"
VolSessionId=10
VolSessionTime=1080847820
\end{verbatim}
\normalsize

Wenn Sie wissen, wie viele Dateien gesichert wurden (siehe den Job-Report),
k\"{o}nnen Sie die Auswahl enorm beschleunigen, indem Sie der Bootstrap-Datei
folgendes hinzuf\"{u}gen (angenommen es waren 157 Dateien):

\footnotesize
\begin{verbatim}
FileIndex=1-157
Count=157
\end{verbatim}
\normalsize

Letztendlich, wenn Sie auch die File-Nummer wissen, wo auf dem Volume die
ausgew\"{a}hlten Dateien liegen, k\"{o}nnen Sie das bcopy-Programm veranlassen,
zum richtigen File auf dem Volumen zu springen, ohne jeden Eintrag lesen zu m\"{u}ssen:

\footnotesize
\begin{verbatim}
VolFile=20
\end{verbatim}
\normalsize

Bootstrap-Dateien sind weder magisch noch kompliziert. Sie zu lesen und Bacula sinnvoll mit ihnen
arbeiten zu lassen *ist* magisch, aber darum brauchen Sie sich nicht k\"{u}mmern.

Wenn Sie eine *echte* Bootstrap-Datei sehen wollen, starten sie das Console-Programm und geben Sie
{\bf restore} ein, w\"{a}hlen ein paar Dateien aus und antworten mit {\bf no},
wenn Sie gefragt werden, ob Sie die Wiederherstellung starten wollen. Dann finden Sie die Bootstrap-Datei
im Arbeitsverzeichnis des Director-Dienstes (z.B. unter /var/lib/bacula/backup-dir.restore.2.bsr).
